active_scaffold 3.4.2 → 3.4.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f13a22b391abab0509c40d617c528902fda68c27
4
- data.tar.gz: a4bc30e40eb947290999544fcdec3cce07fe3236
3
+ metadata.gz: 0a8ff5ba84f3dc705d9828e90c74107b5d7956c0
4
+ data.tar.gz: 83d93e5cfce76fc8b5ffa04a72114e88a39ee6b3
5
5
  SHA512:
6
- metadata.gz: 56f0cf576372ed2f10ddd03c6a798738237e5a3bda87e01d62b6bd3f8fe4831b7579589aa0fa50a6989c9b372e8e9c23dfd1643d682231fe356091e93f30c0d0
7
- data.tar.gz: e8d69d8f3c33c9167829635378146560e2b771d8ab495db3adf2966d4af0061394594541020696f72b5cfb7f21577934656d26667288ba32abd318680ba7338c
6
+ metadata.gz: 0a1018479c9bab0ef13fbfe281c20a1fec953bb91403c06c69b38a9220b78b7e7d55d39cd28f9fb5bf36ae742e5947034415478ff0fd9157c560fe73cbb2a23e
7
+ data.tar.gz: d1b55a0ca9c756fd581aaaec5bdff972ad55942f8ea5d326e4e166dff35ea4c0ad4bebed3ff6df85275a7fb4872b1ebc4d7a2c8868b7bfb1954aa42ef7756dfb
data/CHANGELOG CHANGED
@@ -1,4 +1,8 @@
1
- = 3.4.2 (not released yet)
1
+ = 3.4.3
2
+ - default search columns doesn't include association columns (broken on 3.4.2), it slowing down search with no point (searching by association's primary key)
3
+ - More unobtrusive html views
4
+
5
+ = 3.4.2
2
6
  - fix tableless on latest rails4 versions
3
7
  - respond with 406 for html request on js only actions
4
8
  - fix JS issue on IE8
@@ -224,6 +224,13 @@ jQuery(document).ready(function($) {
224
224
  } else value = form_element.is("input:checkbox:not(:checked)") ? null : form_element.val();
225
225
  ActiveScaffold.update_column(form_element, element.attr('href'), element.data('update_send_form'), form_element.attr('id'), value);
226
226
  });
