ccs-frontend_helpers 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +5 -3
- data/CHANGELOG.md +30 -0
- data/Gemfile +6 -5
- data/Gemfile.lock +116 -112
- data/README.md +11 -0
- data/lib/ccs/components/govuk/accordion/section/content.rb +1 -1
- data/lib/ccs/components/govuk/accordion.rb +11 -0
- data/lib/ccs/components/govuk/button.rb +4 -1
- data/lib/ccs/components/govuk/cookie_banner/action.rb +1 -0
- data/lib/ccs/components/govuk/cookie_banner/message.rb +1 -1
- data/lib/ccs/components/govuk/details.rb +1 -1
- data/lib/ccs/components/govuk/error_message.rb +5 -2
- data/lib/ccs/components/govuk/exit_this_page.rb +79 -0
- data/lib/ccs/components/govuk/field/input/character_count.rb +60 -17
- data/lib/ccs/components/govuk/field/input/select.rb +2 -2
- data/lib/ccs/components/govuk/field/inputs/checkboxes.rb +7 -6
- data/lib/ccs/components/govuk/field/inputs/date_input.rb +3 -3
- data/lib/ccs/components/govuk/field/inputs/item/checkbox.rb +1 -13
- data/lib/ccs/components/govuk/field/inputs/item/radio.rb +1 -13
- data/lib/ccs/components/govuk/field/inputs/item.rb +24 -10
- data/lib/ccs/components/govuk/field/inputs/radios.rb +5 -6
- data/lib/ccs/components/govuk/field/inputs.rb +24 -6
- data/lib/ccs/components/govuk/fieldset.rb +1 -1
- data/lib/ccs/components/govuk/footer/meta.rb +1 -1
- data/lib/ccs/components/govuk/footer.rb +1 -1
- data/lib/ccs/components/govuk/header/navigation.rb +4 -2
- data/lib/ccs/components/govuk/header.rb +26 -7
- data/lib/ccs/components/govuk/pagination/increment/next.rb +6 -3
- data/lib/ccs/components/govuk/pagination/increment/previous.rb +6 -3
- data/lib/ccs/components/govuk/pagination/increment.rb +11 -3
- data/lib/ccs/components/govuk/pagination/item.rb +1 -1
- data/lib/ccs/components/govuk/pagination.rb +2 -2
- data/lib/ccs/components/govuk/summary_list/action/link.rb +18 -3
- data/lib/ccs/components/govuk/summary_list/card/actions.rb +3 -2
- data/lib/ccs/components/govuk/summary_list/card.rb +1 -1
- data/lib/ccs/components/govuk/summary_list/row/actions.rb +3 -2
- data/lib/ccs/components/govuk/summary_list/row.rb +7 -2
- data/lib/ccs/components/govuk/summary_list.rb +1 -1
- data/lib/ccs/components/govuk/tabs.rb +5 -3
- data/lib/ccs/components/govuk/task_list/item/status.rb +64 -0
- data/lib/ccs/components/govuk/task_list/item/title.rb +54 -0
- data/lib/ccs/components/govuk/task_list/item.rb +75 -0
- data/lib/ccs/components/govuk/task_list.rb +52 -0
- data/lib/ccs/components/govuk/warning_text.rb +1 -1
- data/lib/ccs/frontend_helpers/govuk_frontend/character_count.rb +1 -1
- data/lib/ccs/frontend_helpers/govuk_frontend/error_message.rb +1 -1
- data/lib/ccs/frontend_helpers/govuk_frontend/exit_this_page.rb +28 -0
- data/lib/ccs/frontend_helpers/govuk_frontend/task_list.rb +28 -0
- data/lib/ccs/frontend_helpers/govuk_frontend.rb +4 -0
- data/lib/ccs/frontend_helpers/version.rb +1 -1
- data/package.json +10 -0
- data/yarn.lock +8 -0
- metadata +11 -2
@@ -15,8 +15,8 @@ module CCS
|
|
15
15
|
#
|
16
16
|
# @!attribute [r] textarea
|
17
17
|
# @return [Textarea] The initialised textarea
|
18
|
-
# @!attribute [r]
|
19
|
-
# @return [Hint] The initialised character count
|
18
|
+
# @!attribute [r] textarea_description
|
19
|
+
# @return [Hint] The initialised character count textarea description
|
20
20
|
# @!attribute [r] character_count_html_options
|
21
21
|
# @return [Hash] HTML options for the character count
|
22
22
|
|
@@ -26,7 +26,7 @@ module CCS
|
|
26
26
|
|
27
27
|
private
|
28
28
|
|
29
|
-
attr_reader :textarea, :
|
29
|
+
attr_reader :textarea, :textarea_description, :character_count_html_options
|
30
30
|
|
31
31
|
public
|
32
32
|
|
@@ -38,12 +38,12 @@ module CCS
|
|
38
38
|
#
|
39
39
|
# @option (see initialise_character_count_html_options)
|
40
40
|
|
41
|
-
def initialize(attribute:,
|
41
|
+
def initialize(attribute:, context:, character_count_options: {}, **options)
|
42
42
|
character_count_attribute = options[:form] ? "#{options[:form].object_name}_#{attribute}" : attribute
|
43
43
|
|
44
44
|
initialise_textarea(attribute, character_count_attribute, context, options)
|
45
45
|
initialise_character_count_html_options(character_count_options)
|
46
|
-
|
46
|
+
initialise_textarea_description(character_count_attribute, context, character_count_options)
|
47
47
|
end
|
48
48
|
|
49
49
|
# Generates the HTML for the GOV.UK Character count component
|
@@ -53,7 +53,7 @@ module CCS
|
|
53
53
|
def render
|
54
54
|
tag.div(**character_count_html_options) do
|
55
55
|
concat(textarea.render)
|
56
|
-
concat(
|
56
|
+
concat(textarea_description.render)
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
@@ -70,7 +70,7 @@ module CCS
|
|
70
70
|
|
71
71
|
def initialise_textarea(attribute, character_count_attribute, context, options)
|
72
72
|
((options[:attributes] ||= {})[:aria] ||= {})[:describedby] = [options.dig(:attributes, :aria, :describedby), "#{character_count_attribute}-info"].compact.join(' ')
|
73
|
-
options[:classes] = "#{options[:classes]}
|
73
|
+
options[:classes] = "govuk-js-character-count #{options[:classes]}".rstrip
|
74
74
|
|
75
75
|
@textarea = Textarea.new(attribute: attribute, context: context, **options)
|
76
76
|
end
|
@@ -87,10 +87,16 @@ module CCS
|
|
87
87
|
# If +maxwords+ is provided, the +maxlength+ option will be ignored.
|
88
88
|
# @option character_count_options [String] :threshold the percentage value of the limit at which point the count message is displayed.
|
89
89
|
# If this attribute is set, the count message will be hidden by default.
|
90
|
-
# @option character_count_options [Hash] :
|
90
|
+
# @option character_count_options [Hash] :textarea_description ({}) additional parameters that will be used to create the hint containing the character count text:
|
91
91
|
# - +:count_message+ replaced the default text for the count message.
|
92
92
|
# If you want the count number to appear, put %<count>s in the string and it will be replaced with the number
|
93
|
-
# - +classes+ additional CSS classes for the
|
93
|
+
# - +classes+ additional CSS classes for the textarea description HTML
|
94
|
+
# @option character_count_options [Hash] :characters_under_limit Message displayed when the number of characters is under the configured maximum, maxlength
|
95
|
+
# @option character_count_options [String] :characters_at_limit_text Message displayed when the number of characters reaches the configured maximum, maxlength
|
96
|
+
# @option character_count_options [Hash] :characters_over_limit Message displayed when the number of characters is over the configured maximum, maxlength
|
97
|
+
# @option character_count_options [Hash] :words_under_limit Message displayed when the number of words is under the configured maximum, maxwords
|
98
|
+
# @option character_count_options [String] :words_at_limit_text Message displayed when the number of words reaches the configured maximum, maxwords
|
99
|
+
# @option character_count_options [Hash] :words_over_limit Message displayed when the number of words is over the configured maximum, maxwords
|
94
100
|
|
95
101
|
def initialise_character_count_html_options(character_count_options)
|
96
102
|
character_count_html_options = { class: 'govuk-character-count', data: { module: 'govuk-character-count' } }
|
@@ -99,10 +105,14 @@ module CCS
|
|
99
105
|
character_count_html_options[:data][data_attribute] = character_count_options[data_attribute].to_s if character_count_options[data_attribute]
|
100
106
|
end
|
101
107
|
|
108
|
+
get_chacrter_count_translations(character_count_options).each do |data_attribute, value|
|
109
|
+
character_count_html_options[:data][data_attribute] = value
|
110
|
+
end
|
111
|
+
|
102
112
|
@character_count_html_options = character_count_html_options
|
103
113
|
end
|
104
114
|
|
105
|
-
# Initialises the charcter count
|
115
|
+
# Initialises the charcter count textarea description
|
106
116
|
#
|
107
117
|
# @param character_count_attribute [String] the name of the field as it will appear in the textarea
|
108
118
|
# @param context [ActionView::Base] the view context
|
@@ -110,17 +120,50 @@ module CCS
|
|
110
120
|
#
|
111
121
|
# @option (see initialise_character_count_html_options)
|
112
122
|
|
113
|
-
def
|
114
|
-
|
123
|
+
def initialise_textarea_description(character_count_attribute, context, character_count_options)
|
124
|
+
textarea_description = character_count_options[:textarea_description] || {}
|
115
125
|
|
116
|
-
|
117
|
-
|
126
|
+
textarea_description_length = character_count_options[:maxwords] || character_count_options[:maxlength]
|
127
|
+
textarea_description_default = "You can enter up to %<count>s #{character_count_options[:maxwords] ? 'words' : 'characters'}"
|
118
128
|
|
119
|
-
text = format(
|
120
|
-
classes = "#{
|
129
|
+
text = textarea_description_length ? format(textarea_description[:count_message] || textarea_description_default, count: textarea_description_length) : ''
|
130
|
+
classes = "govuk-character-count__message #{textarea_description[:classes]}".rstrip
|
121
131
|
|
122
|
-
@
|
132
|
+
@textarea_description = Hint.new(text: text, classes: classes, attributes: { id: "#{character_count_attribute}-info" }, context: context)
|
123
133
|
end
|
134
|
+
|
135
|
+
# rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
136
|
+
|
137
|
+
# Returns the translation options for character count
|
138
|
+
#
|
139
|
+
# @param (see initialise_character_count_html_options)
|
140
|
+
#
|
141
|
+
# @option (see initialise_character_count_html_options)
|
142
|
+
#
|
143
|
+
# @return [Hash]
|
144
|
+
|
145
|
+
def get_chacrter_count_translations(character_count_options)
|
146
|
+
character_count_data_options = {}
|
147
|
+
|
148
|
+
%i[characters_at_limit words_at_limit].each do |data_attribute|
|
149
|
+
data_attribute_name = :"#{data_attribute}_text"
|
150
|
+
character_count_data_options[:"i18n.#{data_attribute.to_s.gsub('_', '-')}"] = character_count_options[data_attribute_name] if character_count_options[data_attribute_name]
|
151
|
+
end
|
152
|
+
|
153
|
+
%i[characters_under_limit characters_over_limit words_under_limit words_over_limit].each do |data_attribute|
|
154
|
+
next unless character_count_options[data_attribute]
|
155
|
+
|
156
|
+
%i[other one].each do |plural_rule|
|
157
|
+
character_count_data_options[:"i18n.#{data_attribute.to_s.gsub('_', '-')}.#{plural_rule}"] = character_count_options[data_attribute][plural_rule] if character_count_options[data_attribute][plural_rule]
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
character_count_data_options[:'i18n.textarea-description.other'] = character_count_options[:textarea_description][:count_message] if character_count_options.dig(:textarea_description, :count_message) && !(character_count_options[:maxwords] || character_count_options[:maxlength])
|
162
|
+
|
163
|
+
character_count_data_options
|
164
|
+
end
|
165
|
+
|
166
|
+
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
124
167
|
end
|
125
168
|
end
|
126
169
|
end
|
@@ -38,8 +38,8 @@ module CCS
|
|
38
38
|
@items = items.map do |item|
|
39
39
|
[
|
40
40
|
item[:text] || item[:value],
|
41
|
-
item[:value],
|
42
|
-
|
41
|
+
item[:value].nil? ? item[:text] : item[:value],
|
42
|
+
item[:attributes] || {}
|
43
43
|
]
|
44
44
|
end
|
45
45
|
@selected = @options[:model] ? @options[:model].send(attribute) : selected
|
@@ -23,7 +23,7 @@ module CCS
|
|
23
23
|
|
24
24
|
public
|
25
25
|
|
26
|
-
# rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
26
|
+
# rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/AbcSize
|
27
27
|
|
28
28
|
# @param (see CCS::Components::GovUK::Field::Inputs#initialize)
|
29
29
|
# @param checkbox_items [Array<Hash>] an array of options for the checkboxes.
|
@@ -34,17 +34,18 @@ module CCS
|
|
34
34
|
def initialize(attribute:, checkbox_items:, **options)
|
35
35
|
super(attribute: attribute, **options)
|
36
36
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
37
|
+
@options[:values] ||= []
|
38
|
+
@options[:values] = (@options[:model] || @options[:form].object).send(attribute) || [] if @options[:model] || @options[:form]
|
39
|
+
|
40
|
+
checkbox_items.each { |checkbox_item| checkbox_item[:checked] = @options[:values].include?(checkbox_item[:value]) } if @options[:values].any?
|
41
|
+
checkbox_items.each { |checkbox_item| set_described_by(checkbox_item, @attribute, @error_message, @hint&.send(:options)) } unless @fieldset
|
41
42
|
|
42
43
|
checkbox_item_class = @options[:form] ? Item::Checkbox::Form : Inputs::Item::Checkbox::Tag
|
43
44
|
|
44
45
|
@checkbox_items = checkbox_items.map { |checkbox_item| checkbox_item[:divider] ? Item::Divider.new(divider: checkbox_item[:divider], type: 'checkboxes') : checkbox_item_class.new(attribute: attribute, form: @options[:form], context: @context, **checkbox_item) }
|
45
46
|
end
|
46
47
|
|
47
|
-
# rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
48
|
+
# rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/AbcSize
|
48
49
|
|
49
50
|
# Generates the HTML for the GOV.UK Checkboxes component
|
50
51
|
#
|
@@ -27,12 +27,12 @@ module CCS
|
|
27
27
|
#
|
28
28
|
# @option (see CCS::Components::GovUK::Field::Inputs#initialize)
|
29
29
|
|
30
|
-
def initialize(attribute:, date_items:
|
31
|
-
(options[:fieldset][:attributes] ||= {})[:role] = 'group'
|
30
|
+
def initialize(attribute:, date_items: nil, **options)
|
31
|
+
(options[:fieldset][:attributes] ||= {})[:role] = 'group' if options[:fieldset]
|
32
32
|
|
33
33
|
super(attribute: attribute, **options)
|
34
34
|
|
35
|
-
|
35
|
+
date_items = default_date_items if date_items.blank?
|
36
36
|
|
37
37
|
@date_input_items = date_items.map { |date_input_item| Item.new(attribute: attribute, error_message: @error_message, model: @options[:model], form: @options[:form], context: @context, **date_input_item) }
|
38
38
|
end
|
@@ -17,23 +17,11 @@ module CCS
|
|
17
17
|
# @option (see CCS::Components::GovUK::Field::Items::Item#initialize))
|
18
18
|
|
19
19
|
def initialize(attribute:, label:, **options)
|
20
|
-
super(attribute: attribute, **options)
|
20
|
+
super(attribute: attribute, item_class: 'govuk-checkboxes__item', **options)
|
21
21
|
|
22
22
|
label[:classes] = "govuk-checkboxes__label #{label[:classes]}".rstrip
|
23
23
|
end
|
24
24
|
|
25
|
-
# Generates the HTML to wrap arround a checkbox input
|
26
|
-
#
|
27
|
-
# @yield the checkbox item input HTML
|
28
|
-
#
|
29
|
-
# @return [ActiveSupport::SafeBuffer]
|
30
|
-
|
31
|
-
def render(&block)
|
32
|
-
tag.div(class: 'govuk-checkboxes__item') do
|
33
|
-
super(&block)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
25
|
# The default attributes for the checkbox
|
38
26
|
|
39
27
|
DEFAULT_ATTRIBUTES = { class: 'govuk-checkboxes__input' }.freeze
|
@@ -17,23 +17,11 @@ module CCS
|
|
17
17
|
# @option (see CCS::Components::GovUK::Field::Items::Item#initialize))
|
18
18
|
|
19
19
|
def initialize(attribute:, label:, **options)
|
20
|
-
super(attribute: attribute, **options)
|
20
|
+
super(attribute: attribute, item_class: 'govuk-radios__item', **options)
|
21
21
|
|
22
22
|
label[:classes] = "govuk-radios__label #{label[:classes]}".rstrip
|
23
23
|
end
|
24
24
|
|
25
|
-
# Generates the HTML to wrap arround a radio input
|
26
|
-
#
|
27
|
-
# @yield the radio item input HTML
|
28
|
-
#
|
29
|
-
# @return [ActiveSupport::SafeBuffer]
|
30
|
-
|
31
|
-
def render(&block)
|
32
|
-
tag.div(class: 'govuk-radios__item') do
|
33
|
-
super(&block)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
25
|
# The default attributes for the radio
|
38
26
|
|
39
27
|
DEFAULT_ATTRIBUTES = { class: 'govuk-radios__input' }.freeze
|
@@ -19,6 +19,8 @@ module CCS
|
|
19
19
|
# @return [String,Symbol] The attribute of the item
|
20
20
|
# @!attribute [r] value
|
21
21
|
# @return [String] The value of the item
|
22
|
+
# @!attribute [r] item_class
|
23
|
+
# @return [String] The CSS class for the item
|
22
24
|
# @!attribute [r] label
|
23
25
|
# @return [Label] The initialised item label
|
24
26
|
# @!attribute [r] hint
|
@@ -27,13 +29,19 @@ module CCS
|
|
27
29
|
# @return [ActiveSupport::SafeBuffer] The conditional HTML
|
28
30
|
|
29
31
|
class Item < Base
|
32
|
+
include ActionView::Context
|
33
|
+
include ActionView::Helpers
|
34
|
+
|
30
35
|
private
|
31
36
|
|
32
|
-
attr_reader :attribute, :value, :label, :hint, :conditional_content
|
37
|
+
attr_reader :attribute, :value, :item_class, :label, :hint, :conditional_content
|
33
38
|
|
34
39
|
public
|
35
40
|
|
41
|
+
# rubocop:disable Metrics/ParameterLists
|
42
|
+
|
36
43
|
# @param attribute [String,Symbol] the attribute of the item
|
44
|
+
# @param item_class [String] the CSS class for the item
|
37
45
|
# @param value [String] the value of the item
|
38
46
|
# @param hint [Hash] options for an item hint see {CCS::Components::GovUK::Hint#initialize Hint#initialize} for more details.
|
39
47
|
# If no hint is given then no hint will be rendered
|
@@ -48,15 +56,18 @@ module CCS
|
|
48
56
|
# @option conditional [ActiveSupport::SafeBuffer] content the HTML content
|
49
57
|
# @option conditional [Hash] attributes[:id] the id of the conditional section
|
50
58
|
|
51
|
-
def initialize(attribute:, value:, hint: nil, conditional: nil, **options)
|
59
|
+
def initialize(attribute:, value:, item_class:, hint: nil, conditional: nil, **options)
|
52
60
|
super(**options)
|
53
61
|
|
54
62
|
initialise_item_hint(attribute, value, hint) if hint
|
55
|
-
initialize_item_conditional(attribute, value, conditional) if conditional
|
63
|
+
initialize_item_conditional(attribute, value, conditional) if conditional && conditional[:content]
|
56
64
|
@attribute = attribute
|
57
65
|
@value = value
|
66
|
+
@item_class = item_class
|
58
67
|
end
|
59
68
|
|
69
|
+
# rubocop:enable Metrics/ParameterLists
|
70
|
+
|
60
71
|
# Generates the HTML to wrap arround a input
|
61
72
|
#
|
62
73
|
# @yield the item input HTML
|
@@ -64,10 +75,14 @@ module CCS
|
|
64
75
|
# @return [ActiveSupport::SafeBuffer]
|
65
76
|
|
66
77
|
def render
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
78
|
+
capture do
|
79
|
+
concat(tag.div(class: @item_class) do
|
80
|
+
concat(yield)
|
81
|
+
concat(label.render)
|
82
|
+
concat(hint.render) if hint
|
83
|
+
end)
|
84
|
+
concat(conditional_content) if conditional_content
|
85
|
+
end
|
71
86
|
end
|
72
87
|
|
73
88
|
private
|
@@ -82,8 +97,7 @@ module CCS
|
|
82
97
|
hint[:attributes] ||= {}
|
83
98
|
hint[:classes] = "govuk-#{self.class::ITEM_TYPE}__hint #{hint[:classes]}".rstrip
|
84
99
|
hint[:attributes][:id] ||= "#{attribute}_#{value}-item-hint"
|
85
|
-
|
86
|
-
(@options[:attributes][:aria] ||= {})[:describedby] = hint[:attributes][:id]
|
100
|
+
(@options[:attributes][:aria] ||= {})[:describedby] = [@options.dig(:attributes, :aria, :describedby), hint[:attributes][:id]].compact.join(' ')
|
87
101
|
|
88
102
|
@hint = Hint.new(context: @context, **hint)
|
89
103
|
end
|
@@ -97,7 +111,7 @@ module CCS
|
|
97
111
|
def initialize_item_conditional(attribute, value, conditional)
|
98
112
|
conditional[:attributes] ||= {}
|
99
113
|
conditional[:attributes][:class] = "govuk-#{self.class::ITEM_TYPE}__conditional #{"govuk-#{self.class::ITEM_TYPE}__conditional--hidden" unless @options[:checked]}".rstrip
|
100
|
-
conditional[:attributes][:id] ||= sanitize_to_id("
|
114
|
+
conditional[:attributes][:id] ||= sanitize_to_id("conditional-#{attribute}_#{value}")
|
101
115
|
|
102
116
|
(@options[:attributes][:data] ||= {})[:'aria-controls'] = conditional[:attributes][:id]
|
103
117
|
|
@@ -23,7 +23,7 @@ module CCS
|
|
23
23
|
|
24
24
|
public
|
25
25
|
|
26
|
-
# rubocop:disable Metrics/CyclomaticComplexity
|
26
|
+
# rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
27
27
|
|
28
28
|
# @param (see CCS::Components::GovUK::Field::Inputs#initialize)
|
29
29
|
# @param radio_items [Array<Hash>] an array of options for the radios.
|
@@ -34,17 +34,16 @@ module CCS
|
|
34
34
|
def initialize(attribute:, radio_items:, **options)
|
35
35
|
super(attribute: attribute, **options)
|
36
36
|
|
37
|
-
if @options[:model] || @options[:form]
|
38
|
-
|
39
|
-
|
40
|
-
end
|
37
|
+
@options[:value] = (@options[:model] || @options[:form].object).send(attribute) if @options[:model] || @options[:form]
|
38
|
+
|
39
|
+
radio_items.each { |radio_item| radio_item[:checked] = @options[:value] == radio_item[:value] } if @options[:value]
|
41
40
|
|
42
41
|
radio_item_class = @options[:form] ? Item::Radio::Form : Inputs::Item::Radio::Tag
|
43
42
|
|
44
43
|
@radio_items = radio_items.map { |radio_item| radio_item[:divider] ? Item::Divider.new(divider: radio_item[:divider], type: 'radios') : radio_item_class.new(attribute: attribute, form: @options[:form], context: @context, **radio_item) }
|
45
44
|
end
|
46
45
|
|
47
|
-
# rubocop:enable Metrics/CyclomaticComplexity
|
46
|
+
# rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
48
47
|
|
49
48
|
# Generates the HTML for the GOV.UK Radios component
|
50
49
|
#
|
@@ -27,9 +27,11 @@ module CCS
|
|
27
27
|
#
|
28
28
|
# @option (see CCS::Components::GovUK::Field#initialize)
|
29
29
|
|
30
|
-
def initialize(attribute:, fieldset
|
30
|
+
def initialize(attribute:, fieldset: nil, **options)
|
31
31
|
super(attribute: attribute, **options)
|
32
32
|
|
33
|
+
return unless fieldset
|
34
|
+
|
33
35
|
set_described_by(fieldset, @attribute, @error_message, options[:hint])
|
34
36
|
|
35
37
|
@fieldset = Fieldset.new(context: @context, **fieldset)
|
@@ -41,15 +43,31 @@ module CCS
|
|
41
43
|
#
|
42
44
|
# @return [ActiveSupport::SafeBuffer]
|
43
45
|
|
44
|
-
def render
|
46
|
+
def render(&block)
|
45
47
|
super() do |display_error_message|
|
46
|
-
fieldset
|
47
|
-
|
48
|
-
|
49
|
-
|
48
|
+
if fieldset
|
49
|
+
fieldset.render do
|
50
|
+
field_inner_html(display_error_message, &block)
|
51
|
+
end
|
52
|
+
else
|
53
|
+
field_inner_html(display_error_message, &block)
|
50
54
|
end
|
51
55
|
end
|
52
56
|
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
# Generates the HTML structure for the field component
|
61
|
+
#
|
62
|
+
# @yield (see CCS::Components::GovUK::Field#render)
|
63
|
+
#
|
64
|
+
# @return [ActiveSupport::SafeBuffer]
|
65
|
+
|
66
|
+
def field_inner_html(display_error_message)
|
67
|
+
concat(hint.render) if hint
|
68
|
+
concat(display_error_message)
|
69
|
+
concat(yield)
|
70
|
+
end
|
53
71
|
end
|
54
72
|
end
|
55
73
|
end
|
@@ -44,7 +44,7 @@ module CCS
|
|
44
44
|
def render
|
45
45
|
capture do
|
46
46
|
concat(tag.h2(visually_hidden_title, class: 'govuk-visually-hidden'))
|
47
|
-
if meta_links
|
47
|
+
if meta_links.present?
|
48
48
|
concat(tag.ul(class: 'govuk-footer__inline-list') do
|
49
49
|
meta_links.each { |meta_link| concat(meta_link.render) }
|
50
50
|
end)
|
@@ -53,7 +53,7 @@ module CCS
|
|
53
53
|
def render
|
54
54
|
tag.footer(**options[:attributes]) do
|
55
55
|
tag.div(class: "govuk-width-container #{options[:container_classes]}".rstrip) do
|
56
|
-
if navigation
|
56
|
+
if navigation.present?
|
57
57
|
concat(tag.div(class: 'govuk-footer__navigation') do
|
58
58
|
navigation.each { |navigation_item| concat(navigation_item.render) }
|
59
59
|
end)
|
@@ -44,7 +44,9 @@ module CCS
|
|
44
44
|
def initialize(navigation:, context:, menu_button: nil)
|
45
45
|
menu_button ||= {}
|
46
46
|
menu_button[:text] ||= 'Menu'
|
47
|
-
|
47
|
+
|
48
|
+
menu_button[:aria] = { controls: 'navigation' }
|
49
|
+
menu_button[:aria][:label] = menu_button[:label] if menu_button[:label]
|
48
50
|
|
49
51
|
@menu_button = menu_button
|
50
52
|
@navigation_links = navigation[:items].map { |navigation_link| Link.new(context: context, **navigation_link) }
|
@@ -58,7 +60,7 @@ module CCS
|
|
58
60
|
|
59
61
|
def render
|
60
62
|
tag.nav(aria: { label: navigation_label }, class: navigation_classes) do
|
61
|
-
concat(button_tag(menu_button[:text], type: :button, class: 'govuk-header__menu-button govuk-js-header-toggle', aria:
|
63
|
+
concat(button_tag(menu_button[:text], type: :button, class: 'govuk-header__menu-button govuk-js-header-toggle', aria: menu_button[:aria], hidden: true))
|
62
64
|
concat(tag.ul(id: 'navigation', class: 'govuk-header__navigation-list') do
|
63
65
|
navigation_links.each { |navigation_link| concat(navigation_link.render) }
|
64
66
|
end)
|
@@ -35,6 +35,7 @@ module CCS
|
|
35
35
|
# @option options [String] :container_classes classes for the container
|
36
36
|
# @option options [String] :homepage_url URL of the homepage. Defaults to +/+
|
37
37
|
# @option options [String] :product_name product name, used when the product name follows on directly from ‘GOV.UK
|
38
|
+
# @option options [Boolean] :use_tudor_crown flag to use the new tudor crown for the GOV.UK Logo
|
38
39
|
# @option options [Hash] :attributes additional attributes that will added as part of the header HTML
|
39
40
|
|
40
41
|
def initialize(navigation: nil, menu_button: nil, service: nil, **options)
|
@@ -43,8 +44,9 @@ module CCS
|
|
43
44
|
@options[:attributes][:role] = 'banner'
|
44
45
|
@options[:container_classes] ||= 'govuk-width-container'
|
45
46
|
@options[:homepage_url] ||= '/'
|
47
|
+
@options[:use_tudor_crown] = true if @options[:use_tudor_crown].nil?
|
46
48
|
|
47
|
-
@navigation = Navigation.new(navigation: navigation, menu_button: menu_button, context: @context) if navigation
|
49
|
+
@navigation = Navigation.new(navigation: navigation, menu_button: menu_button, context: @context) if navigation && navigation[:items].present?
|
48
50
|
@service = service
|
49
51
|
end
|
50
52
|
|
@@ -79,12 +81,7 @@ module CCS
|
|
79
81
|
def header_logo
|
80
82
|
tag.div(class: 'govuk-header__logo') do
|
81
83
|
link_to(options[:homepage_url], class: 'govuk-header__link govuk-header__link--homepage') do
|
82
|
-
concat(
|
83
|
-
concat(tag.svg(class: 'govuk-header__logotype-crown', xmlns: 'http://www.w3.org/2000/svg', height: '30', width: '36', aria: { hidden: 'true' }, focusable: 'false', viewBox: '0 0 132 97') do
|
84
|
-
tag.path(fill: 'currentColor', 'fill-rule': 'evenodd', d: 'M25 30.2c3.5 1.5 7.7-.2 9.1-3.7 1.5-3.6-.2-7.8-3.9-9.2-3.6-1.4-7.6.3-9.1 3.9-1.4 3.5.3 7.5 3.9 9zM9 39.5c3.6 1.5 7.8-.2 9.2-3.7 1.5-3.6-.2-7.8-3.9-9.1-3.6-1.5-7.6.2-9.1 3.8-1.4 3.5.3 7.5 3.8 9zM4.4 57.2c3.5 1.5 7.7-.2 9.1-3.8 1.5-3.6-.2-7.7-3.9-9.1-3.5-1.5-7.6.3-9.1 3.8-1.4 3.5.3 7.6 3.9 9.1zm38.3-21.4c3.5 1.5 7.7-.2 9.1-3.8 1.5-3.6-.2-7.7-3.9-9.1-3.6-1.5-7.6.3-9.1 3.8-1.3 3.6.4 7.7 3.9 9.1zm64.4-5.6c-3.6 1.5-7.8-.2-9.1-3.7-1.5-3.6.2-7.8 3.8-9.2 3.6-1.4 7.7.3 9.2 3.9 1.3 3.5-.4 7.5-3.9 9zm15.9 9.3c-3.6 1.5-7.7-.2-9.1-3.7-1.5-3.6.2-7.8 3.7-9.1 3.6-1.5 7.7.2 9.2 3.8 1.5 3.5-.3 7.5-3.8 9zm4.7 17.7c-3.6 1.5-7.8-.2-9.2-3.8-1.5-3.6.2-7.7 3.9-9.1 3.6-1.5 7.7.3 9.2 3.8 1.3 3.5-.4 7.6-3.9 9.1zM89.3 35.8c-3.6 1.5-7.8-.2-9.2-3.8-1.4-3.6.2-7.7 3.9-9.1 3.6-1.5 7.7.3 9.2 3.8 1.4 3.6-.3 7.7-3.9 9.1zM69.7 17.7l8.9 4.7V9.3l-8.9 2.8c-.2-.3-.5-.6-.9-.9L72.4 0H59.6l3.5 11.2c-.3.3-.6.5-.9.9l-8.8-2.8v13.1l8.8-4.7c.3.3.6.7.9.9l-5 15.4v.1c-.2.8-.4 1.6-.4 2.4 0 4.1 3.1 7.5 7 8.1h.2c.3 0 .7.1 1 .1.4 0 .7 0 1-.1h.2c4-.6 7.1-4.1 7.1-8.1 0-.8-.1-1.7-.4-2.4V34l-5.1-15.4c.4-.2.7-.6 1-.9zM66 92.8c16.9 0 32.8 1.1 47.1 3.2 4-16.9 8.9-26.7 14-33.5l-9.6-3.4c1 4.9 1.1 7.2 0 10.2-1.5-1.4-3-4.3-4.2-8.7L108.6 76c2.8-2 5-3.2 7.5-3.3-4.4 9.4-10 11.9-13.6 11.2-4.3-.8-6.3-4.6-5.6-7.9 1-4.7 5.7-5.9 8-.5 4.3-8.7-3-11.4-7.6-8.8 7.1-7.2 7.9-13.5 2.1-21.1-8 6.1-8.1 12.3-4.5 20.8-4.7-5.4-12.1-2.5-9.5 6.2 3.4-5.2 7.9-2 7.2 3.1-.6 4.3-6.4 7.8-13.5 7.2-10.3-.9-10.9-8-11.2-13.8 2.5-.5 7.1 1.8 11 7.3L80.2 60c-4.1 4.4-8 5.3-12.3 5.4 1.4-4.4 8-11.6 8-11.6H55.5s6.4 7.2 7.9 11.6c-4.2-.1-8-1-12.3-5.4l1.4 16.4c3.9-5.5 8.5-7.7 10.9-7.3-.3 5.8-.9 12.8-11.1 13.8-7.2.6-12.9-2.9-13.5-7.2-.7-5 3.8-8.3 7.1-3.1 2.7-8.7-4.6-11.6-9.4-6.2 3.7-8.5 3.6-14.7-4.6-20.8-5.8 7.6-5 13.9 2.2 21.1-4.7-2.6-11.9.1-7.7 8.8 2.3-5.5 7.1-4.2 8.1.5.7 3.3-1.3 7.1-5.7 7.9-3.5.7-9-1.8-13.5-11.2 2.5.1 4.7 1.3 7.5 3.3l-4.7-15.4c-1.2 4.4-2.7 7.2-4.3 8.7-1.1-3-.9-5.3 0-10.2l-9.5 3.4c5 6.9 9.9 16.7 14 33.5 14.8-2.1 30.8-3.2 47.7-3.2z')
|
85
|
-
end)
|
86
|
-
concat(tag.span('GOV.UK', class: 'govuk-header__logotype-text'))
|
87
|
-
end)
|
84
|
+
concat(options[:use_tudor_crown] ? tudor_crown : st_edwards_crown)
|
88
85
|
concat(tag.span(options[:product_name], class: 'govuk-header__product-name')) if options[:product_name]
|
89
86
|
end
|
90
87
|
end
|
@@ -101,6 +98,28 @@ module CCS
|
|
101
98
|
tag.span(service[:name], class: 'govuk-header__service-name')
|
102
99
|
end
|
103
100
|
end
|
101
|
+
|
102
|
+
# Generates the GOV.UK log with St. Edwards Crown
|
103
|
+
#
|
104
|
+
# @return [ActiveSupport::SafeBuffer]
|
105
|
+
|
106
|
+
def st_edwards_crown
|
107
|
+
tag.svg(class: 'govuk-header__logotype', xmlns: 'http://www.w3.org/2000/svg', height: '30', width: '152', aria: { label: 'GOV.UK' }, focusable: 'false', viewBox: '0 0 152 30', role: 'img') do
|
108
|
+
concat(tag.title('GOV.UK'))
|
109
|
+
concat(tag.path(d: 'M6.7 12.2c1 .4 2.1-.1 2.5-1s-.1-2.1-1-2.5c-1-.4-2.1.1-2.5 1-.4 1 0 2.1 1 2.5m-4.3 2.5c1 .4 2.1-.1 2.5-1s-.1-2.1-1-2.5c-1-.4-2.1.1-2.5 1-.5 1 0 2.1 1 2.5m-1.3 4.8c1 .4 2.1-.1 2.5-1 .4-1-.1-2.1-1-2.5-1-.4-2.1.1-2.5 1-.4 1 0 2.1 1 2.5m10.4-5.8c1 .4 2.1-.1 2.5-1s-.1-2.1-1-2.5c-1-.4-2.1.1-2.5 1s0 2.1 1 2.5m17.4-1.5c-1 .4-2.1-.1-2.5-1s.1-2.1 1-2.5c1-.4 2.1.1 2.5 1 .5 1 0 2.1-1 2.5m4.3 2.5c-1 .4-2.1-.1-2.5-1s.1-2.1 1-2.5c1-.4 2.1.1 2.5 1 .5 1 0 2.1-1 2.5m1.3 4.8c-1 .4-2.1-.1-2.5-1-.4-1 .1-2.1 1-2.5 1-.4 2.1.1 2.5 1 .4 1 0 2.1-1 2.5m-10.4-5.8c-1 .4-2.1-.1-2.5-1s.1-2.1 1-2.5c1-.4 2.1.1 2.5 1s0 2.1-1 2.5m-5.3-4.9 2.4 1.3V6.5l-2.4.8c-.1-.1-.1-.2-.2-.2s1-3 1-3h-3.4l1 3c-.1.1-.2.1-.2.2-.1.1-2.4-.7-2.4-.7v3.5L17 8.8c-.1.1 0 .2.1.3l-1.4 4.2c-.1.2-.1.4-.1.7 0 1.1.8 2.1 1.9 2.2h.6C19.2 16 20 15.1 20 14c0-.2 0-.4-.1-.7l-1.4-4.2c.2-.1.3-.2.3-.3m-1 20.3c4.6 0 8.9.3 12.8.9 1.1-4.6 2.4-7.2 3.8-9.1l-2.6-.9c.3 1.3.3 1.9 0 2.8-.4-.4-.8-1.2-1.1-2.4l-1.2 4.2c.8-.5 1.4-.9 2-.9-1.2 2.6-2.7 3.2-3.6 3-1.2-.2-1.7-1.3-1.5-2.2.3-1.3 1.6-1.6 2.2-.1 1.2-2.4-.8-3.1-2.1-2.4 1.9-1.9 2.2-3.6.6-5.7-2.2 1.7-2.2 3.3-1.2 5.6-1.3-1.5-3.3-.7-2.5 1.7.9-1.4 2.1-.5 2 .8-.2 1.2-1.7 2.1-3.7 2-2.8-.2-3-2.2-3-3.7.7-.1 1.9.5 3 2l.4-4.4c-1.1 1.2-2.2 1.4-3.3 1.4.4-1.2 2.1-3.1 2.1-3.1h-5.5s1.8 2 2.1 3.1c-1.1 0-2.2-.3-3.3-1.4l.4 4.4c1.1-1.5 2.3-2.1 3-2-.1 1.6-.2 3.5-3 3.7-1.9.2-3.5-.8-3.7-2-.2-1.3 1-2.2 1.9-.8.7-2.4-1.3-3.1-2.6-1.7 1-2.3 1-4-1.2-5.6-1.6 2.1-1.3 3.8.6 5.7-1.3-.7-3.2 0-2.1 2.4.6-1.5 1.9-1.1 2.2.1.2.9-.4 1.9-1.5 2.2-1 .2-2.5-.5-3.7-3 .7 0 1.3.4 2 .9L5 20.4c-.3 1.2-.7 1.9-1.2 2.4-.3-.8-.2-1.5 0-2.8l-2.6.9C2.7 22.8 4 25.4 5.1 30c3.8-.5 8.2-.9 12.7-.9m30.5-11.5c0 .9.1 1.7.3 2.5.2.8.6 1.5 1 2.2.5.6 1 1.1 1.7 1.5.7.4 1.5.6 2.5.6.9 0 1.7-.1 2.3-.4s1.1-.7 1.5-1.1c.4-.4.6-.9.8-1.5.1-.5.2-1 .2-1.5v-.2h-5.3v-3.2h9.4V28H59v-2.5c-.3.4-.6.8-1 1.1-.4.3-.8.6-1.3.9-.5.2-1 .4-1.6.6s-1.2.2-1.8.2c-1.5 0-2.9-.3-4-.8-1.2-.6-2.2-1.3-3-2.3-.8-1-1.4-2.1-1.8-3.4-.3-1.4-.5-2.8-.5-4.3s.2-2.9.7-4.2c.5-1.3 1.1-2.4 2-3.4.9-1 1.9-1.7 3.1-2.3 1.2-.6 2.6-.8 4.1-.8 1 0 1.9.1 2.8.3.9.2 1.7.6 2.4 1s1.4.9 1.9 1.5c.6.6 1 1.3 1.4 2l-3.7 2.1c-.2-.4-.5-.9-.8-1.2-.3-.4-.6-.7-1-1-.4-.3-.8-.5-1.3-.7-.5-.2-1.1-.2-1.7-.2-1 0-1.8.2-2.5.6-.7.4-1.3.9-1.7 1.5-.5.6-.8 1.4-1 2.2-.3.8-.4 1.9-.4 2.7zm36.4-4.3c-.4-1.3-1.1-2.4-2-3.4-.9-1-1.9-1.7-3.1-2.3-1.2-.6-2.6-.8-4.2-.8s-2.9.3-4.2.8c-1.1.6-2.2 1.4-3 2.3-.9 1-1.5 2.1-2 3.4-.4 1.3-.7 2.7-.7 4.2s.2 2.9.7 4.2c.4 1.3 1.1 2.4 2 3.4.9 1 1.9 1.7 3.1 2.3 1.2.6 2.6.8 4.2.8 1.5 0 2.9-.3 4.2-.8 1.2-.6 2.3-1.3 3.1-2.3.9-1 1.5-2.1 2-3.4.4-1.3.7-2.7.7-4.2-.1-1.5-.3-2.9-.8-4.2zM81 17.6c0 1-.1 1.9-.4 2.7-.2.8-.6 1.6-1.1 2.2-.5.6-1.1 1.1-1.7 1.4-.7.3-1.5.5-2.4.5-.9 0-1.7-.2-2.4-.5s-1.3-.8-1.7-1.4c-.5-.6-.8-1.3-1.1-2.2-.2-.8-.4-1.7-.4-2.7v-.1c0-1 .1-1.9.4-2.7.2-.8.6-1.6 1.1-2.2.5-.6 1.1-1.1 1.7-1.4.7-.3 1.5-.5 2.4-.5.9 0 1.7.2 2.4.5s1.3.8 1.7 1.4c.5.6.8 1.3 1.1 2.2.2.8.4 1.7.4 2.7v.1zM92.9 28 87 7h4.7l4 15.7h.1l4-15.7h4.7l-5.9 21h-5.7zm28.8-3.6c.6 0 1.2-.1 1.7-.3.5-.2 1-.4 1.4-.8.4-.4.7-.8.9-1.4.2-.6.3-1.2.3-2v-13h4.1v13.6c0 1.2-.2 2.2-.6 3.1s-1 1.7-1.8 2.4c-.7.7-1.6 1.2-2.7 1.5-1 .4-2.2.5-3.4.5-1.2 0-2.4-.2-3.4-.5-1-.4-1.9-.9-2.7-1.5-.8-.7-1.3-1.5-1.8-2.4-.4-.9-.6-2-.6-3.1V6.9h4.2v13c0 .8.1 1.4.3 2 .2.6.5 1 .9 1.4.4.4.8.6 1.4.8.6.2 1.1.3 1.8.3zm13-17.4h4.2v9.1l7.4-9.1h5.2l-7.2 8.4L152 28h-4.9l-5.5-9.4-2.7 3V28h-4.2V7zm-27.6 16.1c-1.5 0-2.7 1.2-2.7 2.7s1.2 2.7 2.7 2.7 2.7-1.2 2.7-2.7-1.2-2.7-2.7-2.7z'))
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
# Generates the GOV.UK logo with a Tudor Crown
|
114
|
+
#
|
115
|
+
# @return [ActiveSupport::SafeBuffer]
|
116
|
+
|
117
|
+
def tudor_crown
|
118
|
+
tag.svg(class: 'govuk-header__logotype', xmlns: 'http://www.w3.org/2000/svg', height: '30', width: '148', aria: { label: 'GOV.UK' }, focusable: 'false', viewBox: '0 0 148 30', role: 'img') do
|
119
|
+
concat(tag.title('GOV.UK'))
|
120
|
+
concat(tag.path(d: 'M22.6 10.4c-1 .4-2-.1-2.4-1-.4-.9.1-2 1-2.4.9-.4 2 .1 2.4 1s-.1 2-1 2.4m-5.9 6.7c-.9.4-2-.1-2.4-1-.4-.9.1-2 1-2.4.9-.4 2 .1 2.4 1s-.1 2-1 2.4m10.8-3.7c-1 .4-2-.1-2.4-1-.4-.9.1-2 1-2.4.9-.4 2 .1 2.4 1s0 2-1 2.4m3.3 4.8c-1 .4-2-.1-2.4-1-.4-.9.1-2 1-2.4.9-.4 2 .1 2.4 1s-.1 2-1 2.4M17 4.7l2.3 1.2V2.5l-2.3.7-.2-.2.9-3h-3.4l.9 3-.2.2c-.1.1-2.3-.7-2.3-.7v3.4L15 4.7c.1.1.1.2.2.2l-1.3 4c-.1.2-.1.4-.1.6 0 1.1.8 2 1.9 2.2h.7c1-.2 1.9-1.1 1.9-2.1 0-.2 0-.4-.1-.6l-1.3-4c-.1-.2 0-.2.1-.3m-7.6 5.7c.9.4 2-.1 2.4-1 .4-.9-.1-2-1-2.4-.9-.4-2 .1-2.4 1s0 2 1 2.4m-5 3c.9.4 2-.1 2.4-1 .4-.9-.1-2-1-2.4-.9-.4-2 .1-2.4 1s.1 2 1 2.4m-3.2 4.8c.9.4 2-.1 2.4-1 .4-.9-.1-2-1-2.4-.9-.4-2 .1-2.4 1s0 2 1 2.4m14.8 11c4.4 0 8.6.3 12.3.8 1.1-4.5 2.4-7 3.7-8.8l-2.5-.9c.2 1.3.3 1.9 0 2.7-.4-.4-.8-1.1-1.1-2.3l-1.2 4c.7-.5 1.3-.8 2-.9-1.1 2.5-2.6 3.1-3.5 3-1.1-.2-1.7-1.2-1.5-2.1.3-1.2 1.5-1.5 2.1-.1 1.1-2.3-.8-3-2-2.3 1.9-1.9 2.1-3.5.6-5.6-2.1 1.6-2.1 3.2-1.2 5.5-1.2-1.4-3.2-.6-2.5 1.6.9-1.4 2.1-.5 1.9.8-.2 1.1-1.7 2.1-3.5 1.9-2.7-.2-2.9-2.1-2.9-3.6.7-.1 1.9.5 2.9 1.9l.4-4.3c-1.1 1.1-2.1 1.4-3.2 1.4.4-1.2 2.1-3 2.1-3h-5.4s1.7 1.9 2.1 3c-1.1 0-2.1-.2-3.2-1.4l.4 4.3c1-1.4 2.2-2 2.9-1.9-.1 1.5-.2 3.4-2.9 3.6-1.9.2-3.4-.8-3.5-1.9-.2-1.3 1-2.2 1.9-.8.7-2.3-1.2-3-2.5-1.6.9-2.2.9-3.9-1.2-5.5-1.5 2-1.3 3.7.6 5.6-1.2-.7-3.1 0-2 2.3.6-1.4 1.8-1.1 2.1.1.2.9-.3 1.9-1.5 2.1-.9.2-2.4-.5-3.5-3 .6 0 1.2.3 2 .9l-1.2-4c-.3 1.1-.7 1.9-1.1 2.3-.3-.8-.2-1.4 0-2.7l-2.9.9C1.3 23 2.6 25.5 3.7 30c3.7-.5 7.9-.8 12.3-.8m28.3-11.6c0 .9.1 1.7.3 2.5.2.8.6 1.5 1 2.2.5.6 1 1.1 1.7 1.5.7.4 1.5.6 2.5.6.9 0 1.7-.1 2.3-.4s1.1-.7 1.5-1.1c.4-.4.6-.9.8-1.5.1-.5.2-1 .2-1.5v-.2h-5.3v-3.2h9.4V28H55v-2.5c-.3.4-.6.8-1 1.1-.4.3-.8.6-1.3.9-.5.2-1 .4-1.6.6s-1.2.2-1.8.2c-1.5 0-2.9-.3-4-.8-1.2-.6-2.2-1.3-3-2.3-.8-1-1.4-2.1-1.8-3.4-.3-1.4-.5-2.8-.5-4.3s.2-2.9.7-4.2c.5-1.3 1.1-2.4 2-3.4.9-1 1.9-1.7 3.1-2.3 1.2-.6 2.6-.8 4.1-.8 1 0 1.9.1 2.8.3.9.2 1.7.6 2.4 1s1.4.9 1.9 1.5c.6.6 1 1.3 1.4 2l-3.7 2.1c-.2-.4-.5-.9-.8-1.2-.3-.4-.6-.7-1-1-.4-.3-.8-.5-1.3-.7-.5-.2-1.1-.2-1.7-.2-1 0-1.8.2-2.5.6-.7.4-1.3.9-1.7 1.5-.5.6-.8 1.4-1 2.2-.3.8-.4 1.9-.4 2.7zM71.5 6.8c1.5 0 2.9.3 4.2.8 1.2.6 2.3 1.3 3.1 2.3.9 1 1.5 2.1 2 3.4s.7 2.7.7 4.2-.2 2.9-.7 4.2c-.4 1.3-1.1 2.4-2 3.4-.9 1-1.9 1.7-3.1 2.3-1.2.6-2.6.8-4.2.8s-2.9-.3-4.2-.8c-1.2-.6-2.3-1.3-3.1-2.3-.9-1-1.5-2.1-2-3.4-.4-1.3-.7-2.7-.7-4.2s.2-2.9.7-4.2c.4-1.3 1.1-2.4 2-3.4.9-1 1.9-1.7 3.1-2.3 1.2-.5 2.6-.8 4.2-.8zm0 17.6c.9 0 1.7-.2 2.4-.5s1.3-.8 1.7-1.4c.5-.6.8-1.3 1.1-2.2.2-.8.4-1.7.4-2.7v-.1c0-1-.1-1.9-.4-2.7-.2-.8-.6-1.6-1.1-2.2-.5-.6-1.1-1.1-1.7-1.4-.7-.3-1.5-.5-2.4-.5s-1.7.2-2.4.5-1.3.8-1.7 1.4c-.5.6-.8 1.3-1.1 2.2-.2.8-.4 1.7-.4 2.7v.1c0 1 .1 1.9.4 2.7.2.8.6 1.6 1.1 2.2.5.6 1.1 1.1 1.7 1.4.6.3 1.4.5 2.4.5zM88.9 28 83 7h4.7l4 15.7h.1l4-15.7h4.7l-5.9 21h-5.7zm28.8-3.6c.6 0 1.2-.1 1.7-.3.5-.2 1-.4 1.4-.8.4-.4.7-.8.9-1.4.2-.6.3-1.2.3-2v-13h4.1v13.6c0 1.2-.2 2.2-.6 3.1s-1 1.7-1.8 2.4c-.7.7-1.6 1.2-2.7 1.5-1 .4-2.2.5-3.4.5-1.2 0-2.4-.2-3.4-.5-1-.4-1.9-.9-2.7-1.5-.8-.7-1.3-1.5-1.8-2.4-.4-.9-.6-2-.6-3.1V6.9h4.2v13c0 .8.1 1.4.3 2 .2.6.5 1 .9 1.4.4.4.8.6 1.4.8.6.2 1.1.3 1.8.3zm13-17.4h4.2v9.1l7.4-9.1h5.2l-7.2 8.4L148 28h-4.9l-5.5-9.4-2.7 3V28h-4.2V7zm-27.6 16.1c-1.5 0-2.7 1.2-2.7 2.7s1.2 2.7 2.7 2.7 2.7-1.2 2.7-2.7-1.2-2.7-2.7-2.7z'))
|
121
|
+
end
|
122
|
+
end
|
104
123
|
end
|
105
124
|
end
|
106
125
|
end
|
@@ -14,8 +14,8 @@ module CCS
|
|
14
14
|
#
|
15
15
|
# @option (see Increment#initialize)
|
16
16
|
|
17
|
-
def initialize(text:
|
18
|
-
super(type: :next, text: text, **options)
|
17
|
+
def initialize(text: nil, **options)
|
18
|
+
super(type: :next, text: text, default_text: 'Next', **options)
|
19
19
|
end
|
20
20
|
|
21
21
|
# Generates the HTML for the next link in the pagination
|
@@ -26,7 +26,10 @@ module CCS
|
|
26
26
|
tag.div(class: 'govuk-pagination__next') do
|
27
27
|
super() do
|
28
28
|
concat(pagination_icon) if block_is_level
|
29
|
-
concat(tag.span(
|
29
|
+
concat(tag.span(class: pagination_text_classes) do
|
30
|
+
concat(text)
|
31
|
+
concat(tag.span(' page', class: 'govuk-visually-hidden')) if text == default_text
|
32
|
+
end)
|
30
33
|
pagination_icon_label_text
|
31
34
|
concat(pagination_icon) unless block_is_level
|
32
35
|
end
|
@@ -14,8 +14,8 @@ module CCS
|
|
14
14
|
#
|
15
15
|
# @option (see Increment#initialize)
|
16
16
|
|
17
|
-
def initialize(text:
|
18
|
-
super(type: :prev, text: text, **options)
|
17
|
+
def initialize(text: nil, **options)
|
18
|
+
super(type: :prev, text: text, default_text: 'Previous', **options)
|
19
19
|
end
|
20
20
|
|
21
21
|
# Generates the HTML for the previous link in the pagination
|
@@ -26,7 +26,10 @@ module CCS
|
|
26
26
|
tag.div(class: 'govuk-pagination__prev') do
|
27
27
|
super() do
|
28
28
|
concat(pagination_icon)
|
29
|
-
concat(tag.span(
|
29
|
+
concat(tag.span(class: pagination_text_classes) do
|
30
|
+
concat(text)
|
31
|
+
concat(tag.span(' page', class: 'govuk-visually-hidden')) if text == default_text
|
32
|
+
end)
|
30
33
|
pagination_icon_label_text
|
31
34
|
end
|
32
35
|
end
|