Mercurial > hg > soundsoftware-site
diff public/javascripts/application.js @ 524:1248a47e81b3 feature_36
Merge from branch "luisf"
author | luisf <luis.figueira@eecs.qmul.ac.uk> |
---|---|
date | Mon, 25 Jul 2011 14:39:38 +0100 |
parents | 851510f1b535 |
children | 5e80956cc792 |
line wrap: on
line diff
--- a/public/javascripts/application.js Fri Jul 15 17:21:05 2011 +0100 +++ b/public/javascripts/application.js Mon Jul 25 14:39:38 2011 +0100 @@ -40,12 +40,49 @@ } } +function collapseAllRowGroups(el) { + var tbody = Element.up(el, 'tbody'); + tbody.childElements('tr').each(function(tr) { + if (tr.hasClassName('group')) { + tr.removeClassName('open'); + } else { + tr.hide(); + } + }) +} + +function expandAllRowGroups(el) { + var tbody = Element.up(el, 'tbody'); + tbody.childElements('tr').each(function(tr) { + if (tr.hasClassName('group')) { + tr.addClassName('open'); + } else { + tr.show(); + } + }) +} + +function toggleAllRowGroups(el) { + var tr = Element.up(el, 'tr'); + if (tr.hasClassName('open')) { + collapseAllRowGroups(el); + } else { + expandAllRowGroups(el); + } +} + function toggleFieldset(el) { var fieldset = Element.up(el, 'fieldset'); fieldset.toggleClassName('collapsed'); Effect.toggle(fieldset.down('div'), 'slide', {duration:0.2}); } +function hideFieldset(el) { + var fieldset = Element.up(el, 'fieldset'); + fieldset.toggleClassName('collapsed'); + fieldset.down('div').hide(); +} + var fileFieldCount = 1; function addFileField() { @@ -218,9 +255,103 @@ }}); } -/* shows and hides ajax indicator */ +function observeRelatedIssueField(url) { + new Ajax.Autocompleter('relation_issue_to_id', + 'related_issue_candidates', + url, + { minChars: 3, + frequency: 0.5, + paramName: 'q', + updateElement: function(value) { + document.getElementById('relation_issue_to_id').value = value.id; + }, + parameters: 'scope=all' + }); +} + +function setVisible(id, visible) { + var el = $(id); + if (el) {if (visible) {el.show();} else {el.hide();}} +} + +function observeProjectModules() { + var f = function() { + /* Hides trackers and issues custom fields on the new project form when issue_tracking module is disabled */ + var c = ($('project_enabled_module_names_issue_tracking').checked == true); + setVisible('project_trackers', c); + setVisible('project_issue_custom_fields', c); + }; + + Event.observe(window, 'load', f); + Event.observe('project_enabled_module_names_issue_tracking', 'change', f); +} + +/* + * Class used to warn user when leaving a page with unsaved textarea + * Author: mathias.fischer@berlinonline.de +*/ + +var WarnLeavingUnsaved = Class.create({ + observedForms: false, + observedElements: false, + changedForms: false, + message: null, + + initialize: function(message){ + this.observedForms = $$('form'); + this.observedElements = $$('textarea'); + this.message = message; + + this.observedElements.each(this.observeChange.bind(this)); + this.observedForms.each(this.submitAction.bind(this)); + + window.onbeforeunload = this.unload.bind(this); + }, + + unload: function(){ + this.observedElements.each(function(el) {el.blur();}) + if(this.changedForms) + return this.message; + }, + + setChanged: function(){ + this.changedForms = true; + }, + + setUnchanged: function(){ + this.changedForms = false; + }, + + observeChange: function(element){ + element.observe('change',this.setChanged.bindAsEventListener(this)); + }, + + submitAction: function(element){ + element.observe('submit',this.setUnchanged.bindAsEventListener(this)); + } +}); + +/* + * 1 - registers a callback which copies the csrf token into the + * X-CSRF-Token header with each ajax request. Necessary to + * work with rails applications which have fixed + * CVE-2011-0447 + * 2 - shows and hides ajax indicator + */ Ajax.Responders.register({ - onCreate: function(){ + onCreate: function(request){ + var csrf_meta_tag = $$('meta[name=csrf-token]')[0]; + + if (csrf_meta_tag) { + var header = 'X-CSRF-Token', + token = csrf_meta_tag.readAttribute('content'); + + if (!request.options.requestHeaders) { + request.options.requestHeaders = {}; + } + request.options.requestHeaders[header] = token; + } + if ($('ajax-indicator') && Ajax.activeRequestCount > 0) { Element.show('ajax-indicator'); }