##// END OF EJS Templates
Focus the first text input or submit button when showing a modal box....
Jean-Philippe Lang -
r8753:0729ee143bc4
parent child
Show More
@@ -1,522 +1,523
1 /* Redmine - project management software
1 /* Redmine - project management software
2 Copyright (C) 2006-2012 Jean-Philippe Lang */
2 Copyright (C) 2006-2012 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 = new Element('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 if (el.down("input[type=text]")) {
318 if (submit) {
318 el.down("input[type=text]").focus();
319 submit.focus();
319 } else if (el.down("input[type=submit]")) {
320 }
320 el.down("input[type=submit]").focus();
321 }
321 }
322 }
322
323
323 function hideModal(el) {
324 function hideModal(el) {
324 var modal;
325 var modal;
325 if (el) {
326 if (el) {
326 modal = Element.up(el, 'div.modal');
327 modal = Element.up(el, 'div.modal');
327 } else {
328 } else {
328 modal = $('ajax-modal');
329 modal = $('ajax-modal');
329 }
330 }
330 if (modal) {
331 if (modal) {
331 modal.hide();
332 modal.hide();
332 }
333 }
333 var bg = $('modalbg');
334 var bg = $('modalbg');
334 if (bg) {
335 if (bg) {
335 bg.remove();
336 bg.remove();
336 }
337 }
337 }
338 }
338
339
339 function collapseScmEntry(id) {
340 function collapseScmEntry(id) {
340 var els = document.getElementsByClassName(id, 'browser');
341 var els = document.getElementsByClassName(id, 'browser');
341 for (var i = 0; i < els.length; i++) {
342 for (var i = 0; i < els.length; i++) {
342 if (els[i].hasClassName('open')) {
343 if (els[i].hasClassName('open')) {
343 collapseScmEntry(els[i].id);
344 collapseScmEntry(els[i].id);
344 }
345 }
345 Element.hide(els[i]);
346 Element.hide(els[i]);
346 }
347 }
347 $(id).removeClassName('open');
348 $(id).removeClassName('open');
348 }
349 }
349
350
350 function expandScmEntry(id) {
351 function expandScmEntry(id) {
351 var els = document.getElementsByClassName(id, 'browser');
352 var els = document.getElementsByClassName(id, 'browser');
352 for (var i = 0; i < els.length; i++) {
353 for (var i = 0; i < els.length; i++) {
353 Element.show(els[i]);
354 Element.show(els[i]);
354 if (els[i].hasClassName('loaded') && !els[i].hasClassName('collapsed')) {
355 if (els[i].hasClassName('loaded') && !els[i].hasClassName('collapsed')) {
355 expandScmEntry(els[i].id);
356 expandScmEntry(els[i].id);
356 }
357 }
357 }
358 }
358 $(id).addClassName('open');
359 $(id).addClassName('open');
359 }
360 }
360
361
361 function scmEntryClick(id) {
362 function scmEntryClick(id) {
362 el = $(id);
363 el = $(id);
363 if (el.hasClassName('open')) {
364 if (el.hasClassName('open')) {
364 collapseScmEntry(id);
365 collapseScmEntry(id);
365 el.addClassName('collapsed');
366 el.addClassName('collapsed');
366 return false;
367 return false;
367 } else if (el.hasClassName('loaded')) {
368 } else if (el.hasClassName('loaded')) {
368 expandScmEntry(id);
369 expandScmEntry(id);
369 el.removeClassName('collapsed');
370 el.removeClassName('collapsed');
370 return false;
371 return false;
371 }
372 }
372 if (el.hasClassName('loading')) {
373 if (el.hasClassName('loading')) {
373 return false;
374 return false;
374 }
375 }
375 el.addClassName('loading');
376 el.addClassName('loading');
376 return true;
377 return true;
377 }
378 }
378
379
379 function scmEntryLoaded(id) {
380 function scmEntryLoaded(id) {
380 Element.addClassName(id, 'open');
381 Element.addClassName(id, 'open');
381 Element.addClassName(id, 'loaded');
382 Element.addClassName(id, 'loaded');
382 Element.removeClassName(id, 'loading');
383 Element.removeClassName(id, 'loading');
383 }
384 }
384
385
385 function randomKey(size) {
386 function randomKey(size) {
386 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');
387 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');
387 var key = '';
388 var key = '';
388 for (i = 0; i < size; i++) {
389 for (i = 0; i < size; i++) {
389 key += chars[Math.floor(Math.random() * chars.length)];
390 key += chars[Math.floor(Math.random() * chars.length)];
390 }
391 }
391 return key;
392 return key;
392 }
393 }
393
394
394 function observeParentIssueField(url) {
395 function observeParentIssueField(url) {
395 new Ajax.Autocompleter('issue_parent_issue_id',
396 new Ajax.Autocompleter('issue_parent_issue_id',
396 'parent_issue_candidates',
397 'parent_issue_candidates',
397 url,
398 url,
398 { minChars: 3,
399 { minChars: 3,
399 frequency: 0.5,
400 frequency: 0.5,
400 paramName: 'q',
401 paramName: 'q',
401 method: 'get',
402 method: 'get',
402 updateElement: function(value) {
403 updateElement: function(value) {
403 document.getElementById('issue_parent_issue_id').value = value.id;
404 document.getElementById('issue_parent_issue_id').value = value.id;
404 }});
405 }});
405 }
406 }
406
407
407 function observeRelatedIssueField(url) {
408 function observeRelatedIssueField(url) {
408 new Ajax.Autocompleter('relation_issue_to_id',
409 new Ajax.Autocompleter('relation_issue_to_id',
409 'related_issue_candidates',
410 'related_issue_candidates',
410 url,
411 url,
411 { minChars: 3,
412 { minChars: 3,
412 frequency: 0.5,
413 frequency: 0.5,
413 paramName: 'q',
414 paramName: 'q',
414 method: 'get',
415 method: 'get',
415 updateElement: function(value) {
416 updateElement: function(value) {
416 document.getElementById('relation_issue_to_id').value = value.id;
417 document.getElementById('relation_issue_to_id').value = value.id;
417 },
418 },
418 parameters: 'scope=all'
419 parameters: 'scope=all'
419 });
420 });
420 }
421 }
421
422
422 function setVisible(id, visible) {
423 function setVisible(id, visible) {
423 var el = $(id);
424 var el = $(id);
424 if (el) {if (visible) {el.show();} else {el.hide();}}
425 if (el) {if (visible) {el.show();} else {el.hide();}}
425 }
426 }
426
427
427 function observeProjectModules() {
428 function observeProjectModules() {
428 var f = function() {
429 var f = function() {
429 /* Hides trackers and issues custom fields on the new project form when issue_tracking module is disabled */
430 /* Hides trackers and issues custom fields on the new project form when issue_tracking module is disabled */
430 var c = ($('project_enabled_module_names_issue_tracking').checked == true);
431 var c = ($('project_enabled_module_names_issue_tracking').checked == true);
431 setVisible('project_trackers', c);
432 setVisible('project_trackers', c);
432 setVisible('project_issue_custom_fields', c);
433 setVisible('project_issue_custom_fields', c);
433 };
434 };
434
435
435 Event.observe(window, 'load', f);
436 Event.observe(window, 'load', f);
436 Event.observe('project_enabled_module_names_issue_tracking', 'change', f);
437 Event.observe('project_enabled_module_names_issue_tracking', 'change', f);
437 }
438 }
438
439
439 /*
440 /*
440 * Class used to warn user when leaving a page with unsaved textarea
441 * Class used to warn user when leaving a page with unsaved textarea
441 * Author: mathias.fischer@berlinonline.de
442 * Author: mathias.fischer@berlinonline.de
442 */
443 */
443
444
444 var WarnLeavingUnsaved = Class.create({
445 var WarnLeavingUnsaved = Class.create({
445 observedForms: false,
446 observedForms: false,
446 observedElements: false,
447 observedElements: false,
447 changedForms: false,
448 changedForms: false,
448 message: null,
449 message: null,
449
450
450 initialize: function(message){
451 initialize: function(message){
451 this.observedForms = $$('form');
452 this.observedForms = $$('form');
452 this.observedElements = $$('textarea');
453 this.observedElements = $$('textarea');
453 this.message = message;
454 this.message = message;
454
455
455 this.observedElements.each(this.observeChange.bind(this));
456 this.observedElements.each(this.observeChange.bind(this));
456 this.observedForms.each(this.submitAction.bind(this));
457 this.observedForms.each(this.submitAction.bind(this));
457
458
458 window.onbeforeunload = this.unload.bind(this);
459 window.onbeforeunload = this.unload.bind(this);
459 },
460 },
460
461
461 unload: function(){
462 unload: function(){
462 this.observedElements.each(function(el) {el.blur();})
463 this.observedElements.each(function(el) {el.blur();})
463 if(this.changedForms)
464 if(this.changedForms)
464 return this.message;
465 return this.message;
465 },
466 },
466
467
467 setChanged: function(){
468 setChanged: function(){
468 this.changedForms = true;
469 this.changedForms = true;
469 },
470 },
470
471
471 setUnchanged: function(){
472 setUnchanged: function(){
472 this.changedForms = false;
473 this.changedForms = false;
473 },
474 },
474
475
475 observeChange: function(element){
476 observeChange: function(element){
476 element.observe('change',this.setChanged.bindAsEventListener(this));
477 element.observe('change',this.setChanged.bindAsEventListener(this));
477 },
478 },
478
479
479 submitAction: function(element){
480 submitAction: function(element){
480 element.observe('submit',this.setUnchanged.bindAsEventListener(this));
481 element.observe('submit',this.setUnchanged.bindAsEventListener(this));
481 }
482 }
482 });
483 });
483
484
484 /*
485 /*
485 * 1 - registers a callback which copies the csrf token into the
486 * 1 - registers a callback which copies the csrf token into the
486 * X-CSRF-Token header with each ajax request. Necessary to
487 * X-CSRF-Token header with each ajax request. Necessary to
487 * work with rails applications which have fixed
488 * work with rails applications which have fixed
488 * CVE-2011-0447
489 * CVE-2011-0447
489 * 2 - shows and hides ajax indicator
490 * 2 - shows and hides ajax indicator
490 */
491 */
491 Ajax.Responders.register({
492 Ajax.Responders.register({
492 onCreate: function(request){
493 onCreate: function(request){
493 var csrf_meta_tag = $$('meta[name=csrf-token]')[0];
494 var csrf_meta_tag = $$('meta[name=csrf-token]')[0];
494
495
495 if (csrf_meta_tag) {
496 if (csrf_meta_tag) {
496 var header = 'X-CSRF-Token',
497 var header = 'X-CSRF-Token',
497 token = csrf_meta_tag.readAttribute('content');
498 token = csrf_meta_tag.readAttribute('content');
498
499
499 if (!request.options.requestHeaders) {
500 if (!request.options.requestHeaders) {
500 request.options.requestHeaders = {};
501 request.options.requestHeaders = {};
501 }
502 }
502 request.options.requestHeaders[header] = token;
503 request.options.requestHeaders[header] = token;
503 }
504 }
504
505
505 if ($('ajax-indicator') && Ajax.activeRequestCount > 0) {
506 if ($('ajax-indicator') && Ajax.activeRequestCount > 0) {
506 Element.show('ajax-indicator');
507 Element.show('ajax-indicator');
507 }
508 }
508 },
509 },
509 onComplete: function(){
510 onComplete: function(){
510 if ($('ajax-indicator') && Ajax.activeRequestCount == 0) {
511 if ($('ajax-indicator') && Ajax.activeRequestCount == 0) {
511 Element.hide('ajax-indicator');
512 Element.hide('ajax-indicator');
512 }
513 }
513 }
514 }
514 });
515 });
515
516
516 function hideOnLoad() {
517 function hideOnLoad() {
517 $$('.hol').each(function(el) {
518 $$('.hol').each(function(el) {
518 el.hide();
519 el.hide();
519 });
520 });
520 }
521 }
521
522
522 Event.observe(window, 'load', hideOnLoad);
523 Event.observe(window, 'load', hideOnLoad);
General Comments 0
You need to be logged in to leave comments. Login now