govuk_design_system_formbuilder 1.2.0b4 → 1.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/govuk_design_system_formbuilder.rb +4 -0
- data/lib/govuk_design_system_formbuilder/base.rb +5 -0
- data/lib/govuk_design_system_formbuilder/builder.rb +6 -4
- data/lib/govuk_design_system_formbuilder/containers/character_count.rb +8 -7
- data/lib/govuk_design_system_formbuilder/containers/check_boxes.rb +8 -1
- data/lib/govuk_design_system_formbuilder/containers/check_boxes_fieldset.rb +18 -10
- data/lib/govuk_design_system_formbuilder/containers/fieldset.rb +23 -13
- data/lib/govuk_design_system_formbuilder/containers/radio_buttons_fieldset.rb +18 -10
- data/lib/govuk_design_system_formbuilder/containers/radios.rb +8 -1
- data/lib/govuk_design_system_formbuilder/containers/supplemental.rb +1 -3
- data/lib/govuk_design_system_formbuilder/elements/caption.rb +2 -2
- data/lib/govuk_design_system_formbuilder/elements/check_boxes/collection.rb +17 -12
- data/lib/govuk_design_system_formbuilder/elements/check_boxes/collection_check_box.rb +17 -15
- data/lib/govuk_design_system_formbuilder/elements/check_boxes/fieldset_check_box.rb +23 -27
- data/lib/govuk_design_system_formbuilder/elements/date.rb +44 -41
- data/lib/govuk_design_system_formbuilder/elements/error_message.rb +8 -7
- data/lib/govuk_design_system_formbuilder/elements/error_summary.rb +23 -26
- data/lib/govuk_design_system_formbuilder/elements/file.rb +18 -20
- data/lib/govuk_design_system_formbuilder/elements/hint.rb +10 -13
- data/lib/govuk_design_system_formbuilder/elements/label.rb +33 -22
- data/lib/govuk_design_system_formbuilder/elements/radios/collection.rb +32 -23
- data/lib/govuk_design_system_formbuilder/elements/radios/collection_radio_button.rb +24 -14
- data/lib/govuk_design_system_formbuilder/elements/radios/fieldset_radio_button.rb +18 -19
- data/lib/govuk_design_system_formbuilder/elements/select.rb +15 -22
- data/lib/govuk_design_system_formbuilder/elements/submit.rb +29 -25
- data/lib/govuk_design_system_formbuilder/elements/text_area.rb +37 -39
- data/lib/govuk_design_system_formbuilder/traits/caption.rb +5 -6
- data/lib/govuk_design_system_formbuilder/traits/input.rb +19 -28
- data/lib/govuk_design_system_formbuilder/traits/label.rb +2 -2
- data/lib/govuk_design_system_formbuilder/version.rb +1 -1
- metadata +17 -17
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 5d0ec456d05c0f92a86c39b688f0ac2a498160f473002f2fb4004567f4b17496
         | 
| 4 | 
            +
              data.tar.gz: 0aa054ef3feb33eaf5b402aaea08ab2942e9b9be6708f04de41c1255e455dc86
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 8a79e3ac6187857d917f7eb253abfbb414b8ed44a3a4488a29f82052ca234daeba9f1926a0df12697544fa266420ebe8eba8ab26840fe8d371b713d82c2df312
         | 
| 7 | 
            +
              data.tar.gz: 1334ddb5eb6a36dfbcd5b8f91b50548ecfac38481682e683aec5071d2f91b7577f3cadd532c8dd8c1b1c5dba34fa837479ef55d5f63669b15756159e5b9fb5aa
         | 
| @@ -14,6 +14,9 @@ module GOVUKDesignSystemFormBuilder | |
| 14 14 | 
             
              # * +:brand+ sets the value used to prefix all classes, used to allow the
         | 
| 15 15 | 
             
              #   builder to be branded for alternative (similar) design systems.
         | 
| 16 16 | 
             
              #
         | 
| 17 | 
            +
              # * +:default_caption_size+ controls the default size of caption text.
         | 
| 18 | 
            +
              #   Can be either +xl+, +l+ or +m+.
         | 
