Skip to content

Commit e555411

Browse files
committed
Support showing only unique layers
1 parent 39f410a commit e555411

File tree

2 files changed

+70
-20
lines changed

2 files changed

+70
-20
lines changed

app.js

Lines changed: 63 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,26 @@ const removed_functions = document.getElementById('removed_functions');
99
const changed_types = document.getElementById('changed_types');
1010
const changed_functions = document.getElementById('changed_functions');
1111

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+
1232
function layer_name(layer) {
1333
const name = layer['layer'] == null ? 'Unknown layer' : `Layer ${layer['layer']}`;
1434
const date = new Date(layer['date'] * 1000);
@@ -36,6 +56,29 @@ function toggle_expand(event) {
3656
}
3757
}
3858

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+
3982
function change_select_from() {
4083
if (select_from.selectedIndex > select_to.selectedIndex) {
4184
select_from.selectedIndex = select_to.selectedIndex;
@@ -251,8 +294,25 @@ function update_changed(from, to, kind) {
251294

252295
function load_diff() {
253296
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+
}
256316
const diff = {
257317
added: {types: {}, functions: {}},
258318
removed: {types: {}, functions: {}},
@@ -283,22 +343,5 @@ div_diff.style.display = 'none';
283343
select_from.addEventListener('change', load_diff);
284344
select_to.addEventListener('change', load_diff);
285345

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();
304347
load_diff();

index.html

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@
5252
}
5353
.diff li {
5454
margin: 0.1em 0;
55+
}
56+
label {
57+
border-bottom: 1px dashed #000;
5558
}
5659
</style>
5760
</head>
@@ -77,6 +80,10 @@ <h1>Type Language Differ</h1>
7780

7881
<select id="select_from" onchange="change_select_to()"></select>
7982
<select id="select_to" onchange="change_select_from()"></select>
83+
<input type="checkbox" id="merge-layers" name="merge-layers" onchange="change_used_diff(event)" checked>
84+
<label
85+
title="Telegram sometimes publishes updates to a layer without increasing the layer number. By default (checked), only the most recent version of a layer is shown, but you can uncheck this to show all the known revisions of a layer."
86+
for="merge-layers">Show only the most recent version for a layer (?)</label>
8087
</div>
8188
<div id="div_diff" class="diff">
8289
<div class="added">

0 commit comments

Comments
 (0)