Sha256: 3ff58a758ec755ac82feccdf7dddabec77a13b1a6b9229f5e2b76e00a87fe7be

Contents?: true

Size: 1.98 KB

Versions: 15

Compression:

Stored size: 1.98 KB

Contents

module GOVUKDesignSystemFormBuilder
  module Elements
    class ErrorSummary < Base
      include Traits::Error

      def initialize(builder, object_name, title)
        @builder = builder
        @object_name = object_name
        @title = title
      end

      def html
        return nil unless object_has_errors?

        content_tag('div', class: summary_class, **error_summary_attributes) do
          safe_join(
            [
              tag.h2(@title, id: error_summary_title_id, class: summary_class('title')),
              content_tag('div', class: summary_class('body')) do
                content_tag('ul', class: ['govuk-list', summary_class('list')]) do
                  safe_join(
                    @builder.object.errors.messages.map do |attribute, messages|
                      error_list_item(attribute, messages.first)
                    end
                  )
                end
              end
            ]
          )
        end
      end

    private

      def error_list_item(attribute, message)
        content_tag('li') do
          link_to(
            message,
            same_page_link(field_id(attribute)),
            data: {
              turbolinks: false
            }
          )
        end
      end

      def same_page_link(target)
        '#'.concat(target)
      end

      def summary_class(part = nil)
        if part
          'govuk-error-summary'.concat('__', part)
        else
          'govuk-error-summary'
        end
      end

      def field_id(attribute)
        build_id('field-error', attribute_name: attribute)
      end

      def error_summary_title_id
        'error-summary-title'
      end

      def object_has_errors?
        @builder.object.errors.any?
      end

      def error_summary_attributes
        {
          tabindex: -1,
          role: 'alert',
          data: {
            module: 'govuk-error-summary'
          },
          aria: {
            labelledby: error_summary_title_id
          }
        }
      end
    end
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
govuk_design_system_formbuilder-1.1.11 lib/govuk_design_system_formbuilder/elements/error_summary.rb
govuk_design_system_formbuilder-1.1.10 lib/govuk_design_system_formbuilder/elements/error_summary.rb
govuk_design_system_formbuilder-1.1.9 lib/govuk_design_system_formbuilder/elements/error_summary.rb
govuk_design_system_formbuilder-1.1.8 lib/govuk_design_system_formbuilder/elements/error_summary.rb
govuk_design_system_formbuilder-1.1.7 lib/govuk_design_system_formbuilder/elements/error_summary.rb
govuk_design_system_formbuilder-1.1.6 lib/govuk_design_system_formbuilder/elements/error_summary.rb
govuk_design_system_formbuilder-1.1.5 lib/govuk_design_system_formbuilder/elements/error_summary.rb
govuk_design_system_formbuilder-1.1.4 lib/govuk_design_system_formbuilder/elements/error_summary.rb
govuk_design_system_formbuilder-1.1.3 lib/govuk_design_system_formbuilder/elements/error_summary.rb
govuk_design_system_formbuilder-1.1.2 lib/govuk_design_system_formbuilder/elements/error_summary.rb
govuk_design_system_formbuilder-1.1.1 lib/govuk_design_system_formbuilder/elements/error_summary.rb
govuk_design_system_formbuilder-1.1.0 lib/govuk_design_system_formbuilder/elements/error_summary.rb
govuk_design_system_formbuilder-1.1.0.beta.3 lib/govuk_design_system_formbuilder/elements/error_summary.rb
govuk_design_system_formbuilder-1.1.0.beta.2 lib/govuk_design_system_formbuilder/elements/error_summary.rb
govuk_design_system_formbuilder-1.1.0.beta.1 lib/govuk_design_system_formbuilder/elements/error_summary.rb