| 19 | 
            +
              #
         | 
| 17 20 | 
             
              # * +:default_legend_size+ controls the default size of legend text.
         | 
| 18 21 | 
             
              #   Can be either +xl+, +l+, +m+ or +s+.
         | 
| 19 22 | 
             
              #
         | 
| @@ -45,6 +48,7 @@ module GOVUKDesignSystemFormBuilder | |
| 45 48 |  | 
| 46 49 | 
             
                default_legend_size: 'm',
         | 
| 47 50 | 
             
                default_legend_tag: 'h1',
         | 
| 51 | 
            +
                default_caption_size: 'm',
         | 
| 48 52 | 
             
                default_submit_button_text: 'Continue',
         | 
| 49 53 | 
             
                default_radio_divider_text: 'or',
         | 
| 50 54 | 
             
                default_error_summary_title: 'There is a problem',
         | 
| @@ -18,6 +18,11 @@ module GOVUKDesignSystemFormBuilder | |
| 18 18 | 
             
                  @block_content  = capture { block.call } if block_given?
         | 
| 19 19 | 
             
                end
         | 
| 20 20 |  | 
| 21 | 
            +
                # objects that implement #to_s can be passed directly into #safe_join
         | 
| 22 | 
            +
                def to_s
         | 
| 23 | 
            +
                  html || ''
         | 
| 24 | 
            +
                end
         | 
| 25 | 
            +
             | 
| 21 26 | 
             
              private
         | 
| 22 27 |  | 
| 23 28 | 
             
                def brand(override = nil)
         | 
| @@ -312,7 +312,10 @@ module GOVUKDesignSystemFormBuilder | |
| 312 312 | 
             
                # @option label size [String] the size of the label font, can be +xl+, +l+, +m+, +s+ or nil
         | 
| 313 313 | 
             
                # @option label tag [Symbol,String] the label's wrapper tag, intended to allow labels to act as page headings
         | 
| 314 314 | 
             
                # @option label hidden [Boolean] control the visability of the label. Hidden labels will stil be read by screenreaders
         | 
| 315 | 
            +
                # @param options [Hash] Options hash passed through to Rails' +collection_select+ helper
         | 
| 316 | 
            +
                # @param html_options [Hash] HTML Options hash passed through to Rails' +collection_select+ helper
         | 
| 315 317 | 
             
                # @param block [Block] arbitrary HTML that will be rendered between the hint and the input
         | 
| 318 | 
            +
                # @see https://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-collection_select Rails collection_select (called by govuk_collection_select)
         | 
| 316 319 | 
             
                # @return [ActiveSupport::SafeBuffer] HTML output
         | 
| 317 320 | 
             
                #
         | 
| 318 321 | 
             
                # @example A select box with hint
         | 
| @@ -677,14 +680,13 @@ module GOVUKDesignSystemFormBuilder | |
| 677 680 | 
             
                # @param text [String] the button text
         | 
| 678 681 | 
             
                # @param warning [Boolean] makes the button red ({https://design-system.service.gov.uk/components/button/#warning-buttons warning}) when true
         | 
| 679 682 | 
             
                # @param secondary [Boolean] makes the button grey ({https://design-system.service.gov.uk/components/button/#secondary-buttons secondary}) when true
         | 
| 680 | 
            -
                # @todo The GOV.UK design system also supports {https://design-system.service.gov.uk/components/button/#disabled-buttons disabled buttons}, they
         | 
| 681 | 
            -
                #   should probably be supported too
         | 
| 682 683 | 
             
                # @param classes [String] Classes to add to the submit button
         | 
| 683 684 | 
             
                # @param prevent_double_click [Boolean] adds JavaScript to safeguard the
         | 
| 684 685 | 
             
                #   form from being submitted more than once
         | 
| 685 686 | 
             
                # @param validate [Boolean] adds the formnovalidate to the submit button when true, this disables all
         | 
| 686 687 | 
             
                #   client-side validation provided by the browser. This is to provide a more consistent and accessible user
         | 
| 687 688 | 
             
                #   experience
         | 
| 689 | 
            +
                # @param disabled [Boolean] makes the button disabled when true
         | 
