Commit 6b24a9890241dc086300a6b226a97284fa6327aa

Authored by Jared Pace
1 parent a941d776
Exists in master and in 1 other branch production

Move nested attrs JS into form.js

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
public/javascripts/form.js 0 → 100644
@@ -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