hof 21.0.20-axios-beta → 21.1.0-deindex-toggle-beta

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 CHANGED
@@ -1,3 +1,24 @@
1
+ ## 2024-07-22, Version 21.0.0 (Stable), @Rhodine-orleans-lindsay
2
+ * Replaces deprecated request module with axios
3
+ - refactors the hof model and apis to use axios instead of request
4
+ * Updates patch and minor dependency versions
5
+
6
+ ## 2024-04-24, Version 20.5.0 (Stable), @mislam987
7
+ * Add hint property to checkboxes to align with govuk design guidelines
8
+
9
+ ## 2024-02-29, Version 20.4.0 (Stable), @sulthan-ahmed
10
+ * Update version of govuk-frontend to 3.15
11
+ - this adds the new crown for the King
12
+ - this supports a lot of changes from the govuk design system
13
+ * Adds support for Google tag manager
14
+ * Fixes accessibility issues
15
+ * Sandbox area for testing hof changes
16
+ * Updates patch and minor versions including
17
+ - libphonenumber to 1.9.44
18
+ - nodemailer to 6.9.9
19
+ - ip to 1.1.9
20
+ - es5-ext to 0.10.63
21
+
1
22
  ## 2020-06-02, Version 16.0.0 (Stable), @andymoody
2
23
  * Update version of helmet to 3.22.0
3
24
  * Update version of i18n-future to 2.0.0
