diff options
Diffstat (limited to 'actionpack')
-rw-r--r-- | actionpack/lib/action_view/helpers/ajax_helper.rb | 30 | ||||
-rw-r--r-- | actionpack/test/javascript/ajax_test.rb | 14 |
2 files changed, 26 insertions, 18 deletions
diff --git a/actionpack/lib/action_view/helpers/ajax_helper.rb b/actionpack/lib/action_view/helpers/ajax_helper.rb index 93a79766dc..807c943d2c 100644 --- a/actionpack/lib/action_view/helpers/ajax_helper.rb +++ b/actionpack/lib/action_view/helpers/ajax_helper.rb @@ -55,20 +55,12 @@ module ActionView end def observe_field(name, options = {}) - attributes = extract_remote_attributes!(options) - callback = options.delete(:function) - frequency = options.delete(:frequency) + options[:observed] = name - attributes["data-name"] = name + attributes = extract_remote_attributes!(options) + attributes.merge!(extract_observer_attributes!(options)) attributes["data-js-type"] = "field_observer" - if callback - attributes["data-observer-code"] = create_js_function(callback, "element", "value") - end - if frequency && frequency != 0 - attributes["data-frequency"] = frequency.to_i - end - script_decorator(attributes) end @@ -146,6 +138,22 @@ module ActionView purge_unused_attributes!(attributes) end + def extract_observer_attributes!(options) + attributes = {} + attributes["data-observed"] = options.delete(:observed) + + callback = options.delete(:function) + frequency = options.delete(:frequency) + if callback + attributes["data-observer-code"] = create_js_function(callback, "element", "value") + end + if frequency && frequency != 0 + attributes["data-frequency"] = frequency.to_i + end + + attributes + end + def purge_unused_attributes!(attributes) attributes.delete_if {|key, value| value.nil? } attributes diff --git a/actionpack/test/javascript/ajax_test.rb b/actionpack/test/javascript/ajax_test.rb index 2ca47344e5..0cc4460870 100644 --- a/actionpack/test/javascript/ajax_test.rb +++ b/actionpack/test/javascript/ajax_test.rb @@ -382,17 +382,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-name="title") + %w(script 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-name="title") + %w(script 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-name="title" data-frequency="300") + %w(script data-url="/url/hash" data-observed="title" data-frequency="300") end test "using a :frequency option of 0" do @@ -401,21 +401,21 @@ 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-name="glass" data-frequency="300" data-url="/url/hash") + %w(script 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-name="title" data-with="'foo=' + encodeURIComponent(value)") + %w(script data-observed="title" data-with="'foo=' + encodeURIComponent(value)") assert_html field(:with => "'foo=' + encodeURIComponent(value)"), - %w(script data-name="title" data-with="'foo=' + encodeURIComponent(value)") + %w(script 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-name="title" data-with="{'id':value}") + %w(script data-observed="title" data-with="{'id':value}") end test "using :function for callback" do |