govuk_design_system_formbuilder 1.1.9 → 1.2.0b4
Sign up to get free protection for your applications and to get access to all the features.
- 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 -8
- data/lib/govuk_design_system_formbuilder/version.rb +1 -1
- metadata +18 -45
- 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,26 +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
|
-
|
11
|
-
I18n.translate(key)
|
9
|
+
localise(context) || localise_html(context)
|
12
10
|
end
|
13
11
|
|
14
|
-
def
|
15
|
-
|
12
|
+
def localise(context)
|
13
|
+
I18n.translate(schema(context), default: nil)
|
14
|
+
end
|
16
15
|
|
17
|
-
|
16
|
+
def localise_html(context)
|
17
|
+
I18n.translate("#{schema(context)}_html", default: nil).try(:html_safe)
|
18
18
|
end
|
19
19
|
|
20
20
|
def schema(context)
|
21
21
|
schema_root(context)
|
22
|
-
.push(
|
22
|
+
.push(*schema_path)
|
23
23
|
.map { |e| e == :__context__ ? context : e }
|
24
24
|
.join('.')
|
25
25
|
end
|
26
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
|
+
|
27
35
|
def schema_root(context)
|
28
36
|
contextual_schema = case context
|
29
37
|
when :legend
|
@@ -32,6 +40,8 @@ module GOVUKDesignSystemFormBuilder
|
|
32
40
|
config.localisation_schema_hint
|
33
41
|
when :label
|
34
42
|
config.localisation_schema_label
|
43
|
+
when :caption
|
44
|
+
config.localisation_schema_caption
|
35
45
|
end
|
36
46
|
|
37
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.0b4
|
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-04
|
11
|
+
date: 2020-06-04 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.9.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.9.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
|
137
|
+
version: 0.18.5
|
152
138
|
type: :development
|
153
139
|
prerelease: false
|
154
140
|
version_requirements: !ruby/object:Gem::Requirement
|
155
141
|
requirements:
|
156
142
|
- - "~>"
|
157
143
|
- !ruby/object:Gem::Version
|
158
|
-
version:
|
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
|
166
|
-
type: :development
|
167
|
-
prerelease: false
|
168
|
-
version_requirements: !ruby/object:Gem::Requirement
|
169
|
-
requirements:
|
170
|
-
- - "~>"
|
171
|
-
- !ruby/object:Gem::Version
|
172
|
-
version: 1.4.2
|
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
|
@@ -340,9 +313,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
340
313
|
version: '0'
|
341
314
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
342
315
|
requirements:
|
343
|
-
- - "
|
316
|
+
- - ">"
|
344
317
|
- !ruby/object:Gem::Version
|
345
|
-
version:
|
318
|
+
version: 1.3.1
|
346
319
|
requirements: []
|
347
320
|
rubygems_version: 3.0.3
|
348
321
|
signing_key:
|
@@ -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
|