crown_marketplace_utils 0.1.0.beta.6 → 0.1.0.beta.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (30) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/lib/crown_marketplace_utils/helpers/gov_uk_helper/accordion.rb +91 -89
  4. data/lib/crown_marketplace_utils/helpers/gov_uk_helper/back_link.rb +24 -22
  5. data/lib/crown_marketplace_utils/helpers/gov_uk_helper/breadcrumbs.rb +56 -54
  6. data/lib/crown_marketplace_utils/helpers/gov_uk_helper/button.rb +109 -107
  7. data/lib/crown_marketplace_utils/helpers/gov_uk_helper/details.rb +33 -31
  8. data/lib/crown_marketplace_utils/helpers/gov_uk_helper/error_message.rb +49 -47
  9. data/lib/crown_marketplace_utils/helpers/gov_uk_helper/field/character_count.rb +144 -142
  10. data/lib/crown_marketplace_utils/helpers/gov_uk_helper/field/checkboxes.rb +176 -174
  11. data/lib/crown_marketplace_utils/helpers/gov_uk_helper/field/date_input.rb +126 -124
  12. data/lib/crown_marketplace_utils/helpers/gov_uk_helper/field/file_upload.rb +75 -73
  13. data/lib/crown_marketplace_utils/helpers/gov_uk_helper/field/input.rb +137 -135
  14. data/lib/crown_marketplace_utils/helpers/gov_uk_helper/field/radios.rb +176 -174
  15. data/lib/crown_marketplace_utils/helpers/gov_uk_helper/field/select.rb +111 -109
  16. data/lib/crown_marketplace_utils/helpers/gov_uk_helper/field/textarea.rb +86 -84
  17. data/lib/crown_marketplace_utils/helpers/gov_uk_helper/field.rb +181 -179
  18. data/lib/crown_marketplace_utils/helpers/gov_uk_helper/fieldset.rb +56 -54
  19. data/lib/crown_marketplace_utils/helpers/gov_uk_helper/form_group.rb +37 -35
  20. data/lib/crown_marketplace_utils/helpers/gov_uk_helper/header.rb +142 -140
  21. data/lib/crown_marketplace_utils/helpers/gov_uk_helper/hint.rb +25 -23
  22. data/lib/crown_marketplace_utils/helpers/gov_uk_helper/label.rb +69 -67
  23. data/lib/crown_marketplace_utils/helpers/gov_uk_helper/notification_banner.rb +121 -119
  24. data/lib/crown_marketplace_utils/helpers/gov_uk_helper/pagination.rb +290 -288
  25. data/lib/crown_marketplace_utils/helpers/gov_uk_helper/step_by_step_navigation.rb +187 -185
  26. data/lib/crown_marketplace_utils/helpers/gov_uk_helper/tag.rb +29 -27
  27. data/lib/crown_marketplace_utils/helpers/gov_uk_helper/warning_text.rb +39 -37
  28. data/lib/crown_marketplace_utils/helpers/gov_uk_helper.rb +31 -29
  29. data/lib/crown_marketplace_utils/version.rb +1 -1
  30. metadata +1 -1
@@ -2,337 +2,339 @@
2
2
 
3
3
  require 'action_view'
4
4
 
5
- module CrownMarketplaceUtils::Helpers
6
- module GovUkHelper
7
- # rubocop:disable Metrics/ModuleLength
8
-
9
- # = GOV.UK Pagination
10
- #
11
- # This helper is used for generating the pagination component from the
12
- # {https://design-system.service.gov.uk/components/pagination GDS - Components - Pagination}
13
-
14
- module Pagination
15
- include ActionView::Context
16
- include ActionView::Helpers::TagHelper
17
- include ActionView::Helpers::TextHelper
18
- include ActionView::Helpers::UrlHelper
19
-
20
- # Generates the HTML for the GOV.UK Pagination component
21
- #
22
- # @param (see _govuk_pagination)
23
- #
24
- # @option (see _govuk_pagination)
25
- #
26
- # @return [ActiveSupport::SafeBuffer] the HTML for the GOV.UK Pagination
27
- # which can then be rendered on the page
28
-
29
- def govuk_pagination(**govuk_pagination_options)
30
- _govuk_pagination(**govuk_pagination_options) do |block_is_level|
31
- capture do
32
- concat(govuk_pagination_previous(block_is_level, form: govuk_pagination_options[:form], **govuk_pagination_options[:previous])) if govuk_pagination_options[:previous]
33
- concat(govuk_pagination_items(govuk_pagination_options[:items], form: govuk_pagination_options[:form])) if govuk_pagination_options[:items]
34
- concat(govuk_pagination_next(block_is_level, form: govuk_pagination_options[:form], **govuk_pagination_options[:next])) if govuk_pagination_options[:next]
5
+ module CrownMarketplaceUtils
6
+ module Helpers
7
+ module GovUkHelper
8
+ # rubocop:disable Metrics/ModuleLength
9
+
10
+ # = GOV.UK Pagination
11
+ #
12
+ # This helper is used for generating the pagination component from the
13
+ # {https://design-system.service.gov.uk/components/pagination GDS - Components - Pagination}
14
+
15
+ module Pagination
16
+ include ActionView::Context
17
+ include ActionView::Helpers::TagHelper
18
+ include ActionView::Helpers::TextHelper
19
+ include ActionView::Helpers::UrlHelper
20
+
21
+ # Generates the HTML for the GOV.UK Pagination component
22
+ #
23
+ # @param (see _govuk_pagination)
24
+ #
25
+ # @option (see _govuk_pagination)
26
+ #
27
+ # @return [ActiveSupport::SafeBuffer] the HTML for the GOV.UK Pagination
28
+ # which can then be rendered on the page
29
+
30
+ def govuk_pagination(**govuk_pagination_options)
31
+ _govuk_pagination(**govuk_pagination_options) do |block_is_level|
32
+ capture do
33
+ concat(govuk_pagination_previous(block_is_level, form: govuk_pagination_options[:form], **govuk_pagination_options[:previous])) if govuk_pagination_options[:previous]
34
+ concat(govuk_pagination_items(govuk_pagination_options[:items], form: govuk_pagination_options[:form])) if govuk_pagination_options[:items]
35
+ concat(govuk_pagination_next(block_is_level, form: govuk_pagination_options[:form], **govuk_pagination_options[:next])) if govuk_pagination_options[:next]
36
+ end
35
37
  end