| 688 690 | 
             
                # @param block [Block] Any supplied HTML will be inserted immediately after
         | 
| 689 691 | 
             
                #   the submit button. It is intended for other buttons directly related to
         | 
| 690 692 | 
             
                #   the form's operation, such as 'Cancel' or 'Safe draft'
         | 
| @@ -699,8 +701,8 @@ module GOVUKDesignSystemFormBuilder | |
| 699 701 | 
             
                #   = f.govuk_submit "Proceed", prevent_double_click: true do
         | 
| 700 702 | 
             
                #     = link_to 'Cancel', some_other_path, class: 'govuk-button__secondary'
         | 
| 701 703 | 
             
                #
         | 
| 702 | 
            -
                def govuk_submit(text = config.default_submit_button_text, warning: false, secondary: false, classes: nil, prevent_double_click: true, validate: false, &block)
         | 
| 703 | 
            -
                  Elements::Submit.new(self, text, warning: warning, secondary: secondary, classes: classes, prevent_double_click: prevent_double_click, validate: validate, &block).html
         | 
| 704 | 
            +
                def govuk_submit(text = config.default_submit_button_text, warning: false, secondary: false, classes: nil, prevent_double_click: true, validate: false, disabled: false, &block)
         | 
| 705 | 
            +
                  Elements::Submit.new(self, text, warning: warning, secondary: secondary, classes: classes, prevent_double_click: prevent_double_click, validate: validate, disabled: disabled, &block).html
         | 
| 704 706 | 
             
                end
         | 
| 705 707 |  | 
| 706 708 | 
             
                # Generates three inputs for the +day+, +month+ and +year+ components of a date
         | 
| @@ -14,17 +14,18 @@ module GOVUKDesignSystemFormBuilder | |
| 14 14 | 
             
                  def html
         | 
| 15 15 | 
             
                    return yield unless limit?
         | 
