Explicit
labeler that creates a separate label tag that references the given tag’s id using a for
attribute. Requires that all tags with labels have id
fields.
Registered as :explicit.
Public Instance methods
call(tag, input)
Return an array with a label tag as the first entry and tag
as a second entry. If the input
has a :label_for option, use that, otherwise use the input’s :id option. If neither the :id or :label_for option is used, the label created will not be associated with an input.
[show source]
# File lib/forme/transformers/labeler.rb 52 def call(tag, input) 53 unless id = input.opts[:id] 54 if key = input.opts[:key] 55 namespaces = input.form_opts[:namespace] 56 id = "#{namespaces.join('_')}#{'_' unless namespaces.empty?}#{key}" 57 if key_id = input.opts[:key_id] 58 id += "_#{key_id.to_s}" 59 end 60 end 61 end 62 63 label_attr = input.opts[:label_attr] 64 label_attr = label_attr ? label_attr.dup : {} 65 label_attr[:for] ||= input.opts.fetch(:label_for, id) 66 lpos = input.opts[:label_position] || ([:radio, :checkbox].include?(input.type) ? :after : :before) 67 68 Forme.attr_classes(label_attr, "label-#{lpos}") 69 label = input.tag(:label, label_attr, [input.opts[:label]]) 70 71 t = if lpos == :before 72 [label, tag] 73 else 74 [tag, label] 75 end 76 77 t 78 end