227
+ jQuery(document).on('click', 'a.visibility-toggle', function(e) {
228
+ var link = jQuery(this), toggable = jQuery('#' + link.data('toggable'));
229
+ e.preventDefault();
230
+ toggable.toggle();
231
+ link.html((toggable.is(':hidden')) ? link.data('show') : link.data('hide'));
232
+ return false;
233
+ });
227
234
  jQuery(document).on('recordselect:change', 'input.recordselect.update_form', function(event, id, label) {
228
235
  var element = jQuery(this);
229
236
  ActiveScaffold.update_column(element, element.data('update_url'), element.data('update_send_form'), element.attr('id'), id);
@@ -279,14 +286,21 @@ jQuery(document).ready(function($) {
279
286
  e.preventDefault();
280
287
  });
281
288
 
289
+ /* setup some elements on page/form load */
290
+ ActiveScaffold.load_embedded(document);
291
+ ActiveScaffold.enable_js_form_buttons(document);
282
292
  ActiveScaffold.live_search(document);
283
293
  ActiveScaffold.auto_paginate(document);
284
- ActiveScaffold.draggable_lists('.draggable-lists');
294
+ ActiveScaffold.draggable_lists('.draggable-lists', document);
285
295
  jQuery(document).on('as:element_updated', function(e) {
296
+ ActiveScaffold.load_embedded(e.target);
297
+ ActiveScaffold.enable_js_form_buttons(e.target);
286
298
  ActiveScaffold.live_search(e.target);
287
299
  ActiveScaffold.draggable_lists('.draggable-lists', e.target);
288
300
  });
289
301
  jQuery(document).on('as:action_success', 'a.as_action', function(e, action_link) {
302
+ ActiveScaffold.load_embedded(action_link.adapter);
303
+ ActiveScaffold.enable_js_form_buttons(action_link.adapter);
290
304
  ActiveScaffold.live_search(action_link.adapter);
291
305
  ActiveScaffold.auto_paginate(action_link.adapter);
292
306
  ActiveScaffold.draggable_lists('.draggable-lists', action_link.adapter);
@@ -415,6 +429,17 @@ var ActiveScaffold = {
415
429
  auto_load_page: function(href, params) {
416
430
  jQuery.get(href, params, null, 'script');
417
431
  },
432
+ enable_js_form_buttons: function(element) {
433
+ jQuery('.as-js-button', element).show();
434
+ },
435
+ load_embedded: function(element) {
436
+ $('.active-scaffold-component .load-embedded', element).each(function(index, item) {
437
+ item = jQuery(item);
438
+ item.closest('.active-scaffold-component').load(item.attr('href'), function() {
439
+ jQuery(this).trigger('as:element_updated');
440
+ });
441
+ });
442
+ },
418
443
 
419
444
  records_for: function(tbody_id) {
420
445
  if (typeof(tbody_id) == 'string') tbody_id = '#' + tbody_id;
@@ -455,10 +480,11 @@ var ActiveScaffold = {
455
480
  removeSortClasses: function(scaffold) {
456
481
  if (typeof(scaffold) == 'string') scaffold = '#' + scaffold;
457
482
  scaffold = jQuery(scaffold)
458
- scaffold.find('td.sorted').each(function(element) {
459
- element.removeClass("sorted");
483
+ scaffold.find('td.sorted').each(function(index, element) {
484
+ jQuery(element).removeClass("sorted");
460
485
  });
461
- scaffold.find('th.sorted').each(function(element) {
486
+ scaffold.find('th.sorted').each(function(index, element) {
487
+ element = jQuery(element);
462
488
  element.removeClass("sorted");
463
489
  element.removeClass("asc");
464
490
  element.removeClass("desc");
@@ -735,21 +761,6 @@ var ActiveScaffold = {
735
761
  }
736
762
  },
737
763
 
738
- create_visibility_toggle: function(element, options) {
739
- if (typeof(element) == 'string') element = '#' + element;
740
- var toggable = jQuery(element);
741
- var toggler = toggable.prev();
742
- var initial_label = (options.default_visible === true) ? options.hide_label : options.show_label;
743
-
744
- toggler.append(' <a class="visibility-toggle" href="#">' + initial_label + '</a>');
745
- toggler.children('a').click(function(e) {
746
- e.preventDefault();
747
- toggable.toggle();
748
- jQuery(this).html((toggable.is(':hidden')) ? options.show_label : options.hide_label);
749
- return false;
750
- });
751
- },
752
-
753
764
  create_associated_record_form: function(element, content, options) {
754
765
  if (typeof(element) == 'string') element = '#' + element;
755
766
  var element = jQuery(element);
@@ -953,11 +964,11 @@ var ActiveScaffold = {
953
964
  });
954
965
  },
955
966
 
956
- draggable_lists: function(id_or_elements) {
967
+ draggable_lists: function(selector_or_elements, parent) {
957
968
  var elements;
958
969
  if (!jQuery.fn.draggableLists) return;
959
- if (typeof(id_or_elements) == 'string') elements = jQuery('ul' + id_or_elements);
960
- else elements = jQuery(elements);
970
+ if (typeof(selector_or_elements) == 'string') elements = jQuery('ul' + selector_or_elements, parent);
971
+ else elements = jQuery(selector_or_elements);
961
972
  elements.draggableLists();
962
973
  }
963
974
  }
@@ -284,6 +284,13 @@ document.observe("dom:loaded", function() {
284
284
  } else value = form_element.getValue();
285
285
  ActiveScaffold.update_column(form_element, element.readAttribute('href'), element.hasAttribute('data-update_send_form'), form_element.readAttribute('id'), value);
286
286
  });
287
+ document.on('click', 'a.visibility-toggle', function(event) {
288
+ event.stop();
289
+ var link = event.findElement();
290
+ var toggable = $(link.readAttribute('data-toggable'));
291
+ toggable.toggle();
292
+ link.innerHTML = (toggable.style.display == 'none') ? link.readAttribute('data-show') : link.readAttribute('data-hide');
293
+ });
287
294
  document.on('recordselect:change', 'input.recordselect.update_form', function(event) {
288
295
  var element = event.findElement();
289
296
  ActiveScaffold.update_column(element, element.readAttribute('data-update_url'), element.hasAttribute('data-update_send_form'), element.readAttribute('id'), element.memo.id);
@@ -330,6 +337,27 @@ document.observe("dom:loaded", function() {
330
337
  ActiveScaffold.hide(element.up('.message'));
331
338
  event.stop();
332
339
  });
340
+
341
+ /* setup some elements on page/form load */
342
+ ActiveScaffold.load_embedded(document);
343
+ ActiveScaffold.enable_js_form_buttons(document);
344
+ ActiveScaffold.live_search(document);
345
+ ActiveScaffold.auto_paginate(document);
346
+ ActiveScaffold.draggable_lists('.draggable-lists', document);
347
+ document.on('as:element_updated', function(e) {
348
+ var target = event.findElement();
349
+ ActiveScaffold.load_embedded(target);
350
+ ActiveScaffold.enable_js_form_buttons(target);
351
+ ActiveScaffold.live_search(target);
352
+ ActiveScaffold.draggable_lists('.draggable-lists', target);
353
+ });
354
+ document.on('as:action_success', 'a.as_action', function(e, action_link) {
355
+ ActiveScaffold.load_embedded(action_link.adapter);
356
+ ActiveScaffold.enable_js_form_buttons(action_link.adapter);
357
+ ActiveScaffold.live_search(action_link.adapter);
358
+ ActiveScaffold.auto_paginate(action_link.adapter);
359
+ ActiveScaffold.draggable_lists('.draggable-lists', action_link.adapter);
360
+ });
333
361
  });
334
362
 
335
363
 
@@ -338,6 +366,38 @@ document.observe("dom:loaded", function() {
338
366
  */
339
367
 
340
368
  var ActiveScaffold = {
369
+ live_search: function(element) {
370
+ $$('form.search.live input[type=search]', element).each(function(item) {
371
+ new Form.Element.DelayedObserver(item, 0.5, function(element, value) {
372
+ if (!$(element.id)) return false; // because the element may have been destroyed
373
+ $(element).next().click();
374
+ });
375
+ });
376
+ },
377
+ auto_paginate: function(element) {
378
+ var paginate_link = $(element).select('.active-scaffold-pagination.auto-paginate a:first');
379
+ if (paginate_link.length) {
380
+ $(element).select('.active-scaffold-pagination.auto-paginate').invoke('hide');
381
+ ActiveScaffold.auto_load_page(paginate_link.readAttribute('href'), {auto_pagination: true});
382
+ }
383
+ },
384
+ auto_load_page: function(href, params) {
385
+ new Ajax.Request(href, {
386
+ method: 'get',
387
+ parameters: params,
388
+ asynchronous: true,
389
+ evalScripts: true
390
+ });
391
+ },
392
+ enable_js_form_buttons: function(element) {
393
+ $(element).select('.as-js-button').invoke('show');
394
+ },
395
+ load_embedded: function(element) {
396
+ $(element).select('.active-scaffold-component .load-embedded').each(function(item) {
397
+ new Ajax.Updater(item.up('.active-scaffold-component'), item.readAttribute('href'), {method: 'get', evalScripts: true});
398
+ });
399
+ },
400
+
341
401
  records_for: function(tbody_id) {
342
402
  var rows = [];
343
403
  var child = $(tbody_id).down('.record');
@@ -627,21 +687,6 @@ var ActiveScaffold = {
627
687
  span.inplace_edit.enterEditMode();
628
688
  },
629
689
 
630
- create_visibility_toggle: function(element, options) {
631
- var toggable = $(element);
632
- var toggler = toggable.previous();
633
- var initial_label = (options.default_visible === true) ? options.hide_label : options.show_label;
634
-
635
- toggler.insert(' <a class="visibility-toggle" href="#">' + initial_label + '</a>');
636
- toggler.firstDescendant().observe('click', function(event) {
637
- var element = event.element();
638
- event.stop();
639
- toggable.toggle();
640
- element.innerHTML = (toggable.style.display == 'none') ? options.show_label : options.hide_label;
641
- return false;
642
- });
643
- },
644
-
645
690
  create_associated_record_form: function(element, content, options) {
646
691
  var element = $(element);
647
692
  if (options.singular == false) {
@@ -756,8 +801,13 @@ var ActiveScaffold = {
756
801
  });
757
802
  },
758
803
 
759
- draggable_lists: function(element) {
760
- new DraggableLists(element);
804
+ draggable_lists: function(selector_or_elements, parent) {
805
+ var elements;
806
+ if (typeof(selector_or_elements) == 'string') elements = $(parent).select('ul' + selector_or_elements);
807
+ else elements = $A($(selector_or_elements));
808
+ elements.each(function(item) {
809
+ new DraggableLists(item);
810
+ });
761
811
  },
762
812
 
763
813
  highlight: function(element) {
@@ -13,13 +13,16 @@ form_tag url_options, options %>
13
13
  <% end -%>
14
14
  <% unless hiddens.empty? -%>
15
15
  <li class="sub-section">
16
- <h5><%= as_(:optional_attributes) %></h5>
17
- <ol id ="<%= sub_section_id(:sub_section => 'further_options') %>" class="form" style="display:none;">
16
+ <% further_options_id = sub_section_id(:sub_section => 'further_options') %>
17
+ <h5>
18
+ <%= as_(:optional_attributes) %>
19
+ <%= link_to_visibility_toggle(further_options_id, {:default_visible => false}) %>
20
+ </h5>
21
+ <ol id ="<%= further_options_id %>" class="form" style="display:none;">
18
22
  <% hiddens.each do |column| -%>
19
23
  <li class="form-element"><%= search_attribute(column, @record) %></li>
20
24
  <% end -%>
21
25
  </ol>
22
- <%= link_to_visibility_toggle(sub_section_id(:sub_section => 'further_options'), {:default_visible => false}) %>
23
26
  </li>
24
27
  <% end -%>
25
28
  </ol>
@@ -12,9 +12,11 @@
12
12
  <% if authorized %>
13
13
  <% subsection_id = sub_section_id(:sub_section => column.label) %>
14
14
  <li class="sub-section <%= column_css_class %>">
15
- <h5><%= column.label %></h5>
15
+ <h5>
16
+ <%= column.label %>
17
+ <%= link_to_visibility_toggle(subsection_id, {:default_visible => !column.collapsed}) -%>
18
+ </h5>
16
19
  <%= render :partial => 'form', :locals => { :columns => column, :subsection_id => subsection_id, :form_action => form_action, :scope => scope } %>
17
- <%= link_to_visibility_toggle(subsection_id, {:default_visible => !column.collapsed}) -%>
18
20
  </li>
19
21
  <% end %>
20
22
  <% elsif renders_as == :subform and authorized -%>
@@ -10,14 +10,16 @@ disable_required_for_new = @disable_required_for_new
10
10
  @disable_required_for_new = !!show_blank_record unless (column.singular_association? && column.required?)
11
11
  subform_div_id = "#{sub_form_id(:association => column.name, :id => parent_record.id || generated_id(parent_record) || 99999999999)}-div"
12
12
  -%>
13
- <h5><%= column.label -%></h5>
13
+ <h5>
14
+ <%= column.label -%>
15
+ <%= link_to_visibility_toggle(subform_div_id, {:default_visible => !column.collapsed}) -%>
16
+ </h5>
14
17
  <div id ="<%= subform_div_id %>" <%= 'style="display: none;"'.html_safe if column.collapsed -%>>
15
18
  <%# HACK to be able to delete all associated records %>
16
19
  <%= hidden_field_tag "#{active_scaffold_input_options(column, scope, :object => parent_record)[:name]}[0]", '' if column.plural_association? %>
17
20
  <%= render :partial => subform_partial_for_column(column), :locals => {:column => column, :parent_record => parent_record, :associated => associated, :show_blank_record => show_blank_record, :scope => scope} %>
18
21
  <%= render :partial => 'form_association_footer', :locals => {:parent_record => parent_record, :column => column, :associated => associated, :scope => scope} -%>
19
22
  </div>
20
- <%= link_to_visibility_toggle(subform_div_id, {:default_visible => !column.collapsed}) -%>
21
23
  <%
22
24
  @record = parent_record # restore @record, some partials can change it TODO remove when changing @record is removed
23
25
  @disable_required_for_new = disable_required_for_new
@@ -28,8 +28,7 @@ add_new_url = params_for(:controller => controller_path, :action => 'edit_associ
28
28
  add_class = 'as_replace_with_new'
29
29
  end
30
30
  create_another_id = "#{sub_form_id(:association => column.name, :id => parent_record.id || temporary_id || 99999999999)}-create-another" %>
31
- <%= link_to add_label, add_new_url, :id => create_another_id, :remote => true, :class => add_class, :style=> "display: none;" %>
32
- <%= javascript_tag("ActiveScaffold.show('#{create_another_id}');") %>
31
+ <%= link_to add_label, add_new_url, :id => create_another_id, :remote => true, :class => "as-js-button #{add_class}", :style=> "display: none;" %>
33
32
  <% end -%>
34
33
 
35
34
  <%= '|' if show_add_new and show_add_existing %>
@@ -42,8 +41,7 @@ add_new_url = params_for(:controller => controller_path, :action => 'edit_associ
42
41
  add_existing_id = "#{sub_form_id(:association => column.name, :id => parent_record.id || temporary_id || 99999999999)}-add-existing"
43
42
  add_existing_label = column.plural_association? ? :add_existing : :replace_existing %>
44
43
  <%= select_tag 'associated_id', '<option value="">'.html_safe + as_(:_select_) + '</option>'.html_safe + select_options %>
45
- <%= link_to as_(add_existing_label), edit_associated_url, :id => add_existing_id, :remote => true, :class=> "as_#{add_existing_label}", :style => "display: none;" %>
46
- <%= javascript_tag("ActiveScaffold.show('#{add_existing_id}');") %>
44
+ <%= link_to as_(add_existing_label), edit_associated_url, :id => add_existing_id, :remote => true, :class=> "subform-button as_#{add_existing_label}", :style => "display: none;" %>
47
45
  <% end -%>
48
46
  <% end -%>
49
47
  </div>
@@ -12,17 +12,3 @@ options = {:id => element_form_id(:action => 'search'),
12
12
  <%= link_to as_(:reset), url_for(url_options.merge(:search => '')), :class => 'as_cancel reset', :remote => true, :data => {:refresh => true} %>
13
13
  <%= loading_indicator_tag(:action => :search) %>
14
14
  </form>
15
-
16
- <% if ActiveScaffold.js_framework == :prototype %>
17
- <script type="text/javascript">
18
- //<![CDATA[
19
- new TextFieldWithExample('<%= search_input_id %>', '<%= as_(live_search ? :live_search : :search_terms) %>', {focus: true});
20
- <% if live_search -%>
21
- new Form.Element.DelayedObserver('<%= search_input_id %>', 0.5, function(element, value) {
22
- if (!$(element.id)) return false; // because the element may have been destroyed
23
- $(element).next().click();
24
- });
25
- <% end -%>
26
- //]]>
27
- </script>
28
- <% end -%>
@@ -41,7 +41,7 @@ module ActiveScaffold::Config
41
41
  def columns
42
42
  # we want to delay initializing to the @core.columns set for as long as possible. Too soon and .search_sql will not be available to .searchable?
43
43
  unless @columns
44
- self.columns = @core.columns.collect{|c| c.name if @core.columns._inheritable.include?(c.name) and c.searchable? and c.text?}.compact
44
+ self.columns = @core.columns.collect{|c| c.name if @core.columns._inheritable.include?(c.name) and c.searchable? and c.association.nil? and c.text?}.compact
45
45
  end
46
46
  @columns
47
47
  end
@@ -75,12 +75,7 @@ module ActionView::Helpers #:nodoc:
75
75
  # might be a namespaced controller (e.g., 'admin/admins')
76
76
  model = remote_controller.to_s.sub(/.*\//, '').singularize
77
77
  content_tag(:div, :class => 'active-scaffold-header') do
78
- content_tag :h2, link_to(args.first[:label] || active_scaffold_config_for(model).list.label, url, :remote => true)
79
- end <<
80
- if ActiveScaffold.js_framework == :prototype
81
- javascript_tag("new Ajax.Updater('#{id}', '#{url}', {method: 'get', evalScripts: true});")
82
- elsif ActiveScaffold.js_framework == :jquery
83
- javascript_tag("jQuery('##{id}').load('#{url}', function() { jQuery(this).trigger('as:element_updated'); });")
78
+ content_tag :h2, link_to(args.first[:label] || active_scaffold_config_for(model).list.label, url, :remote => true, :class => 'load-embedded')
84
79
  end
85
80
  end
86
81
  end
@@ -320,7 +320,6 @@ module ActiveScaffold
320
320
  end
321
321
  content
322
322
  end
323
- html << javascript_tag("ActiveScaffold.draggable_lists('#{options[:id]}')") if column.options[:draggable_lists] && ActiveScaffold.js_framework == :prototype
324
323
  html
325
324
  end
326
325
 
@@ -80,7 +80,7 @@ module ActiveScaffold
80
80
  options[:default_visible] = true if options[:default_visible].nil?
81
81
  options[:hide_label] ||= as_(:hide)
82
82
  options[:show_label] ||= as_(:show_block)
83
- javascript_tag("ActiveScaffold.create_visibility_toggle('#{id}', #{options.to_json});")
83
+ link_to options[:default_visible] ? options[:hide_label] : options[:show_label], '#', :data => {:show => options[:show_label], :hide => options[:hide_label], :toggable => id}, :style => 'display: none;', :class => 'as-js-button visibility-toggle'
84
84
  end
85
85
 
86
86
  def skip_action_link?(link, *args)
@@ -2,7 +2,7 @@ module ActiveScaffold
2
2
  module Version
3
3
  MAJOR = 3
4
4
  MINOR = 4
5
- PATCH = 2
5
+ PATCH = 3
6
6
 
7
7
  STRING = [MAJOR, MINOR, PATCH].compact.join('.')
8
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_scaffold
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.4.2
4
+ version: 3.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Many, see README
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-27 00:00:00.000000000 Z
11
+ date: 2014-08-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: shoulda