govuk_design_system_formbuilder 2.7.6 → 2.8.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|