govuk_design_system_formbuilder 1.1.10 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/lib/govuk_design_system_formbuilder.rb +7 -1
- data/lib/govuk_design_system_formbuilder/base.rb +12 -0
- data/lib/govuk_design_system_formbuilder/builder.rb +311 -74
- data/lib/govuk_design_system_formbuilder/containers/character_count.rb +2 -2
- data/lib/govuk_design_system_formbuilder/containers/check_boxes.rb +5 -3
- data/lib/govuk_design_system_formbuilder/containers/check_boxes_fieldset.rb +3 -2
- data/lib/govuk_design_system_formbuilder/containers/fieldset.rb +37 -16
- data/lib/govuk_design_system_formbuilder/containers/form_group.rb +4 -2
- data/lib/govuk_design_system_formbuilder/containers/radio_buttons_fieldset.rb +3 -2
- data/lib/govuk_design_system_formbuilder/containers/radios.rb +7 -5
- data/lib/govuk_design_system_formbuilder/elements/caption.rb +34 -0
- data/lib/govuk_design_system_formbuilder/elements/check_boxes/collection.rb +3 -2
- data/lib/govuk_design_system_formbuilder/elements/check_boxes/collection_check_box.rb +5 -3
- data/lib/govuk_design_system_formbuilder/elements/check_boxes/fieldset_check_box.rb +7 -4
- data/lib/govuk_design_system_formbuilder/elements/check_boxes/label.rb +8 -2
- data/lib/govuk_design_system_formbuilder/elements/date.rb +15 -11
- data/lib/govuk_design_system_formbuilder/elements/error_message.rb +4 -2
- data/lib/govuk_design_system_formbuilder/elements/error_summary.rb +4 -4
- data/lib/govuk_design_system_formbuilder/elements/file.rb +6 -3
- data/lib/govuk_design_system_formbuilder/elements/hint.rb +5 -3
- data/lib/govuk_design_system_formbuilder/elements/inputs/email.rb +2 -0
- data/lib/govuk_design_system_formbuilder/elements/inputs/number.rb +2 -0
- data/lib/govuk_design_system_formbuilder/elements/inputs/password.rb +2 -0
- data/lib/govuk_design_system_formbuilder/elements/inputs/phone.rb +2 -0
- data/lib/govuk_design_system_formbuilder/elements/inputs/text.rb +2 -0
- data/lib/govuk_design_system_formbuilder/elements/inputs/url.rb +2 -0
- data/lib/govuk_design_system_formbuilder/elements/label.rb +30 -20
- data/lib/govuk_design_system_formbuilder/elements/radios/collection.rb +3 -2
- data/lib/govuk_design_system_formbuilder/elements/radios/collection_radio_button.rb +4 -2
- data/lib/govuk_design_system_formbuilder/elements/radios/fieldset_radio_button.rb +7 -4
- data/lib/govuk_design_system_formbuilder/elements/select.rb +6 -3
- data/lib/govuk_design_system_formbuilder/elements/submit.rb +10 -7
- data/lib/govuk_design_system_formbuilder/elements/text_area.rb +12 -5
- data/lib/govuk_design_system_formbuilder/traits/caption.rb +24 -0
- data/lib/govuk_design_system_formbuilder/traits/input.rb +16 -16
- data/lib/govuk_design_system_formbuilder/traits/label.rb +12 -1
- data/lib/govuk_design_system_formbuilder/traits/localisation.rb +18 -10
- data/lib/govuk_design_system_formbuilder/version.rb +1 -1
- metadata +16 -43
- data/lib/govuk_design_system_formbuilder/elements/check_boxes/hint.rb +0 -32
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: db9e3152ce56de44fbcb67ed0110cf9613ed0180597baf36cbc93316c41c72c5
|
4
|
+
data.tar.gz: 5df5f7b19116b6846cbe305e14006993b86194db2677017c29344f7132ad6f54
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bfc94cbbf30b95c91c136dd00db6d666d631d94edcecb0e673eb9e03d0771b739b00a58708c967cf720a4dc1bc10af929faea8aee8b6f44ab2916434a0c0bc7f
|
7
|
+
data.tar.gz: 721f67fb7fa2eb2883fd6d47c89b4aa86b4dcdae371501fb151d9d050132be1a59a739197216c1726566fb1f28bbba9a64fbc41dd8eec4b946abaddddb06bc3f
|
data/README.md
CHANGED
@@ -7,10 +7,10 @@
|
|
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.
|
10
|
+
[![GOV.UK Design System Version](https://img.shields.io/badge/GOV.UK%20Design%20System-3.7.0-brightgreen)](https://design-system.service.gov.uk)
|
11
11
|
|
12
12
|
This gem provides a easy-to-use form builder that generates forms that are
|
13
|
-
fully-compliant with version 3.
|
13
|
+
fully-compliant with version 3.7.0 of the [GOV.UK Design System](https://design-system.service.gov.uk/),
|
14
14
|
minimising the amount of markup you need to write.
|
15
15
|
|
16
16
|
In addition to the basic markup, the more-advanced functionality of the Design
|
@@ -11,6 +11,9 @@ module GOVUKDesignSystemFormBuilder
|
|
11
11
|
|
12
12
|
# Default form builder configuration
|
13
13
|
#
|
14
|
+
# * +:brand+ sets the value used to prefix all classes, used to allow the
|
15
|
+
# builder to be branded for alternative (similar) design systems.
|
16
|
+
#
|
14
17
|
# * +:default_legend_size+ controls the default size of legend text.
|
15
18
|
# Can be either +xl+, +l+, +m+ or +s+.
|
16
19
|
#
|
@@ -38,6 +41,8 @@ module GOVUKDesignSystemFormBuilder
|
|
38
41
|
# particular context, allowing them to be independently customised.
|
39
42
|
# ===
|
40
43
|
DEFAULTS = {
|
44
|
+
brand: 'govuk',
|
45
|
+
|
41
46
|
default_legend_size: 'm',
|
42
47
|
default_legend_tag: 'h1',
|
43
48
|
default_submit_button_text: 'Continue',
|
@@ -47,7 +52,8 @@ module GOVUKDesignSystemFormBuilder
|
|
47
52
|
localisation_schema_fallback: %i(helpers __context__),
|
48
53
|
localisation_schema_label: nil,
|
49
54
|
localisation_schema_hint: nil,
|
50
|
-
localisation_schema_legend: nil
|
55
|
+
localisation_schema_legend: nil,
|
56
|
+
localisation_schema_caption: nil
|
51
57
|
}.freeze
|
52
58
|
|
53
59
|
DEFAULTS.each_key { |k| config_accessor(k) { DEFAULTS[k] } }
|
@@ -1,4 +1,12 @@
|
|
1
1
|
module GOVUKDesignSystemFormBuilder
|
2
|
+
module PrefixableArray
|
3
|
+
refine Array do
|
4
|
+
def prefix(text, delimiter: '-')
|
5
|
+
map { |item| text + delimiter + item }
|
6
|
+
end
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
2
10
|
class Base
|
3
11
|
delegate :capture, :content_tag, :safe_join, :tag, :raw, :link_to, to: :@builder
|
4
12
|
delegate :config, to: GOVUKDesignSystemFormBuilder
|
@@ -12,6 +20,10 @@ module GOVUKDesignSystemFormBuilder
|
|
12
20
|
|
13
21
|
private
|
14
22
|
|
23
|
+
def brand(override = nil)
|
24
|
+
override || config.brand
|
25
|
+
end
|
26
|
+
|
15
27
|
# returns the id value used for the input
|
16
28
|
#
|
17
29
|
# @note field_id is overridden so that the error summary can link to the
|
@@ -8,15 +8,19 @@ module GOVUKDesignSystemFormBuilder
|
|
8
8
|
# @param hint_text [String] The content of the hint. No hint will be injected if left +nil+
|
9
9
|
# @param width [Integer,String] sets the width of the input, can be +2+, +3+ +4+, +5+, +10+ or +20+ characters
|
10
10
|
# or +one-quarter+, +one-third+, +one-half+, +two-thirds+ or +full+ width of the container
|
11
|
-
# @param [Hash]
|
11
|
+
# @param label [Hash,Proc] configures or sets the associated label content
|
12
12
|
# @option label text [String] the label text
|
13
13
|
# @option label size [String] the size of the label font, can be +xl+, +l+, +m+, +s+ or nil
|
14
14
|
# @option label tag [Symbol,String] the label's wrapper tag, intended to allow labels to act as page headings
|
15
15
|
# @option label hidden [Boolean] control the visability of the label. Hidden labels will stil be read by screenreaders
|
16
|
-
# @
|
16
|
+
# @param caption [Hash] configures or sets the caption content which is inserted above the label
|
17
|
+
# @option caption text [String] the caption text
|
18
|
+
# @option caption size [String] the size of the caption, can be +xl+, +l+ or +m+. Defaults to +m+
|
19
|
+
# @option args [Hash] args additional arguments are applied as attributes to the +input+ element
|
17
20
|
# @param block [Block] arbitrary HTML that will be rendered between the hint and the input
|
18
21
|
# @return [ActiveSupport::SafeBuffer] HTML output
|
19
22
|
# @see https://design-system.service.gov.uk/components/text-input/ GOV.UK Text input
|
23
|
+
# @see https://design-system.service.gov.uk/styles/typography/#headings-with-captions Headings with captions
|
20
24
|
#
|
21
25
|
# @example A required full name field with a placeholder
|
22
26
|
# = f.govuk_text_field :name,
|
@@ -24,8 +28,20 @@ module GOVUKDesignSystemFormBuilder
|
|
24
28
|
# hint_text: 'It says it on your birth certificate',
|
25
29
|
# required: true,
|
26
30
|
# placeholder: 'Ralph Wiggum'
|
27
|
-
|
28
|
-
|
31
|
+
#
|
32
|
+
# @example A text field with injected content
|
33
|
+
# = f.govuk_text_field :pseudonym,
|
34
|
+
# label: { text: 'Pseudonym' } do
|
35
|
+
#
|
36
|
+
# p.govuk-inset-text
|
37
|
+
# | Ensure your stage name is unique
|
38
|
+
#
|
39
|
+
# @example A text field with the label supplied as a proc
|
40
|
+
# = f.govuk_text_field :callsign,
|
41
|
+
# label: -> { tag.h3('Call-sign') }
|
42
|
+
#
|
43
|
+
def govuk_text_field(attribute_name, hint_text: nil, label: {}, caption: {}, width: nil, **args, &block)
|
44
|
+
Elements::Inputs::Text.new(self, object_name, attribute_name, hint_text: hint_text, label: label, caption: caption, width: width, **args, &block).html
|
29
45
|
end
|
30
46
|
|
31
47
|
# Generates a input of type +tel+
|
@@ -34,16 +50,20 @@ module GOVUKDesignSystemFormBuilder
|
|
34
50
|
# @param hint_text [String] The content of the hint. No hint will be injected if left +nil+
|
35
51
|
# @param width [Integer,String] sets the width of the input, can be +2+, +3+ +4+, +5+, +10+ or +20+ characters
|
36
52
|
# or +one-quarter+, +one-third+, +one-half+, +two-thirds+ or +full+ width of the container
|
37
|
-
# @param [Hash]
|
53
|
+
# @param label [Hash,Proc] configures or sets the associated label content
|
38
54
|
# @option label text [String] the label text
|
39
55
|
# @option label size [String] the size of the label font, can be +xl+, +l+, +m+, +s+ or nil
|
40
56
|
# @option label tag [Symbol,String] the label's wrapper tag, intended to allow labels to act as page headings
|
41
57
|
# @option label hidden [Boolean] control the visability of the label. Hidden labels will stil be read by screenreaders
|
42
|
-
# @
|
58
|
+
# @param caption [Hash] configures or sets the caption content which is inserted above the label
|
59
|
+
# @option caption text [String] the caption text
|
60
|
+
# @option caption size [String] the size of the caption, can be +xl+, +l+ or +m+. Defaults to +m+
|
61
|
+
# @option args [Hash] args additional arguments are applied as attributes to the +input+ element
|
43
62
|
# @param block [Block] arbitrary HTML that will be rendered between the hint and the input
|
44
63
|
# @return [ActiveSupport::SafeBuffer] HTML output
|
45
64
|
# @see https://design-system.service.gov.uk/components/text-input/ GOV.UK Text input
|
46
65
|
# @see https://design-system.service.gov.uk/patterns/telephone-numbers/ GOV.UK Telephone number patterns
|
66
|
+
# @see https://design-system.service.gov.uk/styles/typography/#headings-with-captions Headings with captions
|
47
67
|
#
|
48
68
|
# @example A required phone number field with a placeholder
|
49
69
|
# = f.govuk_phone_field :phone_number,
|
@@ -51,8 +71,20 @@ module GOVUKDesignSystemFormBuilder
|
|
51
71
|
# hint_text: 'Include the dialling code',
|
52
72
|
# required: true,
|
53
73
|
# placeholder: '0123 456 789'
|
54
|
-
|
55
|
-
|
74
|
+
#
|
75
|
+
# @example A phone field with injected content
|
76
|
+
# = f.govuk_phone_field :fax_number,
|
77
|
+
# label: { text: 'Fax number' } do
|
78
|
+
#
|
79
|
+
# p.govuk-inset-text
|
80
|
+
# | Yes, fax machines are still a thing
|
81
|
+
#
|
82
|
+
# @example A phone field with the label supplied as a proc
|
83
|
+
# = f.govuk_phone_field :work_number,
|
84
|
+
# label: -> { tag.h3('Work number') }
|
85
|
+
#
|
86
|
+
def govuk_phone_field(attribute_name, hint_text: nil, label: {}, caption: {}, width: nil, **args, &block)
|
87
|
+
Elements::Inputs::Phone.new(self, object_name, attribute_name, hint_text: hint_text, label: label, caption: caption, width: width, **args, &block).html
|
56
88
|
end
|
57
89
|
|
58
90
|
# Generates a input of type +email+
|
@@ -61,23 +93,39 @@ module GOVUKDesignSystemFormBuilder
|
|
61
93
|
# @param hint_text [String] The content of the hint. No hint will be injected if left +nil+
|
62
94
|
# @param width [Integer,String] sets the width of the input, can be +2+, +3+ +4+, +5+, +10+ or +20+ characters
|
63
95
|
# or +one-quarter+, +one-third+, +one-half+, +two-thirds+ or +full+ width of the container
|
64
|
-
# @param [Hash]
|
96
|
+
# @param label [Hash,Proc] configures or sets the associated label content
|
65
97
|
# @option label text [String] the label text
|
66
98
|
# @option label size [String] the size of the label font, can be +xl+, +l+, +m+, +s+ or nil
|
67
99
|
# @option label tag [Symbol,String] the label's wrapper tag, intended to allow labels to act as page headings
|
68
100
|
# @option label hidden [Boolean] control the visability of the label. Hidden labels will stil be read by screenreaders
|
69
|
-
# @
|
101
|
+
# @param caption [Hash] configures or sets the caption content which is inserted above the label
|
102
|
+
# @option caption text [String] the caption text
|
103
|
+
# @option caption size [String] the size of the caption, can be +xl+, +l+ or +m+. Defaults to +m+
|
104
|
+
# @option args [Hash] args additional arguments are applied as attributes to the +input+ element
|
70
105
|
# @param block [Block] arbitrary HTML that will be rendered between the hint and the input
|
71
106
|
# @return [ActiveSupport::SafeBuffer] HTML output
|
72
107
|
# @see https://design-system.service.gov.uk/components/text-input/ GOV.UK Text input
|
73
108
|
# @see https://design-system.service.gov.uk/patterns/email-addresses/ GOV.UK Email address patterns
|
109
|
+
# @see https://design-system.service.gov.uk/styles/typography/#headings-with-captions Headings with captions
|
74
110
|
#
|
75
111
|
# @example An email address field with a placeholder
|
76
112
|
# = f.govuk_email_field :email_address,
|
77
113
|
# label: { text: 'Enter your email address' },
|
78
114
|
# placeholder: 'ralph.wiggum@springfield.edu'
|
79
|
-
|
80
|
-
|
115
|
+
#
|
116
|
+
# @example An email field with injected content
|
117
|
+
# = f.govuk_phone_field :work_email,
|
118
|
+
# label: { text: 'Work email address' } do
|
119
|
+
#
|
120
|
+
# p.govuk-inset-text
|
121
|
+
# | Use your work address
|
122
|
+
#
|
123
|
+
# @example A email field with the label supplied as a proc
|
124
|
+
# = f.govuk_email_field :personal_email,
|
125
|
+
# label: -> { tag.h3('Personal email address') }
|
126
|
+
#
|
127
|
+
def govuk_email_field(attribute_name, hint_text: nil, label: {}, caption: {}, width: nil, **args, &block)
|
128
|
+
Elements::Inputs::Email.new(self, object_name, attribute_name, hint_text: hint_text, label: label, caption: caption, width: width, **args, &block).html
|
81
129
|
end
|
82
130
|
|
83
131
|
# Generates a input of type +password+
|
@@ -86,22 +134,38 @@ module GOVUKDesignSystemFormBuilder
|
|
86
134
|
# @param hint_text [String] The content of the hint. No hint will be injected if left +nil+
|
87
135
|
# @param width [Integer,String] sets the width of the input, can be +2+, +3+ +4+, +5+, +10+ or +20+ characters
|
88
136
|
# or +one-quarter+, +one-third+, +one-half+, +two-thirds+ or +full+ width of the container
|
89
|
-
# @param [Hash]
|
137
|
+
# @param label [Hash,Proc] configures or sets the associated label content
|
90
138
|
# @option label text [String] the label text
|
91
139
|
# @option label size [String] the size of the label font, can be +xl+, +l+, +m+, +s+ or nil
|
92
140
|
# @option label tag [Symbol,String] the label's wrapper tag, intended to allow labels to act as page headings
|
93
141
|
# @option label hidden [Boolean] control the visability of the label. Hidden labels will stil be read by screenreaders
|
94
|
-
# @
|
142
|
+
# @param caption [Hash] configures or sets the caption content which is inserted above the label
|
143
|
+
# @option caption text [String] the caption text
|
144
|
+
# @option caption size [String] the size of the caption, can be +xl+, +l+ or +m+. Defaults to +m+
|
145
|
+
# @option args [Hash] args additional arguments are applied as attributes to the +input+ element
|
95
146
|
# @param block [Block] arbitrary HTML that will be rendered between the hint and the input
|
96
147
|
# @return [ActiveSupport::SafeBuffer] HTML output
|
97
148
|
# @see https://design-system.service.gov.uk/components/text-input/ GOV.UK Text input
|
98
149
|
# @see https://design-system.service.gov.uk/patterns/passwords/ GOV.UK Password patterns
|
150
|
+
# @see https://design-system.service.gov.uk/styles/typography/#headings-with-captions Headings with captions
|
99
151
|
#
|
100
152
|
# @example A password field
|
101
153
|
# = f.govuk_password_field :password,
|
102
154
|
# label: { text: 'Enter your password' }
|
103
|
-
|
104
|
-
|
155
|
+
#
|
156
|
+
# @example A password field with injected content
|
157
|
+
# = f.govuk_password_field :password,
|
158
|
+
# label: { text: 'Password' } do
|
159
|
+
#
|
160
|
+
# p.govuk-inset-text
|
161
|
+
# | Ensure your password is at least 16 characters long
|
162
|
+
#
|
163
|
+
# @example A password field with the label supplied as a proc
|
164
|
+
# = f.govuk_password_field :passcode,
|
165
|
+
# label: -> { tag.h3('What is your secret pass code?') }
|
166
|
+
#
|
167
|
+
def govuk_password_field(attribute_name, hint_text: nil, label: {}, width: nil, caption: {}, **args, &block)
|
168
|
+
Elements::Inputs::Password.new(self, object_name, attribute_name, hint_text: hint_text, label: label, caption: caption, width: width, **args, &block).html
|
105
169
|
end
|
106
170
|
|
107
171
|
# Generates a input of type +url+
|
@@ -110,23 +174,39 @@ module GOVUKDesignSystemFormBuilder
|
|
110
174
|
# @param hint_text [String] The content of the hint. No hint will be injected if left +nil+
|
111
175
|
# @param width [Integer,String] sets the width of the input, can be +2+, +3+ +4+, +5+, +10+ or +20+ characters
|
112
176
|
# or +one-quarter+, +one-third+, +one-half+, +two-thirds+ or +full+ width of the container
|
113
|
-
# @param [Hash]
|
177
|
+
# @param label [Hash,Proc] configures or sets the associated label content
|
114
178
|
# @option label text [String] the label text
|
115
179
|
# @option label size [String] the size of the label font, can be +xl+, +l+, +m+, +s+ or nil
|
116
180
|
# @option label tag [Symbol,String] the label's wrapper tag, intended to allow labels to act as page headings
|
117
181
|
# @option label hidden [Boolean] control the visability of the label. Hidden labels will stil be read by screenreaders
|
118
|
-
# @
|
182
|
+
# @param caption [Hash] configures or sets the caption content which is inserted above the label
|
183
|
+
# @option caption text [String] the caption text
|
184
|
+
# @option caption size [String] the size of the caption, can be +xl+, +l+ or +m+. Defaults to +m+
|
185
|
+
# @option args [Hash] args additional arguments are applied as attributes to the +input+ element
|
119
186
|
# @param block [Block] arbitrary HTML that will be rendered between the hint and the input
|
120
187
|
# @return [ActiveSupport::SafeBuffer] HTML output
|
121
188
|
# @see https://design-system.service.gov.uk/components/text-input/ GOV.UK Text input
|
189
|
+
# @see https://design-system.service.gov.uk/styles/typography/#headings-with-captions Headings with captions
|
122
190
|
#
|
123
191
|
# @example A url field with autocomplete
|
124
192
|
# = f.govuk_url_field :favourite_website,
|
125
193
|
# label: { text: 'Enter your favourite website' },
|
126
194
|
# placeholder: 'https://www.gov.uk',
|
127
195
|
# autocomplete: 'url'
|
128
|
-
|
129
|
-
|
196
|
+
#
|
197
|
+
# @example A url field with injected content
|
198
|
+
# = f.govuk_url_field :personal_website,
|
199
|
+
# label: { text: 'Enter your website' } do
|
200
|
+
#
|
201
|
+
# p.govuk-inset-text
|
202
|
+
# | This will be visible on your profile
|
203
|
+
#
|
204
|
+
# @example A url field with the label supplied as a proc
|
205
|
+
# = f.govuk_url_field :work_website,
|
206
|
+
# label: -> { tag.h3("Enter your company's website") }
|
207
|
+
#
|
208
|
+
def govuk_url_field(attribute_name, hint_text: nil, label: {}, caption: {}, width: nil, **args, &block)
|
209
|
+
Elements::Inputs::URL.new(self, object_name, attribute_name, hint_text: hint_text, label: label, caption: caption, width: width, **args, &block).html
|
130
210
|
end
|
131
211
|
|
132
212
|
# Generates a input of type +number+
|
@@ -135,15 +215,19 @@ module GOVUKDesignSystemFormBuilder
|
|
135
215
|
# @param hint_text [String] The content of the hint. No hint will be injected if left +nil+
|
136
216
|
# @param width [Integer,String] sets the width of the input, can be +2+, +3+ +4+, +5+, +10+ or +20+ characters
|
137
217
|
# or +one-quarter+, +one-third+, +one-half+, +two-thirds+ or +full+ width of the container
|
138
|
-
# @param [Hash]
|
218
|
+
# @param label [Hash,Proc] configures or sets the associated label content
|
139
219
|
# @option label text [String] the label text
|
140
220
|
# @option label size [String] the size of the label font, can be +xl+, +l+, +m+, +s+ or nil
|
141
221
|
# @option label tag [Symbol,String] the label's wrapper tag, intended to allow labels to act as page headings
|
142
222
|
# @option label hidden [Boolean] control the visability of the label. Hidden labels will stil be read by screenreaders
|
223
|
+
# @param caption [Hash] configures or sets the caption content which is inserted above the label
|
224
|
+
# @option caption text [String] the caption text
|
225
|
+
# @option caption size [String] the size of the caption, can be +xl+, +l+ or +m+. Defaults to +m+
|
143
226
|
# @option args [Hash] args additional arguments are applied as attributes to the +input+ element
|
144
227
|
# @param block [Block] arbitrary HTML that will be rendered between the hint and the input
|
145
228
|
# @return [ActiveSupport::SafeBuffer] HTML output
|
146
229
|
# @see https://design-system.service.gov.uk/components/text-input/ GOV.UK Text input
|
230
|
+
# @see https://design-system.service.gov.uk/styles/typography/#headings-with-captions Headings with captions
|
147
231
|
#
|
148
232
|
# @example A number field with placeholder, min, max and step
|
149
233
|
# = f.govuk_number_field :iq,
|
@@ -152,8 +236,21 @@ module GOVUKDesignSystemFormBuilder
|
|
152
236
|
# min: 80,
|
153
237
|
# max: 150,
|
154
238
|
# step: 5
|
155
|
-
|
156
|
-
|
239
|
+
#
|
240
|
+
# @example A number field with injected content
|
241
|
+
# = f.govuk_number_field :height_in_cm,
|
242
|
+
# label: { text: 'Height in centimetres' } do
|
243
|
+
#
|
244
|
+
# p.govuk-inset-text
|
245
|
+
# | If you haven't measured your height in the last 6 months
|
246
|
+
# do it now
|
247
|
+
#
|
248
|
+
# @example A number field with the label supplied as a proc
|
249
|
+
# = f.govuk_url_field :personal_best_over_100m,
|
250
|
+
# label: -> { tag.h3("How many seconds does it take you to run 100m?") }
|
251
|
+
#
|
252
|
+
def govuk_number_field(attribute_name, hint_text: nil, label: {}, caption: {}, width: nil, **args, &block)
|
253
|
+
Elements::Inputs::Number.new(self, object_name, attribute_name, hint_text: hint_text, label: label, caption: caption, width: width, **args, &block).html
|
157
254
|
end
|
158
255
|
|
159
256
|
# Generates a +textarea+ element with a label, optional hint. Also offers
|
@@ -162,11 +259,14 @@ module GOVUKDesignSystemFormBuilder
|
|
162
259
|
#
|
163
260
|
# @param attribute_name [Symbol] The name of the attribute
|
164
261
|
# @param hint_text [String] The content of the hint. No hint will be injected if left +nil+
|
165
|
-
# @param [Hash]
|
262
|
+
# @param label [Hash,Proc] configures or sets the associated label content
|
166
263
|
# @option label text [String] the label text
|
167
264
|
# @option label size [String] the size of the label font, can be +xl+, +l+, +m+, +s+ or nil
|
168
265
|
# @option label tag [Symbol,String] the label's wrapper tag, intended to allow labels to act as page headings
|
169
266
|
# @option label hidden [Boolean] control the visability of the label. Hidden labels will stil be read by screenreaders
|
267
|
+
# @param caption [Hash] configures or sets the caption content which is inserted above the label
|
268
|
+
# @option caption text [String] the caption text
|
269
|
+
# @option caption size [String] the size of the caption, can be +xl+, +l+ or +m+. Defaults to +m+
|
170
270
|
# @param max_words [Integer] adds the GOV.UK max word count
|
171
271
|
# @param max_chars [Integer] adds the GOV.UK max characters count
|
172
272
|
# @param threshold [Integer] only show the +max_words+ and +max_chars+ warnings once a threshold (percentage) is reached
|
@@ -174,17 +274,31 @@ module GOVUKDesignSystemFormBuilder
|
|
174
274
|
# @option args [Hash] args additional arguments are applied as attributes to the +textarea+ element
|
175
275
|
# @param block [Block] arbitrary HTML that will be rendered between the hint and the input
|
176
276
|
# @return [ActiveSupport::SafeBuffer] HTML output
|
277
|
+
# @see https://design-system.service.gov.uk/components/textarea/ GOV.UK text area component
|
177
278
|
# @see https://design-system.service.gov.uk/components/character-count GOV.UK character count component
|
279
|
+
# @see https://design-system.service.gov.uk/styles/typography/#headings-with-captions Headings with captions
|
178
280
|
# @note Setting +max_chars+ or +max_words+ will add a caption beneath the +textarea+ with a live count of words
|
179
281
|
# or characters
|
180
282
|
#
|
181
283
|
# @example A text area with a custom number of rows and a word limit
|
182
|
-
# = f.
|
284
|
+
# = f.govuk_text_area :cv,
|
183
285
|
# label: { text: 'Tell us about your work history' },
|
184
286
|
# rows: 8,
|
185
287
|
# max_words: 300
|
186
|
-
|
187
|
-
|
288
|
+
#
|
289
|
+
# @example A text area with injected content
|
290
|
+
# = f.govuk_text_area :description,
|
291
|
+
# label: { text: 'Where did the incident take place?' } do
|
292
|
+
#
|
293
|
+
# p.govuk-inset-text
|
294
|
+
# | If you don't know exactly leave this section blank
|
295
|
+
#
|
296
|
+
# @example A text area with the label supplied as a proc
|
297
|
+
# = f.govuk_text_area :instructions,
|
298
|
+
# label: -> { tag.h3("How do you set it up?") }
|
299
|
+
#
|
300
|
+
def govuk_text_area(attribute_name, hint_text: nil, label: {}, caption: {}, max_words: nil, max_chars: nil, rows: 5, threshold: nil, **args, &block)
|
301
|
+
Elements::TextArea.new(self, object_name, attribute_name, hint_text: hint_text, label: label, caption: caption, max_words: max_words, max_chars: max_chars, rows: rows, threshold: threshold, **args, &block).html
|
188
302
|
end
|
189
303
|
|
190
304
|
# Generates a +select+ element containing +option+ for each member in the provided collection
|
@@ -200,7 +314,25 @@ module GOVUKDesignSystemFormBuilder
|
|
200
314
|
# @option label hidden [Boolean] control the visability of the label. Hidden labels will stil be read by screenreaders
|
201
315
|
# @param block [Block] arbitrary HTML that will be rendered between the hint and the input
|
202
316
|
# @return [ActiveSupport::SafeBuffer] HTML output
|
203
|
-
|
317
|
+
#
|
318
|
+
# @example A select box with hint
|
319
|
+
# = f.govuk_collection_select :grade,
|
320
|
+
# @grades,
|
321
|
+
# :id,
|
322
|
+
# :name,
|
323
|
+
# hint_text: "If you took the test more than once enter your highest grade"
|
324
|
+
#
|
325
|
+
# @example A select box with injected content
|
326
|
+
# = f.govuk_collection_select(:favourite_colour, @colours, :id, :name) do
|
327
|
+
#
|
328
|
+
# p.govuk-inset-text
|
329
|
+
# | Select the closest match
|
330
|
+
#
|
331
|
+
# @example A select box with the label supplied as a proc
|
332
|
+
# = f.govuk_collection_select(:team, @teams, :id, :name) do
|
333
|
+
# label: -> { tag.h3("Which team did you represent?") }
|
334
|
+
#
|
335
|
+
def govuk_collection_select(attribute_name, collection, value_method, text_method, options: {}, html_options: {}, hint_text: nil, label: {}, caption: {}, &block)
|
204
336
|
Elements::Select.new(
|
205
337
|
self,
|
206
338
|
object_name,
|
@@ -210,6 +342,7 @@ module GOVUKDesignSystemFormBuilder
|
|
210
342
|
text_method: text_method,
|
211
343
|
hint_text: hint_text,
|
212
344
|
label: label,
|
345
|
+
caption: caption,
|
213
346
|
options: options,
|
214
347
|
html_options: html_options,
|
215
348
|
&block
|
@@ -229,19 +362,25 @@ module GOVUKDesignSystemFormBuilder
|
|
229
362
|
# @param collection [Enumerable<Object>] Options to be added to the +select+ element
|
230
363
|
# @param value_method [Symbol, Proc] The method called against each member of the collection to provide the value.
|
231
364
|
# When a +Proc+ is provided it must take a single argument that is a single member of the collection
|
232
|
-
# @param text_method [Symbol, Proc] The method called against each member of the collection to provide the label text.
|
233
|
-
# When a +Proc+ is provided it must take a single argument that is a single member of the collection
|
234
|
-
#
|
235
|
-
#
|
365
|
+
# @param text_method [Symbol, Proc, nil] The method called against each member of the collection to provide the label text.
|
366
|
+
# When a +Proc+ is provided it must take a single argument that is a single member of the collection.
|
367
|
+
# When a +nil+ value is provided the label text will be retrieved from the locale.
|
368
|
+
# @param hint_method [Symbol, Proc, nil] The method called against each member of the collection to provide the hint text.
|
369
|
+
# When a +Proc+ is provided it must take a single argument that is a single member of the collection.
|
370
|
+
# When a +nil+ value is provided the hint text will be retrieved from the locale. This is the default and param can be omitted.
|
236
371
|
# @param hint_text [String] The content of the fieldset hint. No hint will be injected if left +nil+
|
237
|
-
# @param legend [Hash] options for configuring the legend
|
372
|
+
# @param legend [Hash,Proc] options for configuring the legend
|
238
373
|
# @param inline [Boolean] controls whether the radio buttons are displayed inline or not
|
239
374
|
# @param small [Boolean] controls whether small radio buttons are used instead of regular-sized ones
|
240
375
|
# @param bold_labels [Boolean] controls whether the radio button labels are bold
|
241
376
|
# @param classes [String] Classes to add to the radio button container.
|
242
377
|
# @option legend text [String] the fieldset legend's text content
|
243
378
|
# @option legend size [String] the size of the fieldset legend font, can be +xl+, +l+, +m+ or +s+
|
244
|
-
# @option legend tag [Symbol,String] the tag used for the fieldset's header, defaults to +h1
|
379
|
+
# @option legend tag [Symbol,String] the tag used for the fieldset's header, defaults to +h1+
|
380
|
+
# @option legend hidden [Boolean] control the visibility of the legend. Hidden legends will still be read by screenreaders
|
381
|
+
# @param caption [Hash] configures or sets the caption content which is inserted above the legend
|
382
|
+
# @option caption text [String] the caption text
|
383
|
+
# @option caption size [String] the size of the caption, can be +xl+, +l+ or +m+. Defaults to +m+
|
245
384
|
# @return [ActiveSupport::SafeBuffer] HTML output
|
246
385
|
#
|
247
386
|
# @example A collection of radio buttons for favourite colours, labels capitalised via a proc
|
@@ -259,7 +398,24 @@ module GOVUKDesignSystemFormBuilder
|
|
259
398
|
# legend: { text: 'Pick your favourite colour', size: 'm' },
|
260
399
|
# hint_text: 'If you cannot find the exact match choose something close',
|
261
400
|
# inline: false
|
262
|
-
|
401
|
+
#
|
402
|
+
# @example A collection of radio buttons for grades with injected content
|
403
|
+
# = f.govuk_collection_radio_buttons :grade,
|
404
|
+
# @grades,
|
405
|
+
# :id,
|
406
|
+
# :name do
|
407
|
+
#
|
408
|
+
# p.govuk-inset-text
|
409
|
+
# | If you took the test more than once enter your highest grade
|
410
|
+
#
|
411
|
+
# @example A collection of radio buttons with the legend supplied as a proc
|
412
|
+
# = f.govuk_collection_radio_buttons :category,
|
413
|
+
# @categories,
|
414
|
+
# :id,
|
415
|
+
# :name,
|
416
|
+
# legend: -> { tag.h3('Which category do you belong to?') }
|
417
|
+
#
|
418
|
+
def govuk_collection_radio_buttons(attribute_name, collection, value_method, text_method, hint_method = nil, hint_text: nil, legend: {}, caption: {}, inline: false, small: false, bold_labels: false, classes: nil, &block)
|
263
419
|
Elements::Radios::Collection.new(
|
264
420
|
self,
|
265
421
|
object_name,
|
@@ -270,6 +426,7 @@ module GOVUKDesignSystemFormBuilder
|
|
270
426
|
hint_method: hint_method,
|
271
427
|
hint_text: hint_text,
|
272
428
|
legend: legend,
|
429
|
+
caption: caption,
|
273
430
|
inline: inline,
|
274
431
|
small: small,
|
275
432
|
bold_labels: bold_labels,
|
@@ -282,29 +439,46 @@ module GOVUKDesignSystemFormBuilder
|
|
282
439
|
#
|
283
440
|
# @note The intention is to use {#govuk_radio_button} and {#govuk_radio_divider} within the passed-in block
|
284
441
|
#
|
442
|
+
# @note To ensure the {#govuk_error_summary} link functions correctly ensure the first {#govuk_radio_button}
|
443
|
+
# is set to +link_errors: true+
|
444
|
+
#
|
285
445
|
# @param attribute_name [Symbol] The name of the attribute
|
286
446
|
# @param hint_text [String] The content of the fieldset hint. No hint will be injected if left +nil+
|
287
|
-
# @param legend [Hash] options for configuring the legend
|
447
|
+
# @param legend [Hash,Proc] options for configuring the legend
|
288
448
|
# @param inline [Boolean] controls whether the radio buttons are displayed inline or not
|
289
449
|
# @param small [Boolean] controls whether small radio buttons are used instead of regular-sized ones
|
290
450
|
# @option legend text [String] the fieldset legend's text content
|
291
451
|
# @option legend size [String] the size of the fieldset legend font, can be +xl+, +l+, +m+ or +s+
|
292
452
|
# @option legend tag [Symbol,String] the tag used for the fieldset's header, defaults to +h1+
|
453
|
+
# @option legend hidden [Boolean] control the visibility of the legend. Hidden legends will still be read by screenreaders
|
454
|
+
# @param caption [Hash] configures or sets the caption content which is inserted above the legend
|
455
|
+
# @option caption text [String] the caption text
|
456
|
+
# @option caption size [String] the size of the caption, can be +xl+, +l+ or +m+. Defaults to +m+
|
293
457
|
# @param block [Block] a block of HTML that will be used to populate the fieldset
|
294
458
|
# @param classes [String] Classes to add to the radio button container.
|
295
459
|
# @see https://design-system.service.gov.uk/components/radios/ GOV.UK Radios
|
460
|
+
# @see https://design-system.service.gov.uk/styles/typography/#headings-with-captions Headings with captions
|
296
461
|
# @return [ActiveSupport::SafeBuffer] HTML output
|
297
462
|
#
|
298
|
-
# @example A
|
463
|
+
# @example A radio button fieldset for favourite colours with a divider
|
299
464
|
#
|
300
|
-
# = f.
|
301
|
-
# = f.govuk_radio_button :favourite_colour, :red, label: { text: 'Red' }
|
465
|
+
# = f.govuk_radio_buttons_fieldset :favourite_colour, inline: false do
|
466
|
+
# = f.govuk_radio_button :favourite_colour, :red, label: { text: 'Red' }, link_errors: true
|
302
467
|
# = f.govuk_radio_button :favourite_colour, :green, label: { text: 'Green' }
|
303
468
|
# = f.govuk_radio_divider
|
304
469
|
# = f.govuk_radio_button :favourite_colour, :yellow, label: { text: 'Yellow' }
|
305
470
|
#
|
306
|
-
|
307
|
-
|
471
|
+
# @example A radio button fieldset with the legend supplied as a proc
|
472
|
+
# = f.govuk_radio_buttons_fieldset :burger_id do
|
473
|
+
# @burgers,
|
474
|
+
# :id,
|
475
|
+
# :name,
|
476
|
+
# legend: -> { tag.h3('Which hamburger do you want with your meal?') } do
|
477
|
+
# = f.govuk_radio_button :burger_id, :regular, label: { text: 'Hamburger' }, link_errors: true
|
478
|
+
# = f.govuk_radio_button :burger_id, :cheese, label: { text: 'Cheeseburger' }
|
479
|
+
#
|
480
|
+
def govuk_radio_buttons_fieldset(attribute_name, hint_text: nil, legend: {}, caption: {}, inline: false, small: false, classes: nil, &block)
|
481
|
+
Containers::RadioButtonsFieldset.new(self, object_name, attribute_name, hint_text: hint_text, legend: legend, caption: caption, inline: inline, small: small, classes: classes, &block).html
|
308
482
|
end
|
309
483
|
|
310
484
|
# Generates a radio button
|
@@ -315,17 +489,19 @@ module GOVUKDesignSystemFormBuilder
|
|
315
489
|
# @option legend text [String] the fieldset legend's text content
|
316
490
|
# @option legend size [String] the size of the fieldset legend font, can be +xl+, +l+, +m+ or +s+
|
317
491
|
# @option legend tag [Symbol,String] the tag used for the fieldset's header, defaults to +h1+
|
492
|
+
# @option legend hidden [Boolean] control the visibility of the legend. Hidden legends will still be read by screenreaders
|
318
493
|
# @see https://design-system.service.gov.uk/components/radios/ GOV.UK Radios
|
494
|
+
# @see https://design-system.service.gov.uk/styles/typography/#headings-with-captions Headings with captions
|
319
495
|
# @param block [Block] Any supplied HTML will be wrapped in a conditional
|
320
496
|
# container and only revealed when the radio button is picked
|
321
|
-
# @param link_errors [Boolean] controls whether this radio button should be linked to
|
497
|
+
# @param link_errors [Boolean] controls whether this radio button should be linked to from {#govuk_error_summary}
|
322
498
|
# from the error summary. <b>Should only be set to +true+ for the first radio button in a fieldset</b>
|
323
499
|
# @return [ActiveSupport::SafeBuffer] HTML output
|
324
500
|
#
|
325
|
-
# @example A
|
501
|
+
# @example A single radio button for our new favourite colour
|
326
502
|
#
|
327
|
-
# = f.
|
328
|
-
# = f.govuk_radio_button :favourite_colour, :red, label: { text: 'Red' }
|
503
|
+
# = f.govuk_radio_buttons_fieldset :favourite_colour do
|
504
|
+
# = f.govuk_radio_button :favourite_colour, :red, label: { text: 'Red' }
|
329
505
|
#
|
330
506
|
def govuk_radio_button(attribute_name, value, hint_text: nil, label: {}, link_errors: false, &block)
|
331
507
|
Elements::Radios::FieldsetRadioButton.new(self, object_name, attribute_name, value, hint_text: hint_text, label: label, link_errors: link_errors, &block).html
|
@@ -354,10 +530,14 @@ module GOVUKDesignSystemFormBuilder
|
|
354
530
|
# @param hint_text [String] The content of the fieldset hint. No hint will be injected if left +nil+
|
355
531
|
# @param small [Boolean] controls whether small check boxes are used instead of regular-sized ones
|
356
532
|
# @param classes [String] Classes to add to the checkbox container.
|
357
|
-
# @param legend [Hash] options for configuring the legend
|
533
|
+
# @param legend [Hash,Proc] options for configuring the legend
|
358
534
|
# @option legend text [String] the fieldset legend's text content
|
359
535
|
# @option legend size [String] the size of the fieldset legend font, can be +xl+, +l+, +m+ or +s+
|
360
536
|
# @option legend tag [Symbol,String] the tag used for the fieldset's header, defaults to +h1+
|
537
|
+
# @option legend hidden [Boolean] control the visibility of the legend. Hidden legends will still be read by screenreaders
|
538
|
+
# @param caption [Hash] configures or sets the caption content which is inserted above the legend
|
539
|
+
# @option caption text [String] the caption text
|
540
|
+
# @option caption size [String] the size of the caption, can be +xl+, +l+ or +m+. Defaults to +m+
|
361
541
|
# @param block [Block] any HTML passed in will be injected into the fieldset, after the hint and before the checkboxes
|
362
542
|
# @return [ActiveSupport::SafeBuffer] HTML output
|
363
543
|
#
|
@@ -377,7 +557,24 @@ module GOVUKDesignSystemFormBuilder
|
|
377
557
|
# hint_text: "If it isn't listed here, tough luck",
|
378
558
|
# inline: false,
|
379
559
|
# classes: 'app-overflow-scroll',
|
380
|
-
|
560
|
+
#
|
561
|
+
# @example A collection of check boxes for types of bread
|
562
|
+
# = f.govuk_collection_check_boxes :bread,
|
563
|
+
# @variety,
|
564
|
+
# :id,
|
565
|
+
# :name do
|
566
|
+
#
|
567
|
+
# p.govuk-inset-text
|
568
|
+
# | Only Hearty Italian is available with the meal deal menu
|
569
|
+
#
|
570
|
+
# @example A collection of check boxes with the legend supplied as a proc
|
571
|
+
# = f.govuk_collection_check_boxes :sandwich_type,
|
572
|
+
# @breads,
|
573
|
+
# :id,
|
574
|
+
# :name,
|
575
|
+
# legend: -> { tag.h3('What kind of sandwich do you want?') }
|
576
|
+
#
|
577
|
+
def govuk_collection_check_boxes(attribute_name, collection, value_method, text_method, hint_method = nil, hint_text: nil, legend: {}, caption: {}, small: false, classes: nil, &block)
|
381
578
|
Elements::CheckBoxes::Collection.new(
|
382
579
|
self,
|
383
580
|
object_name,
|
@@ -388,6 +585,7 @@ module GOVUKDesignSystemFormBuilder
|
|
388
585
|
hint_method: hint_method,
|
389
586
|
hint_text: hint_text,
|
390
587
|
legend: legend,
|
588
|
+
caption: caption,
|
391
589
|
small: small,
|
392
590
|
classes: classes,
|
393
591
|
&block
|
@@ -396,42 +594,54 @@ module GOVUKDesignSystemFormBuilder
|
|
396
594
|
|
397
595
|
# Generate a fieldset intended to conatain one or more {#govuk_check_box}
|
398
596
|
#
|
597
|
+
# @note To ensure the {#govuk_error_summary} link functions correctly ensure the first {#govuk_check_box}
|
598
|
+
# is set to +link_errors: true+
|
599
|
+
#
|
399
600
|
# @param attribute_name [Symbol] The name of the attribute
|
400
601
|
# @param hint_text [String] The content of the fieldset hint. No hint will be injected if left +nil+
|
401
602
|
# @param small [Boolean] controls whether small check boxes are used instead of regular-sized ones
|
402
|
-
# @param legend [Hash] options for configuring the legend
|
603
|
+
# @param legend [Hash,Proc] options for configuring the legend
|
403
604
|
# @option legend text [String] the fieldset legend's text content
|
404
605
|
# @option legend size [String] the size of the fieldset legend font, can be +xl+, +l+, +m+ or +s+
|
405
606
|
# @option legend tag [Symbol,String] the tag used for the fieldset's header, defaults to +h1+
|
607
|
+
# @option legend hidden [Boolean] control the visibility of the legend. Hidden legends will still be read by screenreaders
|
608
|
+
# @param caption [Hash] configures or sets the caption content which is inserted above the legend
|
609
|
+
# @option caption text [String] the caption text
|
610
|
+
# @option caption size [String] the size of the caption, can be +xl+, +l+ or +m+. Defaults to +m+
|
406
611
|
# @param classes [String] Classes to add to the checkbox container.
|
407
612
|
# @param block [Block] a block of HTML that will be used to populate the fieldset
|
408
613
|
# @return [ActiveSupport::SafeBuffer] HTML output
|
409
614
|
#
|
410
615
|
# @example A collection of check boxes for sandwich fillings
|
411
|
-
#
|
412
|
-
# = f.govuk_check_boxes_fieldset :desired_filling,
|
616
|
+
# = f.govuk_check_boxes_fieldset :desired_filling, legend: { text: 'Which filling do you want?' },
|
413
617
|
# = f.govuk_check_box :desired_filling, :cheese, label: { text: 'Cheese' }, link_errors: true
|
414
618
|
# = f.govuk_check_box :desired_filling, :tomato, label: { text: 'Tomato' }
|
415
619
|
#
|
416
|
-
|
620
|
+
# @example A collection of check boxes for drinks choices with legend as a proc
|
621
|
+
# = f.govuk_check_boxes_fieldset :drink_id, legend: -> { tag.h3('Choose drinks to accompany your meal') },
|
622
|
+
# = f.govuk_check_box :desired_filling, :lemonade, label: { text: 'Lemonade' }, link_errors: true
|
623
|
+
# = f.govuk_check_box :desired_filling, :fizzy_orange, label: { text: 'Fizzy orange' }
|
624
|
+
#
|
625
|
+
def govuk_check_boxes_fieldset(attribute_name, legend: {}, caption: {}, hint_text: {}, small: false, classes: nil, &block)
|
417
626
|
Containers::CheckBoxesFieldset.new(
|
418
627
|
self,
|
419
628
|
object_name,
|
420
629
|
attribute_name,
|
421
630
|
hint_text: hint_text,
|
422
631
|
legend: legend,
|
632
|
+
caption: caption,
|
423
633
|
small: small,
|
424
634
|
classes: classes,
|
425
635
|
&block
|
426
636
|
).html
|
427
637
|
end
|
428
638
|
|
429
|
-
# Generates a single
|
639
|
+
# Generates a single check box, intended for use within a {#govuk_check_boxes_fieldset}
|
430
640
|
#
|
431
641
|
# @param attribute_name [Symbol] The name of the attribute
|
432
642
|
# @param value [Boolean,String,Symbol,Integer] The value of the checkbox when it is checked
|
433
643
|
# @param hint_text [String] the contents of the hint
|
434
|
-
# @param link_errors [Boolean] controls whether this radio button should be linked to
|
644
|
+
# @param link_errors [Boolean] controls whether this radio button should be linked to from {#govuk_error_summary}
|
435
645
|
# @option label text [String] the label text
|
436
646
|
# @option label size [String] the size of the label font, can be +xl+, +l+, +m+, +s+ or nil
|
437
647
|
# @option label tag [Symbol,String] the label's wrapper tag, intended to allow labels to act as page headings
|
@@ -469,6 +679,7 @@ module GOVUKDesignSystemFormBuilder
|
|
469
679
|
# @param secondary [Boolean] makes the button grey ({https://design-system.service.gov.uk/components/button/#secondary-buttons secondary}) when true
|
470
680
|
# @todo The GOV.UK design system also supports {https://design-system.service.gov.uk/components/button/#disabled-buttons disabled buttons}, they
|
471
681
|
# should probably be supported too
|
682
|
+
# @param classes [String] Classes to add to the submit button
|
472
683
|
# @param prevent_double_click [Boolean] adds JavaScript to safeguard the
|
473
684
|
# form from being submitted more than once
|
474
685
|
# @param validate [Boolean] adds the formnovalidate to the submit button when true, this disables all
|
@@ -488,8 +699,8 @@ module GOVUKDesignSystemFormBuilder
|
|
488
699
|
# = f.govuk_submit "Proceed", prevent_double_click: true do
|
489
700
|
# = link_to 'Cancel', some_other_path, class: 'govuk-button__secondary'
|
490
701
|
#
|
491
|
-
def govuk_submit(text = config.default_submit_button_text, warning: false, secondary: false, prevent_double_click: true, validate: false, &block)
|
492
|
-
Elements::Submit.new(self, text, warning: warning, secondary: secondary, prevent_double_click: prevent_double_click, validate: validate, &block).html
|
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
|
493
704
|
end
|
494
705
|
|
495
706
|
# Generates three inputs for the +day+, +month+ and +year+ components of a date
|
@@ -499,10 +710,14 @@ module GOVUKDesignSystemFormBuilder
|
|
499
710
|
# be 'rounded' up to +2019-10-01+.
|
500
711
|
# @param attribute_name [Symbol] The name of the attribute
|
501
712
|
# @param hint_text [String] the contents of the hint
|
502
|
-
# @param legend [Hash] options for configuring the legend
|
713
|
+
# @param legend [Hash,Proc] options for configuring the legend
|
503
714
|
# @option legend text [String] the fieldset legend's text content
|
504
715
|
# @option legend size [String] the size of the fieldset legend font, can be +xl+, +l+, +m+ or +s+
|
505
716
|
# @option legend tag [Symbol,String] the tag used for the fieldset's header, defaults to +h1+
|
717
|
+
# @option legend hidden [Boolean] control the visibility of the legend. Hidden legends will still be read by screenreaders
|
718
|
+
# @param caption [Hash] configures or sets the caption content which is inserted above the legend
|
719
|
+
# @option caption text [String] the caption text
|
720
|
+
# @option caption size [String] the size of the caption, can be +xl+, +l+ or +m+. Defaults to +m+
|
506
721
|
# @param omit_day [Boolean] do not render a day input, only capture month and year
|
507
722
|
# @param block [Block] arbitrary HTML that will be rendered between the hint and the input group
|
508
723
|
# @param date_of_birth [Boolean] if +true+ {https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete#Values birth date auto completion attributes}
|
@@ -510,13 +725,21 @@ module GOVUKDesignSystemFormBuilder
|
|
510
725
|
# @return [ActiveSupport::SafeBuffer] HTML output
|
511
726
|
#
|
512
727
|
# @see https://github.com/alphagov/govuk-frontend/issues/1449 GOV.UK date input element attributes, using text instead of number
|
728
|
+
# @see https://design-system.service.gov.uk/styles/typography/#headings-with-captions Headings with captions
|
513
729
|
#
|
514
|
-
# @example A regular date input with a legend and
|
730
|
+
# @example A regular date input with a legend, hint and injected content
|
515
731
|
# = f.govuk_date_field :starts_on,
|
516
732
|
# legend: { 'When does your event start?' },
|
517
|
-
# hint_text: 'Leave this field blank if you don't know exactly' }
|
518
|
-
|
519
|
-
|
733
|
+
# hint_text: 'Leave this field blank if you don't know exactly' } do
|
734
|
+
#
|
735
|
+
# p.govuk-inset-text
|
736
|
+
# | If you don't fill this in you won't be eligable for a refund
|
737
|
+
#
|
738
|
+
# @example A date input with legend supplied as a proc
|
739
|
+
# = f.govuk_date_field :finishes_on,
|
740
|
+
# legend: -> { tag.h3('Which category do you belong to?') }
|
741
|
+
def govuk_date_field(attribute_name, hint_text: nil, legend: {}, caption: {}, date_of_birth: false, omit_day: false, &block)
|
742
|
+
Elements::Date.new(self, object_name, attribute_name, hint_text: hint_text, legend: legend, caption: caption, date_of_birth: date_of_birth, omit_day: omit_day, &block).html
|
520
743
|
end
|
521
744
|
|
522
745
|
# Generates a summary of errors in the form, each linking to the corresponding
|
@@ -524,12 +747,6 @@ module GOVUKDesignSystemFormBuilder
|
|
524
747
|
#
|
525
748
|
# @param title [String] the error summary heading
|
526
749
|
#
|
527
|
-
# @todo Currently the summary anchors link to the inline error messages themselves rather to
|
528
|
-
# the accompanying input. More work is required to improve this and it needs to be
|
529
|
-
# handled in a less-generic manner. For example, we can't link to a specific radio button
|
530
|
-
# if one hasn't been chosen but we should link to a {#govuk_text_field} if one has been left
|
531
|
-
# blank
|
532
|
-
#
|
533
750
|
# @example An error summary with a custom title
|
534
751
|
# = f.govuk_error_summary 'Uh-oh, spaghettios'
|
535
752
|
#
|
@@ -540,11 +757,15 @@ module GOVUKDesignSystemFormBuilder
|
|
540
757
|
|
541
758
|
# Generates a fieldset containing the contents of the block
|
542
759
|
#
|
543
|
-
# @param legend [Hash] options for configuring the legend
|
760
|
+
# @param legend [Hash,Proc] options for configuring the legend
|
544
761
|
# @param described_by [Array<String>] the ids of the elements that describe this fieldset, usually hints and errors
|
545
762
|
# @option legend text [String] the fieldset legend's text content
|
546
763
|
# @option legend size [String] the size of the fieldset legend font, can be +xl+, +l+, +m+ or +s+
|
547
764
|
# @option legend tag [Symbol,String] the tag used for the fieldset's header, defaults to +h1+
|
765
|
+
# @option legend hidden [Boolean] control the visibility of the legend. Hidden legends will still be read by screenreaders
|
766
|
+
# @param caption [Hash] configures or sets the caption content which is inserted above the label
|
767
|
+
# @option caption text [String] the caption text
|
768
|
+
# @option caption size [String] the size of the caption, can be +xl+, +l+ or +m+. Defaults to +m+
|
548
769
|
#
|
549
770
|
# @example A fieldset containing address fields
|
550
771
|
# = f.govuk_fieldset legend: { text: 'Address' }
|
@@ -552,10 +773,16 @@ module GOVUKDesignSystemFormBuilder
|
|
552
773
|
# = f.govuk_text_field :town
|
553
774
|
# = f.govuk_text_field :city
|
554
775
|
#
|
776
|
+
# @example A fieldset with the legend as a proc
|
777
|
+
# = f.govuk_fieldset legend: -> { tag.h3('Skills') }
|
778
|
+
# = f.govuk_text_area :physical
|
779
|
+
# = f.govuk_text_area :mental
|
780
|
+
#
|
555
781
|
# @see https://design-system.service.gov.uk/components/fieldset/ GOV.UK fieldset
|
782
|
+
# @see https://design-system.service.gov.uk/styles/typography/#headings-with-captions Headings with captions
|
556
783
|
# @return [ActiveSupport::SafeBuffer] HTML output
|
557
|
-
def govuk_fieldset(legend: { text: 'Fieldset heading' }, described_by: nil, &block)
|
558
|
-
Containers::Fieldset.new(self, legend: legend, described_by: described_by).html
|
784
|
+
def govuk_fieldset(legend: { text: 'Fieldset heading' }, caption: {}, described_by: nil, &block)
|
785
|
+
Containers::Fieldset.new(self, legend: legend, caption: caption, described_by: described_by, &block).html
|
559
786
|
end
|
560
787
|
|
561
788
|
# Generates an input of type +file+
|
@@ -565,21 +792,31 @@ module GOVUKDesignSystemFormBuilder
|
|
565
792
|
# @option label tag [Symbol,String] the label's wrapper tag, intended to allow labels to act as page headings
|
566
793
|
# @option label size [String] the size of the label font, can be +xl+, +l+, +m+, +s+ or nil
|
567
794
|
# @option label hidden [Boolean] control the visability of the label. Hidden labels will stil be read by screenreaders
|
795
|
+
# @param caption [Hash] configures or sets the caption content which is inserted above the label
|
796
|
+
# @option caption text [String] the caption text
|
797
|
+
# @option caption size [String] the size of the caption, can be +xl+, +l+ or +m+. Defaults to +m+
|
568
798
|
# @param hint_text [String] The content of the hint. No hint will be injected if left +nil+
|
569
|
-
# @option args [Hash] args additional arguments are applied as attributes to +input+ element
|
799
|
+
# @option args [Hash] args additional arguments are applied as attributes to the +input+ element
|
570
800
|
# @param block [Block] arbitrary HTML that will be rendered between the hint and the input
|
571
801
|
#
|
572
|
-
# @example A photo upload field with file type specifier
|
573
|
-
# = f.govuk_file_field :photo, label: { text: 'Upload your photo' }, accept: 'image/*'
|
802
|
+
# @example A photo upload field with file type specifier and injected content
|
803
|
+
# = f.govuk_file_field :photo, label: { text: 'Upload your photo' }, accept: 'image/*' do
|
804
|
+
#
|
805
|
+
# p.govuk-inset-text
|
806
|
+
# | Explicit images will result in account termination
|
807
|
+
#
|
808
|
+
# @example A CV upload field with label as a proc
|
809
|
+
# = f.govuk_file_field :cv, label: -> { tag.h3('Upload your CV') }
|
574
810
|
#
|
575
811
|
# @see https://design-system.service.gov.uk/components/file-upload/ GOV.UK file upload
|
812
|
+
# @see https://design-system.service.gov.uk/styles/typography/#headings-with-captions Headings with captions
|
576
813
|
# @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file MDN documentation for file upload
|
577
814
|
#
|
578
815
|
# @note Remember to set +multipart: true+ when creating a form with file
|
579
816
|
# uploads, {https://guides.rubyonrails.org/form_helpers.html#uploading-files see
|
580
817
|
# the Rails documentation} for more information
|
581
|
-
def govuk_file_field(attribute_name, label: {}, hint_text: nil, **args, &block)
|
582
|
-
Elements::File.new(self, object_name, attribute_name, label: label, hint_text: hint_text, **args, &block).html
|
818
|
+
def govuk_file_field(attribute_name, label: {}, caption: {}, hint_text: nil, **args, &block)
|
819
|
+
Elements::File.new(self, object_name, attribute_name, label: label, caption: caption, hint_text: hint_text, **args, &block).html
|
583
820
|
end
|
584
821
|
end
|
585
822
|
end
|