36
38
  end
37
- end
38
-
39
- private
40
-
41
- # Wrapper method used by {govuk_pagination}
42
- #
43
- # @param govuk_pagination_options [Hash] options that will be used in customising the HTML
44
- #
45
- # @option govuk_pagination_options [ActionView::Helpers::FormBuilder] :form (nil) optional form builder used to create pagination buttons
46
- # @option govuk_pagination_options [String] :classes additional CSS classes for the pagination HTML
47
- # @option govuk_pagination_options [Array] :items an array of items for the pagination (see: {govuk_pagination_items})
48
- # @option govuk_pagination_options [Hash] :previous the previous link (see: {govuk_pagination_previous})
49
- # @option govuk_pagination_options [Hash] :next the next link (see: {govuk_pagination_next})
50
- # @option govuk_pagination_options [Hash] :attributes ({role: 'navigation', aria: { label: 'results' }})
51
- # any additional attributes that will added as part of the HTML
52
- #
53
- # @yield the pagination HTML generated by {govuk_pagination}
54
- #
55
- # @yieldparam block_is_level [Boolean] flag to indicate if there are no items
56
- #
57
- # @return [ActiveSupport::SafeBuffer] the HTML for the Pagination
58
- # which is used in {govuk_pagination}
59
-
60
- def _govuk_pagination(**govuk_pagination_options)
61
- govuk_pagination_options[:attributes] ||= {}
62
- govuk_pagination_options[:attributes][:class] = "govuk-pagination #{govuk_pagination_options[:classes]}".rstrip
63
-
64
- block_is_level = govuk_pagination_options[:items].blank? && (govuk_pagination_options[:next].present? || govuk_pagination_options[:previous].present?)
65
-
66
- govuk_pagination_options[:attributes][:class] << ' govuk-pagination--block' if block_is_level
67
39
 
68
- govuk_pagination_options[:attributes].merge!({ role: 'navigation' })
69
- (govuk_pagination_options[:attributes][:aria] ||= {})[:label] ||= 'results'
70
-
71
- tag.nav(**govuk_pagination_options[:attributes]) do
72
- yield(block_is_level)
40
+ private
41
+
42
+ # Wrapper method used by {govuk_pagination}
43
+ #
44
+ # @param govuk_pagination_options [Hash] options that will be used in customising the HTML
45
+ #
46
+ # @option govuk_pagination_options [ActionView::Helpers::FormBuilder] :form (nil) optional form builder used to create pagination buttons
47
+ # @option govuk_pagination_options [String] :classes additional CSS classes for the pagination HTML
48
+ # @option govuk_pagination_options [Array] :items an array of items for the pagination (see: {govuk_pagination_items})
49
+ # @option govuk_pagination_options [Hash] :previous the previous link (see: {govuk_pagination_previous})
50
+ # @option govuk_pagination_options [Hash] :next the next link (see: {govuk_pagination_next})
51
+ # @option govuk_pagination_options [Hash] :attributes ({role: 'navigation', aria: { label: 'results' }})
52
+ # any additional attributes that will added as part of the HTML
53
+ #
54
+ # @yield the pagination HTML generated by {govuk_pagination}
55
+ #
56
+ # @yieldparam block_is_level [Boolean] flag to indicate if there are no items
57
+ #
58
+ # @return [ActiveSupport::SafeBuffer] the HTML for the Pagination
59
+ # which is used in {govuk_pagination}
60
+
61
+ def _govuk_pagination(**govuk_pagination_options)
62
+ govuk_pagination_options[:attributes] ||= {}
63
+ govuk_pagination_options[:attributes][:class] = "govuk-pagination #{govuk_pagination_options[:classes]}".rstrip
64
+
65
+ block_is_level = govuk_pagination_options[:items].blank? && (govuk_pagination_options[:next].present? || govuk_pagination_options[:previous].present?)
66
+
67
+ govuk_pagination_options[:attributes][:class] << ' govuk-pagination--block' if block_is_level
68
+
69
+ govuk_pagination_options[:attributes].merge!({ role: 'navigation' })
70
+ (govuk_pagination_options[:attributes][:aria] ||= {})[:label] ||= 'results'
71
+
72
+ tag.nav(**govuk_pagination_options[:attributes]) do
73
+ yield(block_is_level)
74
+ end
73
75
  end
