Mercurial > hg > soundsoftware-site
comparison public/javascripts/application.js @ 514:7eba09d624db live
Merge
author | Chris Cannam |
---|---|
date | Thu, 14 Jul 2011 10:50:53 +0100 |
parents | 851510f1b535 |
children | 5e80956cc792 |
comparison
equal
deleted
inserted
replaced
512:b9aebdd7dd40 | 514:7eba09d624db |
---|---|
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) { | |
44 var tbody = Element.up(el, 'tbody'); | |
45 tbody.childElements('tr').each(function(tr) { | |
46 if (tr.hasClassName('group')) { | |
47 tr.removeClassName('open'); | |
48 } else { | |
49 tr.hide(); | |
50 } | |
51 }) | |
52 } | |
53 | |
54 function expandAllRowGroups(el) { | |
55 var tbody = Element.up(el, 'tbody'); | |
56 tbody.childElements('tr').each(function(tr) { | |
57 if (tr.hasClassName('group')) { | |
58 tr.addClassName('open'); | |
59 } else { | |
60 tr.show(); | |
61 } | |
62 }) | |
63 } | |
64 | |
65 function toggleAllRowGroups(el) { | |
66 var tr = Element.up(el, 'tr'); | |
67 if (tr.hasClassName('open')) { | |
68 collapseAllRowGroups(el); | |
69 } else { | |
70 expandAllRowGroups(el); | |
71 } | |
72 } | |
73 | |
43 function toggleFieldset(el) { | 74 function toggleFieldset(el) { |
44 var fieldset = Element.up(el, 'fieldset'); | 75 var fieldset = Element.up(el, 'fieldset'); |
45 fieldset.toggleClassName('collapsed'); | 76 fieldset.toggleClassName('collapsed'); |
46 Effect.toggle(fieldset.down('div'), 'slide', {duration:0.2}); | 77 Effect.toggle(fieldset.down('div'), 'slide', {duration:0.2}); |
78 } | |
79 | |
80 function hideFieldset(el) { | |
81 var fieldset = Element.up(el, 'fieldset'); | |
82 fieldset.toggleClassName('collapsed'); | |
83 fieldset.down('div').hide(); | |
47 } | 84 } |
48 | 85 |
49 var fileFieldCount = 1; | 86 var fileFieldCount = 1; |
50 | 87 |
51 function addFileField() { | 88 function addFileField() { |
216 updateElement: function(value) { | 253 updateElement: function(value) { |
217 document.getElementById('issue_parent_issue_id').value = value.id; | 254 document.getElementById('issue_parent_issue_id').value = value.id; |
218 }}); | 255 }}); |
219 } | 256 } |
220 | 257 |
221 /* shows and hides ajax indicator */ | 258 function observeRelatedIssueField(url) { |
259 new Ajax.Autocompleter('relation_issue_to_id', | |
260 'related_issue_candidates', | |
261 url, | |
262 { minChars: 3, | |
263 frequency: 0.5, | |
264 paramName: 'q', | |
265 updateElement: function(value) { | |
266 document.getElementById('relation_issue_to_id').value = value.id; | |
267 }, | |
268 parameters: 'scope=all' | |
269 }); | |
270 } | |
271 | |
272 function setVisible(id, visible) { | |
273 var el = $(id); | |
274 if (el) {if (visible) {el.show();} else {el.hide();}} | |
275 } | |
276 | |
277 function observeProjectModules() { | |
278 var f = function() { | |
279 /* Hides trackers and issues custom fields on the new project form when issue_tracking module is disabled */ | |
280 var c = ($('project_enabled_module_names_issue_tracking').checked == true); | |
281 setVisible('project_trackers', c); | |
282 setVisible('project_issue_custom_fields', c); | |
283 }; | |
284 | |
285 Event.observe(window, 'load', f); | |
286 Event.observe('project_enabled_module_names_issue_tracking', 'change', f); | |
287 } | |
288 | |
289 /* | |
290 * Class used to warn user when leaving a page with unsaved textarea | |
291 * Author: mathias.fischer@berlinonline.de | |
292 */ | |
293 | |
294 var WarnLeavingUnsaved = Class.create({ | |
295 observedForms: false, | |
296 observedElements: false, | |
297 changedForms: false, | |
298 message: null, | |
299 | |
300 initialize: function(message){ | |
301 this.observedForms = $$('form'); | |
302 this.observedElements = $$('textarea'); | |
303 this.message = message; | |
304 | |
305 this.observedElements.each(this.observeChange.bind(this)); | |
306 this.observedForms.each(this.submitAction.bind(this)); | |
307 | |
308 window.onbeforeunload = this.unload.bind(this); | |
309 }, | |
310 | |
311 unload: function(){ | |
312 this.observedElements.each(function(el) {el.blur();}) | |
313 if(this.changedForms) | |
314 return this.message; | |
315 }, | |
316 | |
317 setChanged: function(){ | |
318 this.changedForms = true; | |
319 }, | |
320 | |
321 setUnchanged: function(){ | |
322 this.changedForms = false; | |
323 }, | |
324 | |
325 observeChange: function(element){ | |
326 element.observe('change',this.setChanged.bindAsEventListener(this)); | |
327 }, | |
328 | |
329 submitAction: function(element){ | |
330 element.observe('submit',this.setUnchanged.bindAsEventListener(this)); | |
331 } | |
332 }); | |
333 | |
334 /* | |
335 * 1 - registers a callback which copies the csrf token into the | |
336 * X-CSRF-Token header with each ajax request. Necessary to | |
337 * work with rails applications which have fixed | |
338 * CVE-2011-0447 | |
339 * 2 - shows and hides ajax indicator | |
340 */ | |
222 Ajax.Responders.register({ | 341 Ajax.Responders.register({ |
223 onCreate: function(){ | 342 onCreate: function(request){ |
343 var csrf_meta_tag = $$('meta[name=csrf-token]')[0]; | |
344 | |
345 if (csrf_meta_tag) { | |
346 var header = 'X-CSRF-Token', | |
347 token = csrf_meta_tag.readAttribute('content'); | |
348 | |
349 if (!request.options.requestHeaders) { | |
350 request.options.requestHeaders = {}; | |
351 } | |
352 request.options.requestHeaders[header] = token; | |
353 } | |
354 | |
224 if ($('ajax-indicator') && Ajax.activeRequestCount > 0) { | 355 if ($('ajax-indicator') && Ajax.activeRequestCount > 0) { |
225 Element.show('ajax-indicator'); | 356 Element.show('ajax-indicator'); |
226 } | 357 } |
227 }, | 358 }, |
228 onComplete: function(){ | 359 onComplete: function(){ |