cocoon 1.2.8 → 1.2.9
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +40 -3
- data/VERSION +1 -1
- data/app/assets/javascripts/cocoon.js +30 -11
- data/cocoon.gemspec +2 -2
- metadata +3 -3
data/README.markdown
CHANGED
@@ -216,7 +216,7 @@ This should be called within the form builder.
|
|
216
216
|
- html_options: extra html-options (see [`link_to`](http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to)
|
217
217
|
There are some special options, the first three allow to control the placement of the new link-data:
|
218
218
|
- `data-association-insertion-traversal` : the jquery traversal method to allow node selection relative to the link. `closest`, `next`, `children`, etc. Default: absolute selection
|
219
|
-
- `data-association-insertion-node` : the jquery selector of the node. Default: parent node
|
219
|
+
- `data-association-insertion-node` : the jquery selector of the node as string, or a function that takes the `link_to_add_association` node as the parameter and returns a node. Default: parent node
|
220
220
|
- `data-association-insertion-method` : jquery method that inserts the new data. `before`, `after`, `append`, `prepend`, etc. Default: `before`
|
221
221
|
- `data-association-insertion-position` : old method specifying where to insert new data.
|
222
222
|
- this setting still works but `data-association-insertion-method` takes precedence. may be removed in a future version.
|
@@ -441,11 +441,11 @@ $(document).ready(function() {
|
|
441
441
|
});
|
442
442
|
```
|
443
443
|
|
444
|
-
The `association-insertion-node` will determine where to add it. You can choose any selector here, or specify this
|
444
|
+
The `association-insertion-node` will determine where to add it. You can choose any selector here, or specify this. Also, you can pass a function that returns an arbitrary node. The default is the parent-container, if you don't specify anything.
|
445
445
|
|
446
446
|
The `association-insertion-method` will determine where to add it in relation with the node. Any jQuery DOM Manipulation method can be set but we recommend sticking to any of the following: `before`, `after`, `append`, `prepend`. It is unknown at this time what others would do.
|
447
447
|
|
448
|
-
The `association-insertion-traversal` will allow node selection to be relative to the link.
|
448
|
+
The `association-insertion-traversal` will allow node selection to be relative to the link.
|
449
449
|
|
450
450
|
For example:
|
451
451
|
|
@@ -458,6 +458,43 @@ $(document).ready(function() {
|
|
458
458
|
});
|
459
459
|
```
|
460
460
|
|
461
|
+
(if you pass `association-insertion-node` as a function, this value will be ignored)
|
462
|
+
|
463
|
+
|
464
|
+
Note, if you want to add templates to the specific location which is:
|
465
|
+
|
466
|
+
- not a direct parent or sibling of the link
|
467
|
+
- the link appears multiple times - for instance, inside a deeply nested form
|
468
|
+
|
469
|
+
you need to specify `association-insertion-node` as a function.
|
470
|
+
|
471
|
+
|
472
|
+
For example, suppose Task has many SubTasks in the [Example](#examples), and have subtask forms like the following.
|
473
|
+
|
474
|
+
```haml
|
475
|
+
.row
|
476
|
+
.col-lg-12
|
477
|
+
.add_sub_task= link_to_add_association 'add a new sub task', f, :sub_tasks
|
478
|
+
.row
|
479
|
+
.col-lg-12
|
480
|
+
.sub_tasks_form
|
481
|
+
fields_for :sub_tasks do |sub_task_form|
|
482
|
+
= render 'sub_task_fields', f: sub_task_form
|
483
|
+
```
|
484
|
+
|
485
|
+
Then this will do the thing.
|
486
|
+
|
487
|
+
```javascript
|
488
|
+
$(document).ready(function() {
|
489
|
+
$(".add_sub_task a").
|
490
|
+
data("association-insertion-method", 'append').
|
491
|
+
data("association-insertion-node", function(link){
|
492
|
+
return link.closest('.row').next('.row').find('.sub_tasks_form')
|
493
|
+
});
|
494
|
+
});
|
495
|
+
```
|
496
|
+
|
497
|
+
|
461
498
|
### Partial
|
462
499
|
|
463
500
|
If no explicit partial name is given, `cocoon` looks for a file named `_<association-object_singular>_fields`.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.2.
|
1
|
+
1.2.9
|
@@ -14,6 +14,29 @@
|
|
14
14
|
return '_' + id + '_$1';
|
15
15
|
}
|
16
16
|
|
17
|
+
var getInsertionNodeElem = function(insertionNode, insertionTraversal, $this){
|
18
|
+
|
19
|
+
if (!insertionNode){
|
20
|
+
return $this.parent();
|
21
|
+
}
|
22
|
+
|
23
|
+
if (typeof insertionNode == 'function'){
|
24
|
+
if(insertionTraversal){
|
25
|
+
console.warn('association-insertion-traversal is ignored, because association-insertion-node is given as a function.')
|
26
|
+
}
|
27
|
+
return insertionNode($this);
|
28
|
+
}
|
29
|
+
|
30
|
+
if(typeof insertionNode == 'string'){
|
31
|
+
if (insertionTraversal){
|
32
|
+
return $this[insertionTraversal](insertionNode);
|
33
|
+
}else{
|
34
|
+
return insertionNode == "this" ? $this : $(insertionNode);
|
35
|
+
}
|
36
|
+
}
|
37
|
+
|
38
|
+
}
|
39
|
+
|
17
40
|
$(document).on('click', '.add_fields', function(e) {
|
18
41
|
e.preventDefault();
|
19
42
|
var $this = $(this),
|
@@ -52,27 +75,23 @@
|
|
52
75
|
count -= 1;
|
53
76
|
}
|
54
77
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
insertionNode = insertionNode == "this" ? $this : $(insertionNode);
|
60
|
-
}
|
61
|
-
} else {
|
62
|
-
insertionNode = $this.parent();
|
78
|
+
var insertionNodeElem = getInsertionNodeElem(insertionNode, insertionTraversal, $this)
|
79
|
+
|
80
|
+
if( !insertionNodeElem || (insertionNodeElem.length == 0) ){
|
81
|
+
console.warn("Couldn't find the element to insert the template. Make sure your `data-association-insertion-*` on `link_to_add_association` is correct.")
|
63
82
|
}
|
64
83
|
|
65
84
|
$.each(new_contents, function(i, node) {
|
66
85
|
var contentNode = $(node);
|
67
86
|
|
68
|
-
|
87
|
+
insertionNodeElem.trigger('cocoon:before-insert', [contentNode]);
|
69
88
|
|
70
89
|
// allow any of the jquery dom manipulation methods (after, before, append, prepend, etc)
|
71
90
|
// to be called on the node. allows the insertion node to be the parent of the inserted
|
72
91
|
// code and doesn't force it to be a sibling like after/before does. default: 'before'
|
73
|
-
var addedContent =
|
92
|
+
var addedContent = insertionNodeElem[insertionMethod](contentNode);
|
74
93
|
|
75
|
-
|
94
|
+
insertionNodeElem.trigger('cocoon:after-insert', [contentNode]);
|
76
95
|
});
|
77
96
|
});
|
78
97
|
|
data/cocoon.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "cocoon"
|
8
|
-
s.version = "1.2.
|
8
|
+
s.version = "1.2.9"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Nathan Van der Auwera"]
|
12
|
-
s.date = "2016-
|
12
|
+
s.date = "2016-03-21"
|
13
13
|
s.description = "Unobtrusive nested forms handling, using jQuery. Use this and discover cocoon-heaven."
|
14
14
|
s.email = "nathan@dixis.com"
|
15
15
|
s.extra_rdoc_files = [
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cocoon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.9
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-
|
12
|
+
date: 2016-03-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -334,7 +334,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
334
334
|
version: '0'
|
335
335
|
segments:
|
336
336
|
- 0
|
337
|
-
hash:
|
337
|
+
hash: 3439139141720742655
|
338
338
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
339
339
|
none: false
|
340
340
|
requirements:
|