hof 23.0.0-frontend-v4-beta.14 → 24.0.0-vite-beta.2

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.
Files changed (79) hide show
  1. package/CHANGELOG.md +0 -14
  2. package/build/tasks/images/index.js +5 -20
  3. package/build/tasks/index.js +1 -1
  4. package/build/tasks/vite/index.js +40 -0
  5. package/build/tasks/vite/vite.config.js +53 -0
  6. package/build/tasks/watch/index.js +2 -9
  7. package/components/date/templates/date.html +1 -1
  8. package/components/emailer/emailer.js +3 -3
  9. package/config/builder-defaults.js +5 -17
  10. package/frontend/govuk-template/build/config.js +0 -1
  11. package/frontend/govuk-template/build/govuk_template.html +42 -58
  12. package/frontend/govuk-template/govuk_template_generated.html +42 -58
  13. package/frontend/template-mixins/mixins/template-mixins.js +4 -5
  14. package/frontend/template-mixins/partials/forms/checkbox.html +1 -5
  15. package/frontend/template-mixins/partials/forms/input-text-date.html +1 -2
  16. package/frontend/template-mixins/partials/forms/input-text-group.html +1 -1
  17. package/frontend/template-mixins/partials/forms/textarea-group.html +1 -1
  18. package/frontend/template-partials/views/layout.html +1 -1
  19. package/frontend/template-partials/views/partials/confirmation-alert.html +1 -3
  20. package/frontend/template-partials/views/partials/cookie-banner.html +32 -50
  21. package/frontend/template-partials/views/partials/navigation.html +2 -2
  22. package/frontend/themes/gov-uk/client-js/cookieSettings.js +23 -35
  23. package/frontend/themes/gov-uk/styles/govuk.scss +1 -1
  24. package/frontend/toolkit/index.js +6 -6
  25. package/index.js +4 -6
  26. package/package.json +7 -4
  27. package/sandbox/assets/{rebrand/js → js}/index.js +1 -1
  28. package/sandbox/assets/{rebrand/scss → scss}/app.scss +1 -1
  29. package/sandbox/package.json +2 -2
  30. package/sandbox/public/css/app.css +1373 -3045
  31. package/sandbox/yarn.lock +4 -4
  32. package/build/tasks/browserify/compress.js +0 -15
  33. package/build/tasks/browserify/index.js +0 -48
  34. package/frontend/toolkit/assets/rebrand/images/govuk-logo.svg +0 -25
  35. package/sandbox/public/images/govuk-logo.svg +0 -25
  36. package/sandbox/public/images/passports/new-window-link-blue.png +0 -0
  37. package/sandbox/public/images/passports/new-window-link.png +0 -0
  38. package/sandbox/public/images/spinner.gif +0 -0
  39. package/sandbox/public/js/bundle.js +0 -39258
  40. /package/frontend/toolkit/assets/{rebrand/images → images}/passports/new-window-link-blue.png +0 -0
  41. /package/frontend/toolkit/assets/{rebrand/images → images}/passports/new-window-link.png +0 -0
  42. /package/frontend/toolkit/assets/{rebrand/images → images}/spinner.gif +0 -0
  43. /package/frontend/toolkit/assets/{rebrand/javascript → javascript}/character-count.js +0 -0
  44. /package/frontend/toolkit/assets/{rebrand/javascript → javascript}/form-focus.js +0 -0
  45. /package/frontend/toolkit/assets/{rebrand/javascript → javascript}/helpers.js +0 -0
  46. /package/frontend/toolkit/assets/{rebrand/javascript → javascript}/progressive-reveal.js +0 -0
  47. /package/frontend/toolkit/assets/{rebrand/javascript → javascript}/validation.js +0 -0
  48. /package/frontend/toolkit/assets/{rebrand/javascript → javascript}/vendor/details.polyfill.js +0 -0
  49. /package/frontend/toolkit/assets/{rebrand/javascript → javascript}/vendor/indexof.polyfill.js +0 -0
  50. /package/frontend/toolkit/assets/{rebrand/javascript → javascript}/vendor/safari-cachebuster.js +0 -0
  51. /package/frontend/toolkit/assets/{rebrand/stylesheets → stylesheets}/_base.scss +0 -0
  52. /package/frontend/toolkit/assets/{rebrand/stylesheets → stylesheets}/_helpers.scss +0 -0
  53. /package/frontend/toolkit/assets/{rebrand/stylesheets → stylesheets}/_layout.scss +0 -0
  54. /package/frontend/toolkit/assets/{rebrand/stylesheets → stylesheets}/_typography.scss +0 -0
  55. /package/frontend/toolkit/assets/{rebrand/stylesheets → stylesheets}/_variables.scss +0 -0
  56. /package/frontend/toolkit/assets/{rebrand/stylesheets → stylesheets}/app.scss +0 -0
  57. /package/frontend/toolkit/assets/{rebrand/stylesheets → stylesheets}/govuk-elements/_buttons.scss +0 -0
  58. /package/frontend/toolkit/assets/{rebrand/stylesheets → stylesheets}/govuk-elements/_details.scss +0 -0
  59. /package/frontend/toolkit/assets/{rebrand/stylesheets → stylesheets}/govuk-elements/_elements-typography.scss +0 -0
  60. /package/frontend/toolkit/assets/{rebrand/stylesheets → stylesheets}/govuk-elements/_forms.scss +0 -0
  61. /package/frontend/toolkit/assets/{rebrand/stylesheets → stylesheets}/govuk-elements/_helpers.scss +0 -0
  62. /package/frontend/toolkit/assets/{rebrand/stylesheets → stylesheets}/govuk-elements/_layout.scss +0 -0
  63. /package/frontend/toolkit/assets/{rebrand/stylesheets → stylesheets}/govuk-elements/_lists.scss +0 -0
  64. /package/frontend/toolkit/assets/{rebrand/stylesheets → stylesheets}/govuk-elements/_panels.scss +0 -0
  65. /package/frontend/toolkit/assets/{rebrand/stylesheets → stylesheets}/govuk-elements/_reset.scss +0 -0
  66. /package/frontend/toolkit/assets/{rebrand/stylesheets → stylesheets}/govuk-elements/_tables.scss +0 -0
  67. /package/frontend/toolkit/assets/{rebrand/stylesheets → stylesheets}/govuk-elements/forms/_form-block-labels.scss +0 -0
  68. /package/frontend/toolkit/assets/{rebrand/stylesheets → stylesheets}/govuk-elements/forms/_form-date.scss +0 -0
  69. /package/frontend/toolkit/assets/{rebrand/stylesheets → stylesheets}/govuk-elements/forms/_form-validation.scss +0 -0
  70. /package/frontend/toolkit/assets/{rebrand/stylesheets → stylesheets}/mixins.scss +0 -0
  71. /package/frontend/toolkit/assets/{rebrand/stylesheets → stylesheets}/modules/_alerts.scss +0 -0
  72. /package/frontend/toolkit/assets/{rebrand/stylesheets → stylesheets}/modules/_buttons.scss +0 -0
  73. /package/frontend/toolkit/assets/{rebrand/stylesheets → stylesheets}/modules/_confirm-page.scss +0 -0
  74. /package/frontend/toolkit/assets/{rebrand/stylesheets → stylesheets}/modules/_lists.scss +0 -0
  75. /package/frontend/toolkit/assets/{rebrand/stylesheets → stylesheets}/modules/_progressive-reveal.scss +0 -0
  76. /package/frontend/toolkit/assets/{rebrand/stylesheets → stylesheets}/modules/_validation.scss +0 -0
  77. /package/sandbox/assets/{rebrand/images → images}/icons/icon-caret-left.png +0 -0
  78. /package/sandbox/assets/{rebrand/images → images}/icons/icon-complete.png +0 -0
  79. /package/sandbox/assets/{rebrand/images → images}/icons/icon-cross-remove-sign.png +0 -0