74
- end
75
-
76
- # Generates the previous link for {govuk_pagination}
77
- #
78
- # @param (see govuk_pagination_previous_content)
79
- #
80
- # @option (see govuk_pagination_previous_content)
81
- #
82
- # @return [ActiveSupport::SafeBuffer] the HTML for the previous link which is used in {govuk_pagination}
83
-
84
- def govuk_pagination_previous(block_is_level, **govuk_pagination_previous_options)
85
- govuk_pagination_previous_options[:attributes] ||= {}
86
- govuk_pagination_previous_options[:attributes][:class] = "govuk-link govuk-pagination__link #{'pagination--button_as_link' if govuk_pagination_previous_options[:form]}".rstrip
87
- govuk_pagination_previous_options[:attributes][:rel] = 'prev'
88
-
89
- pagination_previous_content = govuk_pagination_previous_content(block_is_level, govuk_pagination_previous_options)
90
76
 
91
- tag.div(class: 'govuk-pagination__prev') do
92
- if govuk_pagination_previous_options[:form]
93
- govuk_pagination_previous_options[:form].button(pagination_previous_content, **govuk_pagination_previous_options[:attributes])
94
- else
95
- link_to(pagination_previous_content, govuk_pagination_previous_options[:href], **govuk_pagination_previous_options[:attributes])
77
+ # Generates the previous link for {govuk_pagination}
78
+ #
79
+ # @param (see govuk_pagination_previous_content)
80
+ #
81
+ # @option (see govuk_pagination_previous_content)
82
+ #
83
+ # @return [ActiveSupport::SafeBuffer] the HTML for the previous link which is used in {govuk_pagination}
84
+
85
+ def govuk_pagination_previous(block_is_level, **govuk_pagination_previous_options)
86
+ govuk_pagination_previous_options[:attributes] ||= {}
87
+ govuk_pagination_previous_options[:attributes][:class] = "govuk-link govuk-pagination__link #{'pagination--button_as_link' if govuk_pagination_previous_options[:form]}".rstrip
88
+ govuk_pagination_previous_options[:attributes][:rel] = 'prev'
89
+
90
+ pagination_previous_content = govuk_pagination_previous_content(block_is_level, govuk_pagination_previous_options)
91
+
92
+ tag.div(class: 'govuk-pagination__prev') do
93
+ if govuk_pagination_previous_options[:form]
94
+ govuk_pagination_previous_options[:form].button(pagination_previous_content, **govuk_pagination_previous_options[:attributes])
95
+ else
96
+ link_to(pagination_previous_content, govuk_pagination_previous_options[:href], **govuk_pagination_previous_options[:attributes])
97
+ end
96
98
  end
97
99
  end
98
- end
99
-
100
- # Used by {govuk_pagination_previous}
101
- # to generate the previous link content
102
- #
103
- # @param block_is_level [Boolean] when there are no items, this will be true and will add extra classes
104
- # to the link to make the next and previous pagination links level
105
- # @param govuk_pagination_previous_options [Hash] options that will be used in customising the HTML
106
- #
107
- # @option govuk_pagination_previous_options [ActionView::Helpers::FormBuilder] :form (nil) optional form builder used to create previous button
108
- # @option govuk_pagination_previous_options [String] :href the URL for the link
109
- # @option govuk_pagination_previous_options [String] :text ('Previous') the text for the link
110
- # @option govuk_pagination_previous_options [String] :lable_text additional text for the link when the pagination block is level
111
- # @option govuk_pagination_previous_options [Hash] :attributes ({}) any additional attributes that will added as part of the HTML
112
- #
113
- # @return [ActiveSupport::SafeBuffer] the HTML for the previous link/button
114
100
 
