@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.
- package/package.json +3 -2
- package/src/client/javascripts/application.js +87 -0
- package/src/client/javascripts/file-upload.js +386 -0
- package/src/client/stylesheets/_code.scss +33 -0
- package/src/client/stylesheets/_govuk-frontend.scss +4 -0
- package/src/client/stylesheets/_prose.scss +56 -0
- package/src/client/stylesheets/_service-banner.scss +24 -0
- package/src/client/stylesheets/_summary-list.scss +28 -0
- package/src/client/stylesheets/_tag-env.scss +24 -0
- package/src/client/stylesheets/application.scss +14 -0
- package/src/common/cookies.js +58 -0
- package/src/common/cookies.test.js +23 -0
- package/src/common/types.js +5 -0
- package/src/config/index.ts +271 -0
- package/src/index.ts +31 -0
- package/src/server/common/helpers/logging/logger-options.test.ts +50 -0
- package/src/server/common/helpers/logging/logger-options.ts +46 -0
- package/src/server/common/helpers/logging/logger.ts +7 -0
- package/src/server/common/helpers/logging/request-logger.ts +9 -0
- package/src/server/common/helpers/logging/request-tracing.js +10 -0
- package/src/server/common/helpers/redis-client.js +70 -0
- package/src/server/constants.js +1 -0
- package/src/server/forms/README.md +10 -0
- package/src/server/forms/components.json +1015 -0
- package/src/server/forms/report-a-terrorist.json +270 -0
- package/src/server/forms/runner-components-test.json +365 -0
- package/src/server/forms/test.json +581 -0
- package/src/server/index.test.ts +582 -0
- package/src/server/index.ts +140 -0
- package/src/server/plugins/blankie.test.ts +73 -0
- package/src/server/plugins/blankie.ts +48 -0
- package/src/server/plugins/crumb.ts +20 -0
- package/src/server/plugins/engine/README.md +87 -0
- package/src/server/plugins/engine/components/AutocompleteField.test.ts +294 -0
- package/src/server/plugins/engine/components/AutocompleteField.ts +49 -0
- package/src/server/plugins/engine/components/CheckboxesField.test.ts +379 -0
- package/src/server/plugins/engine/components/CheckboxesField.ts +106 -0
- package/src/server/plugins/engine/components/ComponentBase.ts +97 -0
- package/src/server/plugins/engine/components/ComponentCollection.ts +278 -0
- package/src/server/plugins/engine/components/DatePartsField.test.ts +822 -0
- package/src/server/plugins/engine/components/DatePartsField.ts +264 -0
- package/src/server/plugins/engine/components/Details.test.ts +49 -0
- package/src/server/plugins/engine/components/Details.ts +30 -0
- package/src/server/plugins/engine/components/EmailAddressField.test.ts +395 -0
- package/src/server/plugins/engine/components/EmailAddressField.ts +55 -0
- package/src/server/plugins/engine/components/FileUploadField.test.ts +778 -0
- package/src/server/plugins/engine/components/FileUploadField.ts +262 -0
- package/src/server/plugins/engine/components/FormComponent.ts +249 -0
- package/src/server/plugins/engine/components/Html.test.ts +48 -0
- package/src/server/plugins/engine/components/Html.ts +29 -0
- package/src/server/plugins/engine/components/InsetText.test.ts +48 -0
- package/src/server/plugins/engine/components/InsetText.ts +27 -0
- package/src/server/plugins/engine/components/List.test.ts +76 -0
- package/src/server/plugins/engine/components/List.ts +72 -0
- package/src/server/plugins/engine/components/ListFormComponent.ts +140 -0
- package/src/server/plugins/engine/components/MonthYearField.test.ts +567 -0
- package/src/server/plugins/engine/components/MonthYearField.ts +222 -0
- package/src/server/plugins/engine/components/MultilineTextField.test.ts +558 -0
- package/src/server/plugins/engine/components/MultilineTextField.ts +138 -0
- package/src/server/plugins/engine/components/NumberField.test.ts +701 -0
- package/src/server/plugins/engine/components/NumberField.ts +163 -0
- package/src/server/plugins/engine/components/RadiosField.test.ts +288 -0
- package/src/server/plugins/engine/components/RadiosField.ts +24 -0
- package/src/server/plugins/engine/components/SelectField.test.ts +288 -0
- package/src/server/plugins/engine/components/SelectField.ts +47 -0
- package/src/server/plugins/engine/components/SelectionControlField.ts +43 -0
- package/src/server/plugins/engine/components/TelephoneNumberField.test.ts +356 -0
- package/src/server/plugins/engine/components/TelephoneNumberField.ts +67 -0
- package/src/server/plugins/engine/components/TextField.test.ts +489 -0
- package/src/server/plugins/engine/components/TextField.ts +96 -0
- package/src/server/plugins/engine/components/UkAddressField.test.ts +623 -0
- package/src/server/plugins/engine/components/UkAddressField.ts +172 -0
- package/src/server/plugins/engine/components/YesNoField.test.ts +248 -0
- package/src/server/plugins/engine/components/YesNoField.ts +31 -0
- package/src/server/plugins/engine/components/constants.ts +1 -0
- package/src/server/plugins/engine/components/helpers.ts +330 -0
- package/src/server/plugins/engine/components/index.ts +24 -0
- package/src/server/plugins/engine/components/types.ts +117 -0
- package/src/server/plugins/engine/configureEnginePlugin.ts +47 -0
- package/src/server/plugins/engine/helpers.test.ts +791 -0
- package/src/server/plugins/engine/helpers.ts +379 -0
- package/src/server/plugins/engine/index.ts +7 -0
- package/src/server/plugins/engine/models/FormModel.test.ts +42 -0
- package/src/server/plugins/engine/models/FormModel.ts +443 -0
- package/src/server/plugins/engine/models/RepeatingSummaryViewModel.ts +0 -0
- package/src/server/plugins/engine/models/Section.ts +0 -0
- package/src/server/plugins/engine/models/SummaryViewModel.test.ts +209 -0
- package/src/server/plugins/engine/models/SummaryViewModel.ts +220 -0
- package/src/server/plugins/engine/models/index.ts +2 -0
- package/src/server/plugins/engine/models/types.ts +114 -0
- package/src/server/plugins/engine/outputFormatters/human/v1.test.ts +143 -0
- package/src/server/plugins/engine/outputFormatters/human/v1.ts +73 -0
- package/src/server/plugins/engine/outputFormatters/index.test.ts +17 -0
- package/src/server/plugins/engine/outputFormatters/index.ts +44 -0
- package/src/server/plugins/engine/outputFormatters/machine/v1.test.ts +229 -0
- package/src/server/plugins/engine/outputFormatters/machine/v1.ts +140 -0
- package/src/server/plugins/engine/outputFormatters/machine/v2.test.ts +229 -0
- package/src/server/plugins/engine/outputFormatters/machine/v2.ts +153 -0
- package/src/server/plugins/engine/pageControllers/FileUploadPageController.test.ts +1108 -0
- package/src/server/plugins/engine/pageControllers/FileUploadPageController.ts +446 -0
- package/src/server/plugins/engine/pageControllers/PageController.test.ts +205 -0
- package/src/server/plugins/engine/pageControllers/PageController.ts +176 -0
- package/src/server/plugins/engine/pageControllers/QuestionPageController.test.ts +1264 -0
- package/src/server/plugins/engine/pageControllers/QuestionPageController.ts +561 -0
- package/src/server/plugins/engine/pageControllers/README.md +28 -0
- package/src/server/plugins/engine/pageControllers/RepeatPageController.test.ts +264 -0
- package/src/server/plugins/engine/pageControllers/RepeatPageController.ts +458 -0
- package/src/server/plugins/engine/pageControllers/StartPageController.ts +18 -0
- package/src/server/plugins/engine/pageControllers/StatusPageController.ts +50 -0
- package/src/server/plugins/engine/pageControllers/SummaryPageController.ts +261 -0
- package/src/server/plugins/engine/pageControllers/TerminalController.test.ts +28 -0
- package/src/server/plugins/engine/pageControllers/TerminalPageController.ts +19 -0
- package/src/server/plugins/engine/pageControllers/helpers.test.ts +198 -0
- package/src/server/plugins/engine/pageControllers/helpers.ts +101 -0
- package/src/server/plugins/engine/pageControllers/index.ts +10 -0
- package/src/server/plugins/engine/pageControllers/validationOptions.ts +89 -0
- package/src/server/plugins/engine/plugin.ts +673 -0
- package/src/server/plugins/engine/services/formSubmissionService.js +46 -0
- package/src/server/plugins/engine/services/formsService.js +46 -0
- package/src/server/plugins/engine/services/formsService.test.js +90 -0
- package/src/server/plugins/engine/services/index.js +3 -0
- package/src/server/plugins/engine/services/notifyService.test.ts +132 -0
- package/src/server/plugins/engine/services/notifyService.ts +64 -0
- package/src/server/plugins/engine/services/uploadService.js +60 -0
- package/src/server/plugins/engine/types.ts +315 -0
- package/src/server/plugins/engine/views/components/autocompletefield.html +5 -0
- package/src/server/plugins/engine/views/components/checkboxesfield.html +5 -0
- package/src/server/plugins/engine/views/components/datepartsfield.html +5 -0
- package/src/server/plugins/engine/views/components/details.html +6 -0
- package/src/server/plugins/engine/views/components/emailaddressfield.html +5 -0
- package/src/server/plugins/engine/views/components/fileuploadfield-key.html +8 -0
- package/src/server/plugins/engine/views/components/fileuploadfield-value.html +3 -0
- package/src/server/plugins/engine/views/components/fileuploadfield.html +24 -0
- package/src/server/plugins/engine/views/components/html.html +3 -0
- package/src/server/plugins/engine/views/components/insettext.html +7 -0
- package/src/server/plugins/engine/views/components/list.html +36 -0
- package/src/server/plugins/engine/views/components/monthyearfield.html +5 -0
- package/src/server/plugins/engine/views/components/multilinetextfield.html +10 -0
- package/src/server/plugins/engine/views/components/numberfield.html +5 -0
- package/src/server/plugins/engine/views/components/radiosfield.html +5 -0
- package/src/server/plugins/engine/views/components/selectfield.html +5 -0
- package/src/server/plugins/engine/views/components/telephonenumberfield.html +5 -0
- package/src/server/plugins/engine/views/components/textfield.html +5 -0
- package/src/server/plugins/engine/views/components/ukaddressfield.html +25 -0
- package/src/server/plugins/engine/views/components/yesnofield.html +5 -0
- package/src/server/plugins/engine/views/file-upload.html +45 -0
- package/src/server/plugins/engine/views/index.html +39 -0
- package/src/server/plugins/engine/views/item-delete.html +56 -0
- package/src/server/plugins/engine/views/partials/components.html +6 -0
- package/src/server/plugins/engine/views/partials/conditional-components.html +3 -0
- package/src/server/plugins/engine/views/partials/debug.html +44 -0
- package/src/server/plugins/engine/views/partials/form.html +15 -0
- package/src/server/plugins/engine/views/partials/heading.html +16 -0
- package/src/server/plugins/engine/views/partials/preview-banner.html +32 -0
- package/src/server/plugins/engine/views/partials/preview-banner.test.js +122 -0
- package/src/server/plugins/engine/views/partials/warn-missing-notification-email.html +10 -0
- package/src/server/plugins/engine/views/repeat-list-summary.html +53 -0
- package/src/server/plugins/errorPages.ts +58 -0
- package/src/server/plugins/nunjucks/context.js +88 -0
- package/src/server/plugins/nunjucks/context.test.js +142 -0
- package/src/server/plugins/nunjucks/enviroment.test.js +201 -0
- package/src/server/plugins/nunjucks/environment.js +116 -0
- package/src/server/plugins/nunjucks/filters/answer.js +27 -0
- package/src/server/plugins/nunjucks/filters/answer.test.js +89 -0
- package/src/server/plugins/nunjucks/filters/evaluate.js +21 -0
- package/src/server/plugins/nunjucks/filters/field.js +28 -0
- package/src/server/plugins/nunjucks/filters/field.test.js +75 -0
- package/src/server/plugins/nunjucks/filters/highlight.js +11 -0
- package/src/server/plugins/nunjucks/filters/href.js +30 -0
- package/src/server/plugins/nunjucks/filters/href.test.js +80 -0
- package/src/server/plugins/nunjucks/filters/index.js +8 -0
- package/src/server/plugins/nunjucks/filters/inspect.js +15 -0
- package/src/server/plugins/nunjucks/filters/page.js +24 -0
- package/src/server/plugins/nunjucks/filters/page.test.js +65 -0
- package/src/server/plugins/nunjucks/index.js +3 -0
- package/src/server/plugins/nunjucks/plugin.js +40 -0
- package/src/server/plugins/nunjucks/render.js +42 -0
- package/src/server/plugins/nunjucks/types.js +40 -0
- package/src/server/plugins/pulse.ts +11 -0
- package/src/server/plugins/router.ts +201 -0
- package/src/server/plugins/session.ts +28 -0
- package/src/server/routes/health.js +13 -0
- package/src/server/routes/health.test.js +35 -0
- package/src/server/routes/index.test.ts +125 -0
- package/src/server/routes/index.ts +2 -0
- package/src/server/routes/public.ts +47 -0
- package/src/server/routes/types.ts +48 -0
- package/src/server/schemas/index.ts +34 -0
- package/src/server/secure-context.js +43 -0
- package/src/server/services/cacheService.test.ts +276 -0
- package/src/server/services/cacheService.ts +131 -0
- package/src/server/services/httpService.test.js +491 -0
- package/src/server/services/httpService.ts +50 -0
- package/src/server/services/index.ts +1 -0
- package/src/server/types.ts +54 -0
- package/src/server/utils/notify.test.ts +37 -0
- package/src/server/utils/notify.ts +50 -0
- package/src/server/utils/secure-context/get-trust-store-certs.js +11 -0
- package/src/server/utils/secure-context/get-trust-store-certs.test.js +19 -0
- package/src/server/utils/utils.js +24 -0
- package/src/server/utils/utils.test.js +54 -0
- package/src/server/views/404.html +16 -0
- package/src/server/views/500.html +19 -0
- package/src/server/views/components/debug/macro.njk +3 -0
- package/src/server/views/components/debug/template.njk +13 -0
- package/src/server/views/components/service-banner/macro.njk +3 -0
- package/src/server/views/components/service-banner/template.njk +20 -0
- package/src/server/views/components/service-banner/template.test.js +43 -0
- package/src/server/views/components/tag-env/macro.njk +3 -0
- package/src/server/views/components/tag-env/template.njk +30 -0
- package/src/server/views/components/tag-env/template.test.js +66 -0
- package/src/server/views/confirmation.html +19 -0
- package/src/server/views/help/accessibility-statement.html +58 -0
- package/src/server/views/help/cookie-preferences.html +57 -0
- package/src/server/views/help/cookies.html +71 -0
- package/src/server/views/help/get-support.html +37 -0
- package/src/server/views/help/privacy-notice.html +68 -0
- package/src/server/views/help/terms-and-conditions.html +83 -0
- package/src/server/views/layout.html +199 -0
- package/src/server/views/summary.html +50 -0
- package/src/typings/hapi/index.d.ts +95 -0
- package/src/typings/hapi-tracing/index.d.ts +6 -0
- package/src/typings/index.d.ts +3 -0
- 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 & 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,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
|
+
}
|