govuk_design_system_formbuilder 1.0.0 → 1.1.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 (43) hide show
  1. checksums.yaml +4 -4
  2. data/lib/govuk_design_system_formbuilder/base.rb +5 -48
  3. data/lib/govuk_design_system_formbuilder/builder.rb +16 -10
  4. data/lib/govuk_design_system_formbuilder/containers/check_boxes_fieldset.rb +5 -2
  5. data/lib/govuk_design_system_formbuilder/containers/fieldset.rb +23 -8
  6. data/lib/govuk_design_system_formbuilder/containers/form_group.rb +1 -1
  7. data/lib/govuk_design_system_formbuilder/containers/radio_buttons_fieldset.rb +5 -2
  8. data/lib/govuk_design_system_formbuilder/containers/radios.rb +3 -1
  9. data/lib/govuk_design_system_formbuilder/containers/supplemental.rb +5 -6
  10. data/lib/govuk_design_system_formbuilder/elements/check_boxes/collection.rb +6 -2
  11. data/lib/govuk_design_system_formbuilder/elements/check_boxes/collection_check_box.rb +6 -2
  12. data/lib/govuk_design_system_formbuilder/elements/check_boxes/fieldset_check_box.rb +4 -1
  13. data/lib/govuk_design_system_formbuilder/elements/check_boxes/hint.rb +3 -1
  14. data/lib/govuk_design_system_formbuilder/elements/check_boxes/label.rb +1 -1
  15. data/lib/govuk_design_system_formbuilder/elements/date.rb +6 -2
  16. data/lib/govuk_design_system_formbuilder/elements/error_message.rb +3 -1
  17. data/lib/govuk_design_system_formbuilder/elements/error_summary.rb +3 -1
  18. data/lib/govuk_design_system_formbuilder/elements/file.rb +6 -1
  19. data/lib/govuk_design_system_formbuilder/elements/hint.rb +12 -2
  20. data/lib/govuk_design_system_formbuilder/elements/inputs/email.rb +6 -0
  21. data/lib/govuk_design_system_formbuilder/elements/inputs/number.rb +6 -0
  22. data/lib/govuk_design_system_formbuilder/elements/inputs/phone.rb +6 -0
  23. data/lib/govuk_design_system_formbuilder/elements/inputs/text.rb +6 -0
  24. data/lib/govuk_design_system_formbuilder/elements/inputs/url.rb +6 -0
  25. data/lib/govuk_design_system_formbuilder/elements/label.rb +5 -3
  26. data/lib/govuk_design_system_formbuilder/elements/radios/collection.rb +6 -2
  27. data/lib/govuk_design_system_formbuilder/elements/radios/collection_radio_button.rb +8 -4
  28. data/lib/govuk_design_system_formbuilder/elements/radios/fieldset_radio_button.rb +3 -0
  29. data/lib/govuk_design_system_formbuilder/elements/select.rb +6 -1
  30. data/lib/govuk_design_system_formbuilder/elements/submit.rb +1 -1
  31. data/lib/govuk_design_system_formbuilder/elements/text_area.rb +39 -6
  32. data/lib/govuk_design_system_formbuilder/traits/collection_item.rb +16 -0
  33. data/lib/govuk_design_system_formbuilder/traits/conditional.rb +17 -0
  34. data/lib/govuk_design_system_formbuilder/traits/error.rb +17 -0
  35. data/lib/govuk_design_system_formbuilder/traits/hint.rb +17 -0
  36. data/lib/govuk_design_system_formbuilder/traits/input.rb +77 -0
  37. data/lib/govuk_design_system_formbuilder/traits/label.rb +11 -0
  38. data/lib/govuk_design_system_formbuilder/traits/localisation.rb +41 -0
  39. data/lib/govuk_design_system_formbuilder/traits/supplemental.rb +17 -0
  40. data/lib/govuk_design_system_formbuilder/version.rb +1 -1
  41. data/lib/govuk_design_system_formbuilder.rb +78 -43
  42. metadata +43 -8
  43. data/lib/govuk_design_system_formbuilder/elements/inputs/base.rb +0 -79
@@ -1,6 +1,6 @@
1
1
  module GOVUKDesignSystemFormBuilder
2
2
  module Elements
