diff options
author | Bob Remeika <bob.remeika@gmail.com> | 2009-09-24 00:18:52 -0700 |
---|---|---|
committer | Stefan Penner <stefan.penner@gmail.com> | 2010-01-27 12:44:28 -0600 |
commit | 6fa8f81d7d730527f92d8e373dfc32199799681b (patch) | |
tree | 4ef2b8c0c21ef26ea0ad5a47d53f1dd9d5eb38a0 /actionpack/lib/action_view | |
parent | 88e793e5e77efbd43a5a2bb4eaba283255f6a262 (diff) | |
download | rails-6fa8f81d7d730527f92d8e373dfc32199799681b.tar.gz rails-6fa8f81d7d730527f92d8e373dfc32199799681b.tar.bz2 rails-6fa8f81d7d730527f92d8e373dfc32199799681b.zip |
Took another stab at observe_field. Now implementing data only helpers as script elements.
Diffstat (limited to 'actionpack/lib/action_view')
-rw-r--r-- | actionpack/lib/action_view/helpers/ajax_helper.rb | 52 |
1 files changed, 41 insertions, 11 deletions
diff --git a/actionpack/lib/action_view/helpers/ajax_helper.rb b/actionpack/lib/action_view/helpers/ajax_helper.rb index 6a13bcb432..43856acbc8 100644 --- a/actionpack/lib/action_view/helpers/ajax_helper.rb +++ b/actionpack/lib/action_view/helpers/ajax_helper.rb @@ -34,21 +34,51 @@ module ActionView tag(:input, html_options) end - def observe_field(name, options = {}, html_options = {}) - url = options.delete(:url) - url = url_for(url) if url.is_a?(Hash) + def observe_field(name, options = {}) + if options[:url] + options[:url] = options[:url].is_a?(Hash) ? url_for(options[:url]) : options[:url] + end + + if options[:frequency] + case options[:frequency] + when 0 + options.delete(:frequency) + else + options[:frequency] = options[:frequency].to_i + end + end + + if options[:with] && (options[:with] !~ /[\{=(.]/) + options[:with] = "'#{options[:with]}=' + encodeURIComponent(value)" + else + options[:with] ||= 'value' unless options[:function] + end - frequency = options.delete(:frequency) - if frequency && frequency > 0 - html_options[:"data-frequency"] = frequency + if options[:function] + statements = options[:function] # || remote_function(options) # TODO: Need to implement remote function - BR + options[:function] = JSFunction.new(statements, "element", "value") end - html_options.merge!(:style => "display:none", - :"data-observe-field" => name, - :"data-observe" => true, - :"data-url" => url) + options[:name] = name + + <<-SCRIPT + <script type="application/json" data-rails-type="observe_field"> + //<![CDATA[ + #{options.to_json} + // ]]> + </script> + SCRIPT + end - tag(:div, html_options) + # TODO: Move to javascript helpers - BR + class JSFunction + def initialize(statements, *arguments) + @statements, @arguments = statements, arguments + end + + def as_json(options = nil) + "function(#{@arguments.join(", ")}) {#{@statements}}" + end end module Rails2Compatibility |