115
- def govuk_pagination_previous_content(block_is_level, govuk_pagination_previous_options)
116
- capture do
117
- concat(govuk_pagination_icon(:prev))
118
- concat(tag.span(govuk_pagination_previous_options[:text] || 'Previous', class: pagination_next_and_previous_classes(block_is_level, govuk_pagination_previous_options)))
119
- concat(govuk_pagination_icon_label_text(block_is_level, govuk_pagination_previous_options[:lable_text]))
101
+ # Used by {govuk_pagination_previous}
102
+ # to generate the previous link content
103
+ #
104
+ # @param block_is_level [Boolean] when there are no items, this will be true and will add extra classes
105
+ # to the link to make the next and previous pagination links level
106
+ # @param govuk_pagination_previous_options [Hash] options that will be used in customising the HTML
107
+ #
108
+ # @option govuk_pagination_previous_options [ActionView::Helpers::FormBuilder] :form (nil) optional form builder used to create previous button
109
+ # @option govuk_pagination_previous_options [String] :href the URL for the link
110
+ # @option govuk_pagination_previous_options [String] :text ('Previous') the text for the link
111
+ # @option govuk_pagination_previous_options [String] :lable_text additional text for the link when the pagination block is level
112
+ # @option govuk_pagination_previous_options [Hash] :attributes ({}) any additional attributes that will added as part of the HTML
113
+ #
114
+ # @return [ActiveSupport::SafeBuffer] the HTML for the previous link/button
115
+
116
+ def govuk_pagination_previous_content(block_is_level, govuk_pagination_previous_options)
117
+ capture do
118
+ concat(govuk_pagination_icon(:prev))
119
+ concat(tag.span(govuk_pagination_previous_options[:text] || 'Previous', class: pagination_next_and_previous_classes(block_is_level, govuk_pagination_previous_options)))
120
+ concat(govuk_pagination_icon_label_text(block_is_level, govuk_pagination_previous_options[:lable_text]))
121
+ end
120
122
  end
121
- end
122
-
123
- # Generates the next link for {govuk_pagination}
124
- #
125
- # @param (see govuk_pagination_next_content)
126
- #
127
- # @option (see govuk_pagination_next_content)
128
- #
129
- # @return [ActiveSupport::SafeBuffer] the HTML for the next link which is used in {govuk_pagination}
130
-
131
- def govuk_pagination_next(block_is_level, **govuk_pagination_next_options)
132
- govuk_pagination_next_options[:attributes] ||= {}
133
- govuk_pagination_next_options[:attributes][:class] = "govuk-link govuk-pagination__link #{'pagination--button_as_link' if govuk_pagination_next_options[:form]}".rstrip
134
- govuk_pagination_next_options[:attributes][:rel] = 'next'
135
123
 
136
- pagination_next_content = govuk_pagination_next_content(block_is_level, govuk_pagination_next_options)
137
-
138
- tag.div(class: 'govuk-pagination__next') do
139
- if govuk_pagination_next_options[:form]
140
- govuk_pagination_next_options[:form].button(pagination_next_content, **govuk_pagination_next_options[:attributes])
141
- else
142
- link_to(pagination_next_content, govuk_pagination_next_options[:href], **govuk_pagination_next_options[:attributes])
124
+ # Generates the next link for {govuk_pagination}
125
+ #
126
+ # @param (see govuk_pagination_next_content)
127
+ #
128
+ # @option (see govuk_pagination_next_content)
129
+ #
130
+ # @return [ActiveSupport::SafeBuffer] the HTML for the next link which is used in {govuk_pagination}
131
+
132
+ def govuk_pagination_next(block_is_level, **govuk_pagination_next_options)
133
+ govuk_pagination_next_options[:attributes] ||= {}
134
+ govuk_pagination_next_options[:attributes][:class] = "govuk-link govuk-pagination__link #{'pagination--button_as_link' if govuk_pagination_next_options[:form]}".rstrip
135
+ govuk_pagination_next_options[:attributes][:rel] = 'next'
136
+
137
+ pagination_next_content = govuk_pagination_next_content(block_is_level, govuk_pagination_next_options)
138
+
139
+ tag.div(class: 'govuk-pagination__next') do
140
+ if govuk_pagination_next_options[:form]
141
+ govuk_pagination_next_options[:form].button(pagination_next_content, **govuk_pagination_next_options[:attributes])
142
+ else
143
+ link_to(pagination_next_content, govuk_pagination_next_options[:href], **govuk_pagination_next_options[:attributes])
144
+ end
143
145
  end
144
146
  end
145
- end
146
147
 
