Sha256: b356b2dc4d1283e7a300f2e293f47754b269a2f5ce57a3fa853d51712f7f6a2c

Contents?: true

Size: 1.84 KB

Versions: 12

Compression:

Stored size: 1.84 KB

Contents

module GOVUKDesignSystemFormBuilder
  module Elements
    class Legend < Base
      include Traits::Caption
      include Traits::Localisation

      def initialize(builder, object_name, attribute_name, text: nil, size: config.default_legend_size, hidden: false, tag: config.default_legend_tag, caption: nil, content: nil, **kwargs)
        super(builder, object_name, attribute_name)

        if content
          @content = capture { content.call }
        else
          @text            = retrieve_text(text)
          @tag             = tag
          @size_class      = size_class(size)
          @tag             = tag
          @caption         = caption
          @hidden          = hidden
          @html_attributes = kwargs
        end
      end

      def html
        @content || legend
      end

    private

      def active?
        [@text, @content].any?(&:present?)
      end

      def legend
        return unless active?

        tag.legend(legend_content, class: classes, **@html_attributes)
      end

      def legend_content
        caption_and_text = safe_join([caption_element, @text])

        return caption_and_text if @tag.blank?

        content_tag(@tag, class: heading_classes) { caption_and_text }
      end

      def retrieve_text(supplied_text)
        [supplied_text, localised_text(:legend), @attribute_name&.capitalize].compact.first
      end

      def classes
        [%(#{brand}-fieldset__legend), @size_class, visually_hidden_class].compact
      end

      def size_class(size)
        if size.in?(%w(xl l m s))
          %(#{brand}-fieldset__legend--#{size})
        else
          fail "invalid size '#{size}', must be xl, l, m or s"
        end
      end

      def visually_hidden_class
        %(#{brand}-visually-hidden) if @hidden
      end

      def heading_classes
        %(#{brand}-fieldset__heading)
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
govuk_design_system_formbuilder-2.7.2 lib/govuk_design_system_formbuilder/elements/legend.rb
govuk_design_system_formbuilder-2.7.1 lib/govuk_design_system_formbuilder/elements/legend.rb
govuk_design_system_formbuilder-2.7.0 lib/govuk_design_system_formbuilder/elements/legend.rb
govuk_design_system_formbuilder-2.6.0 lib/govuk_design_system_formbuilder/elements/legend.rb
govuk_design_system_formbuilder-2.6.0b1 lib/govuk_design_system_formbuilder/elements/legend.rb
govuk_design_system_formbuilder-2.5.3 lib/govuk_design_system_formbuilder/elements/legend.rb
govuk_design_system_formbuilder-2.5.2 lib/govuk_design_system_formbuilder/elements/legend.rb
govuk_design_system_formbuilder-2.5.1 lib/govuk_design_system_formbuilder/elements/legend.rb
govuk_design_system_formbuilder-2.5.1b1 lib/govuk_design_system_formbuilder/elements/legend.rb
govuk_design_system_formbuilder-2.5.0 lib/govuk_design_system_formbuilder/elements/legend.rb
govuk_design_system_formbuilder-2.4.0 lib/govuk_design_system_formbuilder/elements/legend.rb
govuk_design_system_formbuilder-2.3.0 lib/govuk_design_system_formbuilder/elements/legend.rb