the_sortable_tree 1.9.0 → 1.9.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.
- data/README.md +41 -17
- data/app/assets/javascripts/{comments_tree.js.coffee → comments/comments.js.coffee} +0 -0
- data/app/assets/javascripts/sortable/base.js.coffee +48 -0
- data/app/views/comments/base/_comment.html.haml +2 -1
- data/app/views/sortable/base/_tree.html.haml +8 -3
- data/lib/the_sortable_tree/version.rb +1 -1
- metadata +11 -13
- data/app/views/sortable/base/_js_init_sortable_tree.html.haml +0 -17
- data/app/views/sortable/base/_js_on_update_tree.html.haml +0 -12
- data/app/views/sortable/base/_js_rebuild_ajax.html.haml +0 -13
data/README.md
CHANGED
@@ -42,6 +42,8 @@ https://github.com/the-teacher/the_sortable_tree_test_app
|
|
42
42
|
|
43
43
|
### Changelog
|
44
44
|
|
45
|
+
1.9.1 - Rewrite with coffee => **assets/javascripts/sortable/base.js.coffee**
|
46
|
+
|
45
47
|
1.9.0 - 1) **Helper API changed!** 2) Comments tree with sand form and reply fu! 3) Way to manual set sortable Model klass into controller.
|
46
48
|
|
47
49
|
1.8.6 - fixed CamelCase names definition (by andisthejackass)
|
@@ -173,7 +175,7 @@ end
|
|
173
175
|
<%= csrf_meta_tags %>
|
174
176
|
|
175
177
|
<%= javascript_include_tag 'jquery.ui.nestedSortable' %>
|
176
|
-
<%= javascript_include_tag '
|
178
|
+
<%= javascript_include_tag 'sortable/base' %>
|
177
179
|
|
178
180
|
<%= stylesheet_link_tag 'tree', :media => :all %>
|
179
181
|
<%= stylesheet_link_tag 'sortable', :media => :all %>
|
@@ -221,19 +223,39 @@ rails g the_sortable_tree:views Model [option]
|
|
221
223
|
rails g the_sortable_tree:views Page
|
222
224
|
```
|
223
225
|
|
226
|
+
And render with partials from **pages/tree/base**
|
227
|
+
|
228
|
+
``` ruby
|
229
|
+
= sortable_tree @pages, :path => 'pages/tree/base'
|
230
|
+
```
|
231
|
+
|
224
232
|
### Customize your sortable tree
|
225
233
|
|
226
234
|
``` ruby
|
227
235
|
rails g the_sortable_tree:views Page sortable
|
228
236
|
```
|
229
237
|
|
238
|
+
And render with partials from **pages/sortable/base**
|
239
|
+
|
240
|
+
``` ruby
|
241
|
+
= sortable_tree @pages, :path => 'pages/sortable/base', :new_url => new_page_path
|
242
|
+
```
|
243
|
+
|
230
244
|
### Customize your comments tree
|
231
245
|
|
232
246
|
``` ruby
|
233
247
|
rails g the_sortable_tree:views Comment comments
|
234
248
|
```
|
235
249
|
|
236
|
-
|
250
|
+
And render with partials from **comments/comments/base**
|
251
|
+
|
252
|
+
``` ruby
|
253
|
+
= sortable_tree @comments, :path => 'comments/comments/base', :title => :name
|
254
|
+
```
|
255
|
+
|
256
|
+
### Troubleshooting
|
257
|
+
|
258
|
+
If you need to render a part of tree:
|
237
259
|
|
238
260
|
``` ruby
|
239
261
|
@root = Page.root
|
@@ -245,8 +267,6 @@ rails g the_sortable_tree:views Comment comments
|
|
245
267
|
= sortable_tree @pages, :new_url => new_page_path
|
246
268
|
```
|
247
269
|
|
248
|
-
### Troubleshooting
|
249
|
-
|
250
270
|
If **TheSortableTree** can't correctly define a Name of your Model, just add **sortable_model** into your Controller:
|
251
271
|
|
252
272
|
``` ruby
|
@@ -267,21 +287,31 @@ class Inventory::CategoriesController < ApplicationController
|
|
267
287
|
end
|
268
288
|
```
|
269
289
|
|
270
|
-
### Options
|
290
|
+
### Comments Options
|
291
|
+
|
292
|
+
**node_id** - comment's id which should be set as value of hidden field **parend_id** when Reply link pressed (**:id** by default)
|
293
|
+
|
294
|
+
**contacts_field** - **:email** field by default. If you want to hide contacts field - you should use customization by view generators
|
271
295
|
|
272
|
-
**
|
296
|
+
**content_field** - field with prepared comment's content (**:content** by default)
|
273
297
|
|
274
|
-
**
|
298
|
+
**raw_content_field** - field with raw comment's content (**:raw_content** by default, you can set it to **:content**)
|
275
299
|
|
276
|
-
|
300
|
+
### Common Options
|
277
301
|
|
278
|
-
**
|
302
|
+
**id** - id field (**:id** by default)
|
279
303
|
|
280
|
-
**
|
304
|
+
**title** - title field of node (**:title** by default)
|
305
|
+
|
306
|
+
**path** - path to custom view partials (:path => 'pages/sortable/tree')
|
307
|
+
|
308
|
+
**max_levels** - count of draggable levels or **max reply level** in comments tree. (**3** by default). **Can't be 0 (zero) and negative**
|
309
|
+
|
310
|
+
**namespace** - namespace for admin sections for example. (**nil** by default)
|
281
311
|
|
282
312
|
**opts[:level]** - view helper define level of recursion for each node. You can call **opts[:level]** into view partials
|
283
313
|
|
284
|
-
###
|
314
|
+
### Base partial's descriptions
|
285
315
|
|
286
316
|
**_tree** - root container for nested set elements
|
287
317
|
|
@@ -296,12 +326,6 @@ end
|
|
296
326
|
**_controls** - control elements for current node
|
297
327
|
|
298
328
|
|
299
|
-
**_js_init_sortable_tree** - JS for sortable tree
|
300
|
-
|
301
|
-
**_js_on_update_tree**- JS for sortable tree
|
302
|
-
|
303
|
-
**_js_rebuild_ajax**- JS for sortable tree
|
304
|
-
|
305
329
|
### Contributors
|
306
330
|
|
307
331
|
* https://github.com/the-teacher
|
File without changes
|
@@ -0,0 +1,48 @@
|
|
1
|
+
$ ->
|
2
|
+
class @TheSortableTree
|
3
|
+
max_levels = 3
|
4
|
+
rebuild_url = '/'
|
5
|
+
|
6
|
+
init: ->
|
7
|
+
$('ol.sortable').nestedSortable
|
8
|
+
disableNesting: 'no-nest'
|
9
|
+
forcePlaceholderSize: true
|
10
|
+
handle: 'i.handle'
|
11
|
+
helper: 'clone'
|
12
|
+
items: 'li'
|
13
|
+
maxLevels: @max_levels
|
14
|
+
opacity: .6
|
15
|
+
placeholder: 'placeholder'
|
16
|
+
revert: 250
|
17
|
+
tabSize: 25
|
18
|
+
tolerance: 'pointer'
|
19
|
+
toleranceElement: '> div'
|
20
|
+
|
21
|
+
$('ol.sortable').sortable
|
22
|
+
update: (event, ui) ->
|
23
|
+
parent_id = ui.item.parent().parent().attr('id')
|
24
|
+
item_id = ui.item.attr('id')
|
25
|
+
prev_id = ui.item.prev().attr('id')
|
26
|
+
next_id = ui.item.next().attr('id')
|
27
|
+
|
28
|
+
@rebuild item_id, parent_id, prev_id, next_id
|
29
|
+
|
30
|
+
rebuild: (item_id, parent_id, prev_id, next_id) ->
|
31
|
+
$.ajax
|
32
|
+
type: 'POST'
|
33
|
+
dataType: 'script'
|
34
|
+
url: @rebuild_url
|
35
|
+
data:
|
36
|
+
id: item_id
|
37
|
+
parent_id: parent_id
|
38
|
+
prev_id: prev_id
|
39
|
+
next_id: next_id
|
40
|
+
|
41
|
+
beforeSend: (xhr) ->
|
42
|
+
$('.nested_set i.handle').hide()
|
43
|
+
|
44
|
+
success: (data, status, xhr) ->
|
45
|
+
$('.nested_set i.handle').show()
|
46
|
+
|
47
|
+
error: (xhr, status, error) ->
|
48
|
+
alert error
|
@@ -2,6 +2,7 @@
|
|
2
2
|
= hidden_field :comment, :id, :value => node.send(opts[:node_id]), :id => nil
|
3
3
|
.title
|
4
4
|
%span.main= node.send opts[:title]
|
5
|
-
|
5
|
+
- if opts[:level] <= opts[:max_levels]
|
6
|
+
%span.reply= link_to t('.reply'), '#'
|
6
7
|
.contacts= node.send opts[:contacts_field]
|
7
8
|
.content= raw node.send opts[:content_field]
|
@@ -1,7 +1,12 @@
|
|
1
1
|
.sortable
|
2
2
|
= render :partial => "#{opts[:path]}/new", :locals => { :opts => opts }
|
3
3
|
- unless tree.empty?
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
:javascript
|
5
|
+
$(function() {
|
6
|
+
sortable = new document.TheSortableTree;
|
7
|
+
sortable.max_levels = #{opts[:max_levels]};
|
8
|
+
sortable.rebuild_url = "#{url_for(:controller => opts[:klass].pluralize, :action => :rebuild)}";
|
9
|
+
sortable.init()
|
10
|
+
})
|
11
|
+
|
7
12
|
%ol.ui-sortable.sortable.nested_set{ :id => "#{opts[:klass]}_nested_set" }= raw tree
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: the_sortable_tree
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.9.
|
4
|
+
version: 1.9.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-05-08 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
16
|
-
requirement: &
|
16
|
+
requirement: &71085670 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '3.1'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *71085670
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: sqlite3
|
27
|
-
requirement: &
|
27
|
+
requirement: &71085460 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *71085460
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rspec
|
38
|
-
requirement: &
|
38
|
+
requirement: &71085230 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *71085230
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rspec-rails
|
49
|
-
requirement: &
|
49
|
+
requirement: &71085020 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,7 +54,7 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *71085020
|
58
58
|
description: Sortable awesom_nested_set, Drag&Drop GUI for awesom_nested_set, View
|
59
59
|
Helper for nested set, Nested Comments
|
60
60
|
email:
|
@@ -91,8 +91,9 @@ files:
|
|
91
91
|
- app/assets/stylesheets/tree.css.scss
|
92
92
|
- app/assets/stylesheets/comments_tree.css.scss
|
93
93
|
- app/assets/stylesheets/sortable.css.scss
|
94
|
+
- app/assets/javascripts/comments/comments.js.coffee
|
95
|
+
- app/assets/javascripts/sortable/base.js.coffee
|
94
96
|
- app/assets/javascripts/jquery.ui.nestedSortable.js
|
95
|
-
- app/assets/javascripts/comments_tree.js.coffee
|
96
97
|
- app/views/comments/base/_children.html.haml
|
97
98
|
- app/views/comments/base/_node.html.haml
|
98
99
|
- app/views/comments/base/_tree.html.haml
|
@@ -104,9 +105,6 @@ files:
|
|
104
105
|
- app/views/sortable/base/_tree.html.haml
|
105
106
|
- app/views/sortable/base/_new.html.haml
|
106
107
|
- app/views/sortable/base/_controls.html.haml
|
107
|
-
- app/views/sortable/base/_js_rebuild_ajax.html.haml
|
108
|
-
- app/views/sortable/base/_js_init_sortable_tree.html.haml
|
109
|
-
- app/views/sortable/base/_js_on_update_tree.html.haml
|
110
108
|
- app/views/tree/base/_children.html.haml
|
111
109
|
- app/views/tree/base/_node.html.haml
|
112
110
|
- app/views/tree/base/_link.html.haml
|
@@ -1,17 +0,0 @@
|
|
1
|
-
:javascript
|
2
|
-
$(function(){
|
3
|
-
$('ol.sortable').nestedSortable({
|
4
|
-
disableNesting: 'no-nest',
|
5
|
-
forcePlaceholderSize: true,
|
6
|
-
handle: 'i.handle',
|
7
|
-
helper: 'clone',
|
8
|
-
items: 'li',
|
9
|
-
maxLevels: #{opts[:max_levels]},
|
10
|
-
opacity: .6,
|
11
|
-
placeholder: 'placeholder',
|
12
|
-
revert: 250,
|
13
|
-
tabSize: 25,
|
14
|
-
tolerance: 'pointer',
|
15
|
-
toleranceElement: '> div'
|
16
|
-
})
|
17
|
-
});
|
@@ -1,12 +0,0 @@
|
|
1
|
-
:javascript
|
2
|
-
$(function(){
|
3
|
-
$('ol.sortable').sortable({
|
4
|
-
update: function(event, ui){
|
5
|
-
parent_id = ui.item.parent().parent().attr('id');
|
6
|
-
item_id = ui.item.attr('id');
|
7
|
-
prev_id = ui.item.prev().attr('id');
|
8
|
-
next_id = ui.item.next().attr('id');
|
9
|
-
sortable_tree(item_id, parent_id, prev_id, next_id);
|
10
|
-
}
|
11
|
-
});
|
12
|
-
});
|
@@ -1,13 +0,0 @@
|
|
1
|
-
:javascript
|
2
|
-
function sortable_tree(item_id, parent_id, prev_id, next_id){
|
3
|
-
jQuery.ajax({
|
4
|
-
type: 'POST',
|
5
|
-
dataType: 'script',
|
6
|
-
url: '#{url_for(:controller => opts[:klass].pluralize, :action => :rebuild)}',
|
7
|
-
data: { id: item_id, parent_id: parent_id, prev_id: prev_id, next_id: next_id },
|
8
|
-
|
9
|
-
beforeSend: function(xhr){ $('.nested_set i.handle').hide() },
|
10
|
-
success: function(data, status, xhr){ $('.nested_set i.handle').show() },
|
11
|
-
error: function(xhr, status, error){ alert(error) }
|
12
|
-
});
|
13
|
-
}
|