annotate public/javascripts/application.js @ 863:818ff422eece bug_168

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