govuk_tech_docs 1.3.1 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/docs/configuration.md +16 -0
- data/docs/frontmatter.md +11 -0
- data/example/config/tech-docs.yml +6 -0
- data/lib/assets/javascripts/_modules/collapsible-navigation.js +93 -0
- data/lib/assets/javascripts/_modules/in-page-navigation.js +6 -2
- data/lib/assets/javascripts/_modules/table-of-contents.js +10 -2
- data/lib/assets/javascripts/_start-modules.js +1 -0
- data/lib/assets/stylesheets/_core.scss +1 -0
- data/lib/assets/stylesheets/modules/_collapsible.scss +45 -0
- data/lib/assets/stylesheets/modules/_toc.scss +1 -6
- data/lib/govuk_tech_docs/table_of_contents/heading.rb +3 -2
- data/lib/govuk_tech_docs/table_of_contents/headings_builder.rb +4 -2
- data/lib/govuk_tech_docs/table_of_contents/helpers.rb +50 -3
- data/lib/govuk_tech_docs/version.rb +1 -1
- data/lib/source/images/arrow-down.svg +9 -0
- data/lib/source/images/arrow-up.svg +9 -0
- data/lib/source/layouts/core.erb +1 -1
- data/lib/source/layouts/layout.erb +6 -4
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d445bcd8c1daf9778f0a3e0d8cb352fab848b46c
|
4
|
+
data.tar.gz: d7fbb83f2f8e7f339033063acb560ad555fae7ce
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5708cfb64dd99b8741711fcea030bffbcf81c7da49dfaed23a99215fae6140e07200a390760ff0e2334555787ffc9af191c454be96f74a679d74b93cf2723996
|
7
|
+
data.tar.gz: 42eb4aa9614ae826b2214ebfc4db24aae6c089e1d571986858baf348527382600940b3c7dc80c2fa864477397aca3752a2b8c4972185685f190173fe6ca72988
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 1.4.0
|
4
|
+
|
5
|
+
Adds multiple page navigation support and collapsible top level navigation
|
6
|
+
items. When enabled the table of contents will display other pages on the site.
|
7
|
+
|
8
|
+
More info:
|
9
|
+
- https://github.com/alphagov/tech-docs-gem/pull/27
|
10
|
+
|
3
11
|
## 1.3.1
|
4
12
|
|
5
13
|
Minor update to Google Analytics tracking
|
data/docs/configuration.md
CHANGED
@@ -49,6 +49,22 @@ Example:
|
|
49
49
|
host: https://docs.cloud.service.gov.uk
|
50
50
|
```
|
51
51
|
|
52
|
+
## `collapsible_nav`
|
53
|
+
|
54
|
+
Enable collapsible navigation in the sidebar. Defaults to false;
|
55
|
+
|
56
|
+
```yaml
|
57
|
+
collapsible_nav: true
|
58
|
+
```
|
59
|
+
|
60
|
+
## `multipage_nav`
|
61
|
+
|
62
|
+
Enable multipage navigation in the sidebar. Defaults to false;
|
63
|
+
|
64
|
+
```yaml
|
65
|
+
multipage_nav: true
|
66
|
+
```
|
67
|
+
|
52
68
|
## `max_toc_heading_level`
|
53
69
|
|
54
70
|
Table of contents depth – how many levels to include in the table of contents. If your ToC is too long, reduce this number and we'll only show higher-level headings.
|
data/docs/frontmatter.md
CHANGED
@@ -110,6 +110,17 @@ title: My beautiful page
|
|
110
110
|
---
|
111
111
|
```
|
112
112
|
|
113
|
+
## `weight`
|
114
|
+
|
115
|
+
Affects the order a page is displayed in the sidebar navigation tree. Lower
|
116
|
+
weights float to the top. Higher weights sink to the bottom.
|
117
|
+
|
118
|
+
```yaml
|
119
|
+
---
|
120
|
+
weight: 20
|
121
|
+
---
|
122
|
+
```
|
123
|
+
|
113
124
|
## `parent`
|
114
125
|
|
115
126
|
The page that should be highlighted as ‘active’ in the navigation.
|
@@ -17,6 +17,12 @@ header_links:
|
|
17
17
|
# Tracking ID from Google Analytics (e.g. UA-XXXX-Y)
|
18
18
|
ga_tracking_id:
|
19
19
|
|
20
|
+
# Enable multipage navigation in the sidebar
|
21
|
+
multipage_nav: true
|
22
|
+
|
23
|
+
# Enable collapsible navigation in the sidebar
|
24
|
+
collapsible_nav: true
|
25
|
+
|
20
26
|
# Table of contents depth – how many levels to include in the table of contents.
|
21
27
|
# If your ToC is too long, reduce this number and we'll only show higher-level
|
22
28
|
# headings.
|
@@ -0,0 +1,93 @@
|
|
1
|
+
(function($, Modules) {
|
2
|
+
'use strict';
|
3
|
+
|
4
|
+
Modules.CollapsibleNavigation = function () {
|
5
|
+
|
6
|
+
var $contentPane;
|
7
|
+
var $nav;
|
8
|
+
var $topLevelItems;
|
9
|
+
var $headings;
|
10
|
+
var $listings;
|
11
|
+
|
12
|
+
var $openLink;
|
13
|
+
var $closeLink;
|
14
|
+
|
15
|
+
this.start = function ($element) {
|
16
|
+
$contentPane = $('.app-pane__content');
|
17
|
+
$nav = $element;
|
18
|
+
$topLevelItems = $nav.find('> ul > li');
|
19
|
+
$headings = $topLevelItems.find('> a');
|
20
|
+
$listings = $topLevelItems.find('> ul');
|
21
|
+
|
22
|
+
// Attach collapsible heading functionality,on mobile and desktop
|
23
|
+
collapsibleHeadings();
|
24
|
+
openActiveHeading();
|
25
|
+
$contentPane.on('scroll', _.debounce(openActiveHeading, 100, { maxWait: 100 }));
|
26
|
+
|
27
|
+
};
|
28
|
+
|
29
|
+
function collapsibleHeadings() {
|
30
|
+
for (var i = $topLevelItems.length - 1; i >= 0; i--) {
|
31
|
+
var $topLevelItem = $($topLevelItems[i]);
|
32
|
+
var $heading = $topLevelItem.find('> a');
|
33
|
+
var $listing = $topLevelItem.find('> ul');
|
34
|
+
// Only add collapsible functionality if there are children.
|
35
|
+
if ($listing.length == 0) {
|
36
|
+
continue;
|
37
|
+
}
|
38
|
+
$topLevelItem.addClass('collapsible');
|
39
|
+
$listing.addClass('collapsible__body')
|
40
|
+
.attr('aria-expanded', 'false');
|
41
|
+
$heading.addClass('collapsible__heading')
|
42
|
+
.after('<button class="collapsible__toggle"><span class="collapsible__toggle-label">Expand ' + $heading.text() + '</span><span class="collapsible__toggle-icon" aria-hidden="true"></button>')
|
43
|
+
$topLevelItem.on('click', '.collapsible__toggle', function(e) {
|
44
|
+
e.preventDefault();
|
45
|
+
var $parent = $(this).parent();
|
46
|
+
toggleHeading($parent);
|
47
|
+
});
|
48
|
+
}
|
49
|
+
}
|
50
|
+
|
51
|
+
function toggleHeading($topLevelItem) {
|
52
|
+
var isOpen = $topLevelItem.hasClass('is-open');
|
53
|
+
var $heading = $topLevelItem.find('> a');
|
54
|
+
var $body = $topLevelItem.find('collapsible__body');
|
55
|
+
var $toggleLabel = $topLevelItem.find('.collapsible__toggle-label');
|
56
|
+
|
57
|
+
$topLevelItem.toggleClass('is-open', !isOpen);
|
58
|
+
$body.attr('aria-expanded', isOpen ? 'true' : 'false');
|
59
|
+
$toggleLabel.text(isOpen ? 'Expand ' + $heading.text() : 'Collapse ' + $heading.text());
|
60
|
+
}
|
61
|
+
|
62
|
+
function openActiveHeading() {
|
63
|
+
var $activeElement;
|
64
|
+
var currentPath = window.location.pathname;
|
65
|
+
var isActiveTrail = '[href*="' + currentPath + '"]';
|
66
|
+
// Add an exception for the root page, as every href includes /
|
67
|
+
if(currentPath == '/') {
|
68
|
+
isActiveTrail = '[href="' + currentPath + window.location.hash + '"]'
|
69
|
+
}
|
70
|
+
for (var i = $topLevelItems.length - 1; i >= 0; i--) {
|
71
|
+
var $element = $($topLevelItems[i]);
|
72
|
+
var $heading = $element.find('> a');
|
73
|
+
// Check if this item href matches
|
74
|
+
if($heading.is(isActiveTrail)) {
|
75
|
+
$activeElement = $element;
|
76
|
+
break;
|
77
|
+
}
|
78
|
+
// Otherwise check the children
|
79
|
+
var $children = $element.find('li > a');
|
80
|
+
var $matchingChildren = $children.filter(isActiveTrail);
|
81
|
+
if ($matchingChildren.length) {
|
82
|
+
$activeElement = $element;
|
83
|
+
break;
|
84
|
+
}
|
85
|
+
}
|
86
|
+
if($activeElement && !$activeElement.hasClass('is-open')) {
|
87
|
+
toggleHeading($activeElement);
|
88
|
+
}
|
89
|
+
}
|
90
|
+
|
91
|
+
|
92
|
+
};
|
93
|
+
})(jQuery, window.GOVUK.Modules);
|
@@ -70,8 +70,12 @@
|
|
70
70
|
}
|
71
71
|
|
72
72
|
function highlightActiveItemInToc(fragment) {
|
73
|
-
var $activeTocItem = $tocItems.filter('[href="' + fragment + '"]');
|
74
|
-
|
73
|
+
var $activeTocItem = $tocItems.filter('[href="' + window.location.pathname + fragment + '"]');
|
74
|
+
// Navigation items with children don't contain fragments in their url
|
75
|
+
// Check to see if any nav items contain just the path name.
|
76
|
+
if(!$activeTocItem.get(0)) {
|
77
|
+
$activeTocItem = $tocItems.filter('[href="' + window.location.pathname + '"]');
|
78
|
+
}
|
75
79
|
if ($activeTocItem.get(0)) {
|
76
80
|
$tocItems.removeClass('toc-link--in-view');
|
77
81
|
$activeTocItem.addClass('toc-link--in-view');
|
@@ -4,15 +4,23 @@
|
|
4
4
|
Modules.TableOfContents = function () {
|
5
5
|
var $html = $('html');
|
6
6
|
|
7
|
+
var $contentPane;
|
7
8
|
var $toc;
|
8
9
|
var $tocList;
|
10
|
+
var $topLevelItems;
|
11
|
+
var $headings;
|
12
|
+
var $listings;
|
9
13
|
|
10
14
|
var $openLink;
|
11
15
|
var $closeLink;
|
12
16
|
|
13
17
|
this.start = function ($element) {
|
18
|
+
$contentPane = $('.app-pane__content');
|
14
19
|
$toc = $element;
|
15
20
|
$tocList = $toc.find('.js-toc-list');
|
21
|
+
$topLevelItems = $tocList.find('> ul > li');
|
22
|
+
$headings = $topLevelItems.find('> a');
|
23
|
+
$listings = $topLevelItems.find('> ul');
|
16
24
|
|
17
25
|
// Open link is not inside the module
|
18
26
|
$openLink = $html.find('.js-toc-show');
|
@@ -44,7 +52,7 @@
|
|
44
52
|
// scrolling in that direction will scroll the body 'behind' the table of
|
45
53
|
// contents. Fix this by preventing ever reaching the top or bottom of the
|
46
54
|
// table of contents (by 1 pixel).
|
47
|
-
//
|
55
|
+
//
|
48
56
|
// http://blog.christoffer.me/six-things-i-learnt-about-ios-safaris-rubber-band-scrolling/
|
49
57
|
$toc.on("touchstart.toc", function () {
|
50
58
|
var $this = $(this),
|
@@ -62,7 +70,7 @@
|
|
62
70
|
|
63
71
|
function openNavigation() {
|
64
72
|
$html.addClass('toc-open');
|
65
|
-
|
73
|
+
|
66
74
|
toggleBackgroundVisiblity(false);
|
67
75
|
updateAriaAttributes();
|
68
76
|
|
@@ -0,0 +1,45 @@
|
|
1
|
+
// Collapsible JS component styling, made for the navigation tree.
|
2
|
+
// These classes are added in table-of-contents.js.
|
3
|
+
// They should not be applied without the JS.
|
4
|
+
|
5
|
+
.collapsible {
|
6
|
+
position: relative;
|
7
|
+
}
|
8
|
+
.collapsible__body {
|
9
|
+
display: none;
|
10
|
+
.collapsible.is-open & {
|
11
|
+
display: block
|
12
|
+
}
|
13
|
+
}
|
14
|
+
.collapsible__toggle {
|
15
|
+
position: absolute;
|
16
|
+
top: 0;
|
17
|
+
right: -25px;
|
18
|
+
width: 50px;
|
19
|
+
height: 40px;
|
20
|
+
overflow: hidden;
|
21
|
+
text-indent: -999em;
|
22
|
+
border: 0;
|
23
|
+
background: 0;
|
24
|
+
color: inherit;
|
25
|
+
padding: 0;
|
26
|
+
&:focus {
|
27
|
+
outline: 3px solid $focus-colour;
|
28
|
+
}
|
29
|
+
}
|
30
|
+
.collapsible__toggle-icon {
|
31
|
+
position: absolute;
|
32
|
+
top: 0;
|
33
|
+
right: 30px;
|
34
|
+
&::after {
|
35
|
+
content: '';
|
36
|
+
display: block;
|
37
|
+
background: no-repeat file-url('arrow-down.svg') center center;
|
38
|
+
background-size: 18px auto;
|
39
|
+
width: 20px;
|
40
|
+
height: 40px;
|
41
|
+
}
|
42
|
+
.collapsible.is-open &::after {
|
43
|
+
background-image: file-url('arrow-up.svg');
|
44
|
+
}
|
45
|
+
}
|
@@ -27,7 +27,7 @@
|
|
27
27
|
|
28
28
|
a:link, a:visited {
|
29
29
|
display: block;
|
30
|
-
padding: 8px $gutter-half;
|
30
|
+
padding: 8px 40px 8px $gutter-half;
|
31
31
|
margin: 0 $gutter-half * -1;
|
32
32
|
border-left: 5px solid transparent;
|
33
33
|
|
@@ -46,11 +46,6 @@
|
|
46
46
|
}
|
47
47
|
|
48
48
|
@include media(tablet) {
|
49
|
-
// Level 2
|
50
|
-
> ul > li > ul {
|
51
|
-
margin-bottom: 20px;
|
52
|
-
}
|
53
|
-
|
54
49
|
// Level 3
|
55
50
|
li li li {
|
56
51
|
a:link, a:visited {
|
@@ -1,10 +1,11 @@
|
|
1
1
|
module GovukTechDocs
|
2
2
|
module TableOfContents
|
3
3
|
class Heading
|
4
|
-
def initialize(element_name:, text:, attributes:)
|
4
|
+
def initialize(element_name:, text:, attributes:, page_url: '')
|
5
5
|
@element_name = element_name
|
6
6
|
@text = text
|
7
7
|
@attributes = attributes
|
8
|
+
@page_url = page_url
|
8
9
|
end
|
9
10
|
|
10
11
|
def size
|
@@ -12,7 +13,7 @@ module GovukTechDocs
|
|
12
13
|
end
|
13
14
|
|
14
15
|
def href
|
15
|
-
'#' + @attributes['id']
|
16
|
+
@page_url + '#' + @attributes['id']
|
16
17
|
end
|
17
18
|
|
18
19
|
def title
|
@@ -1,8 +1,9 @@
|
|
1
1
|
module GovukTechDocs
|
2
2
|
module TableOfContents
|
3
3
|
class HeadingsBuilder
|
4
|
-
def initialize(html)
|
4
|
+
def initialize(html, url)
|
5
5
|
@html = html
|
6
|
+
@url = url
|
6
7
|
end
|
7
8
|
|
8
9
|
def headings
|
@@ -10,7 +11,8 @@ module GovukTechDocs
|
|
10
11
|
Heading.new(
|
11
12
|
element_name: element.node_name,
|
12
13
|
text: element.content,
|
13
|
-
attributes: convert_nokogiri_attr_objects_to_hashes(element.attributes)
|
14
|
+
attributes: convert_nokogiri_attr_objects_to_hashes(element.attributes),
|
15
|
+
page_url: @url
|
14
16
|
)
|
15
17
|
end
|
16
18
|
end
|
@@ -7,16 +7,63 @@ require 'govuk_tech_docs/table_of_contents/headings_builder'
|
|
7
7
|
module GovukTechDocs
|
8
8
|
module TableOfContents
|
9
9
|
module Helpers
|
10
|
-
def
|
11
|
-
headings = HeadingsBuilder.new(html).headings
|
10
|
+
def single_page_table_of_contents(html, url: '', max_level: nil)
|
11
|
+
headings = HeadingsBuilder.new(html, url).headings
|
12
12
|
|
13
13
|
if headings.none? { |heading| heading.size == 1 }
|
14
|
-
raise "No H1 tag found. You have to at least add one H1 heading to the page
|
14
|
+
raise "No H1 tag found. You have to at least add one H1 heading to the page: " + url
|
15
15
|
end
|
16
16
|
|
17
17
|
tree = HeadingTreeBuilder.new(headings).tree
|
18
18
|
HeadingTreeRenderer.new(tree, max_level: max_level).html
|
19
19
|
end
|
20
|
+
|
21
|
+
def multi_page_table_of_contents(resources, current_page, config, current_page_html = nil)
|
22
|
+
# Only parse top level html files
|
23
|
+
# Sorted by weight frontmatter
|
24
|
+
resources = resources
|
25
|
+
.select { |r| r.path.end_with?(".html") && (r.parent.nil? || r.parent.url == "/") }
|
26
|
+
.sort_by { |r| [r.data.weight ? 0 : 1, r.data.weight || 0] }
|
27
|
+
|
28
|
+
render_page_tree(resources, current_page, config, current_page_html)
|
29
|
+
end
|
30
|
+
|
31
|
+
def render_page_tree(resources, current_page, config, current_page_html)
|
32
|
+
# Sort by weight frontmatter
|
33
|
+
resources = resources
|
34
|
+
.sort_by { |r| [r.data.weight ? 0 : 1, r.data.weight || 0] }
|
35
|
+
output = '';
|
36
|
+
resources.each do |resource|
|
37
|
+
# Reuse the generated content for the active page
|
38
|
+
# If we generate it twice it increments the heading ids
|
39
|
+
content =
|
40
|
+
if current_page.url == resource.url && current_page_html
|
41
|
+
current_page_html
|
42
|
+
else
|
43
|
+
resource.render(layout: false)
|
44
|
+
end
|
45
|
+
# Avoid redirect pages
|
46
|
+
next if content.include? "http-equiv=refresh"
|
47
|
+
# If this page has children, just print the title and recursively
|
48
|
+
# render the children.
|
49
|
+
# If not, print the heading structure.
|
50
|
+
# We avoid printing the children of the root index.html as it is the
|
51
|
+
# parent of every other top level file.
|
52
|
+
if resource.children.any? && resource.url != "/"
|
53
|
+
output += %{<ul><li><a href="#{resource.url}">#{resource.data.title}</a>\n}
|
54
|
+
output += render_page_tree(resource.children, current_page, config, current_page_html)
|
55
|
+
output += '</li></ul>'
|
56
|
+
else
|
57
|
+
output +=
|
58
|
+
single_page_table_of_contents(
|
59
|
+
content,
|
60
|
+
url: resource.url,
|
61
|
+
max_level: config[:tech_docs][:max_toc_heading_level]
|
62
|
+
)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
output
|
66
|
+
end
|
20
67
|
end
|
21
68
|
end
|
22
69
|
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<!-- Generator: Adobe Illustrator 22.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
3
|
+
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
4
|
+
viewBox="0 0 34 34" style="enable-background:new 0 0 34 34;" xml:space="preserve">
|
5
|
+
<style type="text/css">
|
6
|
+
.st0{fill:#0B0C0C;}
|
7
|
+
</style>
|
8
|
+
<polygon class="st0" points="17,25.7 1.6,11.5 4.4,8.5 17,20.3 29.6,8.5 32.4,11.5 "/>
|
9
|
+
</svg>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<!-- Generator: Adobe Illustrator 22.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
3
|
+
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
4
|
+
viewBox="0 0 34 34" style="enable-background:new 0 0 34 34;" xml:space="preserve">
|
5
|
+
<style type="text/css">
|
6
|
+
.st0{fill:#0B0C0C;}
|
7
|
+
</style>
|
8
|
+
<polygon class="st0" points="29.6,25.5 17,13.7 4.4,25.5 1.6,22.5 17,8.3 32.4,22.5 "/>
|
9
|
+
</svg>
|
data/lib/source/layouts/core.erb
CHANGED
@@ -45,7 +45,7 @@
|
|
45
45
|
<div class="app-pane__toc">
|
46
46
|
<div class="toc" data-module="table-of-contents">
|
47
47
|
<a href="#" class="toc__close js-toc-close" aria-controls="toc" aria-label="Hide table of contents"></a>
|
48
|
-
<nav id="toc" class="js-toc-list toc__list" aria-labelledby="toc-heading"
|
48
|
+
<nav id="toc" class="js-toc-list toc__list" aria-labelledby="toc-heading"<%= " data-module=\"collapsible-navigation\"" if config[:tech_docs][:collapsible_nav] %>>
|
49
49
|
<%= yield_content :sidebar %>
|
50
50
|
</nav>
|
51
51
|
</div>
|
@@ -5,10 +5,12 @@ wrap_layout :core do
|
|
5
5
|
content_for(:toc_module, "in-page-navigation")
|
6
6
|
|
7
7
|
content_for :sidebar do
|
8
|
-
|
9
|
-
html
|
10
|
-
|
11
|
-
|
8
|
+
if config[:tech_docs][:multipage_nav] %>
|
9
|
+
<%= multi_page_table_of_contents(sitemap.resources, current_page, config, html) %>
|
10
|
+
<% else %>
|
11
|
+
<%= single_page_table_of_contents(html, max_level: config[:tech_docs][:max_toc_heading_level]) %>
|
12
|
+
<% end %>
|
13
|
+
<%
|
12
14
|
end
|
13
15
|
|
14
16
|
html
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: govuk_tech_docs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Government Digital Service
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-07-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -280,6 +280,7 @@ files:
|
|
280
280
|
- lib/assets/javascripts/_analytics.js
|
281
281
|
- lib/assets/javascripts/_govuk/modules.js
|
282
282
|
- lib/assets/javascripts/_modules/anchored-headings.js
|
283
|
+
- lib/assets/javascripts/_modules/collapsible-navigation.js
|
283
284
|
- lib/assets/javascripts/_modules/in-page-navigation.js
|
284
285
|
- lib/assets/javascripts/_modules/navigation.js
|
285
286
|
- lib/assets/javascripts/_modules/page-expiry.js
|
@@ -314,6 +315,7 @@ files:
|
|
314
315
|
- lib/assets/stylesheets/govuk_frontend_toolkit/design-patterns/_media-player.scss
|
315
316
|
- lib/assets/stylesheets/modules/_anchored-heading.scss
|
316
317
|
- lib/assets/stylesheets/modules/_app-pane.scss
|
318
|
+
- lib/assets/stylesheets/modules/_collapsible.scss
|
317
319
|
- lib/assets/stylesheets/modules/_contribution-banner.scss
|
318
320
|
- lib/assets/stylesheets/modules/_footer.scss
|
319
321
|
- lib/assets/stylesheets/modules/_govuk-logo.scss
|
@@ -347,6 +349,8 @@ files:
|
|
347
349
|
- lib/source/favicon.ico
|
348
350
|
- lib/source/images/anchored-heading-icon-2x.png
|
349
351
|
- lib/source/images/anchored-heading-icon.png
|
352
|
+
- lib/source/images/arrow-down.svg
|
353
|
+
- lib/source/images/arrow-up.svg
|
350
354
|
- lib/source/images/gov.uk_logotype_crown-2x.png
|
351
355
|
- lib/source/images/gov.uk_logotype_crown.png
|
352
356
|
- lib/source/images/gov.uk_logotype_crown_invert_trans.png
|