147
- # Used by {govuk_pagination_next} to generate the next link content
148
- #
149
- # @param block_is_level [Boolean] when there are no items, this will be true and will add extra classe
150
- # to the link to make the next and previous pagination links level
151
- # @param govuk_pagination_next_options [Hash] options that will be used in customising the HTML
152
- #
153
- # @option govuk_pagination_next_options [ActionView::Helpers::FormBuilder] :form (nil) optional form builder used to create next button
154
- # @option govuk_pagination_next_options [String] :href the URL for the link
155
- # @option govuk_pagination_next_options [String] :text ('Next') the text for the link
156
- # @option govuk_pagination_next_options [String] :lable_text additional text for the link when the pagination block is level
157
- # @option govuk_pagination_next_options [Hash] :attributes ({}) any additional attributes that will added as part of the HTML
158
- #
159
- # @return [ActiveSupport::SafeBuffer] the HTML for the next link/button
160
-
161
- def govuk_pagination_next_content(block_is_level, **govuk_pagination_next_options)
162
- capture do
163
- concat(govuk_pagination_icon(:next)) if block_is_level
164
- concat(tag.span(govuk_pagination_next_options[:text] || 'Next', class: pagination_next_and_previous_classes(block_is_level, govuk_pagination_next_options)))
165
- concat(govuk_pagination_icon_label_text(block_is_level, govuk_pagination_next_options[:lable_text]))
166
- concat(govuk_pagination_icon(:next)) unless block_is_level
148
+ # Used by {govuk_pagination_next} to generate the next link content
149
+ #
150
+ # @param block_is_level [Boolean] when there are no items, this will be true and will add extra classe
151
+ # to the link to make the next and previous pagination links level
152
+ # @param govuk_pagination_next_options [Hash] options that will be used in customising the HTML
153
+ #
154
+ # @option govuk_pagination_next_options [ActionView::Helpers::FormBuilder] :form (nil) optional form builder used to create next button
155
+ # @option govuk_pagination_next_options [String] :href the URL for the link
156
+ # @option govuk_pagination_next_options [String] :text ('Next') the text for the link
157
+ # @option govuk_pagination_next_options [String] :lable_text additional text for the link when the pagination block is level
158
+ # @option govuk_pagination_next_options [Hash] :attributes ({}) any additional attributes that will added as part of the HTML
159
+ #
160
+ # @return [ActiveSupport::SafeBuffer] the HTML for the next link/button
161
+
162
+ def govuk_pagination_next_content(block_is_level, **govuk_pagination_next_options)
163
+ capture do
164
+ concat(govuk_pagination_icon(:next)) if block_is_level
165
+ concat(tag.span(govuk_pagination_next_options[:text] || 'Next', class: pagination_next_and_previous_classes(block_is_level, govuk_pagination_next_options)))
166
+ concat(govuk_pagination_icon_label_text(block_is_level, govuk_pagination_next_options[:lable_text]))
167
+ concat(govuk_pagination_icon(:next)) unless block_is_level
168
+ end
167
169
  end
168
- end
169
170
 
170
- # Returns the classes for the previous and next link/button label
171
- #
172
- # @param (see govuk_pagination_next_content)
171
+ # Returns the classes for the previous and next link/button label
172
+ #
173
+ # @param (see govuk_pagination_next_content)
173
174
 
174
- def pagination_next_and_previous_classes(block_is_level, govuk_pagination_options)
175
- "govuk-pagination__link-title #{'govuk-pagination__link-title--decorated' if block_is_level && !govuk_pagination_options[:lable_text]}".rstrip
176
- end
177
-
178
- # Generates the item links for {govuk_pagination}
179
- #
180
- # @param (see _govuk_pagination_items)
181
- # @param form [ActionView::Helpers::FormBuilder] optional form builder used to create the item buttons
182
- #
183
- # @return [ActiveSupport::SafeBuffer] the HTML for the lits of items which is used in {govuk_pagination}
175
+ def pagination_next_and_previous_classes(block_is_level, govuk_pagination_options)
176
+ "govuk-pagination__link-title #{'govuk-pagination__link-title--decorated' if block_is_level && !govuk_pagination_options[:lable_text]}".rstrip
177
+ end
184
178
 
185
- def govuk_pagination_items(govuk_pagination_items, form:)
186
- if form
187
- _govuk_pagination_items(govuk_pagination_items) do |govuk_pagination_item|
188
- govuk_pagination_item_number_form(form, govuk_pagination_item)
189
- end
190
- else
191
- _govuk_pagination_items(govuk_pagination_items) do |govuk_pagination_item|
192
- govuk_pagination_item_number_tag(govuk_pagination_item)
179
+ # Generates the item links for {govuk_pagination}
180
+ #
181
+ # @param (see _govuk_pagination_items)
182
+ # @param form [ActionView::Helpers::FormBuilder] optional form builder used to create the item buttons
183
+ #
184
+ # @return [ActiveSupport::SafeBuffer] the HTML for the lits of items which is used in {govuk_pagination}
185
+
186
+ def govuk_pagination_items(govuk_pagination_items, form:)
187
+ if form
188
+ _govuk_pagination_items(govuk_pagination_items) do |govuk_pagination_item|
189
+ govuk_pagination_item_number_form(form, govuk_pagination_item)
190
+ end
191
+ else
192
+ _govuk_pagination_items(govuk_pagination_items) do |govuk_pagination_item|
193
+ govuk_pagination_item_number_tag(govuk_pagination_item)
194
+ end
193
195
  end
