active_scaffold 3.4.2 → 3.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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