From 6b24a9890241dc086300a6b226a97284fa6327aa Mon Sep 17 00:00:00 2001 From: Jared Pace Date: Fri, 6 Aug 2010 14:00:58 -0400 Subject: [PATCH] Move nested attrs JS into form.js --- config/application.rb | 2 +- public/javascripts/application.js | 55 +------------------------------------------------------ public/javascripts/form.js | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+), 55 deletions(-) create mode 100644 public/javascripts/form.js diff --git a/config/application.rb b/config/application.rb index 08ee6b7..4942b53 100644 --- a/config/application.rb +++ b/config/application.rb @@ -37,7 +37,7 @@ module Hypnotoad # config.i18n.default_locale = :de # JavaScript files you want as :defaults (application.js is always included). - config.action_view.javascript_expansions[:defaults] = %w(jquery rails) + config.action_view.javascript_expansions[:defaults] = %w(jquery rails form) # > rails generate - config config.generators do |g| diff --git a/public/javascripts/application.js b/public/javascripts/application.js index 3def4f4..860e5c4 100644 --- a/public/javascripts/application.js +++ b/public/javascripts/application.js @@ -1,54 +1 @@ -$(function(){ - activateNestedForms(); -}); - -function activateNestedForms() { - $('.nested-wrapper').each(function(){ - var wrapper = $(this); - - makeNestedItemsDestroyable(wrapper); - - var addLink = $('').text('add another').addClass('add-nested'); - addLink.click(appendNestedItem); - wrapper.append(addLink); - }); - $('.nested a.remove-nested').live('click',removeNestedItem); -} - -function makeNestedItemsDestroyable(wrapper) { - wrapper.find('.nested').each(function(){ - var nestedItem = $(this); - var destroyLink = $('').text('remove').addClass('remove-nested'); - destroyLink.css('float','right'); - nestedItem.find('label').first().prepend(destroyLink); - }) -} - -function appendNestedItem() { - var addLink = $(this); - var nestedItem = addLink.parent().find('.nested').first().clone(); - nestedItem.find('input, select').each(function(){ - var input = $(this); - var timestamp = new Date(); - timestamp = timestamp.valueOf(); - input.attr('id', input.attr('id').replace(/([_\[])\d+([\]_])/,'$1'+timestamp+'$2')); - input.attr('name', input.attr('name').replace(/([_\[])\d+([\]_])/,'$1'+timestamp+'$2')); - input.val(''); - }); - addLink.before(nestedItem); -} - -function removeNestedItem() { - var destroyLink = $(this); - var nestedItem = destroyLink.closest('.nested'); - var inputNameExample = nestedItem.find('input').first().attr('name'); - var idFieldName = inputNameExample.replace(/\[[^\]]*\]$/,'[id]'); - if($("input[name='"+idFieldName+"']").length) { - var destroyFlagName = inputNameExample.replace(/\[[^\]]*\]$/,'[_destroy]') - var destroyFlag = $('').attr('name',destroyFlagName).attr('type','hidden').val('true'); - $("input[name='"+idFieldName+"']").after(destroyFlag); - nestedItem.hide(); - } else { - nestedItem.remove(); - } -} \ No newline at end of file +// App JS \ No newline at end of file diff --git a/public/javascripts/form.js b/public/javascripts/form.js new file mode 100644 index 0000000..3def4f4 --- /dev/null +++ b/public/javascripts/form.js @@ -0,0 +1,54 @@ +$(function(){ + activateNestedForms(); +}); + +function activateNestedForms() { + $('.nested-wrapper').each(function(){ + var wrapper = $(this); + + makeNestedItemsDestroyable(wrapper); + + var addLink = $('').text('add another').addClass('add-nested'); + addLink.click(appendNestedItem); + wrapper.append(addLink); + }); + $('.nested a.remove-nested').live('click',removeNestedItem); +} + +function makeNestedItemsDestroyable(wrapper) { + wrapper.find('.nested').each(function(){ + var nestedItem = $(this); + var destroyLink = $('').text('remove').addClass('remove-nested'); + destroyLink.css('float','right'); + nestedItem.find('label').first().prepend(destroyLink); + }) +} + +function appendNestedItem() { + var addLink = $(this); + var nestedItem = addLink.parent().find('.nested').first().clone(); + nestedItem.find('input, select').each(function(){ + var input = $(this); + var timestamp = new Date(); + timestamp = timestamp.valueOf(); + input.attr('id', input.attr('id').replace(/([_\[])\d+([\]_])/,'$1'+timestamp+'$2')); + input.attr('name', input.attr('name').replace(/([_\[])\d+([\]_])/,'$1'+timestamp+'$2')); + input.val(''); + }); + addLink.before(nestedItem); +} + +function removeNestedItem() { + var destroyLink = $(this); + var nestedItem = destroyLink.closest('.nested'); + var inputNameExample = nestedItem.find('input').first().attr('name'); + var idFieldName = inputNameExample.replace(/\[[^\]]*\]$/,'[id]'); + if($("input[name='"+idFieldName+"']").length) { + var destroyFlagName = inputNameExample.replace(/\[[^\]]*\]$/,'[_destroy]') + var destroyFlag = $('').attr('name',destroyFlagName).attr('type','hidden').val('true'); + $("input[name='"+idFieldName+"']").after(destroyFlag); + nestedItem.hide(); + } else { + nestedItem.remove(); + } +} \ No newline at end of file -- libgit2 0.21.2