annotate .svn/pristine/8e/8e5c0db7b703cf6a4ad1247955b7ea8792cd025e.svn-base @ 1295:622f24f53b42 redmine-2.3

Update to Redmine SVN revision 11972 on 2.3-stable branch
author Chris Cannam
date Fri, 14 Jun 2013 09:02:21 +0100
parents
children
rev   line source
Chris@1295 1 /* Redmine - project management software
Chris@1295 2 Copyright (C) 2006-2013 Jean-Philippe Lang */
Chris@1295 3
Chris@1295 4 function checkAll(id, checked) {
Chris@1295 5 if (checked) {
Chris@1295 6 $('#'+id).find('input[type=checkbox]').attr('checked', true);
Chris@1295 7 } else {
Chris@1295 8 $('#'+id).find('input[type=checkbox]').removeAttr('checked');
Chris@1295 9 }
Chris@1295 10 }
Chris@1295 11
Chris@1295 12 function toggleCheckboxesBySelector(selector) {
Chris@1295 13 var all_checked = true;
Chris@1295 14 $(selector).each(function(index) {
Chris@1295 15 if (!$(this).is(':checked')) { all_checked = false; }
Chris@1295 16 });
Chris@1295 17 $(selector).attr('checked', !all_checked);
Chris@1295 18 }
Chris@1295 19
Chris@1295 20 function showAndScrollTo(id, focus) {
Chris@1295 21 $('#'+id).show();
Chris@1295 22 if (focus !== null) {
Chris@1295 23 $('#'+focus).focus();
Chris@1295 24 }
Chris@1295 25 $('html, body').animate({scrollTop: $('#'+id).offset().top}, 100);
Chris@1295 26 }
Chris@1295 27
Chris@1295 28 function toggleRowGroup(el) {
Chris@1295 29 var tr = $(el).parents('tr').first();
Chris@1295 30 var n = tr.next();
Chris@1295 31 tr.toggleClass('open');
Chris@1295 32 while (n.length && !n.hasClass('group')) {
Chris@1295 33 n.toggle();
Chris@1295 34 n = n.next('tr');
Chris@1295 35 }
Chris@1295 36 }
Chris@1295 37
Chris@1295 38 function collapseAllRowGroups(el) {
Chris@1295 39 var tbody = $(el).parents('tbody').first();
Chris@1295 40 tbody.children('tr').each(function(index) {
Chris@1295 41 if ($(this).hasClass('group')) {
Chris@1295 42 $(this).removeClass('open');
Chris@1295 43 } else {
Chris@1295 44 $(this).hide();
Chris@1295 45 }
Chris@1295 46 });
Chris@1295 47 }
Chris@1295 48
Chris@1295 49 function expandAllRowGroups(el) {
Chris@1295 50 var tbody = $(el).parents('tbody').first();
Chris@1295 51 tbody.children('tr').each(function(index) {
Chris@1295 52 if ($(this).hasClass('group')) {
Chris@1295 53 $(this).addClass('open');
Chris@1295 54 } else {
Chris@1295 55 $(this).show();
Chris@1295 56 }
Chris@1295 57 });
Chris@1295 58 }
Chris@1295 59
Chris@1295 60 function toggleAllRowGroups(el) {
Chris@1295 61 var tr = $(el).parents('tr').first();
Chris@1295 62 if (tr.hasClass('open')) {
Chris@1295 63 collapseAllRowGroups(el);
Chris@1295 64 } else {
Chris@1295 65 expandAllRowGroups(el);
Chris@1295 66 }
Chris@1295 67 }
Chris@1295 68
Chris@1295 69 function toggleFieldset(el) {
Chris@1295 70 var fieldset = $(el).parents('fieldset').first();
Chris@1295 71 fieldset.toggleClass('collapsed');
Chris@1295 72 fieldset.children('div').toggle();
Chris@1295 73 }
Chris@1295 74
Chris@1295 75 function hideFieldset(el) {
Chris@1295 76 var fieldset = $(el).parents('fieldset').first();
Chris@1295 77 fieldset.toggleClass('collapsed');
Chris@1295 78 fieldset.children('div').hide();
Chris@1295 79 }
Chris@1295 80
Chris@1295 81 function initFilters(){
Chris@1295 82 $('#add_filter_select').change(function(){
Chris@1295 83 addFilter($(this).val(), '', []);
Chris@1295 84 });
Chris@1295 85 $('#filters-table td.field input[type=checkbox]').each(function(){
Chris@1295 86 toggleFilter($(this).val());
Chris@1295 87 });
Chris@1295 88 $('#filters-table td.field input[type=checkbox]').live('click',function(){
Chris@1295 89 toggleFilter($(this).val());
Chris@1295 90 });
Chris@1295 91 $('#filters-table .toggle-multiselect').live('click',function(){
Chris@1295 92 toggleMultiSelect($(this).siblings('select'));
Chris@1295 93 });
Chris@1295 94 $('#filters-table input[type=text]').live('keypress', function(e){
Chris@1295 95 if (e.keyCode == 13) submit_query_form("query_form");
Chris@1295 96 });
Chris@1295 97 }
Chris@1295 98
Chris@1295 99 function addFilter(field, operator, values) {
Chris@1295 100 var fieldId = field.replace('.', '_');
Chris@1295 101 var tr = $('#tr_'+fieldId);
Chris@1295 102 if (tr.length > 0) {
Chris@1295 103 tr.show();
Chris@1295 104 } else {
Chris@1295 105 buildFilterRow(field, operator, values);
Chris@1295 106 }
Chris@1295 107 $('#cb_'+fieldId).attr('checked', true);
Chris@1295 108 toggleFilter(field);
Chris@1295 109 $('#add_filter_select').val('').children('option').each(function(){
Chris@1295 110 if ($(this).attr('value') == field) {
Chris@1295 111 $(this).attr('disabled', true);
Chris@1295 112 }
Chris@1295 113 });
Chris@1295 114 }
Chris@1295 115
Chris@1295 116 function buildFilterRow(field, operator, values) {
Chris@1295 117 var fieldId = field.replace('.', '_');
Chris@1295 118 var filterTable = $("#filters-table");
Chris@1295 119 var filterOptions = availableFilters[field];
Chris@1295 120 var operators = operatorByType[filterOptions['type']];
Chris@1295 121 var filterValues = filterOptions['values'];
Chris@1295 122 var i, select;
Chris@1295 123
Chris@1295 124 var tr = $('<tr class="filter">').attr('id', 'tr_'+fieldId).html(
Chris@1295 125 '<td class="field"><input checked="checked" id="cb_'+fieldId+'" name="f[]" value="'+field+'" type="checkbox"><label for="cb_'+fieldId+'"> '+filterOptions['name']+'</label></td>' +
Chris@1295 126 '<td class="operator"><select id="operators_'+fieldId+'" name="op['+field+']"></td>' +
Chris@1295 127 '<td class="values"></td>'
Chris@1295 128 );
Chris@1295 129 filterTable.append(tr);
Chris@1295 130
Chris@1295 131 select = tr.find('td.operator select');
Chris@1295 132 for (i=0;i<operators.length;i++){
Chris@1295 133 var option = $('<option>').val(operators[i]).text(operatorLabels[operators[i]]);
Chris@1295 134 if (operators[i] == operator) { option.attr('selected', true); }
Chris@1295 135 select.append(option);
Chris@1295 136 }
Chris@1295 137 select.change(function(){ toggleOperator(field); });
Chris@1295 138
Chris@1295 139 switch (filterOptions['type']){
Chris@1295 140 case "list":
Chris@1295 141 case "list_optional":
Chris@1295 142 case "list_status":
Chris@1295 143 case "list_subprojects":
Chris@1295 144 tr.find('td.values').append(
Chris@1295 145 '<span style="display:none;"><select class="value" id="values_'+fieldId+'_1" name="v['+field+'][]"></select>' +
Chris@1295 146 ' <span class="toggle-multiselect">&nbsp;</span></span>'
Chris@1295 147 );
Chris@1295 148 select = tr.find('td.values select');
Chris@1295 149 if (values.length > 1) { select.attr('multiple', true); }
Chris@1295 150 for (i=0;i<filterValues.length;i++){
Chris@1295 151 var filterValue = filterValues[i];
Chris@1295 152 var option = $('<option>');
Chris@1295 153 if ($.isArray(filterValue)) {
Chris@1295 154 option.val(filterValue[1]).text(filterValue[0]);
Chris@1295 155 if ($.inArray(filterValue[1], values) > -1) {option.attr('selected', true);}
Chris@1295 156 } else {
Chris@1295 157 option.val(filterValue).text(filterValue);
Chris@1295 158 if ($.inArray(filterValue, values) > -1) {option.attr('selected', true);}
Chris@1295 159 }
Chris@1295 160 select.append(option);
Chris@1295 161 }
Chris@1295 162 break;
Chris@1295 163 case "date":
Chris@1295 164 case "date_past":
Chris@1295 165 tr.find('td.values').append(
Chris@1295 166 '<span style="display:none;"><input type="text" name="v['+field+'][]" id="values_'+fieldId+'_1" size="10" class="value date_value" /></span>' +
Chris@1295 167 ' <span style="display:none;"><input type="text" name="v['+field+'][]" id="values_'+fieldId+'_2" size="10" class="value date_value" /></span>' +
Chris@1295 168 ' <span style="display:none;"><input type="text" name="v['+field+'][]" id="values_'+fieldId+'" size="3" class="value" /> '+labelDayPlural+'</span>'
Chris@1295 169 );
Chris@1295 170 $('#values_'+fieldId+'_1').val(values[0]).datepicker(datepickerOptions);
Chris@1295 171 $('#values_'+fieldId+'_2').val(values[1]).datepicker(datepickerOptions);
Chris@1295 172 $('#values_'+fieldId).val(values[0]);
Chris@1295 173 break;
Chris@1295 174 case "string":
Chris@1295 175 case "text":
Chris@1295 176 tr.find('td.values').append(
Chris@1295 177 '<span style="display:none;"><input type="text" name="v['+field+'][]" id="values_'+fieldId+'" size="30" class="value" /></span>'
Chris@1295 178 );
Chris@1295 179 $('#values_'+fieldId).val(values[0]);
Chris@1295 180 break;
Chris@1295 181 case "relation":
Chris@1295 182 tr.find('td.values').append(
Chris@1295 183 '<span style="display:none;"><input type="text" name="v['+field+'][]" id="values_'+fieldId+'" size="6" class="value" /></span>' +
Chris@1295 184 '<span style="display:none;"><select class="value" name="v['+field+'][]" id="values_'+fieldId+'_1"></select></span>'
Chris@1295 185 );
Chris@1295 186 $('#values_'+fieldId).val(values[0]);
Chris@1295 187 select = tr.find('td.values select');
Chris@1295 188 for (i=0;i<allProjects.length;i++){
Chris@1295 189 var filterValue = allProjects[i];
Chris@1295 190 var option = $('<option>');
Chris@1295 191 option.val(filterValue[1]).text(filterValue[0]);
Chris@1295 192 if (values[0] == filterValue[1]) { option.attr('selected', true); }
Chris@1295 193 select.append(option);
Chris@1295 194 }
Chris@1295 195 case "integer":
Chris@1295 196 case "float":
Chris@1295 197 tr.find('td.values').append(
Chris@1295 198 '<span style="display:none;"><input type="text" name="v['+field+'][]" id="values_'+fieldId+'_1" size="6" class="value" /></span>' +
Chris@1295 199 ' <span style="display:none;"><input type="text" name="v['+field+'][]" id="values_'+fieldId+'_2" size="6" class="value" /></span>'
Chris@1295 200 );
Chris@1295 201 $('#values_'+fieldId+'_1').val(values[0]);
Chris@1295 202 $('#values_'+fieldId+'_2').val(values[1]);
Chris@1295 203 break;
Chris@1295 204 }
Chris@1295 205 }
Chris@1295 206
Chris@1295 207 function toggleFilter(field) {
Chris@1295 208 var fieldId = field.replace('.', '_');
Chris@1295 209 if ($('#cb_' + fieldId).is(':checked')) {
Chris@1295 210 $("#operators_" + fieldId).show().removeAttr('disabled');
Chris@1295 211 toggleOperator(field);
Chris@1295 212 } else {
Chris@1295 213 $("#operators_" + fieldId).hide().attr('disabled', true);
Chris@1295 214 enableValues(field, []);
Chris@1295 215 }
Chris@1295 216 }
Chris@1295 217
Chris@1295 218 function enableValues(field, indexes) {
Chris@1295 219 var fieldId = field.replace('.', '_');
Chris@1295 220 $('#tr_'+fieldId+' td.values .value').each(function(index) {
Chris@1295 221 if ($.inArray(index, indexes) >= 0) {
Chris@1295 222 $(this).removeAttr('disabled');
Chris@1295 223 $(this).parents('span').first().show();
Chris@1295 224 } else {
Chris@1295 225 $(this).val('');
Chris@1295 226 $(this).attr('disabled', true);
Chris@1295 227 $(this).parents('span').first().hide();
Chris@1295 228 }
Chris@1295 229
Chris@1295 230 if ($(this).hasClass('group')) {
Chris@1295 231 $(this).addClass('open');
Chris@1295 232 } else {
Chris@1295 233 $(this).show();
Chris@1295 234 }
Chris@1295 235 });
Chris@1295 236 }
Chris@1295 237
Chris@1295 238 function toggleOperator(field) {
Chris@1295 239 var fieldId = field.replace('.', '_');
Chris@1295 240 var operator = $("#operators_" + fieldId);
Chris@1295 241 switch (operator.val()) {
Chris@1295 242 case "!*":
Chris@1295 243 case "*":
Chris@1295 244 case "t":
Chris@1295 245 case "ld":
Chris@1295 246 case "w":
Chris@1295 247 case "lw":
Chris@1295 248 case "l2w":
Chris@1295 249 case "m":
Chris@1295 250 case "lm":
Chris@1295 251 case "y":
Chris@1295 252 case "o":
Chris@1295 253 case "c":
Chris@1295 254 enableValues(field, []);
Chris@1295 255 break;
Chris@1295 256 case "><":
Chris@1295 257 enableValues(field, [0,1]);
Chris@1295 258 break;
Chris@1295 259 case "<t+":
Chris@1295 260 case ">t+":
Chris@1295 261 case "><t+":
Chris@1295 262 case "t+":
Chris@1295 263 case ">t-":
Chris@1295 264 case "<t-":
Chris@1295 265 case "><t-":
Chris@1295 266 case "t-":
Chris@1295 267 enableValues(field, [2]);
Chris@1295 268 break;
Chris@1295 269 case "=p":
Chris@1295 270 case "=!p":
Chris@1295 271 case "!p":
Chris@1295 272 enableValues(field, [1]);
Chris@1295 273 break;
Chris@1295 274 default:
Chris@1295 275 enableValues(field, [0]);
Chris@1295 276 break;
Chris@1295 277 }
Chris@1295 278 }
Chris@1295 279
Chris@1295 280 function toggleMultiSelect(el) {
Chris@1295 281 if (el.attr('multiple')) {
Chris@1295 282 el.removeAttr('multiple');
Chris@1295 283 } else {
Chris@1295 284 el.attr('multiple', true);
Chris@1295 285 }
Chris@1295 286 }
Chris@1295 287
Chris@1295 288 function submit_query_form(id) {
Chris@1295 289 selectAllOptions("selected_columns");
Chris@1295 290 $('#'+id).submit();
Chris@1295 291 }
Chris@1295 292
Chris@1295 293 function showTab(name) {
Chris@1295 294 $('div#content .tab-content').hide();
Chris@1295 295 $('div.tabs a').removeClass('selected');
Chris@1295 296 $('#tab-content-' + name).show();
Chris@1295 297 $('#tab-' + name).addClass('selected');
Chris@1295 298 return false;
Chris@1295 299 }
Chris@1295 300
Chris@1295 301 function moveTabRight(el) {
Chris@1295 302 var lis = $(el).parents('div.tabs').first().find('ul').children();
Chris@1295 303 var tabsWidth = 0;
Chris@1295 304 var i = 0;
Chris@1295 305 lis.each(function(){
Chris@1295 306 if ($(this).is(':visible')) {
Chris@1295 307 tabsWidth += $(this).width() + 6;
Chris@1295 308 }
Chris@1295 309 });
Chris@1295 310 if (tabsWidth < $(el).parents('div.tabs').first().width() - 60) { return; }
Chris@1295 311 while (i<lis.length && !lis.eq(i).is(':visible')) { i++; }
Chris@1295 312 lis.eq(i).hide();
Chris@1295 313 }
Chris@1295 314
Chris@1295 315 function moveTabLeft(el) {
Chris@1295 316 var lis = $(el).parents('div.tabs').first().find('ul').children();
Chris@1295 317 var i = 0;
Chris@1295 318 while (i<lis.length && !lis.eq(i).is(':visible')) { i++; }
Chris@1295 319 if (i>0) {
Chris@1295 320 lis.eq(i-1).show();
Chris@1295 321 }
Chris@1295 322 }
Chris@1295 323
Chris@1295 324 function displayTabsButtons() {
Chris@1295 325 var lis;
Chris@1295 326 var tabsWidth = 0;
Chris@1295 327 var el;
Chris@1295 328 $('div.tabs').each(function() {
Chris@1295 329 el = $(this);
Chris@1295 330 lis = el.find('ul').children();
Chris@1295 331 lis.each(function(){
Chris@1295 332 if ($(this).is(':visible')) {
Chris@1295 333 tabsWidth += $(this).width() + 6;
Chris@1295 334 }
Chris@1295 335 });
Chris@1295 336 if ((tabsWidth < el.width() - 60) && (lis.first().is(':visible'))) {
Chris@1295 337 el.find('div.tabs-buttons').hide();
Chris@1295 338 } else {
Chris@1295 339 el.find('div.tabs-buttons').show();
Chris@1295 340 }
Chris@1295 341 });
Chris@1295 342 }
Chris@1295 343
Chris@1295 344 function setPredecessorFieldsVisibility() {
Chris@1295 345 var relationType = $('#relation_relation_type');
Chris@1295 346 if (relationType.val() == "precedes" || relationType.val() == "follows") {
Chris@1295 347 $('#predecessor_fields').show();
Chris@1295 348 } else {
Chris@1295 349 $('#predecessor_fields').hide();
Chris@1295 350 }
Chris@1295 351 }
Chris@1295 352
Chris@1295 353 function showModal(id, width) {
Chris@1295 354 var el = $('#'+id).first();
Chris@1295 355 if (el.length === 0 || el.is(':visible')) {return;}
Chris@1295 356 var title = el.find('h3.title').text();
Chris@1295 357 el.dialog({
Chris@1295 358 width: width,
Chris@1295 359 modal: true,
Chris@1295 360 resizable: false,
Chris@1295 361 dialogClass: 'modal',
Chris@1295 362 title: title
Chris@1295 363 });
Chris@1295 364 el.find("input[type=text], input[type=submit]").first().focus();
Chris@1295 365 }
Chris@1295 366
Chris@1295 367 function hideModal(el) {
Chris@1295 368 var modal;
Chris@1295 369 if (el) {
Chris@1295 370 modal = $(el).parents('.ui-dialog-content');
Chris@1295 371 } else {
Chris@1295 372 modal = $('#ajax-modal');
Chris@1295 373 }
Chris@1295 374 modal.dialog("close");
Chris@1295 375 }
Chris@1295 376
Chris@1295 377 function submitPreview(url, form, target) {
Chris@1295 378 $.ajax({
Chris@1295 379 url: url,
Chris@1295 380 type: 'post',
Chris@1295 381 data: $('#'+form).serialize(),
Chris@1295 382 success: function(data){
Chris@1295 383 $('#'+target).html(data);
Chris@1295 384 }
Chris@1295 385 });
Chris@1295 386 }
Chris@1295 387
Chris@1295 388 function collapseScmEntry(id) {
Chris@1295 389 $('.'+id).each(function() {
Chris@1295 390 if ($(this).hasClass('open')) {
Chris@1295 391 collapseScmEntry($(this).attr('id'));
Chris@1295 392 }
Chris@1295 393 $(this).hide();
Chris@1295 394 });
Chris@1295 395 $('#'+id).removeClass('open');
Chris@1295 396 }
Chris@1295 397
Chris@1295 398 function expandScmEntry(id) {
Chris@1295 399 $('.'+id).each(function() {
Chris@1295 400 $(this).show();
Chris@1295 401 if ($(this).hasClass('loaded') && !$(this).hasClass('collapsed')) {
Chris@1295 402 expandScmEntry($(this).attr('id'));
Chris@1295 403 }
Chris@1295 404 });
Chris@1295 405 $('#'+id).addClass('open');
Chris@1295 406 }
Chris@1295 407
Chris@1295 408 function scmEntryClick(id, url) {
Chris@1295 409 el = $('#'+id);
Chris@1295 410 if (el.hasClass('open')) {
Chris@1295 411 collapseScmEntry(id);
Chris@1295 412 el.addClass('collapsed');
Chris@1295 413 return false;
Chris@1295 414 } else if (el.hasClass('loaded')) {
Chris@1295 415 expandScmEntry(id);
Chris@1295 416 el.removeClass('collapsed');
Chris@1295 417 return false;
Chris@1295 418 }
Chris@1295 419 if (el.hasClass('loading')) {
Chris@1295 420 return false;
Chris@1295 421 }
Chris@1295 422 el.addClass('loading');
Chris@1295 423 $.ajax({
Chris@1295 424 url: url,
Chris@1295 425 success: function(data){
Chris@1295 426 el.after(data);
Chris@1295 427 el.addClass('open').addClass('loaded').removeClass('loading');
Chris@1295 428 }
Chris@1295 429 });
Chris@1295 430 return true;
Chris@1295 431 }
Chris@1295 432
Chris@1295 433 function randomKey(size) {
Chris@1295 434 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@1295 435 var key = '';
Chris@1295 436 for (i = 0; i < size; i++) {
Chris@1295 437 key += chars[Math.floor(Math.random() * chars.length)];
Chris@1295 438 }
Chris@1295 439 return key;
Chris@1295 440 }
Chris@1295 441
Chris@1295 442 // Can't use Rails' remote select because we need the form data
Chris@1295 443 function updateIssueFrom(url) {
Chris@1295 444 $.ajax({
Chris@1295 445 url: url,
Chris@1295 446 type: 'post',
Chris@1295 447 data: $('#issue-form').serialize()
Chris@1295 448 });
Chris@1295 449 }
Chris@1295 450
Chris@1295 451 function updateBulkEditFrom(url) {
Chris@1295 452 $.ajax({
Chris@1295 453 url: url,
Chris@1295 454 type: 'post',
Chris@1295 455 data: $('#bulk_edit_form').serialize()
Chris@1295 456 });
Chris@1295 457 }
Chris@1295 458
Chris@1295 459 function observeAutocompleteField(fieldId, url, options) {
Chris@1295 460 $(document).ready(function() {
Chris@1295 461 $('#'+fieldId).autocomplete($.extend({
Chris@1295 462 source: url,
Chris@1295 463 minLength: 2,
Chris@1295 464 search: function(){$('#'+fieldId).addClass('ajax-loading');},
Chris@1295 465 response: function(){$('#'+fieldId).removeClass('ajax-loading');}
Chris@1295 466 }, options));
Chris@1295 467 $('#'+fieldId).addClass('autocomplete');
Chris@1295 468 });
Chris@1295 469 }
Chris@1295 470
Chris@1295 471 function observeSearchfield(fieldId, targetId, url) {
Chris@1295 472 $('#'+fieldId).each(function() {
Chris@1295 473 var $this = $(this);
Chris@1295 474 $this.addClass('autocomplete');
Chris@1295 475 $this.attr('data-value-was', $this.val());
Chris@1295 476 var check = function() {
Chris@1295 477 var val = $this.val();
Chris@1295 478 if ($this.attr('data-value-was') != val){
Chris@1295 479 $this.attr('data-value-was', val);
Chris@1295 480 $.ajax({
Chris@1295 481 url: url,
Chris@1295 482 type: 'get',
Chris@1295 483 data: {q: $this.val()},
Chris@1295 484 success: function(data){ if(targetId) $('#'+targetId).html(data); },
Chris@1295 485 beforeSend: function(){ $this.addClass('ajax-loading'); },
Chris@1295 486 complete: function(){ $this.removeClass('ajax-loading'); }
Chris@1295 487 });
Chris@1295 488 }
Chris@1295 489 };
Chris@1295 490 var reset = function() {
Chris@1295 491 if (timer) {
Chris@1295 492 clearInterval(timer);
Chris@1295 493 timer = setInterval(check, 300);
Chris@1295 494 }
Chris@1295 495 };
Chris@1295 496 var timer = setInterval(check, 300);
Chris@1295 497 $this.bind('keyup click mousemove', reset);
Chris@1295 498 });
Chris@1295 499 }
Chris@1295 500
Chris@1295 501 function observeProjectModules() {
Chris@1295 502 var f = function() {
Chris@1295 503 /* Hides trackers and issues custom fields on the new project form when issue_tracking module is disabled */
Chris@1295 504 if ($('#project_enabled_module_names_issue_tracking').attr('checked')) {
Chris@1295 505 $('#project_trackers').show();
Chris@1295 506 }else{
Chris@1295 507 $('#project_trackers').hide();
Chris@1295 508 }
Chris@1295 509 };
Chris@1295 510
Chris@1295 511 $(window).load(f);
Chris@1295 512 $('#project_enabled_module_names_issue_tracking').change(f);
Chris@1295 513 }
Chris@1295 514
Chris@1295 515 function initMyPageSortable(list, url) {
Chris@1295 516 $('#list-'+list).sortable({
Chris@1295 517 connectWith: '.block-receiver',
Chris@1295 518 tolerance: 'pointer',
Chris@1295 519 update: function(){
Chris@1295 520 $.ajax({
Chris@1295 521 url: url,
Chris@1295 522 type: 'post',
Chris@1295 523 data: {'blocks': $.map($('#list-'+list).children(), function(el){return $(el).attr('id');})}
Chris@1295 524 });
Chris@1295 525 }
Chris@1295 526 });
Chris@1295 527 $("#list-top, #list-left, #list-right").disableSelection();
Chris@1295 528 }
Chris@1295 529
Chris@1295 530 var warnLeavingUnsavedMessage;
Chris@1295 531 function warnLeavingUnsaved(message) {
Chris@1295 532 warnLeavingUnsavedMessage = message;
Chris@1295 533
Chris@1295 534 $('form').submit(function(){
Chris@1295 535 $('textarea').removeData('changed');
Chris@1295 536 });
Chris@1295 537 $('textarea').change(function(){
Chris@1295 538 $(this).data('changed', 'changed');
Chris@1295 539 });
Chris@1295 540 window.onbeforeunload = function(){
Chris@1295 541 var warn = false;
Chris@1295 542 $('textarea').blur().each(function(){
Chris@1295 543 if ($(this).data('changed')) {
Chris@1295 544 warn = true;
Chris@1295 545 }
Chris@1295 546 });
Chris@1295 547 if (warn) {return warnLeavingUnsavedMessage;}
Chris@1295 548 };
Chris@1295 549 }
Chris@1295 550
Chris@1295 551 function setupAjaxIndicator() {
Chris@1295 552
Chris@1295 553 $('#ajax-indicator').bind('ajaxSend', function(event, xhr, settings) {
Chris@1295 554
Chris@1295 555 if ($('.ajax-loading').length === 0 && settings.contentType != 'application/octet-stream') {
Chris@1295 556 $('#ajax-indicator').show();
Chris@1295 557 }
Chris@1295 558 });
Chris@1295 559
Chris@1295 560 $('#ajax-indicator').bind('ajaxStop', function() {
Chris@1295 561 $('#ajax-indicator').hide();
Chris@1295 562 });
Chris@1295 563 }
Chris@1295 564
Chris@1295 565 function hideOnLoad() {
Chris@1295 566 $('.hol').hide();
Chris@1295 567 }
Chris@1295 568
Chris@1295 569 function addFormObserversForDoubleSubmit() {
Chris@1295 570 $('form[method=post]').each(function() {
Chris@1295 571 if (!$(this).hasClass('multiple-submit')) {
Chris@1295 572 $(this).submit(function(form_submission) {
Chris@1295 573 if ($(form_submission.target).attr('data-submitted')) {
Chris@1295 574 form_submission.preventDefault();
Chris@1295 575 } else {
Chris@1295 576 $(form_submission.target).attr('data-submitted', true);
Chris@1295 577 }
Chris@1295 578 });
Chris@1295 579 }
Chris@1295 580 });
Chris@1295 581 }
Chris@1295 582
Chris@1295 583 function blockEventPropagation(event) {
Chris@1295 584 event.stopPropagation();
Chris@1295 585 event.preventDefault();
Chris@1295 586 }
Chris@1295 587
Chris@1295 588 $(document).ready(setupAjaxIndicator);
Chris@1295 589 $(document).ready(hideOnLoad);
Chris@1295 590 $(document).ready(addFormObserversForDoubleSubmit);