3
- class Submit < GOVUKDesignSystemFormBuilder::Base
3
+ class Submit < Base
4
4
  def initialize(builder, text, warning:, secondary:, prevent_double_click:, validate:, &block)
5
5
  fail ArgumentError, 'buttons can be warning or secondary' if warning && secondary
6
6
 
@@ -1,8 +1,14 @@
1
1
  module GOVUKDesignSystemFormBuilder
2
2
  module Elements
3
3
  class TextArea < Base
4
+ include Traits::Error
5
+ include Traits::Hint
6
+ include Traits::Label
7
+ include Traits::Supplemental
8
+
4
9
  def initialize(builder, object_name, attribute_name, hint_text:, label:, rows:, max_words:, max_chars:, threshold:, **extra_args, &block)
5
10
  super(builder, object_name, attribute_name, &block)
11
+
6
12
  @label = label
7
13
  @hint_text = hint_text
8
14
  @extra_args = extra_args
@@ -23,14 +29,11 @@ module GOVUKDesignSystemFormBuilder
23
29
  id: field_id(link_errors: true),
24
30
  class: govuk_textarea_classes,
25
31
  aria: {
26
- describedby: described_by(
27
- hint_id,
28
- error_id,
29
- supplemental_id
30
- )
32
+ describedby: described_by(hint_id, error_id, supplemental_id, limit_description_id)
31
33
  },
32
34
  **@extra_args.merge(rows: @rows)
33
- )
35
+ ),
36
+ limit_description
34
37
  ].flatten.compact
35
38
  )
36
39
  end
@@ -46,9 +49,39 @@ module GOVUKDesignSystemFormBuilder
46
49
  end
47
50
  end
48
51
 
52
+ # Provides an id for use by the textual description of character and word limits.
53
+ #
54
+ # @note In order for the GOV.UK Frontend JavaScript to pick up this associated field
55
+ # it has to have the same id as the text area with the additional suffix of '-info'
56
+ def limit_id
57
+ [field_id(link_errors: true), 'info'].join('-')
58
+ end
59
+
49
60
  def limit?
50
61
  @max_words || @max_chars
51
62
  end
63
+
64
+ def limit_description
65
+ return nil unless limit?
66
+
67
+ content_tag('span', id: limit_id, class: %w(govuk-hint govuk-character-count__message), aria: { live: 'polite' }) do
68
+ "You can enter up to #{limit_quantity} #{limit_type}"
69
+ end
70
+ end
71
+
72
+ def limit_quantity
73
+ @max_words || @max_chars
74
+ end
75
+
76
+ def limit_type
77
+ @max_words.present? ? 'words' : 'characters'
78
+ end
79
+
80
+ def limit_description_id
81
+ return nil unless limit?
82
+
83
+ limit_id
84
+ end
52
85
  end
53
86
  end
54
87
  end
