active_scaffold_sortable 3.2.0 → 3.2.1

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.
@@ -2,7 +2,7 @@ ActiveScaffold.update_positions = function(content) {
2
2
  if (typeof(content) == 'string') content = jQuery('#' + content);
3
3
  var element = content.closest('.sortable-container');
4
4
  jQuery.each(content.find('.sub-form-record input[name$="[' + element.data('column') + ']"]'), function(i, field) {
5
- jQuery(field).val(i);
5
+ jQuery(field).val(i+1); // don't use 0
6
6
  });
7
7
  }
8
8
  ActiveScaffold.sortable = function(element) {
@@ -12,6 +12,7 @@ ActiveScaffold.sortable = function(element) {
12
12
  element = content.closest('.sortable-container');
13
13
  form = element.closest('form.as_form').length > 0;
14
14
  } else {
15
+ element = jQuery(element);
15
16
  form = element.closest('form.as_form').length > 0;
16
17
  if (form) content = element;
17
18
  else content = element.find('.records:first');
@@ -1,7 +1,10 @@
1
1
  .sortable-handle {
2
2
  cursor: move;
3
3
  }
4
- td.sortable-handle {
4
+ td.sortable-handle, .active-scaffold .sub-form table td.sortable-handle {
5
5
  background: image-url('active_scaffold/sortable.png') no-repeat center center;
6
6
  width: 16px;
7
7
  }
8
+ .active-scaffold .sub-form table td.sortable-handle {
9
+ display: table-cell;
10
+ }
@@ -2,7 +2,7 @@ module ActiveScaffoldSortable
2
2
  module Version
3
3
  MAJOR = 3
4
4
  MINOR = 2
5
- PATCH = 0
5
+ PATCH = 1
6
6
 
7
7
  STRING = [MAJOR, MINOR, PATCH].compact.join('.')
8
8
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_scaffold_sortable
3
3
  version: !ruby/object:Gem::Version
4
- hash: 15
4
+ hash: 13
5
5
  prerelease:
6
6
  segments:
7
7
  - 3
8
8
  - 2
9
- - 0
10
- version: 3.2.0
9
+ - 1
10
+ version: 3.2.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Sergio Cambra
@@ -16,11 +16,10 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2012-12-18 00:00:00 Z
19
+ date: 2013-01-16 00:00:00 Z
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- type: :development
23
- requirement: &id001 !ruby/object:Gem::Requirement
22
+ version_requirements: &id001 !ruby/object:Gem::Requirement
24
23
  none: false
25
24
  requirements:
26
25
  - - ">="
@@ -29,12 +28,12 @@ dependencies:
29
28
  segments:
30
29
  - 0
31
30
  version: "0"
32
- version_requirements: *id001
33
31
  prerelease: false
32
+ type: :development
33
+ requirement: *id001
34
34
  name: shoulda
35
35
  - !ruby/object:Gem::Dependency
36
- type: :development
37
- requirement: &id002 !ruby/object:Gem::Requirement
36
+ version_requirements: &id002 !ruby/object:Gem::Requirement
38
37
  none: false
39
38
  requirements:
40
39
  - - ~>
@@ -45,12 +44,12 @@ dependencies:
45
44
  - 0
46
45
  - 0
47
46
  version: 1.0.0
48
- version_requirements: *id002
49
47
  prerelease: false
48
+ type: :development
49
+ requirement: *id002
50
50
  name: bundler
51
51
  - !ruby/object:Gem::Dependency
52
- type: :development
53
- requirement: &id003 !ruby/object:Gem::Requirement
52
+ version_requirements: &id003 !ruby/object:Gem::Requirement
54
53
  none: false
55
54
  requirements:
56
55
  - - ">="
@@ -59,25 +58,26 @@ dependencies:
59
58
  segments:
60
59
  - 0
61
60
  version: "0"
62
- version_requirements: *id003
63
61
  prerelease: false
62
+ type: :development
63
+ requirement: *id003
64
64
  name: rcov
65
65
  - !ruby/object:Gem::Dependency
66
- type: :runtime
67
- requirement: &id004 !ruby/object:Gem::Requirement
66
+ version_requirements: &id004 !ruby/object:Gem::Requirement
68
67
  none: false
69
68
  requirements:
70
69
  - - ">="
71
70
  - !ruby/object:Gem::Version
72
- hash: -1842552253
71
+ hash: 2064438024
73
72
  segments:
74
73
  - 3
75
74
  - 3
76
75
  - 0
77
76
  - rc
78
77
  version: 3.3.0.rc
79
- version_requirements: *id004
80
78
  prerelease: false
79
+ type: :runtime
80
+ requirement: *id004
81
81
  name: active_scaffold
82
82
  description: Sort Tree or List Structures by Drag n Drop
83
83
  email: activescaffold@googlegroups.com
@@ -89,46 +89,38 @@ extra_rdoc_files:
89
89
  - LICENSE.txt
90
90
  - README.textile
91
91
  files:
92
- - app/assets/stylesheets/active_scaffold_sortable.css.scss
92
+ - app/views/active_scaffold_overrides/_form_association.html.erb
93
+ - app/views/active_scaffold_overrides/edit_associated.js.erb
93
94
  - app/assets/images/active_scaffold/sortable.png
95
+ - app/assets/stylesheets/active_scaffold_sortable.css.scss
96
+ - app/assets/javascripts/prototype/active_scaffold_sortable.js
94
97
  - app/assets/javascripts/active_scaffold_sortable.js.erb
95
98
  - app/assets/javascripts/jquery/active_scaffold_sortable.js
96
- - app/assets/javascripts/jquery/active_scaffold_sortable.js~
97
- - app/assets/javascripts/prototype/active_scaffold_sortable.js
98
- - app/assets/javascripts/prototype/active_scaffold_sortable.js~
99
- - app/views/active_scaffold_overrides/_form_association.html.erb
100
- - app/views/active_scaffold_overrides/edit_associated.js.erb
101
- - app/views/active_scaffold_overrides/_form_association.html.erb~
102
- - app/views/active_scaffold_overrides/edit_associated.js.erb~
103
- - frontends/default/active_scaffold_overrides/_list.html.erb
104
99
  - frontends/default/active_scaffold_overrides/on_create.js.erb
100
+ - frontends/default/active_scaffold_overrides/_list.html.erb
105
101
  - frontends/default/active_scaffold_overrides/on_update.js.erb
106
102
  - frontends/default/active_scaffold_overrides/reorder.js.erb
107
- - frontends/default/active_scaffold_overrides/on_create.js.erb~
108
- - frontends/default/active_scaffold_overrides/on_update.js.erb~
109
103
  - lib/active_scaffold/actions/sortable.rb
110
- - lib/active_scaffold/actions/sortable.rb~
111
104
  - lib/active_scaffold/config/sortable.rb
112
105
  - lib/active_scaffold/helpers/sortable_helpers.rb
113
- - lib/active_scaffold_sortable.rb
114
- - lib/active_scaffold_sortable/config/core.rb
115
- - lib/active_scaffold_sortable/core.rb
116
- - lib/active_scaffold_sortable/version.rb
117
106
  - lib/active_scaffold_sortable/engine.rb
107
+ - lib/active_scaffold_sortable/core.rb
118
108
  - lib/active_scaffold_sortable/view_helpers.rb
119
- - lib/active_scaffold_sortable/view_helpers.rb~
109
+ - lib/active_scaffold_sortable/config/core.rb
110
+ - lib/active_scaffold_sortable/version.rb
111
+ - lib/active_scaffold_sortable.rb
120
112
  - LICENSE.txt
121
113
  - README.textile
122
- - test/auto_models_controller_test.rb
123
- - test/config_test.rb
124
- - test/controllers/auto_models_controller.rb
125
- - test/controllers/models_controller.rb
126
- - test/controllers/sortable_models_controller.rb
114
+ - test/router_test.rb
127
115
  - test/models/auto_model.rb
128
116
  - test/models/model.rb
129
- - test/router_test.rb
130
117
  - test/schema.rb
131
118
  - test/test_helper.rb
119
+ - test/controllers/auto_models_controller.rb
120
+ - test/controllers/models_controller.rb
121
+ - test/controllers/sortable_models_controller.rb
122
+ - test/auto_models_controller_test.rb
123
+ - test/config_test.rb
132
124
  homepage: http://github.com/activescaffold/active_scaffold_sortable
133
125
  licenses:
134
126
  - MIT
@@ -158,18 +150,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
158
150
  requirements: []
159
151
 
160
152
  rubyforge_project:
161
- rubygems_version: 1.8.23
153
+ rubygems_version: 1.8.19
162
154
  signing_key:
163
155
  specification_version: 3
164
156
  summary: Drag n Drop Sorting for Activescaffold
165
157
  test_files:
166
- - test/auto_models_controller_test.rb
167
- - test/config_test.rb
168
- - test/controllers/auto_models_controller.rb
169
- - test/controllers/models_controller.rb
170
- - test/controllers/sortable_models_controller.rb
158
+ - test/router_test.rb
171
159
  - test/models/auto_model.rb
172
160
  - test/models/model.rb
173
- - test/router_test.rb
174
161
  - test/schema.rb
175
162
  - test/test_helper.rb
163
+ - test/controllers/auto_models_controller.rb
164
+ - test/controllers/models_controller.rb
165
+ - test/controllers/sortable_models_controller.rb
166
+ - test/auto_models_controller_test.rb
167
+ - test/config_test.rb
@@ -1,45 +0,0 @@
1
- ActiveScaffold.update_positions = function(content) {
2
- if (typeof(content) == 'string') content = jQuery('#' + content);
3
- var element = content.closest('.sortable-container');
4
- jQuery.each(content.find('.sub-form-record input[name$="[' + element.data('column') + ']"]'), function(i, field) {
5
- jQuery(field).val(i);
6
- });
7
- }
8
- ActiveScaffold.sortable = function(element) {
9
- var form, content, sortable_options = {};
10
- if (typeof(element) == 'string') {
11
- content = jQuery('#' + element);
12
- element = content.closest('.sortable-container');
13
- } else {
14
- var form = element.closest('form.as_form').length > 0;
15
- if (form) content = element;
16
- else content = element.find('.records:first');
17
- }
18
-
19
- if (form) {
20
- sortable_options.update = function(event, ui) {
21
- ActiveScaffold.update_positions(content);
22
- };
23
- } else {
24
- var csrf = jQuery('meta[name=csrf-param]').attr('content') + '=' + jQuery('meta[name=csrf-token]').attr('content');
25
- var url = element.data('reorder-url');
26
- sortable_options.update = function(event, ui) {
27
- var body = jQuery(this).sortable('serialize',{key: encodeURIComponent(jQuery(this).attr('id') + '[]'), expression: new RegExp(element.data('format'))});
28
- var params = element.data('with');
29
- if (params) body += '&' + params;
30
- jQuery.post(url, body + '&' + csrf);
31
- };
32
- }
33
- sortable_options.handle = element.data('handle');
34
- sortable_options.items = element.data('tag');
35
- content.sortable(sortable_options);
36
- };
37
-
38
- jQuery(document).ready(function($) {
39
- $(document).on('as:action_success', 'a.as_action', function(e, action_link) {
40
- var sortable = $('.sortable-container', action_link.adapter);
41
- if (sortable.length) $.each(sortable, function(i, s) { ActiveScaffold.sortable(s); });
42
- });
43
- var sortable = $('.sortable-container');
44
- if (sortable.length) ActiveScaffold.sortable(sortable);
45
- });
@@ -1,34 +0,0 @@
1
- ActiveScaffold.sortable = function(element) {
2
- var form, content, sortable_options = {};
3
- if (typeof(element) == 'string') {
4
- content = $(element);
5
- element = content.up('.sortable-container');
6
- } else {
7
- var form = !!element.up('form.as_form');
8
- if (form) content = element.down('.sub-form');
9
- else content = element.down('.records');
10
- }
11
-
12
- if (!form) {
13
- var csrf = $$('meta[name=csrf-param]')[0].readAttribute('content') + '=' + $$('meta[name=csrf-token]')[0].readAttribute('content');
14
- var url = element.readAttribute('data-reorder-url').append_params(csrf);
15
- sortable_options.onUpdate = function() {
16
- var body = Sortable.serialize(content);
17
- var params = element.readAttribute('data-with');
18
- if (params) body += '&' + params;
19
- new Ajax.Request(url, {method: 'post', parameters: body + '&' + csrf});
20
- }
21
- }
22
- sortable_options.handle = element.readAttribute('data-handle');
23
- sortable_options.items = element.readAttribute('data-tag');
24
- Sortable.create(content, sortable_options);
25
- };
26
-
27
- document.observe('dom:loaded', function(){
28
- document.on('as:action_success', 'a.as_action', function(e, action_link) {
29
- var sortable = $(action_link.adapter).find('.sortable-container');
30
- if (sortable.length) sortable.invoke(function(s) { ActiveScaffold.sortable(s); });
31
- });
32
- var sortable = $$('.sortable-container');
33
- if (sortable.length) ActiveScaffold.sortable(sortable[0]);
34
- });
@@ -1,6 +0,0 @@
1
- <% config = active_scaffold_config_for(column.association.klass) %>
2
- <% if config.actions.include? :sortable %>
3
- <%= content_tag :div, render(:super), :class => 'sortable-container', :data => sort_params(config).merge(:tag => 'tbody') %>
4
- <% else %>
5
- <%= render :super %>
6
- <% end %>
@@ -1,6 +0,0 @@
1
- <%= render :super %>
2
- <% config = active_scaffold_config_for(@column.association.klass) %>
3
- <% if config.actions.include? :sortable %>
4
- ActiveScaffold.update_position('<%= sub_form_list_id(:association => @column.name) %>');
5
- ActiveScaffold.sortable('<%= sub_form_list_id(:association => @column.name) %>');
6
- <% end %>
@@ -1,4 +0,0 @@
1
- <%= render(:super, :locals => {:insert_at => :bottom}) %>
2
- <% if controller.send(:successful?) && !nested_singular_association? %>
3
- ActiveScaffold.sortable('<%= active_scaffold_tbody_id %>'); %>
4
- <% end %>
@@ -1,17 +0,0 @@
1
- <%= render(:super) %>
2
- <%
3
- # if we are currently editing a nested belongs_to association do not do any sorting stuff
4
- unless nested_singular_association?
5
- if ActiveScaffold.js_framework == :prototype
6
- %>
7
- <%= sortable_element_js(*sort_params) %>
8
- <%
9
- elsif ActiveScaffold.js_framework == :jquery
10
- reorder_params = {}
11
- reorder_params[:eid] = params[:eid] unless params[:eid].blank?
12
- %>
13
- <%= "ActiveScaffold.sortable('#{sort_params[0]}', #{controller_name.to_json}, #{reorder_params.to_json});".html_safe %>
14
- <%
15
- end if controller.send :successful?
16
- end
17
- %>
@@ -1,81 +0,0 @@
1
- module ActiveScaffold::Actions
2
- module Sortable
3
- def self.included(base)
4
- base.helper ActiveScaffold::Helpers::SortableHelpers
5
- base.before_filter :sortable_authorized?, :only => :reorder
6
- base.active_scaffold_config.configure do |config|
7
- config.list.pagination = false
8
-
9
- # turn sorting off
10
- sortable_column = config.sortable.column.name
11
- config.columns.each {|c| c.sort = false unless c.name == sortable_column }
12
- config.list.sorting = { sortable_column => "asc" }
13
-
14
- config.actions.each do |action_name|
15
- next if action_name == :subform
16
- action = config.send(action_name)
17
- action.columns.exclude(sortable_column) if action.respond_to? :columns
18
- end
19
-
20
- base.add_active_scaffold_path File.join(ActiveScaffold::Config::Sortable.plugin_directory, 'frontends', 'default')
21
- end
22
- end
23
-
24
- def reorder
25
- model = active_scaffold_config.model
26
-
27
- unless (model.instance_methods & [:nested_set_scope, 'nested_set_scope']).empty?
28
- reorder_children_in_tree(model)
29
- else
30
- if model.respond_to? :ancestry_column
31
- reorder_ancestry_tree(model)
32
- else
33
- reorder_simple_list(model)
34
- end
35
- end
36
- do_refresh_list if active_scaffold_config.sortable.refresh_list
37
- end
38
-
39
- protected
40
- def sortable_authorized?
41
- authorized_for?(:action => :update)
42
- end
43
-
44
- def reorder_ancestry_tree(model)
45
- first_record = model.find(params[active_scaffold_tbody_id].first)
46
- unless first_record.nil?
47
- records = first_record.is_root? ? model.roots: first_record.parent.children
48
- reorder_simple_list(model)
49
- else
50
- Rails.logger.info("Failed to find first record to reorder")
51
- end
52
- end
53
-
54
- def reorder_simple_list(model)
55
- column_name = active_scaffold_config.sortable.column.name
56
- debugger
57
- params[active_scaffold_tbody_id].each_with_index do |id, index|
58
- model.update_all({column_name => index + 1}, {model.primary_key => id})
59
- end
60
- end
61
-
62
- def reorder_children_in_tree(model)
63
- current_order = model.find(params[active_scaffold_tbody_id].first).try(:self_and_siblings)
64
- new_order = params[active_scaffold_tbody_id].collect {|item_id| item_id.to_i}
65
- new_order.each_with_index do |record_id, new_position|
66
- if record_id != current_order[new_position].id
67
- current_order = move_child(current_order.find {|child| child.id == record_id}, new_position, current_order)
68
- end
69
- end if new_order.length == current_order.length
70
- end
71
-
72
- def move_child(child, new_position, children)
73
- old_position = children.index(child)
74
- (old_position - new_position).abs.times do |step|
75
- child.send((old_position - new_position) > 0 ? :move_left : :move_right)
76
- end
77
- child.self_and_siblings
78
- end
79
-
80
- end
81
- end
@@ -1,16 +0,0 @@
1
- module ActiveScaffoldSortable
2
- module ViewHelpers
3
- def sort_params(config = active_scaffold_config)
4
- options = {
5
- :tag => 'tr',
6
- :reorder_url => url_for(params_for(:action => :reorder, :controller => controller_name)),
7
- :format => '^[^_-](?:[A-Za-z0-9_-]*)-(.*)-row$'
8
- }
9
- options.merge config.sortable.options
10
- end
11
-
12
- def active_scaffold_sortable_column(record, column)
13
- ''
14
- end
15
- end
16
- end