govuk_design_system_formbuilder 1.2.0b1 → 1.2.2
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/README.md +2 -2
- data/lib/govuk_design_system_formbuilder.rb +2 -1
- data/lib/govuk_design_system_formbuilder/base.rb +5 -0
- data/lib/govuk_design_system_formbuilder/builder.rb +205 -77
- data/lib/govuk_design_system_formbuilder/containers/check_boxes_fieldset.rb +12 -11
- data/lib/govuk_design_system_formbuilder/containers/fieldset.rb +32 -16
- data/lib/govuk_design_system_formbuilder/containers/radio_buttons_fieldset.rb +12 -11
- data/lib/govuk_design_system_formbuilder/elements/caption.rb +34 -0
- data/lib/govuk_design_system_formbuilder/elements/check_boxes/collection.rb +11 -13
- 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 +20 -27
- data/lib/govuk_design_system_formbuilder/elements/date.rb +23 -25
- 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 -19
- data/lib/govuk_design_system_formbuilder/elements/hint.rb +1 -4
- data/lib/govuk_design_system_formbuilder/elements/label.rb +30 -19
- data/lib/govuk_design_system_formbuilder/elements/radios/collection.rb +26 -24
- data/lib/govuk_design_system_formbuilder/elements/radios/collection_radio_button.rb +13 -13
- data/lib/govuk_design_system_formbuilder/elements/radios/fieldset_radio_button.rb +15 -19
- data/lib/govuk_design_system_formbuilder/elements/select.rb +8 -18
- data/lib/govuk_design_system_formbuilder/elements/submit.rb +27 -23
- data/lib/govuk_design_system_formbuilder/elements/text_area.rb +17 -23
- data/lib/govuk_design_system_formbuilder/traits/caption.rb +23 -0
- data/lib/govuk_design_system_formbuilder/traits/input.rb +19 -27
- data/lib/govuk_design_system_formbuilder/traits/label.rb +12 -1
- data/lib/govuk_design_system_formbuilder/traits/localisation.rb +2 -0
- data/lib/govuk_design_system_formbuilder/version.rb +1 -1
- metadata +21 -47
@@ -3,7 +3,7 @@ module GOVUKDesignSystemFormBuilder
|
|
3
3
|
class Submit < Base
|
4
4
|
using PrefixableArray
|
5
5
|
|
6
|
-
def initialize(builder, text, warning:, secondary:, classes:, prevent_double_click:, validate:, &block)
|
6
|
+
def initialize(builder, text, warning:, secondary:, classes:, prevent_double_click:, validate:, disabled:, &block)
|
7
7
|
fail ArgumentError, 'buttons can be warning or secondary' if warning && secondary
|
8
8
|
|
9
9
|
@builder = builder
|
@@ -13,29 +13,38 @@ module GOVUKDesignSystemFormBuilder
|
|
13
13
|
@secondary = secondary
|
14
14
|
@classes = classes
|
15
15
|
@validate = validate
|
16
|
+
@disabled = disabled
|
16
17
|
@block_content = capture { block.call } if block_given?
|
17
18
|
end
|
18
19
|
|
19
20
|
def html
|
20
|
-
safe_join(
|
21
|
-
[
|
22
|
-
@builder.submit(
|
23
|
-
@text,
|
24
|
-
class: %w(button).prefix(brand).push(
|
25
|
-
warning_class,
|
26
|
-
secondary_class,
|
27
|
-
@classes,
|
28
|
-
padding_class(@block_content.present?)
|
29
|
-
).compact,
|
30
|
-
**extra_args
|
31
|
-
),
|
32
|
-
@block_content
|
33
|
-
]
|
34
|
-
)
|
21
|
+
safe_join([submit, @block_content])
|
35
22
|
end
|
36
23
|
|
37
24
|
private
|
38
25
|
|
26
|
+
def submit
|
27
|
+
@builder.submit(@text, class: submit_classes, **submit_options)
|
28
|
+
end
|
29
|
+
|
30
|
+
def submit_classes
|
31
|
+
%w(button)
|
32
|
+
.prefix(brand)
|
33
|
+
.push(warning_class, secondary_class, disabled_class, @classes, padding_class(@block_content.present?))
|
34
|
+
.compact
|
35
|
+
end
|
36
|
+
|
37
|
+
def submit_options
|
38
|
+
{
|
39
|
+
formnovalidate: !@validate,
|
40
|
+
disabled: @disabled,
|
41
|
+
data: {
|
42
|
+
module: %(#{brand}-button),
|
43
|
+
'prevent-double-click': @prevent_double_click
|
44
|
+
}.select { |_k, v| v.present? }
|
45
|
+
}
|
46
|
+
end
|
47
|
+
|
39
48
|
def warning_class
|
40
49
|
%(#{brand}-button--warning) if @warning
|
41
50
|
end
|
@@ -48,13 +57,8 @@ module GOVUKDesignSystemFormBuilder
|
|
48
57
|
%(#{brand}-!-margin-right-1) if content_present
|
49
58
|
end
|
50
59
|
|
51
|
-
def
|
52
|
-
{
|
53
|
-
formnovalidate: !@validate,
|
54
|
-
data: {
|
55
|
-
module: %(#{brand}-button), 'prevent-double-click' => @prevent_double_click
|
56
|
-
}.select { |_k, v| v.present? }
|
57
|
-
}
|
60
|
+
def disabled_class
|
61
|
+
%(#{brand}-button--disabled) if @disabled
|
58
62
|
end
|
59
63
|
end
|
60
64
|
end
|
@@ -8,12 +8,13 @@ module GOVUKDesignSystemFormBuilder
|
|
8
8
|
include Traits::Label
|
9
9
|
include Traits::Supplemental
|
10
10
|
|
11
|
-
def initialize(builder, object_name, attribute_name, hint_text:, label:, rows:, max_words:, max_chars:, threshold:, **
|
11
|
+
def initialize(builder, object_name, attribute_name, hint_text:, label:, caption:, rows:, max_words:, max_chars:, threshold:, **kwargs, &block)
|
12
12
|
super(builder, object_name, attribute_name, &block)
|
13
13
|
|
14
14
|
@label = label
|
15
|
+
@caption = caption
|
15
16
|
@hint_text = hint_text
|
16
|
-
@
|
17
|
+
@attributes = kwargs
|
17
18
|
@max_words = max_words
|
18
19
|
@max_chars = max_chars
|
19
20
|
@threshold = threshold
|
@@ -23,39 +24,32 @@ module GOVUKDesignSystemFormBuilder
|
|
23
24
|
def html
|
24
25
|
Containers::CharacterCount.new(@builder, max_words: @max_words, max_chars: @max_chars, threshold: @threshold).html do
|
25
26
|
Containers::FormGroup.new(@builder, @object_name, @attribute_name).html do
|
26
|
-
safe_join(
|
27
|
-
[
|
28
|
-
[
|
29
|
-
label_element,
|
30
|
-
supplemental_content,
|
31
|
-
hint_element,
|
32
|
-
error_element
|
33
|
-
].map(&:html),
|
34
|
-
@builder.text_area(
|
35
|
-
@attribute_name,
|
36
|
-
id: field_id(link_errors: true),
|
37
|
-
class: govuk_textarea_classes,
|
38
|
-
aria: {
|
39
|
-
describedby: described_by(hint_id, error_id, supplemental_id, limit_description_id)
|
40
|
-
},
|
41
|
-
**@extra_args.merge(rows: @rows)
|
42
|
-
),
|
43
|
-
limit_description
|
44
|
-
].flatten.compact
|
45
|
-
)
|
27
|
+
safe_join([label_element, supplemental_content, hint_element, error_element, text_area, limit_description])
|
46
28
|
end
|
47
29
|
end
|
48
30
|
end
|
49
31
|
|
50
32
|
private
|
51
33
|
|
52
|
-
def
|
34
|
+
def text_area
|
35
|
+
@builder.text_area(@attribute_name, **text_area_options, **@attributes.merge(rows: @rows))
|
36
|
+
end
|
37
|
+
|
38
|
+
def text_area_classes
|
53
39
|
%w(textarea).prefix(brand).tap do |classes|
|
54
40
|
classes.push(%(#{brand}-textarea--error)) if has_errors?
|
55
41
|
classes.push(%(#{brand}-js-character-count)) if limit?
|
56
42
|
end
|
57
43
|
end
|
58
44
|
|
45
|
+
def text_area_options
|
46
|
+
{
|
47
|
+
id: field_id(link_errors: true),
|
48
|
+
class: text_area_classes,
|
49
|
+
aria: { describedby: described_by(hint_id, error_id, supplemental_id, limit_description_id) },
|
50
|
+
}
|
51
|
+
end
|
52
|
+
|
59
53
|
# Provides an id for use by the textual description of character and word limits.
|
60
54
|
#
|
61
55
|
# @note In order for the GOV.UK Frontend JavaScript to pick up this associated field
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module GOVUKDesignSystemFormBuilder
|
2
|
+
module Traits
|
3
|
+
module Caption
|
4
|
+
private
|
5
|
+
|
6
|
+
def caption_element
|
7
|
+
@caption_element ||= Elements::Caption.new(@builder, @object_name, @attribute_name, **caption_options)
|
8
|
+
end
|
9
|
+
|
10
|
+
def caption_options
|
11
|
+
{ text: nil }.merge({ text: caption_text, size: caption_size }.compact)
|
12
|
+
end
|
13
|
+
|
14
|
+
def caption_text
|
15
|
+
@caption&.dig(:text)
|
16
|
+
end
|
17
|
+
|
18
|
+
def caption_size
|
19
|
+
@caption&.dig(:size)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -1,44 +1,36 @@
|
|
1
1
|
module GOVUKDesignSystemFormBuilder
|
2
2
|
module Traits
|
3
3
|
module Input
|
4
|
-
def initialize(builder, object_name, attribute_name, hint_text:, label:, width:, **
|
4
|
+
def initialize(builder, object_name, attribute_name, hint_text:, label:, caption:, width:, **kwargs, &block)
|
5
5
|
super(builder, object_name, attribute_name, &block)
|
6
6
|
|
7
|
-
@width
|
8
|
-
@
|
9
|
-
@label
|
10
|
-
@
|
7
|
+
@width = width
|
8
|
+
@attributes = kwargs
|
9
|
+
@label = label
|
10
|
+
@caption = caption
|
11
|
+
@hint_text = hint_text
|
11
12
|
end
|
12
13
|
|
13
14
|
def html
|
14
15
|
Containers::FormGroup.new(@builder, @object_name, @attribute_name).html do
|
15
|
-
safe_join(
|
16
|
-
[
|
17
|
-
label_element.html,
|
18
|
-
supplemental_content.html,
|
19
|
-
hint_element.html,
|
20
|
-
error_element.html,
|
21
|
-
@builder.send(
|
22
|
-
builder_method,
|
23
|
-
@attribute_name,
|
24
|
-
id: field_id(link_errors: true),
|
25
|
-
class: input_classes,
|
26
|
-
aria: {
|
27
|
-
describedby: described_by(
|
28
|
-
hint_id,
|
29
|
-
error_id,
|
30
|
-
supplemental_id
|
31
|
-
)
|
32
|
-
},
|
33
|
-
**@extra_args
|
34
|
-
)
|
35
|
-
]
|
36
|
-
)
|
16
|
+
safe_join([label_element, supplemental_content, hint_element, error_element, input])
|
37
17
|
end
|
38
18
|
end
|
39
19
|
|
40
20
|
private
|
41
21
|
|
22
|
+
def input
|
23
|
+
@builder.send(builder_method, @attribute_name, **input_options.merge(@attributes))
|
24
|
+
end
|
25
|
+
|
26
|
+
def input_options
|
27
|
+
{
|
28
|
+
id: field_id(link_errors: true),
|
29
|
+
class: input_classes,
|
30
|
+
aria: { describedby: described_by(hint_id, error_id, supplemental_id) }
|
31
|
+
}
|
32
|
+
end
|
33
|
+
|
42
34
|
def input_classes
|
43
35
|
[%(#{brand}-input)].push(width_classes, error_classes).compact
|
44
36
|
end
|
@@ -4,7 +4,18 @@ module GOVUKDesignSystemFormBuilder
|
|
4
4
|
private
|
5
5
|
|
6
6
|
def label_element
|
7
|
-
@label_element ||= Elements::Label.new(@builder, @object_name, @attribute_name,
|
7
|
+
@label_element ||= Elements::Label.new(@builder, @object_name, @attribute_name, caption: @caption, **label_options)
|
8
|
+
end
|
9
|
+
|
10
|
+
def label_options
|
11
|
+
case @label
|
12
|
+
when Hash
|
13
|
+
@label
|
14
|
+
when Proc
|
15
|
+
{ content: @label }
|
16
|
+
else
|
17
|
+
fail(ArgumentError, %(label must be a Proc or Hash))
|
18
|
+
end
|
8
19
|
end
|
9
20
|
end
|
10
21
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: govuk_design_system_formbuilder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Yates
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-06-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: actionview
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - '='
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 3.
|
61
|
+
version: 3.14.0
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - '='
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 3.
|
68
|
+
version: 3.14.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: pry
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -84,22 +84,22 @@ dependencies:
|
|
84
84
|
name: pry-byebug
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - ">="
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: 3.9.0
|
90
87
|
- - "~>"
|
91
88
|
- !ruby/object:Gem::Version
|
92
89
|
version: '3.9'
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: 3.9.0
|
93
93
|
type: :development
|
94
94
|
prerelease: false
|
95
95
|
version_requirements: !ruby/object:Gem::Requirement
|
96
96
|
requirements:
|
97
|
-
- - ">="
|
98
|
-
- !ruby/object:Gem::Version
|
99
|
-
version: 3.9.0
|
100
97
|
- - "~>"
|
101
98
|
- !ruby/object:Gem::Version
|
102
99
|
version: '3.9'
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: 3.9.0
|
103
103
|
- !ruby/object:Gem::Dependency
|
104
104
|
name: rspec-html-matchers
|
105
105
|
requirement: !ruby/object:Gem::Requirement
|
@@ -134,42 +134,14 @@ dependencies:
|
|
134
134
|
requirements:
|
135
135
|
- - "~>"
|
136
136
|
- !ruby/object:Gem::Version
|
137
|
-
version: 0.
|
138
|
-
type: :development
|
139
|
-
prerelease: false
|
140
|
-
version_requirements: !ruby/object:Gem::Requirement
|
141
|
-
requirements:
|
142
|
-
- - "~>"
|
143
|
-
- !ruby/object:Gem::Version
|
144
|
-
version: 0.17.1
|
145
|
-
- !ruby/object:Gem::Dependency
|
146
|
-
name: adsf
|
147
|
-
requirement: !ruby/object:Gem::Requirement
|
148
|
-
requirements:
|
149
|
-
- - "~>"
|
150
|
-
- !ruby/object:Gem::Version
|
151
|
-
version: 1.4.2
|
137
|
+
version: 0.18.5
|
152
138
|
type: :development
|
153
139
|
prerelease: false
|
154
140
|
version_requirements: !ruby/object:Gem::Requirement
|
155
141
|
requirements:
|
156
142
|
- - "~>"
|
157
143
|
- !ruby/object:Gem::Version
|
158
|
-
version:
|
159
|
-
- !ruby/object:Gem::Dependency
|
160
|
-
name: adsf-live
|
161
|
-
requirement: !ruby/object:Gem::Requirement
|
162
|
-
requirements:
|
163
|
-
- - "~>"
|
164
|
-
- !ruby/object:Gem::Version
|
165
|
-
version: 1.4.2
|
166
|
-
type: :development
|
167
|
-
prerelease: false
|
168
|
-
version_requirements: !ruby/object:Gem::Requirement
|
169
|
-
requirements:
|
170
|
-
- - "~>"
|
171
|
-
- !ruby/object:Gem::Version
|
172
|
-
version: 1.4.2
|
144
|
+
version: 0.18.5
|
173
145
|
- !ruby/object:Gem::Dependency
|
174
146
|
name: htmlbeautifier
|
175
147
|
requirement: !ruby/object:Gem::Requirement
|
@@ -204,14 +176,14 @@ dependencies:
|
|
204
176
|
requirements:
|
205
177
|
- - "~>"
|
206
178
|
- !ruby/object:Gem::Version
|
207
|
-
version: 3.
|
179
|
+
version: 3.19.0
|
208
180
|
type: :development
|
209
181
|
prerelease: false
|
210
182
|
version_requirements: !ruby/object:Gem::Requirement
|
211
183
|
requirements:
|
212
184
|
- - "~>"
|
213
185
|
- !ruby/object:Gem::Version
|
214
|
-
version: 3.
|
186
|
+
version: 3.19.0
|
215
187
|
- !ruby/object:Gem::Dependency
|
216
188
|
name: rubypants
|
217
189
|
requirement: !ruby/object:Gem::Requirement
|
@@ -260,14 +232,14 @@ dependencies:
|
|
260
232
|
requirements:
|
261
233
|
- - "~>"
|
262
234
|
- !ruby/object:Gem::Version
|
263
|
-
version: 4.0
|
235
|
+
version: 4.1.0
|
264
236
|
type: :development
|
265
237
|
prerelease: false
|
266
238
|
version_requirements: !ruby/object:Gem::Requirement
|
267
239
|
requirements:
|
268
240
|
- - "~>"
|
269
241
|
- !ruby/object:Gem::Version
|
270
|
-
version: 4.0
|
242
|
+
version: 4.1.0
|
271
243
|
description: A Rails form builder that generates form inputs adhering to the GOV.UK
|
272
244
|
Design System
|
273
245
|
email:
|
@@ -288,6 +260,7 @@ files:
|
|
288
260
|
- lib/govuk_design_system_formbuilder/containers/radio_buttons_fieldset.rb
|
289
261
|
- lib/govuk_design_system_formbuilder/containers/radios.rb
|
290
262
|
- lib/govuk_design_system_formbuilder/containers/supplemental.rb
|
263
|
+
- lib/govuk_design_system_formbuilder/elements/caption.rb
|
291
264
|
- lib/govuk_design_system_formbuilder/elements/check_boxes/collection.rb
|
292
265
|
- lib/govuk_design_system_formbuilder/elements/check_boxes/collection_check_box.rb
|
293
266
|
- lib/govuk_design_system_formbuilder/elements/check_boxes/fieldset_check_box.rb
|
@@ -310,6 +283,7 @@ files:
|
|
310
283
|
- lib/govuk_design_system_formbuilder/elements/select.rb
|
311
284
|
- lib/govuk_design_system_formbuilder/elements/submit.rb
|
312
285
|
- lib/govuk_design_system_formbuilder/elements/text_area.rb
|
286
|
+
- lib/govuk_design_system_formbuilder/traits/caption.rb
|
313
287
|
- lib/govuk_design_system_formbuilder/traits/collection_item.rb
|
314
288
|
- lib/govuk_design_system_formbuilder/traits/conditional.rb
|
315
289
|
- lib/govuk_design_system_formbuilder/traits/error.rb
|
@@ -339,11 +313,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
339
313
|
version: '0'
|
340
314
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
341
315
|
requirements:
|
342
|
-
- - "
|
316
|
+
- - ">="
|
343
317
|
- !ruby/object:Gem::Version
|
344
|
-
version:
|
318
|
+
version: '0'
|
345
319
|
requirements: []
|
346
|
-
rubygems_version: 3.
|
320
|
+
rubygems_version: 3.1.2
|
347
321
|
signing_key:
|
348
322
|
specification_version: 4
|
349
323
|
summary: GOV.UK-compliant Rails form builder
|