66 lines
2.1 KiB
Ruby
66 lines
2.1 KiB
Ruby
module SimpleForm
|
|
module ActionViewExtensions
|
|
# This module creates SimpleForm wrappers around default form_for and fields_for.
|
|
#
|
|
# Example:
|
|
#
|
|
# simple_form_for @user do |f|
|
|
# f.input :name, hint: 'My hint'
|
|
# end
|
|
#
|
|
module FormHelper
|
|
|
|
def simple_form_for(record, options={}, &block)
|
|
options[:builder] ||= SimpleForm::FormBuilder
|
|
options[:html] ||= {}
|
|
unless options[:html].key?(:novalidate)
|
|
options[:html][:novalidate] = !SimpleForm.browser_validations
|
|
end
|
|
options[:html][:class] = [SimpleForm.form_class, simple_form_css_class(record, options)].compact.join(" ")
|
|
|
|
with_simple_form_field_error_proc do
|
|
form_for(record, options, &block)
|
|
end
|
|
end
|
|
|
|
def simple_fields_for(record_name, record_object = nil, options = {}, &block)
|
|
options, record_object = record_object, nil if record_object.is_a?(Hash) && record_object.extractable_options?
|
|
options[:builder] ||= SimpleForm::FormBuilder
|
|
|
|
with_simple_form_field_error_proc do
|
|
fields_for(record_name, record_object, options, &block)
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def with_simple_form_field_error_proc
|
|
default_field_error_proc = ::ActionView::Base.field_error_proc
|
|
begin
|
|
::ActionView::Base.field_error_proc = SimpleForm.field_error_proc
|
|
yield
|
|
ensure
|
|
::ActionView::Base.field_error_proc = default_field_error_proc
|
|
end
|
|
end
|
|
|
|
def simple_form_css_class(record, options)
|
|
html_options = options[:html]
|
|
as = options[:as]
|
|
|
|
if html_options.key?(:class)
|
|
html_options[:class]
|
|
elsif record.is_a?(String) || record.is_a?(Symbol)
|
|
as || record
|
|
else
|
|
record = record.last if record.is_a?(Array)
|
|
action = record.respond_to?(:persisted?) && record.persisted? ? :edit : :new
|
|
as ? "#{action}_#{as}" : dom_class(record, action)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
ActionView::Base.send :include, SimpleForm::ActionViewExtensions::FormHelper
|