sortable_tree_rails 0.0.5 → 0.0.8
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 +4 -4
- data/app/controllers/sortable_tree_controller.rb +1 -1
- data/app/helpers/sortable_tree_helper.rb +3 -2
- data/app/views/sortable_tree/_sortable_tree.html.haml +1 -59
- data/lib/assets/javascripts/sortable_tree.js +61 -0
- data/lib/sortable_tree_rails/version.rb +1 -1
- data/readme.md +53 -8
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ee8d4e44aec0235ab2e31fc03bde95499d6830c4
|
4
|
+
data.tar.gz: 18c3ad4cb2516050843f3b89221bfcbb80205f90
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c062364af1885e36f6d9d632a0bd0a98d2c311cdd665b022136318cc1ed82536add9c9d28a799f2ade4c8757182969a4f0ef8bb226332270ee3e3c4e10a03bdd
|
7
|
+
data.tar.gz: a774bce0c5707d547047f8fc8fbf4c0eb9f34141b67b5efddf43cfbba25eb9f04c5ce8333547afa5131cc788abd52bedcbb350e03e6864746e72db0d5c9eaab9
|
@@ -19,7 +19,7 @@ module SortableTreeController
|
|
19
19
|
options[:sorting_attribute] ||= 'pos'
|
20
20
|
options[:parent_method] ||= 'parent'
|
21
21
|
|
22
|
-
records = params[:cat].inject({}) do |res, (resource, parent_resource)|
|
22
|
+
records = params[:cat].to_unsafe_h.inject({}) do |res, (resource, parent_resource)|
|
23
23
|
res[resource_class.find(resource)] = resource_class.find(parent_resource) rescue nil
|
24
24
|
res
|
25
25
|
end
|
@@ -29,9 +29,10 @@ module SortableTreeHelper
|
|
29
29
|
|
30
30
|
def sortable_tree_build_actions(item, opts={})
|
31
31
|
partial = opts[:controls_partial] || nil
|
32
|
-
|
33
32
|
if partial
|
34
|
-
render :partial=>partial, locals: {item: item, options: opts}
|
33
|
+
return render :partial=>partial, locals: {item: item, options: opts}
|
34
|
+
else
|
35
|
+
return ""
|
35
36
|
end
|
36
37
|
|
37
38
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
.sortable_tree_wrapper
|
2
|
-
%ol.sortable_tree{data: {'sortable-url' => options[:sort_url]} }
|
2
|
+
%ol.sortable_tree{data: {'sortable-url' => options[:sort_url], 'max-levels'=> (options[:max_levels] || 5)} }
|
3
3
|
- items.each do |root, children|
|
4
4
|
%li{id: "cat_#{root.id}"}
|
5
5
|
.item
|
@@ -15,61 +15,3 @@
|
|
15
15
|
|
16
16
|
|
17
17
|
|
18
|
-
:javascript
|
19
|
-
$(document).ready(function(){
|
20
|
-
$('.sortable_tree').nestedSortable({
|
21
|
-
forceHelperSizeType: true,
|
22
|
-
errorClass: 'cantdoit',
|
23
|
-
disableNesting: 'cantdoit',
|
24
|
-
handle: '> .item',
|
25
|
-
helper: 'clone',
|
26
|
-
listType: 'ol',
|
27
|
-
items: 'li',
|
28
|
-
opacity: 0.6,
|
29
|
-
placeholder: 'placeholder',
|
30
|
-
revert: 250,
|
31
|
-
maxLevels: #{options[:max_levels] || 5},
|
32
|
-
//tabSize: 20,
|
33
|
-
// protectRoot: $(this).data('protect-root'),
|
34
|
-
|
35
|
-
// prevent drag flickers
|
36
|
-
tolerance: 'pointer',
|
37
|
-
toleranceElement: '> div',
|
38
|
-
isTree: true,
|
39
|
-
startCollapsed: false,
|
40
|
-
//startCollapsed: $(this).data("start-collapsed"),
|
41
|
-
|
42
|
-
relocate: function(){
|
43
|
-
//$(this).nestedSortable("disable");
|
44
|
-
var data = $(this).nestedSortable("serialize");
|
45
|
-
var url = $(this).data("sortable-url");
|
46
|
-
|
47
|
-
// update on server
|
48
|
-
$.ajax({
|
49
|
-
url: url,
|
50
|
-
type: "post",
|
51
|
-
data: data
|
52
|
-
}).always(function(){
|
53
|
-
//$(this).nestedSortable("enable");
|
54
|
-
|
55
|
-
$(this).find('.item').each(function(index){
|
56
|
-
if (index % 2){
|
57
|
-
$(this).removeClass('odd').addClass('even');
|
58
|
-
}else{
|
59
|
-
$(this).removeClass('even').addClass('odd');
|
60
|
-
}
|
61
|
-
});
|
62
|
-
|
63
|
-
}).done(function(data){
|
64
|
-
|
65
|
-
}).fail(function(jqXHR, textStatus){
|
66
|
-
|
67
|
-
});
|
68
|
-
|
69
|
-
|
70
|
-
//$(this).nestedSortable("enable");
|
71
|
-
}
|
72
|
-
}); // nested tree
|
73
|
-
}); // document.ready
|
74
|
-
|
75
|
-
|
@@ -0,0 +1,61 @@
|
|
1
|
+
$(document).ready(function(){
|
2
|
+
|
3
|
+
$('.sortable_tree').each(function() {
|
4
|
+
$(this).nestedSortable({
|
5
|
+
forceHelperSizeType: true,
|
6
|
+
errorClass: 'cantdoit',
|
7
|
+
disableNesting: 'cantdoit',
|
8
|
+
handle: '> .item',
|
9
|
+
helper: 'clone',
|
10
|
+
listType: 'ol',
|
11
|
+
items: 'li',
|
12
|
+
opacity: 0.6,
|
13
|
+
placeholder: 'placeholder',
|
14
|
+
revert: 250,
|
15
|
+
maxLevels: $(this).data('max-levels'),
|
16
|
+
//maxLevels: #{options[:max_levels] || 5},
|
17
|
+
//tabSize: 20,
|
18
|
+
// protectRoot: $(this).data('protect-root'),
|
19
|
+
|
20
|
+
// prevent drag flickers
|
21
|
+
tolerance: 'pointer',
|
22
|
+
toleranceElement: '> div',
|
23
|
+
isTree: true,
|
24
|
+
startCollapsed: false,
|
25
|
+
//startCollapsed: $(this).data("start-collapsed"),
|
26
|
+
|
27
|
+
relocate: function(){
|
28
|
+
//$(this).nestedSortable("disable");
|
29
|
+
var data = $(this).nestedSortable("serialize");
|
30
|
+
var url = $(this).data("sortable-url");
|
31
|
+
|
32
|
+
// update on server
|
33
|
+
$.ajax({
|
34
|
+
url: url,
|
35
|
+
type: "post",
|
36
|
+
data: data
|
37
|
+
}).always(function(){
|
38
|
+
//$(this).nestedSortable("enable");
|
39
|
+
|
40
|
+
$(this).find('.item').each(function(index){
|
41
|
+
if (index % 2){
|
42
|
+
$(this).removeClass('odd').addClass('even');
|
43
|
+
}else{
|
44
|
+
$(this).removeClass('even').addClass('odd');
|
45
|
+
}
|
46
|
+
});
|
47
|
+
|
48
|
+
}).done(function(data){
|
49
|
+
|
50
|
+
}).fail(function(jqXHR, textStatus){
|
51
|
+
|
52
|
+
});
|
53
|
+
|
54
|
+
|
55
|
+
//$(this).nestedSortable("enable");
|
56
|
+
}
|
57
|
+
}); // nested tree
|
58
|
+
});
|
59
|
+
|
60
|
+
|
61
|
+
}); // document.ready
|
data/readme.md
CHANGED
@@ -23,6 +23,9 @@ Run page with the tree: `http://localhost:3000/categories/manage`.
|
|
23
23
|
### Gemfile
|
24
24
|
|
25
25
|
```
|
26
|
+
gem 'jquery-rails'
|
27
|
+
gem "jquery-ui-rails"
|
28
|
+
|
26
29
|
gem 'ancestry'
|
27
30
|
gem 'sortable_tree_rails'
|
28
31
|
```
|
@@ -64,17 +67,24 @@ end
|
|
64
67
|
|
65
68
|
### Javascript
|
66
69
|
|
67
|
-
Include js files in your assets file application.js
|
70
|
+
Include js files in your assets file `application.js`:
|
68
71
|
|
69
72
|
```
|
70
73
|
//= require jquery2
|
71
|
-
//= require
|
74
|
+
//= require jquery-ui
|
72
75
|
|
73
|
-
//=require jquery-ui/sortable
|
74
76
|
//=require jquery.mjs.nestedSortable.js
|
77
|
+
//=require sortable_tree.js
|
78
|
+
|
75
79
|
|
76
80
|
```
|
77
81
|
|
82
|
+
it depends on jquery and jquery-ui which come from gems 'jquery-rails', 'jquery-ui-rails'.
|
83
|
+
Change `application.js` to include jquery and jquery-ui (jquery-ui/sortable) if you are not using these gems.
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
|
78
88
|
### CSS
|
79
89
|
|
80
90
|
Add CSS file to your styles.
|
@@ -154,9 +164,8 @@ in controller:
|
|
154
164
|
sortable_tree 'ClassName', {parent_method: 'parent', sorting_attribute: 'pos'}
|
155
165
|
```
|
156
166
|
|
157
|
-
* :controls_partial - specify what partial view to use to show control links for each item in a tree. Set to nil to not show controls.
|
158
167
|
|
159
|
-
|
168
|
+
|
160
169
|
|
161
170
|
|
162
171
|
## Options for view
|
@@ -165,9 +174,45 @@ Use local variable `item` in the partial view.
|
|
165
174
|
= render_sortable_tree(@items, {__options_here})
|
166
175
|
```
|
167
176
|
|
168
|
-
* name_method - defined which model method (usually, a column name) will be used to show name (default: :name)
|
169
|
-
* sort_url - URL used to update data after item is moved to a new position
|
170
|
-
* max_levels - max levels to show in tree (default: 5)
|
177
|
+
* :name_method - defined which model method (usually, a column name) will be used to show name (default: :name)
|
178
|
+
* :sort_url - URL used to update data after item is moved to a new position
|
179
|
+
* :max_levels - max levels to show in tree (default: 5)
|
180
|
+
* :controls_partial - specify what partial view to use to show control links for each item in a tree. Set to nil to not show controls.
|
181
|
+
|
182
|
+
|
183
|
+
|
184
|
+
* example.
|
185
|
+
|
186
|
+
```
|
187
|
+
= render_sortable_tree(@items, {name_method: :name, sort_url: sort_categories_url, max_levels: 5})
|
188
|
+
```
|
189
|
+
|
190
|
+
|
191
|
+
* example of partial view with controls.
|
192
|
+
|
193
|
+
* main view:
|
194
|
+
```
|
195
|
+
= render_sortable_tree(@items, {name_method: :name, sort_url: sort_categories_url, max_levels: 5, controls_partial: 'controls'})
|
196
|
+
```
|
197
|
+
|
198
|
+
* partial with controls. Use local variable `item` in the partial view.
|
199
|
+
|
200
|
+
`_controls.html.haml`:
|
201
|
+
|
202
|
+
```
|
203
|
+
= link_to 'Edit', edit_category_url(item)
|
204
|
+
= link_to 'Delete', category_url(item), :method => :delete, :data => { :confirm => 'Are you sure?' }
|
205
|
+
|
206
|
+
```
|
207
|
+
|
208
|
+
|
209
|
+
# Customize
|
210
|
+
|
211
|
+
## customize view
|
212
|
+
|
213
|
+
* edit file 'views/sortable/_sortable.html.haml' to access the whole layout
|
214
|
+
|
215
|
+
|
171
216
|
|
172
217
|
|
173
218
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sortable_tree_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Max Ivak
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-02-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 4.2.7
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 4.2.7
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: sqlite3
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -61,6 +61,7 @@ files:
|
|
61
61
|
- app/views/sortable_tree/_sortable_tree.html.haml
|
62
62
|
- config/routes.rb
|
63
63
|
- lib/assets/javascripts/jquery.mjs.nestedSortable.js
|
64
|
+
- lib/assets/javascripts/sortable_tree.js
|
64
65
|
- lib/assets/stylesheets/sortable_tree.scss
|
65
66
|
- lib/sortable_tree_rails.rb
|
66
67
|
- lib/sortable_tree_rails/engine.rb
|