From 95b77e925f22376bd12698a8700259894b94dc57 Mon Sep 17 00:00:00 2001 From: Bob Remeika Date: Wed, 4 Nov 2009 23:33:21 -0800 Subject: Added observe_form --- actionpack/lib/action_view/helpers/ajax_helper.rb | 8 ++++++++ actionpack/test/javascript/ajax_test.rb | 23 +++++++++++++++-------- 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 -- cgit v1.2.3