From 5316e77db1c34dca15f83dd6a10e78e847c356c3 Mon Sep 17 00:00:00 2001 From: Bob Remeika Date: Fri, 25 Sep 2009 01:27:20 -0700 Subject: Took first stab at reimplementing form_remote_tag helpers --- actionpack/lib/action_view/helpers/ajax_helper.rb | 122 +++++----------------- 1 file changed, 26 insertions(+), 96 deletions(-) (limited to 'actionpack/lib/action_view/helpers') diff --git a/actionpack/lib/action_view/helpers/ajax_helper.rb b/actionpack/lib/action_view/helpers/ajax_helper.rb index 18b4c4991f..92e1d916c9 100644 --- a/actionpack/lib/action_view/helpers/ajax_helper.rb +++ b/actionpack/lib/action_view/helpers/ajax_helper.rb @@ -3,33 +3,31 @@ module ActionView module AjaxHelper include UrlHelper - def extract_remote_attributes!(options) - attributes = options.delete(:html) || {} - - attributes.merge!(extract_update_attributes!(options)) - attributes.merge!(extract_request_attributes!(options)) - attributes["data-js-type"] = options.delete(:js_type) || "remote" - - attributes - end - - def remote_form_for(record_or_name_or_array, *args, &proc) - options = args.extract_options! - object_name = extract_object_name_for_form!(args, options, record_or_name_or_array) - - concat(form_remote_tag(options)) - fields_for(object_name, *(args << options), &proc) - concat(''.html_safe!) - end - alias_method :form_remote_for, :remote_form_for - def form_remote_tag(options = {}, &block) attributes = {} attributes.merge!(extract_remote_attributes!(options)) attributes.merge!(options) - url = attributes.delete("data-url") - form_tag(attributes.delete(:action) || url, attributes, &block) + url = attributes.delete(:url) + form_tag(attributes.delete(:action) || url_for(url), attributes, &block) + end + + def extract_remote_attributes!(options) + attributes = options.delete(:html) || {} + + update = options.delete(:update) + if update.is_a?(Hash) + attributes["data-update-success"] = update[:success] + attributes["data-update-failure"] = update[:failure] + else + attributes["data-update-success"] = update + end + + attributes["data-update-position"] = options.delete(:position) + attributes["data-method"] = options.delete(:method) + attributes["data-remote"] = true + + attributes end def link_to_remote(name, url, options = {}) @@ -37,12 +35,6 @@ module ActionView attributes.merge!(extract_remote_attributes!(options)) attributes.merge!(options) - html["data-update-position"] = options.delete(:position) - html["data-method"] = options.delete(:method) - html["data-remote"] = "true" - - html.merge!(options) - url = url_for(url) if url.is_a?(Hash) link_to(name, url, attributes) end @@ -118,17 +110,6 @@ module ActionView SCRIPT end - # 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 def set_callbacks(options, html) [:complete, :failure, :success, :interactive, :loaded, :loading].each do |type| @@ -159,66 +140,15 @@ module ActionView private - def extract_request_attributes!(options) - attributes = {} - attributes["data-method"] = options.delete(:method) - - url = options.delete(:url) - attributes["data-url"] = url.is_a?(Hash) ? url_for(url) : url - - #TODO: Remove all references to prototype - BR - if options.delete(:form) - attributes["data-parameters"] = 'Form.serialize(this)' - elsif submit = options.delete(:submit) - attributes["data-parameters"] = "Form.serialize('#{submit}')" - elsif with = options.delete(:with) - if with !~ /[\{=(.]/ - attributes["data-with"] = "'#{with}=' + encodeURIComponent(value)" - else - attributes["data-with"] = with - end - end - - purge_unused_attributes!(attributes) - end - - def extract_update_attributes!(options) - attributes = {} - update = options.delete(:update) - if update.is_a?(Hash) - attributes["data-update-success"] = update[:success] - attributes["data-update-failure"] = update[:failure] - else - attributes["data-update-success"] = update + # TODO: Move to javascript helpers - BR + class JSFunction + def initialize(statements, *arguments) + @statements, @arguments = statements, arguments end - attributes["data-update-position"] = options.delete(:position) - purge_unused_attributes!(attributes) - end - - def extract_observer_attributes!(options) - attributes = extract_remote_attributes!(options) - 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 + def as_json(options = nil) + "function(#{@arguments.join(", ")}) {#{@statements}}" end - - purge_unused_attributes!(attributes) - end - - def purge_unused_attributes!(attributes) - attributes.delete_if {|key, value| value.nil? } - attributes - end - - def create_js_function(statements, *arguments) - "function(#{arguments.join(", ")}) {#{statements}}" end end -- cgit v1.2.3