crown_marketplace_utils 0.1.0.beta.6 → 0.1.0.beta.8

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 (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 +53 -46
  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 +2 -2
@@ -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