@@ -0,0 +1,16 @@
1
+ module GOVUKDesignSystemFormBuilder
2
+ module Traits
3
+ module CollectionItem
4
+ private
5
+
6
+ def retrieve(item, method)
7
+ case method
8
+ when Symbol, String
9
+ item.send(method)
10
+ when Proc
11
+ method.call(item)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,17 @@
1
+ module GOVUKDesignSystemFormBuilder
2
+ module Traits
3
+ module Conditional
4
+ private
5
+
6
+ def conditional_id
7
+ build_id('conditional')
8
+ end
9
+
10
+ def wrap_conditional(block)
11
+ content_tag('div', class: conditional_classes, id: conditional_id) do
12
+ capture { block.call }
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module GOVUKDesignSystemFormBuilder
2
+ module Traits
3
+ module Error
4
+ def error_id
5
+ return nil unless has_errors?
6
+
7
+ build_id('error')
8
+ end
9
+
10
+ private
11
+
12
+ def error_element
13
+ @error_element ||= Elements::ErrorMessage.new(@builder, @object_name, @attribute_name)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module GOVUKDesignSystemFormBuilder
2
+ module Traits
3
+ module Hint
4
+ def hint_id
5
+ return nil if @hint_text.blank?
6
+
7
+ build_id('hint')
8
+ end
9
+
10
+ private
11
+
12
+ def hint_element
13
+ @hint_element ||= Elements::Hint.new(@builder, @object_name, @attribute_name, @hint_text)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,77 @@
1
+ module GOVUKDesignSystemFormBuilder
2
+ module Traits
3
+ module Input
4
+ def initialize(builder, object_name, attribute_name, hint_text:, label:, width:, **extra_args, &block)
5
+ super(builder, object_name, attribute_name, &block)
6
+
7
+ @width = width
8
+ @extra_args = extra_args
9
+ @label = label
10
+ @hint_text = hint_text
11
+ end
12
+
13
+ def html
14
+ Containers::FormGroup.new(@builder, @object_name, @attribute_name).html do
15
+ safe_join(
16
+ [
17
+ label_element.html,
18
+ hint_element.html,
19
+ supplemental_content.html,
20
+ error_element.html,
21
+ @builder.send(
22
+ builder_method,
23
+ @attribute_name,
24
+ id: field_id(link_errors: true),
25
+ class: input_classes,
26
+ aria: {
27
+ describedby: described_by(
28
+ hint_id,
29
+ error_id,
30
+ supplemental_id
31
+ )
32
+ },
33
+ **@extra_args
34
+ )
35
+ ]
36
+ )
37
+ end
38
+ end
39
+
40
+ private
41
+
42
+ def input_classes
43
+ %w(govuk-input).push(width_classes, error_classes).compact
44
+ end
45
+
46
+ def error_classes
47
+ 'govuk-input--error' if has_errors?
48
+ end
49
+
50
+ def width_classes
51
+ return if @width.blank?
52
+
53
+ case @width
54
+ when nil then nil
55
+
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'
63
+
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'
71
+
72
+ else fail(ArgumentError, "invalid width '#{@width}'")
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,11 @@
1
+ module GOVUKDesignSystemFormBuilder
2
+ module Traits
3
+ module Label
4
+ private
5
+
6
+ def label_element
7
+ @label_element ||= Elements::Label.new(@builder, @object_name, @attribute_name, **@label)
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,41 @@
1
+ module GOVUKDesignSystemFormBuilder
2
+ module Traits
3
+ module Localisation
4
+ private
5
+
6
+ def localised_text(context)
7
+ key = localisation_key(context)
8
+
9
+ return nil unless I18n.exists?(key)
10
+
11
+ I18n.translate(key)
12
+ end
13
+
14
+ def localisation_key(context)
15
+ return nil unless @object_name.present? && @attribute_name.present?
16
+
17
+ schema(context)
18
+ end
19
+
20
+ def schema(context)
21
+ schema_root(context)
22
+ .push(@object_name, @attribute_name)
23
+ .map { |e| e == :__context__ ? context : e }
24
+ .join('.')
25
+ end
26
+
27
+ def schema_root(context)
28
+ contextual_schema = case context
29
+ when :legend
30
+ config.localisation_schema_legend
31
+ when :hint
32
+ config.localisation_schema_hint
33
+ when :label
34
+ config.localisation_schema_label
35
+ end
36
+
37
+ (contextual_schema || config.localisation_schema_fallback).dup
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,17 @@
1
+ module GOVUKDesignSystemFormBuilder
2
+ module Traits
3
+ module Supplemental
4
+ def supplemental_id
5
+ return nil if @block_content.blank?
6
+
7
+ build_id('supplemental')
8
+ end
9
+
10
+ private
11
+
12
+ def supplemental_content
13
+ @supplemental_content ||= Containers::Supplemental.new(@builder, @object_name, @attribute_name, @block_content)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,3 +1,3 @@
1
1
  module GOVUKDesignSystemFormBuilder
2
- VERSION = '1.0.0'.freeze
2
+ VERSION = '1.1.0'.freeze
3
3
  end