| 16 16 |  | 
| 17 | 
            -
                    content_tag(
         | 
| 18 | 
            -
                      'div',
         | 
| 19 | 
            -
                      class: %(#{brand}-character-count),
         | 
| 20 | 
            -
                      data: { module: %(#{brand}-character-count) }.merge(**limit, **threshold).compact
         | 
| 21 | 
            -
                    ) do
         | 
| 22 | 
            -
                      yield
         | 
| 23 | 
            -
                    end
         | 
| 17 | 
            +
                    content_tag('div', **character_count_options) { yield }
         | 
| 24 18 | 
             
                  end
         | 
| 25 19 |  | 
| 26 20 | 
             
                private
         | 
| 27 21 |  | 
| 22 | 
            +
                  def character_count_options
         | 
| 23 | 
            +
                    {
         | 
| 24 | 
            +
                      class: %(#{brand}-character-count),
         | 
| 25 | 
            +
                      data: { module: %(#{brand}-character-count) }.merge(**limit, **threshold).compact
         | 
| 26 | 
            +
                    }
         | 
| 27 | 
            +
                  end
         | 
| 28 | 
            +
             | 
| 28 29 | 
             
                  def limit
         | 
| 29 30 | 
             
                    if @max_words
         | 
| 30 31 | 
             
                      { maxwords: @max_words }
         | 
| @@ -10,13 +10,20 @@ module GOVUKDesignSystemFormBuilder | |
| 10 10 | 
             
                  end
         | 
| 11 11 |  | 
| 12 12 | 
             
                  def html
         | 
| 13 | 
            -
                    content_tag('div',  | 
| 13 | 
            +
                    content_tag('div', **check_boxes_options) do
         | 
| 14 14 | 
             
                      yield
         | 
| 15 15 | 
             
                    end
         | 
| 16 16 | 
             
                  end
         | 
| 17 17 |  | 
| 18 18 | 
             
                private
         | 
| 19 19 |  | 
| 20 | 
            +
                  def check_boxes_options
         | 
| 21 | 
            +
                    {
         | 
| 22 | 
            +
                      class: check_boxes_classes,
         | 
| 23 | 
            +
                      data: { module: %(#{brand}-checkboxes) }
         | 
| 24 | 
            +
                    }
         | 
| 25 | 
            +
                  end
         | 
| 26 | 
            +
             | 
| 20 27 | 
             
                  def check_boxes_classes
         | 
| 21 28 | 
             
                    %w(checkboxes).prefix(brand).tap do |c|
         | 
| 22 29 | 
             
                      c.push(%(#{brand}-checkboxes--small)) if @small
         | 
| @@ -17,19 +17,27 @@ module GOVUKDesignSystemFormBuilder | |
| 17 17 |  | 
| 18 18 | 
             
                  def html
         | 
| 19 19 | 
             
                    Containers::FormGroup.new(@builder, @object_name, @attribute_name).html do
         | 
| 20 | 
            -
                      Containers::Fieldset.new(@builder, @object_name, @attribute_name,  | 
| 21 | 
            -
                        safe_join(
         | 
| 22 | 
            -
                          [
         | 
| 23 | 
            -
                            hint_element.html,
         | 
| 24 | 
            -
                            error_element.html,
         | 
| 25 | 
            -
                            Containers::CheckBoxes.new(@builder, small: @small, classes: @classes).html do
         | 
| 26 | 
            -
                              @block_content
         | 
| 27 | 
            -
                            end
         | 
| 28 | 
            -
                          ]
         | 
| 29 | 
            -
                        )
         | 
| 20 | 
            +
                      Containers::Fieldset.new(@builder, @object_name, @attribute_name, **fieldset_options).html do
         | 
| 21 | 
            +
                        safe_join([hint_element, error_element, checkboxes])
         | 
| 30 22 | 
             
                      end
         | 
| 31 23 | 
             
                    end
         | 
| 32 24 | 
             
                  end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                private
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                  def fieldset_options
         | 
| 29 | 
            +
                    {
         | 
| 30 | 
            +
                      legend: @legend,
         | 
| 31 | 
            +
                      caption: @caption,
         | 
| 32 | 
            +
                      described_by: [error_element.error_id, hint_element.hint_id]
         | 
| 33 | 
            +
                    }
         | 
| 34 | 
            +
                  end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                  def checkboxes
         | 
| 37 | 
            +
                    Containers::CheckBoxes.new(@builder, small: @small, classes: @classes).html do
         | 
| 38 | 
            +
                      @block_content
         | 
| 39 | 
            +
                    end
         | 
| 40 | 
            +
                  end
         | 
| 33 41 | 
             
                end
         | 
| 34 42 | 
             
              end
         | 
| 35 43 | 
             
            end
         | 
| @@ -26,40 +26,50 @@ module GOVUKDesignSystemFormBuilder | |
| 26 26 | 
             
                  end
         | 
| 27 27 |  | 
| 28 28 | 
             
                  def html
         | 
| 29 | 
            -
                    content_tag('fieldset',  | 
| 30 | 
            -
                      safe_join([ | 
| 29 | 
            +
                    content_tag('fieldset', **fieldset_options) do
         | 
| 30 | 
            +
                      safe_join([legend, (@block_content || yield)])
         | 
| 31 31 | 
             
                    end
         | 
| 32 32 | 
             
                  end
         | 
| 33 33 |  | 
| 34 34 | 
             
                private
         | 
| 35 35 |  | 
| 36 | 
            -
                  def  | 
| 37 | 
            -
                     | 
| 36 | 
            +
                  def fieldset_options
         | 
| 37 | 
            +
                    {
         | 
| 38 | 
            +
                      class: fieldset_classes,
         | 
| 39 | 
            +
                      aria: { describedby: @described_by }
         | 
| 40 | 
            +
                    }
         | 
| 41 | 
            +
                  end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                  def fieldset_classes
         | 
| 44 | 
            +
                    %w(fieldset).prefix(brand)
         | 
| 38 45 | 
             
                  end
         | 
| 39 46 |  | 
| 40 | 
            -
                  def  | 
| 47 | 
            +
                  def legend
         | 
| 48 | 
            +
                    @legend_raw || legend_content
         | 
| 49 | 
            +
                  end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                  def legend_content
         | 
| 41 52 | 
             
                    if legend_text.present?
         | 
| 42 53 | 
             
                      content_tag('legend', class: legend_classes) do
         | 
| 43 54 | 
             
                        content_tag(@legend_options.dig(:tag), class: legend_heading_classes) do
         | 
| 44 | 
            -
                          safe_join([caption_element | 
| 55 | 
            +
                          safe_join([caption_element, legend_text])
         | 
| 45 56 | 
             
                        end
         | 
| 46 57 | 
             
                      end
         | 
| 47 58 | 
             
                    end
         | 
| 48 59 | 
             
                  end
         | 
| 49 60 |  | 
| 50 61 | 
             
                  def legend_text
         | 
| 51 | 
            -
                     | 
| 62 | 
            +
                    @legend_options.dig(:text) || localised_text(:legend)
         | 
| 52 63 | 
             
                  end
         | 
| 53 64 |  | 
| 54 | 
            -
                  def  | 
| 55 | 
            -
                     | 
| 65 | 
            +
                  def legend_size
         | 
| 66 | 
            +
                    @legend_options.dig(:size).tap do |size|
         | 
| 67 | 
            +
                      fail "invalid size '#{size}', must be #{LEGEND_SIZES.join(', ')}" unless size.in?(LEGEND_SIZES)
         | 
| 68 | 
            +
                    end
         | 
| 56 69 | 
             
                  end
         | 
| 57 70 |  | 
| 58 71 | 
             
                  def legend_classes
         | 
| 59 | 
            -
                     | 
| 60 | 
            -
                    fail "invalid size '#{size}', must be #{LEGEND_SIZES.join(', ')}" unless size.in?(LEGEND_SIZES)
         | 
| 61 | 
            -
             | 
| 62 | 
            -
                    [%(fieldset__legend), %(fieldset__legend--#{size})].prefix(brand).tap do |classes|
         | 
| 72 | 
            +
                    [%(fieldset__legend), %(fieldset__legend--#{legend_size})].prefix(brand).tap do |classes|
         | 
| 63 73 | 
             
                      classes.push(%(#{brand}-visually-hidden)) if @legend_options.dig(:hidden)
         | 
| 64 74 | 
             
                    end
         | 
| 65 75 | 
             
                  end
         | 
| @@ -18,19 +18,27 @@ module GOVUKDesignSystemFormBuilder | |
| 18 18 |  | 
| 19 19 | 
             
                  def html
         | 
| 20 20 | 
             
                    Containers::FormGroup.new(@builder, @object_name, @attribute_name).html do
         | 
| 21 | 
            -
                      Containers::Fieldset.new(@builder, @object_name, @attribute_name,  | 
| 22 | 
            -
                        safe_join(
         | 
| 23 | 
            -
                          [
         | 
| 24 | 
            -
                            hint_element.html,
         | 
| 25 | 
            -
                            error_element.html,
         | 
| 26 | 
            -
                            Containers::Radios.new(@builder, inline: @inline, small: @small, classes: @classes).html do
         | 
| 27 | 
            -
                              @block_content
         | 
| 28 | 
            -
                            end
         | 
| 29 | 
            -
                          ]
         | 
| 30 | 
            -
                        )
         | 
| 21 | 
            +
                      Containers::Fieldset.new(@builder, @object_name, @attribute_name, **fieldset_options).html do
         | 
| 22 | 
            +
                        safe_join([hint_element, error_element, radios])
         | 
| 31 23 | 
             
                      end
         | 
| 32 24 | 
             
                    end
         | 
| 33 25 | 
             
                  end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                private
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                  def fieldset_options
         | 
| 30 | 
            +
                    {
         | 
| 31 | 
            +
                      legend: @legend,
         | 
| 32 | 
            +
                      caption: @caption,
         | 
| 33 | 
            +
                      described_by: [error_element.error_id, hint_element.hint_id]
         | 
| 34 | 
            +
                    }
         | 
| 35 | 
            +
                  end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                  def radios
         | 
| 38 | 
            +
                    Containers::Radios.new(@builder, inline: @inline, small: @small, classes: @classes).html do
         | 
| 39 | 
            +
                      @block_content
         | 
| 40 | 
            +
                    end
         | 
| 41 | 
            +
                  end
         | 
| 34 42 | 
             
                end
         | 
| 35 43 | 
             
              end
         | 
| 36 44 | 
             
            end
         | 
| @@ -13,13 +13,20 @@ module GOVUKDesignSystemFormBuilder | |
| 13 13 | 
             
                  end
         | 
| 14 14 |  | 
| 15 15 | 
             
                  def html
         | 
| 16 | 
            -
                    content_tag('div',  | 
| 16 | 
            +
                    content_tag('div', **radios_options) do
         | 
| 17 17 | 
             
                      yield
         | 
| 18 18 | 
             
                    end
         | 
| 19 19 | 
             
                  end
         | 
| 20 20 |  | 
| 21 21 | 
             
                private
         | 
| 22 22 |  | 
| 23 | 
            +
                  def radios_options
         | 
| 24 | 
            +
                    {
         | 
| 25 | 
            +
                      class: radios_classes,
         | 
| 26 | 
            +
                      data: { module: %(#{brand}-radios) }
         | 
| 27 | 
            +
                    }
         | 
| 28 | 
            +
                  end
         | 
| 29 | 
            +
             | 
| 23 30 | 
             
                  def radios_classes
         | 
| 24 31 | 
             
                    %w(radios).prefix(brand).tap do |c|
         | 
| 25 32 | 
             
                      c.push(%(#{brand}-radios--inline)) if @inline
         | 
| @@ -3,7 +3,7 @@ module GOVUKDesignSystemFormBuilder | |
| 3 3 | 
             
                class Caption < Base
         | 
| 4 4 | 
             
                  include Traits::Localisation
         | 
| 5 5 |  | 
| 6 | 
            -
                  def initialize(builder, object_name, attribute_name, text:, size:  | 
| 6 | 
            +
                  def initialize(builder, object_name, attribute_name, text:, size: nil)
         | 
| 7 7 | 
             
                    super(builder, object_name, attribute_name)
         | 
| 8 8 |  | 
| 9 9 | 
             
                    @text       = caption_text(text)
         | 
| @@ -21,7 +21,7 @@ module GOVUKDesignSystemFormBuilder | |
| 21 21 | 
             
                  end
         | 
| 22 22 |  | 
| 23 23 | 
             
                  def caption_size_class(size)
         | 
| 24 | 
            -
                    case size
         | 
| 24 | 
            +
                    case size || config.default_caption_size
         | 
| 25 25 | 
             
                    when 'xl' then %(#{brand}-caption-xl)
         | 
| 26 26 | 
             
                    when 'l'  then %(#{brand}-caption-l)
         | 
| 27 27 | 
             
                    when 'm'  then %(#{brand}-caption-m)
         | 
| @@ -22,23 +22,28 @@ module GOVUKDesignSystemFormBuilder | |
| 22 22 |  | 
| 23 23 | 
             
                    def html
         | 
| 24 24 | 
             
                      Containers::FormGroup.new(@builder, @object_name, @attribute_name).html do
         | 
| 25 | 
            -
                        Containers::Fieldset.new(@builder, @object_name, @attribute_name,  | 
| 26 | 
            -
                          safe_join(
         | 
| 27 | 
            -
                            [
         | 
| 28 | 
            -
                              supplemental_content.html,
         | 
| 29 | 
            -
                              hint_element.html,
         | 
| 30 | 
            -
                              error_element.html,
         | 
| 31 | 
            -
                              Containers::CheckBoxes.new(@builder, small: @small, classes: @classes).html do
         | 
| 32 | 
            -
                                build_collection
         | 
| 33 | 
            -
                              end
         | 
| 34 | 
            -
                            ]
         | 
| 35 | 
            -
                          )
         | 
| 25 | 
            +
                        Containers::Fieldset.new(@builder, @object_name, @attribute_name, **fieldset_options).html do
         | 
| 26 | 
            +
                          safe_join([supplemental_content, hint_element, error_element, check_boxes])
         | 
| 36 27 | 
             
                        end
         | 
| 37 28 | 
             
                      end
         | 
| 38 29 | 
             
                    end
         | 
| 39 30 |  | 
| 40 31 | 
             
                  private
         | 
| 41 32 |  | 
| 33 | 
            +
                    def fieldset_options
         | 
| 34 | 
            +
                      {
         | 
| 35 | 
            +
                        legend: @legend,
         | 
| 36 | 
            +
                        caption: @caption,
         | 
| 37 | 
            +
                        described_by: [error_id, hint_id, supplemental_id]
         | 
| 38 | 
            +
                      }
         | 
| 39 | 
            +
                    end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                    def check_boxes
         | 
| 42 | 
            +
                      Containers::CheckBoxes.new(@builder, small: @small, classes: @classes).html do
         | 
| 43 | 
            +
                        collection
         | 
| 44 | 
            +
                      end
         | 
| 45 | 
            +
                    end
         | 
| 46 | 
            +
             | 
| 42 47 | 
             
                    # Builds a collection of check {Elements::CheckBoxes::CheckBox}
         | 
| 43 48 | 
             
                    # @return [ActiveSupport::SafeBuffer] HTML output
         | 
| 44 49 | 
             
                    #
         | 
| @@ -47,7 +52,7 @@ module GOVUKDesignSystemFormBuilder | |
| 47 52 | 
             
                    #   be rendered when it happens we need to work on the chance that it might, so
         | 
| 48 53 | 
             
                    #   the +link_errors+ variable is set to +true+ if this attribute has errors and
         | 
| 49 54 | 
             
                    #   always set back to +false+ after the first checkbox has been rendered
         | 
| 50 | 
            -
                    def  | 
| 55 | 
            +
                    def collection
         | 
| 51 56 | 
             
                      link_errors = has_errors?
         | 
| 52 57 |  | 
| 53 58 | 
             
                      @builder.collection_check_boxes(@attribute_name, @collection, @value_method, @text_method) do |check_box|
         | 
| @@ -10,31 +10,33 @@ module GOVUKDesignSystemFormBuilder | |
| 10 10 | 
             
                    def initialize(builder, object_name, attribute_name, checkbox, hint_method = nil, link_errors: false)
         | 
| 11 11 | 
             
                      super(builder, object_name, attribute_name)
         | 
| 12 12 |  | 
| 13 | 
            -
                      @checkbox | 
| 14 | 
            -
                      @item | 
| 15 | 
            -
                      @value | 
| 16 | 
            -
                      @hint_text | 
| 13 | 
            +
                      @checkbox    = checkbox
         | 
| 14 | 
            +
                      @item        = checkbox.object
         | 
| 15 | 
            +
                      @value       = checkbox.value
         | 
| 16 | 
            +
                      @hint_text   = retrieve(@item, hint_method)
         | 
| 17 17 | 
             
                      @link_errors = link_errors
         | 
| 18 18 | 
             
                    end
         | 
| 19 19 |  | 
| 20 20 | 
             
                    def html
         | 
| 21 21 | 
             
                      content_tag('div', class: %(#{brand}-checkboxes__item)) do
         | 
| 22 | 
            -
                        safe_join(
         | 
| 23 | 
            -
                          [
         | 
| 24 | 
            -
                            @checkbox.check_box(
         | 
| 25 | 
            -
                              id: field_id(link_errors: @link_errors),
         | 
| 26 | 
            -
                              class: %(#{brand}-checkboxes__input),
         | 
| 27 | 
            -
                              aria: { describedby: hint_id }
         | 
| 28 | 
            -
                            ),
         | 
| 29 | 
            -
                            label_element.html,
         | 
| 30 | 
            -
                            hint_element.html
         | 
| 31 | 
            -
                          ]
         | 
| 32 | 
            -
                        )
         | 
| 22 | 
            +
                        safe_join([check_box, label_element, hint_element])
         | 
| 33 23 | 
             
                      end
         | 
| 34 24 | 
             
                    end
         | 
| 35 25 |  | 
| 36 26 | 
             
                  private
         | 
| 37 27 |  | 
| 28 | 
            +
                    def check_box
         | 
| 29 | 
            +
                      @checkbox.check_box(**check_box_options)
         | 
| 30 | 
            +
                    end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                    def check_box_options
         | 
| 33 | 
            +
                      {
         | 
| 34 | 
            +
                        id: field_id(link_errors: @link_errors),
         | 
| 35 | 
            +
                        class: %(#{brand}-checkboxes__input),
         | 
| 36 | 
            +
                        aria: { describedby: hint_id }
         | 
| 37 | 
            +
                      }
         | 
| 38 | 
            +
                    end
         | 
| 39 | 
            +
             | 
| 38 40 | 
             
                    def label_element
         | 
| 39 41 | 
             
                      @label_element ||= Label.new(@builder, @object_name, @attribute_name, @checkbox, value: @value, link_errors: @link_errors)
         | 
| 40 42 | 
             
                    end
         | 
| @@ -24,41 +24,37 @@ module GOVUKDesignSystemFormBuilder | |
| 24 24 | 
             
                    end
         | 
| 25 25 |  | 
| 26 26 | 
             
                    def html
         | 
| 27 | 
            -
                      safe_join(
         | 
| 28 | 
            -
                        [
         | 
| 29 | 
            -
                          content_tag('div', class: %(#{brand}-checkboxes__item)) do
         | 
| 30 | 
            -
                            safe_join(
         | 
| 31 | 
            -
                              [
         | 
| 32 | 
            -
                                input,
         | 
| 33 | 
            -
                                label_element.html,
         | 
| 34 | 
            -
                                hint_element.html,
         | 
| 35 | 
            -
                              ]
         | 
| 36 | 
            -
                            )
         | 
| 37 | 
            -
                          end,
         | 
| 38 | 
            -
                          @conditional_content
         | 
| 39 | 
            -
                        ]
         | 
| 40 | 
            -
                      )
         | 
| 27 | 
            +
                      safe_join([check_box, @conditional_content])
         | 
| 41 28 | 
             
                    end
         | 
| 42 29 |  | 
| 43 30 | 
             
                  private
         | 
| 44 31 |  | 
| 32 | 
            +
                    def check_box
         | 
| 33 | 
            +
                      content_tag('div', class: %(#{brand}-checkboxes__item)) do
         | 
| 34 | 
            +
                        safe_join([input, label_element, hint_element])
         | 
| 35 | 
            +
                      end
         | 
| 36 | 
            +
                    end
         | 
| 37 | 
            +
             | 
| 45 38 | 
             
                    def input
         | 
| 46 | 
            -
                      @builder.check_box(
         | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 52 | 
            -
             | 
| 53 | 
            -
             | 
| 54 | 
            -
                        },
         | 
| 55 | 
            -
                        @ | 
| 56 | 
            -
             | 
| 57 | 
            -
                      )
         | 
| 39 | 
            +
                      @builder.check_box(@attribute_name, input_options, @value, false)
         | 
| 40 | 
            +
                    end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                    def input_options
         | 
| 43 | 
            +
                      {
         | 
| 44 | 
            +
                        id: field_id(link_errors: @link_errors),
         | 
| 45 | 
            +
                        class: check_box_classes,
         | 
| 46 | 
            +
                        multiple: @multiple,
         | 
| 47 | 
            +
                        aria: { describedby: hint_id },
         | 
| 48 | 
            +
                        data: { 'aria-controls' => @conditional_id }
         | 
| 49 | 
            +
                      }
         | 
| 58 50 | 
             
                    end
         | 
| 59 51 |  | 
| 60 52 | 
             
                    def label_element
         | 
| 61 | 
            -
                      @label_element ||= Elements::Label.new(@builder, @object_name, @attribute_name,  | 
| 53 | 
            +
                      @label_element ||= Elements::Label.new(@builder, @object_name, @attribute_name, **label_content, **label_options)
         | 
| 54 | 
            +
                    end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                    def label_options
         | 
| 57 | 
            +
                      { checkbox: true, value: @value, link_errors: @link_errors }
         | 
| 62 58 | 
             
                    end
         | 
| 63 59 |  | 
| 64 60 | 
             
                    def hint_element
         |