govuk_publishing_components 24.9.4 → 24.11.0
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.
- checksums.yaml +4 -4
- data/app/assets/javascripts/govuk_publishing_components/analytics/pii.js +1 -1
- data/app/assets/javascripts/govuk_publishing_components/analytics/scroll-tracker.js +6 -248
- data/app/assets/javascripts/govuk_publishing_components/components/accordion.js +2 -3
- data/app/assets/javascripts/govuk_publishing_components/components/cookie-banner.js +1 -0
- data/app/assets/javascripts/govuk_publishing_components/components/feedback.js +142 -104
- data/app/assets/javascripts/govuk_publishing_components/components/reorderable-list.js +1 -1
- data/app/assets/javascripts/govuk_publishing_components/components/show-password.js +12 -0
- data/app/assets/javascripts/govuk_publishing_components/components/step-by-step-nav.js +2 -2
- data/app/assets/javascripts/govuk_publishing_components/lib/trigger-event.js +18 -0
- data/app/assets/stylesheets/govuk_publishing_components/_all_components_print.scss +0 -11
- data/app/assets/stylesheets/govuk_publishing_components/components/_accordion.scss +34 -34
- data/app/assets/stylesheets/govuk_publishing_components/components/_govspeak.scss +1 -0
- data/app/assets/stylesheets/govuk_publishing_components/components/_metadata.scss +15 -18
- data/app/assets/stylesheets/govuk_publishing_components/components/_notice.scss +4 -2
- data/app/assets/stylesheets/govuk_publishing_components/components/_search.scss +4 -4
- data/app/assets/stylesheets/govuk_publishing_components/components/_step-by-step-nav.scss +20 -20
- data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_advisory.scss +27 -24
- data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_attachment.scss +1 -1
- data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_button.scss +1 -0
- data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_call-to-action.scss +1 -0
- data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_charts.scss +1 -0
- data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_contact.scss +1 -0
- data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_example.scss +1 -0
- data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_footnotes.scss +1 -0
- data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_form-download.scss +19 -16
- data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_fraction.scss +1 -0
- data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_highlight-answer.scss +30 -27
- data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_images.scss +1 -0
- data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_information-callout.scss +1 -0
- data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_legislative-list.scss +1 -0
- data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_place.scss +26 -21
- data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_stat-headline.scss +1 -0
- data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_steps.scss +19 -16
- data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_summary.scss +21 -18
- data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_tables.scss +1 -0
- data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_typography.scss +1 -0
- data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_warning-callout.scss +1 -0
- data/app/assets/stylesheets/govuk_publishing_components/components/helpers/_px-to-em.scss +2 -0
- data/app/assets/stylesheets/govuk_publishing_components/components/print/_attachment.scss +2 -3
- data/app/assets/stylesheets/govuk_publishing_components/components/print/_back-link.scss +2 -3
- data/app/assets/stylesheets/govuk_publishing_components/components/print/_button.scss +0 -4
- data/app/assets/stylesheets/govuk_publishing_components/components/print/_feedback.scss +2 -3
- data/app/assets/stylesheets/govuk_publishing_components/components/print/_layout-footer.scss +2 -6
- data/app/assets/stylesheets/govuk_publishing_components/components/print/_layout-header.scss +2 -3
- data/app/assets/stylesheets/govuk_publishing_components/components/print/_metadata.scss +2 -6
- data/app/assets/stylesheets/govuk_publishing_components/components/print/_search.scss +2 -3
- data/app/assets/stylesheets/govuk_publishing_components/components/print/_share-links.scss +2 -3
- data/app/assets/stylesheets/govuk_publishing_components/components/print/_skip-link.scss +2 -3
- data/app/assets/stylesheets/govuk_publishing_components/components/print/_step-by-step-nav-header.scss +0 -4
- data/app/assets/stylesheets/govuk_publishing_components/components/print/_subscription-links.scss +2 -3
- data/app/assets/stylesheets/govuk_publishing_components/components/print/_translation-nav.scss +2 -3
- data/app/views/govuk_publishing_components/components/_attachment.html.erb +1 -1
- data/app/views/govuk_publishing_components/components/_back_link.html.erb +1 -1
- data/app/views/govuk_publishing_components/components/_button.html.erb +1 -1
- data/app/views/govuk_publishing_components/components/_feedback.html.erb +1 -1
- data/app/views/govuk_publishing_components/components/_government_navigation.html.erb +7 -7
- data/app/views/govuk_publishing_components/components/_layout_footer.html.erb +2 -2
- data/app/views/govuk_publishing_components/components/_layout_header.html.erb +1 -1
- data/app/views/govuk_publishing_components/components/_machine_readable_metadata.html.erb +1 -1
- data/app/views/govuk_publishing_components/components/_metadata.html.erb +9 -8
- data/app/views/govuk_publishing_components/components/_notice.html.erb +1 -1
- data/app/views/govuk_publishing_components/components/_phase_banner.html.erb +1 -5
- data/app/views/govuk_publishing_components/components/_previous_and_next_navigation.html.erb +1 -1
- data/app/views/govuk_publishing_components/components/_print_link.html.erb +1 -1
- data/app/views/govuk_publishing_components/components/_radio.html.erb +6 -11
- data/app/views/govuk_publishing_components/components/_search.html.erb +1 -1
- data/app/views/govuk_publishing_components/components/_share_links.html.erb +1 -1
- data/app/views/govuk_publishing_components/components/_show_password.html.erb +2 -0
- data/app/views/govuk_publishing_components/components/_skip_link.html.erb +1 -1
- data/app/views/govuk_publishing_components/components/_step_by_step_nav.html.erb +6 -6
- data/app/views/govuk_publishing_components/components/_step_by_step_nav_related.html.erb +1 -1
- data/app/views/govuk_publishing_components/components/_subscription_links.html.erb +2 -2
- data/app/views/govuk_publishing_components/components/_success_alert.html.erb +1 -1
- data/app/views/govuk_publishing_components/components/_translation_nav.html.erb +1 -1
- data/app/views/govuk_publishing_components/components/docs/feedback.yml +2 -0
- data/app/views/govuk_publishing_components/components/docs/phase_banner.yml +2 -2
- data/app/views/govuk_publishing_components/components/docs/show_password.yml +10 -0
- data/app/views/govuk_publishing_components/components/layout_header/_navigation_items.html.erb +2 -2
- data/app/views/govuk_publishing_components/components/metadata/_sentence.html.erb +4 -4
- data/app/views/govuk_publishing_components/components/related_navigation/_section.html.erb +2 -2
- data/config/locales/ar.yml +123 -0
- data/config/locales/az.yml +123 -0
- data/config/locales/be.yml +123 -0
- data/config/locales/bg.yml +123 -0
- data/config/locales/bn.yml +123 -0
- data/config/locales/cs.yml +123 -0
- data/config/locales/cy.yml +115 -6
- data/config/locales/da.yml +123 -0
- data/config/locales/de.yml +123 -0
- data/config/locales/dr.yml +123 -0
- data/config/locales/el.yml +123 -0
- data/config/locales/en.yml +111 -103
- data/config/locales/es-419.yml +123 -0
- data/config/locales/es.yml +123 -0
- data/config/locales/et.yml +120 -0
- data/config/locales/fa.yml +123 -0
- data/config/locales/fi.yml +123 -0
- data/config/locales/fr.yml +120 -0
- data/config/locales/gd.yml +123 -0
- data/config/locales/gu.yml +123 -0
- data/config/locales/he.yml +123 -0
- data/config/locales/hi.yml +123 -0
- data/config/locales/hr.yml +123 -0
- data/config/locales/hu.yml +123 -0
- data/config/locales/hy.yml +123 -0
- data/config/locales/id.yml +123 -0
- data/config/locales/is.yml +123 -0
- data/config/locales/it.yml +123 -0
- data/config/locales/ja.yml +123 -0
- data/config/locales/ka.yml +123 -0
- data/config/locales/kk.yml +123 -0
- data/config/locales/ko.yml +123 -0
- data/config/locales/lt.yml +123 -0
- data/config/locales/lv.yml +123 -0
- data/config/locales/ms.yml +123 -0
- data/config/locales/mt.yml +123 -0
- data/config/locales/nl.yml +123 -0
- data/config/locales/no.yml +124 -1
- data/config/locales/pa-pk.yml +123 -0
- data/config/locales/pa.yml +123 -0
- data/config/locales/pl.yml +123 -0
- data/config/locales/ps.yml +123 -0
- data/config/locales/pt.yml +123 -0
- data/config/locales/ro.yml +123 -0
- data/config/locales/ru.yml +123 -0
- data/config/locales/si.yml +123 -0
- data/config/locales/sk.yml +123 -0
- data/config/locales/sl.yml +123 -0
- data/config/locales/so.yml +123 -0
- data/config/locales/sq.yml +123 -0
- data/config/locales/sr.yml +123 -0
- data/config/locales/sv.yml +123 -0
- data/config/locales/sw.yml +123 -0
- data/config/locales/ta.yml +123 -0
- data/config/locales/th.yml +123 -0
- data/config/locales/tk.yml +123 -0
- data/config/locales/tr.yml +123 -0
- data/config/locales/uk.yml +123 -0
- data/config/locales/ur.yml +123 -0
- data/config/locales/uz.yml +123 -0
- data/config/locales/vi.yml +123 -0
- data/config/locales/zh-hk.yml +123 -0
- data/config/locales/zh-tw.yml +123 -0
- data/config/locales/zh.yml +123 -0
- data/lib/govuk_publishing_components/presenters/breadcrumb_selector.rb +5 -0
- data/lib/govuk_publishing_components/presenters/content_breadcrumbs_based_on_taxons.rb +1 -2
- data/lib/govuk_publishing_components/presenters/content_item.rb +4 -0
- data/lib/govuk_publishing_components/presenters/contextual_navigation.rb +4 -0
- data/lib/govuk_publishing_components/presenters/machine_readable/page.rb +4 -0
- data/lib/govuk_publishing_components/version.rb +1 -1
- data/node_modules/govuk-frontend/govuk/components/accordion/_index.scss +7 -16
- data/node_modules/govuk-frontend/govuk/components/back-link/_index.scss +4 -15
- data/node_modules/govuk-frontend/govuk/components/character-count/macro-options.json +1 -1
- data/node_modules/govuk-frontend/govuk/components/checkboxes/macro-options.json +3 -3
- data/node_modules/govuk-frontend/govuk/components/cookie-banner/README.md +15 -0
- data/node_modules/govuk-frontend/govuk/components/cookie-banner/fixtures.json +40 -22
- data/node_modules/govuk-frontend/govuk/components/cookie-banner/macro-options.json +6 -6
- data/node_modules/govuk-frontend/govuk/components/cookie-banner/template.njk +15 -5
- data/node_modules/govuk-frontend/govuk/components/date-input/macro-options.json +2 -2
- data/node_modules/govuk-frontend/govuk/components/details/_index.scss +5 -1
- data/node_modules/govuk-frontend/govuk/components/file-upload/_index.scss +13 -14
- data/node_modules/govuk-frontend/govuk/components/file-upload/macro-options.json +1 -1
- data/node_modules/govuk-frontend/govuk/components/footer/_index.scss +14 -19
- data/node_modules/govuk-frontend/govuk/components/header/_index.scss +39 -21
- data/node_modules/govuk-frontend/govuk/components/input/macro-options.json +1 -1
- data/node_modules/govuk-frontend/govuk/components/phase-banner/_index.scss +1 -1
- data/node_modules/govuk-frontend/govuk/components/radios/macro-options.json +3 -3
- data/node_modules/govuk-frontend/govuk/components/select/macro-options.json +1 -1
- data/node_modules/govuk-frontend/govuk/components/skip-link/_index.scss +1 -1
- data/node_modules/govuk-frontend/govuk/components/tabs/_index.scss +1 -6
- data/node_modules/govuk-frontend/govuk/components/textarea/macro-options.json +1 -1
- data/node_modules/govuk-frontend/govuk/components/warning-text/_index.scss +10 -0
- data/node_modules/govuk-frontend/govuk/core/_links.scss +8 -0
- data/node_modules/govuk-frontend/govuk/helpers/_links.scss +153 -38
- data/node_modules/govuk-frontend/govuk/settings/_all.scss +2 -0
- data/node_modules/govuk-frontend/govuk/settings/_links.scss +62 -0
- data/node_modules/govuk-frontend/package.json +1 -1
- metadata +20 -4
- data/app/assets/javascripts/component_guide/visual-regression.js +0 -71
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 78e0df66823b7cc209d7d062f04e17ce65954ee5c06a965fe18912240cc687fd
|
|
4
|
+
data.tar.gz: b527515c2c9211e77a392c8891bd9ca476782681a63fd05e43d9c0aa2f3b8e7c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a458245e3e6f8f5a5c3b6fb5e3c8eabb3ea0b74b201dde838f2b8a600ea0b4709ae5c01dbadd1d3b55148d1cc95d38da4dc2843805d46daa09fcb78e417a2f46
|
|
7
|
+
data.tar.gz: 0b63b8847309278957552d167763f3fa26077a7406a370d9e3edebbf5173c6978c30c75990654a511a91f99d00c2b64ad4d08fc72e7ff71cfbd9b163d8c4f3cf
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
var GOVUK = global.GOVUK || {}
|
|
7
7
|
var EMAIL_PATTERN = /[^\s=/?&]+(?:@|%40)[^\s=/?&]+/g
|
|
8
|
-
var POSTCODE_PATTERN =
|
|
8
|
+
var POSTCODE_PATTERN = /\b[A-PR-UWYZ][A-HJ-Z]?[0-9][0-9A-HJKMNPR-Y]?(?:[\s+]|%20)*[0-9](?!refund)[ABD-HJLNPQ-Z]{2,3}\b/gi
|
|
9
9
|
var DATE_PATTERN = /\d{4}(-?)\d{2}(-?)\d{2}/g
|
|
10
10
|
var ESCAPE_REGEX_PATTERN = /[|\\{}()[\]^$+*?.]/g
|
|
11
11
|
|
|
@@ -13,20 +13,6 @@
|
|
|
13
13
|
['Percent', 80],
|
|
14
14
|
['Percent', 100]
|
|
15
15
|
],
|
|
16
|
-
'/government/publications/coronavirus-outbreak-faqs-what-you-can-and-cant-do/coronavirus-outbreak-faqs-what-you-can-and-cant-do': [
|
|
17
|
-
['Percent', 20],
|
|
18
|
-
['Percent', 40],
|
|
19
|
-
['Percent', 60],
|
|
20
|
-
['Percent', 80],
|
|
21
|
-
['Percent', 100]
|
|
22
|
-
],
|
|
23
|
-
'/government/publications/coronavirus-covid-19-online-education-resources/coronavirus-covid-19-list-of-online-education-resources-for-home-education': [
|
|
24
|
-
['Percent', 20],
|
|
25
|
-
['Percent', 40],
|
|
26
|
-
['Percent', 60],
|
|
27
|
-
['Percent', 80],
|
|
28
|
-
['Percent', 100]
|
|
29
|
-
],
|
|
30
16
|
'/guidance/coronavirus-covid-19-information-for-the-public': [
|
|
31
17
|
['Percent', 20],
|
|
32
18
|
['Percent', 40],
|
|
@@ -34,28 +20,6 @@
|
|
|
34
20
|
['Percent', 80],
|
|
35
21
|
['Percent', 100]
|
|
36
22
|
],
|
|
37
|
-
'/guidance/saving-for-retirement-if-youre-aged-16-to-50': [
|
|
38
|
-
['Heading', 'Keep track of your State Pension'],
|
|
39
|
-
['Heading', 'Consider ways to improve your State Pension'],
|
|
40
|
-
['Heading', 'Personal and stakeholder pensions']
|
|
41
|
-
],
|
|
42
|
-
'/guidance/planning-for-retirement-if-youre-aged-50-or-over': [
|
|
43
|
-
['Heading', 'Find out your State Pension age'],
|
|
44
|
-
['Heading', 'Consider ways to improve your State Pension'],
|
|
45
|
-
['Heading', 'Workplace, personal and stakeholder pensions'],
|
|
46
|
-
['Heading', 'Personal and stakeholder pensions']
|
|
47
|
-
],
|
|
48
|
-
'/guidance/retirement-planning-for-current-pensioners': [
|
|
49
|
-
['Heading', 'If you reached State Pension age before 6 April 2016'],
|
|
50
|
-
['Heading', 'Other ways to increase your income in retirement'],
|
|
51
|
-
['Heading', 'Further support in retirement'],
|
|
52
|
-
['Heading', 'Winter Fuel Payments']
|
|
53
|
-
],
|
|
54
|
-
'/government/collections/disability-confident-campaign': [
|
|
55
|
-
['Heading', 'Become a Disability Confident employer'],
|
|
56
|
-
['Heading', 'Aims and objectives'],
|
|
57
|
-
['Heading', 'Inclusive communication']
|
|
58
|
-
],
|
|
59
23
|
'/government/publications/the-essential-trustee-what-you-need-to-know-cc3/the-essential-trustee-what-you-need-to-know-what-you-need-to-do': [
|
|
60
24
|
['Heading', '1. About this guidance'],
|
|
61
25
|
['Heading', '2. Trustees’ duties at a glance'],
|
|
@@ -77,11 +41,6 @@
|
|
|
77
41
|
['Heading', 'When you can claim Universal Credit'],
|
|
78
42
|
['Heading', 'More detailed advice']
|
|
79
43
|
],
|
|
80
|
-
'/openingupwork': [
|
|
81
|
-
['Heading', 'How Universal Credit makes work pay'],
|
|
82
|
-
['Heading', 'When you can claim Universal Credit'],
|
|
83
|
-
['Heading', 'Help and advice']
|
|
84
|
-
],
|
|
85
44
|
'/government/publications/spring-budget-2017-documents/spring-budget-2017': [
|
|
86
45
|
['Heading', '1. Executive summary'],
|
|
87
46
|
['Heading', '2. Economic context and public finances'],
|
|
@@ -92,12 +51,6 @@
|
|
|
92
51
|
['Heading', '7. Annex A: Financing'],
|
|
93
52
|
['Heading', '8. Annex B: Office for Budget Responsibility\'s Economic and fiscal outlook']
|
|
94
53
|
],
|
|
95
|
-
'/guidance/living-in-the-eu-prepare-for-brexit': [
|
|
96
|
-
['Heading', 'Travelling in the EU']
|
|
97
|
-
],
|
|
98
|
-
'/guidance/driving-in-the-eu-after-brexit-driving-licence-exchange': [
|
|
99
|
-
['Heading', 'Belgium']
|
|
100
|
-
],
|
|
101
54
|
'/settled-status-eu-citizens-families': [
|
|
102
55
|
['Heading', 'When you can apply']
|
|
103
56
|
],
|
|
@@ -110,21 +63,6 @@
|
|
|
110
63
|
'/guidance/foreign-travel-insurance': [
|
|
111
64
|
['Heading', 'What your travel insurance policy should cover']
|
|
112
65
|
],
|
|
113
|
-
'/guidance/passport-rules-for-travel-to-europe-after-brexit': [
|
|
114
|
-
['Heading', 'List of countries affected']
|
|
115
|
-
],
|
|
116
|
-
'/visit-europe-brexit': [
|
|
117
|
-
['Heading', 'Travel']
|
|
118
|
-
],
|
|
119
|
-
'/guidance/uk-nationals-in-the-eu-benefits-and-pensions-in-a-no-deal-scenario': [
|
|
120
|
-
['Heading', 'Pensions and benefits paid by an EEA state or Switzerland']
|
|
121
|
-
],
|
|
122
|
-
'/guidance/uk-students-in-the-eu-continuing-your-studies': [
|
|
123
|
-
['Heading', 'Check whether you’ll get financial help']
|
|
124
|
-
],
|
|
125
|
-
'/government/publications/cross-border-maintenance-cases-after-brexit-guidance-for-public/cross-border-maintenance-cases-after-brexit': [
|
|
126
|
-
['Heading', '2. New cases after Brexit']
|
|
127
|
-
],
|
|
128
66
|
'/guidance/social-security-contributions-for-uk-and-eu-workers-if-the-uk-leaves-the-eu-with-no-deal': [
|
|
129
67
|
['Heading', 'UK employers'],
|
|
130
68
|
['Heading', 'UK employees and self-employed']
|
|
@@ -132,57 +70,18 @@
|
|
|
132
70
|
'/guidance/student-finance-arrangements-in-a-no-deal-scenario': [
|
|
133
71
|
['Heading', 'Other overseas study placements']
|
|
134
72
|
],
|
|
135
|
-
'/guidance/advice-for-british-nationals-travelling-and-living-in-europe': [
|
|
136
|
-
['Heading', 'Travelling to the UK']
|
|
137
|
-
],
|
|
138
73
|
'/guidance/living-in-france': [
|
|
139
74
|
['Heading', 'Passports and travel']
|
|
140
75
|
],
|
|
141
76
|
'/family-permit': [
|
|
142
77
|
['Heading', 'EEA family permit']
|
|
143
78
|
],
|
|
144
|
-
'/guidance/european-temporary-leave-to-remain-in-the-uk': [
|
|
145
|
-
['Heading', 'Applying for European temporary leave to remain']
|
|
146
|
-
],
|
|
147
|
-
'/guidance/visiting-the-uk-after-brexit': [
|
|
148
|
-
['Heading', 'If the UK leaves the EU without a deal']
|
|
149
|
-
],
|
|
150
79
|
'/guidance/healthcare-for-eu-and-efta-citizens-visiting-the-uk': [
|
|
151
80
|
['Heading', 'Travel insurance']
|
|
152
81
|
],
|
|
153
|
-
'/guidance/qualified-teacher-status-qts': [
|
|
154
|
-
['Heading', 'Teachers recognised in the EEA or Switzerland']
|
|
155
|
-
],
|
|
156
82
|
'/guidance/driving-in-the-eu-after-brexit': [
|
|
157
83
|
['Heading', 'GB stickers and number plates']
|
|
158
84
|
],
|
|
159
|
-
'/visit-europe-brexit#travel': [
|
|
160
|
-
['Heading', 'Compensation if your travel is disrupted']
|
|
161
|
-
],
|
|
162
|
-
'/apply-for-a-uk-residence-card': [
|
|
163
|
-
['Heading', 'Fees']
|
|
164
|
-
],
|
|
165
|
-
'/guidance/studying-in-the-european-union-after-brexit': [
|
|
166
|
-
['Heading', 'Applying for Erasmus+']
|
|
167
|
-
],
|
|
168
|
-
'/settled-status-eu-citizens-families/not-EU-EEA-Swiss-citizen': [
|
|
169
|
-
['Heading', 'If you’re a family member of an EU, EEA or Swiss citizen']
|
|
170
|
-
],
|
|
171
|
-
'/guidance/get-your-eea-qualification-recognised-in-the-uk-after-brexit': [
|
|
172
|
-
['Heading', 'Professionals already working in the UK']
|
|
173
|
-
],
|
|
174
|
-
'/guidance/visiting-the-uk-after-brexit#if-your-vehicle-is-not-insured-in-the-uk': [
|
|
175
|
-
['Heading', 'If your vehicle is not insured in the UK']
|
|
176
|
-
],
|
|
177
|
-
'/guidance/uk-residents-visiting-the-eueea-and-switzerland-healthcare': [
|
|
178
|
-
['Heading', 'European Health Insurance Cards (EHIC)']
|
|
179
|
-
],
|
|
180
|
-
'/guidance/pet-travel-to-europe-after-brexit': [
|
|
181
|
-
['Heading', 'Pet travel if there’s a no-deal Brexit']
|
|
182
|
-
],
|
|
183
|
-
'/guidance/driving-in-the-eu-after-brexit-international-driving-permits': [
|
|
184
|
-
['Heading', 'Check which type of IDP you need']
|
|
185
|
-
],
|
|
186
85
|
'/guidance/driving-in-the-eu-after-brexit#insurance-for-your-vehicle-caravan-or-trailer': [
|
|
187
86
|
['Heading', 'Trailer registration']
|
|
188
87
|
],
|
|
@@ -192,99 +91,27 @@
|
|
|
192
91
|
'/get-a-passport-urgently': [
|
|
193
92
|
['Heading', 'Ways to apply']
|
|
194
93
|
],
|
|
195
|
-
'/guidance/mobile-roaming-after-eu-exit': [
|
|
196
|
-
['Heading', 'If you live in Northern Ireland']
|
|
197
|
-
],
|
|
198
|
-
'/government/publications/mobile-roaming-after-eu-exit/mobile-roaming-if-theres-no-brexit-deal': [
|
|
199
|
-
['Heading', '1.2 If there’s no deal']
|
|
200
|
-
],
|
|
201
94
|
'/driving-abroad/international-driving-permit': [
|
|
202
95
|
['Heading', 'Check which IDP you need']
|
|
203
96
|
],
|
|
204
|
-
'/vehicle-insurance/driving-abroad': [
|
|
205
|
-
['Heading', 'Driving in other countries']
|
|
206
|
-
],
|
|
207
97
|
'/guidance/driving-in-the-eu-after-brexit#gb-stickers-and-number-plates': [
|
|
208
98
|
['Heading', 'GB stickers and number plates']
|
|
209
99
|
],
|
|
210
|
-
'/guidance/importing-and-exporting-plants-and-plant-products-if-theres-no-withdrawal-deal': [
|
|
211
|
-
['Heading', 'Movement of wood packaging material']
|
|
212
|
-
],
|
|
213
|
-
'/guidance/egg-marketing-standards-if-theres-a-no-deal-brexit': [
|
|
214
|
-
['Heading', 'Customs checks']
|
|
215
|
-
],
|
|
216
|
-
'/guidance/hatching-eggs-and-chicks-marketing-standards-when-the-uk-leaves-the-eu': [
|
|
217
|
-
['Heading', 'Customs checks']
|
|
218
|
-
],
|
|
219
|
-
'/guidance/poultry-meat-marketing-standards-when-the-uk-leaves-the-eu': [
|
|
220
|
-
['Heading', 'Marketing standards checks']
|
|
221
|
-
],
|
|
222
|
-
'/guidance/plant-variety-rights-and-marketing-plant-reproductive-material-if-the-uk-leaves-the-eu-without-a-deal': [
|
|
223
|
-
['Heading', 'Rules for applying for plant variety rights if there’s a no deal Brexit']
|
|
224
|
-
],
|
|
225
|
-
'/guidance/exporting-animals-animal-products-fish-and-fishery-products-if-the-uk-leaves-the-eu-with-no-deal': [
|
|
226
|
-
['Heading', 'Exports to non-EU countries (third countries) from the UK']
|
|
227
|
-
],
|
|
228
|
-
'/guidance/the-farming-sector-and-preparing-for-eu-exit': [
|
|
229
|
-
['Heading', 'Farm and rural payments: Basic Payment Scheme and Rural Development Programme for England']
|
|
230
|
-
],
|
|
231
|
-
'/guidance/protecting-food-and-drink-names-if-theres-no-brexit-deal': [
|
|
232
|
-
['Heading', 'New product applications']
|
|
233
|
-
],
|
|
234
|
-
'/guidance/trading-and-labelling-organic-food-if-theres-no-brexit-deal': [
|
|
235
|
-
['Heading', 'Exporting organic food to the EU']
|
|
236
|
-
],
|
|
237
|
-
'/guidance/hops-and-hops-products-marketing-standards-if-the-uk-leaves-the-eu-without-a-deal': [
|
|
238
|
-
['Heading', 'How to apply for an EU Attestation of Equivalence']
|
|
239
|
-
],
|
|
240
100
|
'/guidance/guidance-for-suppliers-of-cattle-sheep-and-goat-ear-tags': [
|
|
241
101
|
['Heading', 'Tagging information for livestock keepers']
|
|
242
102
|
],
|
|
243
|
-
'/government/publications/meeting-climate-change-requirements-if-theres-no-brexit-deal/meeting-climate-change-requirements-if-theres-no-brexit-deal': [
|
|
244
|
-
['Heading', 'Summary of actions']
|
|
245
|
-
],
|
|
246
|
-
'/guidance/food-labelling-changes-after-brexit': [
|
|
247
|
-
['Heading', 'Goods sold in the UK']
|
|
248
|
-
],
|
|
249
|
-
'/guidance/export-horses-and-ponies-special-rules': [
|
|
250
|
-
['Heading', 'Moving equines to the EU in a no-deal Brexit']
|
|
251
|
-
],
|
|
252
|
-
'/guidance/trading-and-moving-endangered-species-protected-by-cites-if-theres-no-withdrawal-deal': [
|
|
253
|
-
['Heading', 'Trading with the EU']
|
|
254
|
-
],
|
|
255
103
|
'/guidance/wine-trade-regulations': [
|
|
256
104
|
['Heading', 'Rules for transporting wine into the UK']
|
|
257
105
|
],
|
|
258
|
-
'/guidance/the-food-and-drink-sector-and-preparing-for-eu-exit': [
|
|
259
|
-
['Heading', 'Importing and exporting']
|
|
260
|
-
],
|
|
261
|
-
'/guidance/exporting-and-importing-fish-if-theres-no-brexit-deal': [
|
|
262
|
-
['Heading', 'Send fish to an EU border control post']
|
|
263
|
-
],
|
|
264
|
-
'/guidance/the-fisheries-sector-and-preparing-for-eu-exit': [
|
|
265
|
-
['Heading', 'Licensing arrangements']
|
|
266
|
-
],
|
|
267
|
-
'/guidance/import-fish-after-a-no-deal-brexit': [
|
|
268
|
-
['Heading', 'Direct landings into the UK']
|
|
269
|
-
],
|
|
270
106
|
'/guidance/the-chemicals-sector-and-preparing-for-eu-exit': [
|
|
271
107
|
['Heading', 'Energy and climate']
|
|
272
108
|
],
|
|
273
|
-
'/government/publications/trading-electricity-if-theres-no-brexit-deal/trading-electricity-if-theres-no-brexit-deal': [
|
|
274
|
-
['Heading', 'Summary of actions']
|
|
275
|
-
],
|
|
276
109
|
'/guidance/how-to-move-goods-between-or-through-common-transit-countries-including-the-eu': [
|
|
277
110
|
['Heading', 'Start moving your goods']
|
|
278
111
|
],
|
|
279
112
|
'/guidance/ecmt-international-road-haulage-permits': [
|
|
280
113
|
['Heading', 'Apply for permits']
|
|
281
114
|
],
|
|
282
|
-
'/guidance/transporting-goods-between-the-uk-and-eu-in-a-no-deal-brexit-guidance-for-hauliers': [
|
|
283
|
-
['Heading', 'Cross-border responsibilities when moving goods']
|
|
284
|
-
],
|
|
285
|
-
'/guidance/carry-out-international-road-haulage-after-brexit': [
|
|
286
|
-
['Heading', 'Vehicle and trailer insurance']
|
|
287
|
-
],
|
|
288
115
|
'/guidance/prepare-to-drive-in-the-eu-after-brexit-lorry-and-goods-vehicle-drivers': [
|
|
289
116
|
['Heading', 'Driver CPC for lorry drivers']
|
|
290
117
|
],
|
|
@@ -294,45 +121,18 @@
|
|
|
294
121
|
'/guidance/vehicle-type-approval-if-theres-no-brexit-deal': [
|
|
295
122
|
['Heading', 'Existing vehicle and component type-approvals']
|
|
296
123
|
],
|
|
297
|
-
'/guidance/hauliers-and-commercial-drivers-you-will-need-new-documents-to-transport-goods-into-the-eu-after-brexit': [
|
|
298
|
-
['Heading', 'Driver documents']
|
|
299
|
-
],
|
|
300
|
-
'/guidance/how-to-move-goods-through-roro-locations-in-a-no-deal-brexit-eu-to-uk-and-uk-to-eu': [
|
|
301
|
-
['Heading', 'EU to UK: pre-journey from EU to the UK']
|
|
302
|
-
],
|
|
303
124
|
'/guidance/the-retail-sector-and-preparing-for-eu-exit': [
|
|
304
125
|
['Heading', 'Importing and exporting']
|
|
305
126
|
],
|
|
306
127
|
'/guidance/the-consumer-goods-sector-and-preparing-for-eu-exit': [
|
|
307
128
|
['Heading', 'Importing and exporting']
|
|
308
129
|
],
|
|
309
|
-
'/guidance/textile-labelling-after-brexit': [
|
|
310
|
-
['Heading', 'Labelling requirements']
|
|
311
|
-
],
|
|
312
|
-
'/guidance/footwear-labelling-after-brexit': [
|
|
313
|
-
['Heading', 'Labelling requirements']
|
|
314
|
-
],
|
|
315
130
|
'/government/publications/banking-insurance-and-other-financial-services-if-theres-no-brexit-deal/banking-insurance-and-other-financial-services-if-theres-no-brexit-deal-information-for-financial-services-institutions': [
|
|
316
131
|
['Heading', '3. Action taken by the UK']
|
|
317
132
|
],
|
|
318
|
-
'/government/publications/eu-lawyers-in-the-uk-after-a-no-deal-brexit/eu-lawyers-in-the-uk-after-a-no-deal-brexit': [
|
|
319
|
-
['Heading', 'Lawyers with EU, Norway, Iceland or Liechtenstein qualifications and professional titles']
|
|
320
|
-
],
|
|
321
133
|
'/government/publications/further-guidance-note-on-the-regulation-of-medicines-medical-devices-and-clinical-trials-if-theres-no-brexit-deal/further-guidance-note-on-the-regulation-of-medicines-medical-devices-and-clinical-trials-if-theres-no-brexit-deal': [
|
|
322
134
|
['Heading', '1.4 Orphan medicines']
|
|
323
135
|
],
|
|
324
|
-
'/guidance/accounting-if-theres-no-brexit-deal': [
|
|
325
|
-
['Heading', 'UK public companies with an EEA listing']
|
|
326
|
-
],
|
|
327
|
-
'/guidance/broadcasting-and-video-on-demand-if-theres-no-brexit-deal': [
|
|
328
|
-
['Heading', 'Get local legal advice about your video on-demand services']
|
|
329
|
-
],
|
|
330
|
-
'/guidance/changes-to-copyright-law-after-brexit': [
|
|
331
|
-
['Heading', 'Artist’s resale right']
|
|
332
|
-
],
|
|
333
|
-
'/guidance/changes-to-eu-and-international-designs-and-trade-mark-protection-after-brexit': [
|
|
334
|
-
['Heading', 'Registered design']
|
|
335
|
-
],
|
|
336
136
|
'/guidance/check-temporary-rates-of-customs-duty-on-imports-after-eu-exit': [
|
|
337
137
|
['Heading', 'Tariff-rate quotas (TRQ)']
|
|
338
138
|
],
|
|
@@ -342,60 +142,15 @@
|
|
|
342
142
|
'/guidance/european-and-domestic-funding-after-brexit': [
|
|
343
143
|
['Heading', 'What you need to do']
|
|
344
144
|
],
|
|
345
|
-
'/guidance/exhaustion-of-ip-rights-and-parallel-trade-after-brexit': [
|
|
346
|
-
['Heading', 'Actions for IP rights holders']
|
|
347
|
-
],
|
|
348
|
-
'/guidance/exporting-nuclear-related-items-after-brexit': [
|
|
349
|
-
['Heading', 'Exporting dual-use items']
|
|
350
|
-
],
|
|
351
145
|
'/guidance/guidance-on-substantial-amendments-to-a-clinical-trial-if-the-uk-leaves-the-eu-with-no-deal': [
|
|
352
146
|
['Heading', 'Investigational medicinal product (IMP) certification and importation']
|
|
353
147
|
],
|
|
354
|
-
'/guidance/importing-and-exporting-waste-if-theres-no-brexit-deal': [
|
|
355
|
-
['Heading', 'Rules after the UK leaves the EU']
|
|
356
|
-
],
|
|
357
|
-
'/guidance/merger-review-and-anti-competitive-activity-after-brexit': [
|
|
358
|
-
['Heading', 'Mergers']
|
|
359
|
-
],
|
|
360
|
-
'/guidance/nis-regulations-what-uk-digital-service-providers-operating-in-the-eu-should-do-after-brexit': [
|
|
361
|
-
['Heading', 'How RDSPs are regulated in the UK']
|
|
362
|
-
],
|
|
363
|
-
'/guidance/placing-manufactured-goods-on-the-eu-internal-market-if-theres-no-deal': [
|
|
364
|
-
['Heading', 'Appointing an authorised representative or responsible person in the EU']
|
|
365
|
-
],
|
|
366
|
-
'/guidance/prepare-to-import-relevant-nuclear-materials-from-the-eu-after-brexit-licensing-requirements': [
|
|
367
|
-
['Heading', 'More information']
|
|
368
|
-
],
|
|
369
|
-
'/guidance/prepare-to-use-the-ukca-mark-after-brexit': [
|
|
370
|
-
['Heading', 'Check whether you will need to use the new UKCA marking']
|
|
371
|
-
],
|
|
372
|
-
'/guidance/prepare-to-work-and-operate-in-the-european-aviation-sector-after-brexit': [
|
|
373
|
-
['Heading', 'Requirements for aviation businesses operating in Europe after the UK leaves the EU']
|
|
374
|
-
],
|
|
375
|
-
'/guidance/public-sector-procurement-after-a-no-deal-brexit': [
|
|
376
|
-
['Heading', 'What will change for contracting authorities and entities']
|
|
377
|
-
],
|
|
378
|
-
'/guidance/satellites-and-space-programmes-after-brexit': [
|
|
379
|
-
['Heading', 'Copernicus']
|
|
380
|
-
],
|
|
381
|
-
'/guidance/shipping-radioactive-waste-and-spent-fuel-after-brexit': [
|
|
382
|
-
['Heading', 'After Brexit']
|
|
383
|
-
],
|
|
384
|
-
'/guidance/trading-timber-imports-and-exports-if-theres-no-brexit-deal': [
|
|
385
|
-
['Heading', 'Importing timber for the UK market']
|
|
386
|
-
],
|
|
387
|
-
'/guidance/what-you-need-to-move-goods-between-or-through-common-transit-countries-including-the-eu': [
|
|
388
|
-
['Heading', 'Getting a guarantee']
|
|
389
|
-
],
|
|
390
148
|
'/taking-goods-out-uk-temporarily/get-an-ata-carnet': [
|
|
391
149
|
['Heading', 'Using an ATA Carnet']
|
|
392
150
|
],
|
|
393
151
|
'/wood-packaging-import-export': [
|
|
394
152
|
['Heading', 'Export solid wood packaging']
|
|
395
153
|
],
|
|
396
|
-
'/government/publications/vat-for-businesses-if-theres-no-brexit-deal/vat-for-businesses-if-theres-no-brexit-deal': [
|
|
397
|
-
['Heading', 'UK businesses importing goods from the EU']
|
|
398
|
-
],
|
|
399
154
|
'/guidance/answers-to-the-most-common-topics-asked-about-by-the-public-for-the-coronavirus-press-conference': [
|
|
400
155
|
['Percent', 20],
|
|
401
156
|
['Percent', 40],
|
|
@@ -403,9 +158,6 @@
|
|
|
403
158
|
['Percent', 80],
|
|
404
159
|
['Percent', 100]
|
|
405
160
|
],
|
|
406
|
-
'/eubusiness': [
|
|
407
|
-
['Heading', 'Additional help and support']
|
|
408
|
-
],
|
|
409
161
|
'/coronavirus': [
|
|
410
162
|
['Percent', 20],
|
|
411
163
|
['Percent', 40],
|
|
@@ -440,6 +192,12 @@
|
|
|
440
192
|
['Percent', 60],
|
|
441
193
|
['Percent', 80],
|
|
442
194
|
['Percent', 100]
|
|
195
|
+
],
|
|
196
|
+
'/next-steps-for-your-business/results': [
|
|
197
|
+
['Heading', 'Things you need to do next'],
|
|
198
|
+
['Heading', 'Rules to follow'],
|
|
199
|
+
['Heading', 'Good to know'],
|
|
200
|
+
['Heading', 'Change your answers']
|
|
443
201
|
]
|
|
444
202
|
}
|
|
445
203
|
|
|
@@ -47,7 +47,7 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
|
|
|
47
47
|
this.initSectionHeaders()
|
|
48
48
|
|
|
49
49
|
// Feature flag for anchor tag navigation used on manuals
|
|
50
|
-
if (this.$module.getAttribute('data-anchor-navigation')) {
|
|
50
|
+
if (this.$module.getAttribute('data-anchor-navigation') === 'true') {
|
|
51
51
|
this.openByAnchorOnLoad()
|
|
52
52
|
this.addEventListenersForAnchors()
|
|
53
53
|
}
|
|
@@ -326,8 +326,7 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
|
|
|
326
326
|
// Adding an event listener to all anchor link a tags in an accordion is risky but we circumvent this risk partially by only being a layer of accordion behaviour instead of any sort of change to link behaviour
|
|
327
327
|
GemAccordion.prototype.addEventListenersForAnchors = function () {
|
|
328
328
|
var links = this.$module.querySelectorAll('.' + this.sectionInnerContent + ' a[href*="#"]')
|
|
329
|
-
|
|
330
|
-
links.forEach(function (link) {
|
|
329
|
+
nodeListForEach(links, function (link) {
|
|
331
330
|
if (link.pathname === window.location.pathname) {
|
|
332
331
|
link.addEventListener('click', this.openForAnchor.bind(this, link.hash.split('#')[1]))
|
|
333
332
|
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
/*
|
|
2
|
-
|
|
1
|
+
/* global XMLHttpRequest, FormData */
|
|
3
2
|
window.GOVUK = window.GOVUK || {}
|
|
4
3
|
window.GOVUK.Modules = window.GOVUK.Modules || {};
|
|
5
4
|
|
|
@@ -11,53 +10,56 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
|
|
|
11
10
|
this.element = $element[0]
|
|
12
11
|
this.somethingIsWrongForm = this.element.querySelector('#something-is-wrong')
|
|
13
12
|
this.surveyForm = this.element.querySelector('#page-is-not-useful')
|
|
14
|
-
this
|
|
15
|
-
this
|
|
16
|
-
this
|
|
17
|
-
this
|
|
18
|
-
this.$closeForms = $element.find('.js-close-form')
|
|
13
|
+
this.prompt = this.element.querySelector('.js-prompt')
|
|
14
|
+
this.forms = this.element.querySelectorAll('.js-feedback-form')
|
|
15
|
+
this.toggleForms = this.element.querySelectorAll('.js-toggle-form')
|
|
16
|
+
this.closeForms = this.element.querySelectorAll('.js-close-form')
|
|
19
17
|
this.activeForm = false
|
|
20
|
-
this
|
|
21
|
-
this
|
|
22
|
-
this
|
|
23
|
-
this
|
|
24
|
-
this
|
|
25
|
-
this
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
this.$surveyWrapper = $element.find('#survey-wrapper')
|
|
29
|
-
|
|
30
|
-
var that = this
|
|
18
|
+
this.pageIsUsefulButton = this.element.querySelector('.js-page-is-useful')
|
|
19
|
+
this.pageIsNotUsefulButton = this.element.querySelector('.js-page-is-not-useful')
|
|
20
|
+
this.somethingIsWrongButton = this.element.querySelector('.js-something-is-wrong')
|
|
21
|
+
this.promptQuestions = this.element.querySelectorAll('.js-prompt-questions')
|
|
22
|
+
this.promptSuccessMessage = this.element.querySelector('.js-prompt-success')
|
|
23
|
+
this.surveyWrapper = this.element.querySelector('#survey-wrapper')
|
|
24
|
+
|
|
25
|
+
var thisModule = this
|
|
31
26
|
var jshiddenClass = 'js-hidden'
|
|
32
27
|
|
|
33
28
|
setInitialAriaAttributes()
|
|
34
29
|
setHiddenValues()
|
|
35
30
|
|
|
36
|
-
this
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
31
|
+
for (var j = 0; j < this.toggleForms.length; j++) {
|
|
32
|
+
this.toggleForms[j].addEventListener('click', function (e) {
|
|
33
|
+
e.preventDefault()
|
|
34
|
+
var el = e.target
|
|
35
|
+
toggleForm(el.getAttribute('aria-controls'))
|
|
36
|
+
trackEvent(getTrackEventParams(el))
|
|
37
|
+
updateAriaAttributes(el)
|
|
38
|
+
})
|
|
39
|
+
}
|
|
42
40
|
|
|
43
|
-
this
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
41
|
+
for (var i = 0; i < this.closeForms.length; i++) {
|
|
42
|
+
this.closeForms[i].addEventListener('click', function (e) {
|
|
43
|
+
e.preventDefault()
|
|
44
|
+
var el = e.target
|
|
45
|
+
var formToToggle = el.getAttribute('aria-controls')
|
|
46
|
+
toggleForm(formToToggle)
|
|
47
|
+
trackEvent(getTrackEventParams(el))
|
|
48
|
+
setInitialAriaAttributes()
|
|
49
|
+
revealInitialPrompt()
|
|
50
|
+
var refocusClass = '.js-' + formToToggle
|
|
51
|
+
thisModule.element.querySelector(refocusClass).focus()
|
|
52
|
+
})
|
|
53
|
+
}
|
|
52
54
|
|
|
53
|
-
this
|
|
55
|
+
this.pageIsUsefulButton.addEventListener('click', function (e) {
|
|
54
56
|
e.preventDefault()
|
|
55
|
-
trackEvent(getTrackEventParams(
|
|
57
|
+
trackEvent(getTrackEventParams(thisModule.pageIsUsefulButton))
|
|
56
58
|
showFormSuccess()
|
|
57
59
|
revealInitialPrompt()
|
|
58
60
|
})
|
|
59
61
|
|
|
60
|
-
this
|
|
62
|
+
this.pageIsNotUsefulButton.addEventListener('click', function (e) {
|
|
61
63
|
var gaClientId
|
|
62
64
|
var dummyGaClientId = '111111111.1111111111'
|
|
63
65
|
if (window.GOVUK.cookie('_ga') === null || window.GOVUK.cookie('_ga') === '') {
|
|
@@ -68,95 +70,129 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
|
|
|
68
70
|
setHiddenValuesNotUsefulForm(gaClientId)
|
|
69
71
|
})
|
|
70
72
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
73
|
+
// much of the JS needed to support sending the form contents via this script is
|
|
74
|
+
// unsupported by IE, even IE11. This check causes IE to not intercept form submits
|
|
75
|
+
// and let them happen normally, which is handled already by the backend
|
|
76
|
+
if (typeof window.URLSearchParams === 'function') {
|
|
77
|
+
for (var f = 0; f < this.forms.length; f++) {
|
|
78
|
+
this.forms[f].addEventListener('submit', function (e) {
|
|
79
|
+
e.preventDefault()
|
|
80
|
+
var $form = e.target
|
|
81
|
+
var xhr = new XMLHttpRequest()
|
|
82
|
+
var url = $form.getAttribute('action')
|
|
83
|
+
var params = new FormData($form)
|
|
84
|
+
params = new URLSearchParams(params).toString()
|
|
85
|
+
|
|
86
|
+
xhr.open('POST', url, true)
|
|
87
|
+
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded')
|
|
88
|
+
|
|
89
|
+
xhr.onreadystatechange = function () {
|
|
90
|
+
if (xhr.readyState === 4 && xhr.status === 200) {
|
|
91
|
+
trackEvent(getTrackEventParams($form))
|
|
92
|
+
showFormSuccess(xhr.message)
|
|
93
|
+
revealInitialPrompt()
|
|
94
|
+
setInitialAriaAttributes()
|
|
95
|
+
thisModule.activeForm.classList.toggle(jshiddenClass)
|
|
96
|
+
} else {
|
|
97
|
+
showError(xhr)
|
|
98
|
+
enableSubmitFormButton($form)
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
disableSubmitFormButton($form)
|
|
103
|
+
xhr.send(params)
|
|
104
|
+
})
|
|
105
|
+
}
|
|
106
|
+
}
|
|
92
107
|
|
|
93
108
|
function disableSubmitFormButton ($form) {
|
|
94
|
-
$form.
|
|
109
|
+
var formButton = $form.querySelector('[type="submit"]')
|
|
110
|
+
formButton.setAttribute('disabled', true)
|
|
95
111
|
}
|
|
96
112
|
|
|
97
113
|
function enableSubmitFormButton ($form) {
|
|
98
|
-
$form.
|
|
114
|
+
var formButton = $form.querySelector('[type="submit"]')
|
|
115
|
+
formButton.removeAttribute('disabled')
|
|
99
116
|
}
|
|
100
117
|
|
|
101
118
|
function setInitialAriaAttributes () {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
119
|
+
for (var i = 0; i < thisModule.forms.length; i++) {
|
|
120
|
+
thisModule.forms[i].setAttribute('aria-hidden', true)
|
|
121
|
+
}
|
|
122
|
+
thisModule.pageIsNotUsefulButton.setAttribute('aria-expanded', false)
|
|
123
|
+
thisModule.somethingIsWrongButton.setAttribute('aria-expanded', false)
|
|
105
124
|
}
|
|
106
125
|
|
|
107
126
|
function setHiddenValues () {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
127
|
+
var javascriptEnabled = document.createElement('input')
|
|
128
|
+
javascriptEnabled.setAttribute('type', 'hidden')
|
|
129
|
+
javascriptEnabled.setAttribute('name', 'javascript_enabled')
|
|
130
|
+
javascriptEnabled.setAttribute('value', true)
|
|
131
|
+
thisModule.somethingIsWrongForm.appendChild(javascriptEnabled)
|
|
132
|
+
|
|
133
|
+
var referrer = document.createElement('input')
|
|
134
|
+
referrer.setAttribute('type', 'hidden')
|
|
135
|
+
referrer.setAttribute('name', 'referrer')
|
|
136
|
+
referrer.setAttribute('value', document.referrer || 'unknown')
|
|
137
|
+
thisModule.somethingIsWrongForm.appendChild(referrer)
|
|
138
|
+
thisModule.somethingIsWrongForm.invalidInfoError = [
|
|
139
|
+
'<h2>Sorry, we’re unable to send your message as you haven’t given us any information.</h2>',
|
|
140
|
+
' <p>Please tell us what you were doing or what went wrong</p>'
|
|
115
141
|
].join('')
|
|
116
142
|
}
|
|
117
143
|
|
|
118
144
|
function setHiddenValuesNotUsefulForm (gaClientId) {
|
|
119
145
|
var currentPathName = window.location.pathname.replace(/[^\s=?&]+(?:@|%40)[^\s=?&]+/, '[email]')
|
|
120
146
|
var finalPathName = encodeURI(currentPathName)
|
|
121
|
-
|
|
122
|
-
'<h2>',
|
|
123
|
-
'
|
|
124
|
-
'</h2>',
|
|
125
|
-
'<p>Enter an email address in the correct format, like name@example.com</p>'
|
|
147
|
+
thisModule.surveyForm.invalidInfoError = [
|
|
148
|
+
'<h2>Sorry, we’re unable to send your message as you haven’t given us a valid email address.</h2>',
|
|
149
|
+
' <p>Enter an email address in the correct format, like name@example.com</p>'
|
|
126
150
|
].join('')
|
|
127
151
|
if (document.querySelectorAll('[name="email_survey_signup[ga_client_id]"]').length === 0) {
|
|
128
|
-
|
|
152
|
+
var hiddenInput = document.createElement('input')
|
|
153
|
+
hiddenInput.setAttribute('type', 'hidden')
|
|
154
|
+
hiddenInput.setAttribute('name', 'email_survey_signup[ga_client_id]')
|
|
155
|
+
hiddenInput.setAttribute('value', gaClientId || '0')
|
|
156
|
+
thisModule.surveyForm.appendChild(hiddenInput)
|
|
129
157
|
}
|
|
130
158
|
|
|
131
159
|
if (document.querySelectorAll('.gem-c-feedback__email-link#take-survey').length === 0) {
|
|
132
|
-
|
|
160
|
+
var takeSurvey = document.createElement('a')
|
|
161
|
+
takeSurvey.setAttribute('href', 'https://www.smartsurvey.co.uk/s/gov-uk-banner/?c=' + finalPathName + '&gcl=' + gaClientId)
|
|
162
|
+
takeSurvey.setAttribute('class', 'gem-c-feedback__email-link govuk-link')
|
|
163
|
+
takeSurvey.setAttribute('id', 'take-survey')
|
|
164
|
+
takeSurvey.setAttribute('target', '_blank')
|
|
165
|
+
takeSurvey.setAttribute('rel', 'noopener noreferrer')
|
|
166
|
+
takeSurvey.innerHTML = 'Don’t have an email address?'
|
|
167
|
+
thisModule.surveyWrapper.appendChild(takeSurvey)
|
|
133
168
|
}
|
|
134
169
|
}
|
|
135
170
|
|
|
136
171
|
function updateAriaAttributes (linkClicked) {
|
|
137
|
-
linkClicked.
|
|
138
|
-
|
|
172
|
+
linkClicked.setAttribute('aria-expanded', true)
|
|
173
|
+
var controls = linkClicked.getAttribute('aria-controls')
|
|
174
|
+
var ariaControls = document.querySelector('#' + controls)
|
|
175
|
+
ariaControls.setAttribute('aria-hidden', false)
|
|
139
176
|
}
|
|
140
177
|
|
|
141
178
|
function toggleForm (formId) {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
that.$prompt.toggleClass(jshiddenClass)
|
|
179
|
+
thisModule.activeForm = thisModule.element.querySelector('#' + formId)
|
|
180
|
+
thisModule.activeForm.classList.toggle(jshiddenClass)
|
|
181
|
+
thisModule.prompt.classList.toggle(jshiddenClass)
|
|
146
182
|
|
|
147
|
-
var formIsVisible = !
|
|
183
|
+
var formIsVisible = !thisModule.activeForm.classList.contains(jshiddenClass)
|
|
148
184
|
|
|
149
185
|
if (formIsVisible) {
|
|
150
|
-
|
|
186
|
+
thisModule.activeForm.querySelector('.gem-c-input').focus()
|
|
151
187
|
} else {
|
|
152
|
-
|
|
188
|
+
thisModule.activeForm = false
|
|
153
189
|
}
|
|
154
190
|
}
|
|
155
191
|
|
|
156
192
|
function getTrackEventParams ($node) {
|
|
157
193
|
return {
|
|
158
|
-
category: $node.
|
|
159
|
-
action: $node.
|
|
194
|
+
category: $node.getAttribute('data-track-category'),
|
|
195
|
+
action: $node.getAttribute('data-track-action')
|
|
160
196
|
}
|
|
161
197
|
}
|
|
162
198
|
|
|
@@ -168,40 +204,42 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
|
|
|
168
204
|
|
|
169
205
|
function showError (error) {
|
|
170
206
|
var genericError = [
|
|
171
|
-
'<h2>',
|
|
172
|
-
'
|
|
173
|
-
'</h2>',
|
|
174
|
-
'<p>If the problem persists, we have other ways for you to provide',
|
|
207
|
+
'<h2>Sorry, we’re unable to receive your message right now.</h2>',
|
|
208
|
+
' <p>If the problem persists, we have other ways for you to provide',
|
|
175
209
|
' feedback on the <a href="/contact/govuk">contact page</a>.</p>'
|
|
176
210
|
].join('')
|
|
177
211
|
// if the response is not a 404 or 500, show the error message if it exists
|
|
178
212
|
// otherwise show the generic message
|
|
179
|
-
if (
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
213
|
+
if ('response' in error) {
|
|
214
|
+
if (typeof error.response === 'object' && error.response !== null) {
|
|
215
|
+
error = error.response.message === 'email survey sign up failure' ? genericError : error.response.message
|
|
216
|
+
} else {
|
|
183
217
|
error = genericError
|
|
184
218
|
}
|
|
185
219
|
} else if (error.status === 422) {
|
|
186
220
|
// there's clobbering by nginx on all 422 requests, which is why the response returns a rendered html page instead of the expected JSON
|
|
187
|
-
// this is a temporary workaround to ensure that
|
|
188
|
-
error =
|
|
221
|
+
// this is a temporary workaround to ensure that we are displaying relevant error messages to the users
|
|
222
|
+
error = thisModule.activeForm.invalidInfoError || genericError
|
|
189
223
|
} else {
|
|
190
|
-
// for all other, show generic error
|
|
191
224
|
error = genericError
|
|
192
225
|
}
|
|
193
|
-
var $errors =
|
|
194
|
-
$errors.
|
|
226
|
+
var $errors = thisModule.activeForm.querySelector('.js-errors')
|
|
227
|
+
$errors.innerHTML = error
|
|
228
|
+
$errors.classList.remove(jshiddenClass)
|
|
229
|
+
$errors.focus()
|
|
195
230
|
}
|
|
196
231
|
|
|
197
232
|
function showFormSuccess () {
|
|
198
|
-
|
|
199
|
-
|
|
233
|
+
for (var i = 0; i < thisModule.promptQuestions.length; i++) {
|
|
234
|
+
thisModule.promptQuestions[i].classList.add(jshiddenClass)
|
|
235
|
+
}
|
|
236
|
+
thisModule.promptSuccessMessage.classList.remove(jshiddenClass)
|
|
237
|
+
thisModule.promptSuccessMessage.focus()
|
|
200
238
|
}
|
|
201
239
|
|
|
202
240
|
function revealInitialPrompt () {
|
|
203
|
-
|
|
204
|
-
|
|
241
|
+
thisModule.prompt.classList.remove(jshiddenClass)
|
|
242
|
+
thisModule.prompt.focus()
|
|
205
243
|
}
|
|
206
244
|
}
|
|
207
245
|
}
|