Sha256: 477b03bc86daaecf6e10c2fb48ed7a7fb4e3a945d4c5e7b8e8f2402ae4a965cc
Contents?: true
Size: 1.84 KB
Versions: 2
Compression:
Stored size: 1.84 KB
Contents
class MultiValueInput < SimpleForm::Inputs::CollectionInput def input(wrapper_options) @rendered_first_element = false input_html_classes.unshift("string") input_html_options[:name] ||= "#{object_name}[#{attribute_name}][]" markup = <<-HTML <ul class="listing"> HTML collection.each_with_index do |value, i| unless value.to_s.strip.blank? markup << <<-HTML <li class="field-wrapper"> #{build_field(value)} </li> HTML end end markup << <<-HTML <li class="field-wrapper"> #{build_field('')} </li> </ul> HTML end private def build_field(value) select_opts = options[:collection] options = build_options(value) @rendered_first_element = true type = options.delete(:type) if type == 'textarea'.freeze @builder.text_area(attribute_name, options) elsif type == 'select'.freeze selected = value.blank? ? :blank : value opts = options.merge(selected: selected) @builder.collection_select(attribute_name, select_opts, :last, :first, opts, opts) else @builder.text_field(attribute_name, options) end end def build_options(value) options = input_html_options.dup options[:value] = value if @rendered_first_element options[:id] = nil options[:required] = nil else options[:id] ||= input_dom_id end options[:class] ||= [] options[:class] += ["#{ input_dom_id } form-control multi-text-field"] options[:'aria-labelledby'] = label_id return options end def label_id input_dom_id + '_label' end def input_dom_id input_html_options[:id] || "#{object_name}_#{attribute_name}" end def collection @collection ||= Array(object.send(attribute_name)) end def multiple? true end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
sufia-5.0.0 | app/inputs/multi_value_input.rb |
sufia-5.0.0.rc1 | app/inputs/multi_value_input.rb |