annotate .svn/pristine/2c/2c306b0b8078e7a98eb0d6ce3eb9bc62587cddd7.svn-base @ 1485:c8d3ad483bea redmine-2.4-integration

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