govuk_design_system_formbuilder 2.1.0 → 2.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/govuk_design_system_formbuilder/builder.rb +7 -4
- data/lib/govuk_design_system_formbuilder/containers/fieldset.rb +13 -2
- data/lib/govuk_design_system_formbuilder/elements/check_boxes/fieldset_check_box.rb +2 -13
- data/lib/govuk_design_system_formbuilder/elements/date.rb +9 -2
- data/lib/govuk_design_system_formbuilder/elements/error_summary.rb +10 -5
- data/lib/govuk_design_system_formbuilder/elements/hint.rb +1 -1
- data/lib/govuk_design_system_formbuilder/elements/legend.rb +20 -39
- data/lib/govuk_design_system_formbuilder/elements/null.rb +19 -0
- data/lib/govuk_design_system_formbuilder/elements/radios/fieldset_radio_button.rb +2 -17
- data/lib/govuk_design_system_formbuilder/traits/caption.rb +5 -5
- data/lib/govuk_design_system_formbuilder/traits/fieldset_item.rb +31 -0
- data/lib/govuk_design_system_formbuilder/traits/hint.rb +5 -3
- data/lib/govuk_design_system_formbuilder/traits/label.rb +5 -1
- data/lib/govuk_design_system_formbuilder/version.rb +1 -1
- metadata +8 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f2892780c7524701d967f5ed6c409ad4eb741b5a3e6cfaf4ec65389dbaf504a4
|
4
|
+
data.tar.gz: 5a231ba3dfebdf493b8563fc2d7c4b11ba66d27963512e24ef6cd9647ba8bee9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 46966873483f3cec59d97458b1e211ab013d7056c6d18e6bd40749f393e6e5eff96e93ddf38d6888da4316cd26db7d3a6dbd9e744e40d3fa6b2b4ac5386281b8
|
7
|
+
data.tar.gz: cff65a82d937855335ef59346acb8d4e2a07e21ca615897c8dd9b0c873e2e919a794ac46dcfdde27054211f573c7be030d1b64a8b5fd1fa325f34ae1ecd8811d
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# GOV.UK Design System Form Builder for Rails
|
2
2
|
|
3
|
-
[![
|
3
|
+
[![Tests](https://github.com/DFE-Digital/govuk_design_system_formbuilder/workflows/Testing/badge.svg)](https://github.com/DFE-Digital/govuk_design_system_formbuilder/actions)
|
4
4
|
[![Maintainability](https://api.codeclimate.com/v1/badges/fde73b5dc9476197281b/maintainability)](https://codeclimate.com/github/DFE-Digital/govuk_design_system_formbuilder/maintainability)
|
5
5
|
[![Gem Version](https://badge.fury.io/rb/govuk_design_system_formbuilder.svg)](https://badge.fury.io/rb/govuk_design_system_formbuilder)
|
6
6
|
[![Gem](https://img.shields.io/gem/dt/govuk_design_system_formbuilder?logo=rubygems)](https://rubygems.org/gems/govuk_design_system_formbuilder)
|
@@ -850,6 +850,7 @@ module GOVUKDesignSystemFormBuilder
|
|
850
850
|
# @option caption size [String] the size of the caption, can be +xl+, +l+ or +m+. Defaults to +m+
|
851
851
|
# @option caption kwargs [Hash] additional arguments are applied as attributes on the caption +span+ element
|
852
852
|
# @param omit_day [Boolean] do not render a day input, only capture month and year
|
853
|
+
# @param wildcards [Boolean] add an 'X' to the date wildcards so users can add approximate dates
|
853
854
|
# @param form_group [Hash] configures the form group
|
854
855
|
# @option form_group classes [Array,String] sets the form group's classes
|
855
856
|
# @option form_group kwargs [Hash] additional attributes added to the form group
|
@@ -872,14 +873,16 @@ module GOVUKDesignSystemFormBuilder
|
|
872
873
|
# @example A date input with legend supplied as a proc
|
873
874
|
# = f.govuk_date_field :finishes_on,
|
874
875
|
# legend: -> { tag.h3('Which category do you belong to?') }
|
875
|
-
def govuk_date_field(attribute_name, hint: {}, legend: {}, caption: {}, date_of_birth: false, omit_day: false, form_group: {}, &block)
|
876
|
-
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, &block).html
|
876
|
+
def govuk_date_field(attribute_name, hint: {}, legend: {}, caption: {}, date_of_birth: false, omit_day: false, form_group: {}, wildcards: false, &block)
|
877
|
+
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
|
877
878
|
end
|
878
879
|
|
879
880
|
# Generates a summary of errors in the form, each linking to the corresponding
|
880
881
|
# part of the form that contains the error
|
881
882
|
#
|
882
883
|
# @param title [String] the error summary heading
|
884
|
+
# @param link_base_errors_to [Symbol,String] set the field that errors on +:base+ are linked
|
885
|
+
# to, as there won't be a field representing the object base.
|
883
886
|
#
|
884
887
|
# @note Only the first error in the +#errors+ array for each attribute will
|
885
888
|
# be included.
|
@@ -888,8 +891,8 @@ module GOVUKDesignSystemFormBuilder
|
|
888
891
|
# = f.govuk_error_summary 'Uh-oh, spaghettios'
|
889
892
|
#
|
890
893
|
# @see https://design-system.service.gov.uk/components/error-summary/ GOV.UK error summary
|
891
|
-
def govuk_error_summary(title = config.default_error_summary_title)
|
892
|
-
Elements::ErrorSummary.new(self, object_name, title).html
|
894
|
+
def govuk_error_summary(title = config.default_error_summary_title, link_base_errors_to: nil)
|
895
|
+
Elements::ErrorSummary.new(self, object_name, title, link_base_errors_to: link_base_errors_to).html
|
893
896
|
end
|
894
897
|
|
895
898
|
# Generates a fieldset containing the contents of the block
|
@@ -30,11 +30,22 @@ module GOVUKDesignSystemFormBuilder
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def legend_element
|
33
|
-
@legend_element ||=
|
33
|
+
@legend_element ||= if @legend.nil?
|
34
|
+
Elements::Null.new
|
35
|
+
else
|
36
|
+
Elements::Legend.new(@builder, @object_name, @attribute_name, **legend_options)
|
37
|
+
end
|
34
38
|
end
|
35
39
|
|
36
40
|
def legend_options
|
37
|
-
|
41
|
+
case @legend
|
42
|
+
when Hash
|
43
|
+
@legend.merge(caption: @caption)
|
44
|
+
when Proc
|
45
|
+
{ content: @legend }
|
46
|
+
else
|
47
|
+
fail(ArgumentError, %(legend must be a Proc or Hash))
|
48
|
+
end
|
38
49
|
end
|
39
50
|
end
|
40
51
|
end
|
@@ -6,6 +6,7 @@ module GOVUKDesignSystemFormBuilder
|
|
6
6
|
|
7
7
|
include Traits::Label
|
8
8
|
include Traits::Hint
|
9
|
+
include Traits::FieldsetItem
|
9
10
|
include Traits::Conditional
|
10
11
|
|
11
12
|
def initialize(builder, object_name, attribute_name, value, unchecked_value, label:, hint:, link_errors:, multiple:, &block)
|
@@ -54,19 +55,7 @@ module GOVUKDesignSystemFormBuilder
|
|
54
55
|
%w(checkboxes__input).prefix(brand)
|
55
56
|
end
|
56
57
|
|
57
|
-
def
|
58
|
-
@label_element ||= Elements::Label.new(@builder, @object_name, @attribute_name, **label_content, **label_options)
|
59
|
-
end
|
60
|
-
|
61
|
-
def label_options
|
62
|
-
{ checkbox: true, value: @value, link_errors: @link_errors }
|
63
|
-
end
|
64
|
-
|
65
|
-
def hint_element
|
66
|
-
@hint_element ||= Elements::Hint.new(@builder, @object_name, @attribute_name, **hint_options, **hint_content)
|
67
|
-
end
|
68
|
-
|
69
|
-
def hint_options
|
58
|
+
def fieldset_options
|
70
59
|
{ checkbox: true }
|
71
60
|
end
|
72
61
|
|
@@ -9,7 +9,7 @@ module GOVUKDesignSystemFormBuilder
|
|
9
9
|
|
10
10
|
SEGMENTS = { day: '3i', month: '2i', year: '1i' }.freeze
|
11
11
|
|
12
|
-
def initialize(builder, object_name, attribute_name, legend:, caption:, hint:, date_of_birth: false, omit_day:, form_group:, &block)
|
12
|
+
def initialize(builder, object_name, attribute_name, legend:, caption:, hint:, date_of_birth: false, omit_day:, form_group:, wildcards:, &block)
|
13
13
|
super(builder, object_name, attribute_name, &block)
|
14
14
|
|
15
15
|
@legend = legend
|
@@ -18,6 +18,7 @@ module GOVUKDesignSystemFormBuilder
|
|
18
18
|
@date_of_birth = date_of_birth
|
19
19
|
@omit_day = omit_day
|
20
20
|
@form_group = form_group
|
21
|
+
@wildcards = wildcards
|
21
22
|
end
|
22
23
|
|
23
24
|
def html
|
@@ -82,13 +83,19 @@ module GOVUKDesignSystemFormBuilder
|
|
82
83
|
class: classes(width),
|
83
84
|
name: name(segment),
|
84
85
|
type: 'text',
|
85
|
-
pattern:
|
86
|
+
pattern: pattern(segment),
|
86
87
|
inputmode: 'numeric',
|
87
88
|
value: value,
|
88
89
|
autocomplete: date_of_birth_autocomplete_value(segment)
|
89
90
|
)
|
90
91
|
end
|
91
92
|
|
93
|
+
def pattern(segment)
|
94
|
+
return '[0-9X]*' if @wildcards && segment.in?(%i(day month))
|
95
|
+
|
96
|
+
'[0-9]*'
|
97
|
+
end
|
98
|
+
|
92
99
|
def classes(width)
|
93
100
|
%w(input date-input__input).prefix(brand).tap do |classes|
|
94
101
|
classes.push(%(#{brand}-input--width-#{width}))
|
@@ -3,10 +3,11 @@ module GOVUKDesignSystemFormBuilder
|
|
3
3
|
class ErrorSummary < Base
|
4
4
|
include Traits::Error
|
5
5
|
|
6
|
-
def initialize(builder, object_name, title)
|
7
|
-
@builder
|
8
|
-
@object_name
|
9
|
-
@title
|
6
|
+
def initialize(builder, object_name, title, link_base_errors_to:)
|
7
|
+
@builder = builder
|
8
|
+
@object_name = object_name
|
9
|
+
@title = title
|
10
|
+
@link_base_errors_to = link_base_errors_to
|
10
11
|
end
|
11
12
|
|
12
13
|
def html
|
@@ -54,7 +55,11 @@ module GOVUKDesignSystemFormBuilder
|
|
54
55
|
end
|
55
56
|
|
56
57
|
def field_id(attribute)
|
57
|
-
|
58
|
+
if attribute.eql?(:base) && @link_base_errors_to.present?
|
59
|
+
build_id('field', attribute_name: @link_base_errors_to)
|
60
|
+
else
|
61
|
+
build_id('field-error', attribute_name: attribute)
|
62
|
+
end
|
58
63
|
end
|
59
64
|
|
60
65
|
def summary_title_id
|
@@ -4,46 +4,39 @@ module GOVUKDesignSystemFormBuilder
|
|
4
4
|
include Traits::Caption
|
5
5
|
include Traits::Localisation
|
6
6
|
|
7
|
-
def initialize(builder, object_name, attribute_name,
|
7
|
+
def initialize(builder, object_name, attribute_name, text: nil, size: config.default_legend_size, hidden: false, tag: config.default_legend_tag, caption: nil, content: nil, **kwargs)
|
8
8
|
super(builder, object_name, attribute_name)
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
case legend
|
13
|
-
when NilClass
|
14
|
-
# do nothing
|
15
|
-
when Proc
|
16
|
-
@raw = capture { legend.call }
|
17
|
-
when Hash
|
18
|
-
defaults.merge(legend).tap do |l|
|
19
|
-
@text = retrieve_text(l.dig(:text))
|
20
|
-
@hidden = l.dig(:hidden)
|
21
|
-
@tag = l.dig(:tag)
|
22
|
-
@size = l.dig(:size)
|
23
|
-
@caption = caption
|
24
|
-
end
|
10
|
+
if content
|
11
|
+
@content = capture { content.call }
|
25
12
|
else
|
26
|
-
|
13
|
+
@text = retrieve_text(text)
|
14
|
+
@tag = tag
|
15
|
+
@size_class = size_class(size)
|
16
|
+
@tag = tag
|
17
|
+
@caption = caption
|
18
|
+
@hidden = hidden
|
19
|
+
@html_attributes = kwargs
|
27
20
|
end
|
28
21
|
end
|
29
22
|
|
30
23
|
def html
|
31
|
-
@
|
24
|
+
@content || legend
|
32
25
|
end
|
33
26
|
|
34
27
|
private
|
35
28
|
|
36
29
|
def active?
|
37
|
-
[@text, @
|
30
|
+
[@text, @content].any?(&:present?)
|
38
31
|
end
|
39
32
|
|
40
|
-
def
|
33
|
+
def legend
|
41
34
|
return unless active?
|
42
35
|
|
43
|
-
tag.legend(
|
36
|
+
tag.legend(legend_content, class: classes, **@html_attributes)
|
44
37
|
end
|
45
38
|
|
46
|
-
def
|
39
|
+
def legend_content
|
47
40
|
caption_and_text = safe_join([caption_element, @text])
|
48
41
|
|
49
42
|
if @tag.present?
|
@@ -58,17 +51,14 @@ module GOVUKDesignSystemFormBuilder
|
|
58
51
|
end
|
59
52
|
|
60
53
|
def classes
|
61
|
-
[%(#{brand}-fieldset__legend), size_class, visually_hidden_class].compact
|
54
|
+
[%(#{brand}-fieldset__legend), @size_class, visually_hidden_class].compact
|
62
55
|
end
|
63
56
|
|
64
|
-
def size_class
|
65
|
-
|
66
|
-
|
67
|
-
when 'l' then %(#{brand}-fieldset__legend--l)
|
68
|
-
when 'm' then %(#{brand}-fieldset__legend--m)
|
69
|
-
when 's' then %(#{brand}-fieldset__legend--s)
|
57
|
+
def size_class(size)
|
58
|
+
if size.in?(%w(xl l m s))
|
59
|
+
%(#{brand}-fieldset__legend--#{size})
|
70
60
|
else
|
71
|
-
fail "invalid size '#{
|
61
|
+
fail "invalid size '#{size}', must be xl, l, m or s"
|
72
62
|
end
|
73
63
|
end
|
74
64
|
|
@@ -79,15 +69,6 @@ module GOVUKDesignSystemFormBuilder
|
|
79
69
|
def heading_classes
|
80
70
|
%(#{brand}-fieldset__heading)
|
81
71
|
end
|
82
|
-
|
83
|
-
def defaults
|
84
|
-
{
|
85
|
-
hidden: false,
|
86
|
-
text: nil,
|
87
|
-
tag: config.default_legend_tag,
|
88
|
-
size: config.default_legend_size
|
89
|
-
}
|
90
|
-
end
|
91
72
|
end
|
92
73
|
end
|
93
74
|
end
|
@@ -6,6 +6,7 @@ module GOVUKDesignSystemFormBuilder
|
|
6
6
|
|
7
7
|
include Traits::Label
|
8
8
|
include Traits::Hint
|
9
|
+
include Traits::FieldsetItem
|
9
10
|
include Traits::Conditional
|
10
11
|
|
11
12
|
def initialize(builder, object_name, attribute_name, value, label:, hint:, link_errors:, &block)
|
@@ -34,26 +35,10 @@ module GOVUKDesignSystemFormBuilder
|
|
34
35
|
end
|
35
36
|
end
|
36
37
|
|
37
|
-
def
|
38
|
+
def fieldset_options
|
38
39
|
{ radio: true }
|
39
40
|
end
|
40
41
|
|
41
|
-
def label_element
|
42
|
-
@label_element ||= Elements::Label.new(@builder, @object_name, @attribute_name, **label_content, **label_options)
|
43
|
-
end
|
44
|
-
|
45
|
-
def label_options
|
46
|
-
{ value: @value, link_errors: @link_errors }.merge(radio_options)
|
47
|
-
end
|
48
|
-
|
49
|
-
def hint_element
|
50
|
-
@hint_element ||= Elements::Hint.new(@builder, @object_name, @attribute_name, **hint_options, **hint_content)
|
51
|
-
end
|
52
|
-
|
53
|
-
def hint_options
|
54
|
-
{ value: @value }.merge(radio_options)
|
55
|
-
end
|
56
|
-
|
57
42
|
def input
|
58
43
|
@builder.radio_button(@attribute_name, @value, **options)
|
59
44
|
end
|
@@ -4,11 +4,11 @@ module GOVUKDesignSystemFormBuilder
|
|
4
4
|
private
|
5
5
|
|
6
6
|
def caption_element
|
7
|
-
@caption_element ||=
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
7
|
+
@caption_element ||= if @caption.nil?
|
8
|
+
Elements::Null.new
|
9
|
+
else
|
10
|
+
Elements::Caption.new(@builder, @object_name, @attribute_name, **@caption)
|
11
|
+
end
|
12
12
|
end
|
13
13
|
end
|
14
14
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module GOVUKDesignSystemFormBuilder
|
2
|
+
module Traits
|
3
|
+
module FieldsetItem
|
4
|
+
private
|
5
|
+
|
6
|
+
def label_element
|
7
|
+
@label_element ||= if @label.nil?
|
8
|
+
Elements::Null.new
|
9
|
+
else
|
10
|
+
Elements::Label.new(@builder, @object_name, @attribute_name, **label_content, **label_options)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def label_options
|
15
|
+
{ value: @value, link_errors: @link_errors }.merge(fieldset_options)
|
16
|
+
end
|
17
|
+
|
18
|
+
def hint_element
|
19
|
+
@hint_element ||= if @hint.nil?
|
20
|
+
Elements::Null.new
|
21
|
+
else
|
22
|
+
Elements::Hint.new(@builder, @object_name, @attribute_name, **hint_options, **hint_content)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def hint_options
|
27
|
+
{ value: @value }.merge(fieldset_options)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -10,13 +10,15 @@ module GOVUKDesignSystemFormBuilder
|
|
10
10
|
private
|
11
11
|
|
12
12
|
def hint_element
|
13
|
-
@hint_element ||=
|
13
|
+
@hint_element ||= if @hint.nil?
|
14
|
+
Elements::Null.new
|
15
|
+
else
|
16
|
+
Elements::Hint.new(@builder, @object_name, @attribute_name, **hint_content)
|
17
|
+
end
|
14
18
|
end
|
15
19
|
|
16
20
|
def hint_content
|
17
21
|
case @hint
|
18
|
-
when NilClass
|
19
|
-
{}
|
20
22
|
when Hash
|
21
23
|
@hint
|
22
24
|
when Proc
|
@@ -4,7 +4,11 @@ module GOVUKDesignSystemFormBuilder
|
|
4
4
|
private
|
5
5
|
|
6
6
|
def label_element
|
7
|
-
@label_element ||=
|
7
|
+
@label_element ||= if @label.nil?
|
8
|
+
Elements::Null.new
|
9
|
+
else
|
10
|
+
Elements::Label.new(@builder, @object_name, @attribute_name, caption: @caption, **label_content)
|
11
|
+
end
|
8
12
|
end
|
9
13
|
|
10
14
|
def label_content
|
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: 2.1.
|
4
|
+
version: 2.1.5
|
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-11-28 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.17.
|
61
|
+
version: 3.17.2
|
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.17.
|
68
|
+
version: 3.17.2
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: pry
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -176,14 +176,14 @@ dependencies:
|
|
176
176
|
requirements:
|
177
177
|
- - "~>"
|
178
178
|
- !ruby/object:Gem::Version
|
179
|
-
version: 3.
|
179
|
+
version: 3.24.0
|
180
180
|
type: :development
|
181
181
|
prerelease: false
|
182
182
|
version_requirements: !ruby/object:Gem::Requirement
|
183
183
|
requirements:
|
184
184
|
- - "~>"
|
185
185
|
- !ruby/object:Gem::Version
|
186
|
-
version: 3.
|
186
|
+
version: 3.24.0
|
187
187
|
- !ruby/object:Gem::Dependency
|
188
188
|
name: rubypants
|
189
189
|
requirement: !ruby/object:Gem::Requirement
|
@@ -278,6 +278,7 @@ files:
|
|
278
278
|
- lib/govuk_design_system_formbuilder/elements/inputs/url.rb
|
279
279
|
- lib/govuk_design_system_formbuilder/elements/label.rb
|
280
280
|
- lib/govuk_design_system_formbuilder/elements/legend.rb
|
281
|
+
- lib/govuk_design_system_formbuilder/elements/null.rb
|
281
282
|
- lib/govuk_design_system_formbuilder/elements/radios/collection.rb
|
282
283
|
- lib/govuk_design_system_formbuilder/elements/radios/collection_radio_button.rb
|
283
284
|
- lib/govuk_design_system_formbuilder/elements/radios/fieldset_radio_button.rb
|
@@ -288,6 +289,7 @@ files:
|
|
288
289
|
- lib/govuk_design_system_formbuilder/traits/collection_item.rb
|
289
290
|
- lib/govuk_design_system_formbuilder/traits/conditional.rb
|
290
291
|
- lib/govuk_design_system_formbuilder/traits/error.rb
|
292
|
+
- lib/govuk_design_system_formbuilder/traits/fieldset_item.rb
|
291
293
|
- lib/govuk_design_system_formbuilder/traits/hint.rb
|
292
294
|
- lib/govuk_design_system_formbuilder/traits/input.rb
|
293
295
|
- lib/govuk_design_system_formbuilder/traits/label.rb
|