@@ -0,0 +1,22 @@
1
+ # HOF code review checklist v1.0
2
+
3
+ This is a general guide on what you should check for when reviewing another team member's code.
4
+
5
+ ## Fundamental checks
6
+ - [ ] Check for code format
7
+ - [ ] Check for duplicate code
8
+ - [ ] Check for if there are existing components in the framework already
9
+ - [ ] Check for copy and paste
10
+ - [ ] Check code readability (if the class, function and variable names are making sense, avoid using acronyms, check for simplicity, avoid complexity)
11
+ - [ ] Check if user inputs are sanitized
12
+ - [ ] Check if errors are handled
13
+ - [ ] Check if null / undefined values are checked before actions are performed on a variable (May not always be necessary)
14
+ - [ ] Check for performance (are there logic in loops that doesn't have to be executed each time? Could some tasks be added to a queue and performed later? etc)
15
+
16
+ ## Advanced (optional if the ticket is low / medium impact) checks
17
+ - [ ] Check if the code is following SOLID principle, code maintainability
18
+ - [ ] Check if none functional requirements are needed (for example, should an audit log be stored for an action performed)
19
+ - [ ] Check the performance and efficiency of the tests
20
+ - [ ] Check to avoid the use of operations that only work in javascript (e.g. using && to return the object on the right if the statement on the left is true)
21
+
22
+
@@ -22,7 +22,15 @@ const defaults = {
22
22
  env: process.env.NODE_ENV || 'development',
23
23
  gaTagId: process.env.GA_TAG || 'Test-GA-Tag',
24
24
  ga4TagId: process.env.GA_4_TAG,
25
- gtmTagId: process.env.GTM_TAG || false,
25
+ // added to allow support for multiple HOF forms using GTM to customize how they track page views
26
+ gtm: {
27
+ tagId: process.env.GTM_TAG || false,
28
+ config: {},
29
+ composePageName: function (page, convertPage) {
30
+ return convertPage(page);
31
+ }
32
+ },
33
+ deIndexForm: process.env.DEINDEX_FORM || 'false',
26
34
  gaCrossDomainTrackingTagId: process.env.GDS_CROSS_DOMAIN_GA_TAG,
27
35
  loglevel: process.env.LOG_LEVEL || 'info',
28
36
  ignoreMiddlewareLogs: ['/healthz'],
@@ -41,13 +41,12 @@
41
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">
42
42
  <span class="govuk-header__logotype">
43
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 132 97" height="30" width="36">
45
- <path fill="currentColor" fill-rule="evenodd" d="M25 30.2c3.5 1.5 7.7-.2 9.1-3.7 1.5-3.6-.2-7.8-3.9-9.2-3.6-1.4-7.6.3-9.1 3.9-1.4 3.5.3 7.5 3.9 9zM9 39.5c3.6 1.5 7.8-.2 9.2-3.7 1.5-3.6-.2-7.8-3.9-9.1-3.6-1.5-7.6.2-9.1 3.8-1.4 3.5.3 7.5 3.8 9zM4.4 57.2c3.5 1.5 7.7-.2 9.1-3.8 1.5-3.6-.2-7.7-3.9-9.1-3.5-1.5-7.6.3-9.1 3.8-1.4 3.5.3 7.6 3.9 9.1zm38.3-21.4c3.5 1.5 7.7-.2 9.1-3.8 1.5-3.6-.2-7.7-3.9-9.1-3.6-1.5-7.6.3-9.1 3.8-1.3 3.6.4 7.7 3.9 9.1zm64.4-5.6c-3.6 1.5-7.8-.2-9.1-3.7-1.5-3.6.2-7.8 3.8-9.2 3.6-1.4 7.7.3 9.2 3.9 1.3 3.5-.4 7.5-3.9 9zm15.9 9.3c-3.6 1.5-7.7-.2-9.1-3.7-1.5-3.6.2-7.8 3.7-9.1 3.6-1.5 7.7.2 9.2 3.8 1.5 3.5-.3 7.5-3.8 9zm4.7 17.7c-3.6 1.5-7.8-.2-9.2-3.8-1.5-3.6.2-7.7 3.9-9.1 3.6-1.5 7.7.3 9.2 3.8 1.3 3.5-.4 7.6-3.9 9.1zM89.3 35.8c-3.6 1.5-7.8-.2-9.2-3.8-1.4-3.6.2-7.7 3.9-9.1 3.6-1.5 7.7.3 9.2 3.8 1.4 3.6-.3 7.7-3.9 9.1zM69.7 17.7l8.9 4.7V9.3l-8.9 2.8c-.2-.3-.5-.6-.9-.9L72.4 0H59.6l3.5 11.2c-.3.3-.6.5-.9.9l-8.8-2.8v13.1l8.8-4.7c.3.3.6.7.9.9l-5 15.4v.1c-.2.8-.4 1.6-.4 2.4 0 4.1 3.1 7.5 7 8.1h.2c.3 0 .7.1 1 .1.4 0 .7 0 1-.1h.2c4-.6 7.1-4.1 7.1-8.1 0-.8-.1-1.7-.4-2.4V34l-5.1-15.4c.4-.2.7-.6 1-.9zM66 92.8c16.9 0 32.8 1.1 47.1 3.2 4-16.9 8.9-26.7 14-33.5l-9.6-3.4c1 4.9 1.1 7.2 0 10.2-1.5-1.4-3-4.3-4.2-8.7L108.6 76c2.8-2 5-3.2 7.5-3.3-4.4 9.4-10 11.9-13.6 11.2-4.3-.8-6.3-4.6-5.6-7.9 1-4.7 5.7-5.9 8-.5 4.3-8.7-3-11.4-7.6-8.8 7.1-7.2 7.9-13.5 2.1-21.1-8 6.1-8.1 12.3-4.5 20.8-4.7-5.4-12.1-2.5-9.5 6.2 3.4-5.2 7.9-2 7.2 3.1-.6 4.3-6.4 7.8-13.5 7.2-10.3-.9-10.9-8-11.2-13.8 2.5-.5 7.1 1.8 11 7.3L80.2 60c-4.1 4.4-8 5.3-12.3 5.4 1.4-4.4 8-11.6 8-11.6H55.5s6.4 7.2 7.9 11.6c-4.2-.1-8-1-12.3-5.4l1.4 16.4c3.9-5.5 8.5-7.7 10.9-7.3-.3 5.8-.9 12.8-11.1 13.8-7.2.6-12.9-2.9-13.5-7.2-.7-5 3.8-8.3 7.1-3.1 2.7-8.7-4.6-11.6-9.4-6.2 3.7-8.5 3.6-14.7-4.6-20.8-5.8 7.6-5 13.9 2.2 21.1-4.7-2.6-11.9.1-7.7 8.8 2.3-5.5 7.1-4.2 8.1.5.7 3.3-1.3 7.1-5.7 7.9-3.5.7-9-1.8-13.5-11.2 2.5.1 4.7 1.3 7.5 3.3l-4.7-15.4c-1.2 4.4-2.7 7.2-4.3 8.7-1.1-3-.9-5.3 0-10.2l-9.5 3.4c5 6.9 9.9 16.7 14 33.5 14.8-2.1 30.8-3.2 47.7-3.2z"></path>
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
46
  </svg>
47
47
  <!--<![endif]-->
48
- <!--<![endif]-->
49
48
  <!--[if IE 8]>
50
- <img src="{{ assetPath }}images/govuk-logotype-crown.png" class="govuk-header__logotype-crown-fallback-image" width="36" height="32">
49
+ <img src="{{ assetPath }}images/govuk-logotype-tudor-crown.png" class="govuk-header__logotype-crown-fallback-image" width="32" height="30" alt="">
51
50
  <![endif]-->
52
51
  </span>
53
52
  <span class="govuk-header__logotype-text">
@@ -41,13 +41,12 @@
41
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">
42
42
  <span class="govuk-header__logotype">
43
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 132 97" height="30" width="36">
45
- <path fill="currentColor" fill-rule="evenodd" d="M25 30.2c3.5 1.5 7.7-.2 9.1-3.7 1.5-3.6-.2-7.8-3.9-9.2-3.6-1.4-7.6.3-9.1 3.9-1.4 3.5.3 7.5 3.9 9zM9 39.5c3.6 1.5 7.8-.2 9.2-3.7 1.5-3.6-.2-7.8-3.9-9.1-3.6-1.5-7.6.2-9.1 3.8-1.4 3.5.3 7.5 3.8 9zM4.4 57.2c3.5 1.5 7.7-.2 9.1-3.8 1.5-3.6-.2-7.7-3.9-9.1-3.5-1.5-7.6.3-9.1 3.8-1.4 3.5.3 7.6 3.9 9.1zm38.3-21.4c3.5 1.5 7.7-.2 9.1-3.8 1.5-3.6-.2-7.7-3.9-9.1-3.6-1.5-7.6.3-9.1 3.8-1.3 3.6.4 7.7 3.9 9.1zm64.4-5.6c-3.6 1.5-7.8-.2-9.1-3.7-1.5-3.6.2-7.8 3.8-9.2 3.6-1.4 7.7.3 9.2 3.9 1.3 3.5-.4 7.5-3.9 9zm15.9 9.3c-3.6 1.5-7.7-.2-9.1-3.7-1.5-3.6.2-7.8 3.7-9.1 3.6-1.5 7.7.2 9.2 3.8 1.5 3.5-.3 7.5-3.8 9zm4.7 17.7c-3.6 1.5-7.8-.2-9.2-3.8-1.5-3.6.2-7.7 3.9-9.1 3.6-1.5 7.7.3 9.2 3.8 1.3 3.5-.4 7.6-3.9 9.1zM89.3 35.8c-3.6 1.5-7.8-.2-9.2-3.8-1.4-3.6.2-7.7 3.9-9.1 3.6-1.5 7.7.3 9.2 3.8 1.4 3.6-.3 7.7-3.9 9.1zM69.7 17.7l8.9 4.7V9.3l-8.9 2.8c-.2-.3-.5-.6-.9-.9L72.4 0H59.6l3.5 11.2c-.3.3-.6.5-.9.9l-8.8-2.8v13.1l8.8-4.7c.3.3.6.7.9.9l-5 15.4v.1c-.2.8-.4 1.6-.4 2.4 0 4.1 3.1 7.5 7 8.1h.2c.3 0 .7.1 1 .1.4 0 .7 0 1-.1h.2c4-.6 7.1-4.1 7.1-8.1 0-.8-.1-1.7-.4-2.4V34l-5.1-15.4c.4-.2.7-.6 1-.9zM66 92.8c16.9 0 32.8 1.1 47.1 3.2 4-16.9 8.9-26.7 14-33.5l-9.6-3.4c1 4.9 1.1 7.2 0 10.2-1.5-1.4-3-4.3-4.2-8.7L108.6 76c2.8-2 5-3.2 7.5-3.3-4.4 9.4-10 11.9-13.6 11.2-4.3-.8-6.3-4.6-5.6-7.9 1-4.7 5.7-5.9 8-.5 4.3-8.7-3-11.4-7.6-8.8 7.1-7.2 7.9-13.5 2.1-21.1-8 6.1-8.1 12.3-4.5 20.8-4.7-5.4-12.1-2.5-9.5 6.2 3.4-5.2 7.9-2 7.2 3.1-.6 4.3-6.4 7.8-13.5 7.2-10.3-.9-10.9-8-11.2-13.8 2.5-.5 7.1 1.8 11 7.3L80.2 60c-4.1 4.4-8 5.3-12.3 5.4 1.4-4.4 8-11.6 8-11.6H55.5s6.4 7.2 7.9 11.6c-4.2-.1-8-1-12.3-5.4l1.4 16.4c3.9-5.5 8.5-7.7 10.9-7.3-.3 5.8-.9 12.8-11.1 13.8-7.2.6-12.9-2.9-13.5-7.2-.7-5 3.8-8.3 7.1-3.1 2.7-8.7-4.6-11.6-9.4-6.2 3.7-8.5 3.6-14.7-4.6-20.8-5.8 7.6-5 13.9 2.2 21.1-4.7-2.6-11.9.1-7.7 8.8 2.3-5.5 7.1-4.2 8.1.5.7 3.3-1.3 7.1-5.7 7.9-3.5.7-9-1.8-13.5-11.2 2.5.1 4.7 1.3 7.5 3.3l-4.7-15.4c-1.2 4.4-2.7 7.2-4.3 8.7-1.1-3-.9-5.3 0-10.2l-9.5 3.4c5 6.9 9.9 16.7 14 33.5 14.8-2.1 30.8-3.2 47.7-3.2z"></path>
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
46
  </svg>
47
47
  <!--<![endif]-->
48
- <!--<![endif]-->
49
48
  <!--[if IE 8]>
50
- <img src="{{govukAssetPath}}images/govuk-logotype-crown.png" class="govuk-header__logotype-crown-fallback-image" width="36" height="32">
49
+ <img src="{{govukAssetPath}}images/govuk-logotype-tudor-crown.png" class="govuk-header__logotype-crown-fallback-image" width="32" height="30" alt="">
51
50
  <![endif]-->
52
51
  </span>
53
52
  <span class="govuk-header__logotype-text">
@@ -319,6 +319,7 @@ module.exports = function (options) {
319
319
  error: this.errors && this.errors[key],
320
320
  invalid: this.errors && this.errors[key] && opts.required,
321
321
  label: t(fieldLabel || 'fields.' + key + '.label'),
322
+ hint: conditionalTranslate(getTranslationKey(field, key, 'hint')),
322
323
  selected: selected,
323
324
  className: classNames(field) || 'govuk-label govuk-checkboxes__label',
324
325
  child: field.child,
@@ -6,6 +6,11 @@
6
6
  {{{label}}}
7
7
  {{#error}}<span class="visuallyhidden">{{error.message}}</span>{{/error}}
8
8
  </label>
9
+ {{#hint}}
10
+ <div id="{{key}}-hint" class="govuk-hint govuk-checkboxes__hint">
11
+ {{hint}}
12
+ </div>
13
+ {{/hint}}
9
14
  </div>
10
15
  {{#renderChild}}{{/renderChild}}
11
16
  </div>
@@ -1,5 +1,5 @@
1
1
  <div id="{{id}}-group" class="{{#compound}} form-group-compound{{/compound}}{{#formGroupClassName}}{{formGroupClassName}}{{/formGroupClassName}}{{#error}} govuk-form-group--error{{/error}}">
2
- {{#isPageHeading}}<h1 class="govuk-label-wrapper">{{/isPageHeading}}<label for="{{id}}" class="{{labelClassName}}{{#isPageHeading}}govuk-label--l{{/isPageHeading}}">
2
+ {{#isPageHeading}}<h1 class="govuk-label-wrapper">{{/isPageHeading}}<label for="{{id}}" class="{{labelClassName}} {{#isPageHeading}}govuk-label--l{{/isPageHeading}}">
3
3
  {{{label}}}
4
4
  </label>
5
5
  {{#isPageHeading}}</h1>{{/isPageHeading}}
@@ -1,14 +1,14 @@
1
1
  <div id="{{id}}-group" class="{{#compound}} form-group-compound{{/compound}}{{#formGroupClassName}} {{formGroupClassName}}{{/formGroupClassName}}{{#error}} govuk-form-group--error{{/error}}">
2
2
  {{#isPageHeading}}<h1 class="govuk-label-wrapper">{{/isPageHeading}}<label for="{{id}}" class="{{labelClassName}}{{#isPageHeading}}govuk-label--l{{/isPageHeading}}">
3
3
  {{{label}}}
4
- {{#hint}}<span {{$hintId}}id="{{hintId}}" {{/hintId}}class="govuk-hint">{{hint}}</span>{{/hint}}
5
- {{#error}}
6
- <p class="govuk-error-message">
7
- <span class="govuk-visually-hidden">Error:</span> {{error.message}}
8
- </p>
9
- {{/error}}
10
4
  </label>
11
5
  {{#isPageHeading}}</h1>{{/isPageHeading}}
6
+ {{#hint}}<div {{$hintId}}id="{{hintId}}" {{/hintId}}class="govuk-hint">{{hint}}</div>{{/hint}}
7
+ {{#error}}
8
+ <p class="govuk-error-message">
9
+ <span class="govuk-visually-hidden">Error:</span> {{error.message}}
10
+ </p>
11
+ {{/error}}
12
12
  <select id="{{id}}" class="govuk-select{{#className}} {{className}}{{/className}}{{#error}} govuk-select--error{{/error}}" name="{{id}}" aria-required="{{required}}">
13
13
  {{#options}}
14
14
  <option value="{{value}}" {{#selected}}selected{{/selected}}>{{label}}</option>
@@ -4,7 +4,7 @@
4
4
  <div id="{{id}}-group" class="govuk-form-group {{#formGroupClassName}}{{formGroupClassName}}{{/formGroupClassName}}{{#error}} govuk-form-group--error{{/error}}">
5
5
  {{#isPageHeading}}<h1 class="govuk-label-wrapper">{{/isPageHeading}}
6
6
  <label for="{{id}}"
7
- class="{{labelClassName}}{{#isPageHeading}}govuk-label--l{{/isPageHeading}}">
7
+ class="{{labelClassName}} {{#isPageHeading}}govuk-label--l{{/isPageHeading}}">
8
8
  {{{label}}}
9
9
  {{#error}}
10
10
  <p id="{{id}}-error" class="govuk-error-message">
@@ -1,18 +1,13 @@
1
1
  {{#gtmTagId}}
2
2
  {{#cookiesAccepted}}
3
- {{#isETA}}
4
- <!-- Google Tag Manager Data Layer for ETA -->
3
+ <!-- Google Tag Manager Data Layer -->
5
4
  <script {{#nonce}}nonce="{{nonce}}"{{/nonce}}>
6
5
  var dataLayer = window.dataLayer || [];
7
- dataLayer.push({
8
- 'event': 'pageLoad',
9
- 'pageName': 'ETA | Customer Contact Webform | {{gtm-page}}',
10
- 'applicationType': 'ETA | Customer Contact',
11
- 'environmentType': '{{environmentType}}'
12
- });
6
+ dataLayer.push(
7
+ {{{gtmConfig}}}
8
+ );
13
9
  </script>
14
- <!-- End Google Tag Manager Data Layer for ETA -->
15
- {{/isETA}}
10
+ <!-- End Google Tag Manager Data Layer -->
16
11
 
17
12
  <!-- Google Tag Manager -->
18
13
  <script {{#nonce}}nonce="{{nonce}}"{{/nonce}}>
@@ -26,5 +21,8 @@
26
21
  {{/cookiesAccepted}}
27
22
  {{/gtmTagId}}
28
23
 
24
+ {{#deIndex}}
25
+ <meta name="robots" content="noindex">
26
+ {{/deIndex}}
29
27
  <meta name="format-detection" content="telephone=no">
30
28
  <link rel="stylesheet" href="{{assetPath}}/css/app.css">
package/index.js CHANGED
@@ -14,6 +14,7 @@ const router = require('./lib/router');
14
14
  const health = require('./lib/health');
15
15
  const serveStatic = require('./lib/serve-static');
16
16
  const gaTagSetup = require('./lib/ga-tag');
17
+ const deIndexer = require('./lib/deindex');
17
18
  const sessionStore = require('./lib/sessions');
18
19
  const settings = require('./lib/settings');
19
20
  const defaults = require('./config/hof-defaults');
@@ -198,6 +199,7 @@ function bootstrap(options) {
198
199
  serveStatic(app, config);
199
200
  settings(app, config);
200
201
  gaTagSetup(app, config);
202
+ deIndexer(app, config);
201
203
 
202
204
  const sessions = sessionStore(app, config);
203
205
  app.use('/healthz', health(sessions));
package/lib/deindex.js ADDED
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ module.exports = (app, config) => {
4
+ const deIndex = config.deIndexForm;
5
+
6
+ app.use((req, res, next) => {
7
+
8
+ // Preparing common res.locals properties
9
+ const properties = {
10
+ deIndex: deIndex
11
+ };
12
+ res.locals = Object.assign(res.locals, properties);
13
+ next();
14
+ });
15
+
16
+ return app;
17
+ }
package/lib/ga-tag.js CHANGED
@@ -52,26 +52,35 @@ const setupPageMap = routes => {
52
52
  module.exports = (app, config) => {
53
53
  const gaTagId = config.gaTagId;
54
54
  const ga4TagId = config.ga4TagId;
55
- const gtmTagId = config.gtmTagId;
56
- const environmentType = config.environmentType ? config.environmentType : 'dev';
55
+ const gtm = config.gtm;
57
56
  const gaCrossDomainTrackingTagId = config.gaCrossDomainTrackingTagId;
58
57
  const routes = config.routes;
59
58
 
60
- if (gaTagId || ga4TagId) {
59
+ if (gaTagId || ga4TagId || gtm.tagId) {
61
60
  const pageMap = setupPageMap(routes);
62
61
 
63
62
  app.use((req, res, next) => {
64
63
  const page = pageView(req.path, pageMap);
65
- res.locals.gaAllowDebug = config.env === 'development';
66
- res.locals.isETA = config.appName === 'ETA';
67
- res.locals.gaTagId = gaTagId;
68
- res.locals.ga4TagId = ga4TagId;
69
- res.locals.gtmTagId = gtmTagId;
70
- res.locals.environmentType = environmentType;
71
- res.locals.gaCrossDomainTrackingTagId = gaCrossDomainTrackingTagId;
72
- res.locals['ga-id'] = gaTagId;
73
- res.locals['ga-page'] = page;
74
- res.locals['gtm-page'] = convertToGTMPage(page);
64
+
65
+ // Preparing common res.locals properties
66
+ const properties = {
67
+ gaAllowDebug: config.env === 'development',
68
+ gaTagId: gaTagId,
69
+ ga4TagId: ga4TagId,
70
+ gaCrossDomainTrackingTagId: gaCrossDomainTrackingTagId,
71
+ 'ga-id': gaTagId,
72
+ 'ga-page': page
73
+ };
74
+
75
+ // Adding extra properties if a GTM TAG is available
76
+ if (gtm.tagId) {
77
+ gtm.config.pageName = gtm.composePageName(page, convertToGTMPage);
78
+ Object.assign(properties, {
79
+ gtmConfig: JSON.stringify(gtm.config),
80
+ gtmTagId: gtm.tagId
81
+ });
82
+ }
83
+ res.locals = Object.assign(res.locals, properties);
75
84
  next();
76
85
  });
77
86
  }
@@ -1,9 +1,21 @@
1
1
  'use strict';
2
- const url = require('url');
2
+ const { format } = require('url'); // Destructure 'format' from 'url' module
3
3
 
4
- module.exports = (settings, body) => {
5
- return Object.assign({}, settings, {
6
- uri: settings.uri || settings.url || url.format(settings),
7
- data: settings.body || body || settings.data
4
+ module.exports = (settings = {}, body = null) => {
5
+ if (typeof settings !== 'object' || settings === null) {
6
+ throw new TypeError('settings must be a non-null object');
7
+ }
8
+
9
+ const {
10
+ uri,
11
+ url,
12
+ body: settingsBody,
13
+ data: settingsData,
14
+ ...restSettings
15
+ } = settings;
16
+
17
+ return Object.assign({}, restSettings, {
18
+ url: uri || url || format(settings),
19
+ data: settingsBody || body || settingsData
8
20
  });
9
21
  };
@@ -9,6 +9,7 @@ module.exports = class PDFModel extends Model {
9
9
  const settings = super.requestConfig(options);
10
10
  settings.encoding = null;
11
11
  settings.rejectUnauthorized = false;
12
+ settings.responseType = 'arraybuffer';
12
13
  return settings;
13
14
  }
14
15
 
@@ -17,17 +18,18 @@ module.exports = class PDFModel extends Model {
17
18
  }
18
19
 
19
20
  handleResponse(response, callback) {
20
- if (isPdf(Buffer.from(response.body))) {
21
- return this.parseResponse(response.statusCode, response.body, callback);
21
+ if (isPdf(Buffer.from(response.data))) {
22
+ return this.parseResponse(response.status, response.data, callback);
22
23
  }
23
24
  const err = new Error();
24
- if (parseInt(response.statusCode, 10) === 400) {
25
- err.title = response.body.code;
26
- err.message = response.body.message;
25
+
26
+ if (parseInt(response.status, 10) === 400) {
27
+ err.title = response.status;
28
+ err.message = response.statusText;
27
29
  } else {
28
- err.body = response.body;
30
+ err.body = response.data;
29
31
  }
30
- err.status = response.statusCode;
31
- return callback(err, null, response.statusCode);
32
+ err.status = response.status;
33
+ return callback(err, null, response.status);
32
34
  }
33
35
  };