govuk_design_system_formbuilder 0.9.7 → 0.9.8
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/base.rb +5 -3
- data/lib/govuk_design_system_formbuilder/builder.rb +3 -2
- data/lib/govuk_design_system_formbuilder/containers/character_count.rb +1 -1
- data/lib/govuk_design_system_formbuilder/containers/check_boxes.rb +1 -1
- data/lib/govuk_design_system_formbuilder/containers/check_boxes_fieldset.rb +2 -2
- data/lib/govuk_design_system_formbuilder/containers/fieldset.rb +4 -4
- data/lib/govuk_design_system_formbuilder/containers/form_group.rb +1 -1
- data/lib/govuk_design_system_formbuilder/containers/radio_buttons_fieldset.rb +2 -2
- data/lib/govuk_design_system_formbuilder/containers/radios.rb +1 -1
- data/lib/govuk_design_system_formbuilder/containers/supplemental.rb +1 -1
- data/lib/govuk_design_system_formbuilder/elements/check_boxes/collection.rb +1 -1
- 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 +3 -3
- data/lib/govuk_design_system_formbuilder/elements/check_boxes/hint.rb +1 -1
- data/lib/govuk_design_system_formbuilder/elements/date.rb +31 -17
- data/lib/govuk_design_system_formbuilder/elements/error_message.rb +3 -3
- data/lib/govuk_design_system_formbuilder/elements/error_summary.rb +8 -8
- data/lib/govuk_design_system_formbuilder/elements/file.rb +1 -1
- data/lib/govuk_design_system_formbuilder/elements/hint.rb +1 -1
- data/lib/govuk_design_system_formbuilder/elements/inputs/base.rb +1 -1
- data/lib/govuk_design_system_formbuilder/elements/label.rb +3 -3
- data/lib/govuk_design_system_formbuilder/elements/radios/collection.rb +2 -2
- 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 +3 -3
- data/lib/govuk_design_system_formbuilder/elements/select.rb +1 -1
- data/lib/govuk_design_system_formbuilder/elements/submit.rb +3 -3
- data/lib/govuk_design_system_formbuilder/elements/text_area.rb +1 -1
- data/lib/govuk_design_system_formbuilder/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 34191822b2322a27884781b5fdc5d494385f0386b349c8253c213f76cef55600
|
4
|
+
data.tar.gz: dc0d69655c5d8bcbeaa967b852566abec1b821ad9ef43a6f0a4bc65afafc841a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 21f8a1d3f15d4de5f01bb54804fbb700ca902f6cb7dee40ab686b500d3d9133f2c3983b48fb4ee040ffcb24c19d03c5511736dc9ca732d3204caeb45ad185e20
|
7
|
+
data.tar.gz: 154333ebb09be62fd38a1d4c0b3449d0a140d2c732e1010f2a164b095f93cd1d67c6870fbf6908729cc8a78cc02ea131f67677f685cef680a276611706b1b2b6
|
data/README.md
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
[![Netlify Status](https://api.netlify.com/api/v1/badges/d4c50b8d-6ca3-4797-9ab3-6e0731c72b44/deploy-status)](https://app.netlify.com/sites/govuk-form-builder/deploys)
|
8
8
|
|
9
9
|
This gem provides a easy-to-use form builder that generates forms that are
|
10
|
-
fully-compliant with version 3.
|
10
|
+
fully-compliant with version 3.3.0 of the [GOV.UK Design System](https://design-system.service.gov.uk/),
|
11
11
|
minimising the amount of markup you need to write.
|
12
12
|
|
13
13
|
The latest version of this gem that supports GOV.UK Design System version 2 is
|
@@ -1,10 +1,12 @@
|
|
1
1
|
module GOVUKDesignSystemFormBuilder
|
2
2
|
class Base
|
3
|
+
delegate :capture, :content_tag, :safe_join, :tag, :raw, :link_to, to: :@builder
|
4
|
+
|
3
5
|
def initialize(builder, object_name, attribute_name, &block)
|
4
6
|
@builder = builder
|
5
7
|
@object_name = object_name
|
6
8
|
@attribute_name = attribute_name
|
7
|
-
@block_content =
|
9
|
+
@block_content = capture { block.call } if block_given?
|
8
10
|
end
|
9
11
|
|
10
12
|
def hint_element
|
@@ -72,8 +74,8 @@ module GOVUKDesignSystemFormBuilder
|
|
72
74
|
end
|
73
75
|
|
74
76
|
def wrap_conditional(block)
|
75
|
-
|
76
|
-
|
77
|
+
content_tag('div', class: conditional_classes, id: conditional_id) do
|
78
|
+
capture { block.call }
|
77
79
|
end
|
78
80
|
end
|
79
81
|
|
@@ -465,6 +465,7 @@ module GOVUKDesignSystemFormBuilder
|
|
465
465
|
# @option legend text [String] the fieldset legend's text content
|
466
466
|
# @option legend size [String] the size of the fieldset legend font, can be +xl+, +l+, +m+ or +s+
|
467
467
|
# @option legend tag [Symbol,String] the tag used for the fieldset's header, defaults to +h1+
|
468
|
+
# @param omit_day [Boolean] do not render a day input, only capture month and year
|
468
469
|
# @param block [Block] arbitrary HTML that will be rendered between the hint and the input group
|
469
470
|
# @param date_of_birth [Boolean] if +true+ {https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete#Values birth date auto completion attributes}
|
470
471
|
# will be added to the inputs
|
@@ -476,8 +477,8 @@ module GOVUKDesignSystemFormBuilder
|
|
476
477
|
# = f.govuk_date_field :starts_on,
|
477
478
|
# legend: { 'When does your event start?' },
|
478
479
|
# hint_text: 'Leave this field blank if you don't know exactly' }
|
479
|
-
def govuk_date_field(attribute_name, hint_text: nil, legend: {}, date_of_birth: false, &block)
|
480
|
-
Elements::Date.new(self, object_name, attribute_name, hint_text: hint_text, legend: legend, date_of_birth: date_of_birth, &block).html
|
480
|
+
def govuk_date_field(attribute_name, hint_text: nil, legend: {}, date_of_birth: false, omit_day: false, &block)
|
481
|
+
Elements::Date.new(self, object_name, attribute_name, hint_text: hint_text, legend: legend, date_of_birth: date_of_birth, omit_day: omit_day, &block).html
|
481
482
|
end
|
482
483
|
|
483
484
|
# Generates a summary of errors in the form, each linking to the corresponding
|
@@ -7,7 +7,7 @@ module GOVUKDesignSystemFormBuilder
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def html
|
10
|
-
|
10
|
+
content_tag('div', class: check_boxes_classes, data: { module: 'govuk-checkboxes' }) do
|
11
11
|
yield
|
12
12
|
end
|
13
13
|
end
|
@@ -7,13 +7,13 @@ module GOVUKDesignSystemFormBuilder
|
|
7
7
|
@legend = legend
|
8
8
|
@hint_text = hint_text
|
9
9
|
@small = small
|
10
|
-
@block_content =
|
10
|
+
@block_content = capture { block.call }
|
11
11
|
end
|
12
12
|
|
13
13
|
def html
|
14
14
|
Containers::FormGroup.new(@builder, @object_name, @attribute_name).html do
|
15
15
|
Containers::Fieldset.new(@builder, legend: @legend, described_by: [error_element.error_id, hint_element.hint_id]).html do
|
16
|
-
|
16
|
+
safe_join(
|
17
17
|
[
|
18
18
|
hint_element.html,
|
19
19
|
error_element.html,
|
@@ -11,8 +11,8 @@ module GOVUKDesignSystemFormBuilder
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def html
|
14
|
-
|
15
|
-
|
14
|
+
content_tag('fieldset', class: fieldset_classes, aria: { describedby: @described_by }) do
|
15
|
+
safe_join([build_legend, yield])
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
@@ -20,8 +20,8 @@ module GOVUKDesignSystemFormBuilder
|
|
20
20
|
|
21
21
|
def build_legend
|
22
22
|
if @legend.dig(:text).present?
|
23
|
-
|
24
|
-
|
23
|
+
content_tag('legend', class: legend_classes) do
|
24
|
+
tag.send(@legend.dig(:tag), @legend.dig(:text), class: legend_heading_classes)
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
@@ -8,13 +8,13 @@ module GOVUKDesignSystemFormBuilder
|
|
8
8
|
@small = small
|
9
9
|
@legend = legend
|
10
10
|
@hint_text = hint_text
|
11
|
-
@block_content =
|
11
|
+
@block_content = capture { block.call }
|
12
12
|
end
|
13
13
|
|
14
14
|
def html
|
15
15
|
Containers::FormGroup.new(@builder, @object_name, @attribute_name).html do
|
16
16
|
Containers::Fieldset.new(@builder, legend: @legend, described_by: [error_element.error_id, hint_element.hint_id]).html do
|
17
|
-
|
17
|
+
safe_join(
|
18
18
|
[
|
19
19
|
hint_element.html,
|
20
20
|
error_element.html,
|
@@ -17,7 +17,7 @@ module GOVUKDesignSystemFormBuilder
|
|
17
17
|
def html
|
18
18
|
Containers::FormGroup.new(@builder, @object_name, @attribute_name).html do
|
19
19
|
Containers::Fieldset.new(@builder, legend: @legend, described_by: [error_id, hint_id, supplemental_id]).html do
|
20
|
-
|
20
|
+
safe_join(
|
21
21
|
[
|
22
22
|
hint_element.html,
|
23
23
|
error_element.html,
|
@@ -12,8 +12,8 @@ module GOVUKDesignSystemFormBuilder
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def html
|
15
|
-
|
16
|
-
|
15
|
+
content_tag('div', class: 'govuk-checkboxes__item') do
|
16
|
+
safe_join(
|
17
17
|
[
|
18
18
|
@checkbox.check_box(
|
19
19
|
id: field_id(link_errors: @link_errors),
|
@@ -18,10 +18,10 @@ module GOVUKDesignSystemFormBuilder
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def html
|
21
|
-
|
21
|
+
safe_join(
|
22
22
|
[
|
23
|
-
|
24
|
-
|
23
|
+
content_tag('div', class: 'govuk-checkboxes__item') do
|
24
|
+
safe_join(
|
25
25
|
[
|
26
26
|
input,
|
27
27
|
label_element.html,
|
@@ -3,29 +3,25 @@ module GOVUKDesignSystemFormBuilder
|
|
3
3
|
class Date < GOVUKDesignSystemFormBuilder::Base
|
4
4
|
SEGMENTS = { day: '3i', month: '2i', year: '1i' }.freeze
|
5
5
|
|
6
|
-
def initialize(builder, object_name, attribute_name, legend:, hint_text:, date_of_birth: false, &block)
|
6
|
+
def initialize(builder, object_name, attribute_name, legend:, hint_text:, date_of_birth: false, omit_day:, &block)
|
7
7
|
super(builder, object_name, attribute_name, &block)
|
8
|
-
|
9
|
-
@
|
8
|
+
|
9
|
+
@legend = legend
|
10
|
+
@hint_text = hint_text
|
10
11
|
@date_of_birth = date_of_birth
|
12
|
+
@omit_day = omit_day
|
11
13
|
end
|
12
14
|
|
13
15
|
def html
|
14
16
|
Containers::FormGroup.new(@builder, @object_name, @attribute_name).html do
|
15
17
|
Containers::Fieldset.new(@builder, legend: @legend, described_by: [error_id, hint_id, supplemental_id]).html do
|
16
|
-
|
18
|
+
safe_join(
|
17
19
|
[
|
18
20
|
hint_element.html,
|
19
21
|
error_element.html,
|
20
22
|
supplemental_content.html,
|
21
|
-
|
22
|
-
|
23
|
-
[
|
24
|
-
date_input_item(:day, link_errors: true),
|
25
|
-
date_input_item(:month),
|
26
|
-
date_input_item(:year, width: 4)
|
27
|
-
]
|
28
|
-
)
|
23
|
+
content_tag('div', class: 'govuk-date-input') do
|
24
|
+
safe_join([day, month, year])
|
29
25
|
end
|
30
26
|
]
|
31
27
|
)
|
@@ -35,20 +31,38 @@ module GOVUKDesignSystemFormBuilder
|
|
35
31
|
|
36
32
|
private
|
37
33
|
|
34
|
+
def omit_day?
|
35
|
+
@omit_day
|
36
|
+
end
|
37
|
+
|
38
|
+
def day
|
39
|
+
return nil if omit_day?
|
40
|
+
|
41
|
+
date_input_item(:day, link_errors: true)
|
42
|
+
end
|
43
|
+
|
44
|
+
def month
|
45
|
+
date_input_item(:month, link_errors: omit_day?)
|
46
|
+
end
|
47
|
+
|
48
|
+
def year
|
49
|
+
date_input_item(:year, width: 4)
|
50
|
+
end
|
51
|
+
|
38
52
|
def date_input_item(segment, width: 2, link_errors: false)
|
39
53
|
value = @builder.object.try(@attribute_name).try(segment)
|
40
54
|
|
41
|
-
|
42
|
-
|
43
|
-
|
55
|
+
content_tag('div', class: %w(govuk-date-input__item)) do
|
56
|
+
content_tag('div', class: %w(govuk-form-group)) do
|
57
|
+
safe_join(
|
44
58
|
[
|
45
|
-
|
59
|
+
tag.label(
|
46
60
|
segment.capitalize,
|
47
61
|
class: date_input_label_classes,
|
48
62
|
for: date_attribute_id(segment, link_errors)
|
49
63
|
),
|
50
64
|
|
51
|
-
|
65
|
+
tag.input(
|
52
66
|
id: date_attribute_id(segment, link_errors),
|
53
67
|
class: date_input_classes(width),
|
54
68
|
name: date_attribute_name(segment),
|
@@ -8,10 +8,10 @@ module GOVUKDesignSystemFormBuilder
|
|
8
8
|
def html
|
9
9
|
return nil unless has_errors?
|
10
10
|
|
11
|
-
|
12
|
-
|
11
|
+
content_tag('span', class: 'govuk-error-message', id: error_id) do
|
12
|
+
safe_join(
|
13
13
|
[
|
14
|
-
|
14
|
+
tag.span('Error: ', class: 'govuk-visually-hidden'),
|
15
15
|
message
|
16
16
|
]
|
17
17
|
)
|
@@ -10,13 +10,13 @@ module GOVUKDesignSystemFormBuilder
|
|
10
10
|
def html
|
11
11
|
return nil unless object_has_errors?
|
12
12
|
|
13
|
-
|
14
|
-
|
13
|
+
content_tag('div', class: summary_class, **error_summary_attributes) do
|
14
|
+
safe_join(
|
15
15
|
[
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
16
|
+
tag.h2(@title, id: error_summary_title_id, class: summary_class('title')),
|
17
|
+
content_tag('div', class: summary_class('body')) do
|
18
|
+
content_tag('ul', class: ['govuk-list', summary_class('list')]) do
|
19
|
+
safe_join(
|
20
20
|
@builder.object.errors.messages.map do |attribute, messages|
|
21
21
|
error_list_item(attribute, messages.first)
|
22
22
|
end
|
@@ -31,8 +31,8 @@ module GOVUKDesignSystemFormBuilder
|
|
31
31
|
private
|
32
32
|
|
33
33
|
def error_list_item(attribute, message)
|
34
|
-
|
35
|
-
|
34
|
+
content_tag('li') do
|
35
|
+
link_to(
|
36
36
|
message,
|
37
37
|
same_page_link(field_id(attribute)),
|
38
38
|
data: {
|
@@ -17,7 +17,7 @@ module GOVUKDesignSystemFormBuilder
|
|
17
17
|
return nil if @text.blank?
|
18
18
|
|
19
19
|
if @tag.present?
|
20
|
-
|
20
|
+
content_tag(@tag, class: 'govuk-label-wrapper') { build_label }
|
21
21
|
else
|
22
22
|
build_label
|
23
23
|
end
|
@@ -40,9 +40,9 @@ module GOVUKDesignSystemFormBuilder
|
|
40
40
|
text = [option_text, @value, @attribute_name.capitalize].compact.first
|
41
41
|
|
42
42
|
if hidden
|
43
|
-
|
43
|
+
tag.span(text, class: %w(govuk-visually-hidden))
|
44
44
|
else
|
45
|
-
|
45
|
+
raw(text)
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
@@ -19,13 +19,13 @@ module GOVUKDesignSystemFormBuilder
|
|
19
19
|
def html
|
20
20
|
Containers::FormGroup.new(@builder, @object_name, @attribute_name).html do
|
21
21
|
Containers::Fieldset.new(@builder, legend: @legend, described_by: [error_id, hint_id, supplemental_id]).html do
|
22
|
-
|
22
|
+
safe_join(
|
23
23
|
[
|
24
24
|
hint_element.html,
|
25
25
|
error_element.html,
|
26
26
|
supplemental_content.html,
|
27
27
|
Containers::Radios.new(@builder, inline: @inline, small: @small).html do
|
28
|
-
|
28
|
+
safe_join(build_collection)
|
29
29
|
end
|
30
30
|
]
|
31
31
|
)
|
@@ -17,8 +17,8 @@ module GOVUKDesignSystemFormBuilder
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def html
|
20
|
-
|
21
|
-
|
20
|
+
content_tag('div', class: 'govuk-radios__item') do
|
21
|
+
safe_join(
|
22
22
|
[
|
23
23
|
@builder.radio_button(
|
24
24
|
@attribute_name,
|
@@ -17,10 +17,10 @@ module GOVUKDesignSystemFormBuilder
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def html
|
20
|
-
|
20
|
+
safe_join(
|
21
21
|
[
|
22
|
-
|
23
|
-
|
22
|
+
content_tag('div', class: 'govuk-radios__item') do
|
23
|
+
safe_join(
|
24
24
|
[
|
25
25
|
input,
|
26
26
|
label_element.html,
|
@@ -10,12 +10,12 @@ module GOVUKDesignSystemFormBuilder
|
|
10
10
|
@warning = warning
|
11
11
|
@secondary = secondary
|
12
12
|
@validate = validate
|
13
|
-
@block_content =
|
13
|
+
@block_content = capture { block.call } if block_given?
|
14
14
|
end
|
15
15
|
|
16
16
|
def html
|
17
|
-
|
18
|
-
|
17
|
+
content_tag('div', class: %w(govuk-form-group)) do
|
18
|
+
safe_join(
|
19
19
|
[
|
20
20
|
@builder.submit(
|
21
21
|
@text,
|
@@ -15,7 +15,7 @@ module GOVUKDesignSystemFormBuilder
|
|
15
15
|
def html
|
16
16
|
Containers::CharacterCount.new(@builder, max_words: @max_words, max_chars: @max_chars, threshold: @threshold).html do
|
17
17
|
Containers::FormGroup.new(@builder, @object_name, @attribute_name).html do
|
18
|
-
|
18
|
+
safe_join(
|
19
19
|
[
|
20
20
|
[label_element, hint_element, error_element, supplemental_content].map(&:html),
|
21
21
|
@builder.text_area(
|
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: 0.9.
|
4
|
+
version: 0.9.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Yates
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-11-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: actionview
|