blob: 0dd175441b89162c4fe1fe9f020d11ae3de15ad6 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
"use strict";
(function() {
const buttons = document.querySelectorAll("td input"); // Fetch all radio buttons
const id_reg = /compare-(before|after)-([\w|-]+)/; // Matches compare-after/before-ID
function getRevisionId(element){
const e = element.id.match(id_reg); // Match ID with RegExp
return [e[1], e[2]]; // e is in format of [full id, after/before, ID] we only want ID & mode
}
function getRevision(id) {
/* global revisions */ // TODO: FIXME
const e = revisions.filter((x) => {
// Filter through all revisions to find the selected one (revisions in declared in the template)
return x.id === id;
});
return e[0];
}
function radioButtonChecked(element) {
// console.log("change detected");
const id = getRevisionId(element);
const rev = getRevision(id[1]);
if (id[0] === "after"){
/*
* Deselect the opposite checkbox to the one which has been checked
* because we don't want checking of the same revision
*/
document.querySelector(`#compare-before-${id[1]}`).checked = false;
buttons.forEach((e) => {
if (getRevisionId(e)[0] === "after" && e.id !== element.id) { // Deselect all checkboxes in the same row
e.checked = false;
}
});
} else { // This else does the same as above but for the before column
document.querySelector(`#compare-after-${id[1]}`).checked = false;
buttons.forEach((e) => {
if (getRevisionId(e)[0] === "before" && e.id !== element.id) {
e.checked = false;
}
// This makes sure that you do not compare a new revision with an old one
if (getRevisionId(e)[0] === "after") {
const tmprev = getRevision(getRevisionId(e)[1]);
// console.log(tmprev);
if (tmprev.date <= rev.date) {
document.querySelector(`#${e.id}`).setAttribute("disabled", "");
} else {
document.querySelector(`#${e.id}`).removeAttribute("disabled");
}
}
});
}
let aft, bef;
buttons.forEach((button) => { // Find the selected posts
const id = getRevisionId(button);
if (button.checked && id[0] === "before") {
bef = id[1];
}
if (button.checked && id[0] === "after") {
aft = id[1];
}
});
// Switch the buttons HREF to point to the correct compare URL
document.getElementById("compare-submit").href = `/history/compare/${bef}/${aft}`;
}
buttons.forEach((button) => {
button.checked = false; // Some browsers remember if a button is checked.
button.onchange = function() {
radioButtonChecked(button);
};
});
})();
|