govuk_publishing_components 21.56.0 → 21.56.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/views/govuk_publishing_components/components/_contextual_breadcrumbs.html.erb +11 -7
- data/lib/govuk_publishing_components.rb +2 -1
- data/lib/govuk_publishing_components/presenters/breadcrumb_selector.rb +50 -42
- data/lib/govuk_publishing_components/presenters/content_breadcrumbs_based_on_ancestors.rb +41 -0
- data/lib/govuk_publishing_components/presenters/content_breadcrumbs_based_on_priority.rb +1 -0
- data/lib/govuk_publishing_components/presenters/content_breadcrumbs_based_on_taxons.rb +4 -0
- data/lib/govuk_publishing_components/presenters/content_breadcrumbs_based_on_topic.rb +38 -0
- data/lib/govuk_publishing_components/presenters/contextual_navigation.rb +15 -4
- data/lib/govuk_publishing_components/presenters/page_with_step_by_step_navigation.rb +3 -1
- data/lib/govuk_publishing_components/presenters/related_navigation_helper.rb +18 -17
- data/lib/govuk_publishing_components/version.rb +1 -1
- data/node_modules/axe-core/CHANGELOG.md +11 -0
- data/node_modules/axe-core/axe.js +36 -9
- data/node_modules/axe-core/axe.min.js +2 -2
- data/node_modules/axe-core/bower.json +1 -1
- data/node_modules/axe-core/lib/checks/color/color-contrast.js +2 -2
- data/node_modules/axe-core/lib/checks/lists/listitem.js +1 -1
- data/node_modules/axe-core/lib/checks/mobile/meta-viewport-scale.js +3 -0
- data/node_modules/axe-core/lib/commons/dom/is-visible.js +37 -19
- data/node_modules/axe-core/lib/core/public/configure.js +26 -0
- data/node_modules/axe-core/lib/rules/aria-input-field-name.json +1 -1
- data/node_modules/axe-core/package.json +12 -12
- data/node_modules/axe-core/sri-history.json +4 -0
- metadata +4 -3
- data/lib/govuk_publishing_components/presenters/content_breadcrumbs_based_on_parent.rb +0 -39
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3ae35a18ee87f9f8bdbc0b7f05b1874d04f3bcfbebed8eb0fd21dfb178bf1118
|
4
|
+
data.tar.gz: e83b74f0187e3db2687dea59f3dc1f482b3400a7fe24f95d1ba5cb9b1377a94e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 485ae5bca952be5d4bd237148436f7c165cf91aadafdc433cf1dec9a899cbcff4f78c9e9ede0509ffc79511902fcdeeff699ed73e918f2cbcbf08182e8d8da42
|
7
|
+
data.tar.gz: fde1485cf2b9b1849993aa71fee949f39c3f4d08c996c1d9a61de520f3c44d0c25d3fd047d176032fd0c4e7c4862a0b4fe00b926b43e5898424c3e459355ada3
|
@@ -1,16 +1,20 @@
|
|
1
1
|
<% prioritise_taxon_breadcrumbs ||= false %>
|
2
|
-
<% breadcrumb_selector = GovukPublishingComponents::Presenters::BreadcrumbSelector.
|
2
|
+
<% breadcrumb_selector = GovukPublishingComponents::Presenters::BreadcrumbSelector.new(content_item, request, prioritise_taxon_breadcrumbs) %>
|
3
3
|
<% inverse ||= false %>
|
4
4
|
<% collapse_on_mobile ||= true unless local_assigns[:collapse_on_mobile].eql?(false) %>
|
5
5
|
|
6
|
-
<div class=
|
7
|
-
<% if breadcrumb_selector
|
8
|
-
<%= render 'govuk_publishing_components/components/step_by_step_nav_header',
|
9
|
-
|
10
|
-
<% elsif breadcrumb_selector[:breadcrumbs] %>
|
6
|
+
<div class="gem-c-contextual-breadcrumbs">
|
7
|
+
<% if breadcrumb_selector.step_by_step %>
|
8
|
+
<%= render 'govuk_publishing_components/components/step_by_step_nav_header', breadcrumb_selector.breadcrumbs %>
|
9
|
+
<% elsif breadcrumb_selector.breadcrumbs %>
|
11
10
|
<%= render 'govuk_publishing_components/components/breadcrumbs',
|
12
|
-
breadcrumbs: breadcrumb_selector
|
11
|
+
breadcrumbs: breadcrumb_selector.breadcrumbs,
|
13
12
|
inverse: inverse,
|
14
13
|
collapse_on_mobile: collapse_on_mobile %>
|
15
14
|
<% end %>
|
15
|
+
|
16
|
+
<%= render(
|
17
|
+
'govuk_publishing_components/components/step_by_step_nav_header', breadcrumb_selector.priority_breadcrumbs
|
18
|
+
) if breadcrumb_selector.priority_breadcrumbs
|
19
|
+
%>
|
16
20
|
</div>
|
@@ -12,9 +12,10 @@ require "govuk_publishing_components/presenters/contextual_navigation"
|
|
12
12
|
require "govuk_publishing_components/presenters/related_navigation_helper"
|
13
13
|
require "govuk_publishing_components/presenters/step_by_step_nav_helper"
|
14
14
|
require "govuk_publishing_components/presenters/page_with_step_by_step_navigation"
|
15
|
-
require "govuk_publishing_components/presenters/
|
15
|
+
require "govuk_publishing_components/presenters/content_breadcrumbs_based_on_ancestors"
|
16
16
|
require "govuk_publishing_components/presenters/content_breadcrumbs_based_on_priority"
|
17
17
|
require "govuk_publishing_components/presenters/content_breadcrumbs_based_on_taxons"
|
18
|
+
require "govuk_publishing_components/presenters/content_breadcrumbs_based_on_topic"
|
18
19
|
require "govuk_publishing_components/presenters/checkboxes_helper"
|
19
20
|
require "govuk_publishing_components/presenters/select"
|
20
21
|
require "govuk_publishing_components/presenters/meta_tags"
|
@@ -1,10 +1,6 @@
|
|
1
1
|
module GovukPublishingComponents
|
2
2
|
module Presenters
|
3
3
|
class BreadcrumbSelector
|
4
|
-
def self.call(*args)
|
5
|
-
new(*args).output
|
6
|
-
end
|
7
|
-
|
8
4
|
attr_reader :content_item, :request, :prioritise_taxon_breadcrumbs
|
9
5
|
|
10
6
|
def initialize(content_item, request, prioritise_taxon_breadcrumbs)
|
@@ -13,47 +9,28 @@ module GovukPublishingComponents
|
|
13
9
|
@prioritise_taxon_breadcrumbs = prioritise_taxon_breadcrumbs
|
14
10
|
end
|
15
11
|
|
16
|
-
def
|
17
|
-
|
12
|
+
def breadcrumbs
|
13
|
+
best_match_option[:breadcrumbs]
|
18
14
|
end
|
19
15
|
|
20
|
-
def
|
21
|
-
|
16
|
+
def step_by_step
|
17
|
+
best_match_option[:step_by_step]
|
22
18
|
end
|
23
19
|
|
24
|
-
def
|
25
|
-
|
26
|
-
rescue GdsApi::ContentStore::ItemNotFound
|
27
|
-
# Do nothing
|
28
|
-
end
|
20
|
+
def priority_breadcrumbs
|
21
|
+
return parent_item_navigation.priority_breadcrumbs if content_item_navigation.html_publication_with_parent?
|
29
22
|
|
30
|
-
|
31
|
-
@parent_item_options ||= options(parent_item_navigation)
|
23
|
+
content_item_navigation.priority_breadcrumbs
|
32
24
|
end
|
33
25
|
|
34
|
-
|
35
|
-
@content_item_options ||= options(content_item_navigation)
|
36
|
-
end
|
26
|
+
private
|
37
27
|
|
38
|
-
def
|
39
|
-
breadcrumbs = [parent_item_options[:breadcrumbs]].flatten # to ensure breadcrumbs always an array
|
40
|
-
breadcrumbs.last[:is_page_parent] = false
|
41
|
-
breadcrumbs << {
|
42
|
-
title: parent_item["title"],
|
43
|
-
url: parent_item["base_path"],
|
44
|
-
is_page_parent: true,
|
45
|
-
}
|
46
|
-
end
|
47
|
-
|
48
|
-
def output
|
28
|
+
def best_match_option
|
49
29
|
return content_item_options unless content_item_navigation.html_publication_with_parent?
|
50
|
-
return parent_item_options if parent_item_navigation.priority_breadcrumbs
|
51
|
-
|
52
|
-
step_by_step_header = parent_item_options[:step_by_step]
|
53
30
|
|
54
31
|
{
|
55
|
-
step_by_step:
|
56
|
-
breadcrumbs:
|
32
|
+
step_by_step: parent_is_step_by_step?,
|
33
|
+
breadcrumbs: parent_is_step_by_step? ? parent_breadcrumbs.first : parent_breadcrumbs,
|
57
34
|
}
|
58
35
|
end
|
59
36
|
|
@@ -61,18 +38,13 @@ module GovukPublishingComponents
|
|
61
38
|
if navigation.content_tagged_to_a_finder?
|
62
39
|
{
|
63
40
|
step_by_step: false,
|
64
|
-
breadcrumbs: navigation.
|
41
|
+
breadcrumbs: navigation.finder_breadcrumbs,
|
65
42
|
}
|
66
43
|
elsif navigation.content_tagged_to_current_step_by_step?
|
67
44
|
{
|
68
45
|
step_by_step: true,
|
69
46
|
breadcrumbs: navigation.step_nav_helper.header,
|
70
47
|
}
|
71
|
-
elsif navigation.priority_breadcrumbs
|
72
|
-
{
|
73
|
-
step_by_step: true,
|
74
|
-
breadcrumbs: navigation.priority_breadcrumbs,
|
75
|
-
}
|
76
48
|
elsif navigation.content_is_tagged_to_a_live_taxon? && prioritise_taxon_breadcrumbs
|
77
49
|
{
|
78
50
|
step_by_step: false,
|
@@ -83,10 +55,10 @@ module GovukPublishingComponents
|
|
83
55
|
step_by_step: false,
|
84
56
|
breadcrumbs: navigation.breadcrumbs,
|
85
57
|
}
|
86
|
-
elsif navigation.
|
58
|
+
elsif navigation.content_has_a_topic?
|
87
59
|
{
|
88
60
|
step_by_step: false,
|
89
|
-
breadcrumbs: navigation.
|
61
|
+
breadcrumbs: navigation.topic_breadcrumbs,
|
90
62
|
}
|
91
63
|
elsif navigation.use_taxon_breadcrumbs?
|
92
64
|
{
|
@@ -102,6 +74,42 @@ module GovukPublishingComponents
|
|
102
74
|
{}
|
103
75
|
end
|
104
76
|
end
|
77
|
+
|
78
|
+
def content_item_navigation
|
79
|
+
@content_item_navigation ||= ContextualNavigation.new(content_item, request)
|
80
|
+
end
|
81
|
+
|
82
|
+
def parent_item_navigation
|
83
|
+
@parent_item_navigation ||= ContextualNavigation.new(parent_item, request)
|
84
|
+
end
|
85
|
+
|
86
|
+
def parent_item
|
87
|
+
@parent_item ||= Services.content_store.content_item(content_item_navigation.parent_api_path)
|
88
|
+
rescue GdsApi::ContentStore::ItemNotFound
|
89
|
+
# Do nothing
|
90
|
+
end
|
91
|
+
|
92
|
+
def parent_item_options
|
93
|
+
@parent_item_options ||= options(parent_item_navigation)
|
94
|
+
end
|
95
|
+
|
96
|
+
def content_item_options
|
97
|
+
@content_item_options ||= options(content_item_navigation)
|
98
|
+
end
|
99
|
+
|
100
|
+
def parent_breadcrumbs
|
101
|
+
breadcrumbs = [parent_item_options[:breadcrumbs]].flatten # to ensure breadcrumbs always an array
|
102
|
+
breadcrumbs.last[:is_page_parent] = false
|
103
|
+
breadcrumbs << {
|
104
|
+
title: parent_item["title"],
|
105
|
+
url: parent_item["base_path"],
|
106
|
+
is_page_parent: true,
|
107
|
+
}
|
108
|
+
end
|
109
|
+
|
110
|
+
def parent_is_step_by_step?
|
111
|
+
parent_item_options[:step_by_step]
|
112
|
+
end
|
105
113
|
end
|
106
114
|
end
|
107
115
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module GovukPublishingComponents
|
2
|
+
module Presenters
|
3
|
+
# @private
|
4
|
+
class ContentBreadcrumbsBasedOnAncestors
|
5
|
+
def self.call(content_item)
|
6
|
+
new(content_item).breadcrumbs
|
7
|
+
end
|
8
|
+
|
9
|
+
def initialize(content_item)
|
10
|
+
@content_item = ContentItem.new(content_item)
|
11
|
+
end
|
12
|
+
|
13
|
+
def breadcrumbs
|
14
|
+
ordered_ancestors = all_ancestors.map do |ancestor|
|
15
|
+
{ title: ancestor.title, url: ancestor.base_path }
|
16
|
+
end
|
17
|
+
|
18
|
+
ordered_ancestors << { title: "Home", url: "/" }
|
19
|
+
ordered_ancestors.reverse!
|
20
|
+
ordered_ancestors
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
attr_reader :content_item
|
26
|
+
|
27
|
+
def all_ancestors
|
28
|
+
ancestors = []
|
29
|
+
|
30
|
+
parent = content_item.parent
|
31
|
+
while parent
|
32
|
+
ancestors << parent
|
33
|
+
|
34
|
+
parent = parent.parent
|
35
|
+
end
|
36
|
+
|
37
|
+
ancestors
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -6,6 +6,7 @@ module GovukPublishingComponents
|
|
6
6
|
# and the bottom one the lowest priority
|
7
7
|
PRIORITY_TAXONS = {
|
8
8
|
education_coronavirus: "272308f4-05c8-4d0d-abc7-b7c2e3ccd249",
|
9
|
+
worker_coronavirus: "b7f57213-4b16-446d-8ded-81955d782680",
|
9
10
|
business_coronavirus: "65666cdf-b177-4d79-9687-b9c32805e450",
|
10
11
|
}.freeze
|
11
12
|
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module GovukPublishingComponents
|
2
|
+
module Presenters
|
3
|
+
class ContentBreadcrumbsBasedOnTopic
|
4
|
+
def self.call(content_item)
|
5
|
+
new(content_item).breadcrumbs
|
6
|
+
end
|
7
|
+
|
8
|
+
attr_reader :content_item
|
9
|
+
|
10
|
+
def initialize(content_item)
|
11
|
+
@content_item = content_item
|
12
|
+
end
|
13
|
+
|
14
|
+
def breadcrumbs
|
15
|
+
breadcrumbs = [{ title: "Home", url: "/" }]
|
16
|
+
return breadcrumbs unless topics.present?
|
17
|
+
|
18
|
+
breadcrumbs << topic_breadcrumb
|
19
|
+
breadcrumbs
|
20
|
+
end
|
21
|
+
|
22
|
+
def topic_breadcrumb
|
23
|
+
{
|
24
|
+
title: first_topic["title"],
|
25
|
+
url: first_topic["base_path"],
|
26
|
+
}
|
27
|
+
end
|
28
|
+
|
29
|
+
def first_topic
|
30
|
+
topics.first
|
31
|
+
end
|
32
|
+
|
33
|
+
def topics
|
34
|
+
@topics ||= content_item.dig("links", "topics")
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -26,15 +26,22 @@ module GovukPublishingComponents
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def taxon_breadcrumbs
|
29
|
-
@taxon_breadcrumbs ||= ContentBreadcrumbsBasedOnTaxons.
|
29
|
+
@taxon_breadcrumbs ||= ContentBreadcrumbsBasedOnTaxons.call(content_item)
|
30
30
|
end
|
31
31
|
|
32
32
|
def priority_breadcrumbs
|
33
33
|
@priority_breadcrumbs ||= ContentBreadcrumbsBasedOnPriority.call(content_item)
|
34
34
|
end
|
35
35
|
|
36
|
+
def topic_breadcrumbs
|
37
|
+
@topic_breadcrumbs ||= ContentBreadcrumbsBasedOnTopic.call(content_item)
|
38
|
+
end
|
39
|
+
|
36
40
|
def breadcrumbs
|
37
|
-
|
41
|
+
breadcrumbs_based_on_ancestors
|
42
|
+
end
|
43
|
+
|
44
|
+
def finder_breadcrumbs
|
38
45
|
return [] unless parent_finder
|
39
46
|
|
40
47
|
[
|
@@ -77,6 +84,10 @@ module GovukPublishingComponents
|
|
77
84
|
content_item["document_type"] == "html_publication"
|
78
85
|
end
|
79
86
|
|
87
|
+
def content_has_a_topic?
|
88
|
+
content_item.dig("links", "topics").present?
|
89
|
+
end
|
90
|
+
|
80
91
|
def tagged_to_brexit?
|
81
92
|
taxons = content_item.dig("links", "taxons").to_a
|
82
93
|
brexit_taxon = "d6c2de5d-ef90-45d1-82d4-5f2438369eea"
|
@@ -119,8 +130,8 @@ module GovukPublishingComponents
|
|
119
130
|
step_nav_helper.show_also_part_of_step_nav?
|
120
131
|
end
|
121
132
|
|
122
|
-
def
|
123
|
-
|
133
|
+
def breadcrumbs_based_on_ancestors
|
134
|
+
ContentBreadcrumbsBasedOnAncestors.call(content_item)
|
124
135
|
end
|
125
136
|
|
126
137
|
def step_nav_helper
|
@@ -3,6 +3,8 @@ module GovukPublishingComponents
|
|
3
3
|
# @private
|
4
4
|
# Only used by the step by step component
|
5
5
|
class PageWithStepByStepNavigation
|
6
|
+
MAX_SECTION_LENGTH = RelatedNavigationHelper::MAX_SECTION_LENGTH
|
7
|
+
|
6
8
|
def initialize(content_store_response, current_path, query_parameters = {})
|
7
9
|
@content_item = content_store_response.to_h.deep_symbolize_keys
|
8
10
|
@current_path = current_path
|
@@ -48,7 +50,7 @@ module GovukPublishingComponents
|
|
48
50
|
end
|
49
51
|
|
50
52
|
def show_also_part_of_step_nav?
|
51
|
-
active_step_by_step? && also_part_of_step_nav.any? && step_navs_combined_list.count <
|
53
|
+
active_step_by_step? && also_part_of_step_nav.any? && step_navs_combined_list.count < MAX_SECTION_LENGTH
|
52
54
|
end
|
53
55
|
|
54
56
|
def related_links
|
@@ -31,7 +31,7 @@ module GovukPublishingComponents
|
|
31
31
|
}
|
32
32
|
when :footer
|
33
33
|
{
|
34
|
-
"topics" =>
|
34
|
+
"topics" => related_topics_or_taxons,
|
35
35
|
"topical_events" => related_topical_events,
|
36
36
|
"world_locations" => related_world_locations,
|
37
37
|
"statistical_data_sets" => related_statistical_data_sets,
|
@@ -43,7 +43,7 @@ module GovukPublishingComponents
|
|
43
43
|
"related_items" => related_items,
|
44
44
|
"related_guides" => related_guides,
|
45
45
|
"collections" => related_document_collections,
|
46
|
-
"topics" =>
|
46
|
+
"topics" => related_topics_or_taxons,
|
47
47
|
"topical_events" => related_topical_events,
|
48
48
|
"world_locations" => related_world_locations,
|
49
49
|
"statistical_data_sets" => related_statistical_data_sets,
|
@@ -162,26 +162,27 @@ module GovukPublishingComponents
|
|
162
162
|
end
|
163
163
|
|
164
164
|
def related_taxons
|
165
|
-
content_item_links_for("taxons", only: "taxon")
|
165
|
+
@related_taxons ||= content_item_links_for("taxons", only: "taxon")
|
166
166
|
end
|
167
167
|
|
168
|
-
def
|
169
|
-
if
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
else
|
174
|
-
[]
|
175
|
-
end
|
168
|
+
def related_topics_or_taxons
|
169
|
+
return related_topics if related_topics.any?
|
170
|
+
return related_taxons if related_taxons.any?
|
171
|
+
|
172
|
+
[]
|
176
173
|
end
|
177
174
|
|
178
|
-
def
|
179
|
-
|
180
|
-
|
175
|
+
def related_topics
|
176
|
+
@related_topics ||= begin
|
177
|
+
mainstream_browse_page_links = content_item_links_for("mainstream_browse_pages", only: "mainstream_browse_page")
|
178
|
+
topic_links = content_item_links_for("topics", only: "topic")
|
179
|
+
|
180
|
+
return topic_links if topic_links.present? && mainstream_browse_page_links.empty?
|
181
181
|
|
182
|
-
|
183
|
-
|
184
|
-
|
182
|
+
mainstream_browse_page_links + topic_links.find_all do |topic_link|
|
183
|
+
mainstream_browse_page_links.none? do |mainstream_browse_page_link|
|
184
|
+
mainstream_browse_page_link[:text] == topic_link[:text]
|
185
|
+
end
|
185
186
|
end
|
186
187
|
end
|
187
188
|
end
|
@@ -2,6 +2,17 @@
|
|
2
2
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
4
4
|
|
5
|
+
### [3.5.5](https://github.com/dequelabs/axe-core/compare/v3.5.4...v3.5.5) (2020-06-16)
|
6
|
+
|
7
|
+
### Bug Fixes
|
8
|
+
|
9
|
+
- **aria-input-field-name:** add the missing word must to help metadata ([b0f5562](https://github.com/dequelabs/axe-core/commit/b0f5562ac2a746e8ac78f6e483e39162680f3a22))
|
10
|
+
- **color-contrast:** fix font-weight calculation for safari ([205b587](https://github.com/dequelabs/axe-core/commit/205b58709c280f00100bf24a7b6bf15da50ed0ed))
|
11
|
+
- **configure:** validate rules and checks properties ([8c91ead](https://github.com/dequelabs/axe-core/commit/8c91ead900fd3cab58f77af45cce54d02e734a8e))
|
12
|
+
- **is-visible:** return false for opacity: 0 and 0 height scrollable regions ([86ada3f](https://github.com/dequelabs/axe-core/commit/86ada3f7cef5b1fbcaad37b8acfaee93566ba8bf))
|
13
|
+
- **listitem:** do not fail for parent with role=presentation|none ([a3ddc6e](https://github.com/dequelabs/axe-core/commit/a3ddc6e1e43716b761e8bb42fba4842d88f813dc))
|
14
|
+
- **meta-viewport:** don't throw error if viewport property doesn't have a value ([2176794](https://github.com/dequelabs/axe-core/commit/2176794f8a831c8303984039e4a07b99d368b111))
|
15
|
+
|
5
16
|
### [3.5.4](https://github.com/dequelabs/axe-core/compare/v3.5.3...v3.5.4) (2020-05-22)
|
6
17
|
|
7
18
|
### Bug Fixes
|