module ActionView
module Helpers
module FormHelper
def form_for(object_name, *args, &proc)
raise ArgumentError, "Missing block" unless block_given?
id = args.last[:html][:id]
options = args.last.is_a?(Hash) ? args.pop : {}
concat(form_tag(options.delete(:url) || {}, options.delete(:html) || {}), proc.binding)
fields_for(object_name, *(args << options), &proc)
concat('', proc.binding)
concat(validation_js(id), proc.binding)
end
def validation_js(id)
s = "\n\n"
s
end
def validated_form_for(name, object, options, &proc)
form_for(name, object, options, &proc)
end
end
module PrototypeHelper
def remote_form_for(object_name, *args, &proc)
id = args.last[:html][:id]
options = args.last.is_a?(Hash) ? args.pop : {}
concat(form_remote_tag(options), proc.binding)
fields_for(object_name, *(args << options), &proc)
concat('', proc.binding)
concat(validation_js(id), proc.binding)
end
def validated_remote_form_for(name, object, options, &proc)
options = options.merge(:validation => true)
remote_form_for(name, object, options, &proc)
end
def validation_js(id)
s = "\n\n"
s
end
def remote_function(options)
javascript_options = options_for_ajax(options)
update = ''
if options[:update] && options[:update].is_a?(Hash)
update = []
update << "success:'#{options[:update][:success]}'" if options[:update][:success]
update << "failure:'#{options[:update][:failure]}'" if options[:update][:failure]
update = '{' + update.join(',') + '}'
elsif options[:update]
update << "'#{options[:update]}'"
end
if options[:html] && options[:html][:id]
id = options[:html][:id]
end
validation_str_start = ''
validation_str_end = ''
if options[:validation] == true
validation_str_start = "if(validation_#{id}.validate()){"
validation_str_end = "}"
end
function = update.empty? ?
"#{validation_str_start}new Ajax.Request(" :
"new Ajax.Updater(#{update}, "
url_options = options[:url]
url_options = url_options.merge(:escape => false) if url_options.is_a?(Hash)
function << "'#{url_for(url_options)}'"
function << ", #{javascript_options})#{validation_str_end}"
function = "#{options[:before]}; #{function}" if options[:before]
function = "#{function}; #{options[:after]}" if options[:after]
function = "if (#{options[:condition]}) { #{function}; }" if options[:condition]
function = "if (confirm('#{escape_javascript(options[:confirm])}')) { #{function}; }" if options[:confirm]
return function
end
end
end
end