194
196
  end
195
- end
196
-
197
- # Wrapper method used by {govuk_pagination_items}
198
- # to generate the pagination items HTML
199
- #
200
- # @param govuk_pagination_items [Array(Hash)] an array of item hashes for the pagination.
201
- # There are two types of item:
202
- # - {govuk_pagination_item_ellipsis ellipsis item}
203
- # - {govuk_pagination_item_number_tag number item}
204
- #
205
- # @yield the pagination number item HTML generated by {govuk_pagination_items}
206
- #
207
- # @yieldparam govuk_pagination_item [Hash] the current pagination item in the loop
208
- #
209
- # @return [ActiveSupport::SafeBuffer] the HTML for the lits of items which is
210
- # used in {govuk_pagination_items}
211
197
 
212
- def _govuk_pagination_items(govuk_pagination_items)
213
- tag.ul(class: 'govuk-pagination__list') do
214
- capture do
215
- govuk_pagination_items.each do |govuk_pagination_item|
216
- case govuk_pagination_item[:type]
217
- when :ellipsis
218
- concat(govuk_pagination_item_ellipsis)
219
- when :number
220
- concat(yield(govuk_pagination_item))
198
+ # Wrapper method used by {govuk_pagination_items}
199
+ # to generate the pagination items HTML
200
+ #
201
+ # @param govuk_pagination_items [Array(Hash)] an array of item hashes for the pagination.
202
+ # There are two types of item:
203
+ # - {govuk_pagination_item_ellipsis ellipsis item}
204
+ # - {govuk_pagination_item_number_tag number item}
205
+ #
206
+ # @yield the pagination number item HTML generated by {govuk_pagination_items}
207
+ #
208
+ # @yieldparam govuk_pagination_item [Hash] the current pagination item in the loop
209
+ #
210
+ # @return [ActiveSupport::SafeBuffer] the HTML for the lits of items which is
211
+ # used in {govuk_pagination_items}
212
+
213
+ def _govuk_pagination_items(govuk_pagination_items)
214
+ tag.ul(class: 'govuk-pagination__list') do
215
+ capture do
216
+ govuk_pagination_items.each do |govuk_pagination_item|
217
+ case govuk_pagination_item[:type]
218
+ when :ellipsis
219
+ concat(govuk_pagination_item_ellipsis)
220
+ when :number
221
+ concat(yield(govuk_pagination_item))
222
+ end
221
223
  end
222
224
  end
223
225
  end
224
226
  end
225
- end
226
-
227
- # Generates the icon for:
228
- # - {govuk_pagination_previous}
229
- # - {govuk_pagination_next}
230
- #
231
- # @param type [Symbol] the type of the pagination icon (+:prev+ or +:next+)
232
- #
233
- # @return [ActiveSupport::SafeBuffer]
234
227
 
235
- def govuk_pagination_icon(type)
236
- tag.svg(class: "govuk-pagination__icon govuk-pagination__icon--#{type}", xmlns: 'http://www.w3.org/2000/svg', height: '13', width: '15', aria: { hidden: 'true' }, focusable: 'false', viewBox: '0 0 15 13') do
237
- tag.path(d: PAGINATION_ICON_PATHS[type])
228
+ # Generates the icon for:
229
+ # - {govuk_pagination_previous}
230
+ # - {govuk_pagination_next}
231
+ #
232
+ # @param type [Symbol] the type of the pagination icon (+:prev+ or +:next+)
233
+ #
234
+ # @return [ActiveSupport::SafeBuffer]
235
+
236
+ def govuk_pagination_icon(type)
237
+ tag.svg(class: "govuk-pagination__icon govuk-pagination__icon--#{type}", xmlns: 'http://www.w3.org/2000/svg', height: '13', width: '15', aria: { hidden: 'true' }, focusable: 'false', viewBox: '0 0 15 13') do
238
+ tag.path(d: PAGINATION_ICON_PATHS[type])
239
+ end
238
240
  end
239
- end
240
241
 
241
- # Generates the label text for:
242
- # - {govuk_pagination_previous}
243
- # - {govuk_pagination_next}
244
- #
245
- # @param block_is_level [Boolean] when there are no items, this will be true
246
- # @param label_text [String] the additional text for the link
247
- #
248
- # @return [ActiveSupport::SafeBuffer]
242
+ # Generates the label text for:
243
+ # - {govuk_pagination_previous}
244
+ # - {govuk_pagination_next}
245
+ #
246
+ # @param block_is_level [Boolean] when there are no items, this will be true
247
+ # @param label_text [String] the additional text for the link
248
+ #
249
+ # @return [ActiveSupport::SafeBuffer]
249
250
 