@@ -1,45 +1,82 @@
1
- require 'govuk_design_system_formbuilder/version'
2
- require 'govuk_design_system_formbuilder/builder'
3
- require 'govuk_design_system_formbuilder/base'
4
-
5
- require 'govuk_design_system_formbuilder/elements/hint'
6
- require 'govuk_design_system_formbuilder/elements/label'
7
- require 'govuk_design_system_formbuilder/elements/date'
8
- require 'govuk_design_system_formbuilder/elements/select'
9
- require 'govuk_design_system_formbuilder/elements/submit'
10
- require 'govuk_design_system_formbuilder/elements/text_area'
11
- require 'govuk_design_system_formbuilder/elements/file'
12
-
13
- require 'govuk_design_system_formbuilder/elements/inputs/base'
14
- require 'govuk_design_system_formbuilder/elements/inputs/email'
15
- require 'govuk_design_system_formbuilder/elements/inputs/number'
16
- require 'govuk_design_system_formbuilder/elements/inputs/phone'
17
- require 'govuk_design_system_formbuilder/elements/inputs/text'
18
- require 'govuk_design_system_formbuilder/elements/inputs/url'
19
-
20
- require 'govuk_design_system_formbuilder/elements/radios/collection'
21
- require 'govuk_design_system_formbuilder/elements/radios/collection_radio_button'
22
- require 'govuk_design_system_formbuilder/elements/radios/fieldset_radio_button'
23
-
24
- require 'govuk_design_system_formbuilder/elements/check_boxes/collection'
25
- require 'govuk_design_system_formbuilder/elements/check_boxes/collection_check_box'
26
- require 'govuk_design_system_formbuilder/elements/check_boxes/fieldset_check_box'
27
- require 'govuk_design_system_formbuilder/elements/check_boxes/label'
28
- require 'govuk_design_system_formbuilder/elements/check_boxes/hint'
29
-
30
- require 'govuk_design_system_formbuilder/elements/error_message'
31
- require 'govuk_design_system_formbuilder/elements/error_summary'
32
-
33
- require 'govuk_design_system_formbuilder/containers/check_boxes_fieldset'
34
- require 'govuk_design_system_formbuilder/containers/form_group'
35
- require 'govuk_design_system_formbuilder/containers/fieldset'
36
- require 'govuk_design_system_formbuilder/containers/radios'
37
- require 'govuk_design_system_formbuilder/containers/radio_buttons_fieldset'
38
- require 'govuk_design_system_formbuilder/containers/check_boxes'
39
- require 'govuk_design_system_formbuilder/containers/character_count'
40
- require 'govuk_design_system_formbuilder/containers/supplemental'
1
+ require 'active_support/configurable'
2
+
3
+ [%w(traits *.rb), %w(*.rb), %w(elements ** *.rb), %w(containers ** *.rb)]
4
+ .flat_map { |matcher| Dir.glob(File.join(__dir__, 'govuk_design_system_formbuilder', *matcher)) }
5
+ .each { |file| require file }
41
6
 
42
7
  module GOVUKDesignSystemFormBuilder
8
+ include ActiveSupport::Configurable
9
+
10
+ # @!group Defaults
11
+
12
+ # Default form builder configuration
13
+ #
14
+ # * +:default_legend_size+ controls the default size of legend text.
15
+ # Can be either +xl+, +l+, +m+ or +s+.
16
+ #
17
+ # * +:default_legend_tag+ controls the default tag that legends are
18
+ # wrapped in. Defaults to +h1+.
19
+ #
20
+ # * +:default_submit_button_text+ sets the value assigned to +govuk_submit+,
21
+ # defaults to 'Continue'.
22
+ #
23
+ # * +:default_submit_button_text+ sets the text used to divide the last radio
24
+ # button in radio button fieldsets. As per the GOV.UK Design System spec,
25
+ # it defaults to 'or'.
26
+ #
27
+ # * +:default_error_summary_title+ sets the text used in error summary
28
+ # blocks. As per the GOV.UK Design System spec, it defaults to
29
+ # 'There is a problem'.
30
+ #
31
+ # * +:localisation_schema_fallback+ sets the prefix elements for the array
32
+ # used to build the localisation string. The final two elements are always
33
+ # are the object name and attribute name. The _special_ value +__context__+,
34
+ # is used as a placeholder for the context (label, fieldset or hint).
35
+ #
36
+ # * +:localisation_schema_legend+, +:localisation_schema_hint+ and
37
+ # +:localisation_schema_label+ each override the schema root for their
38
+ # particular context, allowing them to be independently customised.
39
+ # ===
40
+ DEFAULTS = {
41
+ default_legend_size: 'm',
42
+ default_legend_tag: 'h1',
43
+ default_submit_button_text: 'Continue',
44
+ default_radio_divider_text: 'or',
45
+ default_error_summary_title: 'There is a problem',
46
+
47
+ localisation_schema_fallback: %i(helpers __context__),
48
+ localisation_schema_label: nil,
49
+ localisation_schema_hint: nil,
50
+ localisation_schema_legend: nil
51
+ }.freeze
52
+
53
+ DEFAULTS.keys.each { |k| config_accessor(k) { DEFAULTS[k] } }
54
+ # @!endgroup
55
+
56
+ class << self
57
+ # Configure the form builder in the usual manner. All of the
58
+ # keys in {DEFAULTS} can be configured as per the example below
59
+ #
60
+ # @example
61
+ # GOVUKDesignSystemFormBuilder.configure do |conf|
62
+ # conf.default_legend_size = 'xl'
63
+ # conf.default_error_summary_title = 'OMG'
64
+ # end
65
+ def configure
66
+ yield(config)
67
+ end
68
+
69
+ # Resets each of the configurable values to its default
70
+ #
71
+ # @note This method is only really intended for use to clean up
72
+ # during testing
73
+ def reset!
74
+ configure do |c|
75
+ DEFAULTS.each { |k, v| c.send("#{k}=", v) }
76
+ end
77
+ end
78
+ end
79
+
43
80
  class FormBuilder < ActionView::Helpers::FormBuilder
