From 4e4623659ba56cc338eb25bde8d1af55d4fb026c Mon Sep 17 00:00:00 2001
From: Ryan Bates
Date: Wed, 5 Aug 2009 12:00:26 -0700
Subject: [PATCH] pulling in some of the changes from deep branch
---
app/helpers/application_helper.rb | 10 +++++-----
app/views/projects/_form.html.erb | 4 +---
app/views/projects/_task.html.erb | 2 +-
public/javascripts/application.js | 9 +++++----
4 files changed, 12 insertions(+), 13 deletions(-)
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index cf48001..1e7938b 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -1,19 +1,19 @@
# Methods added to this helper will be available to all templates in the application.
module ApplicationHelper
- def remove_task_link(name, f)
+ def remove_child_link(name, f)
f.hidden_field(:_delete) + link_to_function(name, "remove_fields(this)")
end
- def add_task_link(name, f)
- fields = new_child_fields(f, :tasks)
- link_to_function(name, "insert_fields('tasks', '#{escape_javascript(fields)}')")
+ def add_child_link(name, f, method)
+ fields = new_child_fields(f, method)
+ link_to_function(name, h("insert_fields(this, \"#{method}\", \"#{escape_javascript(fields)}\")"))
end
def new_child_fields(form_builder, method, options = {})
options[:object] ||= form_builder.object.class.reflect_on_association(method).klass.new
options[:partial] ||= method.to_s.singularize
options[:form_builder_local] ||= :f
- form_builder.fields_for(method, options[:object], :child_index => 'NEW_RECORD') do |f|
+ form_builder.fields_for(method, options[:object], :child_index => "new_#{method}") do |f|
render(:partial => options[:partial], :locals => { options[:form_builder_local] => f })
end
end
diff --git a/app/views/projects/_form.html.erb b/app/views/projects/_form.html.erb
index 62b057c..fccef6f 100644
--- a/app/views/projects/_form.html.erb
+++ b/app/views/projects/_form.html.erb
@@ -6,11 +6,9 @@
Tasks
-
<% f.fields_for :tasks do |task_form| %>
<%= render :partial => 'task', :locals => { :f => task_form } %>
<% end %>
-
- <%= add_task_link "New Task", f %>
+ <%= add_child_link "New Task", f, :tasks %>
<%= f.submit "Submit" %>
<% end %>
diff --git a/app/views/projects/_task.html.erb b/app/views/projects/_task.html.erb
index 39b7075..2b0852c 100644
--- a/app/views/projects/_task.html.erb
+++ b/app/views/projects/_task.html.erb
@@ -1,7 +1,7 @@
<%= f.label :name, "Task" %>
<%= f.text_field :name %>
- <%= remove_task_link "remove", f %>
+ <%= remove_child_link "remove", f %>
<%# Alternatively you can use a check box: %>
<%# f.check_box :_delete %>
<%# f.label :_delete, "(remove)" %>
diff --git a/public/javascripts/application.js b/public/javascripts/application.js
index 44b6034..49d469f 100644
--- a/public/javascripts/application.js
+++ b/public/javascripts/application.js
@@ -1,9 +1,10 @@
// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults
-function insert_fields(element_id, content) {
+function insert_fields(link, method, content) {
var new_id = new Date().getTime();
- $(element_id).insert({
- bottom: content.replace(/NEW_RECORD/g, new_id)
+ var regexp = new RegExp("new_" + method, "g")
+ $(link).up().insert({
+ before: content.replace(regexp, new_id)
});
}
@@ -12,5 +13,5 @@ function remove_fields(link) {
if (hidden_field) {
hidden_field.value = '1';
}
- $(link).up(".field").remove();
+ $(link).up(".field").hide();
}