Moved form helpers from application_helper to a real FormHelper
This commit is contained in:
@@ -197,192 +197,6 @@ module ApplicationHelper
|
||||
end
|
||||
end
|
||||
|
||||
def field(form, name, type = nil, param = nil, html: nil, help: false, attrs: [], classes: nil, label: nil, placeholder: nil, value: nil, checked: nil, required: false)
|
||||
|
||||
if form.is_a?(Symbol) || form.is_a?(String)
|
||||
param = type
|
||||
type = name
|
||||
name = form
|
||||
form = nil
|
||||
end
|
||||
|
||||
if attrs && !attrs.is_a?(Array)
|
||||
attrs = [attrs]
|
||||
end
|
||||
|
||||
attrs_used = 0
|
||||
|
||||
root = 'div'
|
||||
|
||||
lang_key = "form.#{name.to_s}"
|
||||
if form
|
||||
lang_key = form.object.class.name.underscore.pluralize + '.' + lang_key
|
||||
elsif params[:controller]
|
||||
lang_key = params[:controller] + '.' + lang_key
|
||||
end
|
||||
|
||||
select_prompt = nil
|
||||
show_label = !(/^hidden_field/.match(type.to_s))
|
||||
label_after = true
|
||||
value_attribute = !form
|
||||
|
||||
if /select(_tag)?$/.match(type.to_s)
|
||||
if !label
|
||||
select_prompt = placeholder || (form ? 'Select a ' + (_ ('form.select_' + name.to_s)) : 'form.Select_one')
|
||||
label_html = ''
|
||||
show_label = false
|
||||
end
|
||||
placeholder = nil
|
||||
label_after = false
|
||||
if param
|
||||
if param.is_a?(Array)
|
||||
param = options_for_select(param, value)
|
||||
elsif param.is_a?(Hash)
|
||||
param = options_from_collection_for_select(param, :first, :last, value)
|
||||
end
|
||||
end
|
||||
value_attribute = false
|
||||
elsif type.to_s == 'image_field' || type.to_s == 'user_select_field' || type.to_s == 'organization_select_field'
|
||||
placeholder = nil
|
||||
label_html = ''
|
||||
show_label = false
|
||||
else
|
||||
if /^password/.match(type.to_s)
|
||||
placeholder = nil
|
||||
elsif !placeholder
|
||||
placeholder = (_ 'form.Enter_your_' + name.to_s)
|
||||
end
|
||||
end
|
||||
|
||||
if show_label
|
||||
label_html = eval("(" + (form ? 'form.label' : 'label_tag') + " name, '<span>#{CGI.escapeHTML(_ (label || name.to_s))}</span>'.html_safe)")
|
||||
end
|
||||
|
||||
if label === false || !show_label
|
||||
label_html = ''
|
||||
end
|
||||
|
||||
if /text_area(_tag)?$/.match(type.to_s)
|
||||
root = nil
|
||||
end
|
||||
|
||||
html_options = nil
|
||||
if html
|
||||
html_options = ''
|
||||
html.each do |key, v|
|
||||
html_options += ', ' + key.to_s + ": html[:" + key.to_s + "]"
|
||||
end
|
||||
end
|
||||
|
||||
if classes
|
||||
if classes.is_a?(String)
|
||||
classes = [classes]
|
||||
end
|
||||
else
|
||||
classes = []
|
||||
end
|
||||
|
||||
if type == :image_field
|
||||
form_html = form.label name do
|
||||
('<div>' + image_tag(param || 'http://placehold.it/300x300&text=Click%20to%20upload%20an%20Image') + (form.file_field name) + (form.hidden_field (name.to_s + '_cache')) + '</div><span><span>' + name.to_s + '</span></span>').html_safe
|
||||
end
|
||||
elsif type == :user_select_field
|
||||
form_html = form.hidden_field(:id, { class: 'id' }).html_safe
|
||||
form_html += form.check_box(:_destroy).html_safe
|
||||
form_html += form.label(:_destroy, '×').html_safe
|
||||
form_html += form.hidden_field(:user_id, { class: 'user-id'} ).html_safe
|
||||
if param && param.id
|
||||
form_html += image_tag(param.avatar.url :thumb).html_safe + ('<div class="username">' + param.username + '</div>').html_safe
|
||||
if attrs && attrs.length > 0 && attrs[0].is_a?(UserOrganizationRelationship)
|
||||
form_html += form.select(:relationship, options_for_select(UserOrganizationRelationship::AllRelationships, attrs[0].relationship), {}, {class: 'small'}).html_safe
|
||||
attrs_used += 1
|
||||
end
|
||||
else
|
||||
classes << 'new'
|
||||
if attrs && attrs.length > 0 && attrs[0].is_a?(UserOrganizationRelationship)
|
||||
form_html += ('<a href="#" class="select-user" data-url="' + url_for(attrs[0].organization) + '">' + image_tag('http://placehold.it/120x120&text=%252B').html_safe + '</a><div class="username"></div>').html_safe
|
||||
form_html += form.select(:relationship, options_for_select(UserOrganizationRelationship::AllRelationships, UserOrganizationRelationship::DefaultRelationship), {}, {class: 'small'}).html_safe
|
||||
attrs_used += 1
|
||||
end
|
||||
end
|
||||
elsif type == :organization_select_field
|
||||
form_html = form.hidden_field(:id, { class: 'id' }).html_safe
|
||||
form_html += form.check_box(:_destroy).html_safe
|
||||
form_html += form.label(:_destroy, '×').html_safe
|
||||
form_html += form.hidden_field(:organization_id, { class: 'organzation-id'} ).html_safe
|
||||
if param && param.id
|
||||
form_html += image_tag(param.avatar.url :thumb).html_safe + ('<div class="organizationname">' + param.name + '</div>').html_safe
|
||||
else
|
||||
classes << 'new'
|
||||
form_html += ('<a href="#" class="select-organization" data-url="' + url_for(param) + '">' + image_tag('http://placehold.it/120x120&text=%252B').html_safe + '</a><div class="organizationname"></div>').html_safe
|
||||
end
|
||||
else
|
||||
ph = ''
|
||||
va = ''
|
||||
if value_attribute
|
||||
if /^(check_box|radio_button)/.match(type.to_s)
|
||||
if checked === nil
|
||||
checked = value == "on" || value.to_s == "1"
|
||||
end
|
||||
if /^(radio_button)/.match(type.to_s)
|
||||
va = ', "' + value + '", checked'
|
||||
else
|
||||
va = ', "1", checked'
|
||||
end
|
||||
else
|
||||
va = ', value'
|
||||
end
|
||||
end
|
||||
if placeholder
|
||||
if form
|
||||
ph = ", :placeholder => '#{placeholder}'"
|
||||
else
|
||||
ph = ", placeholder: '#{placeholder}'"
|
||||
end
|
||||
end
|
||||
form_html = (form ? "form.#{type} :#{name}" : "#{type} :#{name}") + va + ph + (param ? ', param' : '')
|
||||
attrs.each_index { |i| form_html += (i >= attrs_used ? ', attrs[' + i.to_s + ']' : '') }
|
||||
if select_prompt
|
||||
if form
|
||||
form_html += ', {prompt: select_prompt}'
|
||||
else
|
||||
form_html += ', prompt: select_prompt'
|
||||
end
|
||||
end
|
||||
form_html += (html_options || '')
|
||||
if required
|
||||
form_html += ', :required => true'
|
||||
end
|
||||
form_html = eval(form_html)
|
||||
if root
|
||||
form_html = "<#{root}>" + form_html + "</#{root}>"
|
||||
end
|
||||
end
|
||||
|
||||
if help
|
||||
form_html = ('<p>' + (_ (lang_key + '.help'), :w, 20) + '</p>').html_safe + form_html.html_safe
|
||||
end
|
||||
|
||||
return ("<div class=\"field #{type.to_s.gsub('_', '-').gsub(/\-tag$/, '')} field-#{name.to_s.gsub('_', '-')}#{classes.length > 0 ? ' ' + classes.join(' ') : ''}\">" + (label_after ? '' : label_html) + form_html + (label_after ? label_html : '') + "</div>").html_safe
|
||||
end
|
||||
|
||||
def actions(actions = [])
|
||||
if !actions.is_a?(Array)
|
||||
actions = [actions]
|
||||
end
|
||||
|
||||
html = '<div class="actions">'
|
||||
actions.each { |action|
|
||||
if action == :facebook_sign_in
|
||||
html += '<a href="' + url_for(auth_at_provider_path(:provider => :facebook)) + '" class="facebook-sign-in button">' + (_ action.to_s) + '</a>'
|
||||
else
|
||||
html += '<button id="' + action.to_s + '" name="' + action.to_s + '" type="submit">' + (_ action.to_s) + '</button>'
|
||||
end
|
||||
}
|
||||
html += '</div>'
|
||||
html.html_safe
|
||||
end
|
||||
|
||||
def sortable(objects, id = 'id', url: nil, &block)
|
||||
result = '<ul class="sortable sortable-' + objects[0].class.name.underscore.gsub('_', '-') + (url ? ('" data-url="' + url) : '') + '" data-id="' + id + '">'
|
||||
objects.each_index do |i|
|
||||
@@ -518,13 +332,24 @@ module ApplicationHelper
|
||||
if f.repeats?
|
||||
is_array = f.is_array?
|
||||
opts.each do |key, value|
|
||||
html += field((id + (is_array ? ('_' + key) : '')).to_sym, options['selection_type'] + '_tag', label: value, value: is_array ? (val ? val[key] : nil) : key, checked: is_array ? (val[key] == "1" || val[key] == "on") : val.to_s == key.to_s, required: f.required)
|
||||
n = (id + (is_array ? ('_' + key) : '')).to_sym
|
||||
v = is_array ? (val ? val[key] : nil) : key
|
||||
o = {:label => value}
|
||||
if f.required
|
||||
options[:required] = true
|
||||
end
|
||||
html += _form_field(options['selection_type'], n, v, o)
|
||||
end
|
||||
else
|
||||
html += field(id.to_sym, options['selection_type'] + '_tag', opts, value: val, required: f.required)
|
||||
html += _form_field(options['selection_type'], id.to_sym, options_for_select(opts.invert, val), {})
|
||||
end
|
||||
else
|
||||
html += field(id.to_sym, options['input_type'] + '_tag', label: false, placeholder: f.help, value: response ? ActiveSupport::JSON.decode(response.data) : nil, required: f.required)
|
||||
#html += field(id.to_sym, options['input_type'] + '_tag', label: false, placeholder: f.help, value: response ? ActiveSupport::JSON.decode(response.data) : nil, required: f.required)
|
||||
opts = {label: false, placeholder: f.help && f.help.length > 0 ? f.help : false}
|
||||
if f.required
|
||||
opts[:required] = true
|
||||
end
|
||||
html += _form_field(options['input_type'], id.to_sym, response ? ActiveSupport::JSON.decode(response.data) : nil, opts)
|
||||
end
|
||||
|
||||
html.html_safe
|
||||
@@ -542,4 +367,12 @@ module ApplicationHelper
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
def _form_field(type, name, value, options)
|
||||
if type == 'check_box'
|
||||
self.send(type + '_tag', name, "1", value, options)
|
||||
else
|
||||
self.send(type + '_tag', name, value, options)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -0,0 +1,394 @@
|
||||
|
||||
module BikeBikeFormHelper
|
||||
include ActionView::Helpers::FormTagHelper
|
||||
|
||||
TEMPLATE_DIR = 'layouts/fields'
|
||||
|
||||
def check_box_tag(name, value = "1", checked = false, options = {})
|
||||
render_field(name, options = get_options(name, options), super(name, value, checked, options), value)
|
||||
end
|
||||
|
||||
def color_field_tag(name, value = nil, options = {})
|
||||
render_field(name, options = get_options(name, options), super(name, value, options), value)
|
||||
end
|
||||
|
||||
def date_field_tag(name, value = nil, options = {})
|
||||
render_field(name, options = get_options(name, options), super(name, value, options), value)
|
||||
end
|
||||
|
||||
def datetime_field_tag(name, value = nil, options = {})
|
||||
render_field(name, options = get_options(name, options), super(name, value, options), value)
|
||||
end
|
||||
|
||||
def datetime_local_field_tag(name, value = nil, options = {})
|
||||
render_field(name, options = get_options(name, options), super(name, value, options), value)
|
||||
end
|
||||
|
||||
def email_field_tag(name, value = nil, options = {})
|
||||
render_field(name, options = get_options(name, options), super(name, value, options), value)
|
||||
end
|
||||
|
||||
def file_field_tag(name, options = {})
|
||||
render_field(name, options = get_options(name, options), super(name, options))
|
||||
end
|
||||
|
||||
def hidden_field_tag(name, value = nil, options = {})
|
||||
super(name, value, options)
|
||||
end
|
||||
|
||||
def month_field_tag(name, value = nil, options = {})
|
||||
render_field(name, options = get_options(name, options), super(name, value, options), value)
|
||||
end
|
||||
|
||||
def number_field_tag(name, value = nil, options = {})
|
||||
render_field(name, options = get_options(name, options), super(name, value, options), value)
|
||||
end
|
||||
|
||||
def password_field_tag(name = "password", value = nil, options = {})
|
||||
render_field(name, options = get_options(name, options), super(name, value, options), value)
|
||||
end
|
||||
|
||||
def phone_field_tag(name, value = nil, options = {})
|
||||
render_field(name, options = get_options(name, options), super(name, value, options), value)
|
||||
end
|
||||
|
||||
def radio_button_tag(name, value, checked = false, options = {})
|
||||
render_field(name, options = get_options(name, options), super(name, value, checked, options), value)
|
||||
end
|
||||
|
||||
def range_field_tag(name, value = nil, options = {})
|
||||
render_field(name, options = get_options(name, options), super(name, value, options), value)
|
||||
end
|
||||
|
||||
def search_field_tag(name, value = nil, options = {})
|
||||
render_field(name, options = get_options(name, options), super(name, value, options), value)
|
||||
end
|
||||
|
||||
def select_tag(name, option_tags = nil, options = {})
|
||||
render_field(name, options = get_options(name, options), super(name, option_tags, options))
|
||||
end
|
||||
|
||||
def telephone_field_tag(name, value = nil, options = {})
|
||||
render_field(name, options = get_options(name, options), super(name, value, options), value)
|
||||
end
|
||||
|
||||
def text_area_tag(name, content = nil, options = {})
|
||||
render_field(name, options = get_options(name, options), super(name, content, options), content)
|
||||
end
|
||||
|
||||
def text_field_tag(name, value = nil, options = {})
|
||||
render_field(name, options = get_options(name, options), super(name, value, options), value)
|
||||
end
|
||||
|
||||
def time_field_tag(name, value = nil, options = {})
|
||||
render_field(name, options = get_options(name, options), super(name, value, options), value)
|
||||
end
|
||||
|
||||
def url_field_tag(name, value = nil, options = {})
|
||||
render_field(name, options = get_options(name, options), super(name, value, options), value)
|
||||
end
|
||||
|
||||
def week_field_tag(name, value = nil, options = {})
|
||||
render_field(name, options = get_options(name, options), super(name, value, options), value)
|
||||
end
|
||||
|
||||
def country_select_tag(name, value, options={})
|
||||
render_field(name, options = get_options(name, options), super(name, value, options), value)
|
||||
end
|
||||
|
||||
def subregion_select_tag(name, value, parent_region_or_code, options = {}, html_options = {})
|
||||
render_field(name, options = get_options(name, options), super(name, value, parent_region_or_code, options), value)
|
||||
end
|
||||
|
||||
#def button_tag
|
||||
#def field_set_tag
|
||||
#def form_tag
|
||||
#def image_submit_tag
|
||||
#def label_tag
|
||||
#def submit_tag
|
||||
#def utf8_enforcer_tag
|
||||
|
||||
# FormHelper methods
|
||||
|
||||
def check_box(object_name, method, options = {}, checked_value = "1", unchecked_value = "0")
|
||||
render_field(method, options = get_options(method, options), super(object_name, method, options, checked_value, unchecked_value))
|
||||
end
|
||||
|
||||
def color_field(object_name, method, options = {})
|
||||
render_field(method, options = get_options(method, options), super(object_name, method, options))
|
||||
end
|
||||
|
||||
def date_field(object_name, method, options = {})
|
||||
render_field(method, options = get_options(method, options), super(object_name, method, options))
|
||||
end
|
||||
|
||||
def datetime_field(object_name, method, options = {})
|
||||
render_field(method, options = get_options(method, options), super(object_name, method, options))
|
||||
end
|
||||
|
||||
def datetime_local_field(object_name, method, options = {})
|
||||
render_field(method, options = get_options(method, options), super(object_name, method, options))
|
||||
end
|
||||
|
||||
def email_field(object_name, method, options = {})
|
||||
render_field(method, options = get_options(method, options), super(object_name, method, options))
|
||||
end
|
||||
|
||||
def file_field(object_name, method, options = {})
|
||||
render_field(method, options = get_options(method, options), super(object_name, method, options))
|
||||
end
|
||||
|
||||
def hidden_field(object_name, method, options = {})
|
||||
super(object_name, method, options)
|
||||
end
|
||||
|
||||
def month_field(object_name, method, options = {})
|
||||
render_field(method, options = get_options(method, options), super(object_name, method, options), get_value(method, options))
|
||||
end
|
||||
|
||||
def number_field(object_name, method, options = {})
|
||||
render_field(method, options = get_options(method, options), super(object_name, method, options), get_value(method, options))
|
||||
end
|
||||
|
||||
def password_field(object_name, method, options = {})
|
||||
render_field(method, options = get_options(method, options), super(object_name, method, options), get_value(method, options))
|
||||
end
|
||||
|
||||
def phone_field(object_name, method, options = {})
|
||||
render_field(method, options = get_options(method, options), super(object_name, method, options), get_value(method, options))
|
||||
end
|
||||
|
||||
def radio_button(object_name, method, tag_value, options = {})
|
||||
render_field(method, options = get_options(method, options), super(object_name, method, tag_value, options), get_value(method, options))
|
||||
end
|
||||
|
||||
def range_field(object_name, method, options = {})
|
||||
render_field(method, options = get_options(method, options), super(object_name, method, options), get_value(method, options))
|
||||
end
|
||||
|
||||
def search_field(object_name, method, options = {})
|
||||
render_field(method, options = get_options(method, options), super(object_name, method, options), get_value(method, options))
|
||||
end
|
||||
|
||||
def telephone_field(object_name, method, options = {})
|
||||
render_field(method, options = get_options(method, options), super(object_name, method, options), get_value(method, options))
|
||||
end
|
||||
|
||||
def text_area(object_name, method, options = {})
|
||||
render_field(method, options = get_options(method, options), super(object_name, method, options), get_value(method, options))
|
||||
end
|
||||
|
||||
def text_field(object_name, method, options = {})
|
||||
render_field(method, options = get_options(method, options), super(object_name, method, options), get_value(method, options))
|
||||
end
|
||||
|
||||
def time_field(object_name, method, options = {})
|
||||
render_field(method, options = get_options(method, options), super(object_name, method, options), get_value(method, options))
|
||||
end
|
||||
|
||||
def url_field(object_name, method, options = {})
|
||||
render_field(method, options = get_options(method, options), super(object_name, method, options), get_value(method, options))
|
||||
end
|
||||
|
||||
def week_field(object_name, method, options = {})
|
||||
render_field(method, options = get_options(method, options), super(object_name, method, options), get_value(method, options))
|
||||
end
|
||||
|
||||
#def fields_for
|
||||
def form_for(*args, &block)
|
||||
@record = args.first
|
||||
|
||||
template = 'errors_' + @record.class.name.underscore
|
||||
template = 'errors_default' unless lookup_context.exists?(template, [TEMPLATE_DIR], true)
|
||||
|
||||
( render (TEMPLATE_DIR + '/' + template) ) + super(args, &block)
|
||||
end
|
||||
#def label
|
||||
|
||||
|
||||
def collection_check_boxes(object, method, collection, value_method, text_method, options = {}, html_options = {}, &block)
|
||||
render_field(method, options = get_options(method, options), super(object, method, collection, value_method, text_method, options, html_options, &block), get_value(method, options))
|
||||
end
|
||||
|
||||
def collection_radio_buttons(object, method, collection, value_method, text_method, options = {}, html_options = {}, &block)
|
||||
render_field(method, options = get_options(method, options), super(object, method, collection, value_method, text_method, options, html_options, &block), get_value(method, options))
|
||||
end
|
||||
|
||||
def collection_select(object, method, collection, value_method, text_method, options = {}, html_options = {})
|
||||
render_field(method, options = get_options(method, options), super(object, method, collection, value_method, text_method, options, html_options), get_value(method, options))
|
||||
end
|
||||
|
||||
def grouped_collection_select(object, method, collection, group_method, group_label_method, option_key_method, option_value_method, options = {}, html_options = {})
|
||||
render_field(method, options = get_options(method, options), super(object, method, collection, group_method, group_label_method, option_key_method, option_value_method, options, html_options), get_value(method, options))
|
||||
end
|
||||
|
||||
def select(object, method, choices = nil, options = {}, html_options = {}, &block)
|
||||
render_field(method, options = get_options(method, options), super(object, method, choices, options, html_options, &block), get_value(method, options))
|
||||
end
|
||||
|
||||
def time_zone_select(object, method, priority_zones = nil, options = {}, html_options = {})
|
||||
render_field(method, options = get_options(method, options), super(object, method, priority_zones, options, html_options), get_value(method, options))
|
||||
end
|
||||
|
||||
def country_select(object, method, priorities_or_options = {}, options_or_html_options = {}, html_options = {})
|
||||
if priorities_or_options.is_a? Array
|
||||
options = options_or_html_options = get_options(method, priorities_or_options)
|
||||
else
|
||||
options = priorities_or_options = get_options(method, priorities_or_options)
|
||||
end
|
||||
render_field(method, options, super(object, method, priorities_or_options, options_or_html_options, html_options), get_value(method, options))
|
||||
end
|
||||
|
||||
def subregion_select(object, method, parent_region_or_code, options = {}, html_options = {})
|
||||
render_field(method, options = get_options(method, options), super(object, method, parent_region_or_code, options, html_options), get_value(method, options))
|
||||
end
|
||||
|
||||
# Custom fields
|
||||
|
||||
def image_field_tag(name, value = nil, options = {})
|
||||
render_field(name, options = get_options(name, options), BikeBikeFormHelper.image_field_tag(name, value, options), value)
|
||||
end
|
||||
|
||||
def organization_select_field_tag(name, value = nil, options = {})
|
||||
render_field(name, options = get_options(name, options), BikeBikeFormHelper.organization_select_field_tag(name, value, options), value)
|
||||
end
|
||||
|
||||
def user_select_field_tag(name, value = nil, options = {})
|
||||
render_field(name, options = get_options(name, options), BikeBikeFormHelper.user_select_field_tag(name, value, options), value)
|
||||
end
|
||||
|
||||
#def grouped_options_for_select
|
||||
#def option_groups_from_collection_for_select
|
||||
#def options_for_select
|
||||
#def options_from_collection_for_select
|
||||
#def time_zone_options_for_select
|
||||
|
||||
def form_actions(actions = [])
|
||||
BikeBikeFormHelper.form_actions(actions)
|
||||
end
|
||||
|
||||
class << self
|
||||
|
||||
def form_actions(actions = [])
|
||||
render(:actions, {:actions => actions.is_a?(Array) ? actions : [actions]})
|
||||
end
|
||||
|
||||
def image_field_tag(name, value, options, form = nil)
|
||||
render(:field_image_field, {:name => name, :value => value, :options => options, :form => form})
|
||||
end
|
||||
|
||||
def organization_select_field_tag(name, value, options, form = nil)
|
||||
render(:field_organization_select_field, {:name => name, :value => value, :options => options, :form => form})
|
||||
end
|
||||
|
||||
def user_select_field_tag(name, value, options, form = nil)
|
||||
render(:field_user_select_field, {:name => name, :value => value, :options => options, :form => form})
|
||||
end
|
||||
|
||||
def get_options(name, options, type)
|
||||
if options[:placeholder] === false
|
||||
options.delete(:placeholder)
|
||||
elsif (['email_field', 'number_field', 'phone_field', 'search_field', 'telephone_field', 'text_area', 'text_field', 'url_field'].include? type)
|
||||
options[:placeholder] ||= I18n.translate('form.placeholder.Enter_your_' + name.to_s)
|
||||
end
|
||||
return options
|
||||
end
|
||||
|
||||
def render_field(type, name, options, html, value = nil)
|
||||
if (options.has_key?(:no_wrapper) && options[:no_wrapper]) || options['type'] == 'hidden'
|
||||
return html
|
||||
end
|
||||
|
||||
params = Hash.new
|
||||
params[:name] = name.to_sym
|
||||
params[:options] = options
|
||||
params[:html] = html
|
||||
params[:type] = type
|
||||
params[:value] = value
|
||||
|
||||
template = template_exists?(type) ? type : 'default'
|
||||
params[:label_template] = options[:label] === false ? nil : get_label_template(type)
|
||||
params[:label_position] = options[:label] === false ? :none : label_position(type)
|
||||
|
||||
render(template, params)
|
||||
end
|
||||
|
||||
def get_label_template(type)
|
||||
if /select(_field)?$/.match(type.to_s)
|
||||
return nil
|
||||
end
|
||||
template_exists?('label_' + type) ? type : 'default'
|
||||
end
|
||||
|
||||
def label_position(type)
|
||||
# one of: :before, :after, :inside, or :none
|
||||
case type
|
||||
when 'image_field'
|
||||
return :inside
|
||||
when 'organization_select_field'
|
||||
return :none
|
||||
end
|
||||
return :before
|
||||
end
|
||||
|
||||
private
|
||||
def render (template, params)
|
||||
view = ActionView::Base.new(ActionController::Base.view_paths, params)
|
||||
view.extend ApplicationHelper
|
||||
view.render (TEMPLATE_DIR + '/' + template.to_s)
|
||||
end
|
||||
|
||||
def template_exists? (template)
|
||||
view = ActionView::Base.new(ActionController::Base.view_paths, {})
|
||||
view.extend ApplicationHelper
|
||||
view.lookup_context.exists?(template, [TEMPLATE_DIR], true)
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
def get_type()
|
||||
caller[1][/`.*'/][1..-2].gsub(/^(.*?)(_tag)?$/, '\1')
|
||||
end
|
||||
|
||||
def get_value(method, options)
|
||||
options && options[:object] ? options[:object][method] : nil
|
||||
end
|
||||
|
||||
def get_options(name, options)
|
||||
options[:_controller] = params[:controller]
|
||||
BikeBikeFormHelper.get_options(name, options, get_type())
|
||||
end
|
||||
|
||||
def render_field(name, options, html, value = nil)
|
||||
BikeBikeFormHelper.render_field(get_type(), name, options, html, value)
|
||||
end
|
||||
|
||||
class BikeBikeFormBuilder < ActionView::Helpers::FormBuilder
|
||||
ActionView::Base.default_form_builder = BikeBikeFormHelper::BikeBikeFormBuilder
|
||||
|
||||
def image_field(method, value, options = {})
|
||||
custom_field(method, value, options, 'image_field')
|
||||
end
|
||||
|
||||
def organization_select_field(method, value, options = {})
|
||||
custom_field(method, value, options, 'organization_select_field')
|
||||
end
|
||||
|
||||
def user_select_field(method, value, options = {})
|
||||
custom_field(method, value, options, 'user_select_field')
|
||||
end
|
||||
|
||||
def actions(actions = [])
|
||||
BikeBikeFormHelper.form_actions(actions)
|
||||
end
|
||||
|
||||
private
|
||||
def custom_field(method, value, options, type)
|
||||
options[:_controller] = params[:controller]
|
||||
options[:_record] = object
|
||||
options = BikeBikeFormHelper.get_options(method, options, type)
|
||||
html = BikeBikeFormHelper.send(type + '_tag', method, value, options, self)
|
||||
BikeBikeFormHelper.render_field(type, method, options, html, value)
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user