govuk_design_system_formbuilder 1.1.10 → 1.2.0

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