aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack
diff options
context:
space:
mode:
authorBob Remeika <bob.remeika@gmail.com>2009-11-04 23:33:21 -0800
committerStefan Penner <stefan.penner@gmail.com>2010-01-27 12:44:31 -0600
commit95b77e925f22376bd12698a8700259894b94dc57 (patch)
tree45c932bed39818215dc5565597ba5e67c23c81e3 /actionpack
parent7d34975214e80d54786f92cf1daee7ec7847a07c (diff)
downloadrails-95b77e925f22376bd12698a8700259894b94dc57.tar.gz
rails-95b77e925f22376bd12698a8700259894b94dc57.tar.bz2
rails-95b77e925f22376bd12698a8700259894b94dc57.zip
Added observe_form
Diffstat (limited to 'actionpack')
-rw-r--r--actionpack/lib/action_view/helpers/ajax_helper.rb8
-rw-r--r--actionpack/test/javascript/ajax_test.rb23
2 files changed, 23 insertions, 8 deletions
diff --git a/actionpack/lib/action_view/helpers/ajax_helper.rb b/actionpack/lib/action_view/helpers/ajax_helper.rb
index 1a75f9372b..5de33868e9 100644
--- a/actionpack/lib/action_view/helpers/ajax_helper.rb
+++ b/actionpack/lib/action_view/helpers/ajax_helper.rb
@@ -74,6 +74,14 @@ module ActionView
script_decorator(attributes)
end
+ def observe_form(name, options = {})
+ options[:observed] = name
+ attributes = extract_observer_attributes!(options)
+ attributes["data-js-type"] = "form_observer"
+
+ script_decorator(attributes)
+ end
+
def script_decorator(options)
attributes = %w(type="application/json")
attributes += options.map{|k, v| k + '="' + v.to_s + '"'}
diff --git a/actionpack/test/javascript/ajax_test.rb b/actionpack/test/javascript/ajax_test.rb
index f4e766d77e..32b6352c3c 100644
--- a/actionpack/test/javascript/ajax_test.rb
+++ b/actionpack/test/javascript/ajax_test.rb
@@ -392,17 +392,17 @@ class ObserveFieldTest < AjaxTestCase
test "using a url string" do
assert_html field(:url => "/some/other/url"),
- %w(script data-url="/some/other/url" data-observed="title")
+ %w(script data-js-type="field_observer" data-url="/some/other/url" data-observed="title")
end
test "using a url hash" do
assert_html field(:url => {:controller => :blog, :action => :update}),
- %w(script data-url="/url/hash" data-observed="title")
+ %w(script data-js-type="field_observer" data-url="/url/hash" data-observed="title")
end
test "using a :frequency option" do
assert_html field(:url => { :controller => :blog }, :frequency => 5.minutes),
- %w(script data-url="/url/hash" data-observed="title" data-frequency="300")
+ %w(script data-js-type="field_observer" data-url="/url/hash" data-observed="title" data-frequency="300")
end
test "using a :frequency option of 0" do
@@ -411,26 +411,33 @@ class ObserveFieldTest < AjaxTestCase
test "observe field with common options" do
assert_html observe_field("glass", :frequency => 5.minutes, :url => { :action => "reorder_if_empty" }),
- %w(script data-observed="glass" data-frequency="300" data-url="/url/hash")
+ %w(script data-js-type="field_observer" data-observed="glass" data-frequency="300" data-url="/url/hash")
end
# TODO: Consider using JSON instead of strings. Is using 'value' as a magical reference to the value of the observed field weird? (Rails2 does this) - BR
test "using a :with option" do
assert_html field(:with => "foo"),
- %w(script data-observed="title" data-with="'foo=' + encodeURIComponent(value)")
+ %w(script data-js-type="field_observer" data-observed="title" data-with="'foo=' + encodeURIComponent(value)")
assert_html field(:with => "'foo=' + encodeURIComponent(value)"),
- %w(script data-observed="title" data-with="'foo=' + encodeURIComponent(value)")
+ %w(script data-js-type="field_observer" data-observed="title" data-with="'foo=' + encodeURIComponent(value)")
end
test "using json in a :with option" do
assert_html field(:with => "{'id':value}"),
- %w(script data-observed="title" data-with="{'id':value}")
+ %w(script data-js-type="field_observer" data-observed="title" data-with="{'id':value}")
end
test "using :function for callback" do
assert_html field(:function => "alert('Element changed')"),
- %w(script data-observer-code="function(element, value) {alert('Element changed')}")
+ %w(script data-js-type="field_observer" data-observer-code="function(element, value) {alert('Element changed')}")
+ end
+end
+
+class ObserveFormTest < AjaxTestCase
+ test "basic" do
+ assert_html observe_form("some_form", :frequency => 2, :url => { :action => "hash" }),
+ %w(script data-js-type="form_observer" data-url="/url/hash" data-observed="some_form" data-frequency="2")
end
end