@defra/forms-engine-plugin 0.0.4 → 0.0.5

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 (224) hide show
  1. package/package.json +3 -2
  2. package/src/client/javascripts/application.js +87 -0
  3. package/src/client/javascripts/file-upload.js +386 -0
  4. package/src/client/stylesheets/_code.scss +33 -0
  5. package/src/client/stylesheets/_govuk-frontend.scss +4 -0
  6. package/src/client/stylesheets/_prose.scss +56 -0
  7. package/src/client/stylesheets/_service-banner.scss +24 -0
  8. package/src/client/stylesheets/_summary-list.scss +28 -0
  9. package/src/client/stylesheets/_tag-env.scss +24 -0
  10. package/src/client/stylesheets/application.scss +14 -0
  11. package/src/common/cookies.js +58 -0
  12. package/src/common/cookies.test.js +23 -0
  13. package/src/common/types.js +5 -0
  14. package/src/config/index.ts +271 -0
  15. package/src/index.ts +31 -0
  16. package/src/server/common/helpers/logging/logger-options.test.ts +50 -0
  17. package/src/server/common/helpers/logging/logger-options.ts +46 -0
  18. package/src/server/common/helpers/logging/logger.ts +7 -0
  19. package/src/server/common/helpers/logging/request-logger.ts +9 -0
  20. package/src/server/common/helpers/logging/request-tracing.js +10 -0
  21. package/src/server/common/helpers/redis-client.js +70 -0
  22. package/src/server/constants.js +1 -0
  23. package/src/server/forms/README.md +10 -0
  24. package/src/server/forms/components.json +1015 -0
  25. package/src/server/forms/report-a-terrorist.json +270 -0
  26. package/src/server/forms/runner-components-test.json +365 -0
  27. package/src/server/forms/test.json +581 -0
  28. package/src/server/index.test.ts +582 -0
  29. package/src/server/index.ts +140 -0
  30. package/src/server/plugins/blankie.test.ts +73 -0
  31. package/src/server/plugins/blankie.ts +48 -0
  32. package/src/server/plugins/crumb.ts +20 -0
  33. package/src/server/plugins/engine/README.md +87 -0
  34. package/src/server/plugins/engine/components/AutocompleteField.test.ts +294 -0
  35. package/src/server/plugins/engine/components/AutocompleteField.ts +49 -0
  36. package/src/server/plugins/engine/components/CheckboxesField.test.ts +379 -0
  37. package/src/server/plugins/engine/components/CheckboxesField.ts +106 -0
  38. package/src/server/plugins/engine/components/ComponentBase.ts +97 -0
  39. package/src/server/plugins/engine/components/ComponentCollection.ts +278 -0
  40. package/src/server/plugins/engine/components/DatePartsField.test.ts +822 -0
  41. package/src/server/plugins/engine/components/DatePartsField.ts +264 -0
  42. package/src/server/plugins/engine/components/Details.test.ts +49 -0
  43. package/src/server/plugins/engine/components/Details.ts +30 -0
  44. package/src/server/plugins/engine/components/EmailAddressField.test.ts +395 -0
  45. package/src/server/plugins/engine/components/EmailAddressField.ts +55 -0
  46. package/src/server/plugins/engine/components/FileUploadField.test.ts +778 -0
  47. package/src/server/plugins/engine/components/FileUploadField.ts +262 -0
  48. package/src/server/plugins/engine/components/FormComponent.ts +249 -0
  49. package/src/server/plugins/engine/components/Html.test.ts +48 -0
  50. package/src/server/plugins/engine/components/Html.ts +29 -0
  51. package/src/server/plugins/engine/components/InsetText.test.ts +48 -0
  52. package/src/server/plugins/engine/components/InsetText.ts +27 -0
  53. package/src/server/plugins/engine/components/List.test.ts +76 -0
  54. package/src/server/plugins/engine/components/List.ts +72 -0
  55. package/src/server/plugins/engine/components/ListFormComponent.ts +140 -0
  56. package/src/server/plugins/engine/components/MonthYearField.test.ts +567 -0
  57. package/src/server/plugins/engine/components/MonthYearField.ts +222 -0
  58. package/src/server/plugins/engine/components/MultilineTextField.test.ts +558 -0
  59. package/src/server/plugins/engine/components/MultilineTextField.ts +138 -0
  60. package/src/server/plugins/engine/components/NumberField.test.ts +701 -0
  61. package/src/server/plugins/engine/components/NumberField.ts +163 -0
  62. package/src/server/plugins/engine/components/RadiosField.test.ts +288 -0
  63. package/src/server/plugins/engine/components/RadiosField.ts +24 -0
  64. package/src/server/plugins/engine/components/SelectField.test.ts +288 -0
  65. package/src/server/plugins/engine/components/SelectField.ts +47 -0
  66. package/src/server/plugins/engine/components/SelectionControlField.ts +43 -0
  67. package/src/server/plugins/engine/components/TelephoneNumberField.test.ts +356 -0
  68. package/src/server/plugins/engine/components/TelephoneNumberField.ts +67 -0
  69. package/src/server/plugins/engine/components/TextField.test.ts +489 -0
  70. package/src/server/plugins/engine/components/TextField.ts +96 -0
  71. package/src/server/plugins/engine/components/UkAddressField.test.ts +623 -0
  72. package/src/server/plugins/engine/components/UkAddressField.ts +172 -0
  73. package/src/server/plugins/engine/components/YesNoField.test.ts +248 -0
  74. package/src/server/plugins/engine/components/YesNoField.ts +31 -0
  75. package/src/server/plugins/engine/components/constants.ts +1 -0
  76. package/src/server/plugins/engine/components/helpers.ts +330 -0
  77. package/src/server/plugins/engine/components/index.ts +24 -0
  78. package/src/server/plugins/engine/components/types.ts +117 -0
  79. package/src/server/plugins/engine/configureEnginePlugin.ts +47 -0
  80. package/src/server/plugins/engine/helpers.test.ts +791 -0
  81. package/src/server/plugins/engine/helpers.ts +379 -0
  82. package/src/server/plugins/engine/index.ts +7 -0
  83. package/src/server/plugins/engine/models/FormModel.test.ts +42 -0
  84. package/src/server/plugins/engine/models/FormModel.ts +443 -0
  85. package/src/server/plugins/engine/models/RepeatingSummaryViewModel.ts +0 -0
  86. package/src/server/plugins/engine/models/Section.ts +0 -0
  87. package/src/server/plugins/engine/models/SummaryViewModel.test.ts +209 -0
  88. package/src/server/plugins/engine/models/SummaryViewModel.ts +220 -0
  89. package/src/server/plugins/engine/models/index.ts +2 -0
  90. package/src/server/plugins/engine/models/types.ts +114 -0
  91. package/src/server/plugins/engine/outputFormatters/human/v1.test.ts +143 -0
  92. package/src/server/plugins/engine/outputFormatters/human/v1.ts +73 -0
  93. package/src/server/plugins/engine/outputFormatters/index.test.ts +17 -0
  94. package/src/server/plugins/engine/outputFormatters/index.ts +44 -0
  95. package/src/server/plugins/engine/outputFormatters/machine/v1.test.ts +229 -0
  96. package/src/server/plugins/engine/outputFormatters/machine/v1.ts +140 -0
  97. package/src/server/plugins/engine/outputFormatters/machine/v2.test.ts +229 -0
  98. package/src/server/plugins/engine/outputFormatters/machine/v2.ts +153 -0
  99. package/src/server/plugins/engine/pageControllers/FileUploadPageController.test.ts +1108 -0
  100. package/src/server/plugins/engine/pageControllers/FileUploadPageController.ts +446 -0
  101. package/src/server/plugins/engine/pageControllers/PageController.test.ts +205 -0
  102. package/src/server/plugins/engine/pageControllers/PageController.ts +176 -0
  103. package/src/server/plugins/engine/pageControllers/QuestionPageController.test.ts +1264 -0
  104. package/src/server/plugins/engine/pageControllers/QuestionPageController.ts +561 -0
  105. package/src/server/plugins/engine/pageControllers/README.md +28 -0
  106. package/src/server/plugins/engine/pageControllers/RepeatPageController.test.ts +264 -0
  107. package/src/server/plugins/engine/pageControllers/RepeatPageController.ts +458 -0
  108. package/src/server/plugins/engine/pageControllers/StartPageController.ts +18 -0
  109. package/src/server/plugins/engine/pageControllers/StatusPageController.ts +50 -0
  110. package/src/server/plugins/engine/pageControllers/SummaryPageController.ts +261 -0
  111. package/src/server/plugins/engine/pageControllers/TerminalController.test.ts +28 -0
  112. package/src/server/plugins/engine/pageControllers/TerminalPageController.ts +19 -0
  113. package/src/server/plugins/engine/pageControllers/helpers.test.ts +198 -0
  114. package/src/server/plugins/engine/pageControllers/helpers.ts +101 -0
  115. package/src/server/plugins/engine/pageControllers/index.ts +10 -0
  116. package/src/server/plugins/engine/pageControllers/validationOptions.ts +89 -0
  117. package/src/server/plugins/engine/plugin.ts +673 -0
  118. package/src/server/plugins/engine/services/formSubmissionService.js +46 -0
  119. package/src/server/plugins/engine/services/formsService.js +46 -0
  120. package/src/server/plugins/engine/services/formsService.test.js +90 -0
  121. package/src/server/plugins/engine/services/index.js +3 -0
  122. package/src/server/plugins/engine/services/notifyService.test.ts +132 -0
  123. package/src/server/plugins/engine/services/notifyService.ts +64 -0
  124. package/src/server/plugins/engine/services/uploadService.js +60 -0
  125. package/src/server/plugins/engine/types.ts +315 -0
  126. package/src/server/plugins/engine/views/components/autocompletefield.html +5 -0
  127. package/src/server/plugins/engine/views/components/checkboxesfield.html +5 -0
  128. package/src/server/plugins/engine/views/components/datepartsfield.html +5 -0
  129. package/src/server/plugins/engine/views/components/details.html +6 -0
  130. package/src/server/plugins/engine/views/components/emailaddressfield.html +5 -0
  131. package/src/server/plugins/engine/views/components/fileuploadfield-key.html +8 -0
  132. package/src/server/plugins/engine/views/components/fileuploadfield-value.html +3 -0
  133. package/src/server/plugins/engine/views/components/fileuploadfield.html +24 -0
  134. package/src/server/plugins/engine/views/components/html.html +3 -0
  135. package/src/server/plugins/engine/views/components/insettext.html +7 -0
  136. package/src/server/plugins/engine/views/components/list.html +36 -0
  137. package/src/server/plugins/engine/views/components/monthyearfield.html +5 -0
  138. package/src/server/plugins/engine/views/components/multilinetextfield.html +10 -0
  139. package/src/server/plugins/engine/views/components/numberfield.html +5 -0
  140. package/src/server/plugins/engine/views/components/radiosfield.html +5 -0
  141. package/src/server/plugins/engine/views/components/selectfield.html +5 -0
  142. package/src/server/plugins/engine/views/components/telephonenumberfield.html +5 -0
  143. package/src/server/plugins/engine/views/components/textfield.html +5 -0
  144. package/src/server/plugins/engine/views/components/ukaddressfield.html +25 -0
  145. package/src/server/plugins/engine/views/components/yesnofield.html +5 -0
  146. package/src/server/plugins/engine/views/file-upload.html +45 -0
  147. package/src/server/plugins/engine/views/index.html +39 -0
  148. package/src/server/plugins/engine/views/item-delete.html +56 -0
  149. package/src/server/plugins/engine/views/partials/components.html +6 -0
  150. package/src/server/plugins/engine/views/partials/conditional-components.html +3 -0
  151. package/src/server/plugins/engine/views/partials/debug.html +44 -0
  152. package/src/server/plugins/engine/views/partials/form.html +15 -0
  153. package/src/server/plugins/engine/views/partials/heading.html +16 -0
  154. package/src/server/plugins/engine/views/partials/preview-banner.html +32 -0
  155. package/src/server/plugins/engine/views/partials/preview-banner.test.js +122 -0
  156. package/src/server/plugins/engine/views/partials/warn-missing-notification-email.html +10 -0
  157. package/src/server/plugins/engine/views/repeat-list-summary.html +53 -0
  158. package/src/server/plugins/errorPages.ts +58 -0
  159. package/src/server/plugins/nunjucks/context.js +88 -0
  160. package/src/server/plugins/nunjucks/context.test.js +142 -0
  161. package/src/server/plugins/nunjucks/enviroment.test.js +201 -0
  162. package/src/server/plugins/nunjucks/environment.js +116 -0
  163. package/src/server/plugins/nunjucks/filters/answer.js +27 -0
  164. package/src/server/plugins/nunjucks/filters/answer.test.js +89 -0
  165. package/src/server/plugins/nunjucks/filters/evaluate.js +21 -0
  166. package/src/server/plugins/nunjucks/filters/field.js +28 -0
  167. package/src/server/plugins/nunjucks/filters/field.test.js +75 -0
  168. package/src/server/plugins/nunjucks/filters/highlight.js +11 -0
  169. package/src/server/plugins/nunjucks/filters/href.js +30 -0
  170. package/src/server/plugins/nunjucks/filters/href.test.js +80 -0
  171. package/src/server/plugins/nunjucks/filters/index.js +8 -0
  172. package/src/server/plugins/nunjucks/filters/inspect.js +15 -0
  173. package/src/server/plugins/nunjucks/filters/page.js +24 -0
  174. package/src/server/plugins/nunjucks/filters/page.test.js +65 -0
  175. package/src/server/plugins/nunjucks/index.js +3 -0
  176. package/src/server/plugins/nunjucks/plugin.js +40 -0
  177. package/src/server/plugins/nunjucks/render.js +42 -0
  178. package/src/server/plugins/nunjucks/types.js +40 -0
  179. package/src/server/plugins/pulse.ts +11 -0
  180. package/src/server/plugins/router.ts +201 -0
  181. package/src/server/plugins/session.ts +28 -0
  182. package/src/server/routes/health.js +13 -0
  183. package/src/server/routes/health.test.js +35 -0
  184. package/src/server/routes/index.test.ts +125 -0
  185. package/src/server/routes/index.ts +2 -0
  186. package/src/server/routes/public.ts +47 -0
  187. package/src/server/routes/types.ts +48 -0
  188. package/src/server/schemas/index.ts +34 -0
  189. package/src/server/secure-context.js +43 -0
  190. package/src/server/services/cacheService.test.ts +276 -0
  191. package/src/server/services/cacheService.ts +131 -0
  192. package/src/server/services/httpService.test.js +491 -0
  193. package/src/server/services/httpService.ts +50 -0
  194. package/src/server/services/index.ts +1 -0
  195. package/src/server/types.ts +54 -0
  196. package/src/server/utils/notify.test.ts +37 -0
  197. package/src/server/utils/notify.ts +50 -0
  198. package/src/server/utils/secure-context/get-trust-store-certs.js +11 -0
  199. package/src/server/utils/secure-context/get-trust-store-certs.test.js +19 -0
  200. package/src/server/utils/utils.js +24 -0
  201. package/src/server/utils/utils.test.js +54 -0
  202. package/src/server/views/404.html +16 -0
  203. package/src/server/views/500.html +19 -0
  204. package/src/server/views/components/debug/macro.njk +3 -0
  205. package/src/server/views/components/debug/template.njk +13 -0
  206. package/src/server/views/components/service-banner/macro.njk +3 -0
  207. package/src/server/views/components/service-banner/template.njk +20 -0
  208. package/src/server/views/components/service-banner/template.test.js +43 -0
  209. package/src/server/views/components/tag-env/macro.njk +3 -0
  210. package/src/server/views/components/tag-env/template.njk +30 -0
  211. package/src/server/views/components/tag-env/template.test.js +66 -0
  212. package/src/server/views/confirmation.html +19 -0
  213. package/src/server/views/help/accessibility-statement.html +58 -0
  214. package/src/server/views/help/cookie-preferences.html +57 -0
  215. package/src/server/views/help/cookies.html +71 -0
  216. package/src/server/views/help/get-support.html +37 -0
  217. package/src/server/views/help/privacy-notice.html +68 -0
  218. package/src/server/views/help/terms-and-conditions.html +83 -0
  219. package/src/server/views/layout.html +199 -0
  220. package/src/server/views/summary.html +50 -0
  221. package/src/typings/hapi/index.d.ts +95 -0
  222. package/src/typings/hapi-tracing/index.d.ts +6 -0
  223. package/src/typings/index.d.ts +3 -0
  224. package/src/typings/joi/index.d.ts +22 -0