250
- def govuk_pagination_icon_label_text(block_is_level, label_text)
251
- return unless block_is_level && label_text
251
+ def govuk_pagination_icon_label_text(block_is_level, label_text)
252
+ return unless block_is_level && label_text
252
253
 
253
- capture do
254
- concat(tag.span(':', class: 'govuk-visually-hidden'))
255
- concat(tag.span(label_text, class: 'govuk-pagination__link-label'))
254
+ capture do
255
+ concat(tag.span(':', class: 'govuk-visually-hidden'))
256
+ concat(tag.span(label_text, class: 'govuk-pagination__link-label'))
257
+ end
256
258
  end
257
- end
258
-
259
- # Generates the ellipsis HTML for {govuk_pagination_items}
260
- #
261
- # @return [ActiveSupport::SafeBuffer] the HTML for an ellipsis item which is used in {govuk_pagination_items}
262
259
 
263
- def govuk_pagination_item_ellipsis
264
- tag.li('⋯', class: 'govuk-pagination__item govuk-pagination__item--ellipses')
265
- end
260
+ # Generates the ellipsis HTML for {govuk_pagination_items}
261
+ #
262
+ # @return [ActiveSupport::SafeBuffer] the HTML for an ellipsis item which is used in {govuk_pagination_items}
266
263
 
267
- # Generates the number item HTML for {govuk_pagination_items}
268
- #
269
- # @param (see _govuk_pagination_item_number)
270
- #
271
- # @option (see _govuk_pagination_item_number)
272
- #
273
- # @return [ActiveSupport::SafeBuffer] the HTML for an number item which is used in {govuk_pagination_items}
264
+ def govuk_pagination_item_ellipsis
265
+ tag.li('⋯', class: 'govuk-pagination__item govuk-pagination__item--ellipses')
266
+ end
274
267
 
275
- def govuk_pagination_item_number_tag(govuk_pagination_item)
276
- _govuk_pagination_item_number(govuk_pagination_item) do
277
- link_to(govuk_pagination_item[:number], govuk_pagination_item[:href], **govuk_pagination_item[:attributes])
268
+ # Generates the number item HTML for {govuk_pagination_items}
269
+ #
270
+ # @param (see _govuk_pagination_item_number)
271
+ #
272
+ # @option (see _govuk_pagination_item_number)
273
+ #
274
+ # @return [ActiveSupport::SafeBuffer] the HTML for an number item which is used in {govuk_pagination_items}
275
+
276
+ def govuk_pagination_item_number_tag(govuk_pagination_item)
277
+ _govuk_pagination_item_number(govuk_pagination_item) do
278
+ link_to(govuk_pagination_item[:number], govuk_pagination_item[:href], **govuk_pagination_item[:attributes])
279
+ end
278
280
  end
279
- end
280
281
 
281
- # Generates the number item HTML for {govuk_pagination_items} when there is a ActionView::Helpers::FormBuilder
282
- #
283
- # @param form [ActionView::Helpers::FormBuilder] the form builder used to create the item button
284
- # @param (see _govuk_pagination_item_number)
285
- #
286
- # @option (see _govuk_pagination_item_number)
287
- #
288
- # @return (see govuk_pagination_item_number_tag)
282
+ # Generates the number item HTML for {govuk_pagination_items} when there is a ActionView::Helpers::FormBuilder
283
+ #
284
+ # @param form [ActionView::Helpers::FormBuilder] the form builder used to create the item button
285
+ # @param (see _govuk_pagination_item_number)
286
+ #
287
+ # @option (see _govuk_pagination_item_number)
288
+ #
289
+ # @return (see govuk_pagination_item_number_tag)
289
290
 
290
- def govuk_pagination_item_number_form(form, govuk_pagination_item)
291
- govuk_pagination_item[:classes] = 'pagination-number--button_as_link'
291
+ def govuk_pagination_item_number_form(form, govuk_pagination_item)
292
+ govuk_pagination_item[:classes] = 'pagination-number--button_as_link'
292
293
 
293
- _govuk_pagination_item_number(govuk_pagination_item) do
294
- form.button(govuk_pagination_item[:number], **govuk_pagination_item[:attributes])
294
+ _govuk_pagination_item_number(govuk_pagination_item) do
295
+ form.button(govuk_pagination_item[:number], **govuk_pagination_item[:attributes])
296
+ end
295
297
  end
