rev |
line source |
bsw/jbe@19
|
1 voting_text_approval_single = "Approval"
|
bsw/jbe@19
|
2 voting_text_approval_multi = "Approval"
|
bsw/jbe@19
|
3 voting_text_first_preference_single = "Approval (first preference)"
|
bsw/jbe@19
|
4 voting_text_first_preference_multi = "Approval (first preference)"
|
bsw/jbe@19
|
5 voting_text_second_preference_single = "Approval (second preference)"
|
bsw/jbe@19
|
6 voting_text_second_preference_multi = "Approval (second preference)"
|
bsw/jbe@19
|
7 voting_text_third_preference_single = "Approval (third preference)"
|
bsw/jbe@19
|
8 voting_text_third_preference_multi = "Approval (third preference)"
|
bsw/jbe@19
|
9 voting_text_numeric_preference_single = "Approval (#th preference)"
|
bsw/jbe@19
|
10 voting_text_numeric_preference_multi = "Approval (#th preference)"
|
bsw/jbe@19
|
11 voting_text_abstention_single = "Abstention"
|
bsw/jbe@19
|
12 voting_text_abstention_multi = "Abstention"
|
bsw/jbe@19
|
13 voting_text_disapproval_above_one_single = "Disapproval (prefer to lower block)"
|
bsw/jbe@19
|
14 voting_text_disapproval_above_one_multi = "Disapproval (prefer to lower block)"
|
bsw/jbe@19
|
15 voting_text_disapproval_above_many_single = "Disapproval (prefer to lower blocks)"
|
bsw/jbe@19
|
16 voting_text_disapproval_above_many_multi = "Disapproval (prefer to lower blocks)"
|
bsw/jbe@19
|
17 voting_text_disapproval_above_last_single = "Disapproval (prefer to last block)"
|
bsw/jbe@19
|
18 voting_text_disapproval_above_last_multi = "Disapproval (prefer to last block)"
|
bsw/jbe@19
|
19 voting_text_disapproval_single = "Disapproval"
|
bsw/jbe@19
|
20 voting_text_disapproval_multi = "Disapproval"
|
bsw/jbe@19
|
21
|
bsw/jbe@19
|
22 function voting_setCategoryHeadings() {
|
bsw/jbe@5
|
23 var approvalCount = 0;
|
bsw/jbe@5
|
24 var disapprovalCount = 0;
|
bsw/jbe@5
|
25 var sections = document.getElementById("voting").childNodes;
|
bsw/jbe@5
|
26 for (var i=0; i<sections.length; i++) {
|
bsw/jbe@5
|
27 var section = sections[i];
|
bsw/jbe@5
|
28 if (section.className == "approval") approvalCount++;
|
bsw/jbe@5
|
29 if (section.className == "disapproval") disapprovalCount++;
|
bsw/jbe@5
|
30 }
|
bsw/jbe@5
|
31 var approvalIndex = 0;
|
bsw/jbe@5
|
32 var disapprovalIndex = 0;
|
bsw/jbe@5
|
33 for (var i=0; i<sections.length; i++) {
|
bsw/jbe@5
|
34 var section = sections[i];
|
bsw/jbe@5
|
35 if (
|
bsw/jbe@5
|
36 section.className == "approval" ||
|
bsw/jbe@5
|
37 section.className == "abstention" ||
|
bsw/jbe@5
|
38 section.className == "disapproval"
|
bsw/jbe@5
|
39 ) {
|
bsw/jbe@5
|
40 var setHeading = function(heading) {
|
bsw/jbe@5
|
41 var headingNodes = section.childNodes;
|
bsw/jbe@5
|
42 for (var j=0; j<headingNodes.length; j++) {
|
bsw/jbe@5
|
43 var headingNode = headingNodes[j];
|
bsw/jbe@5
|
44 if (headingNode.className == "cathead") {
|
bsw/jbe@5
|
45 headingNode.textContent = heading;
|
bsw/jbe@5
|
46 }
|
bsw/jbe@5
|
47 }
|
bsw/jbe@5
|
48 }
|
bsw/jbe@5
|
49 var count = 0;
|
bsw/jbe@5
|
50 var entries = section.childNodes;
|
bsw/jbe@5
|
51 for (var j=0; j<entries.length; j++) {
|
bsw/jbe@5
|
52 var entry = entries[j];
|
bsw/jbe@5
|
53 if (entry.className == "movable") count++;
|
bsw/jbe@5
|
54 }
|
bsw/jbe@5
|
55 if (section.className == "approval") {
|
bsw/jbe@5
|
56 if (approvalCount > 1) {
|
bsw/jbe@5
|
57 if (approvalIndex == 0) {
|
bsw/jbe@19
|
58 if (count == 1) setHeading(voting_text_first_preference_single);
|
bsw/jbe@19
|
59 else setHeading(voting_text_first_preference_multi);
|
bsw/jbe@5
|
60 } else if (approvalIndex == 1) {
|
bsw/jbe@19
|
61 if (count == 1) setHeading(voting_text_second_preference_single);
|
bsw/jbe@19
|
62 else setHeading(voting_text_second_preference_multi);
|
bsw/jbe@5
|
63 } else if (approvalIndex == 2) {
|
bsw/jbe@19
|
64 if (count == 1) setHeading(voting_text_third_preference_single);
|
bsw/jbe@19
|
65 else setHeading(voting_text_third_preference_multi);
|
bsw/jbe@5
|
66 } else {
|
bsw/jbe@19
|
67 var text;
|
bsw/jbe@19
|
68 if (count == 1) text = voting_text_numeric_preference_single;
|
bsw/jbe@19
|
69 else text = voting_text_numeric_preference_multi;
|
bsw/jbe@19
|
70 text = text.replace(/#/, "" + (approvalIndex + 1))
|
bsw/jbe@19
|
71 setHeading(text);
|
bsw/jbe@5
|
72 }
|
bsw/jbe@5
|
73 } else {
|
bsw/jbe@19
|
74 if (count == 1) setHeading(voting_text_approval_single);
|
bsw/jbe@19
|
75 else setHeading(voting_text_approval_multi);
|
bsw/jbe@5
|
76 }
|
bsw/jbe@5
|
77 approvalIndex++;
|
bsw/jbe@5
|
78 } else if (section.className == "abstention") {
|
bsw/jbe@19
|
79 if (count == 1) setHeading(voting_text_abstention_single);
|
bsw/jbe@19
|
80 else setHeading(voting_text_abstention_multi);
|
bsw/jbe@5
|
81 } else if (section.className == "disapproval") {
|
bsw/jbe@5
|
82 if (disapprovalCount > disapprovalIndex + 2) {
|
bsw/jbe@19
|
83 if (count == 1) setHeading(voting_text_disapproval_above_many_single);
|
bsw/jbe@19
|
84 else setHeading(voting_text_disapproval_above_many_multi);
|
bsw/jbe@5
|
85 } else if (disapprovalCount == 2 && disapprovalIndex == 0) {
|
bsw/jbe@19
|
86 if (count == 1) setHeading(voting_text_disapproval_above_one_single);
|
bsw/jbe@19
|
87 else setHeading(voting_text_disapproval_above_one_multi);
|
bsw/jbe@5
|
88 } else if (disapprovalIndex == disapprovalCount - 2) {
|
bsw/jbe@19
|
89 if (count == 1) setHeading(voting_text_disapproval_above_last_single);
|
bsw/jbe@19
|
90 else setHeading(voting_text_disapproval_above_last_multi);
|
bsw/jbe@5
|
91 } else {
|
bsw/jbe@19
|
92 if (count == 1) setHeading(voting_text_disapproval_single);
|
bsw/jbe@19
|
93 else setHeading(voting_text_disapproval_multi);
|
bsw/jbe@5
|
94 }
|
bsw/jbe@5
|
95 disapprovalIndex++;
|
bsw/jbe@5
|
96 }
|
bsw/jbe@5
|
97 }
|
bsw/jbe@5
|
98 }
|
bsw/jbe@5
|
99 }
|
bsw/jbe@19
|
100 function voting_move(element, up, dropX, dropY) {
|
bsw/jbe@19
|
101 if (typeof(element) == "string") element = document.getElementById(element);
|
bsw/jbe@19
|
102 var mouse = (up == null);
|
bsw/jbe@5
|
103 var oldParent = element.parentNode;
|
bsw/jbe@19
|
104 if (mouse) var centerY = dropY + element.clientHeight / 2;
|
bsw/jbe@5
|
105 var approvalCount = 0;
|
bsw/jbe@5
|
106 var disapprovalCount = 0;
|
bsw/jbe@5
|
107 var mainDiv = document.getElementById("voting");
|
bsw/jbe@5
|
108 var sections = mainDiv.childNodes;
|
bsw/jbe@5
|
109 for (var i=0; i<sections.length; i++) {
|
bsw/jbe@5
|
110 var section = sections[i];
|
bsw/jbe@5
|
111 if (section.className == "approval") approvalCount++;
|
bsw/jbe@5
|
112 if (section.className == "disapproval") disapprovalCount++;
|
bsw/jbe@5
|
113 }
|
bsw/jbe@19
|
114 if (mouse) {
|
bsw/jbe@5
|
115 for (var i=0; i<sections.length; i++) {
|
bsw/jbe@5
|
116 var section = sections[i];
|
bsw/jbe@5
|
117 if (
|
bsw/jbe@5
|
118 section.className == "approval" ||
|
bsw/jbe@5
|
119 section.className == "abstention" ||
|
bsw/jbe@5
|
120 section.className == "disapproval"
|
bsw/jbe@5
|
121 ) {
|
bsw/jbe@19
|
122 if (
|
bsw/jbe@19
|
123 centerY >= section.offsetTop &&
|
bsw/jbe@19
|
124 centerY < section.offsetTop + section.clientHeight
|
bsw/jbe@19
|
125 ) {
|
bsw/jbe@19
|
126 var entries = section.childNodes;
|
bsw/jbe@19
|
127 for (var j=0; j<entries.length; j++) {
|
bsw/jbe@19
|
128 var entry = entries[j];
|
bsw/jbe@19
|
129 if (entry.className == "movable") {
|
bsw/jbe@19
|
130 if (centerY < entry.offsetTop + entry.clientHeight / 2) {
|
bsw/jbe@19
|
131 if (element != entry) {
|
bsw/jbe@19
|
132 oldParent.removeChild(element);
|
bsw/jbe@19
|
133 section.insertBefore(element, entry);
|
bsw/jbe@19
|
134 }
|
bsw/jbe@19
|
135 break;
|
bsw/jbe@19
|
136 }
|
bsw/jbe@19
|
137 }
|
bsw/jbe@5
|
138 }
|
bsw/jbe@19
|
139 if (j == entries.length) {
|
bsw/jbe@19
|
140 oldParent.removeChild(element);
|
bsw/jbe@19
|
141 section.appendChild(element);
|
bsw/jbe@19
|
142 }
|
bsw/jbe@5
|
143 break;
|
bsw/jbe@5
|
144 }
|
bsw/jbe@5
|
145 }
|
bsw/jbe@5
|
146 }
|
bsw/jbe@5
|
147 if (i == sections.length) {
|
bsw/jbe@19
|
148 var newSection = document.createElement("div");
|
bsw/jbe@19
|
149 var cathead = document.createElement("div");
|
bsw/jbe@19
|
150 cathead.setAttribute("class", "cathead");
|
bsw/jbe@19
|
151 newSection.appendChild(cathead);
|
bsw/jbe@19
|
152 for (var i=0; i<sections.length; i++) {
|
bsw/jbe@19
|
153 var section = sections[i];
|
bsw/jbe@19
|
154 if (
|
bsw/jbe@19
|
155 section.className == "approval" ||
|
bsw/jbe@19
|
156 section.className == "abstention" ||
|
bsw/jbe@19
|
157 section.className == "disapproval"
|
bsw/jbe@19
|
158 ) {
|
bsw/jbe@19
|
159 if (centerY < section.offsetTop + section.clientHeight / 2) {
|
bsw/jbe@19
|
160 if (section.className == "disapproval") {
|
bsw/jbe@19
|
161 newSection.setAttribute("class", "disapproval");
|
bsw/jbe@19
|
162 disapprovalCount++;
|
bsw/jbe@19
|
163 } else {
|
bsw/jbe@19
|
164 newSection.setAttribute("class", "approval");
|
bsw/jbe@19
|
165 approvalCount++;
|
bsw/jbe@19
|
166 }
|
bsw/jbe@19
|
167 mainDiv.insertBefore(newSection, section);
|
bsw/jbe@19
|
168 break;
|
bsw/jbe@19
|
169 }
|
bsw/jbe@19
|
170 }
|
bsw/jbe@19
|
171 }
|
bsw/jbe@19
|
172 if (i == sections.length) {
|
bsw/jbe@19
|
173 newSection.setAttribute("class", "disapproval");
|
bsw/jbe@19
|
174 disapprovalCount++;
|
bsw/jbe@19
|
175 mainDiv.appendChild(newSection);
|
bsw/jbe@19
|
176 }
|
bsw/jbe@19
|
177 oldParent.removeChild(element);
|
bsw/jbe@19
|
178 newSection.appendChild(element);
|
bsw/jbe@19
|
179 }
|
bsw/jbe@19
|
180 } else {
|
bsw/jbe@19
|
181 var oldFound = false;
|
bsw/jbe@19
|
182 var prevSection = null;
|
bsw/jbe@19
|
183 var nextSection = null;
|
bsw/jbe@19
|
184 for (var i=0; i<sections.length; i++) {
|
bsw/jbe@19
|
185 var section = sections[i];
|
bsw/jbe@19
|
186 if (
|
bsw/jbe@19
|
187 section.className == "approval" ||
|
bsw/jbe@19
|
188 section.className == "abstention" ||
|
bsw/jbe@19
|
189 section.className == "disapproval"
|
bsw/jbe@19
|
190 ) {
|
bsw/jbe@19
|
191 if (oldFound) {
|
bsw/jbe@19
|
192 nextSection = section;
|
bsw/jbe@19
|
193 break;
|
bsw/jbe@19
|
194 } else if (section == oldParent) {
|
bsw/jbe@19
|
195 oldFound = true;
|
bsw/jbe@19
|
196 } else {
|
bsw/jbe@19
|
197 prevSection = section;
|
bsw/jbe@19
|
198 }
|
bsw/jbe@19
|
199 }
|
bsw/jbe@5
|
200 }
|
bsw/jbe@19
|
201 var create;
|
bsw/jbe@19
|
202 if (oldParent.className == "abstention") {
|
bsw/jbe@19
|
203 create = true;
|
bsw/jbe@19
|
204 } else {
|
bsw/jbe@19
|
205 create = false;
|
bsw/jbe@19
|
206 for (var i=0; i<oldParent.childNodes.length; i++) {
|
bsw/jbe@19
|
207 var entry = oldParent.childNodes[i];
|
bsw/jbe@19
|
208 if (entry.className == "movable") {
|
bsw/jbe@19
|
209 if (entry != element) {
|
bsw/jbe@19
|
210 create = true;
|
bsw/jbe@19
|
211 break;
|
bsw/jbe@19
|
212 }
|
bsw/jbe@19
|
213 }
|
bsw/jbe@19
|
214 }
|
bsw/jbe@19
|
215 }
|
bsw/jbe@19
|
216 var newSection;
|
bsw/jbe@19
|
217 if (create) {
|
bsw/jbe@19
|
218 newSection = document.createElement("div");
|
bsw/jbe@19
|
219 var cathead = document.createElement("div");
|
bsw/jbe@19
|
220 cathead.setAttribute("class", "cathead");
|
bsw/jbe@19
|
221 newSection.appendChild(cathead);
|
bsw/jbe@19
|
222 if (
|
bsw/jbe@19
|
223 oldParent.className == "approval" ||
|
bsw/jbe@19
|
224 (oldParent.className == "abstention" && up)
|
bsw/jbe@19
|
225 ) {
|
bsw/jbe@19
|
226 newSection.setAttribute("class", "approval");
|
bsw/jbe@19
|
227 approvalCount++;
|
bsw/jbe@19
|
228 } else {
|
bsw/jbe@19
|
229 newSection.setAttribute("class", "disapproval");
|
bsw/jbe@19
|
230 disapprovalCount++;
|
bsw/jbe@19
|
231 }
|
bsw/jbe@19
|
232 if (up) {
|
bsw/jbe@19
|
233 mainDiv.insertBefore(newSection, oldParent);
|
bsw/jbe@19
|
234 } else {
|
bsw/jbe@19
|
235 if (nextSection) mainDiv.insertBefore(newSection, nextSection);
|
bsw/jbe@19
|
236 else mainDiv.appendChild(newSection);
|
bsw/jbe@19
|
237 }
|
bsw/jbe@19
|
238 } else {
|
bsw/jbe@19
|
239 if (up) newSection = prevSection;
|
bsw/jbe@19
|
240 else newSection = nextSection;
|
bsw/jbe@19
|
241 }
|
bsw/jbe@19
|
242 if (newSection) {
|
bsw/jbe@19
|
243 oldParent.removeChild(element);
|
bsw/jbe@19
|
244 if (create || up) {
|
bsw/jbe@19
|
245 newSection.appendChild(element);
|
bsw/jbe@19
|
246 } else {
|
bsw/jbe@19
|
247 var inserted = false;
|
bsw/jbe@19
|
248 for (var i=0; i<newSection.childNodes.length; i++) {
|
bsw/jbe@19
|
249 var entry = newSection.childNodes[i];
|
bsw/jbe@19
|
250 if (entry.className == "movable") {
|
bsw/jbe@19
|
251 newSection.insertBefore(element, entry);
|
bsw/jbe@19
|
252 inserted = true;
|
bsw/jbe@19
|
253 break;
|
bsw/jbe@19
|
254 }
|
bsw/jbe@19
|
255 }
|
bsw/jbe@19
|
256 if (!inserted) newSection.appendChild(element);
|
bsw/jbe@19
|
257 }
|
bsw/jbe@19
|
258 }
|
bsw/jbe@5
|
259 }
|
bsw/jbe@19
|
260 // sections = mainDiv.childNodes;
|
bsw/jbe@5
|
261 for (i=0; i<sections.length; i++) {
|
bsw/jbe@5
|
262 var section = sections[i];
|
bsw/jbe@5
|
263 if (
|
bsw/jbe@5
|
264 (section.className == "approval" && approvalCount > 1) ||
|
bsw/jbe@5
|
265 (section.className == "disapproval" && disapprovalCount > 1)
|
bsw/jbe@5
|
266 ) {
|
bsw/jbe@5
|
267 var entries = section.childNodes;
|
bsw/jbe@5
|
268 for (var j=0; j<entries.length; j++) {
|
bsw/jbe@5
|
269 var entry = entries[j];
|
bsw/jbe@5
|
270 if (entry.className == "movable") break;
|
bsw/jbe@5
|
271 }
|
bsw/jbe@5
|
272 if (j == entries.length) {
|
bsw/jbe@5
|
273 section.parentNode.removeChild(section);
|
bsw/jbe@5
|
274 }
|
bsw/jbe@5
|
275 }
|
bsw/jbe@5
|
276 }
|
bsw/jbe@19
|
277 voting_setCategoryHeadings();
|
bsw/jbe@19
|
278 }
|
bsw/jbe@19
|
279 function elementDropped(element, dropX, dropY) {
|
bsw/jbe@19
|
280 voting_move(element, null, dropX, dropY);
|
bsw/jbe@5
|
281 }
|
bsw/jbe@5
|
282 window.addEventListener("load", function(event) {
|
bsw/jbe@19
|
283 voting_setCategoryHeadings();
|
bsw/jbe@5
|
284 var mainDiv = document.getElementById("voting");
|
bsw/jbe@5
|
285 var form = document.getElementById("voting_form");
|
bsw/jbe@5
|
286 var elements = document.getElementsByTagName("input");
|
bsw/jbe@5
|
287 for (var i=0; i<elements.length; i++) {
|
bsw/jbe@5
|
288 var element = elements[i];
|
bsw/jbe@5
|
289 if (element.className == "voting_done") {
|
bsw/jbe@5
|
290 element.addEventListener("click", function(event) {
|
bsw/jbe@5
|
291 var scoringString = "";
|
bsw/jbe@5
|
292 var approvalCount = 0;
|
bsw/jbe@5
|
293 var disapprovalCount = 0;
|
bsw/jbe@5
|
294 var sections = mainDiv.childNodes;
|
bsw/jbe@5
|
295 for (var j=0; j<sections.length; j++) {
|
bsw/jbe@5
|
296 var section = sections[j];
|
bsw/jbe@5
|
297 if (section.className == "approval") approvalCount++;
|
bsw/jbe@5
|
298 if (section.className == "disapproval") disapprovalCount++;
|
bsw/jbe@5
|
299 }
|
bsw/jbe@5
|
300 var approvalIndex = 0;
|
bsw/jbe@5
|
301 var disapprovalIndex = 0;
|
bsw/jbe@5
|
302 for (var j=0; j<sections.length; j++) {
|
bsw/jbe@5
|
303 var section = sections[j];
|
bsw/jbe@5
|
304 if (
|
bsw/jbe@5
|
305 section.className == "approval" ||
|
bsw/jbe@5
|
306 section.className == "abstention" ||
|
bsw/jbe@5
|
307 section.className == "disapproval"
|
bsw/jbe@5
|
308 ) {
|
bsw/jbe@5
|
309 var score;
|
bsw/jbe@5
|
310 if (section.className == "approval") {
|
bsw/jbe@5
|
311 score = approvalCount - approvalIndex;
|
bsw/jbe@5
|
312 approvalIndex++;
|
bsw/jbe@5
|
313 } else if (section.className == "abstention") {
|
bsw/jbe@5
|
314 score = 0;
|
bsw/jbe@5
|
315 } else if (section.className == "disapproval") {
|
bsw/jbe@5
|
316 score = -1 - disapprovalIndex;
|
bsw/jbe@5
|
317 disapprovalIndex++;
|
bsw/jbe@5
|
318 }
|
bsw/jbe@5
|
319 var entries = section.childNodes;
|
bsw/jbe@5
|
320 for (var k=0; k<entries.length; k++) {
|
bsw/jbe@5
|
321 var entry = entries[k];
|
bsw/jbe@5
|
322 if (entry.className == "movable") {
|
bsw/jbe@5
|
323 var id = entry.id.match(/[0-9]+/);
|
bsw/jbe@5
|
324 var field = document.createElement("input");
|
bsw/jbe@5
|
325 scoringString += id + ":" + score + ";";
|
bsw/jbe@5
|
326 }
|
bsw/jbe@5
|
327 }
|
bsw/jbe@5
|
328 }
|
bsw/jbe@5
|
329 }
|
bsw/jbe@5
|
330 var fields = form.childNodes;
|
bsw/jbe@5
|
331 for (var j=0; j<fields.length; j++) {
|
bsw/jbe@5
|
332 var field = fields[j];
|
bsw/jbe@5
|
333 if (field.name == "scoring") {
|
bsw/jbe@5
|
334 field.setAttribute("value", scoringString);
|
bsw/jbe@5
|
335 form.submit();
|
bsw/jbe@5
|
336 return;
|
bsw/jbe@5
|
337 }
|
bsw/jbe@5
|
338 }
|
bsw/jbe@5
|
339 alert('Hidden input field named "scoring" not found.');
|
bsw/jbe@5
|
340 }, false);
|
bsw/jbe@5
|
341 }
|
bsw/jbe@5
|
342 }
|
bsw/jbe@5
|
343 }, false);
|
bsw/jbe@19
|
344 function voting_moveUp(element) {
|
bsw/jbe@19
|
345 return voting_move(element, true);
|
bsw/jbe@19
|
346 }
|
bsw/jbe@19
|
347 function voting_moveDown(element) {
|
bsw/jbe@19
|
348 return voting_move(element, false);
|
bsw/jbe@19
|
349 }
|