@@ -9,6 +9,26 @@ const removed_functions = document.getElementById('removed_functions');
9
9
const changed_types = document . getElementById ( 'changed_types' ) ;
10
10
const changed_functions = document . getElementById ( 'changed_functions' ) ;
11
11
12
+ const collapsed_diff = [ ] ;
13
+ for ( const layer of DIFF ) {
14
+ const cdl = collapsed_diff . length ;
15
+ if ( cdl === 0
16
+ || collapsed_diff [ cdl - 1 ] . layer === null
17
+ || collapsed_diff [ cdl - 1 ] . layer !== layer . layer ) {
18
+ collapsed_diff . push ( layer ) ; // first or different
19
+ } else {
20
+ collapsed_diff [ cdl - 1 ] = layer ; // replace same layer (keep latest)
21
+ }
22
+ }
23
+
24
+ let used_diff = collapsed_diff ;
25
+
26
+ function change_used_diff ( event ) {
27
+ used_diff = event . target . checked ? collapsed_diff : DIFF ;
28
+ fill_select_boxes ( ) ;
29
+ load_diff ( ) ;
30
+ }
31
+
12
32
function layer_name ( layer ) {
13
33
const name = layer [ 'layer' ] == null ? 'Unknown layer' : `Layer ${ layer [ 'layer' ] } ` ;
14
34
const date = new Date ( layer [ 'date' ] * 1000 ) ;
@@ -36,6 +56,29 @@ function toggle_expand(event) {
36
56
}
37
57
}
38
58
59
+ function fill_select_boxes ( ) {
60
+ empty_node ( select_from ) ;
61
+ empty_node ( select_to ) ;
62
+ for ( let i = 0 ; i < used_diff . length ; ++ i ) {
63
+ const layer = used_diff [ i ] ;
64
+ if ( i !== used_diff . length - 1 ) {
65
+ const option = document . createElement ( 'option' ) ;
66
+ option . value = i ;
67
+ option . innerText = layer_name ( layer ) ;
68
+ select_from . appendChild ( option ) ;
69
+ }
70
+ if ( i !== 0 ) {
71
+ const option = document . createElement ( 'option' ) ;
72
+ option . value = i ;
73
+ option . innerText = layer_name ( layer ) ;
74
+ select_to . appendChild ( option ) ;
75
+ }
76
+ }
77
+
78
+ select_from . selectedIndex = used_diff . length - 2 ;
79
+ select_to . selectedIndex = used_diff . length - 2 ;
80
+ }
81
+
39
82
function change_select_from ( ) {
40
83
if ( select_from . selectedIndex > select_to . selectedIndex ) {
41
84
select_from . selectedIndex = select_to . selectedIndex ;
@@ -251,8 +294,25 @@ function update_changed(from, to, kind) {
251
294
252
295
function load_diff ( ) {
253
296
div_diff . style . display = 'none' ;
254
- const from_idx = Number ( select_from . value ) ;
255
- const to_idx = Number ( select_to . value ) ;
297
+ let from_idx = Number ( select_from . value ) ;
298
+ let to_idx = Number ( select_to . value ) ;
299
+ if ( used_diff == collapsed_diff ) {
300
+ // figure out indices in the original diff with all data
301
+ let needle = used_diff [ from_idx ] ;
302
+ for ( let i = from_idx ; i < DIFF . length ; ++ i ) {
303
+ if ( needle == DIFF [ i ] ) {
304
+ from_idx = i ;
305
+ break ;
306
+ }
307
+ }
308
+ needle = used_diff [ to_idx ] ;
309
+ for ( let i = to_idx ; i < DIFF . length ; ++ i ) {
310
+ if ( needle == DIFF [ i ] ) {
311
+ to_idx = i ;
312
+ break ;
313
+ }
314
+ }
315
+ }
256
316
const diff = {
257
317
added : { types : { } , functions : { } } ,
258
318
removed : { types : { } , functions : { } } ,
@@ -283,22 +343,5 @@ div_diff.style.display = 'none';
283
343
select_from . addEventListener ( 'change' , load_diff ) ;
284
344
select_to . addEventListener ( 'change' , load_diff ) ;
285
345
286
- for ( let i = 0 ; i < DIFF . length ; ++ i ) {
287
- const layer = DIFF [ i ] ;
288
- if ( i !== DIFF . length - 1 ) {
289
- const option = document . createElement ( 'option' ) ;
290
- option . value = i ;
291
- option . innerText = layer_name ( layer ) ;
292
- select_from . appendChild ( option ) ;
293
- }
294
- if ( i !== 0 ) {
295
- const option = document . createElement ( 'option' ) ;
296
- option . value = i ;
297
- option . innerText = layer_name ( layer ) ;
298
- select_to . appendChild ( option ) ;
299
- }
300
- }
301
-
302
- select_from . selectedIndex = DIFF . length - 2 ;
303
- select_to . selectedIndex = DIFF . length - 2 ;
346
+ fill_select_boxes ( ) ;
304
347
load_diff ( ) ;
0 commit comments