Added button for Visual Comparison to history page, previous and next diff buttons...
[lhc/web/wiklou.git] / skins / common / history.js
1 function historyRadios(parent) {
2 var inputs = parent.getElementsByTagName('input');
3 var radios = [];
4 for (var i = 0; i < inputs.length; i++) {
5 if (inputs[i].name == "diff" || inputs[i].name == "oldid") {
6 radios[radios.length] = inputs[i];
7 }
8 }
9 return radios;
10 }
11
12 // check selection and tweak visibility/class onclick
13 function diffcheck() {
14 var dli = false; // the li where the diff radio is checked
15 var oli = false; // the li where the oldid radio is checked
16 var hf = document.getElementById('pagehistory');
17 if (!hf) {
18 return true;
19 }
20 var lis = hf.getElementsByTagName('li');
21 for (var i=0;i<lis.length;i++) {
22 var inputs = historyRadios(lis[i]);
23 if (inputs[1] && inputs[0]) {
24 if (inputs[1].checked || inputs[0].checked) { // this row has a checked radio button
25 if (inputs[1].checked && inputs[0].checked && inputs[0].value == inputs[1].value) {
26 return false;
27 }
28 if (oli) { // it's the second checked radio
29 if (inputs[1].checked) {
30 oli.className = "selected";
31 return false;
32 }
33 } else if (inputs[0].checked) {
34 return false;
35 }
36 if (inputs[0].checked) {
37 dli = lis[i];
38 }
39 if (!oli) {
40 inputs[0].style.visibility = 'hidden';
41 }
42 if (dli) {
43 inputs[1].style.visibility = 'hidden';
44 }
45 lis[i].className = "selected";
46 oli = lis[i];
47 } else { // no radio is checked in this row
48 if (!oli) {
49 inputs[0].style.visibility = 'hidden';
50 } else {
51 inputs[0].style.visibility = 'visible';
52 }
53 if (dli) {
54 inputs[1].style.visibility = 'hidden';
55 } else {
56 inputs[1].style.visibility = 'visible';
57 }
58 lis[i].className = "";
59 }
60 }
61 }
62 return true;
63 }
64
65 // page history stuff
66 // attach event handlers to the input elements on history page
67 function histrowinit() {
68 var hf = document.getElementById('pagehistory');
69 if (!hf) {
70 return;
71 }
72 var lis = hf.getElementsByTagName('li');
73 for (var i = 0; i < lis.length; i++) {
74 var inputs = historyRadios(lis[i]);
75 if (inputs[0] && inputs[1]) {
76 inputs[0].onclick = diffcheck;
77 inputs[1].onclick = diffcheck;
78 }
79 }
80 diffcheck();
81 }
82
83 // attach htmldiff event handler
84 function htmldiffsubmit() {
85 var hf = document.getElementById('submithtmldiff1');
86 if (!hf) {
87 return;
88 }
89 hf.onclick = enablehtmldiff;
90 hf = document.getElementById('submithtmldiff2');
91 if (!hf) {
92 return;
93 }
94 hf.onclick = enablehtmldiff;
95 }
96
97 // change hidden field when choosing html compare
98 function enablehtmldiff() {
99 var hf = document.getElementById('htmldiff');
100 if (!hf) {
101 return;
102 }
103 hf.value = 1;
104 }
105
106 // attach source diff event handler
107 function sourcediffsubmit() {
108 var hf = document.getElementById('submitsourcediff1');
109 if (!hf) {
110 return;
111 }
112 hf.onclick = disablehtmldiff;
113 hf = document.getElementById('submitsourcediff2');
114 if (!hf) {
115 return;
116 }
117 hf.onclick = disablehtmldiff;
118 }
119
120 // change hidden field when choosing source diff
121 function disablehtmldiff() {
122 var hf = document.getElementById('htmldiff');
123 if (!hf) {
124 return;
125 }
126 hf.value = 0;
127 }
128
129 hookEvent("load", histrowinit);
130 hookEvent("load", htmldiffsubmit);
131 hookEvent("load", sourcediffsubmit);