1
1
import { REV_LATEST , DOM_READY , main , show , hide , message , get_path_coverage , get_history , get_zero_coverage_data , build_navbar , render , get_source } from './common.js' ;
2
- import { zero_coverage_display } from './zero_coverage_report.js' ;
2
+ import { buildRoute , readRoute , updateRoute } from './route.js' ;
3
+ import { zero_coverage_display , zero_coverage_menu } from './zero_coverage_report.js' ;
3
4
import './style.css' ;
4
5
import Prism from 'prismjs' ;
5
6
import Chartist from 'chartist' ;
@@ -8,6 +9,14 @@ import 'chartist/dist/chartist.css';
8
9
const VIEW_ZERO_COVERAGE = 'zero' ;
9
10
const VIEW_BROWSER = 'browser' ;
10
11
12
+
13
+ function browser_menu ( revision ) {
14
+ let context = {
15
+ revision,
16
+ } ;
17
+ render ( 'menu_browser' , context , 'menu' ) ;
18
+ }
19
+
11
20
async function graphHistory ( history , path ) {
12
21
if ( history === null ) {
13
22
message ( 'warning' , `No history data for ${ path } ` ) ;
@@ -53,7 +62,7 @@ async function graphHistory(history, path) {
53
62
// Load revision from graph when a point is clicked
54
63
let revision = history [ evt . index ] . changeset ;
55
64
evt . element . _node . onclick = function ( ) {
56
- updateHash ( revision , path ) ;
65
+ updateRoute ( { revision} ) ;
57
66
} ;
58
67
59
68
// Display revision from graph when a point is overed
@@ -71,7 +80,12 @@ async function graphHistory(history, path) {
71
80
async function showDirectory ( dir , revision , files ) {
72
81
let context = {
73
82
navbar : build_navbar ( dir , revision ) ,
74
- files : files ,
83
+ files : files . map ( file => {
84
+ file . route = buildRoute ( {
85
+ path : file . path
86
+ } ) ;
87
+ return file ;
88
+ } ) ,
75
89
revision : revision || REV_LATEST ,
76
90
file_name : function ( ) {
77
91
// Build filename relative to current dir
@@ -125,49 +139,29 @@ async function showFile(file, revision) {
125
139
Prism . highlightAll ( output ) ;
126
140
}
127
141
128
- function readHash ( ) {
129
- // Reads changeset & path from current URL hash
130
- let hash = window . location . hash . substring ( 1 ) ;
131
- let pos = hash . indexOf ( ':' ) ;
132
- if ( pos === - 1 ) {
133
- return [ '' , '' ] ;
134
- }
135
- return [
136
- hash . substring ( 0 , pos ) ,
137
- hash . substring ( pos + 1 ) ,
138
- ]
139
- }
140
-
141
- function updateHash ( newChangeset , newPath ) {
142
- // Set the URL hash with both changeset & path
143
- let [ changeset , path ] = readHash ( ) ;
144
- changeset = newChangeset || changeset || REV_LATEST ;
145
- path = newPath || path || '' ;
146
- window . location . hash = '#' + changeset + ':' + path ;
147
- }
148
-
149
142
async function load ( ) {
150
- let [ revision , path ] = readHash ( ) ;
143
+ let route = readRoute ( ) ;
151
144
152
145
// Reset display, dom-safe
153
146
hide ( 'history' ) ;
154
147
hide ( 'output' ) ;
155
- message ( 'loading' , 'Loading coverage data for ' + ( path || 'mozilla-central' ) + ' @ ' + ( revision || REV_LATEST ) ) ;
148
+ message ( 'loading' , 'Loading coverage data for ' + ( route . path || 'mozilla-central' ) + ' @ ' + ( route . revision || REV_LATEST ) ) ;
156
149
157
150
// Load only zero coverage for that specific view
158
- if ( revision === VIEW_ZERO_COVERAGE ) {
151
+ if ( route . view === VIEW_ZERO_COVERAGE ) {
159
152
let zero_coverage = await get_zero_coverage_data ( ) ;
160
153
return {
161
154
view : VIEW_ZERO_COVERAGE ,
162
- path,
155
+ path : route . path ,
163
156
zero_coverage,
157
+ route,
164
158
}
165
159
}
166
160
167
161
try {
168
162
var [ coverage , history ] = await Promise . all ( [
169
- get_path_coverage ( path , revision ) ,
170
- get_history ( path ) ,
163
+ get_path_coverage ( route . path , route . revision ) ,
164
+ get_history ( route . path ) ,
171
165
] ) ;
172
166
} catch ( err ) {
173
167
console . warn ( 'Failed to load coverage' , err ) ;
@@ -178,54 +172,38 @@ async function load() {
178
172
179
173
return {
180
174
view : VIEW_BROWSER ,
181
- path,
182
- revision,
175
+ path : route . path ,
176
+ revision : route . revision ,
177
+ route,
183
178
coverage,
184
179
history,
185
180
} ;
186
181
}
187
182
188
183
async function display ( data ) {
189
184
190
- // Toggle menu per views
191
- if ( data . view === VIEW_BROWSER ) {
192
- show ( 'menu_browser' ) ;
193
- hide ( 'menu_zero' ) ;
194
- } else if ( data . view === VIEW_ZERO_COVERAGE ) {
195
- show ( 'menu_zero' ) ;
196
- hide ( 'menu_browser' ) ;
197
- } else {
198
- message ( 'error' , 'Invalid view : ' + data . view ) ;
199
- }
200
-
201
- // Revision input management
202
- const revision = document . getElementById ( 'revision' ) ;
203
- revision . onkeydown = async function ( evt ) {
204
- if ( evt . keyCode === 13 ) {
205
- updateHash ( data . revision . value ) ;
206
- }
207
- } ;
208
-
209
- // Also update the revision element
210
- if ( data . revision && data . revision != REV_LATEST ) {
211
- let input = document . getElementById ( 'revision' ) ;
212
- input . value = data . revision ;
213
- }
214
-
215
185
if ( data . view === VIEW_ZERO_COVERAGE ) {
186
+ await zero_coverage_menu ( data . route ) ;
216
187
await zero_coverage_display ( data . zero_coverage , data . path ) ;
217
188
218
- } else if ( data . view === VIEW_BROWSER && data . coverage . type === 'directory' ) {
219
- hide ( 'message' ) ;
220
- await graphHistory ( data . history , data . path ) ;
221
- await showDirectory ( data . path , data . revision , data . coverage . children ) ;
189
+ } else if ( data . view === VIEW_BROWSER ) {
190
+ browser_menu ( data . revision ) ;
191
+
192
+ if ( data . coverage . type === 'directory' ) {
193
+ hide ( 'message' ) ;
194
+ await graphHistory ( data . history , data . path ) ;
195
+ await showDirectory ( data . path , data . revision , data . coverage . children ) ;
222
196
223
- } else if ( data . view === VIEW_BROWSER && data . coverage . type === 'file' ) {
224
- await showFile ( data . coverage , data . revision ) ;
197
+ } else if ( data . coverage . type === 'file' ) {
198
+ await showFile ( data . coverage , data . revision ) ;
199
+
200
+ } else {
201
+ message ( 'error' , 'Invalid file type: ' + data . coverate . type ) ;
202
+ }
225
203
226
204
} else {
227
- message ( 'error' , 'Invalid file type : ' + data . coverage . type ) ;
205
+ message ( 'error' , 'Invalid view : ' + data . view ) ;
228
206
}
229
207
}
230
208
231
- main ( load , display , [ 'third_party' , 'headers' , 'completely_uncovered' , 'cpp' , 'js' , 'java' , 'rust' , 'last_push' ] )
209
+ main ( load , display ) ;
0 commit comments