crown_marketplace_utils 0.1.0.beta.4 → 0.1.0.beta.5
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/.rubocop.yml +1 -1
- data/Gemfile.lock +5 -5
- data/README.md +1 -3
- data/lib/crown_marketplace_utils/helpers/gov_uk_helper/accordion.rb +116 -0
- data/lib/crown_marketplace_utils/helpers/gov_uk_helper/back_link.rb +34 -0
- data/lib/crown_marketplace_utils/{gov_uk_helper → helpers/gov_uk_helper}/breadcrumbs.rb +2 -2
- data/lib/crown_marketplace_utils/{gov_uk_helper → helpers/gov_uk_helper}/button.rb +11 -19
- data/lib/crown_marketplace_utils/{gov_uk_helper → helpers/gov_uk_helper}/details.rb +1 -1
- data/lib/crown_marketplace_utils/{gov_uk_helper → helpers/gov_uk_helper}/error_message.rb +1 -1
- data/lib/crown_marketplace_utils/{gov_uk_helper → helpers/gov_uk_helper}/field/character_count.rb +25 -50
- data/lib/crown_marketplace_utils/{gov_uk_helper → helpers/gov_uk_helper}/field/checkboxes.rb +52 -68
- data/lib/crown_marketplace_utils/{gov_uk_helper → helpers/gov_uk_helper}/field/date_input.rb +46 -127
- data/lib/crown_marketplace_utils/helpers/gov_uk_helper/field/file_upload.rb +94 -0
- data/lib/crown_marketplace_utils/{gov_uk_helper → helpers/gov_uk_helper}/field/input.rb +34 -72
- data/lib/crown_marketplace_utils/{gov_uk_helper → helpers/gov_uk_helper}/field/radios.rb +52 -68
- data/lib/crown_marketplace_utils/{gov_uk_helper → helpers/gov_uk_helper}/field/select.rb +28 -64
- data/lib/crown_marketplace_utils/helpers/gov_uk_helper/field/textarea.rb +105 -0
- data/lib/crown_marketplace_utils/helpers/gov_uk_helper/field.rb +215 -0
- data/lib/crown_marketplace_utils/{gov_uk_helper → helpers/gov_uk_helper}/fieldset.rb +1 -1
- data/lib/crown_marketplace_utils/{gov_uk_helper → helpers/gov_uk_helper}/form_group.rb +10 -21
- data/lib/crown_marketplace_utils/{gov_uk_helper → helpers/gov_uk_helper}/header.rb +1 -1
- data/lib/crown_marketplace_utils/{gov_uk_helper → helpers/gov_uk_helper}/hint.rb +1 -1
- data/lib/crown_marketplace_utils/helpers/gov_uk_helper/label.rb +88 -0
- data/lib/crown_marketplace_utils/{gov_uk_helper → helpers/gov_uk_helper}/notification_banner.rb +1 -1
- data/lib/crown_marketplace_utils/helpers/gov_uk_helper/pagination.rb +338 -0
- data/lib/crown_marketplace_utils/{gov_uk_helper → helpers/gov_uk_helper}/step_by_step_navigation.rb +1 -1
- data/lib/crown_marketplace_utils/{gov_uk_helper → helpers/gov_uk_helper}/tag.rb +1 -1
- data/lib/crown_marketplace_utils/helpers/gov_uk_helper/warning_text.rb +52 -0
- data/lib/crown_marketplace_utils/{gov_uk_helper.rb → helpers/gov_uk_helper.rb} +7 -1
- data/lib/crown_marketplace_utils/version.rb +1 -1
- data/lib/crown_marketplace_utils.rb +1 -1
- metadata +28 -25
- data/lib/crown_marketplace_utils/gov_uk_helper/field/file_upload.rb +0 -125
- data/lib/crown_marketplace_utils/gov_uk_helper/field/textarea.rb +0 -140
- data/lib/crown_marketplace_utils/gov_uk_helper/field.rb +0 -305
- data/lib/crown_marketplace_utils/gov_uk_helper/label.rb +0 -97
- data/lib/crown_marketplace_utils/gov_uk_helper/pagination.rb +0 -214
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
require_relative '../field'
|
4
4
|
|
5
|
-
module CrownMarketplaceUtils
|
5
|
+
module CrownMarketplaceUtils::Helpers
|
6
6
|
module GovUkHelper
|
7
7
|
module Field
|
8
8
|
# = GOV.UK Input
|
@@ -18,100 +18,66 @@ module CrownMarketplaceUtils
|
|
18
18
|
# Generates the HTML for the GOV.UK input component
|
19
19
|
#
|
20
20
|
# @param attribute [String, Symbol] the attribute of the input
|
21
|
-
# @param error_message [String] the error message to be displayed
|
22
21
|
# @param govuk_input_options [Hash] options that will be used for the parts of the form group, label, hint and input
|
23
22
|
#
|
23
|
+
# @option govuk_input_options [String] :error_message (nil) the error message to be displayed
|
24
|
+
# @option govuk_input_options [ActiveModel] :model (nil) optional model that can be used to find an error message
|
25
|
+
# @option govuk_label_options [ActionView::Helpers::FormBuilder] :form (nil) optional form builder used to create
|
26
|
+
# the input tag and find the error message
|
24
27
|
# @option govuk_input_options [Hash] :form_group see {govuk_field}
|
25
28
|
# @option govuk_input_options [Hash] :label see {govuk_field}
|
26
29
|
# @option govuk_input_options [Hash] :hint see {govuk_field}
|
27
30
|
# @option govuk_input_options [Hash] :input ({}) the options that will be used when rendering the input.
|
28
|
-
# See {
|
31
|
+
# See {_govuk_input_field} for more details.
|
29
32
|
#
|
30
33
|
# @return [ActiveSupport::SafeBuffer] the HTML for the GOV.UK Input
|
31
34
|
# which can then be rendered on the page
|
32
35
|
|
33
|
-
def govuk_input(attribute,
|
34
|
-
govuk_field(:input, attribute,
|
35
|
-
concat(
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
# Generates the HTML for the GOV.UK input component using an ActiveModel.
|
40
|
-
# Unlike {govuk_input}, the method will be able to automatically determine if the error message needs to be shown.
|
41
|
-
#
|
42
|
-
# @param model [ActiveModel] model that will be used to find an error message and the value of the input
|
43
|
-
# @param attribute [String, Symbol] the attribute of the input
|
44
|
-
# @param govuk_input_options [Hash] options that will be used for the parts of the form group, label, hint and input
|
45
|
-
#
|
46
|
-
# @option (see govuk_input)
|
47
|
-
#
|
48
|
-
# @return (see govuk_input)
|
49
|
-
|
50
|
-
def govuk_input_with_model(model, attribute, **govuk_input_options)
|
51
|
-
govuk_field_with_model(:input, model, attribute, **govuk_input_options) do |govuk_field_options, error_message|
|
52
|
-
govuk_field_options[:value] = model.send(attribute)
|
53
|
-
|
54
|
-
concat(govuk_input_field(attribute, error_message, **govuk_field_options))
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
# Generates the HTML for the GOV.UK input component using an ActionView::Helpers::FormBuilder.
|
59
|
-
# Unlike {govuk_input}, the method will be able to automatically determine if the error message needs to be shown.
|
60
|
-
#
|
61
|
-
# @param form [ActionView::Helpers::FormBuilder] the form builder used to create the input
|
62
|
-
# @param attribute [String, Symbol] the attribute of the input
|
63
|
-
# @param govuk_input_options [Hash] options that will be used for the parts of the form group, label, hint and input
|
64
|
-
#
|
65
|
-
# @option (see govuk_input)
|
66
|
-
#
|
67
|
-
# @return (see govuk_input)
|
36
|
+
def govuk_input(attribute, **govuk_input_options)
|
37
|
+
govuk_field(:input, attribute, **govuk_input_options) do |govuk_field_options, error_message|
|
38
|
+
concat(_govuk_input_field(error_message, **govuk_field_options) do
|
39
|
+
field_type = get_field_type(govuk_field_options[:field_type])
|
40
|
+
govuk_field_options[:value] = govuk_input_options[:model].send(attribute) if govuk_input_options[:model]
|
68
41
|
|
69
|
-
|
70
|
-
|
71
|
-
|
42
|
+
if govuk_input_options[:form]
|
43
|
+
govuk_input_form(govuk_input_options[:form], field_type, attribute, **govuk_field_options)
|
44
|
+
else
|
45
|
+
govuk_input_tag(field_type, attribute, **govuk_field_options)
|
46
|
+
end
|
47
|
+
end)
|
72
48
|
end
|
73
49
|
end
|
74
50
|
|
75
51
|
private
|
76
52
|
|
77
|
-
# Generates the input HTML for {govuk_input}
|
53
|
+
# Generates the input HTML for {govuk_input}
|
78
54
|
#
|
55
|
+
# @param field_type [String] the inout field type
|
79
56
|
# @param attribute [String, Symbol] the attribute of the input
|
80
|
-
# @param error_message [String] used to indicate if there is an error which will add extra classes
|
81
57
|
# @param govuk_text_input_options [Hash] options that will be used in customising the HTML
|
82
58
|
#
|
83
59
|
# @option (see _govuk_input_field)
|
84
60
|
#
|
85
61
|
# @return [ActiveSupport::SafeBuffer] the HTML for the input field which is used in {govuk_input}
|
86
62
|
|
87
|
-
def
|
88
|
-
|
89
|
-
field_type = :"#{get_field_type(govuk_text_input_options[:field_type])}_tag"
|
90
|
-
|
91
|
-
send(field_type, attribute, govuk_text_input_options[:value], class: govuk_text_input_classes, **govuk_text_input_attributes)
|
92
|
-
end
|
63
|
+
def govuk_input_tag(field_type, attribute, **govuk_text_input_options)
|
64
|
+
send("#{field_type}_tag", attribute, govuk_text_input_options[:value], **govuk_text_input_options[:attributes])
|
93
65
|
end
|
94
66
|
|
95
|
-
# Generates the input HTML for {
|
67
|
+
# Generates the input HTML for {govuk_input} when there is a ActionView::Helpers::FormBuilder
|
96
68
|
#
|
97
|
-
# @param form [ActionView::Helpers::FormBuilder] the form builder used to create the input
|
98
|
-
# @param
|
99
|
-
# @param error_message [String] used to indicate if there is an error which will add an extra classes
|
100
|
-
# @param govuk_text_input_options [Hash] options that will be used in customising the HTML
|
69
|
+
# @param form [ActionView::Helpers::FormBuilder] the form builder used to create the input tag
|
70
|
+
# @param (see govuk_input_tag)
|
101
71
|
#
|
102
72
|
# @option (see _govuk_input_field)
|
103
73
|
#
|
104
|
-
# @return
|
105
|
-
|
106
|
-
def govuk_input_field_with_form(form, attribute, error_message, **govuk_text_input_options)
|
107
|
-
_govuk_input_field(error_message, **govuk_text_input_options) do |govuk_text_input_classes, govuk_text_input_attributes|
|
108
|
-
field_type = get_field_type(govuk_text_input_options[:field_type])
|
74
|
+
# @return (see govuk_input_tag)
|
109
75
|
|
110
|
-
|
111
|
-
|
76
|
+
def govuk_input_form(form, field_type, attribute, **govuk_text_input_options)
|
77
|
+
form.send(field_type, attribute, **govuk_text_input_options[:attributes])
|
112
78
|
end
|
113
79
|
|
114
|
-
# Wrapper method used by {
|
80
|
+
# Wrapper method used by {govuk_input} to generate the Input HTML
|
115
81
|
#
|
116
82
|
# @param error_message [String] used to indicate if there is an error which will add extra classes
|
117
83
|
# @param govuk_text_input_options [Hash] options that will be used in customising the HTML
|
@@ -123,20 +89,16 @@ module CrownMarketplaceUtils
|
|
123
89
|
# @option govuk_text_input_options [Hash] :suffix (nil) optional suffix for the input field. See {govuk_fix} for more details.
|
124
90
|
# @option govuk_text_input_options [Hash] :attributes ({}) any additional attributes that will added as part of the HTML
|
125
91
|
#
|
126
|
-
# @yield the input HTML generated by {
|
127
|
-
#
|
128
|
-
# @yieldparam govuk_text_input_classes [Array] the classes for the input HTML
|
129
|
-
# @yieldparam govuk_text_input_attributes [Hash] additional attributes that will added as part of the HTML
|
92
|
+
# @yield the input HTML generated by {govuk_input_tag} or {govuk_input_form}
|
130
93
|
#
|
131
|
-
# @return [ActiveSupport::SafeBuffer] the HTML for the input field which is used
|
94
|
+
# @return [ActiveSupport::SafeBuffer] the HTML for the input field which is used by {govuk_input}
|
132
95
|
|
133
96
|
def _govuk_input_field(error_message, **govuk_text_input_options)
|
134
|
-
govuk_text_input_classes = "govuk-input #{govuk_text_input_options[:classes]}".rstrip
|
135
|
-
govuk_text_input_classes << ' govuk-input--error' if error_message
|
136
|
-
|
137
97
|
govuk_text_input_options[:attributes] ||= {}
|
98
|
+
govuk_text_input_options[:attributes][:class] = "govuk-input #{govuk_text_input_options[:classes]}".rstrip
|
99
|
+
govuk_text_input_options[:attributes][:class] << ' govuk-input--error' if error_message
|
138
100
|
|
139
|
-
input_html = yield
|
101
|
+
input_html = yield
|
140
102
|
|
141
103
|
prefix = govuk_text_input_options[:prefix]
|
142
104
|
suffix = govuk_text_input_options[:suffix]
|
@@ -162,7 +124,7 @@ module CrownMarketplaceUtils
|
|
162
124
|
# @option govuk_fix_options [String] :classes additional CSS classes for the input HTML
|
163
125
|
# @option govuk_text_input_options [Hash] :attributes ({ aria: { hidden: true } }) any additional attributes that will added as part of the HTML
|
164
126
|
#
|
165
|
-
# @return [ActiveSupport::SafeBuffer] the HTML for the input field which is used in {
|
127
|
+
# @return [ActiveSupport::SafeBuffer] the HTML for the input field which is used in {_govuk_input_field}
|
166
128
|
|
167
129
|
def govuk_fix(fix, govuk_fix_options)
|
168
130
|
govuk_fix_classes = ["govuk-input__#{fix}fix"]
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
require_relative '../field'
|
4
4
|
|
5
|
-
module CrownMarketplaceUtils
|
5
|
+
module CrownMarketplaceUtils::Helpers
|
6
6
|
module GovUkHelper
|
7
7
|
module Field
|
8
8
|
# = GOV.UK Radios
|
@@ -19,60 +19,35 @@ module CrownMarketplaceUtils
|
|
19
19
|
#
|
20
20
|
# @param attribute [String, Symbol] the attribute of the raido buttons
|
21
21
|
# @param items [Array] array of radio items, see {_govuk_radios_fields}
|
22
|
-
# @param error_message [String] the error message to be displayed
|
23
22
|
# @param govuk_radios_options [Hash] options that will be used for the parts of the fieldset, form group, hint and radio buttons
|
24
23
|
#
|
24
|
+
# @option govuk_radios_options [String] :error_message (nil) the error message to be displayed
|
25
|
+
# @option govuk_radios_options [ActiveModel] :model (nil) optional model that can be used to find an error message
|
26
|
+
# @option govuk_radios_options [ActionView::Helpers::FormBuilder] :form (nil) optional form builder used to create
|
27
|
+
# the radio tags and find the error message
|
25
28
|
# @option govuk_radios_options [Hash] :form_group see {govuk_fields}
|
26
29
|
# @option govuk_radios_options [Hash] :fieldset see {govuk_fields}
|
27
30
|
# @option govuk_radios_options [Hash] :hint see {govuk_field}
|
28
31
|
# @option govuk_radios_options [Hash] :radios ({}) the options that will be used when rendering the radio buttons.
|
29
|
-
# See {
|
32
|
+
# See {govuk_radio_fields_tag} for more details.
|
30
33
|
#
|
31
34
|
# @return [ActiveSupport::SafeBuffer] the HTML for the GOV.UK Radios
|
32
35
|
# which can then be rendered on the page
|
33
36
|
|
34
|
-
def govuk_radios(attribute, items,
|
35
|
-
govuk_fields(:radios, attribute,
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
# Generates the HTML for the GOV.UK Radios component using an ActiveModel.
|
41
|
-
# Unlike {govuk_radios}, the method will be able to automatically determine if the error message needs to be shown.
|
42
|
-
#
|
43
|
-
# @param model [ActiveModel] model that will be used to find an error message and the selected radio button
|
44
|
-
# @param attribute [String, Symbol] the attribute of the raido buttons
|
45
|
-
# @param items [Array] array of radio items, see {_govuk_radios_fields}
|
46
|
-
# @param govuk_radios_options [Hash] options that will be used for the parts of the fieldset, form group, hint and radio buttons
|
47
|
-
#
|
48
|
-
# @option (see govuk_radios)
|
49
|
-
#
|
50
|
-
# @return (see govuk_radios)
|
51
|
-
|
52
|
-
def govuk_radios_with_model(model, attribute, items, **govuk_radios_options)
|
53
|
-
value = model.send(attribute)
|
54
|
-
items.each { |item| item[:checked] = item[:value] == value }
|
55
|
-
|
56
|
-
govuk_fields_with_model(:radios, model, attribute, **govuk_radios_options) do |govuk_field_options|
|
57
|
-
concat(govuk_radios_fields(attribute, items, **govuk_field_options))
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
# Generates the HTML for the GOV.UK Radios component using an ActionView::Helpers::FormBuilder.
|
62
|
-
# Unlike {govuk_radios}, the method will be able to automatically determine if the error message needs to be shown.
|
63
|
-
#
|
64
|
-
# @param form [ActionView::Helpers::FormBuilder] the form builder used to create the radio buttons
|
65
|
-
# @param attribute [String, Symbol] the attribute of the raido buttons
|
66
|
-
# @param items [Array] array of radio items, see {_govuk_radios_fields}
|
67
|
-
# @param govuk_radios_options [Hash] options that will be used for the parts of the fieldset, form group, hint and radio buttons
|
68
|
-
#
|
69
|
-
# @option (see govuk_radios)
|
70
|
-
#
|
71
|
-
# @return (see govuk_radios)
|
37
|
+
def govuk_radios(attribute, items, **govuk_radios_options)
|
38
|
+
govuk_fields(:radios, attribute, **govuk_radios_options) do |govuk_field_options|
|
39
|
+
if govuk_radios_options[:model] || govuk_radios_options[:form]
|
40
|
+
value = (govuk_radios_options[:model] || govuk_radios_options[:form].object).send(attribute)
|
41
|
+
items.each { |item| item[:checked] = item[:value] == value }
|
42
|
+
end
|
72
43
|
|
73
|
-
|
74
|
-
|
75
|
-
|
44
|
+
concat(
|
45
|
+
if govuk_radios_options[:form]
|
46
|
+
govuk_radio_fields_form(govuk_radios_options[:form], attribute, items, **govuk_field_options)
|
47
|
+
else
|
48
|
+
govuk_radio_fields_tag(attribute, items, **govuk_field_options)
|
49
|
+
end
|
50
|
+
)
|
76
51
|
end
|
77
52
|
end
|
78
53
|
|
@@ -88,30 +63,28 @@ module CrownMarketplaceUtils
|
|
88
63
|
#
|
89
64
|
# @return [ActiveSupport::SafeBuffer] the HTML for the radio buttons which is used in {govuk_radios}
|
90
65
|
|
91
|
-
def
|
66
|
+
def govuk_radio_fields_tag(attribute, items, **govuk_radios_options)
|
92
67
|
_govuk_radios_fields(items, **govuk_radios_options) do |radio_item|
|
93
|
-
|
68
|
+
govuk_radio_item_tag(attribute, radio_item)
|
94
69
|
end
|
95
70
|
end
|
96
71
|
|
97
|
-
# Generates the radios HTML for {
|
72
|
+
# Generates the radios HTML for {govuk_radios} when there is a ActionView::Helpers::FormBuilder
|
98
73
|
#
|
99
74
|
# @param form [ActionView::Helpers::FormBuilder] the form builder used to create the radio buttons
|
100
|
-
# @param
|
101
|
-
# @param items [Array] array of radio items, see {_govuk_radios_fields}
|
102
|
-
# @param govuk_radios_options [Hash] options that will be used in customising the HTML
|
75
|
+
# @param (see govuk_radio_fields_tag)
|
103
76
|
#
|
104
77
|
# @option (see _govuk_radios_fields)
|
105
78
|
#
|
106
|
-
# @return
|
79
|
+
# @return (see govuk_radio_fields_tag)
|
107
80
|
|
108
|
-
def
|
81
|
+
def govuk_radio_fields_form(form, attribute, items, **govuk_radios_options)
|
109
82
|
_govuk_radios_fields(items, **govuk_radios_options) do |radio_item|
|
110
|
-
|
83
|
+
govuk_radio_item_form(form, attribute, radio_item)
|
111
84
|
end
|
112
85
|
end
|
113
86
|
|
114
|
-
# Wrapper method used by {
|
87
|
+
# Wrapper method used by {govuk_radio_fields_tag} and {govuk_radio_fields_form} to generate the radios HTML
|
115
88
|
#
|
116
89
|
# @param items [Array] array of radio items.
|
117
90
|
# Each item is a hash which can be:
|
@@ -122,18 +95,18 @@ module CrownMarketplaceUtils
|
|
122
95
|
# @option govuk_radios_options [String] :classes additional CSS classes for the radios HTML
|
123
96
|
# @option govuk_radios_options [Hash] :attributes ({ module: 'govuk-radios' }) any additional attributes that will added as part of the HTML
|
124
97
|
#
|
125
|
-
# @yield the radio item HTML generated by {
|
98
|
+
# @yield the radio item HTML generated by {govuk_radio_fields_tag} or {govuk_radio_fields_form}
|
126
99
|
#
|
127
100
|
# @yieldparam radio_item [Hash] the current radio item to be rendered
|
128
101
|
#
|
129
|
-
# @return [ActiveSupport::SafeBuffer] the HTML for the radio buttons which is used in {
|
102
|
+
# @return [ActiveSupport::SafeBuffer] the HTML for the radio buttons which is used in {govuk_radio_fields_tag} or {govuk_radio_fields_form}
|
130
103
|
|
131
104
|
def _govuk_radios_fields(items, **govuk_radios_options)
|
132
|
-
|
133
|
-
|
134
|
-
(
|
105
|
+
govuk_radios_options[:attributes] ||= {}
|
106
|
+
govuk_radios_options[:attributes][:class] = "govuk-radios #{govuk_radios_options[:classes]}".rstrip
|
107
|
+
(govuk_radios_options[:attributes][:data] ||= {}).merge!({ module: 'govuk-radios' })
|
135
108
|
|
136
|
-
tag.div(
|
109
|
+
tag.div(**govuk_radios_options[:attributes]) do
|
137
110
|
capture do
|
138
111
|
items.each do |radio_item|
|
139
112
|
concat(
|
@@ -150,7 +123,7 @@ module CrownMarketplaceUtils
|
|
150
123
|
end
|
151
124
|
end
|
152
125
|
|
153
|
-
# Generates the HTML for a radio button for {
|
126
|
+
# Generates the HTML for a radio button for {govuk_radio_fields_form}
|
154
127
|
#
|
155
128
|
# @param (see _govuk_radio_item)
|
156
129
|
#
|
@@ -158,7 +131,7 @@ module CrownMarketplaceUtils
|
|
158
131
|
#
|
159
132
|
# @return (see _govuk_radio_item)
|
160
133
|
|
161
|
-
def
|
134
|
+
def govuk_radio_item_tag(attribute, radio_item)
|
162
135
|
_govuk_radio_item(attribute, radio_item) do
|
163
136
|
label_attribute = radio_item[:attributes][:id] || "#{attribute}[#{radio_item[:value]}]"
|
164
137
|
|
@@ -167,7 +140,7 @@ module CrownMarketplaceUtils
|
|
167
140
|
end
|
168
141
|
end
|
169
142
|
|
170
|
-
# Generates the HTML for a radio button for {
|
143
|
+
# Generates the HTML for a radio button for {govuk_radio_fields_tag}
|
171
144
|
#
|
172
145
|
# @param (see _govuk_radio_item)
|
173
146
|
# @param form [ActionView::Helpers::FormBuilder] the form builder used to create the radio buttons
|
@@ -176,17 +149,19 @@ module CrownMarketplaceUtils
|
|
176
149
|
#
|
177
150
|
# @return (see _govuk_radio_item)
|
178
151
|
|
179
|
-
def
|
152
|
+
def govuk_radio_item_form(form, attribute, radio_item)
|
180
153
|
_govuk_radio_item(attribute, radio_item) do
|
181
154
|
(radio_item[:label][:attributes] ||= {})[:value] = radio_item[:value]
|
182
155
|
radio_item[:label][:attributes][:for] = radio_item[:attributes][:id] if radio_item[:attributes][:id]
|
183
156
|
|
184
157
|
concat(form.radio_button(attribute, radio_item[:value], class: 'govuk-radios__input', **radio_item[:attributes]))
|
185
|
-
concat(
|
158
|
+
concat(govuk_label(attribute, radio_item[:label][:text], form: form, **radio_item[:label]))
|
186
159
|
end
|
187
160
|
end
|
188
161
|
|
189
|
-
#
|
162
|
+
# rubocop:disable Metrics/AbcSize
|
163
|
+
|
164
|
+
# Wrapper method used by {govuk_radio_item_tag} and {govuk_radio_item_form} to generate the radios HTML
|
190
165
|
# including the label and hint, if there is one.
|
191
166
|
#
|
192
167
|
# @param attribute [String, Symbol] the attribute of the raido buttons
|
@@ -196,23 +171,32 @@ module CrownMarketplaceUtils
|
|
196
171
|
# @option radio_item [Hash] :label the parameters that will be used to create the label for the radio button, see {govuk_label}
|
197
172
|
# @option radio_item [Hash] :hint (nil) the parameters that will be used to create the hint for the radio button, see {govuk_hint}.
|
198
173
|
# If no hint is given then no hint will be rendered
|
174
|
+
# @option radio_item [Hash] :conditional (nil) content that will appear when the radio button is checked.
|
175
|
+
# It can have the following options:
|
176
|
+
# - +[:content]+ the content that will be shown
|
177
|
+
# - +[:attributes][:id]+ the id of the conditional section
|
178
|
+
# If no conditional is given then no conditional content will be rendered
|
199
179
|
# @option radio_item [Hash] :attributes ({}) any additional attributes that will be added as part of the radio button HTML
|
200
180
|
#
|
201
181
|
# @return [ActiveSupport::SafeBuffer] the HTML for the radio buttons, label and hint
|
202
|
-
# which is used in {
|
182
|
+
# which is used in {govuk_radio_item_tag} and {govuk_radio_item_form}
|
203
183
|
|
204
184
|
def _govuk_radio_item(attribute, radio_item)
|
205
185
|
radio_item[:attributes] ||= {}
|
206
186
|
radio_item[:label] ||= {}
|
207
187
|
radio_item[:label][:classes] = "govuk-radios__label #{radio_item[:label][:classes]}".rstrip
|
208
188
|
|
209
|
-
set_item_options_for_hint('radios', attribute, radio_item)
|
189
|
+
set_item_options_for_hint('radios', attribute, radio_item)
|
190
|
+
set_conditional_item_options('radios', attribute, radio_item)
|
210
191
|
|
211
192
|
capture do
|
212
193
|
yield
|
213
194
|
concat(govuk_hint(radio_item[:hint][:text], **radio_item[:hint])) if radio_item[:hint]
|
195
|
+
concat(tag.div(radio_item[:conditional][:content], class: radio_item[:conditional][:attributes][:class], id: radio_item[:conditional][:attributes][:id])) if radio_item[:conditional]
|
214
196
|
end
|
215
197
|
end
|
198
|
+
|
199
|
+
# rubocop:enable Metrics/AbcSize
|
216
200
|
end
|
217
201
|
end
|
218
202
|
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
require 'action_view'
|
4
4
|
require_relative '../field'
|
5
5
|
|
6
|
-
module CrownMarketplaceUtils
|
6
|
+
module CrownMarketplaceUtils::Helpers
|
7
7
|
module GovUkHelper
|
8
8
|
module Field
|
9
9
|
# = GOV.UK Select
|
@@ -21,59 +21,33 @@ module CrownMarketplaceUtils
|
|
21
21
|
#
|
22
22
|
# @param attribute [String, Symbol] the attribute of the select field
|
23
23
|
# @param items [Array] array of option items for the select, see {govuk_map_select_items}
|
24
|
-
# @param error_message [String] the error message to be displayed
|
25
24
|
# @param govuk_select_options [Hash] options that will be used for the parts of the form group, label, hint and select
|
26
25
|
#
|
26
|
+
# @option govuk_select_options [String] :error_message (nil) the error message to be displayed
|
27
|
+
# @option govuk_select_options [ActiveModel] :model (nil) optional model that can be used to find an error message
|
28
|
+
# @option govuk_select_options [ActionView::Helpers::FormBuilder] :form (nil) optional form builder used to create
|
29
|
+
# the select tag and find the error message
|
27
30
|
# @option govuk_select_options [Hash] :form_group see {govuk_field}
|
28
31
|
# @option govuk_select_options [Hash] :label see {govuk_field}
|
29
32
|
# @option govuk_select_options [Hash] :hint see {govuk_field}
|
30
33
|
# @option govuk_select_options [Hash] :select ({}) the options that will be used when rendering the select field.
|
31
|
-
# See {
|
34
|
+
# See {set_govuk_select_field_options} for more details.
|
32
35
|
#
|
33
36
|
# @return [ActiveSupport::SafeBuffer] the HTML for the GOV.UK Select
|
34
37
|
# which can then be rendered on the page
|
35
38
|
|
36
|
-
def govuk_select(attribute, items,
|
37
|
-
govuk_field(:select, attribute,
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
# @param govuk_select_options [Hash] options that will be used for the parts of the form group, label, hint and select
|
49
|
-
#
|
50
|
-
# @option see govuk_select)
|
51
|
-
#
|
52
|
-
# @return (see govuk_select)
|
53
|
-
|
54
|
-
def govuk_select_with_model(model, attribute, items, **govuk_select_options)
|
55
|
-
(govuk_select_options[:select] ||= {})[:selected] = model.send(attribute)
|
56
|
-
|
57
|
-
govuk_field_with_model(:select, model, attribute, **govuk_select_options) do |govuk_field_options, error_message|
|
58
|
-
concat(govuk_select_field(attribute, items, error_message, **govuk_field_options))
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
# Generates the HTML for the GOV.UK Select component using an ActionView::Helpers::FormBuilder.
|
63
|
-
# Unlike {govuk_select}, the method will be able to automatically determine if the error message needs to be shown.
|
64
|
-
#
|
65
|
-
# @param form [ActionView::Helpers::FormBuilder] the form builder used to create the select field
|
66
|
-
# @param attribute [String, Symbol] the attribute of the select field
|
67
|
-
# @param items [Array] array of option items for the select, see {govuk_map_select_items}
|
68
|
-
# @param govuk_select_options [Hash] options that will be used for the parts of the form group, label, hint and select
|
69
|
-
#
|
70
|
-
# @option see govuk_select)
|
71
|
-
#
|
72
|
-
# @return (see govuk_select)
|
73
|
-
|
74
|
-
def govuk_select_with_form(form, attribute, items, **govuk_select_options)
|
75
|
-
govuk_field_with_form(:select, form, attribute, **govuk_select_options) do |govuk_field_options, error_message|
|
76
|
-
concat(govuk_select_field_with_form(form, attribute, items, error_message, **govuk_field_options))
|
39
|
+
def govuk_select(attribute, items, **govuk_select_options)
|
40
|
+
govuk_field(:select, attribute, **govuk_select_options) do |govuk_field_options, error_message|
|
41
|
+
set_govuk_select_field_options(error_message, govuk_field_options)
|
42
|
+
(govuk_select_options[:select] ||= {})[:selected] = govuk_select_options[:model].send(attribute) if govuk_select_options[:model]
|
43
|
+
|
44
|
+
concat(
|
45
|
+
if govuk_select_options[:form]
|
46
|
+
govuk_select_form(govuk_select_options[:form], attribute, items, **govuk_field_options)
|
47
|
+
else
|
48
|
+
govuk_select_tag(attribute, items, **govuk_field_options)
|
49
|
+
end
|
50
|
+
)
|
77
51
|
end
|
78
52
|
end
|
79
53
|
|
@@ -83,47 +57,37 @@ module CrownMarketplaceUtils
|
|
83
57
|
#
|
84
58
|
# @param attribute [String, Symbol] the attribute of the select field
|
85
59
|
# @param items [Array] array of option items for the select, see {govuk_map_select_items}
|
86
|
-
# @param error_message [String] used to indicate if there is an error which will add extra classes
|
87
60
|
# @param govuk_select_options [Hash] options that will be used in customising the HTML
|
88
61
|
#
|
89
62
|
# @option (see set_govuk_select_field_options)
|
90
63
|
#
|
91
64
|
# @return [ActiveSupport::SafeBuffer] the HTML for the select field which is used in {govuk_select}
|
92
65
|
|
93
|
-
def
|
94
|
-
set_govuk_select_field_options(error_message, govuk_select_options)
|
95
|
-
|
66
|
+
def govuk_select_tag(attribute, items, **govuk_select_options)
|
96
67
|
select_tag(
|
97
68
|
attribute,
|
98
69
|
options_for_select(
|
99
70
|
govuk_map_select_items(items),
|
100
71
|
govuk_select_options[:selected]
|
101
72
|
),
|
102
|
-
class: govuk_select_options[:classes],
|
103
73
|
**govuk_select_options[:attributes]
|
104
74
|
)
|
105
75
|
end
|
106
76
|
|
107
|
-
# Generates the select HTML for {
|
77
|
+
# Generates the select HTML for {govuk_select} when there is a ActionView::Helpers::FormBuilder
|
108
78
|
#
|
109
79
|
# @param form [ActionView::Helpers::FormBuilder] the form builder used to create the select field
|
110
|
-
# @param
|
111
|
-
# @param items [Array] array of option items for the select, see {govuk_map_select_items}
|
112
|
-
# @param error_message [String] used to indicate if there is an error which will add extra classes
|
113
|
-
# @param govuk_select_options [Hash] options that will be used in customising the HTML
|
80
|
+
# @param (see govuk_select_tag)
|
114
81
|
#
|
115
82
|
# @option (see set_govuk_select_field_options)
|
116
83
|
#
|
117
|
-
# @return
|
118
|
-
|
119
|
-
def govuk_select_field_with_form(form, attribute, items, error_message, **govuk_select_options)
|
120
|
-
set_govuk_select_field_options(error_message, govuk_select_options)
|
84
|
+
# @return (see govuk_select_tag)
|
121
85
|
|
86
|
+
def govuk_select_form(form, attribute, items, **govuk_select_options)
|
122
87
|
form.select(
|
123
88
|
attribute,
|
124
89
|
govuk_map_select_items(items),
|
125
|
-
govuk_select_options[:
|
126
|
-
class: govuk_select_options[:classes],
|
90
|
+
govuk_select_options[:select_options] || {},
|
127
91
|
**govuk_select_options[:attributes]
|
128
92
|
)
|
129
93
|
end
|
@@ -138,13 +102,13 @@ module CrownMarketplaceUtils
|
|
138
102
|
# @option govuk_select_options [Hash] :attributes ({}) any additional attributes that will added as part of the HTML
|
139
103
|
|
140
104
|
def set_govuk_select_field_options(error_message, govuk_select_options)
|
141
|
-
govuk_select_options[:classes] = "govuk-select #{govuk_select_options[:classes]}".rstrip
|
142
|
-
govuk_select_options[:classes] << ' govuk-select--error' if error_message
|
143
105
|
govuk_select_options[:attributes] ||= {}
|
106
|
+
govuk_select_options[:attributes][:class] = "govuk-select #{govuk_select_options[:classes]}".rstrip
|
107
|
+
govuk_select_options[:attributes][:class] << ' govuk-select--error' if error_message
|
144
108
|
end
|
145
109
|
|
146
110
|
# Maps the items into an array that can be used to generate the options for
|
147
|
-
# {
|
111
|
+
# {govuk_select_tag} and {govuk_select_form}
|
148
112
|
#
|
149
113
|
# @param items [Array] array of option items for the select
|
150
114
|
#
|
@@ -153,7 +117,7 @@ module CrownMarketplaceUtils
|
|
153
117
|
# @option items [String] :value the value of the option item
|
154
118
|
# @option items [Hash] :attributes ({}) any additional attributes that will added as part of the option HTML
|
155
119
|
#
|
156
|
-
# @return [Array] array of option params that are used in {
|
120
|
+
# @return [Array] array of option params that are used in {govuk_select_tag} and {govuk_select_form}
|
157
121
|
|
158
122
|
def govuk_map_select_items(items)
|
159
123
|
items.map do |item|
|