govuk_tech_docs 1.5.0 → 1.6.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 +3 -0
- data/CHANGELOG.md +90 -0
- data/docs/configuration.md +15 -0
- data/docs/frontmatter.md +2 -14
- data/docs/page-expiry.md +69 -0
- data/example/Gemfile +1 -0
- data/example/config/tech-docs.yml +6 -0
- data/example/source/api-path.html.md +7 -0
- data/example/source/api-reference.html.md +5 -0
- data/example/source/pets.yml +106 -0
- data/govuk_tech_docs.gemspec +2 -0
- data/lib/assets/javascripts/_analytics.js +12 -0
- data/lib/assets/javascripts/_modules/collapsible-navigation.js +5 -3
- data/lib/assets/javascripts/_modules/search.js +175 -6
- data/lib/assets/stylesheets/modules/_collapsible.scss +12 -5
- data/lib/assets/stylesheets/modules/_technical-documentation.scss +16 -11
- data/lib/assets/stylesheets/modules/_toc.scss +1 -1
- data/lib/govuk_tech_docs.rb +13 -2
- data/lib/govuk_tech_docs/api_reference/api_reference_extension.rb +100 -0
- data/lib/govuk_tech_docs/api_reference/api_reference_renderer.rb +279 -0
- data/lib/govuk_tech_docs/api_reference/templates/api_reference_full.html.erb +9 -0
- data/lib/govuk_tech_docs/api_reference/templates/operation.html.erb +11 -0
- data/lib/govuk_tech_docs/api_reference/templates/parameters.html.erb +28 -0
- data/lib/govuk_tech_docs/api_reference/templates/path.html.erb +4 -0
- data/lib/govuk_tech_docs/api_reference/templates/responses.html.erb +33 -0
- data/lib/govuk_tech_docs/api_reference/templates/schema.html.erb +29 -0
- data/lib/govuk_tech_docs/page_review.rb +15 -3
- data/lib/govuk_tech_docs/pages.rb +3 -2
- data/lib/govuk_tech_docs/tech_docs_html_renderer.rb +10 -0
- data/lib/govuk_tech_docs/version.rb +1 -1
- data/lib/source/layouts/_header.erb +2 -4
- metadata +42 -4
- data/lib/source/images/arrow-down.svg +0 -9
- data/lib/source/images/arrow-up.svg +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7e106d8464ee73119270e939801832a1e49118a7
|
4
|
+
data.tar.gz: 334c5c672945bd52df62772578ccb862356cafd1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b507269b3da54e98e28db73fb89a0d4f2f2e1032f0829f2c3a7acc2401eb4f24b37e6776c16b6fdd0bfe49693a3df270ca8a68fcc162a78bbc380f5ec68d68f1
|
7
|
+
data.tar.gz: d825189334f2ea5612ca72836d2259a7d983c0b20ea5a559f7c1c9e61d47647700964ab20dca97d2f66bd3e2cf187681725becab2cb089e2343a7dfa49b89cf0
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,95 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## Unreleased
|
4
|
+
|
5
|
+
## 1.6.0
|
6
|
+
|
7
|
+
Version 1.6.0 adds API reference generation, and improves the search function.
|
8
|
+
|
9
|
+
### New feature: API reference
|
10
|
+
|
11
|
+
Specify an OpenAPI spec file using `api_path`, for example: `api_path: source/pets.yml`.
|
12
|
+
|
13
|
+
To output the generated content in the page of your choice, write `api>` in any markdown parsed file (.md, .html.md, .html.md.erb). You can also specify to just print a specific path: `api> /pets`
|
14
|
+
|
15
|
+
This generates request and response schemas and examples for each API operation.
|
16
|
+
|
17
|
+
More info:
|
18
|
+
|
19
|
+
- https://github.com/alphagov/tech-docs-gem/pull/40
|
20
|
+
- https://github.com/alphagov/tech-docs-gem/pull/48
|
21
|
+
|
22
|
+
### Search result improvements
|
23
|
+
|
24
|
+
The search indexing pipeline has been tweaked to provide expected results. The display of the search results has also been
|
25
|
+
|
26
|
+
If you're using search then you'll need to add this line to your project `Gemfile`:
|
27
|
+
|
28
|
+
```
|
29
|
+
gem 'middleman-search', git: 'git://github.com/alphagov/middleman-search.git'
|
30
|
+
```
|
31
|
+
|
32
|
+
More info:
|
33
|
+
- https://github.com/alphagov/tech-docs-gem/pull/37
|
34
|
+
- https://github.com/alphagov/tech-docs-gem/pull/38
|
35
|
+
- https://github.com/alphagov/tech-docs-gem/pull/41
|
36
|
+
- https://github.com/alphagov/tech-docs-gem/pull/42
|
37
|
+
- https://github.com/alphagov/tech-docs-gem/pull/43
|
38
|
+
|
39
|
+
### Correct fork of middleman in example project
|
40
|
+
|
41
|
+
The example gem project now uses alphagov/middleman-search. This prevents `bundle exec middleman serve` from crashing.
|
42
|
+
|
43
|
+
More info:
|
44
|
+
- https://github.com/alphagov/tech-docs-gem/pull/35
|
45
|
+
|
46
|
+
### Accessibility improvements
|
47
|
+
|
48
|
+
Accessibility improvements to search, collapsible navigation, and the logo.
|
49
|
+
|
50
|
+
More info:
|
51
|
+
- https://github.com/alphagov/tech-docs-gem/pull/36
|
52
|
+
- https://github.com/alphagov/tech-docs-gem/pull/33
|
53
|
+
|
54
|
+
### Additional configuration options for review system
|
55
|
+
|
56
|
+
`default_owner_slack` and `owner_slack_workspace` are now configurable for use within the review system.
|
57
|
+
|
58
|
+
More info:
|
59
|
+
- https://github.com/alphagov/tech-docs-gem/pull/47
|
60
|
+
|
61
|
+
### Correct fork of middleman in example project
|
62
|
+
|
63
|
+
The example gem project now uses alphagov/middleman-search. This prevents `bundle exec middleman serve` from crashing.
|
64
|
+
|
65
|
+
More info:
|
66
|
+
- https://github.com/alphagov/tech-docs-gem/pull/35
|
67
|
+
|
68
|
+
### Accessibility improvements
|
69
|
+
|
70
|
+
Accessibility improvements to search, collapsible navigation, and the logo.
|
71
|
+
|
72
|
+
More info:
|
73
|
+
- https://github.com/alphagov/tech-docs-gem/pull/36
|
74
|
+
- https://github.com/alphagov/tech-docs-gem/pull/33
|
75
|
+
|
76
|
+
### Search result improvements
|
77
|
+
|
78
|
+
The search indexing pipeline has been tweaked to provide expected results. The display of the search results has also been improved.
|
79
|
+
|
80
|
+
If you're using search then you'll need to add this line to your project `Gemfile`:
|
81
|
+
|
82
|
+
```
|
83
|
+
gem 'middleman-search', git: 'git://github.com/alphagov/middleman-search.git'
|
84
|
+
```
|
85
|
+
|
86
|
+
More info:
|
87
|
+
- https://github.com/alphagov/tech-docs-gem/pull/37
|
88
|
+
- https://github.com/alphagov/tech-docs-gem/pull/38
|
89
|
+
- https://github.com/alphagov/tech-docs-gem/pull/41
|
90
|
+
- https://github.com/alphagov/tech-docs-gem/pull/42
|
91
|
+
- https://github.com/alphagov/tech-docs-gem/pull/43
|
92
|
+
|
3
93
|
## 1.5.0
|
4
94
|
|
5
95
|
### New feature: Search
|
data/docs/configuration.md
CHANGED
@@ -148,3 +148,18 @@ default: `true`
|
|
148
148
|
```yaml
|
149
149
|
show_govuk_logo: true
|
150
150
|
```
|
151
|
+
|
152
|
+
## `api_path`
|
153
|
+
|
154
|
+
Define a path to an Open API V3 spec file. This can be a relative file path or a URI to a raw file.
|
155
|
+
|
156
|
+
```yaml
|
157
|
+
api_path: ./source/pets.yml
|
158
|
+
```
|
159
|
+
|
160
|
+
## `owner_slack_workspace` and `default_owner_slack`
|
161
|
+
|
162
|
+
These attributes are used to specify the owner of a page. See the separate
|
163
|
+
[documentation for page expiry][expiry] for more details.
|
164
|
+
|
165
|
+
[expiry]: https://alphagov.github.io/tech-docs-manual/#page-expiry-and-review-notices
|
data/docs/frontmatter.md
CHANGED
@@ -5,24 +5,12 @@
|
|
5
5
|
## `last_reviewed_on` and `review_in`
|
6
6
|
|
7
7
|
These attributes determine the date when the page needs to be reviewed next.
|
8
|
+
See the separate [documentation for page expiry][expiry] for more details.
|
8
9
|
|
9
|
-
|
10
|
-
|
11
|
-

