module Formulary::HtmlForm::Labels

Public Instance Methods

label_for_field(field_name) click to toggle source
# File lib/formulary/html_form/labels.rb, line 2
def label_for_field(field_name)
  fields_for_name = document.css("*[name='#{field_name}']")

  if fields_for_name.empty?
    raise Formulary::FieldNotFoundError.new(
      "Cannot find label, field #{field_name} does not exist"
    )
  end

  if fields_for_name.length > 1
    labels_for_fieldset(fields_for_name)
  else
    label_for_single_field(fields_for_name.first)
  end
end

Protected Instance Methods

label_for_single_field(field) click to toggle source
# File lib/formulary/html_form/labels.rb, line 30
def label_for_single_field(field)
  input_id = field["id"]
  label = document.css("label[for='#{input_id}']")

  if label.empty?
    parent_label = field.ancestors("label").first
    if parent_label.nil?
      nil
    else
      parent_label.text.strip
    end
  else
    label.text
  end
end
labels_for_fieldset(fields_for_name) click to toggle source
# File lib/formulary/html_form/labels.rb, line 20
def labels_for_fieldset(fields_for_name)
  labels = fields_for_name.each_with_object({}) do |n, h|
    h[n["value"]] = n.ancestors("label").first.text
  end

  fieldset_legend = fields_for_name.first.ancestors("fieldset").css("legend")
  labels["fieldset"] = fieldset_legend.text
  labels
end