44
81
  delegate :content_tag, :tag, :safe_join, :safe_concat, :capture, :link_to, :raw, to: :@template
45
82
 
@@ -47,7 +84,5 @@ module GOVUKDesignSystemFormBuilder
47
84
  end
48
85
 
49
86
  # Disable Rails' div.field_with_error wrapper
50
- ActionView::Base.field_error_proc = Proc.new do |html_tag, _instance|
51
- html_tag.html_safe
52
- end
87
+ ActionView::Base.field_error_proc = ->(html_tag, _instance) { html_tag }
53
88
  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.0.0
4
+ version: 1.1.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: 2019-11-19 00:00:00.000000000 Z
11
+ date: 2019-12-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionview
@@ -53,19 +53,19 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '5.2'
55
55
  - !ruby/object:Gem::Dependency
56
- name: govuk-lint
56
+ name: rubocop-govuk
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '4'
61
+ version: '2'
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: '4'
68
+ version: '2'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: pry
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -204,14 +204,28 @@ dependencies:
204
204
  requirements:
205
205
  - - "~>"
206
206
  - !ruby/object:Gem::Version
207
- version: 3.12.0
207
+ version: 3.13.0
208
208
  type: :development
209
209
  prerelease: false
210
210
  version_requirements: !ruby/object:Gem::Requirement
211
211
  requirements:
212
212
  - - "~>"
213
213
  - !ruby/object:Gem::Version
214
- version: 3.12.0
214
+ version: 3.13.0
215
+ - !ruby/object:Gem::Dependency
216
+ name: rubypants
217
+ requirement: !ruby/object:Gem::Requirement
218
+ requirements:
219
+ - - "~>"
220
+ - !ruby/object:Gem::Version
221
+ version: 0.7.0
222
+ type: :development
223
+ prerelease: false
224
+ version_requirements: !ruby/object:Gem::Requirement
225
+ requirements:
226
+ - - "~>"
227
+ - !ruby/object:Gem::Version
228
+ version: 0.7.0
215
229
  - !ruby/object:Gem::Dependency
216
230
  name: sassc
217
231
  requirement: !ruby/object:Gem::Requirement
@@ -226,6 +240,20 @@ dependencies:
226
240
  - - "~>"
227
241
  - !ruby/object:Gem::Version
228
242
  version: 2.2.1
243
+ - !ruby/object:Gem::Dependency
244
+ name: sass
245
+ requirement: !ruby/object:Gem::Requirement
246
+ requirements:
247
+ - - ">="
248
+ - !ruby/object:Gem::Version
249
+ version: '0'
250
+ type: :development
251
+ prerelease: false
252
+ version_requirements: !ruby/object:Gem::Requirement
253
+ requirements:
254
+ - - ">="
255
+ - !ruby/object:Gem::Version
256
+ version: '0'
229
257
  - !ruby/object:Gem::Dependency
230
258
  name: slim