296
- end
297
-
298
- # Wrapper method used by {govuk_pagination_item_number_tag} and {govuk_pagination_item_number_form}
299
- # to generate the pagination number item HTML
300
- #
301
- # @param govuk_pagination_item [Hash] options that will be used in customising the HTML
302
- #
303
- # @option govuk_pagination_item [String] :href the URL for the link
304
- # @option govuk_pagination_item [String] :number the number for the link
305
- # @option govuk_pagination_item [String] :current is this item the current page
306
- # @option govuk_pagination_item [Hash] :attributes ({aria: { label: 'Page <NUMBER>' } })
307
- # any additional attributes that will added as part of the HTML
308
- #
309
- # @yield the pagination number item link (when {govuk_pagination_item_number_tag}) or button (when {govuk_pagination_item_number_form})
310
- #
311
- # @return [ActiveSupport::SafeBuffer] the HTML for an number item which is used
312
- # in {govuk_pagination_item_number_tag} or {govuk_pagination_item_number_form}
313
-
314
- def _govuk_pagination_item_number(govuk_pagination_item, &block)
315
- (govuk_pagination_item[:attributes] ||= {})[:aria] ||= {}
316
- govuk_pagination_item[:attributes][:class] = "govuk-link govuk-pagination__link #{govuk_pagination_item[:classes]}".rstrip
317
- govuk_pagination_item[:attributes][:aria][:label] ||= "Page #{govuk_pagination_item[:number]}"
318
298
 
319
- govuk_pagination_list_classes = +'govuk-pagination__item'
299
+ # Wrapper method used by {govuk_pagination_item_number_tag} and {govuk_pagination_item_number_form}
300
+ # to generate the pagination number item HTML
301
+ #
302
+ # @param govuk_pagination_item [Hash] options that will be used in customising the HTML
303
+ #
304
+ # @option govuk_pagination_item [String] :href the URL for the link
305
+ # @option govuk_pagination_item [String] :number the number for the link
306
+ # @option govuk_pagination_item [String] :current is this item the current page
307
+ # @option govuk_pagination_item [Hash] :attributes ({aria: { label: 'Page <NUMBER>' } })
308
+ # any additional attributes that will added as part of the HTML
309
+ #
310
+ # @yield the pagination number item link (when {govuk_pagination_item_number_tag}) or button (when {govuk_pagination_item_number_form})
311
+ #
312
+ # @return [ActiveSupport::SafeBuffer] the HTML for an number item which is used
313
+ # in {govuk_pagination_item_number_tag} or {govuk_pagination_item_number_form}
314
+
315
+ def _govuk_pagination_item_number(govuk_pagination_item, &block)
316
+ (govuk_pagination_item[:attributes] ||= {})[:aria] ||= {}
317
+ govuk_pagination_item[:attributes][:class] = "govuk-link govuk-pagination__link #{govuk_pagination_item[:classes]}".rstrip
318
+ govuk_pagination_item[:attributes][:aria][:label] ||= "Page #{govuk_pagination_item[:number]}"
319
+
320
+ govuk_pagination_list_classes = +'govuk-pagination__item'
321
+
322
+ if govuk_pagination_item[:current]
323
+ govuk_pagination_list_classes << ' govuk-pagination__item--current'
324
+ govuk_pagination_item[:attributes][:aria][:current] = 'page'
325
+ end
320
326
 
321
- if govuk_pagination_item[:current]
322
- govuk_pagination_list_classes << ' govuk-pagination__item--current'
323
- govuk_pagination_item[:attributes][:aria][:current] = 'page'
327
+ tag.li(class: govuk_pagination_list_classes, &block)
324
328
  end
325
329
 
326
- tag.li(class: govuk_pagination_list_classes, &block)
327
- end
328
-
329
- # The paths for the pagination next and previous icons
330
+ # The paths for the pagination next and previous icons
330
331
 
331
- PAGINATION_ICON_PATHS = {
332
- prev: 'm6.5938-0.0078125-6.7266 6.7266 6.7441 6.4062 1.377-1.449-4.1856-3.9768h12.896v-2h-12.984l4.2931-4.293-1.414-1.414z',
333
- next: 'm8.107-0.0078125-1.4136 1.414 4.2926 4.293h-12.986v2h12.896l-4.1855 3.9766 1.377 1.4492 6.7441-6.4062-6.7246-6.7266z'
334
- }.freeze
332
+ PAGINATION_ICON_PATHS = {
333
+ prev: 'm6.5938-0.0078125-6.7266 6.7266 6.7441 6.4062 1.377-1.449-4.1856-3.9768h12.896v-2h-12.984l4.2931-4.293-1.414-1.414z',
334
+ next: 'm8.107-0.0078125-1.4136 1.414 4.2926 4.293h-12.986v2h12.896l-4.1855 3.9766 1.377 1.4492 6.7441-6.4062-6.7246-6.7266z'
335
+ }.freeze
336
+ end
337
+ # rubocop:enable Metrics/ModuleLength
335
338
  end
336
- # rubocop:enable Metrics/ModuleLength
337
339
  end
338
340
  end