Commit 6b24a9890241dc086300a6b226a97284fa6327aa
1 parent
a941d776
Exists in
master
and in
1 other branch
Move nested attrs JS into form.js
Showing
3 changed files
with
56 additions
and
55 deletions
Show diff stats
config/application.rb
... | ... | @@ -37,7 +37,7 @@ module Hypnotoad |
37 | 37 | # config.i18n.default_locale = :de |
38 | 38 | |
39 | 39 | # JavaScript files you want as :defaults (application.js is always included). |
40 | - config.action_view.javascript_expansions[:defaults] = %w(jquery rails) | |
40 | + config.action_view.javascript_expansions[:defaults] = %w(jquery rails form) | |
41 | 41 | |
42 | 42 | # > rails generate - config |
43 | 43 | config.generators do |g| | ... | ... |
public/javascripts/application.js
1 | -$(function(){ | |
2 | - activateNestedForms(); | |
3 | -}); | |
4 | - | |
5 | -function activateNestedForms() { | |
6 | - $('.nested-wrapper').each(function(){ | |
7 | - var wrapper = $(this); | |
8 | - | |
9 | - makeNestedItemsDestroyable(wrapper); | |
10 | - | |
11 | - var addLink = $('<a/>').text('add another').addClass('add-nested'); | |
12 | - addLink.click(appendNestedItem); | |
13 | - wrapper.append(addLink); | |
14 | - }); | |
15 | - $('.nested a.remove-nested').live('click',removeNestedItem); | |
16 | -} | |
17 | - | |
18 | -function makeNestedItemsDestroyable(wrapper) { | |
19 | - wrapper.find('.nested').each(function(){ | |
20 | - var nestedItem = $(this); | |
21 | - var destroyLink = $('<a/>').text('remove').addClass('remove-nested'); | |
22 | - destroyLink.css('float','right'); | |
23 | - nestedItem.find('label').first().prepend(destroyLink); | |
24 | - }) | |
25 | -} | |
26 | - | |
27 | -function appendNestedItem() { | |
28 | - var addLink = $(this); | |
29 | - var nestedItem = addLink.parent().find('.nested').first().clone(); | |
30 | - nestedItem.find('input, select').each(function(){ | |
31 | - var input = $(this); | |
32 | - var timestamp = new Date(); | |
33 | - timestamp = timestamp.valueOf(); | |
34 | - input.attr('id', input.attr('id').replace(/([_\[])\d+([\]_])/,'$1'+timestamp+'$2')); | |
35 | - input.attr('name', input.attr('name').replace(/([_\[])\d+([\]_])/,'$1'+timestamp+'$2')); | |
36 | - input.val(''); | |
37 | - }); | |
38 | - addLink.before(nestedItem); | |
39 | -} | |
40 | - | |
41 | -function removeNestedItem() { | |
42 | - var destroyLink = $(this); | |
43 | - var nestedItem = destroyLink.closest('.nested'); | |
44 | - var inputNameExample = nestedItem.find('input').first().attr('name'); | |
45 | - var idFieldName = inputNameExample.replace(/\[[^\]]*\]$/,'[id]'); | |
46 | - if($("input[name='"+idFieldName+"']").length) { | |
47 | - var destroyFlagName = inputNameExample.replace(/\[[^\]]*\]$/,'[_destroy]') | |
48 | - var destroyFlag = $('<input/>').attr('name',destroyFlagName).attr('type','hidden').val('true'); | |
49 | - $("input[name='"+idFieldName+"']").after(destroyFlag); | |
50 | - nestedItem.hide(); | |
51 | - } else { | |
52 | - nestedItem.remove(); | |
53 | - } | |
54 | -} | |
55 | 1 | \ No newline at end of file |
2 | +// App JS | |
56 | 3 | \ No newline at end of file | ... | ... |
... | ... | @@ -0,0 +1,54 @@ |
1 | +$(function(){ | |
2 | + activateNestedForms(); | |
3 | +}); | |
4 | + | |
5 | +function activateNestedForms() { | |
6 | + $('.nested-wrapper').each(function(){ | |
7 | + var wrapper = $(this); | |
8 | + | |
9 | + makeNestedItemsDestroyable(wrapper); | |
10 | + | |
11 | + var addLink = $('<a/>').text('add another').addClass('add-nested'); | |
12 | + addLink.click(appendNestedItem); | |
13 | + wrapper.append(addLink); | |
14 | + }); | |
15 | + $('.nested a.remove-nested').live('click',removeNestedItem); | |
16 | +} | |
17 | + | |
18 | +function makeNestedItemsDestroyable(wrapper) { | |
19 | + wrapper.find('.nested').each(function(){ | |
20 | + var nestedItem = $(this); | |
21 | + var destroyLink = $('<a/>').text('remove').addClass('remove-nested'); | |
22 | + destroyLink.css('float','right'); | |
23 | + nestedItem.find('label').first().prepend(destroyLink); | |
24 | + }) | |
25 | +} | |
26 | + | |
27 | +function appendNestedItem() { | |
28 | + var addLink = $(this); | |
29 | + var nestedItem = addLink.parent().find('.nested').first().clone(); | |
30 | + nestedItem.find('input, select').each(function(){ | |
31 | + var input = $(this); | |
32 | + var timestamp = new Date(); | |
33 | + timestamp = timestamp.valueOf(); | |
34 | + input.attr('id', input.attr('id').replace(/([_\[])\d+([\]_])/,'$1'+timestamp+'$2')); | |
35 | + input.attr('name', input.attr('name').replace(/([_\[])\d+([\]_])/,'$1'+timestamp+'$2')); | |
36 | + input.val(''); | |
37 | + }); | |
38 | + addLink.before(nestedItem); | |
39 | +} | |
40 | + | |
41 | +function removeNestedItem() { | |
42 | + var destroyLink = $(this); | |
43 | + var nestedItem = destroyLink.closest('.nested'); | |
44 | + var inputNameExample = nestedItem.find('input').first().attr('name'); | |
45 | + var idFieldName = inputNameExample.replace(/\[[^\]]*\]$/,'[id]'); | |
46 | + if($("input[name='"+idFieldName+"']").length) { | |
47 | + var destroyFlagName = inputNameExample.replace(/\[[^\]]*\]$/,'[_destroy]') | |
48 | + var destroyFlag = $('<input/>').attr('name',destroyFlagName).attr('type','hidden').val('true'); | |
49 | + $("input[name='"+idFieldName+"']").after(destroyFlag); | |
50 | + nestedItem.hide(); | |
51 | + } else { | |
52 | + nestedItem.remove(); | |
53 | + } | |
54 | +} | |
0 | 55 | \ No newline at end of file | ... | ... |