hof 22.11.0-frontend-v4-beta.3 → 22.11.1
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.
- package/CHANGELOG.md +19 -0
- package/README.md +20 -2
- package/components/date/templates/date.html +1 -1
- package/config/hof-defaults.js +1 -0
- package/frontend/govuk-template/build/govuk_template.html +22 -69
- package/frontend/template-mixins/mixins/template-mixins.js +4 -5
- package/frontend/template-mixins/partials/forms/checkbox.html +1 -5
- package/frontend/template-mixins/partials/forms/input-text-date.html +1 -2
- package/frontend/template-mixins/partials/forms/input-text-group.html +1 -1
- package/frontend/template-mixins/partials/forms/textarea-group.html +1 -1
- package/frontend/template-partials/views/layout.html +1 -1
- package/frontend/template-partials/views/partials/cookie-banner.html +32 -50
- package/frontend/template-partials/views/partials/navigation.html +2 -2
- package/frontend/themes/gov-uk/client-js/cookieSettings.js +24 -36
- package/index.js +22 -16
- package/package.json +47 -47
- package/sandbox/package.json +1 -1
- package/sandbox/yarn.lock +59 -166
- package/frontend/govuk-template/govuk_template_generated.html +0 -149
- package/sandbox/apps/sandbox/translations/en/default.json +0 -245
- package/sandbox/public/css/app.css +0 -11196
- package/sandbox/public/images/icons/icon-caret-left.png +0 -0
- package/sandbox/public/images/icons/icon-complete.png +0 -0
- package/sandbox/public/images/icons/icon-cross-remove-sign.png +0 -0
- package/sandbox/public/js/bundle.js +0 -39258
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,22 @@
|
|
|
1
|
+
## 2025-11-15, Version 22.11.0 (Stable), @Rhodine-orleans-lindsay
|
|
2
|
+
|
|
3
|
+
### Changed
|
|
4
|
+
- Updated custom session-timeout handling so that custom behaviours are not blocked by a `404` middleware error.
|
|
5
|
+
|
|
6
|
+
### Added
|
|
7
|
+
- Added a `CUSTOM_SESSION_EXPIRY` environment variable so that a time other than the redis session ttl can be used for the session timeout. **IMPORTANT**: The `CUSTOM_SESSION_EXPIRY` variable must always be a time before the redis session ttl would expire so that behaviours can run before the `SESSION_TIMEOUT` middleware is triggered.
|
|
8
|
+
- Added a `USE_CUSTOM_SESSION_TIMEOUT` that is `false` by default. When set to `true` the '/session-timeout' page can run before the session expires without triggering a `404` middleware error.
|
|
9
|
+
|
|
10
|
+
- 🎬 Action:
|
|
11
|
+
- For custom session timeout handling that is not linked to the redis session ttl, The following variables must be set: `CUSTOM_SESSION_EXPIRY` to the relevant expiry time e.g.600 and `USE_CUSTOM_SESSION_TIMEOUT` to true.
|
|
12
|
+
- If a behaviour is required on the '/session-timeout` step, the '/session-timeout' step must be set in the project's index.js, along with any relevant behaviours.
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
## 2025-10-10, Version 22.10.4 (Stable), @dk4g
|
|
16
|
+
### Security
|
|
17
|
+
- Upgraded axios version to address a security vulnerability
|
|
18
|
+
- Updated version declarations to match installed packages
|
|
19
|
+
|
|
1
20
|
## 2025-10-08, Version 22.10.3 (Stable), @Rhodine-orleans-lindsay
|
|
2
21
|
|
|
3
22
|
### Changed
|
package/README.md
CHANGED
|
@@ -867,7 +867,7 @@ Kubernetes healthcheck URLs are provided as defaults if no overrides are supplie
|
|
|
867
867
|
|----------|-------------|---------|---------|
|
|
868
868
|
| `SHOW_COOKIES_BANNER` | Controls whether the cookies banner is displayed | Auto-detected based on GA tags | `true`, `false` |
|
|
869
869
|
|
|
870
|
-
**
|
|
870
|
+
**Behaviour:**
|
|
871
871
|
- If `SHOW_COOKIES_BANNER` is explicitly set, that value is used
|
|
872
872
|
- If not set, banner is automatically shown when `GA_TAG` or `GA_4_TAG` is present
|
|
873
873
|
- If no GA tags are configured, banner is hidden by default
|
|
@@ -1328,7 +1328,11 @@ This feature allows you to customise the content related to the session timeout
|
|
|
1328
1328
|
|
|
1329
1329
|
### Usage
|
|
1330
1330
|
|
|
1331
|
-
To
|
|
1331
|
+
By default, the session timeout is set to the redis session ttl. To bypass this and display the session timeout message before the redis session ttl the following evironment variables must be set:
|
|
1332
|
+
`CUSTOM_SESSION_EXPIRY` - e.g. `600`. Configure to expire before thte project's redis session ttl.
|
|
1333
|
+
`USE_CUSTOM_SESSION_TIMEOUT` - `false` by default. When set to `true` the '/session-timeout' page can run before the session expires without triggering a `404` middleware error.
|
|
1334
|
+
|
|
1335
|
+
To enable and customise the session timeout behaviour, you need to set the component and translations in your project's `hof.settings.json` file:
|
|
1332
1336
|
```json
|
|
1333
1337
|
"behaviours": [
|
|
1334
1338
|
"hof/components/session-timeout-warning"
|
|
@@ -1348,6 +1352,20 @@ By default, the framework uses the standard content provided by HOF. If you wish
|
|
|
1348
1352
|
"saveExitFormContent": true // allows you to customise the content on the save-and-exit page
|
|
1349
1353
|
```
|
|
1350
1354
|
|
|
1355
|
+
To override the default session-timeout page completely, the path to the session-timeout.html should be set in the views property in the hof.settings.json file e.g.
|
|
1356
|
+
```json
|
|
1357
|
+
"behaviours": [
|
|
1358
|
+
"hof/components/session-timeout-warning"
|
|
1359
|
+
],
|
|
1360
|
+
"translations": "./apps/common/translations",
|
|
1361
|
+
"views": ["./apps/common/views"], // allows you to overide the HOF default session-timeout page and use a custom one from the specified views
|
|
1362
|
+
...
|
|
1363
|
+
```
|
|
1364
|
+
or in the project's `server.js` e.g.
|
|
1365
|
+
```js
|
|
1366
|
+
settings.views = path.resolve(__dirname, './apps/common/views');
|
|
1367
|
+
```
|
|
1368
|
+
|
|
1351
1369
|
### Customising content in `pages.json`
|
|
1352
1370
|
Once the variables are set, you can customise the session timeout warning and exit messages in your project's pages.json:
|
|
1353
1371
|
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
{{#isPageHeading}}</h1>{{/isPageHeading}}
|
|
7
7
|
</legend>
|
|
8
8
|
{{#hint}}
|
|
9
|
-
<
|
|
9
|
+
<span id="{{key}}-hint" class="govuk-hint">{{{hint}}}</span>
|
|
10
10
|
{{/hint}}
|
|
11
11
|
{{#error}}
|
|
12
12
|
<p id="{{key}}-error" class="govuk-error-message">
|
package/config/hof-defaults.js
CHANGED
|
@@ -59,6 +59,7 @@ const defaults = {
|
|
|
59
59
|
pdfConverter: process.env.PDF_CONVERTER_URL
|
|
60
60
|
},
|
|
61
61
|
serveStatic: process.env.SERVE_STATIC_FILES !== 'false',
|
|
62
|
+
useCustomSessionTimeout: parseBoolean(process.env.USE_CUSTOM_SESSION_TIMEOUT, false, 'USE_CUSTOM_SESSION_TIMEOUT'),
|
|
62
63
|
sessionTimeOutWarning: process.env.SESSION_TIMEOUT_WARNING || 300,
|
|
63
64
|
serviceUnavailable: parseBoolean(process.env.SERVICE_UNAVAILABLE, false, 'SERVICE_UNAVAILABLE')
|
|
64
65
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
|
|
2
2
|
<!DOCTYPE html>
|
|
3
3
|
<!--[if lt IE 9]><html class="lte-ie8" lang="{{ htmlLang }}"><![endif]-->
|
|
4
|
-
<!--[if gt IE 8]><!--><html lang="{{ htmlLang }}" class="govuk-template
|
|
4
|
+
<!--[if gt IE 8]><!--><html lang="{{ htmlLang }}" class="govuk-template"><!--<![endif]-->
|
|
5
5
|
<head>
|
|
6
6
|
<meta charset="utf-8" />
|
|
7
7
|
<title>{{ pageTitle }}</title>
|
|
@@ -23,8 +23,9 @@
|
|
|
23
23
|
<meta property="og:image" content="{{assetPath}}images/opengraph-image.png">
|
|
24
24
|
</head>
|
|
25
25
|
|
|
26
|
-
<body class="{{ bodyClasses }} govuk-template__body
|
|
27
|
-
<script>document.body.className
|
|
26
|
+
<body class="{{ bodyClasses }} govuk-template__body js-enabled" >
|
|
27
|
+
<script>document.body.className = ((document.body.className) ? document.body.className + ' js-enabled' : 'js-enabled');</script>
|
|
28
|
+
|
|
28
29
|
|
|
29
30
|
|
|
30
31
|
<div id="global-cookie-message" class="gem-c-cookie-banner govuk-clearfix" data-module="cookie-banner" role="region" aria-label="cookie banner" data-nosnippet="">
|
|
@@ -40,36 +41,17 @@
|
|
|
40
41
|
<a href="{{{ homepageUrl }}}" title="{{ logoLinkTitle }}" id="logo" class="govuk-header__link govuk-header__link--homepage" target="_blank" data-module="track-click" data-track-category="homeLinkClicked" data-track-action="homeHeader">
|
|
41
42
|
<span class="govuk-header__logotype">
|
|
42
43
|
<!--[if gt IE 8]><!-->
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
47
|
-
viewBox="0 0 324 60"
|
|
48
|
-
height="30"
|
|
49
|
-
width="162"
|
|
50
|
-
fill="currentcolor"
|
|
51
|
-
class="govuk-header__logotype"
|
|
52
|
-
aria-label="GOV.UK">
|
|
53
|
-
<title>GOV.UK</title>
|
|
54
|
-
<g>
|
|
55
|
-
<circle cx="20" cy="17.6" r="3.7"></circle>
|
|
56
|
-
<circle cx="10.2" cy="23.5" r="3.7"></circle>
|
|
57
|
-
<circle cx="3.7" cy="33.2" r="3.7"></circle>
|
|
58
|
-
<circle cx="31.7" cy="30.6" r="3.7"></circle>
|
|
59
|
-
<circle cx="43.3" cy="17.6" r="3.7"></circle>
|
|
60
|
-
<circle cx="53.2" cy="23.5" r="3.7"></circle>
|
|
61
|
-
<circle cx="59.7" cy="33.2" r="3.7"></circle>
|
|
62
|
-
<circle cx="31.7" cy="30.6" r="3.7"></circle>
|
|
63
|
-
<path d="M33.1,9.8c.2-.1.3-.3.5-.5l4.6,2.4v-6.8l-4.6,1.5c-.1-.2-.3-.3-.5-.5l1.9-5.9h-6.7l1.9,5.9c-.2.1-.3.3-.5.5l-4.6-1.5v6.8l4.6-2.4c.1.2.3.3.5.5l-2.6,8c-.9,2.8,1.2,5.7,4.1,5.7h0c3,0,5.1-2.9,4.1-5.7l-2.6-8ZM37,37.9s-3.4,3.8-4.1,6.1c2.2,0,4.2-.5,6.4-2.8l-.7,8.5c-2-2.8-4.4-4.1-5.7-3.8.1,3.1.5,6.7,5.8,7.2,3.7.3,6.7-1.5,7-3.8.4-2.6-2-4.3-3.7-1.6-1.4-4.5,2.4-6.1,4.9-3.2-1.9-4.5-1.8-7.7,2.4-10.9,3,4,2.6,7.3-1.2,11.1,2.4-1.3,6.2,0,4,4.6-1.2-2.8-3.7-2.2-4.2.2-.3,1.7.7,3.7,3,4.2,1.9.3,4.7-.9,7-5.9-1.3,0-2.4.7-3.9,1.7l2.4-8c.6,2.3,1.4,3.7,2.2,4.5.6-1.6.5-2.8,0-5.3l5,1.8c-2.6,3.6-5.2,8.7-7.3,17.5-7.4-1.1-15.7-1.7-24.5-1.7h0c-8.8,0-17.1.6-24.5,1.7-2.1-8.9-4.7-13.9-7.3-17.5l5-1.8c-.5,2.5-.6,3.7,0,5.3.8-.8,1.6-2.3,2.2-4.5l2.4,8c-1.5-1-2.6-1.7-3.9-1.7,2.3,5,5.2,6.2,7,5.9,2.3-.4,3.3-2.4,3-4.2-.5-2.4-3-3.1-4.2-.2-2.2-4.6,1.6-6,4-4.6-3.7-3.7-4.2-7.1-1.2-11.1,4.2,3.2,4.3,6.4,2.4,10.9,2.5-2.8,6.3-1.3,4.9,3.2-1.8-2.7-4.1-1-3.7,1.6.3,2.3,3.3,4.1,7,3.8,5.4-.5,5.7-4.2,5.8-7.2-1.3-.2-3.7,1-5.7,3.8l-.7-8.5c2.2,2.3,4.2,2.7,6.4,2.8-.7-2.3-4.1-6.1-4.1-6.1h10.6,0Z"></path>
|
|
64
|
-
</g>
|
|
65
|
-
<circle class="govuk-logo-dot" cx="226" cy="36" r="7.3"></circle>
|
|
66
|
-
<path d="M93.94 41.25c.4 1.81 1.2 3.21 2.21 4.62 1 1.4 2.21 2.41 3.61 3.21s3.21 1.2 5.22 1.2 3.61-.4 4.82-1c1.4-.6 2.41-1.4 3.21-2.41.8-1 1.4-2.01 1.61-3.01s.4-2.01.4-3.01v.14h-10.86v-7.02h20.07v24.08h-8.03v-5.56c-.6.8-1.38 1.61-2.19 2.41-.8.8-1.81 1.2-2.81 1.81-1 .4-2.21.8-3.41 1.2s-2.41.4-3.81.4a18.56 18.56 0 0 1-14.65-6.63c-1.6-2.01-3.01-4.41-3.81-7.02s-1.4-5.62-1.4-8.83.4-6.02 1.4-8.83a20.45 20.45 0 0 1 19.46-13.65c3.21 0 4.01.2 5.82.8 1.81.4 3.61 1.2 5.02 2.01 1.61.8 2.81 2.01 4.01 3.21s2.21 2.61 2.81 4.21l-7.63 4.41c-.4-1-1-1.81-1.61-2.61-.6-.8-1.4-1.4-2.21-2.01-.8-.6-1.81-1-2.81-1.4-1-.4-2.21-.4-3.61-.4-2.01 0-3.81.4-5.22 1.2-1.4.8-2.61 1.81-3.61 3.21s-1.61 2.81-2.21 4.62c-.4 1.81-.6 3.71-.6 5.42s.8 5.22.8 5.22Zm57.8-27.9c3.21 0 6.22.6 8.63 1.81 2.41 1.2 4.82 2.81 6.62 4.82S170.2 24.39 171 27s1.4 5.62 1.4 8.83-.4 6.02-1.4 8.83-2.41 5.02-4.01 7.02-4.01 3.61-6.62 4.82-5.42 1.81-8.63 1.81-6.22-.6-8.63-1.81-4.82-2.81-6.42-4.82-3.21-4.41-4.01-7.02-1.4-5.62-1.4-8.83.4-6.02 1.4-8.83 2.41-5.02 4.01-7.02 4.01-3.61 6.42-4.82 5.42-1.81 8.63-1.81Zm0 36.73c1.81 0 3.61-.4 5.02-1s2.61-1.81 3.61-3.01 1.81-2.81 2.21-4.41c.4-1.81.8-3.61.8-5.62 0-2.21-.2-4.21-.8-6.02s-1.2-3.21-2.21-4.62c-1-1.2-2.21-2.21-3.61-3.01s-3.21-1-5.02-1-3.61.4-5.02 1c-1.4.8-2.61 1.81-3.61 3.01s-1.81 2.81-2.21 4.62c-.4 1.81-.8 3.61-.8 5.62 0 2.41.2 4.21.8 6.02.4 1.81 1.2 3.21 2.21 4.41s2.21 2.21 3.61 3.01c1.4.8 3.21 1 5.02 1Zm36.32 7.96-12.24-44.15h9.83l8.43 32.77h.4l8.23-32.77h9.83L200.3 58.04h-12.24Zm74.14-7.96c2.18 0 3.51-.6 3.51-.6 1.2-.6 2.01-1 2.81-1.81s1.4-1.81 1.81-2.81a13 13 0 0 0 .8-4.01V13.9h8.63v28.15c0 2.41-.4 4.62-1.4 6.62-.8 2.01-2.21 3.61-3.61 5.02s-3.41 2.41-5.62 3.21-4.62 1.2-7.02 1.2-5.02-.4-7.02-1.2c-2.21-.8-4.01-1.81-5.62-3.21s-2.81-3.01-3.61-5.02-1.4-4.21-1.4-6.62V13.9h8.63v26.95c0 1.61.2 3.01.8 4.01.4 1.2 1.2 2.21 2.01 2.81.8.8 1.81 1.4 2.81 1.81 0 0 1.34.6 3.51.6Zm34.22-36.18v18.92l15.65-18.92h10.82l-15.03 17.32 16.03 26.83h-10.21l-11.44-20.21-5.62 6.22v13.99h-8.83V13.9"></path>
|
|
67
|
-
</svg>
|
|
44
|
+
<svg aria-hidden="true" focusable="false" class="govuk-header__logotype-crown" xmlns="http://www.w3.org/2000/svg\" viewBox="0 0 32 30" height="30" width="32">
|
|
45
|
+
<path fill="currentColor" fill-rule="evenodd" d="M22.6 10.4c-1 .4-2-.1-2.4-1-.4-.9.1-2 1-2.4.9-.4 2 .1 2.4 1s-.1 2-1 2.4m-5.9 6.7c-.9.4-2-.1-2.4-1-.4-.9.1-2 1-2.4.9-.4 2 .1 2.4 1s-.1 2-1 2.4m10.8-3.7c-1 .4-2-.1-2.4-1-.4-.9.1-2 1-2.4.9-.4 2 .1 2.4 1s0 2-1 2.4m3.3 4.8c-1 .4-2-.1-2.4-1-.4-.9.1-2 1-2.4.9-.4 2 .1 2.4 1s-.1 2-1 2.4M17 4.7l2.3 1.2V2.5l-2.3.7-.2-.2.9-3h-3.4l.9 3-.2.2c-.1.1-2.3-.7-2.3-.7v3.4L15 4.7c.1.1.1.2.2.2l-1.3 4c-.1.2-.1.4-.1.6 0 1.1.8 2 1.9 2.2h.7c1-.2 1.9-1.1 1.9-2.1 0-.2 0-.4-.1-.6l-1.3-4c-.1-.2 0-.2.1-.3m-7.6 5.7c.9.4 2-.1 2.4-1 .4-.9-.1-2-1-2.4-.9-.4-2 .1-2.4 1s0 2 1 2.4m-5 3c.9.4 2-.1 2.4-1 .4-.9-.1-2-1-2.4-.9-.4-2 .1-2.4 1s.1 2 1 2.4m-3.2 4.8c.9.4 2-.1 2.4-1 .4-.9-.1-2-1-2.4-.9-.4-2 .1-2.4 1s0 2 1 2.4m14.8 11c4.4 0 8.6.3 12.3.8 1.1-4.5 2.4-7 3.7-8.8l-2.5-.9c.2 1.3.3 1.9 0 2.7-.4-.4-.8-1.1-1.1-2.3l-1.2 4c.7-.5 1.3-.8 2-.9-1.1 2.5-2.6 3.1-3.5 3-1.1-.2-1.7-1.2-1.5-2.1.3-1.2 1.5-1.5 2.1-.1 1.1-2.3-.8-3-2-2.3 1.9-1.9 2.1-3.5.6-5.6-2.1 1.6-2.1 3.2-1.2 5.5-1.2-1.4-3.2-.6-2.5 1.6.9-1.4 2.1-.5 1.9.8-.2 1.1-1.7 2.1-3.5 1.9-2.7-.2-2.9-2.1-2.9-3.6.7-.1 1.9.5 2.9 1.9l.4-4.3c-1.1 1.1-2.1 1.4-3.2 1.4.4-1.2 2.1-3 2.1-3h-5.4s1.7 1.9 2.1 3c-1.1 0-2.1-.2-3.2-1.4l.4 4.3c1-1.4 2.2-2 2.9-1.9-.1 1.5-.2 3.4-2.9 3.6-1.9.2-3.4-.8-3.5-1.9-.2-1.3 1-2.2 1.9-.8.7-2.3-1.2-3-2.5-1.6.9-2.2.9-3.9-1.2-5.5-1.5 2-1.3 3.7.6 5.6-1.2-.7-3.1 0-2 2.3.6-1.4 1.8-1.1 2.1.1.2.9-.3 1.9-1.5 2.1-.9.2-2.4-.5-3.5-3 .6 0 1.2.3 2 .9l-1.2-4c-.3 1.1-.7 1.9-1.1 2.3-.3-.8-.2-1.4 0-2.7l-2.9.9C1.3 23 2.6 25.5 3.7 30c3.7-.5 7.9-.8 12.3-.8"></path>
|
|
46
|
+
</svg>
|
|
68
47
|
<!--<![endif]-->
|
|
69
48
|
<!--[if IE 8]>
|
|
70
49
|
<img src="{{ assetPath }}images/govuk-logotype-tudor-crown.png" class="govuk-header__logotype-crown-fallback-image" width="32" height="30" alt="">
|
|
71
50
|
<![endif]-->
|
|
72
51
|
</span>
|
|
52
|
+
<span class="govuk-header__logotype-text">
|
|
53
|
+
{{{ globalHeaderText }}}
|
|
54
|
+
</span>
|
|
73
55
|
</a>
|
|
74
56
|
</div>
|
|
75
57
|
{{{ insideHeader }}}
|
|
@@ -84,54 +66,25 @@
|
|
|
84
66
|
|
|
85
67
|
{{{ content }}}
|
|
86
68
|
|
|
87
|
-
<footer class="govuk-footer">
|
|
69
|
+
<footer class="govuk-footer" id="footer" role="contentinfo">
|
|
70
|
+
|
|
88
71
|
<div class="govuk-width-container">
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
role="presentation"
|
|
92
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
93
|
-
viewBox="0 0 64 60"
|
|
94
|
-
height="30"
|
|
95
|
-
width="32"
|
|
96
|
-
fill="currentcolor" class="govuk-footer__crown">
|
|
97
|
-
<g>
|
|
98
|
-
<circle cx="20" cy="17.6" r="3.7" />
|
|
99
|
-
<circle cx="10.2" cy="23.5" r="3.7" />
|
|
100
|
-
<circle cx="3.7" cy="33.2" r="3.7" />
|
|
101
|
-
<circle cx="31.7" cy="30.6" r="3.7" />
|
|
102
|
-
<circle cx="43.3" cy="17.6" r="3.7" />
|
|
103
|
-
<circle cx="53.2" cy="23.5" r="3.7" />
|
|
104
|
-
<circle cx="59.7" cy="33.2" r="3.7" />
|
|
105
|
-
<circle cx="31.7" cy="30.6" r="3.7" />
|
|
106
|
-
<path d="M33.1,9.8c.2-.1.3-.3.5-.5l4.6,2.4v-6.8l-4.6,1.5c-.1-.2-.3-.3-.5-.5l1.9-5.9h-6.7l1.9,5.9c-.2.1-.3.3-.5.5l-4.6-1.5v6.8l4.6-2.4c.1.2.3.3.5.5l-2.6,8c-.9,2.8,1.2,5.7,4.1,5.7h0c3,0,5.1-2.9,4.1-5.7l-2.6-8ZM37,37.9s-3.4,3.8-4.1,6.1c2.2,0,4.2-.5,6.4-2.8l-.7,8.5c-2-2.8-4.4-4.1-5.7-3.8.1,3.1.5,6.7,5.8,7.2,3.7.3,6.7-1.5,7-3.8.4-2.6-2-4.3-3.7-1.6-1.4-4.5,2.4-6.1,4.9-3.2-1.9-4.5-1.8-7.7,2.4-10.9,3,4,2.6,7.3-1.2,11.1,2.4-1.3,6.2,0,4,4.6-1.2-2.8-3.7-2.2-4.2.2-.3,1.7.7,3.7,3,4.2,1.9.3,4.7-.9,7-5.9-1.3,0-2.4.7-3.9,1.7l2.4-8c.6,2.3,1.4,3.7,2.2,4.5.6-1.6.5-2.8,0-5.3l5,1.8c-2.6,3.6-5.2,8.7-7.3,17.5-7.4-1.1-15.7-1.7-24.5-1.7h0c-8.8,0-17.1.6-24.5,1.7-2.1-8.9-4.7-13.9-7.3-17.5l5-1.8c-.5,2.5-.6,3.7,0,5.3.8-.8,1.6-2.3,2.2-4.5l2.4,8c-1.5-1-2.6-1.7-3.9-1.7,2.3,5,5.2,6.2,7,5.9,2.3-.4,3.3-2.4,3-4.2-.5-2.4-3-3.1-4.2-.2-2.2-4.6,1.6-6,4-4.6-3.7-3.7-4.2-7.1-1.2-11.1,4.2,3.2,4.3,6.4,2.4,10.9,2.5-2.8,6.3-1.3,4.9,3.2-1.8-2.7-4.1-1-3.7,1.6.3,2.3,3.3,4.1,7,3.8,5.4-.5,5.7-4.2,5.8-7.2-1.3-.2-3.7,1-5.7,3.8l-.7-8.5c2.2,2.3,4.2,2.7,6.4,2.8-.7-2.3-4.1-6.1-4.1-6.1h10.6,0Z" />
|
|
107
|
-
</g>
|
|
108
|
-
</svg>
|
|
72
|
+
{{{ footerTop }}}
|
|
73
|
+
|
|
109
74
|
<div class="govuk-footer__meta">
|
|
110
75
|
<div class="govuk-footer__meta-item govuk-footer__meta-item--grow">
|
|
111
|
-
|
|
76
|
+
<h2 class="govuk-visually-hidden">Support links</h2>
|
|
112
77
|
{{{ footerSupportLinks }}}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
class="govuk-footer__licence-logo"
|
|
117
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
118
|
-
viewBox="0 0 483.2 195.7"
|
|
119
|
-
height="17"
|
|
120
|
-
width="41">
|
|
121
|
-
<path
|
|
122
|
-
fill="currentColor"
|
|
123
|
-
d="M421.5 142.8V.1l-50.7 32.3v161.1h112.4v-50.7zm-122.3-9.6A47.12 47.12 0 0 1 221 97.8c0-26 21.1-47.1 47.1-47.1 16.7 0 31.4 8.7 39.7 21.8l42.7-27.2A97.63 97.63 0 0 0 268.1 0c-36.5 0-68.3 20.1-85.1 49.7A98 98 0 0 0 97.8 0C43.9 0 0 43.9 0 97.8s43.9 97.8 97.8 97.8c36.5 0 68.3-20.1 85.1-49.7a97.76 97.76 0 0 0 149.6 25.4l19.4 22.2h3v-87.8h-80l24.3 27.5zM97.8 145c-26 0-47.1-21.1-47.1-47.1s21.1-47.1 47.1-47.1 47.2 21 47.2 47S123.8 145 97.8 145" />
|
|
78
|
+
|
|
79
|
+
<svg aria-hidden="true" focusable="false" class="govuk-footer__licence-logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 483.2 195.7" height="17" width="41">
|
|
80
|
+
<path fill="currentColor" d="M421.5 142.8V.1l-50.7 32.3v161.1h112.4v-50.7zm-122.3-9.6A47.12 47.12 0 0 1 221 97.8c0-26 21.1-47.1 47.1-47.1 16.7 0 31.4 8.7 39.7 21.8l42.7-27.2A97.63 97.63 0 0 0 268.1 0c-36.5 0-68.3 20.1-85.1 49.7A98 98 0 0 0 97.8 0C43.9 0 0 43.9 0 97.8s43.9 97.8 97.8 97.8c36.5 0 68.3-20.1 85.1-49.7a97.76 97.76 0 0 0 149.6 25.4l19.4 22.2h3v-87.8h-80l24.3 27.5zM97.8 145c-26 0-47.1-21.1-47.1-47.1s21.1-47.1 47.1-47.1 47.2 21 47.2 47S123.8 145 97.8 145"></path>
|
|
124
81
|
</svg>
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
</span>
|
|
82
|
+
|
|
83
|
+
<span class="govuk-footer__licence-description">{{{ licenceMessage }}}</span>
|
|
128
84
|
</div>
|
|
85
|
+
|
|
129
86
|
<div class="govuk-footer__meta-item">
|
|
130
|
-
<a
|
|
131
|
-
class="govuk-footer__link govuk-footer__copyright-logo"
|
|
132
|
-
href="https://www.nationalarchives.gov.uk/information-management/re-using-public-sector-information/uk-government-licensing-framework/crown-copyright/">
|
|
133
|
-
{{{ crownCopyrightMessage }}}
|
|
134
|
-
</a>
|
|
87
|
+
<a class="govuk-footer__link govuk-footer__copyright-logo" id="copyright-logo" target="_blank" href="https://www.nationalarchives.gov.uk/information-management/re-using-public-sector-information/uk-government-licensing-framework/crown-copyright/">{{{ crownCopyrightMessage }}}</a>
|
|
135
88
|
</div>
|
|
136
89
|
</div>
|
|
137
90
|
</div>
|
|
@@ -358,8 +358,7 @@ module.exports = function (options) {
|
|
|
358
358
|
path: 'partials/forms/input-text-group',
|
|
359
359
|
renderWith: inputText,
|
|
360
360
|
options: {
|
|
361
|
-
maxlength: 18
|
|
362
|
-
className: 'govuk-input govuk-input--extra-letter-spacing'
|
|
361
|
+
maxlength: 18
|
|
363
362
|
}
|
|
364
363
|
},
|
|
365
364
|
'input-file': {
|
|
@@ -460,12 +459,12 @@ module.exports = function (options) {
|
|
|
460
459
|
const parts = [];
|
|
461
460
|
|
|
462
461
|
if (isExact) {
|
|
463
|
-
const dayPart = compiled['partials/forms/input-text-date'].render(inputText.call(this, key + '-day', {
|
|
462
|
+
const dayPart = compiled['partials/forms/input-text-date'].render(inputText.call(this, key + '-day', { pattern: '[0-9]*', min: 1, max: 31, maxlength: 2, hintId: key + '-hint', date: true, autocomplete: autocomplete.day, formGroupClassName, className: classNameDay, isThisRequired }));
|
|
464
463
|
parts.push(dayPart);
|
|
465
464
|
}
|
|
466
465
|
|
|
467
|
-
const monthPart = compiled['partials/forms/input-text-date'].render(inputText.call(this, key + '-month', {
|
|
468
|
-
const yearPart = compiled['partials/forms/input-text-date'].render(inputText.call(this, key + '-year', {
|
|
466
|
+
const monthPart = compiled['partials/forms/input-text-date'].render(inputText.call(this, key + '-month', { pattern: '[0-9]*', min: 1, max: 12, maxlength: 2, hintId: key + '-hint', date: true, autocomplete: autocomplete.month, formGroupClassName, className: classNameMonth, isThisRequired }));
|
|
467
|
+
const yearPart = compiled['partials/forms/input-text-date'].render(inputText.call(this, key + '-year', { pattern: '[0-9]*', maxlength: 4, hintId: key + '-hint', date: true, autocomplete: autocomplete.year, formGroupClassName, className: classNameYear, isThisRequired }));
|
|
469
468
|
|
|
470
469
|
return parts.concat(monthPart, yearPart).join('\n');
|
|
471
470
|
};
|
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
<div id="{{key}}-group" class="govuk-form-group {{#compound}} form-group-compound{{/compound}}{{#formGroupClassName}} {{formGroupClassName}}{{/formGroupClassName}}{{#error}} govuk-form-group--error{{/error}}">
|
|
2
|
-
{{#error}}
|
|
3
|
-
<p class="govuk-error-message" aria-hidden="true">
|
|
4
|
-
<span class="govuk-visually-hidden">Error:</span> {{error.message}}
|
|
5
|
-
</p>
|
|
6
|
-
{{/error}}
|
|
2
|
+
{{#error}}<p class="govuk-error-message" aria-hidden="true">{{error.message}}</p>{{/error}}
|
|
7
3
|
<div class="govuk-checkboxes__item">
|
|
8
4
|
<input class="govuk-checkboxes__input" type="checkbox" id="{{key}}" name="{{key}}" value="true" aria-required="{{required}}"{{#error}} aria-invalid="true"{{/error}}{{^error}}{{#toggle}} data-toggle="{{toggle}}"{{/toggle}}{{#selected}} checked="checked"{{/selected}}{{/error}}>
|
|
9
5
|
<label for="{{key}}" class="{{#className}}{{className}} {{/className}}{{#invalid}}invalid-input{{/invalid}}">
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<label for="{{id}}" class="{{labelClassName}}">
|
|
4
4
|
<span class="label-text">{{{label}}}</span>
|
|
5
5
|
</label>
|
|
6
|
-
{{#hint}}<
|
|
6
|
+
{{#hint}}<span {{$hintId}}id="{{hintId}}" {{/hintId}}class="govuk-hint">{{{hint}}}</span>{{/hint}}
|
|
7
7
|
{{#renderChild}}{{/renderChild}}
|
|
8
8
|
{{#attributes}}
|
|
9
9
|
{{#prefix}}
|
|
@@ -21,7 +21,6 @@
|
|
|
21
21
|
{{#max}} max="{{max}}"{{/max}}
|
|
22
22
|
{{#maxlength}} maxlength="{{maxlength}}"{{/maxlength}}
|
|
23
23
|
{{#pattern}} pattern="{{pattern}}"{{/pattern}}
|
|
24
|
-
{{#inputmode}}inputmode="{{inputmode}}"{{/inputmode}}
|
|
25
24
|
{{#hintId}} aria-describedby="{{hintId}}"{{/hintId}}
|
|
26
25
|
{{#error}} aria-invalid="true"{{/error}}
|
|
27
26
|
{{#autocomplete}} autocomplete="{{autocomplete}}"{{/autocomplete}}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
{{{label}}}
|
|
4
4
|
</label>
|
|
5
5
|
{{#isPageHeading}}</h1>{{/isPageHeading}}
|
|
6
|
-
{{#hint}}<
|
|
6
|
+
{{#hint}}<span {{$hintId}}id="{{hintId}}" {{/hintId}}class="govuk-hint">{{{hint}}}</span>{{/hint}}
|
|
7
7
|
{{#error}}
|
|
8
8
|
<p class="govuk-error-message">
|
|
9
9
|
<span class="govuk-visually-hidden">Error:</span> {{error.message}}
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
{{#error}} aria-invalid="true" aria-describedby="{{id}}-error" {{/error}}
|
|
30
30
|
>{{value}}</textarea>
|
|
31
31
|
{{#isMaxlengthOrMaxword}}
|
|
32
|
-
<div id="{{id}}-info" class=" govuk-hint govuk-character-count__message">You have {{#maxlength}}{{maxlength}} characters{{/maxlength}}{{#maxword}}{{maxword}}
|
|
32
|
+
<div id="{{id}}-info" class=" govuk-hint govuk-character-count__message" aria-live="polite">You have {{#maxlength}}{{maxlength}} characters{{/maxlength}}{{#maxword}}{{maxword}}
|
|
33
33
|
words{{/maxword}} remaining
|
|
34
34
|
</div>
|
|
35
35
|
{{/isMaxlengthOrMaxword}}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
{{#errorlist.length}}{{#t}}errorlist.prefix{{/t}}{{/errorlist.length}}{{#title}}{{title}}{{/title}}{{^title}}{{$header}}{{/header}}{{/title}}{{#serviceName}} – {{serviceName}}{{/serviceName}} – GOV.UK
|
|
7
7
|
{{/pageTitle}}
|
|
8
8
|
{{$bodyStart}}
|
|
9
|
-
<a href="#{{#skipToMain}}{{skipToMain}}{{/skipToMain}}{{^skipToMain}}main-content{{/skipToMain}}" class="govuk-skip-link"
|
|
9
|
+
<a href="#{{#skipToMain}}{{skipToMain}}{{/skipToMain}}{{^skipToMain}}main-content{{/skipToMain}}" class="govuk-skip-link" id="skip-to-main">Skip to main content</a>
|
|
10
10
|
{{/bodyStart}}
|
|
11
11
|
{{$headerClass}}govuk-header{{/headerClass}}
|
|
12
12
|
{{$insideHeader}}{{/insideHeader}}
|
|
@@ -1,51 +1,33 @@
|
|
|
1
|
-
<div id="cookie-banner" class="govuk-cookie-banner
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
Hide cookie message
|
|
34
|
-
</button>
|
|
35
|
-
</div>
|
|
36
|
-
</div>
|
|
37
|
-
<div id="cookie-banner-submitted-rejected" class="govuk-cookie-banner__message govuk-width-container" role="alert" hidden>
|
|
38
|
-
<div class="govuk-grid-row">
|
|
39
|
-
<div class="govuk-grid-column-two-thirds">
|
|
40
|
-
<div class="govuk-cookie-banner__content">
|
|
41
|
-
<p class="govuk-body">You've rejected additional cookies. You can <a class="govuk-link" href="/cookies">change your cookie settings</a> at any time.</p>
|
|
42
|
-
</div>
|
|
43
|
-
</div>
|
|
44
|
-
</div>
|
|
45
|
-
<div class="govuk-button-group">
|
|
46
|
-
<button id="hide-reject-cookie-banner" value="yes" type="submit" name="cookies[hide]" class="govuk-button" data-module="govuk-button">
|
|
47
|
-
Hide cookie message
|
|
48
|
-
</button>
|
|
49
|
-
</div>
|
|
50
|
-
</div>
|
|
1
|
+
<div id="cookie-banner" class="govuk-cookie-banner gem-c-cookie-banner govuk-clearfix">
|
|
2
|
+
<div class="gem-c-cookie-banner__message govuk-cookie-banner__message govuk-width-container">
|
|
3
|
+
<div id="cookie-banner-info" class="govuk-grid-row">
|
|
4
|
+
<div class="govuk-grid-column-two-thirds">
|
|
5
|
+
<h2 class="govuk-cookie-banner__heading govuk-heading-m">Cookies on {{#appName}}{{appName}}{{/appName}}{{^appName}}this service{{/appName}}</h2>
|
|
6
|
+
<div class="govuk-cookie-banner__content">
|
|
7
|
+
<p class="govuk-body">{{#t}}cookies.banner.message{{/t}}</p>
|
|
8
|
+
{{#hasGoogleAnalytics}}
|
|
9
|
+
<p class="govuk-body">We'd like to set additional cookies to understand how you use GOV.UK, remember your settings and improve government services.</p>
|
|
10
|
+
<p class="govuk-body">We also use cookies set by other sites to help us deliver content from their services.</p>
|
|
11
|
+
{{/hasGoogleAnalytics}}
|
|
12
|
+
</div>
|
|
13
|
+
</div>
|
|
14
|
+
</div>
|
|
15
|
+
<div id="cookie-banner-actions" class="govuk-button-group">
|
|
16
|
+
{{#hasGoogleAnalytics}}
|
|
17
|
+
<button id="accept-cookies-button" class="gem-c-button govuk-button" type="submit" data-module="gem-track-click" data-accept-cookies="true" data-track-category="cookieBanner" data-track-action="Cookie banner accepted" data-cookie-types="all">Accept additional cookies</button>
|
|
18
|
+
|
|
19
|
+
<button id="reject-cookies-button" class="gem-c-button govuk-button" type="submit" data-module="gem-track-click" data-reject-cookies="true" data-track-category="cookieBanner" data-track-action="Cookie banner rejected">Reject additional cookies</button>
|
|
20
|
+
{{/hasGoogleAnalytics}}
|
|
21
|
+
<a class="govuk-link" href="/cookies">{{#t}}cookies.banner.link{{/t}}</a>
|
|
22
|
+
</div>
|
|
23
|
+
</div>
|
|
24
|
+
|
|
25
|
+
<div class="gem-c-cookie-banner__confirmation govuk-width-container" hidden="" id="cookie-banner-submitted" >
|
|
26
|
+
<p class="gem-c-cookie-banner__confirmation-message" role="alert">
|
|
27
|
+
Your cookie preferences have been saved. You can <a class="govuk-link" data-module="gem-track-click" data-track-category="cookieBanner" data-track-action="Cookie banner settings clicked from confirmation" href="/cookies">change your cookie settings</a> at any time.
|
|
28
|
+
</p>
|
|
29
|
+
<div class="govuk-button-group">
|
|
30
|
+
<button class="gem-c-cookie-banner__hide-button govuk-button" id="hide-cookie-banner">Hide this message</button>
|
|
31
|
+
</div>
|
|
32
|
+
</div>
|
|
51
33
|
</div>
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<div class="govuk-header__content">
|
|
2
2
|
{{#startPageRedirectUrl}}
|
|
3
|
-
<a href="{{startPageRedirectUrl}}" class="govuk-header__link govuk-
|
|
3
|
+
<a href="{{startPageRedirectUrl}}" class="govuk-header__link govuk-header__link--service-name" id="proposition-name">{{$journeyHeader}}{{/journeyHeader}}</a>
|
|
4
4
|
{{/startPageRedirectUrl}}
|
|
5
5
|
{{^startPageRedirectUrl}}
|
|
6
|
-
<a href="{{journeyHeaderURL}}" class="govuk-header__link govuk-
|
|
6
|
+
<a href="{{journeyHeaderURL}}" class="govuk-header__link govuk-header__link--service-name" id="proposition-name">{{$journeyHeader}}{{/journeyHeader}}</a>
|
|
7
7
|
{{/startPageRedirectUrl}}
|
|
8
8
|
</div>
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
/* eslint-disable max-len, no-undef */
|
|
1
|
+
/* eslint-disable max-len, no-var, vars-on-top, no-undef */
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
// TODO: update package.json(s)
|
|
5
5
|
|
|
6
6
|
function hideFallbackContent(containerId) {
|
|
7
|
-
|
|
7
|
+
var container = document.getElementById(containerId);
|
|
8
8
|
if (container === null) return;
|
|
9
|
-
|
|
10
|
-
for (
|
|
9
|
+
var fallbackContent = container.getElementsByClassName('js-disabled');
|
|
10
|
+
for (var i = 0; i < fallbackContent.length; i++) {
|
|
11
11
|
fallbackContent[i].style.display = 'none';
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
function showInteractiveContent(containerId) {
|
|
16
|
-
|
|
16
|
+
var container = document.getElementById(containerId);
|
|
17
17
|
if (container === null) return;
|
|
18
|
-
|
|
19
|
-
for (
|
|
18
|
+
var interactiveContent = container.getElementsByClassName('js-enabled');
|
|
19
|
+
for (var i = 0; i < interactiveContent.length; i++) {
|
|
20
20
|
interactiveContent[i].style.display = 'block';
|
|
21
21
|
}
|
|
22
22
|
}
|
|
@@ -34,53 +34,41 @@ function setCookiePreferences(preferences) {
|
|
|
34
34
|
function showCookieBannerSubmitted() {
|
|
35
35
|
document.getElementById('cookie-banner-info').style.display = 'none';
|
|
36
36
|
document.getElementById('cookie-banner-actions').style.display = 'none';
|
|
37
|
-
|
|
38
|
-
const cookieBannerDiv = document.getElementById('cookie-banner-submitted-accepted');
|
|
39
|
-
if (cookieBannerDiv.dataset.acceptCookies === 'true') {
|
|
40
|
-
cookieBannerSubmitted = document.getElementById('cookie-banner-submitted-accepted');
|
|
41
|
-
} else {
|
|
42
|
-
cookieBannerSubmitted = document.getElementById('cookie-banner-submitted-rejected');
|
|
43
|
-
}
|
|
37
|
+
var cookieBannerSubmitted = document.getElementById('cookie-banner-submitted');
|
|
44
38
|
cookieBannerSubmitted.style.display = 'block';
|
|
45
39
|
cookieBannerSubmitted.focus();
|
|
46
40
|
}
|
|
47
41
|
|
|
48
|
-
function hideCookieBanner() {
|
|
49
|
-
document.getElementById('cookie-banner').style.display = 'none';
|
|
50
|
-
}
|
|
51
|
-
|
|
52
42
|
function initialiseBannerButtons() {
|
|
53
|
-
const acceptedCookieBannerDiv = document.getElementById('cookie-banner-submitted-accepted');
|
|
54
43
|
document.getElementById('accept-cookies-button').addEventListener('click', function () {
|
|
55
|
-
setCookiePreferences({
|
|
44
|
+
setCookiePreferences({essential: true, usage: true});
|
|
56
45
|
showCookieBannerSubmitted();
|
|
57
46
|
sessionStorage.setItem('reloading', 'true');
|
|
58
47
|
window.location = document.URL;
|
|
59
48
|
});
|
|
60
49
|
|
|
61
50
|
document.getElementById('reject-cookies-button').addEventListener('click', function () {
|
|
62
|
-
setCookiePreferences({
|
|
63
|
-
acceptedCookieBannerDiv.dataset.acceptCookies = 'false';
|
|
51
|
+
setCookiePreferences({essential: true, usage: false});
|
|
64
52
|
showCookieBannerSubmitted();
|
|
65
53
|
});
|
|
66
54
|
|
|
67
|
-
document.getElementById('hide-
|
|
68
|
-
|
|
69
|
-
|
|
55
|
+
document.getElementById('hide-cookie-banner').addEventListener('click', function () {
|
|
56
|
+
document.getElementById('cookie-banner').style.display = 'none';
|
|
57
|
+
});
|
|
70
58
|
}
|
|
71
59
|
|
|
72
60
|
function initialiseCookieBanner() {
|
|
73
|
-
|
|
61
|
+
var preferences = GOVUK.cookie('cookie_preferences');
|
|
74
62
|
|
|
75
63
|
if (preferences !== null) {
|
|
76
64
|
return;
|
|
77
65
|
}
|
|
78
66
|
|
|
79
67
|
// the default cookie message container from hof-govuk-template
|
|
80
|
-
|
|
68
|
+
var bannerContainer = document.getElementById('global-cookie-message');
|
|
81
69
|
|
|
82
70
|
// the cookie banner that will replace the container's default content if using google analytics
|
|
83
|
-
|
|
71
|
+
var cookieBanner = document.getElementById('cookie-banner');
|
|
84
72
|
|
|
85
73
|
if (bannerContainer !== null && cookieBanner !== null) {
|
|
86
74
|
hideFallbackContent('global-cookie-message');
|
|
@@ -94,8 +82,8 @@ function handleSaveSettings(e) {
|
|
|
94
82
|
e.preventDefault();
|
|
95
83
|
setCookiePreferences({ essential: true, usage: document.getElementById('radio-1').checked });
|
|
96
84
|
|
|
97
|
-
|
|
98
|
-
|
|
85
|
+
var cookieNotification = document.getElementById('cookie-notification');
|
|
86
|
+
var cookieBanner = document.getElementById('cookie-banner');
|
|
99
87
|
|
|
100
88
|
if (cookieBanner !== null) {
|
|
101
89
|
cookieBanner.style.display = 'none';
|
|
@@ -108,8 +96,8 @@ function handleSaveSettings(e) {
|
|
|
108
96
|
}
|
|
109
97
|
|
|
110
98
|
function initialiseFormControls() {
|
|
111
|
-
|
|
112
|
-
|
|
99
|
+
var preferences = JSON.parse(GOVUK.cookie('cookie_preferences'));
|
|
100
|
+
var usage;
|
|
113
101
|
|
|
114
102
|
if (preferences !== null && preferences.usage !== undefined && typeof preferences.usage === 'boolean') {
|
|
115
103
|
usage = preferences.usage;
|
|
@@ -123,7 +111,7 @@ function initialiseFormControls() {
|
|
|
123
111
|
}
|
|
124
112
|
|
|
125
113
|
function initialiseCookiePage() {
|
|
126
|
-
|
|
114
|
+
var shouldDisplayCookieControls = document.getElementById('cookie-settings') !== null;
|
|
127
115
|
|
|
128
116
|
if (shouldDisplayCookieControls) {
|
|
129
117
|
hideFallbackContent('cookie-settings');
|
|
@@ -134,12 +122,12 @@ function initialiseCookiePage() {
|
|
|
134
122
|
|
|
135
123
|
function onLoad() {
|
|
136
124
|
window.onload = function () {
|
|
137
|
-
|
|
125
|
+
var reloading = sessionStorage.getItem('reloading');
|
|
138
126
|
if (reloading) {
|
|
139
127
|
sessionStorage.removeItem('reloading');
|
|
140
128
|
|
|
141
|
-
|
|
142
|
-
|
|
129
|
+
var bannerContainer = document.getElementById('global-cookie-message');
|
|
130
|
+
var cookieBanner = document.getElementById('cookie-banner');
|
|
143
131
|
|
|
144
132
|
if (bannerContainer !== null && cookieBanner !== null) {
|
|
145
133
|
bannerContainer.style.display = 'block';
|
package/index.js
CHANGED
|
@@ -156,7 +156,7 @@ function bootstrap(options) {
|
|
|
156
156
|
res.locals.htmlLang = config.htmlLang;
|
|
157
157
|
res.locals.cookieName = config.session.name;
|
|
158
158
|
// session timeout warning configs
|
|
159
|
-
res.locals.sessionTimeOut = config.session.ttl;
|
|
159
|
+
res.locals.sessionTimeOut = process.env.CUSTOM_SESSION_EXPIRY || config.session.ttl;
|
|
160
160
|
res.locals.sessionTimeOutWarning = config.sessionTimeOutWarning;
|
|
161
161
|
res.locals.sessionTimeoutWarningContent = config.sessionTimeoutWarningContent;
|
|
162
162
|
res.locals.exitFormContent = config.exitFormContent;
|
|
@@ -252,26 +252,32 @@ function bootstrap(options) {
|
|
|
252
252
|
|
|
253
253
|
/**
|
|
254
254
|
* Handles requests to the session timeout page.
|
|
255
|
+
* For custom session timeout handling that is not linked to the redis session ttl,
|
|
256
|
+
* set `CUSTOM_SESSION_EXPIRY` variables to the relevant time and `USE_CUSTOM_SESSION_TIMEOUT`variables to true.
|
|
257
|
+
* If `CUSTOM_SESSION_EXPIRY` and `USE_CUSTOM_SESSION_TIMEOUT` envs are set,
|
|
258
|
+
* include '/session-timeout' step in the project's index.js.
|
|
255
259
|
* - If the user has a session cookie but their session is missing or inactive,
|
|
256
260
|
* this triggers a session timeout error handled by error middleware.
|
|
257
261
|
* - Otherwise, responds with a 404 "Page Not Found" error.
|
|
258
262
|
* This route ensures the timeout page only appears after an actual session expiry.
|
|
259
263
|
*/
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
264
|
+
if (!config.useCustomSessionTimeout) {
|
|
265
|
+
app.get('/session-timeout', (req, res, next) => {
|
|
266
|
+
if ((req.cookies['hof-wizard-sc']) && (!req.session || req.session.exists !== true)) {
|
|
267
|
+
const err = new Error('Session expired');
|
|
268
|
+
err.code = 'SESSION_TIMEOUT';
|
|
269
|
+
return next(err);
|
|
270
|
+
}
|
|
271
|
+
const err = new Error('Not Found');
|
|
272
|
+
err.status = 404;
|
|
273
|
+
const locals = Object.assign({}, req.translate('errors'));
|
|
274
|
+
if (locals && locals['404']) {
|
|
275
|
+
return res.status(404).render('404', locals['404']);
|
|
276
|
+
}
|
|
277
|
+
// Fallback: render a basic 404 page if translation is missing
|
|
278
|
+
return res.status(404).send('Page Not Found');
|
|
279
|
+
});
|
|
280
|
+
}
|
|
275
281
|
|
|
276
282
|
if (config.getAccessibility === true) {
|
|
277
283
|
deprecate(
|