|
12
|
-
|
13
|
-
If the page needs to be reviewed, we show a red box saying the page might not be accurate.
|
14
|
-
|
15
|
-

|
10
|
+
[expiry]: https://alphagov.github.io/tech-docs-manual/#page-expiry-and-review-notices
|
16
11
|
|
17
12
|
Example:
|
18
13
|
|
19
|
-
```yaml
|
20
|
-
---
|
21
|
-
last_reviewed_on: 2018-01-18
|
22
|
-
review_in: 6 weeks
|
23
|
-
---
|
24
|
-
```
|
25
|
-
|
26
14
|
You can use this in combination with [owner_slack](#owner-slack) to set an owner for the page.
|
27
15
|
|
28
16
|
## `layout`
|
data/docs/page-expiry.md
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
# Page Expiry and Review Notices
|
2
|
+
|
3
|
+
It's possible to include frontmatter configuration for a page to set an
|
4
|
+
expiration date for a piece of content.
|
5
|
+
|
6
|
+
If the page doesn't need to be reviewed, we show a blue box with the
|
7
|
+
last-reviewed date, when it needs review again, and the owner.
|
8
|
+
|
9
|
+

|
10
|
+
|
11
|
+
If the page needs to be reviewed, we show a red box saying the page might not
|
12
|
+
be accurate.
|
13
|
+
|
14
|
+

|
15
|
+
|
16
|
+
This feature relies on JavaScript being enabled on the user's browser to
|
17
|
+
display the relevant notices.
|
18
|
+
|
19
|
+
|
20
|
+
## Frontmatter configuration
|
21
|
+
|
22
|
+
### `last_reviewed_on` and `review_in`
|
23
|
+
|
24
|
+
These attributes determine the date when the page needs to be reviewed next.
|
25
|
+
|
26
|
+
```yaml
|
27
|
+
---
|
28
|
+
last_reviewed_on: 2018-01-18
|
29
|
+
review_in: 6 weeks
|
30
|
+
---
|
31
|
+
```
|
32
|
+
|
33
|
+
You can use this in combination with `owner_slack` or `default_owner_slack` to
|
34
|
+
set an owner for the page.
|
35
|
+
|
36
|
+
### `owner_slack`
|
37
|
+
|
38
|
+
The Slack username or channel of the page owner. This can be used to appoint an
|
39
|
+
individual or team as responsible for keeping the page up to date.
|
40
|
+
|
41
|
+
|
42
|
+
## Global configuration
|
43
|
+
|
44
|
+
### `owner_slack_workspace`
|
45
|
+
|
46
|
+
The Slack workspace name used when linking to the Slack owner of a piece of
|
47
|
+
content. If not provided, the owner of a piece of content (channel or user)
|
48
|
+
won't be linked.
|
49
|
+
|
50
|
+
```yaml
|
51
|
+
owner_slack_workspace: gds
|
52
|
+
```
|
53
|
+
|
54
|
+
### `default_owner_slack`
|
55
|
+
|
56
|
+
The default Slack user or channel name to show as the owner of a piece of
|
57
|
+
content. Can be overridden using the `owner_slack` frontmatter config option.
|
58
|
+
|
59
|
+
```yaml
|
60
|
+
default_owner_slack: '#owner'
|
61
|
+
```
|
62
|
+
|
63
|
+
|
64
|
+
## Page API
|
65
|
+
|
66
|
+
The expiry date for each page is also shown in the `/api/pages.json`
|
67
|
+
representation of all pages. This is used by the
|
68
|
+
[tech-docs-notifier](https://github.com/alphagov/tech-docs-notifier) to post
|
69
|
+
messages to Slack when pages have expired.
|
data/example/Gemfile
CHANGED
@@ -0,0 +1,106 @@
|
|
1
|
+
openapi: "3.0.0"
|
2
|
+
info:
|
3
|
+
version: 1.0.0
|
4
|
+
title: Swagger Petstore
|
5
|
+
description: A sample API that uses a petstore as an example to demonstrate features in the OpenAPI 3.0 specification
|
6
|
+
license:
|
7
|
+
name: MIT
|
8
|
+
servers:
|
9
|
+
- url: http://petstore.swagger.io/v1
|
10
|
+
paths:
|
11
|
+
/pets:
|
12
|
+
get:
|
13
|
+
summary: List all pets
|
14
|
+
operationId: listPets
|
15
|
+
tags:
|
16
|
+
- pets
|
17
|
+
parameters:
|
18
|
+
- name: limit
|
19
|
+
in: query
|
20
|
+
description: How many items to return at one time (max 100)
|
21
|
+
required: false
|
22
|
+
schema:
|
23
|
+
type: integer
|
24
|
+
format: int32
|
25
|
+
responses:
|
26
|
+
'200':
|
27
|
+
description: A paged array of pets
|
28
|
+
headers:
|
29
|
+
content:
|
30
|
+
application/json:
|
31
|
+
schema:
|
32
|
+
$ref: "#/components/schemas/Pets"
|
33
|
+
default:
|
34
|
+
description: unexpected error
|
35
|
+
content:
|
36
|
+
application/json:
|
37
|
+
schema:
|
38
|
+
$ref: "#/components/schemas/Error"
|
39
|
+
post:
|
40
|
+
summary: Create a pet
|
41
|
+
operationId: createPets
|
42
|
+
tags:
|
43
|
+
- pets
|
44
|
+
responses:
|
45
|
+
'201':
|
46
|
+
description: Null response
|
47
|
+
default:
|
48
|
+
description: unexpected error
|
49
|
+
content:
|
50
|
+
application/json:
|
51
|
+
schema:
|
52
|
+
$ref: "#/components/schemas/Error"
|
53
|
+
/pets/{petId}:
|
54
|
+
get:
|
55
|
+
summary: Info for a specific pet
|
56
|
+
operationId: showPetById
|
57
|
+
tags:
|
58
|
+
- pets
|
59
|
+
parameters:
|
60
|
+
- name: petId
|
61
|
+
in: path
|
62
|
+
required: true
|
63
|
+
description: The id of the pet to retrieve
|
64
|
+
schema:
|
65
|
+
type: string
|
66
|
+
responses:
|
67
|
+
'200':
|
68
|
+
description: Expected response to a valid request
|
69
|
+
content:
|
70
|
+
application/json:
|
71
|
+
schema:
|
72
|
+
$ref: "#/components/schemas/Pets"
|
73
|
+
default:
|
74
|
+
description: unexpected error
|
75
|
+
content:
|
76
|
+
application/json:
|
77
|
+
schema:
|
78
|
+
$ref: "#/components/schemas/Error"
|
79
|
+
components:
|
80
|
+
schemas:
|
81
|
+
Pet:
|
82
|
+
required:
|
83
|
+
- id
|
84
|
+
- name
|
85
|
+
properties:
|
86
|
+
id:
|
87
|
+
type: integer
|
88
|
+
format: int64
|
89
|
+
name:
|
90
|
+
type: string
|
91
|
+
tag:
|
92
|
+
type: string
|
93
|
+
Pets:
|
94
|
+
type: array
|
95
|
+
items:
|
96
|
+
$ref: "#/components/schemas/Pet"
|
97
|
+
Error:
|
98
|
+
required:
|
99
|
+
- code
|
100
|
+
- message
|
101
|
+
properties:
|
102
|
+
code:
|
103
|
+
type: integer
|
104
|
+
format: int32
|
105
|
+
message:
|
106
|
+
type: string
|
data/govuk_tech_docs.gemspec
CHANGED
@@ -32,6 +32,8 @@ Gem::Specification.new do |spec|
|
|
32
32
|
spec.add_dependency "middleman-search"
|
33
33
|
spec.add_dependency "nokogiri"
|
34
34
|
spec.add_dependency "redcarpet", "~> 3.3.2"
|
35
|
+
spec.add_dependency "openapi3_parser"
|
36
|
+
spec.add_dependency "pry"
|
35
37
|
|
36
38
|
|
37
39
|
spec.add_development_dependency "bundler", "~> 1.15"
|
@@ -42,5 +42,17 @@
|
|
42
42
|
$('.header a').on('click', linkTrackingEventHandler('topNavigationClick'));
|
43
43
|
$('.toc a').on('click', linkTrackingEventHandler('tableOfContentsNavigationClick'));
|
44
44
|
catchBrokenFragmentLinks();
|
45
|
+
|
46
|
+
// Borrowed from:
|
47
|
+
// https://github.com/alphagov/govuk_frontend_toolkit/blob/master/javascripts/govuk/analytics/analytics.js
|
48
|
+
window.stripPIIFromString = function (string) {
|
49
|
+
var EMAIL_PATTERN = /[^\s=/?&]+(?:@|%40)[^\s=/?&]+/g
|
50
|
+
var POSTCODE_PATTERN = /[A-PR-UWYZ][A-HJ-Z]?[0-9][0-9A-HJKMNPR-Y]?(?:[\s+]|%20)*[0-9][ABD-HJLNPQ-Z]{2}/gi
|
51
|
+
var DATE_PATTERN = /\d{4}(-?)\d{2}(-?)\d{2}/g
|
52
|
+
var stripped = string.replace(EMAIL_PATTERN, '[email]')
|
53
|
+
.replace(DATE_PATTERN, '[date]')
|
54
|
+
.replace(POSTCODE_PATTERN, '[postcode]');
|
55
|
+
return stripped
|
56
|
+
}
|
45
57
|
});
|
46
58
|
})(jQuery);
|
@@ -31,15 +31,17 @@
|
|
31
31
|
var $topLevelItem = $($topLevelItems[i]);
|
32
32
|
var $heading = $topLevelItem.find('> a');
|
33
33
|
var $listing = $topLevelItem.find('> ul');
|
34
|
+
var id = 'toc-' + $heading.text().toLowerCase().replace(' ', '-');
|
34
35
|
// Only add collapsible functionality if there are children.
|
35
36
|
if ($listing.length == 0) {
|
36
37
|
continue;
|
37
38
|
}
|
38
39
|
$topLevelItem.addClass('collapsible');
|
39
40
|
$listing.addClass('collapsible__body')
|
41
|
+
.attr('id', id)
|
40
42
|
.attr('aria-expanded', 'false');
|
41
43
|
$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>')
|
44
|
+
.after('<button class="collapsible__toggle" aria-controls="' + id +'"><span class="collapsible__toggle-label">Expand ' + $heading.text() + '</span><span class="collapsible__toggle-icon" aria-hidden="true"></button>')
|
43
45
|
$topLevelItem.on('click', '.collapsible__toggle', function(e) {
|
44
46
|
e.preventDefault();
|
45
47
|
var $parent = $(this).parent();
|
@@ -51,11 +53,11 @@
|
|
51
53
|
function toggleHeading($topLevelItem) {
|
52
54
|
var isOpen = $topLevelItem.hasClass('is-open');
|
53
55
|
var $heading = $topLevelItem.find('> a');
|
54
|
-
var $body = $topLevelItem.find('collapsible__body');
|
56
|
+
var $body = $topLevelItem.find('.collapsible__body');
|
55
57
|
var $toggleLabel = $topLevelItem.find('.collapsible__toggle-label');
|
56
58
|
|
57
59
|
$topLevelItem.toggleClass('is-open', !isOpen);
|
58
|
-
$body.attr('aria-expanded', isOpen ? '
|
60
|
+
$body.attr('aria-expanded', isOpen ? 'false' : 'true');
|
59
61
|
$toggleLabel.text(isOpen ? 'Expand ' + $heading.text() : 'Collapse ' + $heading.text());
|
60
62
|
}
|
61
63
|
|
@@ -16,7 +16,9 @@
|
|
16
16
|
var $searchResultsWrapper;
|
17
17
|
var $searchResultsClose;
|
18
18
|
var results;
|
19
|
-
var
|
19
|
+
var query;
|
20
|
+
var queryTimer;
|
21
|
+
var maxSearchEntries = 20;
|
20
22
|
|
21
23
|
this.start = function start($element) {
|
22
24
|
$searchForm = $element.find('form');
|
@@ -40,6 +42,7 @@
|
|
40
42
|
success: function(data) {
|
41
43
|
s.lunrData = data;
|
42
44
|
s.lunrIndex = lunr.Index.load(s.lunrData.index);
|
45
|
+
replaceStopWordFilter();
|
43
46
|
$(document).trigger('lunrIndexLoaded');
|
44
47
|
}
|
45
48
|
});
|
@@ -49,12 +52,16 @@
|
|
49
52
|
// Search functionality on search text input
|
50
53
|
$searchInput.on('input', function (e) {
|
51
54
|
e.preventDefault();
|
52
|
-
|
55
|
+
query = $(this).val();
|
53
56
|
s.search(query, function(r) {
|
54
57
|
results = r;
|
55
58
|
renderResults(query);
|
56
59
|
updateTitle();
|
57
60
|
});
|
61
|
+
if(window.ga) {
|
62
|
+
window.clearTimeout(queryTimer);
|
63
|
+
queryTimer = window.setTimeout(sendQueryToAnalytics, 1000);
|
64
|
+
}
|
58
65
|
});
|
59
66
|
|
60
67
|
// Set focus on the first search result instead of submiting the search
|
@@ -71,6 +78,25 @@
|
|
71
78
|
$searchInput.focus();
|
72
79
|
hideResults();
|
73
80
|
});
|
81
|
+
|
82
|
+
// Attach analytics events to search result clicks
|
83
|
+
if(window.ga) {
|
84
|
+
$searchResults.on('click', '.search-result__title a', function() {
|
85
|
+
var href = $(this).attr('href');
|
86
|
+
ga('send', {
|
87
|
+
hitType: 'event',
|
88
|
+
eventCategory: 'Search result',
|
89
|
+
eventAction: 'click',
|
90
|
+
eventLabel: href,
|
91
|
+
transport: 'beacon'
|
92
|
+
});
|
93
|
+
});
|
94
|
+
}
|
95
|
+
|
96
|
+
// When selecting navigation link, close the search results.
|
97
|
+
$('.toc').on('click','a', function(e) {
|
98
|
+
hideResults();
|
99
|
+
})
|
74
100
|
}
|
75
101
|
|
76
102
|
function changeSearchLabel() {
|
@@ -84,7 +110,6 @@
|
|
84
110
|
results.push(s.lunrData.docs[item.ref]);
|
85
111
|
}
|
86
112
|
});
|
87
|
-
|
88
113
|
return results;
|
89
114
|
}
|
90
115
|
|
@@ -144,9 +169,10 @@
|
|
144
169
|
break;
|
145
170
|
}
|
146
171
|
|
147
|
-
var
|
148
|
-
|
149
|
-
|
172
|
+
var sentence = sentences[i].trim();
|
173
|
+
var containsMark = sentence.includes('mark>');
|
174
|
+
if (containsMark && (selectedSentences.indexOf(sentence) == -1)) {
|
175
|
+
selectedSentences.push(sentence);
|
150
176
|
}
|
151
177
|
}
|
152
178
|
if(selectedSentences.length > 0) {
|
@@ -175,6 +201,149 @@
|
|
175
201
|
.attr('aria-hidden', 'true');
|
176
202
|
$html.removeClass('has-search-results-open');
|
177
203
|
}
|
204
|
+
|
205
|
+
function sendQueryToAnalytics() {
|
206
|
+
if(query === '') {
|
207
|
+
return;
|
208
|
+
}
|
209
|
+
var stripped = window.stripPIIFromString(query)
|
210
|
+
ga('send', {
|
211
|
+
hitType: 'event',
|
212
|
+
eventCategory: 'Search query',
|
213
|
+
eventAction: 'type',
|
214
|
+
eventLabel: stripped,
|
215
|
+
transport: 'beacon'
|
216
|
+
});
|
217
|
+
}
|
218
|
+
|
219
|
+
function replaceStopWordFilter() {
|
220
|
+
// Replace the default stopWordFilter as it excludes useful words like
|
221
|
+
// 'get'
|
222
|
+
// See: https://lunrjs.com/docs/stop_word_filter.js.html#line43
|
223
|
+
s.lunrIndex.pipeline.remove(lunr.stopWordFilter);
|
224
|
+
s.lunrIndex.pipeline.add(s.govukStopWorldFilter);
|
225
|
+
}
|
226
|
+
|
227
|
+
this.govukStopWorldFilter = lunr.generateStopWordFilter([
|
228
|
+
'a',
|
229
|
+
'able',
|
230
|
+
'about',
|
231
|
+
'across',
|
232
|
+
'after',
|
233
|
+
'all',
|
234
|
+
'almost',
|
235
|
+
'also',
|
236
|
+
'am',
|
237
|
+
'among',
|
238
|
+
'an',
|
239
|
+
'and',
|
240
|
+
'any',
|
241
|
+
'are',
|
242
|
+
'as',
|
243
|
+
'at',
|
244
|
+
'be',
|
245
|
+
'because',
|
246
|
+
'been',
|
247
|
+
'but',
|
248
|
+
'by',
|
249
|
+
'can',
|
250
|
+
'cannot',
|
251
|
+
'could',
|
252
|
+
'dear',
|
253
|
+
'did',
|
254
|
+
'do',
|
255
|
+
'does',
|
256
|
+
'either',
|
257
|
+
'else',
|
258
|
+
'ever',
|
259
|
+
'every',
|
260
|
+
'for',
|
261
|
+
'from',
|
262
|
+
'got',
|
263
|
+
'had',
|
264
|
+
'has',
|
265
|
+
'have',
|
266
|
+
'he',
|
267
|
+
'her',
|
268
|
+
'hers',
|
269
|
+
'him',
|
270
|
+
'his',
|
271
|
+
'how',
|
272
|
+
'however',
|
273
|
+
'i',
|
274
|
+
'if',
|
275
|
+
'in',
|
276
|
+
'into',
|
277
|
+
'is',
|
278
|
+
'it',
|
279
|
+
'its',
|
280
|
+
'just',
|
281
|
+
'least',
|
282
|
+
'let',
|
283
|
+
'like',
|
284
|
+
'likely',
|
285
|
+
'may',
|
286
|
+
'me',
|
287
|
+
'might',
|
288
|
+
'most',
|
289
|
+
'must',
|
290
|
+
'my',
|
291
|
+
'neither',
|
292
|
+
'no',
|
293
|
+
'nor',
|
294
|
+
'not',
|
295
|
+
'of',
|
296
|
+
'off',
|
297
|
+
'often',
|
298
|
+
'on',
|
299
|
+
'only',
|
300
|
+
'or',
|
301
|
+
'other',
|
302
|
+
'our',
|
303
|
+
'own',
|
304
|
+
'rather',
|
305
|
+
'said',
|
306
|
+
'say',
|
307
|
+
'says',
|
308
|
+
'she',
|
309
|
+
'should',
|
310
|
+
'since',
|
311
|
+
'so',
|
312
|
+
'some',
|
313
|
+
'than',
|
314
|
+
'that',
|
315
|
+
'the',
|
316
|
+
'their',
|
317
|
+
'them',
|
318
|
+
'then',
|
319
|
+
'there',
|
320
|
+
'these',
|
321
|
+
'they',
|
322
|
+
'this',
|
323
|
+
'tis',
|
324
|
+
'to',
|
325
|
+
'too',
|
326
|
+
'twas',
|
327
|
+
'us',
|
328
|
+
'wants',
|
329
|
+
'was',
|
330
|
+
'we',
|
331
|
+
'were',
|
332
|
+
'what',
|
333
|
+
'when',
|
334
|
+
'where',
|
335
|
+
'which',
|
336
|
+
'while',
|
337
|
+
'who',
|
338
|
+
'whom',
|
339
|
+
'why',
|
340
|
+
'will',
|
341
|
+
'with',
|
342
|
+
'would',
|
343
|
+
'yet',
|
344
|
+
'you',
|
345
|
+
'your'
|
346
|
+
])
|
178
347
|
};
|
179
348
|
|
180
349
|
// Polyfill includes
|