package/CHANGELOG.md CHANGED
@@ -1,17 +1,3 @@
1
- ## 2025-10-25, Version 23.0.0 (Stable), @Rhodine-orleans-lindsay
2
- ### Changed
3
- - Updated cookie banner view to follow GOV.UK design system. Updated cookieSettings.js to allow for different confirmation text based on whether cookies were accepted or rejected
4
- - Added inputmode='numeric' to date component
5
- - Added span for checkbox error messages
6
- - Updated imported javascript
7
- - Added data-module attribute for govuk-skip-link for screen readers
8
- - Removed aria-polite=live for character-count and removed pattern attribute for date input
9
- - Replaced deprecated govuk-header__link--service-name with govuk-header__service-name
10
- - Added a modifier for phone text input styles that accept sequences of digits
11
- - Added govuk-template--rebranded class to govuk template html to enable govuk rebrand styles:
12
- - Updated header and footer to follow GOV.UK design system as part of rebrand
13
- * ⛓️‍💥 **BREAKING CHANGE** : files and folders in a project's `assets` folder will need to be moved to a `assets/rebrand` folder. Add a `rebrand` folder to the `assets` folder. e.g. `assets/images` will need to be moved to `assets/rebrand/images`.
14
-
15
1
  ## 2025-10-10, Version 22.10.4 (Stable), @dk4g
