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