@@ -0,0 +1,83 @@
1
+ {% extends 'layout.html' %}
2
+
3
+ {% block content %}
4
+ <div class="govuk-grid-row">
5
+ <div class="govuk-grid-column-two-thirds">
6
+ <h1 class="govuk-heading-l">Terms and conditions</h1>
7
+ <p class="govuk-body">By using this digital service you agree to our <a rel=noopener
8
+ href="https://www.gov.uk/government/publications/foreign-and-commonwealth-office-privacy-notice-consular-services-in-the-uk-and-at-british-embassies-high-commissions-and-consulates-overseas/foreign-and-commonwealth-office-privacy-notice-consular-services-in-the-uk-and-missions-overseas">
9
+ privacy policy</a> and to these terms and conditions. Read them carefully.
10
+ </p>
11
+ <h2 class="govuk-heading-l">General</h2>
12
+ <p class="govuk-body">These terms and conditions affect your rights and liabilities under
13
+ the law. They govern your use of, and relationship with, the service. They don’t apply to other services
14
+ provided by the Foreign &amp; Commonwealth Office, or to any other department or service which is linked
15
+ to in this service.</p>
16
+ <p class="govuk-body">You agree to use this site only for lawful purposes, and in a
17
+ manner that does not infringe the rights of, or restrict or inhibit the use and enjoyment of, this site
18
+ by any third party.</p>
19
+ <p class="govuk-body">We may occasionally update these terms and conditions. This might happen if there’s a change in the law or to the way this service works. Check these terms and conditions regularly, as continued use of the service after a change has been made is your acceptance of the change. If you don't agree to the terms and conditions and </span><a
20
+ rel=noopener href="https://www.gov.uk/government/publications/foreign-and-commonwealth-office-privacy-notice-consular-services-in-the-uk-and-at-british-embassies-high-commissions-and-consulates-overseas/foreign-and-commonwealth-office-privacy-notice-consular-services-in-the-uk-and-missions-overseas">
21
+ privacy policy</a>, you should not use this service.</p>
22
+ <h2 class="govuk-heading-l">Applicable law</h2>
23
+ <p class="govuk-body">Your use of this service and any dispute arising from its use will
24
+ be governed by and construed in accordance with the laws of England and Wales, including but not limited
25
+ to the:</p>
26
+ <ul class="govuk-list">
27
+ <li>Computer Misuse Act 1990</li>
28
+ <li>Data Protection Act</li>
29
+ <li>Mental Capacity Act 2005</li>
30
+ </ul>
31
+ <h2 class="govuk-heading-l">How to use this service responsibly</h2>
32
+ <p class="govuk-body">You must provide us with enough information for us to assess the
33
+ case fairly and if appropriate to provide the service. We also need these details to provide information
34
+ about the appointment, including rescheduling and cancellation when necessary, so you must provide
35
+ accurate details where we can reliably contact you.</p>
36
+ <p class="govuk-body">When attending their appointment the person requiring an emergency
37
+ travel document will have to pass through Security checks. They should expect their belongings to be
38
+ checked, and will have to leave their mobile phone and other belongings with the Security Officer. Do
39
+ not bring laptops or other electronic devices. Arrive in advance of the appointment. If you need to
40
+ cancel or modify your booking, you will be able to do so by following the link in the confirmation
41
+ email.</p>
42
+ <p class="govuk-body">There are risks in using a shared computer, such as in an internet
43
+ café, to use this digital service. It’s your responsibility to be aware of these risks and to avoid
44
+ using any computer which may leave your personal information accessible to others. You are responsible
45
+ if you choose to leave a computer unprotected while in the process of using the service.</p>
46
+ <p class="govuk-body">We make every effort to check and test this service whenever we
47
+ amend or update it. However, you must take your own precautions to ensure that the way you access this
48
+ service does not expose you to the risk of viruses, malicious computer code or other forms of
49
+ interference which may damage your own computer system.</p>
50
+ <p class="govuk-body">You must not misuse our service by knowingly introducing viruses,
51
+ trojans, worms, logic bombs or other material which is malicious or technologically harmful. You must
52
+ not attempt to gain unauthorised access to our service, the system on which our service is stored or any
53
+ server, computer or database connected to our service. You must not attack our site via a
54
+ denial-of-service attack or a distributed denial-of-service attack.</p>
55
+ <h1 class="govuk-heading-l">Disclaimer</h1>
56
+ <p class="govuk-body">While we make every effort to keep this service up to date, we
57
+ don’t provide any guarantees, conditions or warranties as to the accuracy of the information on the
58
+ site.</p>
59
+ <p class="govuk-body">While Consular staff will give you as much advice as they can, it
60
+ is your responsibility to ensure that you are obtaining the correct service and that you bring all the
61
+ necessary documentation for the service. If you are unsure, you may wish to take legal advice before
62
+ booking the service </p>
63
+ <p class="govuk-body">Our consular fees are not refundable, and are subject to change without notice. Check the relevant <a
64
+ href="https://www.gov.uk/search?q=consular+fees" target="_blank" rel="noopener noreferrer">consular fees list</a> for the latest information.</p>
65
+ <p class="govuk-body">We don’t accept liability for loss or damage incurred by users of
66
+ this service, whether direct, indirect or consequential, whether caused by tort, breach of contract or
67
+ otherwise. This includes loss of income or revenue, business, profits or contracts, anticipated savings,
68
+ data, goodwill, tangible property or wasted time in connection with this service or any websites linked
69
+ to it and any materials posted on it. This condition shall not prevent claims for loss of or damage to
70
+ your tangible property or any other claims for direct financial loss that are not excluded by any of the
71
+ categories set out above.</p>
72
+ <p class="govuk-body">This does not affect our liability for death or personal injury
73
+ arising from our negligence, nor our liability for fraudulent misrepresentation or misrepresentation as
74
+ to a fundamental matter, nor any other liability which cannot be excluded or limited under applicable
75
+ law. </p>
76
+ <h2 class="govuk-heading-l">Information provided by this service</h2>
77
+ <p class="govuk-body"> We work hard to ensure that information within this service is
78
+ accurate. However, we can’t guarantee the accuracy and completeness of any information at all times.
79
+ While we make every effort to ensure this service is accessible at all times, we are not liable if it is
80
+ unavailable for any period of time. </p>
81
+ </div>
82
+ </div>
83
+ {% endblock %}
@@ -0,0 +1,199 @@
1
+ {% extends "govuk/template.njk" %}
2
+
3
+ {% from "govuk/components/back-link/macro.njk" import govukBackLink -%}
4
+ {% from "govuk/components/footer/macro.njk" import govukFooter -%}
5
+ {% from "govuk/components/phase-banner/macro.njk" import govukPhaseBanner -%}
6
+ {% from "govuk/components/skip-link/macro.njk" import govukSkipLink -%}
7
+ {% from "govuk/macros/attributes.njk" import govukAttributes -%}
8
+ {% from "components/service-banner/macro.njk" import appServiceBanner -%}
9
+ {% from "components/tag-env/macro.njk" import appTagEnv -%}
10
+ {% from "govuk/components/cookie-banner/macro.njk" import govukCookieBanner -%}
11
+ {% from "govuk/components/notification-banner/macro.njk" import govukNotificationBanner -%}
12
+
13
+ {% set productName %}
14
+ {% if config.cdpEnvironment !== "prod" %}
15
+ {{ appTagEnv({ env: config.cdpEnvironment }) }}
16
+ {% endif %}
17
+ {% endset %}
18
+
19
+ {% block head %}
20
+ <meta name="application-name" content="@defra/forms-runner" {{- govukAttributes({
21
+ "data-environment": {
22
+ value: config.cdpEnvironment,
23
+ optional: true
24
+ },
25
+ "data-version": {
26
+ value: config.serviceVersion,
27
+ optional: true
28
+ }
29
+ }) }}>
30
+
31
+ <link rel="preload" as="font" href="{{ assetPath }}/fonts/bold-b542beb274-v2.woff2" type="font/woff2" crossorigin="anonymous">
32
+ <link rel="preload" as="font" href="{{ assetPath }}/fonts/light-94a07e06a1-v2.woff2" type="font/woff2" crossorigin="anonymous">
33
+ <link rel="stylesheet" href="{{ getAssetPath("stylesheets/application.scss") }}">
34
+ {% endblock %}
35
+
36
+ {% block pageTitle -%}
37
+ {{ "Error: " if errors | length }}{{ pageTitle | evaluate }} - {{ name if name else config.serviceName }} - GOV.UK
38
+ {%- endblock %}
39
+
40
+ {% block skipLink %}
41
+ {{ govukSkipLink({
42
+ href: '#main-content',
43
+ text: 'Skip to main content'
44
+ }) }}
45
+ {% endblock %}
46
+
47
+ {% block header %}
48
+ {% if config.googleAnalyticsTrackingId and slug %}
49
+ <form method="post" action="/help/cookie-preferences/{{ slug }}?returnUrl={{ currentPath | urlencode }}">
50
+ <input type="hidden" name="crumb" value="{{ crumb }}">
51
+
52
+ {% set acceptHtml %}
53
+ <p class="govuk-body">You’ve accepted analytics cookies. You can <a class="govuk-link" href="/help/cookies/{{ slug }}">change your cookie settings</a> at any time.</p>
54
+ {% endset %}
55
+
56
+ {% set rejectedHtml %}
57
+ <p class="govuk-body">You’ve rejected analytics cookies. You can <a class="govuk-link" href="/help/cookies/{{ slug }}">change your cookie settings</a> at any time.</p>
58
+ {% endset %}
59
+
60
+ {% if cookieConsent.analytics !== true and cookieConsent.analytics !== false and cookieConsent.dismissed !== true %}
61
+ {% set html %}
62
+ <p class="govuk-body">We use some essential cookies to make this service work.</p>
63
+ <p class="govuk-body">We’d like to set analytics cookies so we can understand how people use the service and make improvements.</p>
64
+ {% endset %}
65
+
66
+ {{ govukCookieBanner({
67
+ ariaLabel: "Cookies on " + config.serviceName,
68
+ messages: [
69
+ {
70
+ headingText: config.serviceName,
71
+ html: html,
72
+ actions: [
73
+ {
74
+ text: "Accept analytics cookies",
75
+ type: "submit",
76
+ name: "cookies[analytics]",
77
+ value: "yes"
78
+ },
79
+ {
80
+ text: "Reject analytics cookies",
81
+ type: "submit",
82
+ name: "cookies[analytics]",
83
+ value: "no"
84
+ },
85
+ {
86
+ text: "View cookies",
87
+ href: "/help/cookies/" + slug
88
+ }
89
+ ]
90
+ }
91
+ ]
92
+ }) }}
93
+ {% elif cookieConsent.dismissed === false %}
94
+ {{ govukCookieBanner({
95
+ ariaLabel: "Cookies on " + config.serviceName,
96
+ messages: [
97
+ {
98
+ html: acceptHtml if cookieConsent.analytics === true else rejectedHtml,
99
+ actions: [
100
+ {
101
+ text: "Hide cookie message",
102
+ type: "submit",
103
+ name: "cookies[dismissed]",
104
+ value: "yes"
105
+ }
106
+ ]
107
+ }
108
+ ]
109
+ }) }}
110
+ {% endif %}
111
+
112
+ </form>
113
+ {% endif %}
114
+
115
+ {% if config.serviceBannerText | length %}
116
+ {{ appServiceBanner({
117
+ title: "Service status",
118
+ text: config.serviceBannerText
119
+ }) }}
120
+ {% endif %}
121
+
122
+ {{ govukHeader({
123
+ homepageUrl: currentPath if context.isForceAccess else "https://www.gov.uk",
124
+ containerClasses: "govuk-width-container",
125
+ productName: productName | safe | trim,
126
+ serviceName: name if name else config.serviceName,
127
+ serviceUrl: currentPath if context.isForceAccess else serviceUrl
128
+ }) }}
129
+ {% endblock %}
130
+
131
+ {% block beforeContent %}
132
+ {% set feedbackLink = feedbackLink or config.feedbackLink -%}
133
+ {% set phaseTag = phaseTag or config.phaseTag -%}
134
+
135
+ {% if phaseTag %}
136
+ {% set feedbackLinkHtml -%}
137
+ <a href="{{ currentPath if context.isForceAccess else feedbackLink }}" class="govuk-link" {%- if not context.isForceAccess %} target="_blank" rel="noopener noreferrer" {%- endif %}>
138
+ {%- if "mailto:" in feedbackLink -%}
139
+ give your feedback by email
140
+ {%- else -%}
141
+ give your feedback (opens in new tab)
142
+ {%- endif -%}
143
+ </a>
144
+ {%- endset %}
145
+
146
+ {{ govukPhaseBanner({
147
+ tag: { text: phaseTag | capitalize },
148
+ html: "This is a new service. Help us improve it and " + feedbackLinkHtml | safe + "."
149
+ }) }}
150
+ {% endif %}
151
+ {% if backLink %}
152
+ {{ govukBackLink(backLink) }}
153
+ {% endif %}
154
+ {% endblock %}
155
+
156
+ {% block content %}
157
+ <h1 class="govuk-heading-l">Default page template</h1>
158
+ {% endblock %}
159
+
160
+ {% block bodyEnd %}
161
+ <script type="module" nonce="{{ cspNonce }}" src="{{ getAssetPath("application.js") }}"></script>
162
+
163
+ {% if config.googleAnalyticsTrackingId and cookieConsent.analytics === true %}
164
+ <script id="ga-tag-js-main" nonce="{{ cspNonce }}" src="https://www.googletagmanager.com/gtag/js?id={{ config.googleAnalyticsTrackingId }}" defer></script>
165
+ <script id="ga-tag-js-init" nonce="{{ cspNonce }}">
166
+ window.dataLayer = window.dataLayer || [];
167
+ function gtag(){dataLayer.push(arguments);}
168
+ gtag('js', new Date());
169
+ gtag('config', '{{ config.googleAnalyticsTrackingId }}');
170
+ </script>
171
+ {% endif %}
172
+ {% endblock %}
173
+
174
+ {% block footer %}
175
+ {% set meta = {
176
+ items: [
177
+ {
178
+ href: '/help/get-support/' + slug,
179
+ text: 'Get help with this form'
180
+ },
181
+ {
182
+ href: '/help/privacy/' + slug,
183
+ text: 'Privacy'
184
+ },
185
+ {
186
+ href: '/help/cookies/' + slug,
187
+ text: 'Cookies'
188
+ },
189
+ {
190
+ href: '/help/accessibility-statement/' + slug,
191
+ text: 'Accessibility Statement'
192
+ }
193
+ ]
194
+ } if slug %}
195
+
196
+ {% if not context.isForceAccess %}
197
+ {{ govukFooter({ meta: meta }) }}
198
+ {% endif %}
199
+ {% endblock %}
@@ -0,0 +1,50 @@
1
+ {% extends "layout.html" %}
2
+
3
+ {% from "govuk/components/error-summary/macro.njk" import govukErrorSummary %}
4
+ {% from "govuk/components/summary-list/macro.njk" import govukSummaryList %}
5
+
6
+ {% block content %}
7
+ <div class="govuk-grid-row">
8
+ <div class="govuk-grid-column-two-thirds">
9
+ {% if previewMode %}
10
+ {% include "partials/preview-banner.html" %}
11
+ {% endif %}
12
+
13
+ {% if hasMissingNotificationEmail %}
14
+ {% include "partials/warn-missing-notification-email.html" %}
15
+ {% endif %}
16
+
17
+ <h1 class="govuk-heading-l">
18
+ {{ pageTitle }}
19
+ </h1>
20
+
21
+ {% for section in checkAnswers %}
22
+ {% if section.title.text %}
23
+ <h2 class="govuk-heading-m">
24
+ {{ section.title.text }}
25
+ </h2>
26
+ {% endif %}
27
+
28
+ {{ govukSummaryList(section.summaryList) }}
29
+ {% endfor %}
30
+
31
+ <form method="post" novalidate>
32
+ <input type="hidden" name="crumb" value="{{ crumb }}">
33
+ <input type="hidden" name="action" value="send">
34
+
35
+ {% if declaration %}
36
+ <h2 class="govuk-heading-m" id="declaration">Declaration</h2>
37
+ {{ declaration | safe }}
38
+ {% endif %}
39
+
40
+ <button data-prevent-double-click="true" class="govuk-button" data-module="govuk-button">
41
+ {{ "Accept and send" if declaration else "Send" }}
42
+ </button>
43
+ </form>
44
+ </div>
45
+ </div>
46
+
47
+ {% if config.cdpEnvironment == 'local' and context | length and not context.isForceAccess %}
48
+ {% include "partials/debug.html" %}
49
+ {% endif %}
50
+ {% endblock %}
@@ -0,0 +1,95 @@
1
+ /* eslint-disable @typescript-eslint/unified-signatures */
2
+
3
+ import { type Plugin } from '@hapi/hapi'
4
+ import { type ServerYar, type Yar } from '@hapi/yar'
5
+ import { type Logger } from 'pino'
6
+
7
+ import { type FormModel } from '~/src/server/plugins/engine/models/index.js'
8
+ import {
9
+ type FormRequest,
10
+ type FormRequestPayload
11
+ } from '~/src/server/routes/types.js'
12
+ import { type CacheService } from '~/src/server/services/index.js'
13
+
14
+ declare module '@hapi/hapi' {
15
+ // Here we are decorating Hapi interface types with
16
+ // props from plugins which doesn't export @types
17
+ interface PluginProperties {
18
+ crumb: {
19
+ generate?: (request: Request | FormRequest | FormRequestPayload) => string
20
+ }
21
+ }
22
+
23
+ interface PluginsStates {
24
+ blankie?: {
25
+ nonces?: {
26
+ script?: string
27
+ style?: string
28
+ }
29
+ }
30
+ }
31
+
32
+ interface Request {
33
+ logger: Logger
34
+ yar: Yar
35
+ }
36
+
37
+ interface RequestApplicationState {
38
+ model?: FormModel
39
+ }
40
+
41
+ interface Server {
42
+ logger: Logger
43
+ yar: ServerYar
44
+ }
45
+
46
+ interface ServerApplicationState {
47
+ model?: FormModel
48
+ models: Map<string, { model: FormModel; updatedAt: Date }>
49
+ }
50
+ }
51
+
52
+ declare module '@hapipal/schmervice' {
53
+ interface RegisteredServices {
54
+ cacheService: CacheService
55
+ }
56
+
57
+ interface SchmerviceDecorator {
58
+ (all?: boolean): RegisteredServices
59
+ (namespace?: string[]): RegisteredServices
60
+ }
61
+ }
62
+
63
+ declare module '@hapi/scooter' {
64
+ declare const hapiScooter: {
65
+ plugin: Plugin
66
+ }
67
+
68
+ export = hapiScooter
69
+ }
70
+
71
+ declare module 'blankie' {
72
+ declare const blankie: {
73
+ plugin: Plugin<Record<string, boolean | string | string[]>>
74
+ }
75
+
76
+ export = blankie
77
+ }
78
+
79
+ declare module 'blipp' {
80
+ declare const blipp: {
81
+ plugin: Plugin
82
+ }
83
+
84
+ export = blipp
85
+ }
86
+
87
+ declare module 'hapi-pulse' {
88
+ declare const hapiPulse: {
89
+ plugin: Plugin<{
90
+ timeout: number
91
+ }>
92
+ }
93
+
94
+ export = hapiPulse
95
+ }
@@ -0,0 +1,6 @@
1
+ declare module '@defra/hapi-tracing' {
2
+ import { type Plugin } from '@hapi/hapi'
3
+
4
+ export const tracing: Plugin<unknown>
5
+ export function getTraceId(): string | null
6
+ }
@@ -0,0 +1,3 @@
1
+ declare module '@hapi/scooter'
2
+ declare module 'blankie'
3
+ declare module 'blipp'
@@ -0,0 +1,22 @@
1
+ import { type FormPayload } from '~/src/server/plugins/engine/types.ts'
2
+
3
+ declare module 'joi' {
4
+ interface Context {
5
+ present?: string[]
6
+ presentWithLabels?: string[]
7
+ missing?: string[]
8
+ missingWithLabels?: string[]
9
+ }
10
+
11
+ /**
12
+ * Add context types for `object.and` error reports
13
+ * {@link https://joi.dev/api/?v=17.13.3#objectand}
14
+ */
15
+ interface ErrorReportCollection extends ErrorReport {
16
+ local: Context & {
17
+ value: FormPayload
18
+ label?: string
19
+ title?: string
20
+ }
21
+ }
22
+ }