231
259
  requirement: !ruby/object:Gem::Requirement
@@ -270,7 +298,6 @@ files:
270
298
  - lib/govuk_design_system_formbuilder/elements/error_summary.rb
271
299
  - lib/govuk_design_system_formbuilder/elements/file.rb
272
300
  - lib/govuk_design_system_formbuilder/elements/hint.rb
273
- - lib/govuk_design_system_formbuilder/elements/inputs/base.rb
274
301
  - lib/govuk_design_system_formbuilder/elements/inputs/email.rb
275
302
  - lib/govuk_design_system_formbuilder/elements/inputs/number.rb
276
303
  - lib/govuk_design_system_formbuilder/elements/inputs/phone.rb
@@ -283,6 +310,14 @@ files:
283
310
  - lib/govuk_design_system_formbuilder/elements/select.rb
284
311
  - lib/govuk_design_system_formbuilder/elements/submit.rb
285
312
  - lib/govuk_design_system_formbuilder/elements/text_area.rb
313
+ - lib/govuk_design_system_formbuilder/traits/collection_item.rb
314
+ - lib/govuk_design_system_formbuilder/traits/conditional.rb
315
+ - lib/govuk_design_system_formbuilder/traits/error.rb
316
+ - lib/govuk_design_system_formbuilder/traits/hint.rb
317
+ - lib/govuk_design_system_formbuilder/traits/input.rb
318
+ - lib/govuk_design_system_formbuilder/traits/label.rb
319
+ - lib/govuk_design_system_formbuilder/traits/localisation.rb
320
+ - lib/govuk_design_system_formbuilder/traits/supplemental.rb
286
321
  - lib/govuk_design_system_formbuilder/version.rb
287
322
  homepage: https://govuk-form-builder.netlify.com
288
323
  licenses:
@@ -1,79 +0,0 @@
1
- module GOVUKDesignSystemFormBuilder
2
- module Elements
3
- module Inputs
4
- class Base < GOVUKDesignSystemFormBuilder::Base
5
- def initialize(builder, object_name, attribute_name, hint_text:, label:, width:, **extra_args, &block)
6
- super(builder, object_name, attribute_name, &block)
7
-
8
- @width = width
9
- @extra_args = extra_args
10
- @label = label
11
- @hint_text = hint_text
12
- end
13
-
14
- def html
15
- Containers::FormGroup.new(@builder, @object_name, @attribute_name).html do
16
- safe_join(
17
- [
18
- label_element.html,
19
- hint_element.html,
20
- supplemental_content.html,
21
- error_element.html,
22
- @builder.send(
23
- builder_method,
24
- @attribute_name,
25
- id: field_id(link_errors: true),
26
- class: input_classes,
27
- aria: {
28
- describedby: described_by(
29
- hint_id,
30
- error_id,
31
- supplemental_id
32
- )
33
- },
34
- **@extra_args
35
- )
36
- ]
37
- )
38
- end
39
- end
40
-
41
- private
42
-
43
- def input_classes
44
- %w(govuk-input).push(width_classes, error_classes).compact
45
- end
46
-
47
- def error_classes
48
- 'govuk-input--error' if has_errors?
49
- end
50
-
51
- def width_classes
52
- return if @width.blank?
53
-
54
- case @width
55
- when nil then nil
56
-
57
- # fixed (character) widths
58
- when 20 then 'govuk-input--width-20'
59
- when 10 then 'govuk-input--width-10'
60
- when 5 then 'govuk-input--width-5'
61
- when 4 then 'govuk-input--width-4'
62
- when 3 then 'govuk-input--width-3'
63
- when 2 then 'govuk-input--width-2'
64
-
65
- # fluid widths
66
- when 'full' then 'govuk-!-width-full'
67
- when 'three-quarters' then 'govuk-!-width-three-quarters'
68
- when 'two-thirds' then 'govuk-!-width-two-thirds'
69
- when 'one-half' then 'govuk-!-width-one-half'
70
- when 'one-third' then 'govuk-!-width-one-third'
71
- when 'one-quarter' then 'govuk-!-width-one-quarter'
72
-
73
- else fail(ArgumentError, "invalid width '#{@width}'")
74
- end
75
- end
76
- end
77
- end
78
- end
79
- end