govuk_design_system_formbuilder 2.1.7 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE +21 -0
- data/README.md +3 -3
- data/lib/govuk_design_system_formbuilder.rb +10 -0
- data/lib/govuk_design_system_formbuilder/base.rb +9 -0
- data/lib/govuk_design_system_formbuilder/builder.rb +28 -19
- data/lib/govuk_design_system_formbuilder/containers/button_group.rb +15 -0
- data/lib/govuk_design_system_formbuilder/containers/check_boxes_fieldset.rb +2 -2
- data/lib/govuk_design_system_formbuilder/containers/fieldset.rb +11 -8
- data/lib/govuk_design_system_formbuilder/containers/radio_buttons_fieldset.rb +2 -2
- data/lib/govuk_design_system_formbuilder/containers/supplemental.rb +1 -1
- data/lib/govuk_design_system_formbuilder/elements/caption.rb +3 -3
- data/lib/govuk_design_system_formbuilder/elements/check_boxes/collection.rb +15 -14
- data/lib/govuk_design_system_formbuilder/elements/check_boxes/collection_check_box.rb +2 -2
- data/lib/govuk_design_system_formbuilder/elements/check_boxes/fieldset_check_box.rb +4 -2
- data/lib/govuk_design_system_formbuilder/elements/date.rb +13 -12
- data/lib/govuk_design_system_formbuilder/elements/error_message.rb +1 -1
- data/lib/govuk_design_system_formbuilder/elements/error_summary.rb +11 -4
- data/lib/govuk_design_system_formbuilder/elements/file.rb +3 -2
- data/lib/govuk_design_system_formbuilder/elements/hint.rb +1 -1
- data/lib/govuk_design_system_formbuilder/elements/inputs/email.rb +1 -0
- data/lib/govuk_design_system_formbuilder/elements/inputs/number.rb +1 -0
- data/lib/govuk_design_system_formbuilder/elements/inputs/password.rb +1 -0
- data/lib/govuk_design_system_formbuilder/elements/inputs/phone.rb +1 -0
- data/lib/govuk_design_system_formbuilder/elements/inputs/text.rb +1 -0
- data/lib/govuk_design_system_formbuilder/elements/inputs/url.rb +1 -0
- data/lib/govuk_design_system_formbuilder/elements/label.rb +3 -3
- data/lib/govuk_design_system_formbuilder/elements/legend.rb +3 -5
- data/lib/govuk_design_system_formbuilder/elements/radios/collection.rb +3 -3
- data/lib/govuk_design_system_formbuilder/elements/radios/collection_radio_button.rb +3 -3
- data/lib/govuk_design_system_formbuilder/elements/radios/fieldset_radio_button.rb +8 -6
- data/lib/govuk_design_system_formbuilder/elements/select.rb +22 -19
- data/lib/govuk_design_system_formbuilder/elements/submit.rb +21 -14
- data/lib/govuk_design_system_formbuilder/elements/text_area.rb +5 -4
- data/lib/govuk_design_system_formbuilder/traits/caption.rb +1 -1
- data/lib/govuk_design_system_formbuilder/traits/error.rb +2 -2
- data/lib/govuk_design_system_formbuilder/traits/fieldset_item.rb +2 -2
- data/lib/govuk_design_system_formbuilder/traits/hint.rb +2 -2
- data/lib/govuk_design_system_formbuilder/traits/html_attributes.rb +9 -0
- data/lib/govuk_design_system_formbuilder/traits/input.rb +5 -5
- data/lib/govuk_design_system_formbuilder/traits/label.rb +1 -1
- data/lib/govuk_design_system_formbuilder/traits/supplemental.rb +2 -2
- data/lib/govuk_design_system_formbuilder/version.rb +1 -1
- metadata +35 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2f56b92f232ffd2b98c38637c49b2e4255f3be12cab3825f795a735cbfae0107
|
4
|
+
data.tar.gz: 0f4dfd572130559b3140a838310ce471a4adee41f46fed32ca5046cfa29ed9d0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 67861fee01f6a14cac7bbf9db87d1633dcf13e569aaa2179f5e16d21f8aed5e7b7d553a5bd96e601ab5b4181e6c27c905fa5fd6d7e80c811a2cff28d42b1f83f
|
7
|
+
data.tar.gz: a889d6d02fd1978e73aa2328debc5b6268993eca88755b3cf31889dfe4c973d28e09dfb9d13bbe462347aeea74a1f46dfb8ba8f4f7c20ad3da5c2c8d1d6aa114
|
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License
|
2
|
+
|
3
|
+
Copyright (C) 2019 Crown Copyright (Government Digital Service)
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
6
|
+
this software and associated documentation files (the "Software"), to deal in
|
7
|
+
the Software without restriction, including without limitation the rights to
|
8
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
9
|
+
of the Software, and to permit persons to whom the Software is furnished to do
|
10
|
+
so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
data/README.md
CHANGED
@@ -7,9 +7,9 @@
|
|
7
7
|
[![Test Coverage](https://api.codeclimate.com/v1/badges/fde73b5dc9476197281b/test_coverage)](https://codeclimate.com/github/DFE-Digital/govuk_design_system_formbuilder/test_coverage)
|
8
8
|
[![Dependabot Status](https://api.dependabot.com/badges/status?host=github&repo=DFE-Digital/govuk_design_system_formbuilder)](https://dependabot.com)
|
9
9
|
[![GitHub license](https://img.shields.io/github/license/DFE-Digital/govuk_design_system_formbuilder)](https://github.com/DFE-Digital/govuk_design_system_formbuilder/blob/master/LICENSE)
|
10
|
-
[![GOV.UK Design System Version](https://img.shields.io/badge/GOV.UK%20Design%20System-3.
|
11
|
-
[![Rails](https://img.shields.io/badge/Ruby-2.
|
12
|
-
[![Ruby](https://img.shields.io/badge/Rails-
|
10
|
+
[![GOV.UK Design System Version](https://img.shields.io/badge/GOV.UK%20Design%20System-3.11.0-brightgreen)](https://design-system.service.gov.uk)
|
11
|
+
[![Rails](https://img.shields.io/badge/Ruby-2.6.6%20%E2%95%B1%202.7.2%20%E2%95%B1%203.0.0-E16D6D)](https://www.ruby-lang.org/en/downloads/)
|
12
|
+
[![Ruby](https://img.shields.io/badge/Rails-6.0.3%20%E2%95%B1%206.1.0-E16D6D)](https://weblog.rubyonrails.org/releases/)
|
13
13
|
|
14
14
|
This library provides an easy-to-use form builder for the [GOV.UK Design System](https://design-system.service.gov.uk/).
|
15
15
|
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'deep_merge/rails_compat'
|
1
2
|
require 'active_support/configurable'
|
2
3
|
|
3
4
|
[%w(traits *.rb), %w(*.rb), %w(elements ** *.rb), %w(containers ** *.rb)]
|
@@ -34,6 +35,12 @@ module GOVUKDesignSystemFormBuilder
|
|
34
35
|
# blocks. As per the GOV.UK Design System spec, it defaults to
|
35
36
|
# 'There is a problem'.
|
36
37
|
#
|
38
|
+
# * +:default_collection_check_boxes_include_hidden+ controls whether or not
|
39
|
+
# a hidden field is added when rendering a collection of check boxes
|
40
|
+
#
|
41
|
+
# * +:default_collection_radio_buttons_include_hidden+ controls whether or not
|
42
|
+
# a hidden field is added when rendering a collection of radio buttons
|
43
|
+
#
|
37
44
|
# * +:localisation_schema_fallback+ sets the prefix elements for the array
|
38
45
|
# used to build the localisation string. The final two elements are always
|
39
46
|
# are the object name and attribute name. The _special_ value +__context__+,
|
@@ -52,6 +59,9 @@ module GOVUKDesignSystemFormBuilder
|
|
52
59
|
default_submit_button_text: 'Continue',
|
53
60
|
default_radio_divider_text: 'or',
|
54
61
|
default_error_summary_title: 'There is a problem',
|
62
|
+
default_collection_check_boxes_include_hidden: true,
|
63
|
+
default_collection_radio_buttons_include_hidden: true,
|
64
|
+
default_submit_validate: false,
|
55
65
|
|
56
66
|
localisation_schema_fallback: %i(helpers __context__),
|
57
67
|
localisation_schema_label: nil,
|
@@ -25,6 +25,15 @@ module GOVUKDesignSystemFormBuilder
|
|
25
25
|
|
26
26
|
private
|
27
27
|
|
28
|
+
# returns the attributes bound to the object that are
|
29
|
+
# required to build all contained elements
|
30
|
+
#
|
31
|
+
# @return [GOVUKDesignSystemFormBuilder::FormBuilder, Symbol, Symbol] an array containing the
|
32
|
+
# builder, object name and attribute name
|
33
|
+
def bound
|
34
|
+
[@builder, @object_name, @attribute_name]
|
35
|
+
end
|
36
|
+
|
28
37
|
def brand(override = nil)
|
29
38
|
override || config.brand
|
30
39
|
end
|
@@ -341,6 +341,7 @@ module GOVUKDesignSystemFormBuilder
|
|
341
341
|
# @param form_group [Hash] configures the form group
|
342
342
|
# @option form_group classes [Array,String] sets the form group's classes
|
343
343
|
# @option form_group kwargs [Hash] additional attributes added to the form group
|
344
|
+
# @option kwargs [Hash] kwargs additional arguments are applied as attributes to the +textarea+ element
|
344
345
|
# @param block [Block] arbitrary HTML that will be rendered between the hint and the input
|
345
346
|
# @return [ActiveSupport::SafeBuffer] HTML output
|
346
347
|
# @see https://design-system.service.gov.uk/components/textarea/ GOV.UK text area component
|
@@ -386,7 +387,6 @@ module GOVUKDesignSystemFormBuilder
|
|
386
387
|
# @option label hidden [Boolean] control the visability of the label. Hidden labels will stil be read by screenreaders
|
387
388
|
# @option label kwargs [Hash] additional arguments are applied as attributes on the +label+ element
|
388
389
|
# @param options [Hash] Options hash passed through to Rails' +collection_select+ helper
|
389
|
-
# @param html_options [Hash] HTML Options hash passed through to Rails' +collection_select+ helper
|
390
390
|
# @param form_group [Hash] configures the form group
|
391
391
|
# @option form_group classes [Array,String] sets the form group's classes
|
392
392
|
# @option form_group kwargs [Hash] additional attributes added to the form group
|
@@ -411,7 +411,7 @@ module GOVUKDesignSystemFormBuilder
|
|
411
411
|
# = f.govuk_collection_select(:team, @teams, :id, :name) do
|
412
412
|
# label: -> { tag.h3("Which team did you represent?") }
|
413
413
|
#
|
414
|
-
def govuk_collection_select(attribute_name, collection, value_method, text_method, options: {},
|
414
|
+
def govuk_collection_select(attribute_name, collection, value_method, text_method, options: {}, hint: {}, label: {}, caption: {}, form_group: {}, **kwargs, &block)
|
415
415
|
Elements::Select.new(
|
416
416
|
self,
|
417
417
|
object_name,
|
@@ -423,8 +423,8 @@ module GOVUKDesignSystemFormBuilder
|
|
423
423
|
label: label,
|
424
424
|
caption: caption,
|
425
425
|
options: options,
|
426
|
-
html_options: html_options,
|
427
426
|
form_group: form_group,
|
427
|
+
**kwargs,
|
428
428
|
&block
|
429
429
|
).html
|
430
430
|
end
|
@@ -501,7 +501,7 @@ module GOVUKDesignSystemFormBuilder
|
|
501
501
|
# :name,
|
502
502
|
# legend: -> { tag.h3('Which category do you belong to?') }
|
503
503
|
#
|
504
|
-
def govuk_collection_radio_buttons(attribute_name, collection, value_method, text_method = nil, hint_method = nil, hint: {}, legend: {}, caption: {}, inline: false, small: false, bold_labels: false, classes: nil, include_hidden:
|
504
|
+
def govuk_collection_radio_buttons(attribute_name, collection, value_method, text_method = nil, hint_method = nil, hint: {}, legend: {}, caption: {}, inline: false, small: false, bold_labels: false, classes: nil, include_hidden: config.default_collection_radio_buttons_include_hidden, form_group: {}, &block)
|
505
505
|
Elements::Radios::Collection.new(
|
506
506
|
self,
|
507
507
|
object_name,
|
@@ -597,6 +597,7 @@ module GOVUKDesignSystemFormBuilder
|
|
597
597
|
# container and only revealed when the radio button is picked
|
598
598
|
# @param link_errors [Boolean] controls whether this radio button should be linked to from {#govuk_error_summary}
|
599
599
|
# from the error summary. <b>Should only be set to +true+ for the first radio button in a fieldset</b>
|
600
|
+
# @option kwargs [Hash] kwargs additional arguments are applied as attributes to the +input+ element
|
600
601
|
# @return [ActiveSupport::SafeBuffer] HTML output
|
601
602
|
#
|
602
603
|
# @example A single radio button for our new favourite colour
|
@@ -604,8 +605,8 @@ module GOVUKDesignSystemFormBuilder
|
|
604
605
|
# = f.govuk_radio_buttons_fieldset :favourite_colour do
|
605
606
|
# = f.govuk_radio_button :favourite_colour, :red, label: { text: 'Red' }
|
606
607
|
#
|
607
|
-
def govuk_radio_button(attribute_name, value, hint: {}, label: {}, link_errors: false, &block)
|
608
|
-
Elements::Radios::FieldsetRadioButton.new(self, object_name, attribute_name, value, hint: hint, label: label, link_errors: link_errors, &block).html
|
608
|
+
def govuk_radio_button(attribute_name, value, hint: {}, label: {}, link_errors: false, **kwargs, &block)
|
609
|
+
Elements::Radios::FieldsetRadioButton.new(self, object_name, attribute_name, value, hint: hint, label: label, link_errors: link_errors, **kwargs, &block).html
|
609
610
|
end
|
610
611
|
|
611
612
|
# Inserts a text divider into a list of radio buttons
|
@@ -646,6 +647,7 @@ module GOVUKDesignSystemFormBuilder
|
|
646
647
|
# @param form_group [Hash] configures the form group
|
647
648
|
# @option form_group classes [Array,String] sets the form group's classes
|
648
649
|
# @option form_group kwargs [Hash] additional attributes added to the form group
|
650
|
+
# @param include_hidden [Boolean] controls whether a hidden field is inserted to allow for empty submissions
|
649
651
|
# @param block [Block] any HTML passed in will be injected into the fieldset, after the hint and before the checkboxes
|
650
652
|
# @return [ActiveSupport::SafeBuffer] HTML output
|
651
653
|
#
|
@@ -682,7 +684,7 @@ module GOVUKDesignSystemFormBuilder
|
|
682
684
|
# :name,
|
683
685
|
# legend: -> { tag.h3('What kind of sandwich do you want?') }
|
684
686
|
#
|
685
|
-
def govuk_collection_check_boxes(attribute_name, collection, value_method, text_method, hint_method = nil, hint: {}, legend: {}, caption: {}, small: false, classes: nil, form_group: {}, &block)
|
687
|
+
def govuk_collection_check_boxes(attribute_name, collection, value_method, text_method, hint_method = nil, hint: {}, legend: {}, caption: {}, small: false, classes: nil, form_group: {}, include_hidden: config.default_collection_check_boxes_include_hidden, &block)
|
686
688
|
Elements::CheckBoxes::Collection.new(
|
687
689
|
self,
|
688
690
|
object_name,
|
@@ -697,6 +699,7 @@ module GOVUKDesignSystemFormBuilder
|
|
697
699
|
small: small,
|
698
700
|
classes: classes,
|
699
701
|
form_group: form_group,
|
702
|
+
include_hidden: include_hidden,
|
700
703
|
&block
|
701
704
|
).html
|
702
705
|
end
|
@@ -773,6 +776,7 @@ module GOVUKDesignSystemFormBuilder
|
|
773
776
|
# @option label hidden [Boolean] control the visability of the label. Hidden labels will stil be read by screenreaders
|
774
777
|
# @option label kwargs [Hash] additional arguments are applied as attributes on the +label+ element
|
775
778
|
# @param multiple [Boolean] controls whether the check box is part of a collection or represents a single attribute
|
779
|
+
# @option kwargs [Hash] kwargs additional arguments are applied as attributes to the +input+ element
|
776
780
|
# @param block [Block] any HTML passed in will form the contents of the fieldset
|
777
781
|
# @return [ActiveSupport::SafeBuffer] HTML output
|
778
782
|
#
|
@@ -784,7 +788,7 @@ module GOVUKDesignSystemFormBuilder
|
|
784
788
|
# label: { text: 'Do you agree with our terms and conditions?' },
|
785
789
|
# hint: { text: 'You will not be able to proceed unless you do' }
|
786
790
|
#
|
787
|
-
def govuk_check_box(attribute_name, value, unchecked_value = false, hint: {}, label: {}, link_errors: false, multiple: true, &block)
|
791
|
+
def govuk_check_box(attribute_name, value, unchecked_value = false, hint: {}, label: {}, link_errors: false, multiple: true, **kwargs, &block)
|
788
792
|
Elements::CheckBoxes::FieldsetCheckBox.new(
|
789
793
|
self,
|
790
794
|
object_name,
|
@@ -795,6 +799,7 @@ module GOVUKDesignSystemFormBuilder
|
|
795
799
|
label: label,
|
796
800
|
link_errors: link_errors,
|
797
801
|
multiple: multiple,
|
802
|
+
**kwargs,
|
798
803
|
&block
|
799
804
|
).html
|
800
805
|
end
|
@@ -811,9 +816,10 @@ module GOVUKDesignSystemFormBuilder
|
|
811
816
|
# client-side validation provided by the browser. This is to provide a more consistent and accessible user
|
812
817
|
# experience
|
813
818
|
# @param disabled [Boolean] makes the button disabled when true
|
814
|
-
# @
|
815
|
-
#
|
816
|
-
#
|
819
|
+
# @option kwargs [Hash] kwargs additional arguments are applied as attributes to the +input+ element
|
820
|
+
# @param block [Block] When content is passed in via a block the submit element and the block content will
|
821
|
+
# be wrapped in a +<div class="govuk-button-group">+ which will space the buttons and links within
|
822
|
+
# evenly.
|
817
823
|
# @raise [ArgumentError] raised if both +warning+ and +secondary+ are true
|
818
824
|
# @return [ActiveSupport::SafeBuffer] HTML output
|
819
825
|
# @note Only the first additional button or link (passed in via a block) will be given the
|
@@ -827,8 +833,8 @@ module GOVUKDesignSystemFormBuilder
|
|
827
833
|
# = f.govuk_submit "Proceed", prevent_double_click: true do
|
828
834
|
# = link_to 'Cancel', some_other_path, class: 'govuk-button__secondary'
|
829
835
|
#
|
830
|
-
def govuk_submit(text = config.default_submit_button_text, warning: false, secondary: false, classes: nil, prevent_double_click: true, validate:
|
831
|
-
Elements::Submit.new(self, text, warning: warning, secondary: secondary, classes: classes, prevent_double_click: prevent_double_click, validate: validate, disabled: disabled, &block).html
|
836
|
+
def govuk_submit(text = config.default_submit_button_text, warning: false, secondary: false, classes: nil, prevent_double_click: true, validate: config.default_submit_validate, disabled: false, **kwargs, &block)
|
837
|
+
Elements::Submit.new(self, text, warning: warning, secondary: secondary, classes: classes, prevent_double_click: prevent_double_click, validate: validate, disabled: disabled, **kwargs, &block).html
|
832
838
|
end
|
833
839
|
|
834
840
|
# Generates three inputs for the +day+, +month+ and +year+ components of a date
|
@@ -856,6 +862,7 @@ module GOVUKDesignSystemFormBuilder
|
|
856
862
|
# @param form_group [Hash] configures the form group
|
857
863
|
# @option form_group classes [Array,String] sets the form group's classes
|
858
864
|
# @option form_group kwargs [Hash] additional attributes added to the form group
|
865
|
+
# @option kwargs [Hash] kwargs additional arguments are applied as attributes to the +input+ element
|
859
866
|
# @param block [Block] arbitrary HTML that will be rendered between the hint and the input group
|
860
867
|
# @param date_of_birth [Boolean] if +true+ {https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete#Values birth date auto completion attributes}
|
861
868
|
# will be added to the inputs
|
@@ -875,8 +882,8 @@ module GOVUKDesignSystemFormBuilder
|
|
875
882
|
# @example A date input with legend supplied as a proc
|
876
883
|
# = f.govuk_date_field :finishes_on,
|
877
884
|
# legend: -> { tag.h3('Which category do you belong to?') }
|
878
|
-
def govuk_date_field(attribute_name, hint: {}, legend: {}, caption: {}, date_of_birth: false, omit_day: false, form_group: {}, wildcards: false, &block)
|
879
|
-
Elements::Date.new(self, object_name, attribute_name, hint: hint, legend: legend, caption: caption, date_of_birth: date_of_birth, omit_day: omit_day, form_group: form_group, wildcards: wildcards, &block).html
|
885
|
+
def govuk_date_field(attribute_name, hint: {}, legend: {}, caption: {}, date_of_birth: false, omit_day: false, form_group: {}, wildcards: false, **kwargs, &block)
|
886
|
+
Elements::Date.new(self, object_name, attribute_name, hint: hint, legend: legend, caption: caption, date_of_birth: date_of_birth, omit_day: omit_day, form_group: form_group, wildcards: wildcards, **kwargs, &block).html
|
880
887
|
end
|
881
888
|
|
882
889
|
# Generates a summary of errors in the form, each linking to the corresponding
|
@@ -885,6 +892,7 @@ module GOVUKDesignSystemFormBuilder
|
|
885
892
|
# @param title [String] the error summary heading
|
886
893
|
# @param link_base_errors_to [Symbol,String] set the field that errors on +:base+ are linked
|
887
894
|
# to, as there won't be a field representing the object base.
|
895
|
+
# @option kwargs [Hash] kwargs additional arguments are applied as attributes to the error summary +div+ element
|
888
896
|
#
|
889
897
|
# @note Only the first error in the +#errors+ array for each attribute will
|
890
898
|
# be included.
|
@@ -893,8 +901,8 @@ module GOVUKDesignSystemFormBuilder
|
|
893
901
|
# = f.govuk_error_summary 'Uh-oh, spaghettios'
|
894
902
|
#
|
895
903
|
# @see https://design-system.service.gov.uk/components/error-summary/ GOV.UK error summary
|
896
|
-
def govuk_error_summary(title = config.default_error_summary_title, link_base_errors_to: nil)
|
897
|
-
Elements::ErrorSummary.new(self, object_name, title, link_base_errors_to: link_base_errors_to).html
|
904
|
+
def govuk_error_summary(title = config.default_error_summary_title, link_base_errors_to: nil, **kwargs)
|
905
|
+
Elements::ErrorSummary.new(self, object_name, title, link_base_errors_to: link_base_errors_to, **kwargs).html
|
898
906
|
end
|
899
907
|
|
900
908
|
# Generates a fieldset containing the contents of the block
|
@@ -910,6 +918,7 @@ module GOVUKDesignSystemFormBuilder
|
|
910
918
|
# @option caption text [String] the caption text
|
911
919
|
# @option caption size [String] the size of the caption, can be +xl+, +l+ or +m+. Defaults to +m+
|
912
920
|
# @option caption kwargs [Hash] additional arguments are applied as attributes on the caption +span+ element
|
921
|
+
# @option kwargs [Hash] kwargs additional arguments are applied as attributes to the +input+ element
|
913
922
|
#
|
914
923
|
# @example A fieldset containing address fields
|
915
924
|
# = f.govuk_fieldset legend: { text: 'Address' } do
|
@@ -925,8 +934,8 @@ module GOVUKDesignSystemFormBuilder
|
|
925
934
|
# @see https://design-system.service.gov.uk/components/fieldset/ GOV.UK fieldset
|
926
935
|
# @see https://design-system.service.gov.uk/styles/typography/#headings-with-captions Headings with captions
|
927
936
|
# @return [ActiveSupport::SafeBuffer] HTML output
|
928
|
-
def govuk_fieldset(legend: { text: 'Fieldset heading' }, caption: {}, described_by: nil, &block)
|
929
|
-
Containers::Fieldset.new(self, legend: legend, caption: caption, described_by: described_by, &block).html
|
937
|
+
def govuk_fieldset(legend: { text: 'Fieldset heading' }, caption: {}, described_by: nil, **kwargs, &block)
|
938
|
+
Containers::Fieldset.new(self, legend: legend, caption: caption, described_by: described_by, **kwargs, &block).html
|
930
939
|
end
|
931
940
|
|
932
941
|
# Generates an input of type +file+
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module GOVUKDesignSystemFormBuilder
|
2
|
+
module Containers
|
3
|
+
class ButtonGroup < Base
|
4
|
+
def initialize(builder, buttons)
|
5
|
+
super(builder, nil, nil)
|
6
|
+
|
7
|
+
@buttons = buttons
|
8
|
+
end
|
9
|
+
|
10
|
+
def html
|
11
|
+
tag.div(@buttons, class: %(#{brand}-button-group))
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -18,8 +18,8 @@ module GOVUKDesignSystemFormBuilder
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def html
|
21
|
-
Containers::FormGroup.new(
|
22
|
-
Containers::Fieldset.new(
|
21
|
+
Containers::FormGroup.new(*bound, **@form_group).html do
|
22
|
+
Containers::Fieldset.new(*bound, **fieldset_options).html do
|
23
23
|
safe_join([hint_element, error_element, hidden_field, checkboxes])
|
24
24
|
end
|
25
25
|
end
|
@@ -1,17 +1,20 @@
|
|
1
1
|
module GOVUKDesignSystemFormBuilder
|
2
2
|
module Containers
|
3
3
|
class Fieldset < Base
|
4
|
-
|
4
|
+
include Traits::HTMLAttributes
|
5
|
+
|
6
|
+
def initialize(builder, object_name = nil, attribute_name = nil, legend: {}, caption: {}, described_by: nil, **kwargs, &block)
|
5
7
|
super(builder, object_name, attribute_name, &block)
|
6
8
|
|
7
|
-
@legend
|
8
|
-
@caption
|
9
|
-
@described_by
|
10
|
-
@attribute_name
|
9
|
+
@legend = legend
|
10
|
+
@caption = caption
|
11
|
+
@described_by = described_by(described_by)
|
12
|
+
@attribute_name = attribute_name
|
13
|
+
@html_attributes = kwargs
|
11
14
|
end
|
12
15
|
|
13
16
|
def html
|
14
|
-
tag.fieldset(**
|
17
|
+
tag.fieldset(**attributes(@html_attributes)) do
|
15
18
|
safe_join([legend_element, (@block_content || yield)])
|
16
19
|
end
|
17
20
|
end
|
@@ -26,14 +29,14 @@ module GOVUKDesignSystemFormBuilder
|
|
26
29
|
end
|
27
30
|
|
28
31
|
def classes
|
29
|
-
%(#{brand}-fieldset)
|
32
|
+
[%(#{brand}-fieldset)]
|
30
33
|
end
|
31
34
|
|
32
35
|
def legend_element
|
33
36
|
@legend_element ||= if @legend.nil?
|
34
37
|
Elements::Null.new
|
35
38
|
else
|
36
|
-
Elements::Legend.new(
|
39
|
+
Elements::Legend.new(*bound, **legend_options)
|
37
40
|
end
|
38
41
|
end
|
39
42
|
|
@@ -18,8 +18,8 @@ module GOVUKDesignSystemFormBuilder
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def html
|
21
|
-
Containers::FormGroup.new(
|
22
|
-
Containers::Fieldset.new(
|
21
|
+
Containers::FormGroup.new(*bound, **@form_group).html do
|
22
|
+
Containers::Fieldset.new(*bound, **fieldset_options).html do
|
23
23
|
safe_join([hint_element, error_element, radios])
|
24
24
|
end
|
25
25
|
end
|
@@ -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: nil, size:
|
6
|
+
def initialize(builder, object_name, attribute_name, text: nil, size: config.default_caption_size, **kwargs)
|
7
7
|
super(builder, object_name, attribute_name)
|
8
8
|
|
9
9
|
@text = text(text)
|
@@ -12,7 +12,7 @@ module GOVUKDesignSystemFormBuilder
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def html
|
15
|
-
return
|
15
|
+
return unless active?
|
16
16
|
|
17
17
|
tag.span(@text, class: @size_class, **@html_attributes)
|
18
18
|
end
|
@@ -28,7 +28,7 @@ module GOVUKDesignSystemFormBuilder
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def size_class(size)
|
31
|
-
case size
|
31
|
+
case size
|
32
32
|
when 'xl' then %(#{brand}-caption-xl)
|
33
33
|
when 'l' then %(#{brand}-caption-l)
|
34
34
|
when 'm' then %(#{brand}-caption-m)
|
@@ -6,24 +6,25 @@ module GOVUKDesignSystemFormBuilder
|
|
6
6
|
include Traits::Hint
|
7
7
|
include Traits::Supplemental
|
8
8
|
|
9
|
-
def initialize(builder, object_name, attribute_name, collection, value_method:, text_method:, hint:, legend:, caption:, small:, classes:, form_group:, hint_method: nil, &block)
|
9
|
+
def initialize(builder, object_name, attribute_name, collection, value_method:, text_method:, hint:, legend:, caption:, small:, classes:, form_group:, include_hidden:, hint_method: nil, &block)
|
10
10
|
super(builder, object_name, attribute_name, &block)
|
11
11
|
|
12
|
-
@collection
|
13
|
-
@value_method
|
14
|
-
@text_method
|
15
|
-
@hint_method
|
16
|
-
@small
|
17
|
-
@legend
|
18
|
-
@caption
|
19
|
-
@hint
|
20
|
-
@classes
|
21
|
-
@form_group
|
12
|
+
@collection = collection
|
13
|
+
@value_method = value_method
|
14
|
+
@text_method = text_method
|
15
|
+
@hint_method = hint_method
|
16
|
+
@small = small
|
17
|
+
@legend = legend
|
18
|
+
@caption = caption
|
19
|
+
@hint = hint
|
20
|
+
@classes = classes
|
21
|
+
@form_group = form_group
|
22
|
+
@include_hidden = include_hidden
|
22
23
|
end
|
23
24
|
|
24
25
|
def html
|
25
|
-
Containers::FormGroup.new(
|
26
|
-
Containers::Fieldset.new(
|
26
|
+
Containers::FormGroup.new(*bound, **@form_group).html do
|
27
|
+
Containers::Fieldset.new(*bound, **fieldset_options).html do
|
27
28
|
safe_join([supplemental_content, hint_element, error_element, check_boxes])
|
28
29
|
end
|
29
30
|
end
|
@@ -56,7 +57,7 @@ module GOVUKDesignSystemFormBuilder
|
|
56
57
|
def collection
|
57
58
|
link_errors = has_errors?
|
58
59
|
|
59
|
-
@builder.collection_check_boxes(@attribute_name, @collection, @value_method, @text_method) do |check_box|
|
60
|
+
@builder.collection_check_boxes(@attribute_name, @collection, @value_method, @text_method, include_hidden: @include_hidden) do |check_box|
|
60
61
|
Elements::CheckBoxes::CollectionCheckBox.new(
|
61
62
|
@builder,
|
62
63
|
@object_name,
|