annotate public/javascripts/application.js @ 36:de76cd3e8c8e cc-branches

* Probably abortive experiments in extracting the branch from Hg
author Chris Cannam <chris.cannam@soundsoftware.ac.uk>
date Wed, 20 Oct 2010 10:07:29 +0100
parents cca12e1c1fd4
children 94944d00e43c
rev   line source
Chris@0 1 /* redMine - project management software
Chris@0 2 Copyright (C) 2006-2008 Jean-Philippe Lang */
Chris@0 3
Chris@0 4 function checkAll (id, checked) {
Chris@0 5 var els = Element.descendants(id);
Chris@0 6 for (var i = 0; i < els.length; i++) {
Chris@0 7 if (els[i].disabled==false) {
Chris@0 8 els[i].checked = checked;
Chris@0 9 }
Chris@0 10 }
Chris@0 11 }
Chris@0 12
Chris@0 13 function toggleCheckboxesBySelector(selector) {
Chris@0 14 boxes = $$(selector);
Chris@0 15 var all_checked = true;
Chris@0 16 for (i = 0; i < boxes.length; i++) { if (boxes[i].checked == false) { all_checked = false; } }
Chris@0 17 for (i = 0; i < boxes.length; i++) { boxes[i].checked = !all_checked; }
Chris@0 18 }
Chris@0 19
Chris@0 20 function showAndScrollTo(id, focus) {
Chris@0 21 Element.show(id);
Chris@0 22 if (focus!=null) { Form.Element.focus(focus); }
Chris@0 23 Element.scrollTo(id);
Chris@0 24 }
Chris@0 25
Chris@0 26 function toggleRowGroup(el) {
Chris@0 27 var tr = Element.up(el, 'tr');
Chris@0 28 var n = Element.next(tr);
Chris@0 29 tr.toggleClassName('open');
Chris@0 30 while (n != undefined && !n.hasClassName('group')) {
Chris@0 31 Element.toggle(n);
Chris@0 32 n = Element.next(n);
Chris@0 33 }
Chris@0 34 }
Chris@0 35
Chris@0 36 function toggleFieldset(el) {
Chris@0 37 var fieldset = Element.up(el, 'fieldset');
Chris@0 38 fieldset.toggleClassName('collapsed');
Chris@0 39 Effect.toggle(fieldset.down('div'), 'slide', {duration:0.2});
Chris@0 40 }
Chris@0 41
Chris@0 42 var fileFieldCount = 1;
Chris@0 43
Chris@0 44 function addFileField() {
Chris@0 45 if (fileFieldCount >= 10) return false
Chris@0 46 fileFieldCount++;
Chris@0 47 var f = document.createElement("input");
Chris@0 48 f.type = "file";
Chris@0 49 f.name = "attachments[" + fileFieldCount + "][file]";
Chris@0 50 f.size = 30;
Chris@0 51 var d = document.createElement("input");
Chris@0 52 d.type = "text";
Chris@0 53 d.name = "attachments[" + fileFieldCount + "][description]";
Chris@0 54 d.size = 60;
Chris@1 55 var dLabel = new Element('label');
Chris@0 56 dLabel.addClassName('inline');
Chris@0 57 // Pulls the languge value used for Optional Description
Chris@0 58 dLabel.update($('attachment_description_label_content').innerHTML)
Chris@0 59
Chris@0 60 p = document.getElementById("attachments_fields");
Chris@0 61 p.appendChild(document.createElement("br"));
Chris@0 62 p.appendChild(f);
Chris@0 63 p.appendChild(dLabel);
Chris@0 64 dLabel.appendChild(d);
Chris@0 65
Chris@0 66 }
Chris@0 67
Chris@0 68 function showTab(name) {
Chris@0 69 var f = $$('div#content .tab-content');
Chris@0 70 for(var i=0; i<f.length; i++){
Chris@0 71 Element.hide(f[i]);
Chris@0 72 }
Chris@0 73 var f = $$('div.tabs a');
Chris@0 74 for(var i=0; i<f.length; i++){
Chris@0 75 Element.removeClassName(f[i], "selected");
Chris@0 76 }
Chris@0 77 Element.show('tab-content-' + name);
Chris@0 78 Element.addClassName('tab-' + name, "selected");
Chris@0 79 return false;
Chris@0 80 }
Chris@0 81
Chris@0 82 function moveTabRight(el) {
Chris@0 83 var lis = Element.up(el, 'div.tabs').down('ul').childElements();
Chris@0 84 var tabsWidth = 0;
Chris@0 85 var i;
Chris@0 86 for (i=0; i<lis.length; i++) {
Chris@0 87 if (lis[i].visible()) {
Chris@0 88 tabsWidth += lis[i].getWidth() + 6;
Chris@0 89 }
Chris@0 90 }
Chris@0 91 if (tabsWidth < Element.up(el, 'div.tabs').getWidth() - 60) {
Chris@0 92 return;
Chris@0 93 }
Chris@0 94 i=0;
Chris@0 95 while (i<lis.length && !lis[i].visible()) {
Chris@0 96 i++;
Chris@0 97 }
Chris@0 98 lis[i].hide();
Chris@0 99 }
Chris@0 100
Chris@0 101 function moveTabLeft(el) {
Chris@0 102 var lis = Element.up(el, 'div.tabs').down('ul').childElements();
Chris@0 103 var i = 0;
Chris@0 104 while (i<lis.length && !lis[i].visible()) {
Chris@0 105 i++;
Chris@0 106 }
Chris@0 107 if (i>0) {
Chris@0 108 lis[i-1].show();
Chris@0 109 }
Chris@0 110 }
Chris@0 111
Chris@0 112 function displayTabsButtons() {
Chris@0 113 var lis;
Chris@0 114 var tabsWidth = 0;
Chris@0 115 var i;
Chris@0 116 $$('div.tabs').each(function(el) {
Chris@0 117 lis = el.down('ul').childElements();
Chris@0 118 for (i=0; i<lis.length; i++) {
Chris@0 119 if (lis[i].visible()) {
Chris@0 120 tabsWidth += lis[i].getWidth() + 6;
Chris@0 121 }
Chris@0 122 }
Chris@0 123 if ((tabsWidth < el.getWidth() - 60) && (lis[0].visible())) {
Chris@0 124 el.down('div.tabs-buttons').hide();
Chris@0 125 } else {
Chris@0 126 el.down('div.tabs-buttons').show();
Chris@0 127 }
Chris@0 128 });
Chris@0 129 }
Chris@0 130
Chris@0 131 function setPredecessorFieldsVisibility() {
Chris@0 132 relationType = $('relation_relation_type');
Chris@0 133 if (relationType && (relationType.value == "precedes" || relationType.value == "follows")) {
Chris@0 134 Element.show('predecessor_fields');
Chris@0 135 } else {
Chris@0 136 Element.hide('predecessor_fields');
Chris@0 137 }
Chris@0 138 }
Chris@0 139
Chris@0 140 function promptToRemote(text, param, url) {
Chris@0 141 value = prompt(text + ':');
Chris@0 142 if (value) {
Chris@0 143 new Ajax.Request(url + '?' + param + '=' + encodeURIComponent(value), {asynchronous:true, evalScripts:true});
Chris@0 144 return false;
Chris@0 145 }
Chris@0 146 }
Chris@0 147
Chris@0 148 function collapseScmEntry(id) {
Chris@0 149 var els = document.getElementsByClassName(id, 'browser');
Chris@0 150 for (var i = 0; i < els.length; i++) {
Chris@0 151 if (els[i].hasClassName('open')) {
Chris@0 152 collapseScmEntry(els[i].id);
Chris@0 153 }
Chris@0 154 Element.hide(els[i]);
Chris@0 155 }
Chris@0 156 $(id).removeClassName('open');
Chris@0 157 }
Chris@0 158
Chris@0 159 function expandScmEntry(id) {
Chris@0 160 var els = document.getElementsByClassName(id, 'browser');
Chris@0 161 for (var i = 0; i < els.length; i++) {
Chris@0 162 Element.show(els[i]);
Chris@0 163 if (els[i].hasClassName('loaded') && !els[i].hasClassName('collapsed')) {
Chris@0 164 expandScmEntry(els[i].id);
Chris@0 165 }
Chris@0 166 }
Chris@0 167 $(id).addClassName('open');
Chris@0 168 }
Chris@0 169
Chris@0 170 function scmEntryClick(id) {
Chris@0 171 el = $(id);
Chris@0 172 if (el.hasClassName('open')) {
Chris@0 173 collapseScmEntry(id);
Chris@0 174 el.addClassName('collapsed');
Chris@0 175 return false;
Chris@0 176 } else if (el.hasClassName('loaded')) {
Chris@0 177 expandScmEntry(id);
Chris@0 178 el.removeClassName('collapsed');
Chris@0 179 return false;
Chris@0 180 }
Chris@0 181 if (el.hasClassName('loading')) {
Chris@0 182 return false;
Chris@0 183 }
Chris@0 184 el.addClassName('loading');
Chris@0 185 return true;
Chris@0 186 }
Chris@0 187
Chris@0 188 function scmEntryLoaded(id) {
Chris@0 189 Element.addClassName(id, 'open');
Chris@0 190 Element.addClassName(id, 'loaded');
Chris@0 191 Element.removeClassName(id, 'loading');
Chris@0 192 }
Chris@0 193
Chris@0 194 function randomKey(size) {
Chris@0 195 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');
Chris@0 196 var key = '';
Chris@0 197 for (i = 0; i < size; i++) {
Chris@0 198 key += chars[Math.floor(Math.random() * chars.length)];
Chris@0 199 }
Chris@0 200 return key;
Chris@0 201 }
Chris@0 202
Chris@0 203 function observeParentIssueField(url) {
Chris@0 204 new Ajax.Autocompleter('issue_parent_issue_id',
Chris@0 205 'parent_issue_candidates',
Chris@0 206 url,
Chris@0 207 { minChars: 3,
Chris@0 208 frequency: 0.5,
Chris@0 209 paramName: 'q',
Chris@0 210 updateElement: function(value) {
Chris@0 211 document.getElementById('issue_parent_issue_id').value = value.id;
Chris@0 212 }});
Chris@0 213 }
Chris@0 214
Chris@0 215 /* shows and hides ajax indicator */
Chris@0 216 Ajax.Responders.register({
Chris@0 217 onCreate: function(){
Chris@0 218 if ($('ajax-indicator') && Ajax.activeRequestCount > 0) {
Chris@0 219 Element.show('ajax-indicator');
Chris@0 220 }
Chris@0 221 },
Chris@0 222 onComplete: function(){
Chris@0 223 if ($('ajax-indicator') && Ajax.activeRequestCount == 0) {
Chris@0 224 Element.hide('ajax-indicator');
Chris@0 225 }
Chris@0 226 }
Chris@0 227 });
Chris@0 228
Chris@0 229 function hideOnLoad() {
Chris@0 230 $$('.hol').each(function(el) {
Chris@0 231 el.hide();
Chris@0 232 });
Chris@0 233 }
Chris@0 234
Chris@0 235 Event.observe(window, 'load', hideOnLoad);