govuk_design_system_formbuilder 1.2.4 → 1.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/govuk_design_system_formbuilder/builder.rb +46 -29
- data/lib/govuk_design_system_formbuilder/containers/character_count.rb +2 -2
- data/lib/govuk_design_system_formbuilder/containers/check_boxes.rb +13 -12
- data/lib/govuk_design_system_formbuilder/containers/check_boxes_fieldset.rb +9 -8
- data/lib/govuk_design_system_formbuilder/containers/fieldset.rb +12 -62
- data/lib/govuk_design_system_formbuilder/containers/form_group.rb +18 -10
- data/lib/govuk_design_system_formbuilder/containers/radio_buttons_fieldset.rb +10 -9
- data/lib/govuk_design_system_formbuilder/containers/radios.rb +17 -13
- data/lib/govuk_design_system_formbuilder/containers/supplemental.rb +2 -0
- data/lib/govuk_design_system_formbuilder/elements/caption.rb +6 -4
- data/lib/govuk_design_system_formbuilder/elements/check_boxes/collection.rb +12 -11
- 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 +11 -11
- data/lib/govuk_design_system_formbuilder/elements/date.rb +19 -18
- data/lib/govuk_design_system_formbuilder/elements/error_message.rb +3 -3
- data/lib/govuk_design_system_formbuilder/elements/error_summary.rb +15 -15
- data/lib/govuk_design_system_formbuilder/elements/file.rb +11 -10
- data/lib/govuk_design_system_formbuilder/elements/hint.rb +4 -4
- data/lib/govuk_design_system_formbuilder/elements/inputs/email.rb +2 -0
- data/lib/govuk_design_system_formbuilder/elements/label.rb +11 -11
- data/lib/govuk_design_system_formbuilder/elements/legend.rb +79 -0
- data/lib/govuk_design_system_formbuilder/elements/radios/collection.rb +14 -13
- data/lib/govuk_design_system_formbuilder/elements/radios/collection_radio_button.rb +2 -2
- data/lib/govuk_design_system_formbuilder/elements/radios/fieldset_radio_button.rb +2 -2
- data/lib/govuk_design_system_formbuilder/elements/select.rb +18 -17
- data/lib/govuk_design_system_formbuilder/elements/submit.rb +9 -4
- data/lib/govuk_design_system_formbuilder/elements/text_area.rb +7 -6
- data/lib/govuk_design_system_formbuilder/traits/input.rb +8 -7
- data/lib/govuk_design_system_formbuilder/version.rb +1 -1
- metadata +3 -2
@@ -8,17 +8,18 @@ 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:, caption:, **kwargs, &block)
|
11
|
+
def initialize(builder, object_name, attribute_name, hint_text:, label:, caption:, form_group_classes:, **kwargs, &block)
|
12
12
|
super(builder, object_name, attribute_name, &block)
|
13
13
|
|
14
|
-
@label
|
15
|
-
@caption
|
16
|
-
@hint_text
|
17
|
-
@extra_options
|
14
|
+
@label = label
|
15
|
+
@caption = caption
|
16
|
+
@hint_text = hint_text
|
17
|
+
@extra_options = kwargs
|
18
|
+
@form_group_classes = form_group_classes
|
18
19
|
end
|
19
20
|
|
20
21
|
def html
|
21
|
-
Containers::FormGroup.new(@builder, @object_name, @attribute_name).html do
|
22
|
+
Containers::FormGroup.new(@builder, @object_name, @attribute_name, classes: @form_group_classes).html do
|
22
23
|
safe_join([label_element, supplemental_content, hint_element, error_element, file])
|
23
24
|
end
|
24
25
|
end
|
@@ -26,18 +27,18 @@ module GOVUKDesignSystemFormBuilder
|
|
26
27
|
private
|
27
28
|
|
28
29
|
def file
|
29
|
-
@builder.file_field(@attribute_name, **
|
30
|
+
@builder.file_field(@attribute_name, **options, **@extra_options)
|
30
31
|
end
|
31
32
|
|
32
|
-
def
|
33
|
+
def options
|
33
34
|
{
|
34
35
|
id: field_id(link_errors: true),
|
35
|
-
class:
|
36
|
+
class: classes,
|
36
37
|
aria: { describedby: described_by(hint_id, error_id, supplemental_id) }
|
37
38
|
}
|
38
39
|
end
|
39
40
|
|
40
|
-
def
|
41
|
+
def classes
|
41
42
|
%w(file-upload).prefix(brand).tap do |c|
|
42
43
|
c.push(%(#{brand}-file-upload--error)) if has_errors?
|
43
44
|
end
|
@@ -10,7 +10,7 @@ module GOVUKDesignSystemFormBuilder
|
|
10
10
|
super(builder, object_name, attribute_name)
|
11
11
|
|
12
12
|
@value = value
|
13
|
-
@hint_text =
|
13
|
+
@hint_text = retrieve_text(text)
|
14
14
|
@radio = radio
|
15
15
|
@checkbox = checkbox
|
16
16
|
end
|
@@ -18,16 +18,16 @@ module GOVUKDesignSystemFormBuilder
|
|
18
18
|
def html
|
19
19
|
return nil if @hint_text.blank?
|
20
20
|
|
21
|
-
tag.span(@hint_text, class:
|
21
|
+
tag.span(@hint_text, class: classes, id: hint_id)
|
22
22
|
end
|
23
23
|
|
24
24
|
private
|
25
25
|
|
26
|
-
def
|
26
|
+
def retrieve_text(supplied)
|
27
27
|
supplied.presence || localised_text(:hint)
|
28
28
|
end
|
29
29
|
|
30
|
-
def
|
30
|
+
def classes
|
31
31
|
%w(hint).prefix(brand).push(radio_class, checkbox_class).compact
|
32
32
|
end
|
33
33
|
|
@@ -15,8 +15,8 @@ module GOVUKDesignSystemFormBuilder
|
|
15
15
|
@content = content.call
|
16
16
|
else
|
17
17
|
@value = value # used by field_id
|
18
|
-
@text =
|
19
|
-
@size_class =
|
18
|
+
@text = retrieve_text(text, hidden)
|
19
|
+
@size_class = size_class(size)
|
20
20
|
@radio = radio
|
21
21
|
@checkbox = checkbox
|
22
22
|
@tag = tag
|
@@ -38,12 +38,12 @@ module GOVUKDesignSystemFormBuilder
|
|
38
38
|
private
|
39
39
|
|
40
40
|
def label
|
41
|
-
@builder.label(@attribute_name, **
|
41
|
+
@builder.label(@attribute_name, **options) do
|
42
42
|
@content || safe_join([caption, @text])
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
|
-
def
|
46
|
+
def retrieve_text(option_text, hidden)
|
47
47
|
text = [option_text, localised_text(:label), @attribute_name.capitalize].compact.first.to_s
|
48
48
|
|
49
49
|
if hidden
|
@@ -53,7 +53,7 @@ module GOVUKDesignSystemFormBuilder
|
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
|
-
def
|
56
|
+
def options
|
57
57
|
{
|
58
58
|
value: @value,
|
59
59
|
for: field_id(link_errors: @link_errors),
|
@@ -77,13 +77,13 @@ module GOVUKDesignSystemFormBuilder
|
|
77
77
|
%(#{brand}-checkboxes__label)
|
78
78
|
end
|
79
79
|
|
80
|
-
def
|
80
|
+
def size_class(size)
|
81
81
|
case size
|
82
|
-
when 'xl'
|
83
|
-
when 'l'
|
84
|
-
when 'm'
|
85
|
-
when 's'
|
86
|
-
when nil
|
82
|
+
when 'xl' then %(#{brand}-label--xl)
|
83
|
+
when 'l' then %(#{brand}-label--l)
|
84
|
+
when 'm' then %(#{brand}-label--m)
|
85
|
+
when 's' then %(#{brand}-label--s)
|
86
|
+
when nil then nil
|
87
87
|
else
|
88
88
|
fail "invalid size '#{size}', must be xl, l, m, s or nil"
|
89
89
|
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
module GOVUKDesignSystemFormBuilder
|
2
|
+
module Elements
|
3
|
+
class Legend < Base
|
4
|
+
include Traits::Caption
|
5
|
+
include Traits::Localisation
|
6
|
+
|
7
|
+
def initialize(builder, object_name, attribute_name, legend:, caption:)
|
8
|
+
super(builder, object_name, attribute_name)
|
9
|
+
|
10
|
+
case legend
|
11
|
+
when Proc
|
12
|
+
@raw = legend.call
|
13
|
+
when Hash
|
14
|
+
defaults.merge(legend).tap do |l|
|
15
|
+
@text = text(l.dig(:text))
|
16
|
+
@hidden = l.dig(:hidden)
|
17
|
+
@tag = l.dig(:tag)
|
18
|
+
@size = l.dig(:size)
|
19
|
+
@caption = caption
|
20
|
+
end
|
21
|
+
else
|
22
|
+
fail(ArgumentError, %(legend must be a Proc or Hash))
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def html
|
27
|
+
@raw || content
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def content
|
33
|
+
if @text.present?
|
34
|
+
content_tag('legend', class: classes) do
|
35
|
+
content_tag(@tag, class: heading_classes) do
|
36
|
+
safe_join([caption_element, @text])
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def text(supplied_text)
|
43
|
+
supplied_text || localised_text(:legend)
|
44
|
+
end
|
45
|
+
|
46
|
+
def classes
|
47
|
+
[%(#{brand}-fieldset__legend), size_class, visually_hidden_class].compact
|
48
|
+
end
|
49
|
+
|
50
|
+
def size_class
|
51
|
+
case @size
|
52
|
+
when 'xl' then %(#{brand}-fieldset__legend--xl)
|
53
|
+
when 'l' then %(#{brand}-fieldset__legend--l)
|
54
|
+
when 'm' then %(#{brand}-fieldset__legend--m)
|
55
|
+
when 's' then %(#{brand}-fieldset__legend--s)
|
56
|
+
else
|
57
|
+
fail "invalid size '#{@size}', must be xl, l, m or s"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def visually_hidden_class
|
62
|
+
%(#{brand}-visually-hidden) if @hidden
|
63
|
+
end
|
64
|
+
|
65
|
+
def heading_classes
|
66
|
+
%(#{brand}-fieldset__heading)
|
67
|
+
end
|
68
|
+
|
69
|
+
def defaults
|
70
|
+
{
|
71
|
+
hidden: false,
|
72
|
+
text: nil,
|
73
|
+
tag: config.default_legend_tag,
|
74
|
+
size: config.default_legend_size
|
75
|
+
}
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -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_method:, hint_text:, legend:, caption:, inline:, small:, bold_labels:, classes:, &block)
|
9
|
+
def initialize(builder, object_name, attribute_name, collection, value_method:, text_method:, hint_method:, hint_text:, legend:, caption:, inline:, small:, bold_labels:, classes:, form_group_classes:, &block)
|
10
10
|
super(builder, object_name, attribute_name, &block)
|
11
11
|
|
12
|
-
@collection
|
13
|
-
@value_method
|
14
|
-
@text_method
|
15
|
-
@hint_method
|
16
|
-
@inline
|
17
|
-
@small
|
18
|
-
@legend
|
19
|
-
@caption
|
20
|
-
@hint_text
|
21
|
-
@classes
|
22
|
-
@
|
12
|
+
@collection = collection
|
13
|
+
@value_method = value_method
|
14
|
+
@text_method = text_method
|
15
|
+
@hint_method = hint_method
|
16
|
+
@inline = inline
|
17
|
+
@small = small
|
18
|
+
@legend = legend
|
19
|
+
@caption = caption
|
20
|
+
@hint_text = hint_text
|
21
|
+
@classes = classes
|
22
|
+
@form_group_classes = form_group_classes
|
23
|
+
@bold_labels = hint_method.present? || bold_labels
|
23
24
|
end
|
24
25
|
|
25
26
|
def html
|
26
|
-
Containers::FormGroup.new(@builder, @object_name, @attribute_name).html do
|
27
|
+
Containers::FormGroup.new(@builder, @object_name, @attribute_name, classes: @form_group_classes).html do
|
27
28
|
Containers::Fieldset.new(@builder, @object_name, @attribute_name, **fieldset_options).html do
|
28
29
|
safe_join([supplemental_content, hint_element, error_element, radios])
|
29
30
|
end
|
@@ -31,10 +31,10 @@ module GOVUKDesignSystemFormBuilder
|
|
31
31
|
private
|
32
32
|
|
33
33
|
def radio
|
34
|
-
@builder.radio_button(@attribute_name, @value, **
|
34
|
+
@builder.radio_button(@attribute_name, @value, **options)
|
35
35
|
end
|
36
36
|
|
37
|
-
def
|
37
|
+
def options
|
38
38
|
{
|
39
39
|
id: field_id(link_errors: @link_errors),
|
40
40
|
aria: { describedby: hint_id },
|
@@ -47,10 +47,10 @@ module GOVUKDesignSystemFormBuilder
|
|
47
47
|
end
|
48
48
|
|
49
49
|
def input
|
50
|
-
@builder.radio_button(@attribute_name, @value, **
|
50
|
+
@builder.radio_button(@attribute_name, @value, **options)
|
51
51
|
end
|
52
52
|
|
53
|
-
def
|
53
|
+
def options
|
54
54
|
{
|
55
55
|
id: field_id(link_errors: @link_errors),
|
56
56
|
aria: { describedby: hint_id },
|
@@ -6,21 +6,22 @@ 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:, options: {}, html_options: {}, hint_text:, label:, caption:, &block)
|
9
|
+
def initialize(builder, object_name, attribute_name, collection, value_method:, text_method:, options: {}, html_options: {}, hint_text:, label:, caption:, form_group_classes:, &block)
|
10
10
|
super(builder, object_name, attribute_name, &block)
|
11
11
|
|
12
|
-
@collection
|
13
|
-
@value_method
|
14
|
-
@text_method
|
15
|
-
@options
|
16
|
-
@html_options
|
17
|
-
@label
|
18
|
-
@caption
|
19
|
-
@hint_text
|
12
|
+
@collection = collection
|
13
|
+
@value_method = value_method
|
14
|
+
@text_method = text_method
|
15
|
+
@options = options
|
16
|
+
@html_options = html_options
|
17
|
+
@label = label
|
18
|
+
@caption = caption
|
19
|
+
@hint_text = hint_text
|
20
|
+
@form_group_classes = form_group_classes
|
20
21
|
end
|
21
22
|
|
22
23
|
def html
|
23
|
-
Containers::FormGroup.new(@builder, @object_name, @attribute_name).html do
|
24
|
+
Containers::FormGroup.new(@builder, @object_name, @attribute_name, classes: @form_group_classes).html do
|
24
25
|
safe_join([label_element, supplemental_content, hint_element, error_element, select])
|
25
26
|
end
|
26
27
|
end
|
@@ -28,26 +29,26 @@ module GOVUKDesignSystemFormBuilder
|
|
28
29
|
private
|
29
30
|
|
30
31
|
def select
|
31
|
-
@builder.collection_select(@attribute_name, @collection, @value_method, @text_method, @options, **
|
32
|
+
@builder.collection_select(@attribute_name, @collection, @value_method, @text_method, @options, **options)
|
32
33
|
end
|
33
34
|
|
34
|
-
def
|
35
|
+
def options
|
35
36
|
@html_options.deep_merge(
|
36
37
|
id: field_id(link_errors: true),
|
37
|
-
class:
|
38
|
+
class: classes,
|
38
39
|
aria: { describedby: described_by(hint_id, error_id, supplemental_id) }
|
39
40
|
)
|
40
41
|
end
|
41
42
|
|
42
|
-
def
|
43
|
-
[%(#{brand}-select),
|
43
|
+
def classes
|
44
|
+
[%(#{brand}-select), error_class, custom_classes].flatten.compact
|
44
45
|
end
|
45
46
|
|
46
|
-
def
|
47
|
+
def error_class
|
47
48
|
%(#{brand}-select--error) if has_errors?
|
48
49
|
end
|
49
50
|
|
50
|
-
def
|
51
|
+
def custom_classes
|
51
52
|
@html_options.dig(:class)
|
52
53
|
end
|
53
54
|
end
|
@@ -24,17 +24,18 @@ module GOVUKDesignSystemFormBuilder
|
|
24
24
|
private
|
25
25
|
|
26
26
|
def submit
|
27
|
-
@builder.submit(@text, class:
|
27
|
+
@builder.submit(@text, class: classes, **options)
|
28
28
|
end
|
29
29
|
|
30
|
-
def
|
30
|
+
def classes
|
31
31
|
%w(button)
|
32
32
|
.prefix(brand)
|
33
|
-
.push(warning_class, secondary_class, disabled_class, padding_class,
|
33
|
+
.push(warning_class, secondary_class, disabled_class, padding_class, custom_classes)
|
34
|
+
.flatten
|
34
35
|
.compact
|
35
36
|
end
|
36
37
|
|
37
|
-
def
|
38
|
+
def options
|
38
39
|
{
|
39
40
|
formnovalidate: !@validate,
|
40
41
|
disabled: @disabled,
|
@@ -60,6 +61,10 @@ module GOVUKDesignSystemFormBuilder
|
|
60
61
|
def disabled_class
|
61
62
|
%(#{brand}-button--disabled) if @disabled
|
62
63
|
end
|
64
|
+
|
65
|
+
def custom_classes
|
66
|
+
Array.wrap(@classes)
|
67
|
+
end
|
63
68
|
end
|
64
69
|
end
|
65
70
|
end
|
@@ -8,7 +8,7 @@ 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:, caption:, rows:, max_words:, max_chars:, threshold:, **kwargs, &block)
|
11
|
+
def initialize(builder, object_name, attribute_name, hint_text:, label:, caption:, rows:, max_words:, max_chars:, threshold:, form_group_classes:, **kwargs, &block)
|
12
12
|
super(builder, object_name, attribute_name, &block)
|
13
13
|
|
14
14
|
@label = label
|
@@ -18,12 +18,13 @@ module GOVUKDesignSystemFormBuilder
|
|
18
18
|
@max_chars = max_chars
|
19
19
|
@threshold = threshold
|
20
20
|
@rows = rows
|
21
|
+
@form_group_classes = form_group_classes
|
21
22
|
@html_attributes = kwargs
|
22
23
|
end
|
23
24
|
|
24
25
|
def html
|
25
26
|
Containers::CharacterCount.new(@builder, **character_count_options).html do
|
26
|
-
Containers::FormGroup.new(@builder, @object_name, @attribute_name).html do
|
27
|
+
Containers::FormGroup.new(@builder, @object_name, @attribute_name, classes: @form_group_classes).html do
|
27
28
|
safe_join([label_element, supplemental_content, hint_element, error_element, text_area, limit_description])
|
28
29
|
end
|
29
30
|
end
|
@@ -36,20 +37,20 @@ module GOVUKDesignSystemFormBuilder
|
|
36
37
|
end
|
37
38
|
|
38
39
|
def text_area
|
39
|
-
@builder.text_area(@attribute_name, **
|
40
|
+
@builder.text_area(@attribute_name, **options, **@html_attributes)
|
40
41
|
end
|
41
42
|
|
42
|
-
def
|
43
|
+
def classes
|
43
44
|
%w(textarea).prefix(brand).tap do |classes|
|
44
45
|
classes.push(%(#{brand}-textarea--error)) if has_errors?
|
45
46
|
classes.push(%(#{brand}-js-character-count)) if limit?
|
46
47
|
end
|
47
48
|
end
|
48
49
|
|
49
|
-
def
|
50
|
+
def options
|
50
51
|
{
|
51
52
|
id: field_id(link_errors: true),
|
52
|
-
class:
|
53
|
+
class: classes,
|
53
54
|
rows: @rows,
|
54
55
|
aria: { describedby: described_by(hint_id, error_id, supplemental_id, limit_description_id) },
|
55
56
|
}
|
@@ -1,18 +1,19 @@
|
|
1
1
|
module GOVUKDesignSystemFormBuilder
|
2
2
|
module Traits
|
3
3
|
module Input
|
4
|
-
def initialize(builder, object_name, attribute_name, hint_text:, label:, caption:, width:, **kwargs, &block)
|
4
|
+
def initialize(builder, object_name, attribute_name, hint_text:, label:, caption:, width:, form_group_classes:, **kwargs, &block)
|
5
5
|
super(builder, object_name, attribute_name, &block)
|
6
6
|
|
7
|
-
@width
|
8
|
-
@label
|
9
|
-
@caption
|
10
|
-
@hint_text
|
11
|
-
@html_attributes
|
7
|
+
@width = width
|
8
|
+
@label = label
|
9
|
+
@caption = caption
|
10
|
+
@hint_text = hint_text
|
11
|
+
@html_attributes = kwargs
|
12
|
+
@form_group_classes = form_group_classes
|
12
13
|
end
|
13
14
|
|
14
15
|
def html
|
15
|
-
Containers::FormGroup.new(@builder, @object_name, @attribute_name).html do
|
16
|
+
Containers::FormGroup.new(@builder, @object_name, @attribute_name, classes: @form_group_classes).html do
|
16
17
|
safe_join([label_element, supplemental_content, hint_element, error_element, input])
|
17
18
|
end
|
18
19
|
end
|