govuk_design_system_formbuilder 1.1.10 → 1.2.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/README.md +2 -2
- data/lib/govuk_design_system_formbuilder.rb +7 -1
- data/lib/govuk_design_system_formbuilder/base.rb +12 -0
- data/lib/govuk_design_system_formbuilder/builder.rb +311 -74
- data/lib/govuk_design_system_formbuilder/containers/character_count.rb +2 -2
- data/lib/govuk_design_system_formbuilder/containers/check_boxes.rb +5 -3
- data/lib/govuk_design_system_formbuilder/containers/check_boxes_fieldset.rb +3 -2
- data/lib/govuk_design_system_formbuilder/containers/fieldset.rb +37 -16
- data/lib/govuk_design_system_formbuilder/containers/form_group.rb +4 -2
- data/lib/govuk_design_system_formbuilder/containers/radio_buttons_fieldset.rb +3 -2
- data/lib/govuk_design_system_formbuilder/containers/radios.rb +7 -5
- data/lib/govuk_design_system_formbuilder/elements/caption.rb +34 -0
- data/lib/govuk_design_system_formbuilder/elements/check_boxes/collection.rb +3 -2
- data/lib/govuk_design_system_formbuilder/elements/check_boxes/collection_check_box.rb +5 -3
- data/lib/govuk_design_system_formbuilder/elements/check_boxes/fieldset_check_box.rb +7 -4
- data/lib/govuk_design_system_formbuilder/elements/check_boxes/label.rb +8 -2
- data/lib/govuk_design_system_formbuilder/elements/date.rb +15 -11
- data/lib/govuk_design_system_formbuilder/elements/error_message.rb +4 -2
- data/lib/govuk_design_system_formbuilder/elements/error_summary.rb +4 -4
- data/lib/govuk_design_system_formbuilder/elements/file.rb +6 -3
- data/lib/govuk_design_system_formbuilder/elements/hint.rb +5 -3
- data/lib/govuk_design_system_formbuilder/elements/inputs/email.rb +2 -0
- data/lib/govuk_design_system_formbuilder/elements/inputs/number.rb +2 -0
- data/lib/govuk_design_system_formbuilder/elements/inputs/password.rb +2 -0
- data/lib/govuk_design_system_formbuilder/elements/inputs/phone.rb +2 -0
- data/lib/govuk_design_system_formbuilder/elements/inputs/text.rb +2 -0
- data/lib/govuk_design_system_formbuilder/elements/inputs/url.rb +2 -0
- data/lib/govuk_design_system_formbuilder/elements/label.rb +30 -20
- data/lib/govuk_design_system_formbuilder/elements/radios/collection.rb +3 -2
- data/lib/govuk_design_system_formbuilder/elements/radios/collection_radio_button.rb +4 -2
- data/lib/govuk_design_system_formbuilder/elements/radios/fieldset_radio_button.rb +7 -4
- data/lib/govuk_design_system_formbuilder/elements/select.rb +6 -3
- data/lib/govuk_design_system_formbuilder/elements/submit.rb +10 -7
- data/lib/govuk_design_system_formbuilder/elements/text_area.rb +12 -5
- data/lib/govuk_design_system_formbuilder/traits/caption.rb +24 -0
- data/lib/govuk_design_system_formbuilder/traits/input.rb +16 -16
- data/lib/govuk_design_system_formbuilder/traits/label.rb +12 -1
- data/lib/govuk_design_system_formbuilder/traits/localisation.rb +18 -10
- data/lib/govuk_design_system_formbuilder/version.rb +1 -1
- metadata +16 -43
- data/lib/govuk_design_system_formbuilder/elements/check_boxes/hint.rb +0 -32
@@ -1,15 +1,18 @@
|
|
1
1
|
module GOVUKDesignSystemFormBuilder
|
2
2
|
module Elements
|
3
3
|
class TextArea < Base
|
4
|
+
using PrefixableArray
|
5
|
+
|
4
6
|
include Traits::Error
|
5
7
|
include Traits::Hint
|
6
8
|
include Traits::Label
|
7
9
|
include Traits::Supplemental
|
8
10
|
|
9
|
-
def initialize(builder, object_name, attribute_name, hint_text:, label:, rows:, max_words:, max_chars:, threshold:, **extra_args, &block)
|
11
|
+
def initialize(builder, object_name, attribute_name, hint_text:, label:, caption:, rows:, max_words:, max_chars:, threshold:, **extra_args, &block)
|
10
12
|
super(builder, object_name, attribute_name, &block)
|
11
13
|
|
12
14
|
@label = label
|
15
|
+
@caption = caption
|
13
16
|
@hint_text = hint_text
|
14
17
|
@extra_args = extra_args
|
15
18
|
@max_words = max_words
|
@@ -48,9 +51,9 @@ module GOVUKDesignSystemFormBuilder
|
|
48
51
|
private
|
49
52
|
|
50
53
|
def govuk_textarea_classes
|
51
|
-
%w(
|
52
|
-
classes.push(
|
53
|
-
classes.push(
|
54
|
+
%w(textarea).prefix(brand).tap do |classes|
|
55
|
+
classes.push(%(#{brand}-textarea--error)) if has_errors?
|
56
|
+
classes.push(%(#{brand}-js-character-count)) if limit?
|
54
57
|
end
|
55
58
|
end
|
56
59
|
|
@@ -69,11 +72,15 @@ module GOVUKDesignSystemFormBuilder
|
|
69
72
|
def limit_description
|
70
73
|
return nil unless limit?
|
71
74
|
|
72
|
-
content_tag('span', id: limit_id, class:
|
75
|
+
content_tag('span', id: limit_id, class: limit_description_classes, aria: { live: 'polite' }) do
|
73
76
|
"You can enter up to #{limit_quantity} #{limit_type}"
|
74
77
|
end
|
75
78
|
end
|
76
79
|
|
80
|
+
def limit_description_classes
|
81
|
+
%w(hint character-count__message).prefix(brand)
|
82
|
+
end
|
83
|
+
|
77
84
|
def limit_quantity
|
78
85
|
@max_words || @max_chars
|
79
86
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module GOVUKDesignSystemFormBuilder
|
2
|
+
module Traits
|
3
|
+
module Caption
|
4
|
+
private
|
5
|
+
|
6
|
+
def caption_element
|
7
|
+
@caption_element ||= Elements::Caption.new(
|
8
|
+
@builder,
|
9
|
+
@object_name,
|
10
|
+
@attribute_name,
|
11
|
+
**{ text: nil }.merge({ text: caption_text, size: caption_size }.compact)
|
12
|
+
)
|
13
|
+
end
|
14
|
+
|
15
|
+
def caption_text
|
16
|
+
@caption&.dig(:text)
|
17
|
+
end
|
18
|
+
|
19
|
+
def caption_size
|
20
|
+
@caption&.dig(:size)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -1,12 +1,13 @@
|
|
1
1
|
module GOVUKDesignSystemFormBuilder
|
2
2
|
module Traits
|
3
3
|
module Input
|
4
|
-
def initialize(builder, object_name, attribute_name, hint_text:, label:, width:, **extra_args, &block)
|
4
|
+
def initialize(builder, object_name, attribute_name, hint_text:, label:, caption:, width:, **extra_args, &block)
|
5
5
|
super(builder, object_name, attribute_name, &block)
|
6
6
|
|
7
7
|
@width = width
|
8
8
|
@extra_args = extra_args
|
9
9
|
@label = label
|
10
|
+
@caption = caption
|
10
11
|
@hint_text = hint_text
|
11
12
|
end
|
12
13
|
|
@@ -40,34 +41,33 @@ module GOVUKDesignSystemFormBuilder
|
|
40
41
|
private
|
41
42
|
|
42
43
|
def input_classes
|
43
|
-
%
|
44
|
+
[%(#{brand}-input)].push(width_classes, error_classes).compact
|
44
45
|
end
|
45
46
|
|
46
47
|
def error_classes
|
47
|
-
|
48
|
+
%(#{brand}-input--error) if has_errors?
|
48
49
|
end
|
49
50
|
|
50
51
|
def width_classes
|
51
52
|
return if @width.blank?
|
52
53
|
|
53
54
|
case @width
|
54
|
-
when nil then nil
|
55
55
|
|
56
56
|
# fixed (character) widths
|
57
|
-
when 20 then
|
58
|
-
when 10 then
|
59
|
-
when 5 then
|
60
|
-
when 4 then
|
61
|
-
when 3 then
|
62
|
-
when 2 then
|
57
|
+
when 20 then %(#{brand}-input--width-20)
|
58
|
+
when 10 then %(#{brand}-input--width-10)
|
59
|
+
when 5 then %(#{brand}-input--width-5)
|
60
|
+
when 4 then %(#{brand}-input--width-4)
|
61
|
+
when 3 then %(#{brand}-input--width-3)
|
62
|
+
when 2 then %(#{brand}-input--width-2)
|
63
63
|
|
64
64
|
# fluid widths
|
65
|
-
when 'full' then
|
66
|
-
when 'three-quarters' then
|
67
|
-
when 'two-thirds' then
|
68
|
-
when 'one-half' then
|
69
|
-
when 'one-third' then
|
70
|
-
when 'one-quarter' then
|
65
|
+
when 'full' then %(#{brand}-!-width-full)
|
66
|
+
when 'three-quarters' then %(#{brand}-!-width-three-quarters)
|
67
|
+
when 'two-thirds' then %(#{brand}-!-width-two-thirds)
|
68
|
+
when 'one-half' then %(#{brand}-!-width-one-half)
|
69
|
+
when 'one-third' then %(#{brand}-!-width-one-third)
|
70
|
+
when 'one-quarter' then %(#{brand}-!-width-one-quarter)
|
71
71
|
|
72
72
|
else fail(ArgumentError, "invalid width '#{@width}'")
|
73
73
|
end
|
@@ -4,7 +4,18 @@ module GOVUKDesignSystemFormBuilder
|
|
4
4
|
private
|
5
5
|
|
6
6
|
def label_element
|
7
|
-
@label_element ||= Elements::Label.new(@builder, @object_name, @attribute_name,
|
7
|
+
@label_element ||= Elements::Label.new(@builder, @object_name, @attribute_name, caption: @caption, **label_args)
|
8
|
+
end
|
9
|
+
|
10
|
+
def label_args
|
11
|
+
case @label
|
12
|
+
when Hash
|
13
|
+
@label
|
14
|
+
when Proc
|
15
|
+
{ content: @label }
|
16
|
+
else
|
17
|
+
fail(ArgumentError, %(label must be a Proc or Hash))
|
18
|
+
end
|
8
19
|
end
|
9
20
|
end
|
10
21
|
end
|
@@ -4,28 +4,34 @@ module GOVUKDesignSystemFormBuilder
|
|
4
4
|
private
|
5
5
|
|
6
6
|
def localised_text(context)
|
7
|
-
|
7
|
+
return unless @object_name.present? && @attribute_name.present?
|
8
8
|
|
9
|
-
|
10
|
-
# enabled, so only proceed if the key is present too
|
11
|
-
return nil unless key.present? && I18n.exists?(key)
|
12
|
-
|
13
|
-
I18n.translate(key)
|
9
|
+
localise(context) || localise_html(context)
|
14
10
|
end
|
15
11
|
|
16
|
-
def
|
17
|
-
|
12
|
+
def localise(context)
|
13
|
+
I18n.translate(schema(context), default: nil)
|
14
|
+
end
|
18
15
|
|
19
|
-
|
16
|
+
def localise_html(context)
|
17
|
+
I18n.translate("#{schema(context)}_html", default: nil).try(:html_safe)
|
20
18
|
end
|
21
19
|
|
22
20
|
def schema(context)
|
23
21
|
schema_root(context)
|
24
|
-
.push(
|
22
|
+
.push(*schema_path)
|
25
23
|
.map { |e| e == :__context__ ? context : e }
|
26
24
|
.join('.')
|
27
25
|
end
|
28
26
|
|
27
|
+
def schema_path
|
28
|
+
if @value.present?
|
29
|
+
[@object_name, "#{@attribute_name}_options", @value]
|
30
|
+
else
|
31
|
+
[@object_name, @attribute_name]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
29
35
|
def schema_root(context)
|
30
36
|
contextual_schema = case context
|
31
37
|
when :legend
|
@@ -34,6 +40,8 @@ module GOVUKDesignSystemFormBuilder
|
|
34
40
|
config.localisation_schema_hint
|
35
41
|
when :label
|
36
42
|
config.localisation_schema_label
|
43
|
+
when :caption
|
44
|
+
config.localisation_schema_caption
|
37
45
|
end
|
38
46
|
|
39
47
|
(contextual_schema || config.localisation_schema_fallback).dup
|
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: 1.
|
4
|
+
version: 1.2.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: 2020-
|
11
|
+
date: 2020-06-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: actionview
|
@@ -56,16 +56,16 @@ dependencies:
|
|
56
56
|
name: rubocop-govuk
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - '='
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 3.14.0
|
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:
|
68
|
+
version: 3.14.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: pry
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -134,42 +134,14 @@ dependencies:
|
|
134
134
|
requirements:
|
135
135
|
- - "~>"
|
136
136
|
- !ruby/object:Gem::Version
|
137
|
-
version:
|
138
|
-
type: :development
|
139
|
-
prerelease: false
|
140
|
-
version_requirements: !ruby/object:Gem::Requirement
|
141
|
-
requirements:
|
142
|
-
- - "~>"
|
143
|
-
- !ruby/object:Gem::Version
|
144
|
-
version: '0'
|
145
|
-
- !ruby/object:Gem::Dependency
|
146
|
-
name: adsf
|
147
|
-
requirement: !ruby/object:Gem::Requirement
|
148
|
-
requirements:
|
149
|
-
- - "~>"
|
150
|
-
- !ruby/object:Gem::Version
|
151
|
-
version: 1.4.2
|
152
|
-
type: :development
|
153
|
-
prerelease: false
|
154
|
-
version_requirements: !ruby/object:Gem::Requirement
|
155
|
-
requirements:
|
156
|
-
- - "~>"
|
157
|
-
- !ruby/object:Gem::Version
|
158
|
-
version: 1.4.2
|
159
|
-
- !ruby/object:Gem::Dependency
|
160
|
-
name: adsf-live
|
161
|
-
requirement: !ruby/object:Gem::Requirement
|
162
|
-
requirements:
|
163
|
-
- - "~>"
|
164
|
-
- !ruby/object:Gem::Version
|
165
|
-
version: 1.4.2
|
137
|
+
version: 0.18.5
|
166
138
|
type: :development
|
167
139
|
prerelease: false
|
168
140
|
version_requirements: !ruby/object:Gem::Requirement
|
169
141
|
requirements:
|
170
142
|
- - "~>"
|
171
143
|
- !ruby/object:Gem::Version
|
172
|
-
version:
|
144
|
+
version: 0.18.5
|
173
145
|
- !ruby/object:Gem::Dependency
|
174
146
|
name: htmlbeautifier
|
175
147
|
requirement: !ruby/object:Gem::Requirement
|
@@ -204,14 +176,14 @@ dependencies:
|
|
204
176
|
requirements:
|
205
177
|
- - "~>"
|
206
178
|
- !ruby/object:Gem::Version
|
207
|
-
version: 3.
|
179
|
+
version: 3.19.0
|
208
180
|
type: :development
|
209
181
|
prerelease: false
|
210
182
|
version_requirements: !ruby/object:Gem::Requirement
|
211
183
|
requirements:
|
212
184
|
- - "~>"
|
213
185
|
- !ruby/object:Gem::Version
|
214
|
-
version: 3.
|
186
|
+
version: 3.19.0
|
215
187
|
- !ruby/object:Gem::Dependency
|
216
188
|
name: rubypants
|
217
189
|
requirement: !ruby/object:Gem::Requirement
|
@@ -232,14 +204,14 @@ dependencies:
|
|
232
204
|
requirements:
|
233
205
|
- - "~>"
|
234
206
|
- !ruby/object:Gem::Version
|
235
|
-
version: 2.
|
207
|
+
version: 2.3.0
|
236
208
|
type: :development
|
237
209
|
prerelease: false
|
238
210
|
version_requirements: !ruby/object:Gem::Requirement
|
239
211
|
requirements:
|
240
212
|
- - "~>"
|
241
213
|
- !ruby/object:Gem::Version
|
242
|
-
version: 2.
|
214
|
+
version: 2.3.0
|
243
215
|
- !ruby/object:Gem::Dependency
|
244
216
|
name: sass
|
245
217
|
requirement: !ruby/object:Gem::Requirement
|
@@ -260,14 +232,14 @@ dependencies:
|
|
260
232
|
requirements:
|
261
233
|
- - "~>"
|
262
234
|
- !ruby/object:Gem::Version
|
263
|
-
version: 4.0
|
235
|
+
version: 4.1.0
|
264
236
|
type: :development
|
265
237
|
prerelease: false
|
266
238
|
version_requirements: !ruby/object:Gem::Requirement
|
267
239
|
requirements:
|
268
240
|
- - "~>"
|
269
241
|
- !ruby/object:Gem::Version
|
270
|
-
version: 4.0
|
242
|
+
version: 4.1.0
|
271
243
|
description: A Rails form builder that generates form inputs adhering to the GOV.UK
|
272
244
|
Design System
|
273
245
|
email:
|
@@ -288,10 +260,10 @@ files:
|
|
288
260
|
- lib/govuk_design_system_formbuilder/containers/radio_buttons_fieldset.rb
|
289
261
|
- lib/govuk_design_system_formbuilder/containers/radios.rb
|
290
262
|
- lib/govuk_design_system_formbuilder/containers/supplemental.rb
|
263
|
+
- lib/govuk_design_system_formbuilder/elements/caption.rb
|
291
264
|
- lib/govuk_design_system_formbuilder/elements/check_boxes/collection.rb
|
292
265
|
- lib/govuk_design_system_formbuilder/elements/check_boxes/collection_check_box.rb
|
293
266
|
- lib/govuk_design_system_formbuilder/elements/check_boxes/fieldset_check_box.rb
|
294
|
-
- lib/govuk_design_system_formbuilder/elements/check_boxes/hint.rb
|
295
267
|
- lib/govuk_design_system_formbuilder/elements/check_boxes/label.rb
|
296
268
|
- lib/govuk_design_system_formbuilder/elements/date.rb
|
297
269
|
- lib/govuk_design_system_formbuilder/elements/error_message.rb
|
@@ -311,6 +283,7 @@ files:
|
|
311
283
|
- lib/govuk_design_system_formbuilder/elements/select.rb
|
312
284
|
- lib/govuk_design_system_formbuilder/elements/submit.rb
|
313
285
|
- lib/govuk_design_system_formbuilder/elements/text_area.rb
|
286
|
+
- lib/govuk_design_system_formbuilder/traits/caption.rb
|
314
287
|
- lib/govuk_design_system_formbuilder/traits/collection_item.rb
|
315
288
|
- lib/govuk_design_system_formbuilder/traits/conditional.rb
|
316
289
|
- lib/govuk_design_system_formbuilder/traits/error.rb
|
@@ -1,32 +0,0 @@
|
|
1
|
-
module GOVUKDesignSystemFormBuilder
|
2
|
-
module Elements
|
3
|
-
module CheckBoxes
|
4
|
-
class Hint < Base
|
5
|
-
include Traits::Hint
|
6
|
-
|
7
|
-
def initialize(builder, object_name, attribute_name, hint_text, value:)
|
8
|
-
super(builder, object_name, attribute_name)
|
9
|
-
|
10
|
-
@value = value
|
11
|
-
@hint_text = hint_text
|
12
|
-
end
|
13
|
-
|
14
|
-
def html
|
15
|
-
return nil if @hint_text.blank?
|
16
|
-
|
17
|
-
tag.span(@hint_text, class: hint_classes, id: id)
|
18
|
-
end
|
19
|
-
|
20
|
-
def id
|
21
|
-
hint_id
|
22
|
-
end
|
23
|
-
|
24
|
-
private
|
25
|
-
|
26
|
-
def hint_classes
|
27
|
-
%w(govuk-hint govuk-checkboxes__hint)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|