16
2
  ### Security
17
3
  - Upgraded axios version to address a security vulnerability
@@ -10,27 +10,12 @@ module.exports = config => {
10
10
  if (!config.images) {
11
11
  return Promise.resolve();
12
12
  }
13
- const imagesOutput = config.images.out;
14
13
 
15
- // Due to govuk rebrand logo, images are copied from multiple sources & mapping can cause 'File exists' error.
16
- // Remove if exists as a file
17
- if (fs.existsSync(imagesOutput) && !fs.lstatSync(imagesOutput).isDirectory()) {
18
- fs.unlinkSync(imagesOutput);
19
- }
20
- // Ensure directory exists
21
- if (!fs.existsSync(imagesOutput)) {
22
- fs.mkdirSync(imagesOutput, { recursive: true });
23
- }
24
- const srcs = Array.isArray(config.images.src) ? config.images.src : [config.images.src];
25
-
26
- return Promise.all(srcs.map(src => {
27
- if (!fs.existsSync(src)) {
28
- console.log(`${chalk.yellow('warning')}: Skipping missing images folder: ${src}`);
29
- return Promise.resolve();
30
- }
31
- return mkdir(imagesOutput)
32
- .then(() => spawn('cp', ['-r', `${src}/.`, imagesOutput]));
33
- }))
14
+ return new Promise((resolve, reject) => {
15
+ fs.stat(config.images.src, err => err ? reject(err) : resolve());
16
+ })
17
+ .then(() => mkdir(config.images.out))
18
+ .then(() => spawn('cp', ['-r', config.images.src, config.images.out]))
34
19
  .catch(e => {
35
20
  if (e.code !== 'ENOENT') {
36
21
  throw e;
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  module.exports = {
4
- browserify: require('./browserify'),
4
+ vite: require('./vite'),
5
5
  sass: require('./sass'),
6
6
  translate: require('./translate'),
7
7
  images: require('./images')
@@ -0,0 +1,40 @@
1
+ /* eslint-disable no-console */
2
+ 'use strict';
3
+
4
+ const vite = require('vite');
5
+ const path = require('path');
6
+ const viteConfig = path.resolve(__dirname, './vite.config.js');
7
+ const hofDefaults = require('../../../config/hof-defaults');
8
+ module.exports = config => {
9
+ // The config.production’s value is set up with a command flag
10
+ // in the package.json’s script. process.env.NODE_ENV);
11
+ console.log('Vite build - production:', config.production, 'env: ',config.env);
12
+ console.log('hofDefaults:', hofDefaults);
13
+
14
+ // if (config.production === true) {
15
+ // return vite.build({
16
+ // configFile: viteConfig
17
+ // });
18
+ // }
19
+ // process.env.NODE_ENV = 'development'; // TO DO make this dynamic to Ensure
20
+ // // the environment is set to development for non-production build
21
+ // return vite.build({
22
+ // configFile: viteConfig,
23
+ // mode: 'development'
24
+ // });
25
+ process.env.NODE_ENV = hofDefaults.env;
26
+
27
+ if(!config.production){
28
+ console.log('Vite build - expecting development/local:', process.env.NODE_ENV);
29
+ return vite.build({
30
+ configFile: viteConfig,
31
+ mode: 'development'
32
+ });
33
+ } else{
34
+ console.log('Vite build - expecting production:', process.env.NODE_ENV);
35
+ return vite.build({
36
+ configFile: viteConfig
37
+ });
38
+ }
39
+ }
40
+ module.exports.task = 'vite';
@@ -0,0 +1,53 @@
1
+ /* eslint-disable no-console */
2
+ 'use strict';
3
+
4
+ import { defineConfig } from 'vite';
5
+ import {resolve} from 'path';
6
+ const __dirname = import.meta.dirname;
7
+
8
+ export default defineConfig({
9
+ root: '../../../frontend',
10
+ build: {
11
+ outDir: '../public/assets',
12
+ emptyOutDir: true,
13
+ rollupOptions: {
14
+ input: {
15
+ index: resolve(__dirname, '../../../../hof/frontend/themes/gov-uk/client-js/index.js'),
16
+ styles: resolve(__dirname, '../../../../hof/frontend/themes/gov-uk/styles/govuk.scss')
17
+ }
18
+ },
19
+ css: {
20
+ preprocessorOptions: {
21
+ scss: {
22
+ includes: ['node_modules']
23
+ }
24
+ }
25
+ }
26
+ },
27
+ // Custom plugin to suppress specific resolve warnings.
28
+ // Vite does not process and optimise static images and assets files, it uses a src/ folder.
29
+ // the images and assets folders are therefore loaded at runtime from the public/ folder.
30
+ // This should be resolved with the v5/nunjucks work so we can ignore these warnings for now.
31
+ // TO DO: Remove this when v5/nunjucks is implemented.
32
+ plugins: [
33
+ {
34
+ name: 'suppress-resolve-warnings',
35
+ apply: 'build',
36
+ configResolved() {
37
+ // Intercept all console warnings printed during build
38
+ const originalWarning = console.warn;
39
+ console.warn = (...args) => {
40
+ if (
41
+ args.some(arg =>
42
+ typeof arg === 'string' &&
43
+ arg.includes("didn't resolve at build time")
44
+ )
45
+ ) {
46
+ return; // skip this specific warning
47
+ }
48
+ originalWarning(...args);
49
+ };
50
+ }
51
+ }
52
+ ]
53
+ });
@@ -32,14 +32,7 @@ module.exports = config => {
32
32
  }, {});
33
33
 
34
34
  function triggersTask(file) {
35
- return Object.keys(matchers).filter(key => {
36
- const pattern = matchers[key];
37
- // Only call minimatch if pattern is a non-empty string or array of strings
38
- if (Array.isArray(pattern)) {
39
- return pattern.some(p => typeof p === 'string' && p.length > 0 && match(file, p));
40
- }
41
- return typeof pattern === 'string' && pattern.length > 0 && match(file, pattern);
42
- });
35
+ return Object.keys(matchers).filter(key => match(file, matchers[key]));
43
36
  }
44
37
 
45
38
  function restart() {
@@ -101,7 +94,7 @@ module.exports = config => {
101
94
  process.stdin.setEncoding('utf8');
102
95
  process.stdin.on('data', data => {
103
96
  const dataType = (data + '').trim().toLowerCase();
104
- if (dataType === config.watch.restart) {
97
+ if (dataType === config.watch.restart) {
105
98
  restart();
106
99
  }
107
100
  });
@@ -6,7 +6,7 @@
6
6
  {{#isPageHeading}}</h1>{{/isPageHeading}}
7
7
  </legend>
8
8
  {{#hint}}
9
- <div id="{{key}}-hint" class="govuk-hint">{{{hint}}}</div>
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">
@@ -34,17 +34,17 @@ module.exports = class Emailer {
34
34
  html: body,
35
35
  attachments: [{
36
36
  filename: 'govuk_logotype_email.png',
37
- path: path.resolve(__dirname, './assets/rebrand/images/govuk_logotype_email.png'),
37
+ path: path.resolve(__dirname, './assets/images/govuk_logotype_email.png'),
38
38
  cid: 'govuk_logotype_email'
39
39
  },
40
40
  {
41
41
  filename: 'ho_crest_27px.png',
42
- path: path.resolve(__dirname, './assets/rebrand/images/ho_crest_27px.png'),
42
+ path: path.resolve(__dirname, './assets/images/ho_crest_27px.png'),
43
43
  cid: 'ho_crest_27px'
44
44
  },
45
45
  {
46
46
  filename: 'spacer.gif',
47
- path: path.resolve(__dirname, './assets/rebrand/images/spacer.gif'),
47
+ path: path.resolve(__dirname, './assets/images/spacer.gif'),
48
48
  cid: 'spacer_image'
49
49
  }]
50
50
  }, (err, result) => err ? reject(err) : resolve(result));
@@ -1,22 +1,10 @@
1
1
  'use strict';
2
- const toolkitImages =
3
- process.env.HOF_SANDBOX === 'true'
4
- ? '../frontend/toolkit/assets/rebrand/images'
5
- : 'node_modules/hof/frontend/toolkit/assets/rebrand/images';
6
2
 
7
3
  module.exports = {
8
- browserify: {
9
- src: 'assets/rebrand/js/index.js',
10
- out: 'public/js/bundle.js',
11
- match: 'assets/rebrand/js/**/*.js',
12
- restart: false,
13
- compress: false,
14
- debug: false
15
- },
16
4
  sass: {
17
- src: 'assets/rebrand/scss/app.scss',
5
+ src: 'assets/scss/app.scss',
18
6
  out: 'public/css/app.css',
19
- match: 'assets/rebrand/scss/**/*.scss',
7
+ match: 'assets/scss/**/*.scss',
20
8
  restart: false,
21
9
  quietDeps: false,
22
10
  outputStyle: 'expanded',
@@ -28,9 +16,9 @@ module.exports = {
28
16
  shared: 'apps/common/translations/src'
29
17
  },
30
18
  images: {
31
- src: ['assets/rebrand/images', toolkitImages],
32
- out: 'public/images',
33
- match: ['assets/rebrand/images/**/*', `${toolkitImages}/**/*`],
19
+ src: 'assets/images',
20
+ out: 'public',
21
+ match: 'assets/images/**/*',
34
22
  restart: false
35
23
  },
36
24
  server: {
@@ -3,7 +3,6 @@
3
3
  module.exports = {
4
4
  htmlLang: '{{htmlLang}}',
5
5
  assetPath: '{{govukAssetPath}}',
6
- assetRebrandPath: '{{govukAssetPath}}rebrand/',
7
6
  afterHeader: '{{$afterHeader}}{{/afterHeader}}',
8
7
  bodyClasses: '{{$bodyClasses}}{{/bodyClasses}}',
9
8
  bodyStart: '{{$bodyStart}}{{/bodyStart}}',
@@ -1,24 +1,31 @@
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--rebranded"><!--<![endif]-->
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>
8
8
  {{{ head }}}
9
9
 
10
- <meta name="theme-color" content="#1d70b8">
11
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
12
- <link rel="icon" sizes="48x48" href="{{assetRebrandPath}}images/favicon.ico">
13
- <link rel="icon" sizes="any" href="{{assetRebrandPath}}images/favicon.svg" type="image/svg+xml">
14
- <link rel="mask-icon" href="{{assetRebrandPath}}images/govuk-icon-mask.svg" color="#1d70b8">
15
- <link rel="apple-touch-icon" href="{{assetRebrandPath}}images/govuk-icon-180.png">
16
- <link rel="manifest" href="{{assetRebrandPath}}manifest.json">
17
- <meta property="og:image" content="{{assetRebrandPath}}images/govuk-opengraph-image.png">
10
+ <link rel="shortcut icon" sizes="16x16 32x32 48x48" href="{{assetPath}}images/favicon.ico" type="image/x-icon">
11
+ <link rel="mask-icon" href="{{assetPath}}images/govuk-mask-icon.svg" color="#0b0c0c">
12
+ <link rel="apple-touch-icon" sizes="180x180" href="{{assetPath}}images/govuk-apple-touch-icon-180x180.png">
13
+ <link rel="apple-touch-icon" sizes="167x167" href="{{assetPath}}images/govuk-apple-touch-icon-167x167.png">
14
+ <link rel="apple-touch-icon" sizes="152x152" href="{{assetPath}}images/govuk-apple-touch-icon-152x152.png">
15
+ <link rel="apple-touch-icon" href="{{assetPath}}images/govuk-apple-touch-icon.png">
16
+
17
+
18
+ <meta name="theme-color" content="#0b0c0c" />
19
+
20
+ <meta name="viewport" content="width=device-width, initial-scale=1">
21
+
22
+
23
+ <meta property="og:image" content="{{assetPath}}images/opengraph-image.png">
18
24
  </head>
19
25
 
20
26
  <body class="{{ bodyClasses }} govuk-template__body js-enabled" >
21
- <script>document.body.className += ' js-enabled' + ('noModule' in HTMLScriptElement.prototype ? ' govuk-frontend-supported' : '');</script>
27
+ <script>document.body.className = ((document.body.className) ? document.body.className + ' js-enabled' : 'js-enabled');</script>
28
+
22
29
 
23
30
 
24
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="">
@@ -32,13 +39,19 @@
32
39
 
33
40
  <div class="govuk-header__logo">
34
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">
35
- <!--[if gt IE 8]><!-->
36
- <div id="govuk-header__logo"></div>
37
- <img src="/public/images/govuk-logo.svg" id="govuk-header__logo" alt="Logo" loading="lazy" />
38
- <!--<![endif]-->
39
- <!--[if IE 8]>
40
- <img src="{{ assetRebrandPath }}images/govuk-logotype-tudor-crown.png" class="govuk-header__logotype-crown-fallback-image" width="32" height="30" alt="">
41
- <![endif]-->
42
+ <span class="govuk-header__logotype">
43
+ <!--[if gt IE 8]><!-->
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>
47
+ <!--<![endif]-->
48
+ <!--[if IE 8]>
49
+ <img src="{{ assetPath }}images/govuk-logotype-tudor-crown.png" class="govuk-header__logotype-crown-fallback-image" width="32" height="30" alt="">
50
+ <![endif]-->
51
+ </span>
52
+ <span class="govuk-header__logotype-text">
53
+ {{{ globalHeaderText }}}
54
+ </span>
42
55
  </a>
43
56
  </div>
44
57
  {{{ insideHeader }}}
@@ -53,54 +66,25 @@
53
66
 
54
67
  {{{ content }}}
55
68
 
56
- <footer class="govuk-footer">
69
+ <footer class="govuk-footer" id="footer" role="contentinfo">
70
+
57
71
  <div class="govuk-width-container">
58
- <svg
59
- focusable="false"
60
- role="presentation"
61
- xmlns="http://www.w3.org/2000/svg"
62
- viewBox="0 0 64 60"
63
- height="30"
64
- width="32"
65
- fill="currentcolor" class="govuk-footer__crown">
66
- <g>
67
- <circle cx="20" cy="17.6" r="3.7" />
68
- <circle cx="10.2" cy="23.5" r="3.7" />
69
- <circle cx="3.7" cy="33.2" r="3.7" />
70
- <circle cx="31.7" cy="30.6" r="3.7" />
71
- <circle cx="43.3" cy="17.6" r="3.7" />
72
- <circle cx="53.2" cy="23.5" r="3.7" />
73
- <circle cx="59.7" cy="33.2" r="3.7" />
74
- <circle cx="31.7" cy="30.6" r="3.7" />
75
- <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" />
76
- </g>
77
- </svg>
72
+ {{{ footerTop }}}
73
+
78
74
  <div class="govuk-footer__meta">
79
75
  <div class="govuk-footer__meta-item govuk-footer__meta-item--grow">
80
- <h2 class="govuk-visually-hidden">Support links</h2>
76
+ <h2 class="govuk-visually-hidden">Support links</h2>
81
77
  {{{ footerSupportLinks }}}
82
- <svg
83
- aria-hidden="true"
84
- focusable="false"
85
- class="govuk-footer__licence-logo"
86
- xmlns="http://www.w3.org/2000/svg"
87
- viewBox="0 0 483.2 195.7"
88
- height="17"
89
- width="41">
90
- <path
91
- fill="currentColor"
92
- 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>
93
81
  </svg>
94
- <span class="govuk-footer__licence-description">
95
- {{{ licenceMessage }}}
96
- </span>
82
+
83
+ <span class="govuk-footer__licence-description">{{{ licenceMessage }}}</span>
97
84
  </div>
85
+
98
86
  <div class="govuk-footer__meta-item">
99
- <a
100
- class="govuk-footer__link govuk-footer__copyright-logo"
101
- href="https://www.nationalarchives.gov.uk/information-management/re-using-public-sector-information/uk-government-licensing-framework/crown-copyright/">
102
- {{{ crownCopyrightMessage }}}
103
- </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>
104
88
  </div>
105
89
  </div>
106
90
  </div>
@@ -1,24 +1,31 @@
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--rebranded"><!--<![endif]-->
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}}{{/pageTitle}}</title>
8
8
  {{$head}}{{/head}}
9
9
 
10
- <meta name="theme-color" content="#1d70b8">
11
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
12
- <link rel="icon" sizes="48x48" href="{{govukAssetPath}}rebrand/images/favicon.ico">
13
- <link rel="icon" sizes="any" href="{{govukAssetPath}}rebrand/images/favicon.svg" type="image/svg+xml">
14
- <link rel="mask-icon" href="{{govukAssetPath}}rebrand/images/govuk-icon-mask.svg" color="#1d70b8">
15
- <link rel="apple-touch-icon" href="{{govukAssetPath}}rebrand/images/govuk-icon-180.png">
16
- <link rel="manifest" href="{{govukAssetPath}}rebrand/manifest.json">
17
- <meta property="og:image" content="{{govukAssetPath}}rebrand/images/govuk-opengraph-image.png">
10
+ <link rel="shortcut icon" sizes="16x16 32x32 48x48" href="{{govukAssetPath}}images/favicon.ico" type="image/x-icon">
11
+ <link rel="mask-icon" href="{{govukAssetPath}}images/govuk-mask-icon.svg" color="#0b0c0c">
12
+ <link rel="apple-touch-icon" sizes="180x180" href="{{govukAssetPath}}images/govuk-apple-touch-icon-180x180.png">
13
+ <link rel="apple-touch-icon" sizes="167x167" href="{{govukAssetPath}}images/govuk-apple-touch-icon-167x167.png">
14
+ <link rel="apple-touch-icon" sizes="152x152" href="{{govukAssetPath}}images/govuk-apple-touch-icon-152x152.png">
15
+ <link rel="apple-touch-icon" href="{{govukAssetPath}}images/govuk-apple-touch-icon.png">
16
+
17
+
18
+ <meta name="theme-color" content="#0b0c0c" />
19
+
20
+ <meta name="viewport" content="width=device-width, initial-scale=1">
21
+
22
+
23
+ <meta property="og:image" content="{{govukAssetPath}}images/opengraph-image.png">
18
24
  </head>
19
25
 
20
26
  <body class="{{$bodyClasses}}{{/bodyClasses}} govuk-template__body js-enabled" >
21
- <script {{#nonce}}nonce="{{nonce}}"{{/nonce}}>document.body.className += ' js-enabled' + ('noModule' in HTMLScriptElement.prototype ? ' govuk-frontend-supported' : '');</script>
27
+ <script {{#nonce}}nonce="{{nonce}}"{{/nonce}}>document.body.className = ((document.body.className) ? document.body.className + ' js-enabled' : 'js-enabled');</script>
28
+
22
29
 
23
30
 
24
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="">
@@ -32,13 +39,19 @@
32
39
 
33
40
  <div class="govuk-header__logo">
34
41
  <a href="{{$homepageUrl}}https://www.gov.uk{{/homepageUrl}}" title="{{$logoLinkTitle}}Go to the GOV.UK homepage{{/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">
35
- <!--[if gt IE 8]><!-->
36
- <div id="govuk-header__logo"></div>
37
- <img src="/public/images/govuk-logo.svg" id="govuk-header__logo" alt="Logo" loading="lazy" />
38
- <!--<![endif]-->
39
- <!--[if IE 8]>
40
- <img src="{{govukAssetPath}}rebrand/images/govuk-logotype-tudor-crown.png" class="govuk-header__logotype-crown-fallback-image" width="32" height="30" alt="">
41
- <![endif]-->
42
+ <span class="govuk-header__logotype">
43
+ <!--[if gt IE 8]><!-->
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>
47
+ <!--<![endif]-->
48
+ <!--[if IE 8]>
49
+ <img src="{{govukAssetPath}}images/govuk-logotype-tudor-crown.png" class="govuk-header__logotype-crown-fallback-image" width="32" height="30" alt="">
50
+ <![endif]-->
51
+ </span>
52
+ <span class="govuk-header__logotype-text">
53
+ {{$globalHeaderText}}GOV.UK{{/globalHeaderText}}
54
+ </span>
42
55
  </a>
43
56
  </div>
44
57
  {{$insideHeader}}{{/insideHeader}}
@@ -53,54 +66,25 @@
53
66
 
54
67
  {{$main}}{{/main}}
55
68
 
56
- <footer class="govuk-footer">
69
+ <footer class="govuk-footer" id="footer" role="contentinfo">
70
+
57
71
  <div class="govuk-width-container">
58
- <svg
59
- focusable="false"
60
- role="presentation"
61
- xmlns="http://www.w3.org/2000/svg"
62
- viewBox="0 0 64 60"
63
- height="30"
64
- width="32"
65
- fill="currentcolor" class="govuk-footer__crown">
66
- <g>
67
- <circle cx="20" cy="17.6" r="3.7" />
68
- <circle cx="10.2" cy="23.5" r="3.7" />
69
- <circle cx="3.7" cy="33.2" r="3.7" />
70
- <circle cx="31.7" cy="30.6" r="3.7" />
71
- <circle cx="43.3" cy="17.6" r="3.7" />
72
- <circle cx="53.2" cy="23.5" r="3.7" />
73
- <circle cx="59.7" cy="33.2" r="3.7" />
74
- <circle cx="31.7" cy="30.6" r="3.7" />
75
- <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" />
76
- </g>
77
- </svg>
72
+ {{$footerTop}}{{/footerTop}}
73
+
78
74
  <div class="govuk-footer__meta">
79
75
  <div class="govuk-footer__meta-item govuk-footer__meta-item--grow">
80
- <h2 class="govuk-visually-hidden">Support links</h2>
76
+ <h2 class="govuk-visually-hidden">Support links</h2>
81
77
  {{$footerSupportLinks}}{{/footerSupportLinks}}
82
- <svg
83
- aria-hidden="true"
84
- focusable="false"
85
- class="govuk-footer__licence-logo"
86
- xmlns="http://www.w3.org/2000/svg"
87
- viewBox="0 0 483.2 195.7"
88
- height="17"
89
- width="41">
90
- <path
91
- fill="currentColor"
92
- 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>
93
81
  </svg>
94
- <span class="govuk-footer__licence-description">
95
- {{$licenceMessage}}All content is available under the <a href="https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/" id="open-government-licence" class="govuk-footer__link" target="_blank" rel="license">Open Government Licence v3.0</a>, except where otherwise stated{{/licenceMessage}}
96
- </span>
82
+
83
+ <span class="govuk-footer__licence-description">{{$licenceMessage}}All content is available under the <a href="https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/" id="open-government-licence" class="govuk-footer__link" target="_blank" rel="license">Open Government Licence v3.0</a>, except where otherwise stated{{/licenceMessage}}</span>
97
84
  </div>
85
+
98
86
  <div class="govuk-footer__meta-item">
99
- <a
100
- class="govuk-footer__link govuk-footer__copyright-logo"
101
- href="https://www.nationalarchives.gov.uk/information-management/re-using-public-sector-information/uk-government-licensing-framework/crown-copyright/">
102
- {{$crownCopyrightMessage}}© Crown copyright{{/crownCopyrightMessage}}
103
- </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}}© Crown copyright{{/crownCopyrightMessage}}</a>
104
88
  </div>
105
89
  </div>
106
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', { inputmode: 'numeric', min: 1, max: 31, maxlength: 2, hintId: key + '-hint', date: true, autocomplete: autocomplete.day, formGroupClassName, className: classNameDay, isThisRequired }));
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', { inputmode: 'numeric', min: 1, max: 12, maxlength: 2, hintId: key + '-hint', date: true, autocomplete: autocomplete.month, formGroupClassName, className: classNameMonth, isThisRequired }));
468
- const yearPart = compiled['partials/forms/input-text-date'].render(inputText.call(this, key + '-year', { inputmode: 'numeric', maxlength: 4, hintId: key + '-hint', date: true, autocomplete: autocomplete.year, formGroupClassName, className: classNameYear, isThisRequired }));
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}}<div {{$hintId}}id="{{hintId}}" {{/hintId}}class="govuk-hint">{{{hint}}}</div>{{/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}}<div {{$hintId}}id="{{hintId}}" {{/hintId}}class="govuk-hint">{{{hint}}}</div>{{/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}}