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.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/lib/govuk_design_system_formbuilder.rb +7 -1
  4. data/lib/govuk_design_system_formbuilder/base.rb +12 -0
  5. data/lib/govuk_design_system_formbuilder/builder.rb +311 -74
  6. data/lib/govuk_design_system_formbuilder/containers/character_count.rb +2 -2
  7. data/lib/govuk_design_system_formbuilder/containers/check_boxes.rb +5 -3
  8. data/lib/govuk_design_system_formbuilder/containers/check_boxes_fieldset.rb +3 -2
  9. data/lib/govuk_design_system_formbuilder/containers/fieldset.rb +37 -16
  10. data/lib/govuk_design_system_formbuilder/containers/form_group.rb +4 -2
  11. data/lib/govuk_design_system_formbuilder/containers/radio_buttons_fieldset.rb +3 -2
  12. data/lib/govuk_design_system_formbuilder/containers/radios.rb +7 -5
  13. data/lib/govuk_design_system_formbuilder/elements/caption.rb +34 -0
  14. data/lib/govuk_design_system_formbuilder/elements/check_boxes/collection.rb +3 -2
  15. data/lib/govuk_design_system_formbuilder/elements/check_boxes/collection_check_box.rb +5 -3
  16. data/lib/govuk_design_system_formbuilder/elements/check_boxes/fieldset_check_box.rb +7 -4
  17. data/lib/govuk_design_system_formbuilder/elements/check_boxes/label.rb +8 -2
  18. data/lib/govuk_design_system_formbuilder/elements/date.rb +15 -11
  19. data/lib/govuk_design_system_formbuilder/elements/error_message.rb +4 -2
  20. data/lib/govuk_design_system_formbuilder/elements/error_summary.rb +4 -4
  21. data/lib/govuk_design_system_formbuilder/elements/file.rb +6 -3
  22. data/lib/govuk_design_system_formbuilder/elements/hint.rb +5 -3
  23. data/lib/govuk_design_system_formbuilder/elements/inputs/email.rb +2 -0
  24. data/lib/govuk_design_system_formbuilder/elements/inputs/number.rb +2 -0
  25. data/lib/govuk_design_system_formbuilder/elements/inputs/password.rb +2 -0
  26. data/lib/govuk_design_system_formbuilder/elements/inputs/phone.rb +2 -0
  27. data/lib/govuk_design_system_formbuilder/elements/inputs/text.rb +2 -0
  28. data/lib/govuk_design_system_formbuilder/elements/inputs/url.rb +2 -0
  29. data/lib/govuk_design_system_formbuilder/elements/label.rb +30 -20
  30. data/lib/govuk_design_system_formbuilder/elements/radios/collection.rb +3 -2
  31. data/lib/govuk_design_system_formbuilder/elements/radios/collection_radio_button.rb +4 -2
  32. data/lib/govuk_design_system_formbuilder/elements/radios/fieldset_radio_button.rb +7 -4
  33. data/lib/govuk_design_system_formbuilder/elements/select.rb +6 -3
  34. data/lib/govuk_design_system_formbuilder/elements/submit.rb +10 -7
  35. data/lib/govuk_design_system_formbuilder/elements/text_area.rb +12 -5
  36. data/lib/govuk_design_system_formbuilder/traits/caption.rb +24 -0
  37. data/lib/govuk_design_system_formbuilder/traits/input.rb +16 -16
  38. data/lib/govuk_design_system_formbuilder/traits/label.rb +12 -1
  39. data/lib/govuk_design_system_formbuilder/traits/localisation.rb +18 -10
  40. data/lib/govuk_design_system_formbuilder/version.rb +1 -1
  41. metadata +16 -43
  42. 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(govuk-textarea).tap do |classes|
52
- classes.push('govuk-textarea--error') if has_errors?
53
- classes.push('govuk-js-character-count') if limit?
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: %w(govuk-hint govuk-character-count__message), aria: { live: 'polite' }) do
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
- %w(govuk-input).push(width_classes, error_classes).compact
44
+ [%(#{brand}-input)].push(width_classes, error_classes).compact
44
45
  end
45
46
 
46
47
  def error_classes
47
- 'govuk-input--error' if has_errors?
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 'govuk-input--width-20'
58
- when 10 then 'govuk-input--width-10'
59
- when 5 then 'govuk-input--width-5'
60
- when 4 then 'govuk-input--width-4'
61
- when 3 then 'govuk-input--width-3'
62
- when 2 then 'govuk-input--width-2'
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 'govuk-!-width-full'
66
- when 'three-quarters' then 'govuk-!-width-three-quarters'
67
- when 'two-thirds' then 'govuk-!-width-two-thirds'
68
- when 'one-half' then 'govuk-!-width-one-half'
69
- when 'one-third' then 'govuk-!-width-one-third'
70
- when 'one-quarter' then 'govuk-!-width-one-quarter'
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, **@label)
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
- key = localisation_key(context)
7
+ return unless @object_name.present? && @attribute_name.present?
8
8
 
9
- # `I18n.exists?(nil)` returns true when `config.i18n.fallbacks` is
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 localisation_key(context)
17
- return nil unless @object_name.present? && @attribute_name.present?
12
+ def localise(context)
13
+ I18n.translate(schema(context), default: nil)
14
+ end
18
15
 
19
- schema(context)
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(@object_name, @attribute_name)
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
@@ -1,3 +1,3 @@
1
1
  module GOVUKDesignSystemFormBuilder
2
- VERSION = '1.1.10'.freeze
2
+ VERSION = '1.2.0'.freeze
3
3
  end
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.1.10
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-04-30 00:00:00.000000000 Z
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: '3.7'
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: '3.7'
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: '0'
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: 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.17.0
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.17.0
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.2.1
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.2.1
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.1
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.1
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