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