Sha256: b465f775ebd0f6cc1a68d0f34ea5e4aab5383ffb704db113476287ccd51bae1f

Contents?: true

Size: 1.92 KB

Versions: 2

Compression:

Stored size: 1.92 KB

Contents

module GOVUKDesignSystemFormBuilder
  module Elements
    class Label < GOVUKDesignSystemFormBuilder::Base
      def initialize(builder, object_name, attribute_name, text: nil, value: nil, size: nil, hidden: false, radio: false, checkbox: false, tag: nil)
        super(builder, object_name, attribute_name)

        @text           = label_text(text, hidden)
        @value          = value # used by field_id
        @size_class     = label_size_class(size)
        @radio_class    = radio_class(radio)
        @checkbox_class = checkbox_class(checkbox)
        @tag            = tag
      end

      def html
        return nil if @text.blank?

        if @tag.present?
          @builder.content_tag(@tag, class: 'govuk-label-wrapper') { build_label }
        else
          build_label
        end
      end

    private

      def build_label
        @builder.label(
          @attribute_name,
          value: @value,
          for: field_id(link_errors: true),
          class: %w(govuk-label).push(@size_class, @weight_class, @radio_class, @checkbox_class).compact
        ) do
          @text
        end
      end

      def label_text(option_text, hidden)
        text = [option_text, @value, @attribute_name.capitalize].compact.first

        if hidden
          @builder.tag.span(text, class: %w(govuk-visually-hidden))
        else
          @builder.raw(text)
        end
      end

      def radio_class(radio)
        radio ? 'govuk-radios__label' : nil
      end

      def checkbox_class(checkbox)
        checkbox ? 'govuk-checkboxes__label' : nil
      end

      def label_size_class(size)
        case size
        when 'xl'      then "govuk-label--xl"
        when 'l'       then "govuk-label--l"
        when 'm'       then "govuk-label--m"
        when 's'       then "govuk-label--s"
        when nil       then nil
        else
          fail "invalid size '#{size}', must be xl, l, m, s or nil"
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
govuk_design_system_formbuilder-0.9.4 lib/govuk_design_system_formbuilder/elements/label.rb
govuk_design_system_formbuilder-0.9.3 lib/govuk_design_system_formbuilder/elements/label.rb