@defra/forms-engine-plugin 0.0.4 → 0.0.6
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/.server/server/index.js +0 -4
- package/.server/server/index.js.map +1 -1
- package/.server/server/plugins/engine/helpers.js +3 -0
- package/.server/server/plugins/engine/helpers.js.map +1 -1
- package/.server/server/plugins/engine/index.js +27 -1
- package/.server/server/plugins/engine/index.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/FileUploadPageController.js +2 -4
- package/.server/server/plugins/engine/pageControllers/FileUploadPageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/QuestionPageController.js +4 -10
- package/.server/server/plugins/engine/pageControllers/QuestionPageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/StatusPageController.js +2 -3
- package/.server/server/plugins/engine/pageControllers/StatusPageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/SummaryPageController.js +2 -4
- package/.server/server/plugins/engine/pageControllers/SummaryPageController.js.map +1 -1
- package/.server/server/plugins/engine/plugin.js +65 -6
- package/.server/server/plugins/engine/plugin.js.map +1 -1
- package/.server/server/plugins/engine/types.js.map +1 -1
- package/.server/server/{views → plugins/engine/views}/components/service-banner/template.test.js +1 -1
- package/.server/server/plugins/engine/views/components/service-banner/template.test.js.map +1 -0
- package/.server/server/{views → plugins/engine/views}/components/tag-env/template.test.js +1 -1
- package/.server/server/plugins/engine/views/components/tag-env/template.test.js.map +1 -0
- package/.server/server/services/cacheService.js +5 -2
- package/.server/server/services/cacheService.js.map +1 -1
- package/.server/typings/hapi/index.d.js.map +1 -1
- package/README.md +215 -4
- package/package.json +3 -3
- 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 +135 -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 +384 -0
- package/src/server/plugins/engine/index.ts +47 -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 +1116 -0
- package/src/server/plugins/engine/pageControllers/FileUploadPageController.ts +447 -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 +565 -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 +51 -0
- package/src/server/plugins/engine/pageControllers/SummaryPageController.ts +262 -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 +753 -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 +317 -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/debug/macro.njk +3 -0
- package/src/server/plugins/engine/views/components/debug/template.njk +13 -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/service-banner/macro.njk +3 -0
- package/src/server/plugins/engine/views/components/service-banner/template.njk +20 -0
- package/src/server/plugins/engine/views/components/service-banner/template.test.js +43 -0
- package/src/server/plugins/engine/views/components/tag-env/macro.njk +3 -0
- package/src/server/plugins/engine/views/components/tag-env/template.njk +30 -0
- package/src/server/plugins/engine/views/components/tag-env/template.test.js +66 -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/confirmation.html +19 -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/layout.html +199 -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/engine/views/summary.html +50 -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 +277 -0
- package/src/server/services/cacheService.ts +138 -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/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/typings/hapi/index.d.ts +87 -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
- package/.server/server/views/components/service-banner/template.test.js.map +0 -1
- package/.server/server/views/components/tag-env/template.test.js.map +0 -1
- /package/.server/server/{views → plugins/engine/views}/components/debug/macro.njk +0 -0
- /package/.server/server/{views → plugins/engine/views}/components/debug/template.njk +0 -0
- /package/.server/server/{views → plugins/engine/views}/components/service-banner/macro.njk +0 -0
- /package/.server/server/{views → plugins/engine/views}/components/service-banner/template.njk +0 -0
- /package/.server/server/{views → plugins/engine/views}/components/tag-env/macro.njk +0 -0
- /package/.server/server/{views → plugins/engine/views}/components/tag-env/template.njk +0 -0
- /package/.server/server/{views → plugins/engine/views}/confirmation.html +0 -0
- /package/.server/server/{views → plugins/engine/views}/layout.html +0 -0
- /package/.server/server/{views → plugins/engine/views}/summary.html +0 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{% from "partials/components.html" import componentList %}
|
|
2
|
+
{% from "govuk/components/fieldset/macro.njk" import govukFieldset %}
|
|
3
|
+
{% from "govuk/components/hint/macro.njk" import govukHint %}
|
|
4
|
+
|
|
5
|
+
{% macro UkAddressField(component) %}
|
|
6
|
+
{% set fieldset = component.model.fieldset %}
|
|
7
|
+
{% set addressFieldHtml = componentList(component.model.components) %}
|
|
8
|
+
|
|
9
|
+
{% if component.model.hint %}
|
|
10
|
+
{% set addressHintHtml %}
|
|
11
|
+
{{ govukHint({
|
|
12
|
+
id: component.model.name + "-hint",
|
|
13
|
+
text: component.model.hint.text
|
|
14
|
+
} if fieldset else component.model.hint) }}
|
|
15
|
+
{% endset %}
|
|
16
|
+
|
|
17
|
+
{% set addressFieldHtml = addressHintHtml + addressFieldHtml %}
|
|
18
|
+
{% endif %}
|
|
19
|
+
|
|
20
|
+
{{ govukFieldset({
|
|
21
|
+
legend: fieldset.legend,
|
|
22
|
+
attributes: fieldset.attributes,
|
|
23
|
+
html: addressFieldHtml
|
|
24
|
+
}) if fieldset else addressFieldHtml }}
|
|
25
|
+
{% endmacro %}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{% extends "layout.html" %}
|
|
2
|
+
|
|
3
|
+
{% from "govuk/components/panel/macro.njk" import govukPanel %}
|
|
4
|
+
|
|
5
|
+
{% set mainClasses = "govuk-main-wrapper--l" %}
|
|
6
|
+
|
|
7
|
+
{% block content %}
|
|
8
|
+
<div class="govuk-grid-row">
|
|
9
|
+
<div class="govuk-grid-column-two-thirds">
|
|
10
|
+
{{ govukPanel({
|
|
11
|
+
titleText: pageTitle
|
|
12
|
+
}) }}
|
|
13
|
+
<h2 class="govuk-heading-m">What happens next</h2>
|
|
14
|
+
<div class="app-prose-scope">
|
|
15
|
+
{{ submissionGuidance | markdown | safe }}
|
|
16
|
+
</div>
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
19
|
+
{% endblock %}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{% extends "index.html" %}
|
|
2
|
+
|
|
3
|
+
{% from "govuk/components/button/macro.njk" import govukButton %}
|
|
4
|
+
{% from "govuk/components/file-upload/macro.njk" import govukFileUpload %}
|
|
5
|
+
{% from "govuk/components/warning-text/macro.njk" import govukWarningText %}
|
|
6
|
+
|
|
7
|
+
{% block form %}
|
|
8
|
+
{{ componentList(componentsBefore) }}
|
|
9
|
+
|
|
10
|
+
<div class="govuk-error-summary-container"></div>
|
|
11
|
+
|
|
12
|
+
<form method="post" {%- if formAction and not context.isForceAccess %} action="{{ formAction }}" enctype="multipart/form-data" data-upload-id="{{ uploadId }}" {% if proxyUrl %}data-proxy-url="{{ proxyUrl }}"{% endif %} {%- endif %} novalidate>
|
|
13
|
+
{{ govukFileUpload(formComponent.model) }}
|
|
14
|
+
|
|
15
|
+
{% if formAction %}
|
|
16
|
+
{{ govukButton({
|
|
17
|
+
text: "Upload file",
|
|
18
|
+
classes: "govuk-button--secondary upload-file-button",
|
|
19
|
+
preventDoubleClick: true
|
|
20
|
+
}) }}
|
|
21
|
+
{% else %}
|
|
22
|
+
{{ govukWarningText({
|
|
23
|
+
text: "You have reached the maximum number of files. Please remove a file to upload more.",
|
|
24
|
+
iconFallbackText: "Warning"
|
|
25
|
+
}) }}
|
|
26
|
+
{% endif %}
|
|
27
|
+
</form>
|
|
28
|
+
|
|
29
|
+
{{ super() }}
|
|
30
|
+
|
|
31
|
+
<div class="govuk-summary-list-container"></div>
|
|
32
|
+
|
|
33
|
+
{% endblock %}
|
|
34
|
+
|
|
35
|
+
{% block bodyEnd %}
|
|
36
|
+
{{ super() }}
|
|
37
|
+
<script type="module" nonce="{{ cspNonce }}">
|
|
38
|
+
import { initFileUpload } from '{{ getAssetPath("file-upload.js") }}';
|
|
39
|
+
if (document.readyState === 'loading') {
|
|
40
|
+
document.addEventListener('DOMContentLoaded', initFileUpload);
|
|
41
|
+
} else {
|
|
42
|
+
initFileUpload();
|
|
43
|
+
}
|
|
44
|
+
</script>
|
|
45
|
+
{% endblock %}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{% extends 'layout.html' %}
|
|
2
|
+
|
|
3
|
+
{% from "govuk/components/error-summary/macro.njk" import govukErrorSummary %}
|
|
4
|
+
{% from "partials/components.html" import componentList with context %}
|
|
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 errors %}
|
|
14
|
+
{{ govukErrorSummary({
|
|
15
|
+
titleText: "There is a problem",
|
|
16
|
+
errorList: checkErrorTemplates(errors)
|
|
17
|
+
}) }}
|
|
18
|
+
{% endif %}
|
|
19
|
+
|
|
20
|
+
{% if hasMissingNotificationEmail %}
|
|
21
|
+
{% include "partials/warn-missing-notification-email.html" %}
|
|
22
|
+
{% endif %}
|
|
23
|
+
|
|
24
|
+
{% include "partials/heading.html" %}
|
|
25
|
+
|
|
26
|
+
{% block form %}
|
|
27
|
+
{% if page.allowContinue %}
|
|
28
|
+
{% include "partials/form.html" %}
|
|
29
|
+
{% else %}
|
|
30
|
+
{{ componentList(components) }}
|
|
31
|
+
{% endif %}
|
|
32
|
+
{% endblock %}
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
|
|
36
|
+
{% if config.cdpEnvironment == 'local' and context | length and not context.isForceAccess %}
|
|
37
|
+
{% include "partials/debug.html" %}
|
|
38
|
+
{% endif %}
|
|
39
|
+
{% endblock %}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{% extends "layout.html" %}
|
|
2
|
+
|
|
3
|
+
{% from "govuk/components/error-summary/macro.njk" import govukErrorSummary %}
|
|
4
|
+
{% from "govuk/components/button/macro.njk" import govukButton %}
|
|
5
|
+
{% from "govuk/components/radios/macro.njk" import govukRadios %}
|
|
6
|
+
|
|
7
|
+
{% block content %}
|
|
8
|
+
<div class="govuk-grid-row">
|
|
9
|
+
<div class="govuk-grid-column-two-thirds">
|
|
10
|
+
{% if previewMode %}
|
|
11
|
+
{% include "partials/preview-banner.html" %}
|
|
12
|
+
{% endif %}
|
|
13
|
+
|
|
14
|
+
{% if errors %}
|
|
15
|
+
{{ govukErrorSummary({
|
|
16
|
+
titleText: "There is a problem",
|
|
17
|
+
errorList: errors
|
|
18
|
+
}) }}
|
|
19
|
+
{% endif %}
|
|
20
|
+
|
|
21
|
+
{% include "partials/heading.html" %}
|
|
22
|
+
|
|
23
|
+
{% if confirmation %}
|
|
24
|
+
<p class="govuk-body govuk-!-margin-bottom-6">
|
|
25
|
+
{{ confirmation.html | safe if confirmation.html else confirmation.text }}
|
|
26
|
+
</p>
|
|
27
|
+
{% endif %}
|
|
28
|
+
|
|
29
|
+
<form method="post" novalidate>
|
|
30
|
+
<input type="hidden" name="crumb" value="{{ crumb }}">
|
|
31
|
+
<input type="hidden" name="action" value="delete">
|
|
32
|
+
|
|
33
|
+
<div class="govuk-button-group">
|
|
34
|
+
{{ govukButton({
|
|
35
|
+
text: buttonConfirm.text,
|
|
36
|
+
html: buttonConfirm.html,
|
|
37
|
+
name: "confirm",
|
|
38
|
+
value: "true",
|
|
39
|
+
classes: "govuk-button--warning",
|
|
40
|
+
preventDoubleClick: true
|
|
41
|
+
}) }}
|
|
42
|
+
|
|
43
|
+
{{ govukButton({
|
|
44
|
+
text: buttonCancel.text,
|
|
45
|
+
html: buttonCancel.html,
|
|
46
|
+
classes: "govuk-button--secondary"
|
|
47
|
+
}) }}
|
|
48
|
+
</div>
|
|
49
|
+
</form>
|
|
50
|
+
</div>
|
|
51
|
+
</div>
|
|
52
|
+
|
|
53
|
+
{% if config.cdpEnvironment == 'local' and context | length and not context.isForceAccess %}
|
|
54
|
+
{% include "partials/debug.html" %}
|
|
55
|
+
{% endif %}
|
|
56
|
+
{% 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,44 @@
|
|
|
1
|
+
{% from "govuk/components/details/macro.njk" import govukDetails %}
|
|
2
|
+
{% from "components/debug/macro.njk" import appDebug -%}
|
|
3
|
+
|
|
4
|
+
{%- set debugHtml %}
|
|
5
|
+
<h2 class="govuk-heading-m">
|
|
6
|
+
Pages walked
|
|
7
|
+
</h2>
|
|
8
|
+
|
|
9
|
+
{% for question in context.relevantPages %}
|
|
10
|
+
<h3 class="govuk-heading-s govuk-!-margin-bottom-2">
|
|
11
|
+
{% if question.section %}
|
|
12
|
+
<span class="govuk-caption-m">{{ question.section.title }}</span>
|
|
13
|
+
{% endif -%}
|
|
14
|
+
{{ question.title }}
|
|
15
|
+
</h3>
|
|
16
|
+
|
|
17
|
+
{% if question.viewName !== "summary" %}
|
|
18
|
+
<p class="govuk-body">
|
|
19
|
+
<a class="govuk-link--no-visited-state" href="{{ question.href }}">
|
|
20
|
+
Edit answer <span class="govuk-visually-hidden">for {{ question.title }}</span>
|
|
21
|
+
</a>
|
|
22
|
+
</p>
|
|
23
|
+
|
|
24
|
+
{{ appDebug({
|
|
25
|
+
content: question.getFormDataFromState(undefined, context.state)
|
|
26
|
+
}) }}
|
|
27
|
+
{% else %}
|
|
28
|
+
{{ appDebug({
|
|
29
|
+
content: context.relevantState
|
|
30
|
+
}) }}
|
|
31
|
+
{% endif %}
|
|
32
|
+
{% endfor %}
|
|
33
|
+
{% endset -%}
|
|
34
|
+
|
|
35
|
+
<div class="govuk-grid-row">
|
|
36
|
+
<div class="govuk-grid-column-full">
|
|
37
|
+
<hr class="govuk-section-break govuk-section-break--xl govuk-section-break--visible">
|
|
38
|
+
|
|
39
|
+
{{ govukDetails({
|
|
40
|
+
summaryText: "Form context",
|
|
41
|
+
html: debugHtml | safe
|
|
42
|
+
}) }}
|
|
43
|
+
</div>
|
|
44
|
+
</div>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{% from "govuk/components/button/macro.njk" import govukButton %}
|
|
2
|
+
{% from "govuk/components/summary-list/macro.njk" import govukSummaryList -%}
|
|
3
|
+
|
|
4
|
+
<form method="post" novalidate>
|
|
5
|
+
<input type="hidden" name="crumb" value="{{ crumb }}">
|
|
6
|
+
<input type="hidden" name="action" value="validate">
|
|
7
|
+
|
|
8
|
+
{{ componentList(components) }}
|
|
9
|
+
|
|
10
|
+
{{ govukButton({
|
|
11
|
+
text: "Start now" if isStartPage else "Continue",
|
|
12
|
+
isStartButton: isStartPage,
|
|
13
|
+
preventDoubleClick: true
|
|
14
|
+
}) }}
|
|
15
|
+
</form>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{% if sectionTitle and (sectionTitle !== pageTitle) or itemTitle %}
|
|
2
|
+
<h2 class="govuk-caption-l govuk-!-margin-top-0" id="section-title">
|
|
3
|
+
{% if sectionTitle and itemTitle %}
|
|
4
|
+
{{- sectionTitle }}: {{ evaluate(itemTitle) -}}
|
|
5
|
+
{% elif not sectionTitle %}
|
|
6
|
+
{{- evaluate(itemTitle) -}}
|
|
7
|
+
{% else %}
|
|
8
|
+
{{- sectionTitle -}}
|
|
9
|
+
{% endif %}
|
|
10
|
+
</h2>
|
|
11
|
+
{% endif %}
|
|
12
|
+
{% if showTitle %}
|
|
13
|
+
<h1 class="govuk-heading-l">
|
|
14
|
+
{{ evaluate(pageTitle) }}
|
|
15
|
+
</h1>
|
|
16
|
+
{% endif %}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{% from "govuk/components/notification-banner/macro.njk" import govukNotificationBanner -%}
|
|
2
|
+
|
|
3
|
+
{% set hasPreviousPages = context.relevantPages | length > 1 -%}
|
|
4
|
+
|
|
5
|
+
{%- macro _closeLink() -%}
|
|
6
|
+
<p class="govuk-notification-banner__heading govuk-!-margin-top-1 js-preview-banner-close" hidden>
|
|
7
|
+
<a href="{{ config.designerUrl }}/library/{{ slug }}/editor" class="govuk-link--no-visited-state">Go back to the editor</a>
|
|
8
|
+
</p>
|
|
9
|
+
{%- endmacro -%}
|
|
10
|
+
|
|
11
|
+
{% call govukNotificationBanner() %}
|
|
12
|
+
{% if not context.isForceAccess %}
|
|
13
|
+
<p class="govuk-notification-banner__heading govuk-!-margin-bottom-0">
|
|
14
|
+
This is a preview of a {{ previewMode }} form. Do not enter personal information.
|
|
15
|
+
</p>
|
|
16
|
+
|
|
17
|
+
{{ _closeLink() }}
|
|
18
|
+
{% else %}
|
|
19
|
+
<p class="govuk-notification-banner__heading govuk-!-margin-bottom-0">
|
|
20
|
+
This is a preview of a {{ previewMode }} form page you are editing.
|
|
21
|
+
</p>
|
|
22
|
+
|
|
23
|
+
{{ _closeLink() }}
|
|
24
|
+
|
|
25
|
+
{% if hasPreviousPages %}
|
|
26
|
+
<p class="govuk-body govuk-!-margin-top-2">
|
|
27
|
+
It depends on answers from earlier pages in the form. In the live
|
|
28
|
+
version, users will need to complete those questions first.
|
|
29
|
+
</p>
|
|
30
|
+
{% endif %}
|
|
31
|
+
{% endif %}
|
|
32
|
+
{% endcall %}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { FormStatus } from '~/src/server/routes/types.js'
|
|
2
|
+
import { renderView } from '~/test/helpers/component-helpers.js'
|
|
3
|
+
|
|
4
|
+
describe('Preview banner partial', () => {
|
|
5
|
+
describe.each([
|
|
6
|
+
{
|
|
7
|
+
status: FormStatus.Draft
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
status: FormStatus.Live
|
|
11
|
+
}
|
|
12
|
+
])('Status: $status', ({ status }) => {
|
|
13
|
+
let $component = /** @type {HTMLElement | null} */ (null)
|
|
14
|
+
let $paragraphs = /** @type {HTMLElement[]} */ ([])
|
|
15
|
+
|
|
16
|
+
describe('Form preview', () => {
|
|
17
|
+
beforeEach(() => {
|
|
18
|
+
const { container } = renderView('partials/preview-banner.html', {
|
|
19
|
+
context: {
|
|
20
|
+
previewMode: status,
|
|
21
|
+
context: {
|
|
22
|
+
isForceAccess: false,
|
|
23
|
+
relevantPages: [{ title: 'Page 1' }]
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
$component = container.getByRole('region')
|
|
29
|
+
$paragraphs = container.getAllByRole('paragraph')
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
it('should render contents', () => {
|
|
33
|
+
expect($component).toBeInTheDocument()
|
|
34
|
+
expect($component).toContainElement($paragraphs[0])
|
|
35
|
+
expect($component).toHaveClass('govuk-notification-banner')
|
|
36
|
+
|
|
37
|
+
expect($paragraphs).toHaveLength(1)
|
|
38
|
+
expect($paragraphs[0]).toHaveClass('govuk-notification-banner__heading')
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
it('should have accessible name', () => {
|
|
42
|
+
expect($component).toHaveAccessibleName('Important')
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
it('should have text content', () => {
|
|
46
|
+
expect($paragraphs[0]).toHaveTextContent(
|
|
47
|
+
`This is a preview of a ${status} form. Do not enter personal information.`
|
|
48
|
+
)
|
|
49
|
+
})
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
describe('Preview URL direct access', () => {
|
|
53
|
+
beforeEach(() => {
|
|
54
|
+
const { container } = renderView('partials/preview-banner.html', {
|
|
55
|
+
context: {
|
|
56
|
+
previewMode: status,
|
|
57
|
+
context: {
|
|
58
|
+
isForceAccess: true,
|
|
59
|
+
relevantPages: [{ title: 'Page 1' }]
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
$component = container.getByRole('region')
|
|
65
|
+
$paragraphs = container.getAllByRole('paragraph')
|
|
66
|
+
})
|
|
67
|
+
|
|
68
|
+
it('should have text content', () => {
|
|
69
|
+
expect($paragraphs[0]).toHaveTextContent(
|
|
70
|
+
`This is a preview of a ${status} form page you are editing.`
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
expect($paragraphs[1]).toBeUndefined()
|
|
74
|
+
})
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
describe('Preview URL direct access (with previous pages)', () => {
|
|
78
|
+
beforeEach(() => {
|
|
79
|
+
const { container } = renderView('partials/preview-banner.html', {
|
|
80
|
+
context: {
|
|
81
|
+
previewMode: status,
|
|
82
|
+
context: {
|
|
83
|
+
isForceAccess: true,
|
|
84
|
+
relevantPages: [
|
|
85
|
+
{ title: 'Page 1' },
|
|
86
|
+
{ title: 'Page 2' },
|
|
87
|
+
{ title: 'Page 3' }
|
|
88
|
+
]
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
$component = container.getByRole('region')
|
|
94
|
+
$paragraphs = container.getAllByRole('paragraph')
|
|
95
|
+
})
|
|
96
|
+
|
|
97
|
+
it('should render contents', () => {
|
|
98
|
+
expect($component).toBeInTheDocument()
|
|
99
|
+
expect($component).toContainElement($paragraphs[0])
|
|
100
|
+
expect($component).toHaveClass('govuk-notification-banner')
|
|
101
|
+
|
|
102
|
+
expect($paragraphs).toHaveLength(2)
|
|
103
|
+
expect($paragraphs[0]).toHaveClass('govuk-notification-banner__heading')
|
|
104
|
+
expect($paragraphs[1]).toHaveClass('govuk-body')
|
|
105
|
+
})
|
|
106
|
+
|
|
107
|
+
it('should have accessible name', () => {
|
|
108
|
+
expect($component).toHaveAccessibleName('Important')
|
|
109
|
+
})
|
|
110
|
+
|
|
111
|
+
it('should have text content', () => {
|
|
112
|
+
expect($paragraphs[0]).toHaveTextContent(
|
|
113
|
+
`This is a preview of a ${status} form page you are editing.`
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
expect($paragraphs[1]).toHaveTextContent(
|
|
117
|
+
'It depends on answers from earlier pages in the form. In the live version, users will need to complete those questions first.'
|
|
118
|
+
)
|
|
119
|
+
})
|
|
120
|
+
})
|
|
121
|
+
})
|
|
122
|
+
})
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{% from "govuk/components/warning-text/macro.njk" import govukWarningText %}
|
|
2
|
+
|
|
3
|
+
{% set html %}
|
|
4
|
+
If you want to receive a test email, <a target="_blank" rel="noopener noreferrer" class="govuk-link" href="{{ config.designerUrl }}/library/{{ slug }}/edit/notification-email">enter the email address (opens in new tab)</a> you want form submissions to go to.
|
|
5
|
+
{% endset %}
|
|
6
|
+
|
|
7
|
+
{{ govukWarningText({
|
|
8
|
+
html: html,
|
|
9
|
+
iconFallbackText: "Warning"
|
|
10
|
+
}) }}
|