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,7 +37,7 @@ module Hypnotoad | ||
37 | # config.i18n.default_locale = :de | 37 | # config.i18n.default_locale = :de |
38 | 38 | ||
39 | # JavaScript files you want as :defaults (application.js is always included). | 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 | # > rails generate - config | 42 | # > rails generate - config |
43 | config.generators do |g| | 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 | \ No newline at end of file | 1 | \ No newline at end of file |
2 | +// App JS | ||
56 | \ No newline at end of file | 3 | \ No newline at end of file |
@@ -0,0 +1,54 @@ | @@ -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 | \ No newline at end of file | 55 | \ No newline at end of file |