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 | ... | ... |