##// END OF EJS Templates
Fixed: Can't attach more than 1 file on IE 6 and 7 (#10115)....
Jean-Philippe Lang -
r8660:d57fbc9512cc
parent child
Show More
@@ -1,517 +1,517
1 /* redMine - project management software
1 /* redMine - project management software
2 Copyright (C) 2006-2008 Jean-Philippe Lang */
2 Copyright (C) 2006-2008 Jean-Philippe Lang */
3
3
4 function checkAll (id, checked) {
4 function checkAll (id, checked) {
5 var els = Element.descendants(id);
5 var els = Element.descendants(id);
6 for (var i = 0; i < els.length; i++) {
6 for (var i = 0; i < els.length; i++) {
7 if (els[i].disabled==false) {
7 if (els[i].disabled==false) {
8 els[i].checked = checked;
8 els[i].checked = checked;
9 }
9 }
10 }
10 }
11 }
11 }
12
12
13 function toggleCheckboxesBySelector(selector) {
13 function toggleCheckboxesBySelector(selector) {
14 boxes = $$(selector);
14 boxes = $$(selector);
15 var all_checked = true;
15 var all_checked = true;
16 for (i = 0; i < boxes.length; i++) { if (boxes[i].checked == false) { all_checked = false; } }
16 for (i = 0; i < boxes.length; i++) { if (boxes[i].checked == false) { all_checked = false; } }
17 for (i = 0; i < boxes.length; i++) { boxes[i].checked = !all_checked; }
17 for (i = 0; i < boxes.length; i++) { boxes[i].checked = !all_checked; }
18 }
18 }
19
19
20 function setCheckboxesBySelector(checked, selector) {
20 function setCheckboxesBySelector(checked, selector) {
21 var boxes = $$(selector);
21 var boxes = $$(selector);
22 boxes.each(function(ele) {
22 boxes.each(function(ele) {
23 ele.checked = checked;
23 ele.checked = checked;
24 });
24 });
25 }
25 }
26
26
27 function showAndScrollTo(id, focus) {
27 function showAndScrollTo(id, focus) {
28 Element.show(id);
28 Element.show(id);
29 if (focus!=null) { Form.Element.focus(focus); }
29 if (focus!=null) { Form.Element.focus(focus); }
30 Element.scrollTo(id);
30 Element.scrollTo(id);
31 }
31 }
32
32
33 function toggleRowGroup(el) {
33 function toggleRowGroup(el) {
34 var tr = Element.up(el, 'tr');
34 var tr = Element.up(el, 'tr');
35 var n = Element.next(tr);
35 var n = Element.next(tr);
36 tr.toggleClassName('open');
36 tr.toggleClassName('open');
37 while (n != undefined && !n.hasClassName('group')) {
37 while (n != undefined && !n.hasClassName('group')) {
38 Element.toggle(n);
38 Element.toggle(n);
39 n = Element.next(n);
39 n = Element.next(n);
40 }
40 }
41 }
41 }
42
42
43 function collapseAllRowGroups(el) {
43 function collapseAllRowGroups(el) {
44 var tbody = Element.up(el, 'tbody');
44 var tbody = Element.up(el, 'tbody');
45 tbody.childElements('tr').each(function(tr) {
45 tbody.childElements('tr').each(function(tr) {
46 if (tr.hasClassName('group')) {
46 if (tr.hasClassName('group')) {
47 tr.removeClassName('open');
47 tr.removeClassName('open');
48 } else {
48 } else {
49 tr.hide();
49 tr.hide();
50 }
50 }
51 })
51 })
52 }
52 }
53
53
54 function expandAllRowGroups(el) {
54 function expandAllRowGroups(el) {
55 var tbody = Element.up(el, 'tbody');
55 var tbody = Element.up(el, 'tbody');
56 tbody.childElements('tr').each(function(tr) {
56 tbody.childElements('tr').each(function(tr) {
57 if (tr.hasClassName('group')) {
57 if (tr.hasClassName('group')) {
58 tr.addClassName('open');
58 tr.addClassName('open');
59 } else {
59 } else {
60 tr.show();
60 tr.show();
61 }
61 }
62 })
62 })
63 }
63 }
64
64
65 function toggleAllRowGroups(el) {
65 function toggleAllRowGroups(el) {
66 var tr = Element.up(el, 'tr');
66 var tr = Element.up(el, 'tr');
67 if (tr.hasClassName('open')) {
67 if (tr.hasClassName('open')) {
68 collapseAllRowGroups(el);
68 collapseAllRowGroups(el);
69 } else {
69 } else {
70 expandAllRowGroups(el);
70 expandAllRowGroups(el);
71 }
71 }
72 }
72 }
73
73
74 function toggleFieldset(el) {
74 function toggleFieldset(el) {
75 var fieldset = Element.up(el, 'fieldset');
75 var fieldset = Element.up(el, 'fieldset');
76 fieldset.toggleClassName('collapsed');
76 fieldset.toggleClassName('collapsed');
77 Effect.toggle(fieldset.down('div'), 'slide', {duration:0.2});
77 Effect.toggle(fieldset.down('div'), 'slide', {duration:0.2});
78 }
78 }
79
79
80 function hideFieldset(el) {
80 function hideFieldset(el) {
81 var fieldset = Element.up(el, 'fieldset');
81 var fieldset = Element.up(el, 'fieldset');
82 fieldset.toggleClassName('collapsed');
82 fieldset.toggleClassName('collapsed');
83 fieldset.down('div').hide();
83 fieldset.down('div').hide();
84 }
84 }
85
85
86 function add_filter() {
86 function add_filter() {
87 select = $('add_filter_select');
87 select = $('add_filter_select');
88 field = select.value
88 field = select.value
89 Element.show('tr_' + field);
89 Element.show('tr_' + field);
90 check_box = $('cb_' + field);
90 check_box = $('cb_' + field);
91 check_box.checked = true;
91 check_box.checked = true;
92 toggle_filter(field);
92 toggle_filter(field);
93 select.selectedIndex = 0;
93 select.selectedIndex = 0;
94
94
95 for (i=0; i<select.options.length; i++) {
95 for (i=0; i<select.options.length; i++) {
96 if (select.options[i].value == field) {
96 if (select.options[i].value == field) {
97 select.options[i].disabled = true;
97 select.options[i].disabled = true;
98 }
98 }
99 }
99 }
100 }
100 }
101
101
102 function toggle_filter(field) {
102 function toggle_filter(field) {
103 check_box = $('cb_' + field);
103 check_box = $('cb_' + field);
104 if (check_box.checked) {
104 if (check_box.checked) {
105 Element.show("operators_" + field);
105 Element.show("operators_" + field);
106 Form.Element.enable("operators_" + field);
106 Form.Element.enable("operators_" + field);
107 toggle_operator(field);
107 toggle_operator(field);
108 } else {
108 } else {
109 Element.hide("operators_" + field);
109 Element.hide("operators_" + field);
110 Form.Element.disable("operators_" + field);
110 Form.Element.disable("operators_" + field);
111 enableValues(field, []);
111 enableValues(field, []);
112 }
112 }
113 }
113 }
114
114
115 function enableValues(field, indexes) {
115 function enableValues(field, indexes) {
116 var f = $$(".values_" + field);
116 var f = $$(".values_" + field);
117 for(var i=0;i<f.length;i++) {
117 for(var i=0;i<f.length;i++) {
118 if (indexes.include(i)) {
118 if (indexes.include(i)) {
119 Form.Element.enable(f[i]);
119 Form.Element.enable(f[i]);
120 f[i].up('span').show();
120 f[i].up('span').show();
121 } else {
121 } else {
122 f[i].value = '';
122 f[i].value = '';
123 Form.Element.disable(f[i]);
123 Form.Element.disable(f[i]);
124 f[i].up('span').hide();
124 f[i].up('span').hide();
125 }
125 }
126 }
126 }
127 if (indexes.length > 0) {
127 if (indexes.length > 0) {
128 Element.show("div_values_" + field);
128 Element.show("div_values_" + field);
129 } else {
129 } else {
130 Element.hide("div_values_" + field);
130 Element.hide("div_values_" + field);
131 }
131 }
132 }
132 }
133
133
134 function toggle_operator(field) {
134 function toggle_operator(field) {
135 operator = $("operators_" + field);
135 operator = $("operators_" + field);
136 switch (operator.value) {
136 switch (operator.value) {
137 case "!*":
137 case "!*":
138 case "*":
138 case "*":
139 case "t":
139 case "t":
140 case "w":
140 case "w":
141 case "o":
141 case "o":
142 case "c":
142 case "c":
143 enableValues(field, []);
143 enableValues(field, []);
144 break;
144 break;
145 case "><":
145 case "><":
146 enableValues(field, [0,1]);
146 enableValues(field, [0,1]);
147 break;
147 break;
148 case "<t+":
148 case "<t+":
149 case ">t+":
149 case ">t+":
150 case "t+":
150 case "t+":
151 case ">t-":
151 case ">t-":
152 case "<t-":
152 case "<t-":
153 case "t-":
153 case "t-":
154 enableValues(field, [2]);
154 enableValues(field, [2]);
155 break;
155 break;
156 default:
156 default:
157 enableValues(field, [0]);
157 enableValues(field, [0]);
158 break;
158 break;
159 }
159 }
160 }
160 }
161
161
162 function toggle_multi_select(el) {
162 function toggle_multi_select(el) {
163 var select = $(el);
163 var select = $(el);
164 if (select.multiple == true) {
164 if (select.multiple == true) {
165 select.multiple = false;
165 select.multiple = false;
166 } else {
166 } else {
167 select.multiple = true;
167 select.multiple = true;
168 }
168 }
169 }
169 }
170
170
171 function submit_query_form(id) {
171 function submit_query_form(id) {
172 selectAllOptions("selected_columns");
172 selectAllOptions("selected_columns");
173 $(id).submit();
173 $(id).submit();
174 }
174 }
175
175
176 function apply_filters_observer() {
176 function apply_filters_observer() {
177 $$("#query_form input[type=text]").invoke("observe", "keypress", function(e){
177 $$("#query_form input[type=text]").invoke("observe", "keypress", function(e){
178 if(e.keyCode == Event.KEY_RETURN) {
178 if(e.keyCode == Event.KEY_RETURN) {
179 submit_query_form("query_form");
179 submit_query_form("query_form");
180 }
180 }
181 });
181 });
182 }
182 }
183
183
184 var fileFieldCount = 1;
184 var fileFieldCount = 1;
185
185
186 function addFileField() {
186 function addFileField() {
187 var fields = $('attachments_fields');
187 var fields = $('attachments_fields');
188 if (fields.childElements().length >= 10) return false;
188 if (fields.childElements().length >= 10) return false;
189 fileFieldCount++;
189 fileFieldCount++;
190 var s = document.createElement("span");
190 var s = new Element('span');
191 s.update(fields.down('span').innerHTML);
191 s.update(fields.down('span').innerHTML);
192 s.down('input.file').name = "attachments[" + fileFieldCount + "][file]";
192 s.down('input.file').name = "attachments[" + fileFieldCount + "][file]";
193 s.down('input.description').name = "attachments[" + fileFieldCount + "][description]";
193 s.down('input.description').name = "attachments[" + fileFieldCount + "][description]";
194 fields.appendChild(s);
194 fields.appendChild(s);
195 }
195 }
196
196
197 function removeFileField(el) {
197 function removeFileField(el) {
198 var fields = $('attachments_fields');
198 var fields = $('attachments_fields');
199 var s = Element.up(el, 'span');
199 var s = Element.up(el, 'span');
200 if (fields.childElements().length > 1) {
200 if (fields.childElements().length > 1) {
201 s.remove();
201 s.remove();
202 } else {
202 } else {
203 s.update(s.innerHTML);
203 s.update(s.innerHTML);
204 }
204 }
205 }
205 }
206
206
207 function checkFileSize(el, maxSize, message) {
207 function checkFileSize(el, maxSize, message) {
208 var files = el.files;
208 var files = el.files;
209 if (files) {
209 if (files) {
210 for (var i=0; i<files.length; i++) {
210 for (var i=0; i<files.length; i++) {
211 if (files[i].size > maxSize) {
211 if (files[i].size > maxSize) {
212 alert(message);
212 alert(message);
213 el.value = "";
213 el.value = "";
214 }
214 }
215 }
215 }
216 }
216 }
217 }
217 }
218
218
219 function showTab(name) {
219 function showTab(name) {
220 var f = $$('div#content .tab-content');
220 var f = $$('div#content .tab-content');
221 for(var i=0; i<f.length; i++){
221 for(var i=0; i<f.length; i++){
222 Element.hide(f[i]);
222 Element.hide(f[i]);
223 }
223 }
224 var f = $$('div.tabs a');
224 var f = $$('div.tabs a');
225 for(var i=0; i<f.length; i++){
225 for(var i=0; i<f.length; i++){
226 Element.removeClassName(f[i], "selected");
226 Element.removeClassName(f[i], "selected");
227 }
227 }
228 Element.show('tab-content-' + name);
228 Element.show('tab-content-' + name);
229 Element.addClassName('tab-' + name, "selected");
229 Element.addClassName('tab-' + name, "selected");
230 return false;
230 return false;
231 }
231 }
232
232
233 function moveTabRight(el) {
233 function moveTabRight(el) {
234 var lis = Element.up(el, 'div.tabs').down('ul').childElements();
234 var lis = Element.up(el, 'div.tabs').down('ul').childElements();
235 var tabsWidth = 0;
235 var tabsWidth = 0;
236 var i;
236 var i;
237 for (i=0; i<lis.length; i++) {
237 for (i=0; i<lis.length; i++) {
238 if (lis[i].visible()) {
238 if (lis[i].visible()) {
239 tabsWidth += lis[i].getWidth() + 6;
239 tabsWidth += lis[i].getWidth() + 6;
240 }
240 }
241 }
241 }
242 if (tabsWidth < Element.up(el, 'div.tabs').getWidth() - 60) {
242 if (tabsWidth < Element.up(el, 'div.tabs').getWidth() - 60) {
243 return;
243 return;
244 }
244 }
245 i=0;
245 i=0;
246 while (i<lis.length && !lis[i].visible()) {
246 while (i<lis.length && !lis[i].visible()) {
247 i++;
247 i++;
248 }
248 }
249 lis[i].hide();
249 lis[i].hide();
250 }
250 }
251
251
252 function moveTabLeft(el) {
252 function moveTabLeft(el) {
253 var lis = Element.up(el, 'div.tabs').down('ul').childElements();
253 var lis = Element.up(el, 'div.tabs').down('ul').childElements();
254 var i = 0;
254 var i = 0;
255 while (i<lis.length && !lis[i].visible()) {
255 while (i<lis.length && !lis[i].visible()) {
256 i++;
256 i++;
257 }
257 }
258 if (i>0) {
258 if (i>0) {
259 lis[i-1].show();
259 lis[i-1].show();
260 }
260 }
261 }
261 }
262
262
263 function displayTabsButtons() {
263 function displayTabsButtons() {
264 var lis;
264 var lis;
265 var tabsWidth = 0;
265 var tabsWidth = 0;
266 var i;
266 var i;
267 $$('div.tabs').each(function(el) {
267 $$('div.tabs').each(function(el) {
268 lis = el.down('ul').childElements();
268 lis = el.down('ul').childElements();
269 for (i=0; i<lis.length; i++) {
269 for (i=0; i<lis.length; i++) {
270 if (lis[i].visible()) {
270 if (lis[i].visible()) {
271 tabsWidth += lis[i].getWidth() + 6;
271 tabsWidth += lis[i].getWidth() + 6;
272 }
272 }
273 }
273 }
274 if ((tabsWidth < el.getWidth() - 60) && (lis[0].visible())) {
274 if ((tabsWidth < el.getWidth() - 60) && (lis[0].visible())) {
275 el.down('div.tabs-buttons').hide();
275 el.down('div.tabs-buttons').hide();
276 } else {
276 } else {
277 el.down('div.tabs-buttons').show();
277 el.down('div.tabs-buttons').show();
278 }
278 }
279 });
279 });
280 }
280 }
281
281
282 function setPredecessorFieldsVisibility() {
282 function setPredecessorFieldsVisibility() {
283 relationType = $('relation_relation_type');
283 relationType = $('relation_relation_type');
284 if (relationType && (relationType.value == "precedes" || relationType.value == "follows")) {
284 if (relationType && (relationType.value == "precedes" || relationType.value == "follows")) {
285 Element.show('predecessor_fields');
285 Element.show('predecessor_fields');
286 } else {
286 } else {
287 Element.hide('predecessor_fields');
287 Element.hide('predecessor_fields');
288 }
288 }
289 }
289 }
290
290
291 function promptToRemote(text, param, url) {
291 function promptToRemote(text, param, url) {
292 value = prompt(text + ':');
292 value = prompt(text + ':');
293 if (value) {
293 if (value) {
294 new Ajax.Request(url + '?' + param + '=' + encodeURIComponent(value), {asynchronous:true, evalScripts:true});
294 new Ajax.Request(url + '?' + param + '=' + encodeURIComponent(value), {asynchronous:true, evalScripts:true});
295 return false;
295 return false;
296 }
296 }
297 }
297 }
298
298
299 function showModal(id, width) {
299 function showModal(id, width) {
300 el = $(id);
300 el = $(id);
301 if (el == undefined || el.visible()) {return;}
301 if (el == undefined || el.visible()) {return;}
302 var h = $$('body')[0].getHeight();
302 var h = $$('body')[0].getHeight();
303 var d = document.createElement("div");
303 var d = document.createElement("div");
304 d.id = 'modalbg';
304 d.id = 'modalbg';
305 $('main').appendChild(d);
305 $('main').appendChild(d);
306 $('modalbg').setStyle({ width: '100%', height: h + 'px' });
306 $('modalbg').setStyle({ width: '100%', height: h + 'px' });
307 $('modalbg').show();
307 $('modalbg').show();
308
308
309 var pageWidth = document.viewport.getWidth();
309 var pageWidth = document.viewport.getWidth();
310 if (width) {
310 if (width) {
311 el.setStyle({'width': width});
311 el.setStyle({'width': width});
312 }
312 }
313 el.setStyle({'left': (((pageWidth - el.getWidth())/2 *100) / pageWidth) + '%'});
313 el.setStyle({'left': (((pageWidth - el.getWidth())/2 *100) / pageWidth) + '%'});
314 el.addClassName('modal');
314 el.addClassName('modal');
315 el.show();
315 el.show();
316
316
317 var submit = el.down("input[type=submit]");
317 var submit = el.down("input[type=submit]");
318 if (submit) {
318 if (submit) {
319 submit.focus();
319 submit.focus();
320 }
320 }
321 }
321 }
322
322
323 function hideModal(el) {
323 function hideModal(el) {
324 var modal = Element.up(el, 'div.modal');
324 var modal = Element.up(el, 'div.modal');
325 if (modal) {
325 if (modal) {
326 modal.hide();
326 modal.hide();
327 }
327 }
328 var bg = $('modalbg');
328 var bg = $('modalbg');
329 if (bg) {
329 if (bg) {
330 bg.remove();
330 bg.remove();
331 }
331 }
332 }
332 }
333
333
334 function collapseScmEntry(id) {
334 function collapseScmEntry(id) {
335 var els = document.getElementsByClassName(id, 'browser');
335 var els = document.getElementsByClassName(id, 'browser');
336 for (var i = 0; i < els.length; i++) {
336 for (var i = 0; i < els.length; i++) {
337 if (els[i].hasClassName('open')) {
337 if (els[i].hasClassName('open')) {
338 collapseScmEntry(els[i].id);
338 collapseScmEntry(els[i].id);
339 }
339 }
340 Element.hide(els[i]);
340 Element.hide(els[i]);
341 }
341 }
342 $(id).removeClassName('open');
342 $(id).removeClassName('open');
343 }
343 }
344
344
345 function expandScmEntry(id) {
345 function expandScmEntry(id) {
346 var els = document.getElementsByClassName(id, 'browser');
346 var els = document.getElementsByClassName(id, 'browser');
347 for (var i = 0; i < els.length; i++) {
347 for (var i = 0; i < els.length; i++) {
348 Element.show(els[i]);
348 Element.show(els[i]);
349 if (els[i].hasClassName('loaded') && !els[i].hasClassName('collapsed')) {
349 if (els[i].hasClassName('loaded') && !els[i].hasClassName('collapsed')) {
350 expandScmEntry(els[i].id);
350 expandScmEntry(els[i].id);
351 }
351 }
352 }
352 }
353 $(id).addClassName('open');
353 $(id).addClassName('open');
354 }
354 }
355
355
356 function scmEntryClick(id) {
356 function scmEntryClick(id) {
357 el = $(id);
357 el = $(id);
358 if (el.hasClassName('open')) {
358 if (el.hasClassName('open')) {
359 collapseScmEntry(id);
359 collapseScmEntry(id);
360 el.addClassName('collapsed');
360 el.addClassName('collapsed');
361 return false;
361 return false;
362 } else if (el.hasClassName('loaded')) {
362 } else if (el.hasClassName('loaded')) {
363 expandScmEntry(id);
363 expandScmEntry(id);
364 el.removeClassName('collapsed');
364 el.removeClassName('collapsed');
365 return false;
365 return false;
366 }
366 }
367 if (el.hasClassName('loading')) {
367 if (el.hasClassName('loading')) {
368 return false;
368 return false;
369 }
369 }
370 el.addClassName('loading');
370 el.addClassName('loading');
371 return true;
371 return true;
372 }
372 }
373
373
374 function scmEntryLoaded(id) {
374 function scmEntryLoaded(id) {
375 Element.addClassName(id, 'open');
375 Element.addClassName(id, 'open');
376 Element.addClassName(id, 'loaded');
376 Element.addClassName(id, 'loaded');
377 Element.removeClassName(id, 'loading');
377 Element.removeClassName(id, 'loading');
378 }
378 }
379
379
380 function randomKey(size) {
380 function randomKey(size) {
381 var chars = new Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');
381 var chars = new Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');
382 var key = '';
382 var key = '';
383 for (i = 0; i < size; i++) {
383 for (i = 0; i < size; i++) {
384 key += chars[Math.floor(Math.random() * chars.length)];
384 key += chars[Math.floor(Math.random() * chars.length)];
385 }
385 }
386 return key;
386 return key;
387 }
387 }
388
388
389 function observeParentIssueField(url) {
389 function observeParentIssueField(url) {
390 new Ajax.Autocompleter('issue_parent_issue_id',
390 new Ajax.Autocompleter('issue_parent_issue_id',
391 'parent_issue_candidates',
391 'parent_issue_candidates',
392 url,
392 url,
393 { minChars: 3,
393 { minChars: 3,
394 frequency: 0.5,
394 frequency: 0.5,
395 paramName: 'q',
395 paramName: 'q',
396 method: 'get',
396 method: 'get',
397 updateElement: function(value) {
397 updateElement: function(value) {
398 document.getElementById('issue_parent_issue_id').value = value.id;
398 document.getElementById('issue_parent_issue_id').value = value.id;
399 }});
399 }});
400 }
400 }
401
401
402 function observeRelatedIssueField(url) {
402 function observeRelatedIssueField(url) {
403 new Ajax.Autocompleter('relation_issue_to_id',
403 new Ajax.Autocompleter('relation_issue_to_id',
404 'related_issue_candidates',
404 'related_issue_candidates',
405 url,
405 url,
406 { minChars: 3,
406 { minChars: 3,
407 frequency: 0.5,
407 frequency: 0.5,
408 paramName: 'q',
408 paramName: 'q',
409 method: 'get',
409 method: 'get',
410 updateElement: function(value) {
410 updateElement: function(value) {
411 document.getElementById('relation_issue_to_id').value = value.id;
411 document.getElementById('relation_issue_to_id').value = value.id;
412 },
412 },
413 parameters: 'scope=all'
413 parameters: 'scope=all'
414 });
414 });
415 }
415 }
416
416
417 function setVisible(id, visible) {
417 function setVisible(id, visible) {
418 var el = $(id);
418 var el = $(id);
419 if (el) {if (visible) {el.show();} else {el.hide();}}
419 if (el) {if (visible) {el.show();} else {el.hide();}}
420 }
420 }
421
421
422 function observeProjectModules() {
422 function observeProjectModules() {
423 var f = function() {
423 var f = function() {
424 /* Hides trackers and issues custom fields on the new project form when issue_tracking module is disabled */
424 /* Hides trackers and issues custom fields on the new project form when issue_tracking module is disabled */
425 var c = ($('project_enabled_module_names_issue_tracking').checked == true);
425 var c = ($('project_enabled_module_names_issue_tracking').checked == true);
426 setVisible('project_trackers', c);
426 setVisible('project_trackers', c);
427 setVisible('project_issue_custom_fields', c);
427 setVisible('project_issue_custom_fields', c);
428 };
428 };
429
429
430 Event.observe(window, 'load', f);
430 Event.observe(window, 'load', f);
431 Event.observe('project_enabled_module_names_issue_tracking', 'change', f);
431 Event.observe('project_enabled_module_names_issue_tracking', 'change', f);
432 }
432 }
433
433
434 /*
434 /*
435 * Class used to warn user when leaving a page with unsaved textarea
435 * Class used to warn user when leaving a page with unsaved textarea
436 * Author: mathias.fischer@berlinonline.de
436 * Author: mathias.fischer@berlinonline.de
437 */
437 */
438
438
439 var WarnLeavingUnsaved = Class.create({
439 var WarnLeavingUnsaved = Class.create({
440 observedForms: false,
440 observedForms: false,
441 observedElements: false,
441 observedElements: false,
442 changedForms: false,
442 changedForms: false,
443 message: null,
443 message: null,
444
444
445 initialize: function(message){
445 initialize: function(message){
446 this.observedForms = $$('form');
446 this.observedForms = $$('form');
447 this.observedElements = $$('textarea');
447 this.observedElements = $$('textarea');
448 this.message = message;
448 this.message = message;
449
449
450 this.observedElements.each(this.observeChange.bind(this));
450 this.observedElements.each(this.observeChange.bind(this));
451 this.observedForms.each(this.submitAction.bind(this));
451 this.observedForms.each(this.submitAction.bind(this));
452
452
453 window.onbeforeunload = this.unload.bind(this);
453 window.onbeforeunload = this.unload.bind(this);
454 },
454 },
455
455
456 unload: function(){
456 unload: function(){
457 this.observedElements.each(function(el) {el.blur();})
457 this.observedElements.each(function(el) {el.blur();})
458 if(this.changedForms)
458 if(this.changedForms)
459 return this.message;
459 return this.message;
460 },
460 },
461
461
462 setChanged: function(){
462 setChanged: function(){
463 this.changedForms = true;
463 this.changedForms = true;
464 },
464 },
465
465
466 setUnchanged: function(){
466 setUnchanged: function(){
467 this.changedForms = false;
467 this.changedForms = false;
468 },
468 },
469
469
470 observeChange: function(element){
470 observeChange: function(element){
471 element.observe('change',this.setChanged.bindAsEventListener(this));
471 element.observe('change',this.setChanged.bindAsEventListener(this));
472 },
472 },
473
473
474 submitAction: function(element){
474 submitAction: function(element){
475 element.observe('submit',this.setUnchanged.bindAsEventListener(this));
475 element.observe('submit',this.setUnchanged.bindAsEventListener(this));
476 }
476 }
477 });
477 });
478
478
479 /*
479 /*
480 * 1 - registers a callback which copies the csrf token into the
480 * 1 - registers a callback which copies the csrf token into the
481 * X-CSRF-Token header with each ajax request. Necessary to
481 * X-CSRF-Token header with each ajax request. Necessary to
482 * work with rails applications which have fixed
482 * work with rails applications which have fixed
483 * CVE-2011-0447
483 * CVE-2011-0447
484 * 2 - shows and hides ajax indicator
484 * 2 - shows and hides ajax indicator
485 */
485 */
486 Ajax.Responders.register({
486 Ajax.Responders.register({
487 onCreate: function(request){
487 onCreate: function(request){
488 var csrf_meta_tag = $$('meta[name=csrf-token]')[0];
488 var csrf_meta_tag = $$('meta[name=csrf-token]')[0];
489
489
490 if (csrf_meta_tag) {
490 if (csrf_meta_tag) {
491 var header = 'X-CSRF-Token',
491 var header = 'X-CSRF-Token',
492 token = csrf_meta_tag.readAttribute('content');
492 token = csrf_meta_tag.readAttribute('content');
493
493
494 if (!request.options.requestHeaders) {
494 if (!request.options.requestHeaders) {
495 request.options.requestHeaders = {};
495 request.options.requestHeaders = {};
496 }
496 }
497 request.options.requestHeaders[header] = token;
497 request.options.requestHeaders[header] = token;
498 }
498 }
499
499
500 if ($('ajax-indicator') && Ajax.activeRequestCount > 0) {
500 if ($('ajax-indicator') && Ajax.activeRequestCount > 0) {
501 Element.show('ajax-indicator');
501 Element.show('ajax-indicator');
502 }
502 }
503 },
503 },
504 onComplete: function(){
504 onComplete: function(){
505 if ($('ajax-indicator') && Ajax.activeRequestCount == 0) {
505 if ($('ajax-indicator') && Ajax.activeRequestCount == 0) {
506 Element.hide('ajax-indicator');
506 Element.hide('ajax-indicator');
507 }
507 }
508 }
508 }
509 });
509 });
510
510
511 function hideOnLoad() {
511 function hideOnLoad() {
512 $$('.hol').each(function(el) {
512 $$('.hol').each(function(el) {
513 el.hide();
513 el.hide();
514 });
514 });
515 }
515 }
516
516
517 Event.observe(window, 'load', hideOnLoad);
517 Event.observe(window, 'load', hideOnLoad);
General Comments 0
You need to be logged in to leave comments. Login now