govuk_design_system_formbuilder 2.7.6 → 2.8.0
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 +3 -2
- data/lib/govuk_design_system_formbuilder/elements/date.rb +24 -15
- data/lib/govuk_design_system_formbuilder/elements/error_message.rb +1 -1
- data/lib/govuk_design_system_formbuilder/elements/error_summary.rb +3 -1
- data/lib/govuk_design_system_formbuilder/elements/file.rb +2 -3
- data/lib/govuk_design_system_formbuilder/elements/text_area.rb +3 -5
- data/lib/govuk_design_system_formbuilder/traits/error.rb +4 -0
- data/lib/govuk_design_system_formbuilder/traits/html_classes.rb +36 -0
- data/lib/govuk_design_system_formbuilder/version.rb +1 -1
- data/lib/govuk_design_system_formbuilder.rb +6 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 84999693662af580363425f17c82d516d675c30d000ccd7e46a3d4607b63b32e
|
4
|
+
data.tar.gz: fe9b2a8f8cd05ec1eb56d915223a387ba4d86390dbee1e771f9c32263afd054a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f48bdf7f824047df1dccc6b53412cb454f3f30af9805ba5b6fafa91d89454e03ef929d534919b0695ca0db0804d84de18a01779074382d96e7c457c2e4a727cf
|
7
|
+
data.tar.gz: c5d24743fa044cf0b71b3b3609239c0787ed0551a6993f74f238385217782f4167439470070c4dd0f4d24b1bdcb1446cb6c996d3aef51f001c016dde55945800
|
@@ -912,6 +912,7 @@ module GOVUKDesignSystemFormBuilder
|
|
912
912
|
# @option caption size [String] the size of the caption, can be +xl+, +l+ or +m+. Defaults to +m+
|
913
913
|
# @option caption kwargs [Hash] additional arguments are applied as attributes on the caption +span+ element
|
914
914
|
# @param omit_day [Boolean] do not render a day input, only capture month and year
|
915
|
+
# @param maxlength_enabled [Boolean] adds maxlength attribute to day, month and year inputs (2, 2, and 4, respectively)
|
915
916
|
# @param wildcards [Boolean] add an 'X' to the day and month patterns so users can add approximate dates
|
916
917
|
# @param form_group [Hash] configures the form group
|
917
918
|
# @option form_group classes [Array,String] sets the form group's classes
|
@@ -936,8 +937,8 @@ module GOVUKDesignSystemFormBuilder
|
|
936
937
|
# @example A date input with legend supplied as a proc
|
937
938
|
# = f.govuk_date_field :finishes_on,
|
938
939
|
# legend: -> { tag.h3('Which category do you belong to?') }
|
939
|
-
def govuk_date_field(attribute_name, hint: {}, legend: {}, caption: {}, date_of_birth: false, omit_day: false, form_group: {}, wildcards: false, **kwargs, &block)
|
940
|
-
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, **kwargs, &block).html
|
940
|
+
def govuk_date_field(attribute_name, hint: {}, legend: {}, caption: {}, date_of_birth: false, omit_day: false, maxlength_enabled: false, form_group: {}, wildcards: false, **kwargs, &block)
|
941
|
+
Elements::Date.new(self, object_name, attribute_name, hint: hint, legend: legend, caption: caption, date_of_birth: date_of_birth, omit_day: omit_day, maxlength_enabled: maxlength_enabled, form_group: form_group, wildcards: wildcards, **kwargs, &block).html
|
941
942
|
end
|
942
943
|
|
943
944
|
# Generates a summary of errors in the form, each linking to the corresponding
|
@@ -6,21 +6,23 @@ module GOVUKDesignSystemFormBuilder
|
|
6
6
|
include Traits::Error
|
7
7
|
include Traits::Hint
|
8
8
|
include Traits::Supplemental
|
9
|
+
include Traits::HTMLClasses
|
9
10
|
|
10
11
|
SEGMENTS = { day: '3i', month: '2i', year: '1i' }.freeze
|
11
12
|
MULTIPARAMETER_KEY = { day: 3, month: 2, year: 1 }.freeze
|
12
13
|
|
13
|
-
def initialize(builder, object_name, attribute_name, legend:, caption:, hint:, omit_day:, form_group:, wildcards:, date_of_birth: false, **kwargs, &block)
|
14
|
+
def initialize(builder, object_name, attribute_name, legend:, caption:, hint:, omit_day:, maxlength_enabled:, form_group:, wildcards:, date_of_birth: false, **kwargs, &block)
|
14
15
|
super(builder, object_name, attribute_name, &block)
|
15
16
|
|
16
|
-
@legend
|
17
|
-
@caption
|
18
|
-
@hint
|
19
|
-
@date_of_birth
|
20
|
-
@omit_day
|
21
|
-
@
|
22
|
-
@
|
23
|
-
@
|
17
|
+
@legend = legend
|
18
|
+
@caption = caption
|
19
|
+
@hint = hint
|
20
|
+
@date_of_birth = date_of_birth
|
21
|
+
@omit_day = omit_day
|
22
|
+
@maxlength_enabled = maxlength_enabled
|
23
|
+
@form_group = form_group
|
24
|
+
@wildcards = wildcards
|
25
|
+
@html_attributes = kwargs
|
24
26
|
end
|
25
27
|
|
26
28
|
def html
|
@@ -47,6 +49,10 @@ module GOVUKDesignSystemFormBuilder
|
|
47
49
|
@omit_day
|
48
50
|
end
|
49
51
|
|
52
|
+
def maxlength_enabled?
|
53
|
+
@maxlength_enabled
|
54
|
+
end
|
55
|
+
|
50
56
|
def day
|
51
57
|
return if omit_day?
|
52
58
|
|
@@ -104,7 +110,8 @@ module GOVUKDesignSystemFormBuilder
|
|
104
110
|
pattern: pattern(segment),
|
105
111
|
inputmode: 'numeric',
|
106
112
|
value: value,
|
107
|
-
autocomplete: date_of_birth_autocomplete_value(segment)
|
113
|
+
autocomplete: date_of_birth_autocomplete_value(segment),
|
114
|
+
maxlength: (width if maxlength_enabled?),
|
108
115
|
)
|
109
116
|
end
|
110
117
|
|
@@ -115,10 +122,12 @@ module GOVUKDesignSystemFormBuilder
|
|
115
122
|
end
|
116
123
|
|
117
124
|
def classes(width)
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
125
|
+
build_classes(
|
126
|
+
%(input),
|
127
|
+
%(date-input__input),
|
128
|
+
%(input--width-#{width}),
|
129
|
+
%(input--error) => has_errors?,
|
130
|
+
).prefix(brand)
|
122
131
|
end
|
123
132
|
|
124
133
|
# if the field has errors we want the govuk_error_summary to
|
@@ -148,7 +157,7 @@ module GOVUKDesignSystemFormBuilder
|
|
148
157
|
end
|
149
158
|
|
150
159
|
def label_classes
|
151
|
-
%
|
160
|
+
build_classes(%(label), %(date-input__label)).prefix(brand)
|
152
161
|
end
|
153
162
|
end
|
154
163
|
end
|
@@ -81,7 +81,9 @@ module GOVUKDesignSystemFormBuilder
|
|
81
81
|
end
|
82
82
|
|
83
83
|
def list_item(attribute, message, url = nil)
|
84
|
-
|
84
|
+
target = url || same_page_link(field_id(attribute))
|
85
|
+
|
86
|
+
tag.li(link_to(set_message_safety(message), target, **link_options))
|
85
87
|
end
|
86
88
|
|
87
89
|
def same_page_link(target)
|
@@ -8,6 +8,7 @@ module GOVUKDesignSystemFormBuilder
|
|
8
8
|
include Traits::Label
|
9
9
|
include Traits::Supplemental
|
10
10
|
include Traits::HTMLAttributes
|
11
|
+
include Traits::HTMLClasses
|
11
12
|
|
12
13
|
def initialize(builder, object_name, attribute_name, hint:, label:, caption:, form_group:, **kwargs, &block)
|
13
14
|
super(builder, object_name, attribute_name, &block)
|
@@ -40,9 +41,7 @@ module GOVUKDesignSystemFormBuilder
|
|
40
41
|
end
|
41
42
|
|
42
43
|
def classes
|
43
|
-
%
|
44
|
-
c.push(%(#{brand}-file-upload--error)) if has_errors?
|
45
|
-
end
|
44
|
+
build_classes(%(file-upload), %(file-upload--error) => has_errors?).prefix(brand)
|
46
45
|
end
|
47
46
|
end
|
48
47
|
end
|
@@ -8,6 +8,7 @@ module GOVUKDesignSystemFormBuilder
|
|
8
8
|
include Traits::Label
|
9
9
|
include Traits::Supplemental
|
10
10
|
include Traits::HTMLAttributes
|
11
|
+
include Traits::HTMLClasses
|
11
12
|
|
12
13
|
def initialize(builder, object_name, attribute_name, hint:, label:, caption:, rows:, max_words:, max_chars:, threshold:, form_group:, **kwargs, &block)
|
13
14
|
super(builder, object_name, attribute_name, &block)
|
@@ -42,10 +43,7 @@ module GOVUKDesignSystemFormBuilder
|
|
42
43
|
end
|
43
44
|
|
44
45
|
def classes
|
45
|
-
%
|
46
|
-
classes.push(%(#{brand}-textarea--error)) if has_errors?
|
47
|
-
classes.push(%(#{brand}-js-character-count)) if limit?
|
48
|
-
end
|
46
|
+
build_classes(%(textarea), %(textarea--error) => has_errors?, %(js-character-count) => limit?).prefix(brand)
|
49
47
|
end
|
50
48
|
|
51
49
|
def options
|
@@ -86,7 +84,7 @@ module GOVUKDesignSystemFormBuilder
|
|
86
84
|
end
|
87
85
|
|
88
86
|
def limit_description_classes
|
89
|
-
%
|
87
|
+
build_classes(%(hint), %(character-count__message)).prefix(brand)
|
90
88
|
end
|
91
89
|
|
92
90
|
def limit_description_id
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module GOVUKDesignSystemFormBuilder
|
2
|
+
module Traits
|
3
|
+
module HTMLClasses
|
4
|
+
# combine all the classes in *args with any keys from **kwargs
|
5
|
+
# where the value is true. Roughly based on the behaviour from
|
6
|
+
# Rails' class_names, but recreated here as that returns a string
|
7
|
+
# where we want an array.
|
8
|
+
def build_classes(*args, **kwargs)
|
9
|
+
# FIXME: we need to handle the arguments differently for Ruby 2.6.x because
|
10
|
+
# Ruby 2.7.0 brought the separation of positional and keyword
|
11
|
+
# arguments.
|
12
|
+
#
|
13
|
+
# This can be removed once support for 2.6.x is dropped.
|
14
|
+
#
|
15
|
+
# https://www.ruby-lang.org/en/news/2019/12/12/separation-of-positional-and-keyword-arguments-in-ruby-3-0/
|
16
|
+
return ruby_2_6_build_classes_fallback(*args) if RUBY_VERSION < "2.7.0"
|
17
|
+
|
18
|
+
(args + kwargs.map { |k, v| k if v }).compact
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def ruby_2_6_build_classes_fallback(*args)
|
24
|
+
[].tap do |classes|
|
25
|
+
args.each do |arg|
|
26
|
+
if arg.is_a?(Hash)
|
27
|
+
arg.each { |k, v| classes.append(k) if v }
|
28
|
+
else
|
29
|
+
classes.append(arg)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -71,6 +71,10 @@ module GOVUKDesignSystemFormBuilder
|
|
71
71
|
#
|
72
72
|
# * +:enable_logger+ controls whether or not the library will emit log
|
73
73
|
# messages via Rails.logger.warn, defaults to +true+
|
74
|
+
#
|
75
|
+
# * +:trust_error_messages+ call html_safe on error messages before they're
|
76
|
+
# rendered. This allows formatting markup to be used to change the display
|
77
|
+
# of the error message. Defaults to +false+
|
74
78
|
# ===
|
75
79
|
DEFAULTS = {
|
76
80
|
brand: 'govuk',
|
@@ -95,7 +99,8 @@ module GOVUKDesignSystemFormBuilder
|
|
95
99
|
localisation_schema_legend: nil,
|
96
100
|
localisation_schema_caption: nil,
|
97
101
|
|
98
|
-
enable_logger: true
|
102
|
+
enable_logger: true,
|
103
|
+
trust_error_messages: false,
|
99
104
|
}.freeze
|
100
105
|
|
101
106
|
DEFAULTS.each_key { |k| config_accessor(k) { DEFAULTS[k] } }
|
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.
|
4
|
+
version: 2.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Yates
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-12-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: deep_merge
|
@@ -340,6 +340,7 @@ files:
|
|
340
340
|
- lib/govuk_design_system_formbuilder/traits/fieldset_item.rb
|
341
341
|
- lib/govuk_design_system_formbuilder/traits/hint.rb
|
342
342
|
- lib/govuk_design_system_formbuilder/traits/html_attributes.rb
|
343
|
+
- lib/govuk_design_system_formbuilder/traits/html_classes.rb
|
343
344
|
- lib/govuk_design_system_formbuilder/traits/input.rb
|
344
345
|
- lib/govuk_design_system_formbuilder/traits/label.rb
|
345
346
|
- lib/govuk_design_system_formbuilder/traits/localisation.rb
|