govuk_publishing_components 21.50.0 → 21.53.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/govuk_publishing_components/all_components.js +1 -3
- data/app/assets/javascripts/govuk_publishing_components/components/accordion.js +3 -0
- data/app/assets/javascripts/govuk_publishing_components/components/button.js +5 -0
- data/app/assets/javascripts/govuk_publishing_components/components/character-count.js +3 -0
- data/app/assets/javascripts/govuk_publishing_components/components/checkboxes.js +2 -1
- data/app/assets/javascripts/govuk_publishing_components/components/error-summary.js +3 -0
- data/app/assets/javascripts/govuk_publishing_components/components/header.js +5 -0
- data/app/assets/javascripts/govuk_publishing_components/components/radio.js +3 -0
- data/app/assets/javascripts/govuk_publishing_components/components/tabs.js +5 -0
- data/app/assets/javascripts/govuk_publishing_components/lib.js +1 -0
- data/app/assets/javascripts/govuk_publishing_components/modules.js +15 -3
- data/app/assets/stylesheets/component_guide/application.scss +0 -7
- data/app/assets/stylesheets/govuk_publishing_components/_all_components.scss +4 -13
- data/app/assets/stylesheets/govuk_publishing_components/components/_action-link.scss +7 -2
- data/app/assets/stylesheets/govuk_publishing_components/components/_input.scss +13 -4
- data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_steps.scss +1 -1
- data/app/assets/stylesheets/govuk_publishing_components/components/helpers/_brand-colours.scss +0 -3
- data/app/controllers/govuk_publishing_components/component_guide_controller.rb +24 -0
- data/app/views/govuk_publishing_components/component_guide/index.html.erb +8 -1
- data/app/views/govuk_publishing_components/components/_action_link.html.erb +16 -8
- data/app/views/govuk_publishing_components/components/_contextual_breadcrumbs.html.erb +5 -36
- data/app/views/govuk_publishing_components/components/_input.html.erb +12 -1
- data/app/views/govuk_publishing_components/components/docs/input.yml +9 -0
- 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 +19 -9
- 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/presenters/machine_readable/faq_page_schema.rb +5 -29
- data/lib/govuk_publishing_components/version.rb +1 -1
- metadata +7 -2
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,2 +1,5 @@
|
|
1
1
|
// This component relies on JavaScript from GOV.UK Frontend
|
2
2
|
// = require govuk/components/character-count/character-count.js
|
3
|
+
window.GOVUK = window.GOVUK || {}
|
4
|
+
window.GOVUK.Modules = window.GOVUK.Modules || {}
|
5
|
+
window.GOVUK.Modules.CharacterCount = window.GOVUKFrontend
|
@@ -1,7 +1,8 @@
|
|
1
1
|
/* eslint-env jquery */
|
2
2
|
// = require govuk/components/checkboxes/checkboxes.js
|
3
3
|
window.GOVUK = window.GOVUK || {}
|
4
|
-
window.GOVUK.Modules = window.GOVUK.Modules || {}
|
4
|
+
window.GOVUK.Modules = window.GOVUK.Modules || {}
|
5
|
+
window.GOVUK.Modules.Checkboxes = window.GOVUKFrontend;
|
5
6
|
|
6
7
|
(function (Modules) {
|
7
8
|
'use strict'
|
@@ -0,0 +1 @@
|
|
1
|
+
// = require_tree ./lib
|
@@ -28,13 +28,25 @@
|
|
28
28
|
for (var i = 0, l = modules.length; i < l; i++) {
|
29
29
|
var module
|
30
30
|
var element = $(modules[i])
|
31
|
-
var
|
31
|
+
var moduleName = camelCaseAndCapitalise(element.data('module'))
|
32
32
|
var started = element.data('module-started')
|
33
|
+
var frontendModuleName = moduleName.replace('Govuk', '')
|
33
34
|
|
34
|
-
if (
|
35
|
-
|
35
|
+
if ( // GOV.UK Publishing & Legacy Modules
|
36
|
+
typeof GOVUK.Modules[moduleName] === 'function' &&
|
37
|
+
!GOVUK.Modules[moduleName].prototype.init &&
|
38
|
+
!started
|
39
|
+
) {
|
40
|
+
module = new GOVUK.Modules[moduleName]()
|
36
41
|
module.start(element)
|
37
42
|
element.data('module-started', true)
|
43
|
+
} else if ( // GOV.UK Frontend Modules
|
44
|
+
typeof GOVUK.Modules[frontendModuleName] === 'function' &&
|
45
|
+
GOVUK.Modules[frontendModuleName].prototype.init &&
|
46
|
+
!started
|
47
|
+
) {
|
48
|
+
module = new GOVUK.Modules[frontendModuleName](element[0]).init()
|
49
|
+
element.data('module-started', true)
|
38
50
|
}
|
39
51
|
}
|
40
52
|
|
@@ -1,12 +1,5 @@
|
|
1
1
|
// This file contains the styles for the Component Guide.
|
2
2
|
|
3
|
-
@import "govuk_publishing_components/components/helpers/govuk-frontend-settings";
|
4
|
-
@import "govuk_publishing_components/components/helpers/markdown-typography";
|
5
|
-
@import "govuk/settings/all";
|
6
|
-
@import "govuk/tools/all";
|
7
|
-
@import "govuk/helpers/all";
|
8
|
-
@import "govuk/core/all";
|
9
|
-
|
10
3
|
@import "govuk_publishing_components/all_components";
|
11
4
|
|
12
5
|
$gem-guide-border-width: 1px;
|
@@ -1,20 +1,11 @@
|
|
1
1
|
// This is the file that the application needs to include in order to use
|
2
2
|
// the components.
|
3
3
|
|
4
|
-
|
4
|
+
@import "govuk_publishing_components/govuk_frontend_support";
|
5
|
+
@import "govuk_publishing_components/component_support";
|
5
6
|
|
6
|
-
|
7
|
-
|
8
|
-
// Include common imports used by many components
|
9
|
-
@import "govuk/all";
|
10
|
-
|
11
|
-
@import "components/helpers/variables";
|
12
|
-
@import "components/helpers/brand-colours";
|
13
|
-
@import "components/mixins/govuk-template-link-focus-override";
|
14
|
-
@import "components/mixins/media-down";
|
15
|
-
@import "components/mixins/margins";
|
16
|
-
@import "components/mixins/clearfix";
|
17
|
-
@import "components/mixins/css3";
|
7
|
+
// Include all govuk frontend components
|
8
|
+
@import "govuk/components/all";
|
18
9
|
|
19
10
|
// components
|
20
11
|
@import "components/accordion";
|
@@ -20,6 +20,11 @@
|
|
20
20
|
}
|
21
21
|
}
|
22
22
|
|
23
|
+
.gem-c-action-link__contents-wrapper {
|
24
|
+
display: table-cell;
|
25
|
+
vertical-align: middle;
|
26
|
+
}
|
27
|
+
|
23
28
|
.gem-c-action-link__link-wrapper {
|
24
29
|
@include govuk-font(19, $weight: bold, $line-height: 1.3);
|
25
30
|
display: table-cell;
|
@@ -89,7 +94,7 @@
|
|
89
94
|
background-image: image-url("govuk_publishing_components/action-link-arrow--simple.svg");
|
90
95
|
// sass-lint:enable no-duplicate-properties
|
91
96
|
background-size: 25px auto;
|
92
|
-
background-position: 0
|
97
|
+
background-position: 0 2px;
|
93
98
|
}
|
94
99
|
|
95
100
|
.gem-c-action-link__link {
|
@@ -112,7 +117,7 @@
|
|
112
117
|
background-image: image-url("govuk_publishing_components/action-link-arrow--dark.svg");
|
113
118
|
// sass-lint:enable no-duplicate-properties
|
114
119
|
background-size: 25px auto;
|
115
|
-
background-position: 0
|
120
|
+
background-position: 0 2px;
|
116
121
|
}
|
117
122
|
|
118
123
|
.gem-c-action-link__link {
|
@@ -31,22 +31,31 @@
|
|
31
31
|
}
|
32
32
|
}
|
33
33
|
|
34
|
+
.gem-c-input__prefix,
|
34
35
|
.gem-c-input__suffix {
|
35
36
|
@include govuk-font($size: 19);
|
36
37
|
|
37
38
|
background-color: govuk-colour("light-grey", $legacy: "grey-3");
|
38
39
|
border: $govuk-border-width-form-element solid $govuk-input-border-colour;
|
39
|
-
border-left: 0;
|
40
40
|
box-sizing: border-box;
|
41
41
|
cursor: default; // emphasise non-editable status of prefixes and suffixes
|
42
42
|
display: inline-block;
|
43
|
-
flex: 0 0 0;
|
44
|
-
padding: govuk-spacing(1);
|
45
43
|
white-space: nowrap;
|
46
44
|
width: auto;
|
45
|
+
text-align: center;
|
47
46
|
height: 40px;
|
47
|
+
padding: govuk-spacing(1);
|
48
|
+
min-width: 40px;
|
48
49
|
@if $govuk-typography-use-rem {
|
49
|
-
|
50
|
+
min-width: govuk-px-to-rem(40px);
|
50
51
|
}
|
51
52
|
margin-top: 0;
|
52
53
|
}
|
54
|
+
|
55
|
+
.gem-c-input__prefix {
|
56
|
+
border-right: 0;
|
57
|
+
}
|
58
|
+
|
59
|
+
.gem-c-input__suffix {
|
60
|
+
border-left: 0;
|
61
|
+
}
|
@@ -10,7 +10,7 @@
|
|
10
10
|
margin-left: 0;
|
11
11
|
padding: .75em 0 .75em 2.5em;
|
12
12
|
|
13
|
-
@for $i from 1 through
|
13
|
+
@for $i from 1 through 30 {
|
14
14
|
&:nth-child(#{$i}) {
|
15
15
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='250' height='250'%3E%3Ccircle cx='125' cy='125' r='100' fill='black' /%3E%3Ctext x='50%25' y='50%25' text-anchor='middle' alignment-baseline='middle' font-family='sans-serif' font-size='100px' fill='white'%3E#{$i}%3C/text%3E%3C/svg%3E");
|
16
16
|
background-repeat: no-repeat;
|
@@ -10,6 +10,7 @@ module GovukPublishingComponents
|
|
10
10
|
@components_in_use_docs = components_in_use_docs.used_in_this_app
|
11
11
|
@components_in_use_sass = components_in_use_sass(false)
|
12
12
|
@components_in_use_print_sass = components_in_use_sass(true)
|
13
|
+
@components_in_use_js = components_in_use_js
|
13
14
|
end
|
14
15
|
|
15
16
|
def show
|
@@ -62,6 +63,25 @@ module GovukPublishingComponents
|
|
62
63
|
}.compact.uniq.sort.join("\n").squeeze("\n").prepend(additional_files)
|
63
64
|
end
|
64
65
|
|
66
|
+
def components_in_use_js
|
67
|
+
additional_files = "//= require govuk_publishing_components/lib\n"
|
68
|
+
|
69
|
+
components = components_in_use
|
70
|
+
extra_components = []
|
71
|
+
|
72
|
+
components.each do |component|
|
73
|
+
components_in_component = components_within_component(component)
|
74
|
+
extra_components << components_in_component
|
75
|
+
end
|
76
|
+
|
77
|
+
components << extra_components.compact
|
78
|
+
components = components.flatten.uniq.sort
|
79
|
+
|
80
|
+
components.map { |component|
|
81
|
+
"//= require govuk_publishing_components/components/#{component.gsub('_', '-')}" if component_has_js_file(component.gsub("_", "-"))
|
82
|
+
}.compact.uniq.sort.join("\n").squeeze("\n").prepend(additional_files)
|
83
|
+
end
|
84
|
+
|
65
85
|
private
|
66
86
|
|
67
87
|
def component_docs
|
@@ -95,6 +115,10 @@ module GovukPublishingComponents
|
|
95
115
|
Pathname.new(@component_gem_path + "/app/assets/stylesheets/govuk_publishing_components/components/#{print_path}_#{component}.scss").exist?
|
96
116
|
end
|
97
117
|
|
118
|
+
def component_has_js_file(component)
|
119
|
+
Pathname.new(@component_gem_path + "/app/assets/javascripts/govuk_publishing_components/components/#{component}.js").exist?
|
120
|
+
end
|
121
|
+
|
98
122
|
def components_within_component(component)
|
99
123
|
data = File.read(@component_gem_path + "/app/views/govuk_publishing_components/components/_#{component}.html.erb")
|
100
124
|
match = data.scan(/(govuk_publishing_components\/components\/[a-z_-]+)/)
|
@@ -20,7 +20,7 @@
|
|
20
20
|
<h2 class="component-doc-h2">Gem components used by this app (<%= @components_in_use_docs.length %>)</h2>
|
21
21
|
|
22
22
|
<%= render "govuk_publishing_components/components/details", {
|
23
|
-
title: "Suggested
|
23
|
+
title: "Suggested imports for this application"
|
24
24
|
} do %>
|
25
25
|
<%= render "govuk_publishing_components/components/textarea", {
|
26
26
|
label: {
|
@@ -36,6 +36,13 @@
|
|
36
36
|
name: "print-sass",
|
37
37
|
value: @components_in_use_print_sass
|
38
38
|
} %>
|
39
|
+
<%= render "govuk_publishing_components/components/textarea", {
|
40
|
+
label: {
|
41
|
+
text: "Add this to your application's main js file, before your other local imports."
|
42
|
+
},
|
43
|
+
name: "main-js",
|
44
|
+
value: @components_in_use_js
|
45
|
+
} %>
|
39
46
|
<% end %>
|
40
47
|
<pre>
|
41
48
|
|
@@ -24,16 +24,24 @@
|
|
24
24
|
%>
|
25
25
|
<% if href.present? && text.present? %>
|
26
26
|
<div class="<%= css_classes.join(' ') %>">
|
27
|
-
|
28
|
-
|
29
|
-
<%=
|
30
|
-
|
27
|
+
<% contents = capture do %>
|
28
|
+
<span class="gem-c-action-link__link-wrapper">
|
29
|
+
<%= link_to href, :class => link_classes, :data => data do %>
|
30
|
+
<%= text %>
|
31
|
+
<%= content_tag(:span, nowrap_text, class: "gem-c-action-link__nowrap-text") if nowrap_text %>
|
32
|
+
<% end %>
|
33
|
+
</span>
|
34
|
+
<% if subtext %>
|
35
|
+
<span class="gem-c-action-link__subtext-wrapper">
|
36
|
+
<%= content_tag(:span, subtext, class: "gem-c-action-link__subtext") %>
|
37
|
+
</span>
|
31
38
|
<% end %>
|
32
|
-
|
39
|
+
<% end %>
|
40
|
+
|
33
41
|
<% if subtext %>
|
34
|
-
|
35
|
-
|
36
|
-
|
42
|
+
<%= content_tag(:span, contents, class: "gem-c-action-link__contents-wrapper") %>
|
43
|
+
<% else %>
|
44
|
+
<%= contents %>
|
37
45
|
<% end %>
|
38
46
|
</div>
|
39
47
|
<% end %>
|
@@ -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>
|
@@ -22,6 +22,7 @@
|
|
22
22
|
error_id = "error-#{SecureRandom.hex(4)}"
|
23
23
|
search_icon ||= nil
|
24
24
|
heading_size = false unless ['s', 'm', 'l', 'xl'].include?(heading_size)
|
25
|
+
prefix ||= nil
|
25
26
|
suffix ||= nil
|
26
27
|
|
27
28
|
css_classes = %w(gem-c-input govuk-input)
|
@@ -92,7 +93,17 @@
|
|
92
93
|
}
|
93
94
|
%>
|
94
95
|
|
95
|
-
<% if suffix %>
|
96
|
+
<% if prefix && suffix %>
|
97
|
+
<%= tag.div class: "gem-c-input__wrapper" do %>
|
98
|
+
<%= tag.span prefix, class: "gem-c-input__prefix", aria: { hidden: true } %>
|
99
|
+
<%= input_tag %>
|
100
|
+
<%= tag.span suffix, class: "gem-c-input__suffix", aria: { hidden: true } %>
|
101
|
+
<% end %>
|
102
|
+
<% elsif prefix %>
|
103
|
+
<%= tag.div class: "gem-c-input__wrapper" do %>
|
104
|
+
<%= tag.span prefix, class: "gem-c-input__prefix", aria: { hidden: true } %><%= input_tag %>
|
105
|
+
<% end %>
|
106
|
+
<% elsif suffix %>
|
96
107
|
<%= tag.div class: "gem-c-input__wrapper" do %>
|
97
108
|
<%= input_tag %><%= tag.span suffix, class: "gem-c-input__suffix", aria: { hidden: true } %>
|
98
109
|
<% end %>
|
@@ -140,6 +140,15 @@ examples:
|
|
140
140
|
name: "lead-times"
|
141
141
|
width: 10
|
142
142
|
suffix: "days"
|
143
|
+
with_prefix_and_suffix:
|
144
|
+
description: To help users understand how the input should look like. Often used for units of measurement.
|
145
|
+
data:
|
146
|
+
label:
|
147
|
+
text: "Cost per item, in pounds"
|
148
|
+
name: "Cost-per-item"
|
149
|
+
width: 10
|
150
|
+
prefix: "£"
|
151
|
+
suffix: "per item"
|
143
152
|
with_suffix_and_error:
|
144
153
|
description: To help users understand how the input should look like. Often used for units of measurement.
|
145
154
|
data:
|
@@ -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,19 +24,29 @@ 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
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
+
return [] unless content_item["links"].is_a?(Hash)
|
35
|
+
|
36
|
+
taxons = content_item.dig("links", "taxons")
|
37
|
+
taxon_tree(taxons).select do |taxon|
|
38
|
+
priority_taxon?(taxon)
|
34
39
|
end
|
35
|
-
|
40
|
+
end
|
41
|
+
|
42
|
+
def taxon_tree(taxons)
|
43
|
+
return [] if taxons.blank?
|
44
|
+
|
45
|
+
taxons + taxons.flat_map { |taxon| taxon_tree(taxon.dig("links", "parent_taxons")) }
|
46
|
+
end
|
36
47
|
|
37
|
-
|
38
|
-
|
39
|
-
taxons
|
48
|
+
def priority_taxon?(taxon)
|
49
|
+
PRIORITY_TAXONS.values.include?(taxon["content_id"])
|
40
50
|
end
|
41
51
|
end
|
42
52
|
end
|
@@ -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
|
@@ -58,29 +58,10 @@ module GovukPublishingComponents
|
|
58
58
|
question = page.title
|
59
59
|
|
60
60
|
doc.xpath("html/body").children.each_with_object({}) do |element, q_and_as|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
def recursive_question_and_answers(element, question, q_and_as)
|
66
|
-
if is_a_question?(element)
|
67
|
-
question = element.text
|
68
|
-
q_and_as[question] = { anchor: element["id"] }
|
69
|
-
else
|
70
|
-
q_and_as = add_answer_to_question(q_and_as, element, question)
|
71
|
-
element.children.each do |child_element|
|
72
|
-
if child_element.element?
|
73
|
-
q_and_as, question = recursive_question_and_answers(child_element, question, q_and_as)
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
[q_and_as, question]
|
79
|
-
end
|
80
|
-
|
81
|
-
def add_answer_to_question(q_and_as, element, question)
|
82
|
-
if no_questions_in_subtree?(element)
|
83
|
-
if question_hash_is_unset?(q_and_as, question)
|
61
|
+
if question_element?(element)
|
62
|
+
question = element.text
|
63
|
+
q_and_as[question] = { anchor: element["id"] }
|
64
|
+
elsif question_hash_is_unset?(q_and_as, question)
|
84
65
|
q_and_as[question] = { answer: element.to_s }
|
85
66
|
elsif answer_is_unset?(q_and_as, question)
|
86
67
|
q_and_as[question][:answer] = element.to_s
|
@@ -88,11 +69,6 @@ module GovukPublishingComponents
|
|
88
69
|
q_and_as[question][:answer] << element.to_s
|
89
70
|
end
|
90
71
|
end
|
91
|
-
q_and_as
|
92
|
-
end
|
93
|
-
|
94
|
-
def no_questions_in_subtree?(element)
|
95
|
-
element.search(QUESTION_TAG).none?
|
96
72
|
end
|
97
73
|
|
98
74
|
def question_hash_is_unset?(q_and_as, question)
|
@@ -106,7 +82,7 @@ module GovukPublishingComponents
|
|
106
82
|
# we use H2 tags as the "question" and the html between them as the "answer"
|
107
83
|
QUESTION_TAG = "h2".freeze
|
108
84
|
|
109
|
-
def
|
85
|
+
def question_element?(element)
|
110
86
|
element.name == QUESTION_TAG
|
111
87
|
end
|
112
88
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
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
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-05-
|
11
|
+
date: 2020-05-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gds-api-adapters
|
@@ -408,6 +408,7 @@ files:
|
|
408
408
|
- app/assets/javascripts/component_guide/visual-regression.js
|
409
409
|
- app/assets/javascripts/govuk_publishing_components/all_components.js
|
410
410
|
- app/assets/javascripts/govuk_publishing_components/components/accordion.js
|
411
|
+
- app/assets/javascripts/govuk_publishing_components/components/button.js
|
411
412
|
- app/assets/javascripts/govuk_publishing_components/components/character-count.js
|
412
413
|
- app/assets/javascripts/govuk_publishing_components/components/checkboxes.js
|
413
414
|
- app/assets/javascripts/govuk_publishing_components/components/contextual-guidance.js
|
@@ -417,11 +418,14 @@ files:
|
|
417
418
|
- app/assets/javascripts/govuk_publishing_components/components/error-summary.js
|
418
419
|
- app/assets/javascripts/govuk_publishing_components/components/feedback.js
|
419
420
|
- app/assets/javascripts/govuk_publishing_components/components/govspeak.js
|
421
|
+
- app/assets/javascripts/govuk_publishing_components/components/header.js
|
420
422
|
- app/assets/javascripts/govuk_publishing_components/components/initial-focus.js
|
421
423
|
- app/assets/javascripts/govuk_publishing_components/components/modal-dialogue.js
|
422
424
|
- app/assets/javascripts/govuk_publishing_components/components/radio.js
|
423
425
|
- app/assets/javascripts/govuk_publishing_components/components/step-by-step-nav.js
|
426
|
+
- app/assets/javascripts/govuk_publishing_components/components/tabs.js
|
424
427
|
- app/assets/javascripts/govuk_publishing_components/dependencies.js
|
428
|
+
- app/assets/javascripts/govuk_publishing_components/lib.js
|
425
429
|
- app/assets/javascripts/govuk_publishing_components/lib/cookie-functions.js
|
426
430
|
- app/assets/javascripts/govuk_publishing_components/lib/current-location.js
|
427
431
|
- app/assets/javascripts/govuk_publishing_components/lib/govspeak/barchart-enhancement.js
|
@@ -744,6 +748,7 @@ files:
|
|
744
748
|
- lib/govuk_publishing_components/engine.rb
|
745
749
|
- lib/govuk_publishing_components/minitest/component_guide_test.rb
|
746
750
|
- lib/govuk_publishing_components/presenters/attachment.rb
|
751
|
+
- lib/govuk_publishing_components/presenters/breadcrumb_selector.rb
|
747
752
|
- lib/govuk_publishing_components/presenters/breadcrumbs.rb
|
748
753
|
- lib/govuk_publishing_components/presenters/button_helper.rb
|
749
754
|
- lib/govuk_publishing_components/presenters/checkboxes_helper.rb
|