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