govuk_publishing_components 21.52.1 → 21.53.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/app/views/govuk_publishing_components/components/_contextual_breadcrumbs.html.erb +5 -36
- data/lib/govuk_publishing_components.rb +1 -0
- data/lib/govuk_publishing_components/presenters/breadcrumb_selector.rb +105 -0
- data/lib/govuk_publishing_components/presenters/content_breadcrumbs_based_on_priority.rb +7 -1
- data/lib/govuk_publishing_components/presenters/content_breadcrumbs_based_on_taxons.rb +1 -3
- data/lib/govuk_publishing_components/presenters/contextual_navigation.rb +40 -19
- data/lib/govuk_publishing_components/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9b75297c083a34e5136622cab23b3e1b393318cf789a15ba9c5deca7d96a4115
|
4
|
+
data.tar.gz: 6cf830ee77d6f2126b007ed24a55e905d42884b80cac984d29bd900b1d1dbb3f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 365054c463d00d090f45861e6ce505a99c97b39e477759d94e1595254024c68bebaa02c329ec50b2635712d8a4fb7e1de34b17439473ee2136a0993a51fcdf97
|
7
|
+
data.tar.gz: f4a3fc8fc08f9e3e10840bcb8ef0bde1c94da69ef388ee6b5cf2be405ce4424bd35315a300c3e640af310a76e3c666c6ad2213bcfe9eaa47a084c9a1e314f6bf
|
@@ -1,47 +1,16 @@
|
|
1
|
-
<% navigation = GovukPublishingComponents::Presenters::ContextualNavigation.new(content_item, request) %>
|
2
1
|
<% prioritise_taxon_breadcrumbs ||= false %>
|
2
|
+
<% breadcrumb_selector = GovukPublishingComponents::Presenters::BreadcrumbSelector.call(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
6
|
<div class='gem-c-contextual-breadcrumbs'>
|
7
|
-
|
8
|
-
<% if navigation.priority_taxon %>
|
9
|
-
<%= render 'govuk_publishing_components/components/step_by_step_nav_header',
|
10
|
-
{
|
11
|
-
title: navigation.priority_taxon['title'],
|
12
|
-
path: navigation.priority_taxon['base_path']
|
13
|
-
}
|
14
|
-
%>
|
15
|
-
<% elsif navigation.content_tagged_to_current_step_by_step? %>
|
16
|
-
<%# Rendering step by step nav breadcrumbs because there's 1 step by step %>
|
7
|
+
<% if breadcrumb_selector[:step_by_step] %>
|
17
8
|
<%= render 'govuk_publishing_components/components/step_by_step_nav_header',
|
18
|
-
|
19
|
-
<% elsif
|
20
|
-
<%# Rendering finder breadcrumbs because the page is tagged to a finder %>
|
21
|
-
<%= render 'govuk_publishing_components/components/breadcrumbs', breadcrumbs: navigation.breadcrumbs, inverse: inverse, collapse_on_mobile: collapse_on_mobile %>
|
22
|
-
<% elsif navigation.content_is_tagged_to_a_live_taxon? && prioritise_taxon_breadcrumbs %>
|
23
|
-
<%# Rendering taxonomy breadcrumbs because the page is tagged to live taxons
|
24
|
-
and we want to prioritise them over all other breadcrumbs %>
|
9
|
+
breadcrumb_selector[:breadcrumbs] %>
|
10
|
+
<% elsif breadcrumb_selector[:breadcrumbs] %>
|
25
11
|
<%= render 'govuk_publishing_components/components/breadcrumbs',
|
26
|
-
breadcrumbs:
|
12
|
+
breadcrumbs: breadcrumb_selector[:breadcrumbs],
|
27
13
|
inverse: inverse,
|
28
14
|
collapse_on_mobile: collapse_on_mobile %>
|
29
|
-
<% elsif navigation.content_tagged_to_mainstream_browse_pages? %>
|
30
|
-
<%# Rendering parent-based breadcrumbs because the page is tagged to mainstream browse %>
|
31
|
-
<%= render 'govuk_publishing_components/components/breadcrumbs', breadcrumbs: navigation.breadcrumbs, inverse: inverse, collapse_on_mobile: collapse_on_mobile %>
|
32
|
-
<% elsif navigation.content_has_curated_related_items? %>
|
33
|
-
<%# Rendering parent-based breadcrumbs because the page has curated related links %>
|
34
|
-
<%= render 'govuk_publishing_components/components/breadcrumbs', breadcrumbs: navigation.breadcrumbs, inverse: inverse, collapse_on_mobile: collapse_on_mobile %>
|
35
|
-
<% elsif navigation.content_is_tagged_to_a_live_taxon? && !navigation.content_is_a_specialist_document? %>
|
36
|
-
<%# Rendering taxonomy breadcrumbs because the page is tagged to live taxons %>
|
37
|
-
<%= render 'govuk_publishing_components/components/breadcrumbs',
|
38
|
-
breadcrumbs: navigation.taxon_breadcrumbs[:breadcrumbs],
|
39
|
-
inverse: inverse,
|
40
|
-
collapse_on_mobile: collapse_on_mobile %>
|
41
|
-
<% elsif navigation.breadcrumbs.any? %>
|
42
|
-
<%# Rendering parent-based breadcrumbs because no browse, no related links, no live taxons %>
|
43
|
-
<%= render 'govuk_publishing_components/components/breadcrumbs', breadcrumbs: navigation.breadcrumbs, inverse: inverse, collapse_on_mobile: collapse_on_mobile %>
|
44
|
-
<% else %>
|
45
|
-
<%# Not rendering any breadcrumbs because there aren't any %>
|
46
15
|
<% end %>
|
47
16
|
</div>
|
@@ -6,6 +6,7 @@ require "govuk_publishing_components/engine"
|
|
6
6
|
require "govuk_publishing_components/presenters/shared_helper"
|
7
7
|
require "govuk_publishing_components/presenters/attachment"
|
8
8
|
require "govuk_publishing_components/presenters/breadcrumbs"
|
9
|
+
require "govuk_publishing_components/presenters/breadcrumb_selector"
|
9
10
|
require "govuk_publishing_components/presenters/button_helper"
|
10
11
|
require "govuk_publishing_components/presenters/contextual_navigation"
|
11
12
|
require "govuk_publishing_components/presenters/related_navigation_helper"
|
@@ -0,0 +1,105 @@
|
|
1
|
+
module GovukPublishingComponents
|
2
|
+
module Presenters
|
3
|
+
class BreadcrumbSelector
|
4
|
+
def self.call(*args)
|
5
|
+
new(*args).output
|
6
|
+
end
|
7
|
+
|
8
|
+
attr_reader :content_item, :request, :prioritise_taxon_breadcrumbs
|
9
|
+
|
10
|
+
def initialize(content_item, request, prioritise_taxon_breadcrumbs)
|
11
|
+
@content_item = content_item
|
12
|
+
@request = request
|
13
|
+
@prioritise_taxon_breadcrumbs = prioritise_taxon_breadcrumbs
|
14
|
+
end
|
15
|
+
|
16
|
+
def content_item_navigation
|
17
|
+
@content_item_navigation ||= ContextualNavigation.new(content_item, request)
|
18
|
+
end
|
19
|
+
|
20
|
+
def parent_item_navigation
|
21
|
+
@parent_item_navigation ||= ContextualNavigation.new(parent_item, request)
|
22
|
+
end
|
23
|
+
|
24
|
+
def parent_item
|
25
|
+
@parent_item ||= Services.content_store.content_item(content_item_navigation.parent_api_path)
|
26
|
+
rescue GdsApi::ContentStore::ItemNotFound
|
27
|
+
# Do nothing
|
28
|
+
end
|
29
|
+
|
30
|
+
def parent_item_options
|
31
|
+
@parent_item_options ||= options(parent_item_navigation)
|
32
|
+
end
|
33
|
+
|
34
|
+
def content_item_options
|
35
|
+
@content_item_options ||= options(content_item_navigation)
|
36
|
+
end
|
37
|
+
|
38
|
+
def parent_breadcrumbs
|
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
|
49
|
+
return content_item_options unless content_item_navigation.html_document_with_parent?
|
50
|
+
return parent_item_options if parent_item_navigation.priority_breadcrumbs
|
51
|
+
|
52
|
+
{
|
53
|
+
step_by_step: parent_item_options[:step_by_step],
|
54
|
+
breadcrumbs: parent_breadcrumbs,
|
55
|
+
}
|
56
|
+
end
|
57
|
+
|
58
|
+
def options(navigation)
|
59
|
+
if navigation.priority_breadcrumbs
|
60
|
+
{
|
61
|
+
step_by_step: true,
|
62
|
+
breadcrumbs: navigation.priority_breadcrumbs,
|
63
|
+
}
|
64
|
+
elsif navigation.content_tagged_to_current_step_by_step?
|
65
|
+
{
|
66
|
+
step_by_step: true,
|
67
|
+
breadcrumbs: navigation.step_nav_helper.header,
|
68
|
+
}
|
69
|
+
elsif navigation.content_tagged_to_a_finder?
|
70
|
+
{
|
71
|
+
step_by_step: false,
|
72
|
+
breadcrumbs: navigation.breadcrumbs,
|
73
|
+
}
|
74
|
+
elsif navigation.content_is_tagged_to_a_live_taxon? && prioritise_taxon_breadcrumbs
|
75
|
+
{
|
76
|
+
step_by_step: false,
|
77
|
+
breadcrumbs: navigation.taxon_breadcrumbs,
|
78
|
+
}
|
79
|
+
elsif navigation.content_tagged_to_mainstream_browse_pages?
|
80
|
+
{
|
81
|
+
step_by_step: false,
|
82
|
+
breadcrumbs: navigation.breadcrumbs,
|
83
|
+
}
|
84
|
+
elsif navigation.content_has_curated_related_items?
|
85
|
+
{
|
86
|
+
step_by_step: false,
|
87
|
+
breadcrumbs: navigation.breadcrumbs,
|
88
|
+
}
|
89
|
+
elsif navigation.use_taxon_breadcrumbs?
|
90
|
+
{
|
91
|
+
step_by_step: false,
|
92
|
+
breadcrumbs: navigation.taxon_breadcrumbs,
|
93
|
+
}
|
94
|
+
elsif navigation.breadcrumbs.any?
|
95
|
+
{
|
96
|
+
step_by_step: false,
|
97
|
+
breadcrumbs: navigation.breadcrumbs,
|
98
|
+
}
|
99
|
+
else
|
100
|
+
{}
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
@@ -11,7 +11,7 @@ module GovukPublishingComponents
|
|
11
11
|
|
12
12
|
# Returns the highest priority taxon that has a content_id matching those in PRIORITY_TAXONS
|
13
13
|
def self.call(content_item)
|
14
|
-
new(content_item).
|
14
|
+
new(content_item).breadcrumbs
|
15
15
|
end
|
16
16
|
|
17
17
|
attr_reader :content_item
|
@@ -24,9 +24,15 @@ module GovukPublishingComponents
|
|
24
24
|
@taxon ||= priority_taxons.min_by { |t| PRIORITY_TAXONS.values.index(t["content_id"]) }
|
25
25
|
end
|
26
26
|
|
27
|
+
def breadcrumbs
|
28
|
+
taxon && { title: taxon["title"], path: taxon["base_path"] }
|
29
|
+
end
|
30
|
+
|
27
31
|
private
|
28
32
|
|
29
33
|
def priority_taxons
|
34
|
+
return [] unless content_item["links"].is_a?(Hash)
|
35
|
+
|
30
36
|
taxons = content_item.dig("links", "taxons")
|
31
37
|
taxon_tree(taxons).select do |taxon|
|
32
38
|
priority_taxon?(taxon)
|
@@ -16,32 +16,41 @@ module GovukPublishingComponents
|
|
16
16
|
content_item["document_type"] == "simple_smart_answer"
|
17
17
|
end
|
18
18
|
|
19
|
+
def html_document_with_parent?
|
20
|
+
(content_item["document_type"] == "html_publication") && parent_api_path
|
21
|
+
end
|
22
|
+
|
23
|
+
def parent_api_path
|
24
|
+
parent = content_item.dig("links", "parent")&.first
|
25
|
+
parent["base_path"] if parent
|
26
|
+
end
|
27
|
+
|
19
28
|
def taxon_breadcrumbs
|
20
29
|
@taxon_breadcrumbs ||= ContentBreadcrumbsBasedOnTaxons.new(content_item).breadcrumbs
|
21
30
|
end
|
22
31
|
|
23
|
-
def
|
24
|
-
@
|
32
|
+
def priority_breadcrumbs
|
33
|
+
@priority_breadcrumbs ||= ContentBreadcrumbsBasedOnPriority.call(content_item)
|
25
34
|
end
|
26
35
|
|
27
36
|
def breadcrumbs
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
37
|
+
return breadcrumbs_based_on_parent unless content_tagged_to_a_finder?
|
38
|
+
return [] unless parent_finder
|
39
|
+
|
40
|
+
[
|
41
|
+
{
|
42
|
+
title: "Home",
|
43
|
+
url: "/",
|
44
|
+
},
|
45
|
+
{
|
46
|
+
title: parent_finder["title"],
|
47
|
+
url: parent_finder["base_path"],
|
48
|
+
},
|
49
|
+
]
|
50
|
+
end
|
51
|
+
|
52
|
+
def use_taxon_breadcrumbs?
|
53
|
+
content_is_tagged_to_a_live_taxon? && !content_is_a_specialist_document?
|
45
54
|
end
|
46
55
|
|
47
56
|
def content_tagged_to_a_finder?
|
@@ -64,6 +73,10 @@ module GovukPublishingComponents
|
|
64
73
|
content_item["schema_name"] == "specialist_document"
|
65
74
|
end
|
66
75
|
|
76
|
+
def content_is_a_html_publication?
|
77
|
+
content_item["document_type"] == "html_publication"
|
78
|
+
end
|
79
|
+
|
67
80
|
def tagged_to_brexit?
|
68
81
|
taxons = content_item.dig("links", "taxons").to_a
|
69
82
|
brexit_taxon = "d6c2de5d-ef90-45d1-82d4-5f2438369eea"
|
@@ -106,9 +119,17 @@ module GovukPublishingComponents
|
|
106
119
|
step_nav_helper.show_also_part_of_step_nav?
|
107
120
|
end
|
108
121
|
|
122
|
+
def breadcrumbs_based_on_parent
|
123
|
+
ContentBreadcrumbsBasedOnParent.new(content_item).breadcrumbs[:breadcrumbs]
|
124
|
+
end
|
125
|
+
|
109
126
|
def step_nav_helper
|
110
127
|
@step_nav_helper ||= PageWithStepByStepNavigation.new(content_item, request_path, query_parameters)
|
111
128
|
end
|
129
|
+
|
130
|
+
def parent_finder
|
131
|
+
@parent_finder ||= content_item.dig("links", "finder", 0)
|
132
|
+
end
|
112
133
|
end
|
113
134
|
end
|
114
135
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: govuk_publishing_components
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 21.
|
4
|
+
version: 21.53.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GOV.UK Dev
|
@@ -748,6 +748,7 @@ files:
|
|
748
748
|
- lib/govuk_publishing_components/engine.rb
|
749
749
|
- lib/govuk_publishing_components/minitest/component_guide_test.rb
|
750
750
|
- lib/govuk_publishing_components/presenters/attachment.rb
|
751
|
+
- lib/govuk_publishing_components/presenters/breadcrumb_selector.rb
|
751
752
|
- lib/govuk_publishing_components/presenters/breadcrumbs.rb
|
752
753
|
- lib/govuk_publishing_components/presenters/button_helper.rb
|
753
754
|
- lib/govuk_publishing_components/presenters/checkboxes_helper.rb
|