govuk_publishing_components 29.12.1 → 29.15.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/images/govuk_publishing_components/action-link-arrow--white.png +0 -0
- data/app/assets/images/govuk_publishing_components/action-link-arrow--white.svg +1 -0
- data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/gtm-page-views.js +5 -3
- data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/pii-remover.js +135 -0
- data/app/assets/javascripts/govuk_publishing_components/analytics-ga4.js +2 -0
- data/app/assets/javascripts/govuk_publishing_components/components/accordion.js +10 -0
- data/app/assets/javascripts/govuk_publishing_components/components/feedback.js +19 -0
- data/app/assets/javascripts/govuk_publishing_components/components/table.js +52 -0
- data/app/assets/stylesheets/govuk_publishing_components/components/_action-link.scss +7 -0
- data/app/assets/stylesheets/govuk_publishing_components/components/_previous-and-next-navigation.scss +1 -92
- data/app/views/govuk_publishing_components/components/_action_link.html.erb +2 -0
- data/app/views/govuk_publishing_components/components/_previous_and_next_navigation.html.erb +33 -36
- data/app/views/govuk_publishing_components/components/_table.html.erb +60 -30
- data/app/views/govuk_publishing_components/components/docs/accordion.yml +2 -1
- data/app/views/govuk_publishing_components/components/docs/action_link.yml +8 -0
- data/app/views/govuk_publishing_components/components/docs/previous_and_next_navigation.yml +1 -1
- data/app/views/govuk_publishing_components/components/docs/table.yml +30 -0
- data/config/locales/ar.yml +6 -0
- data/config/locales/az.yml +6 -0
- data/config/locales/be.yml +6 -0
- data/config/locales/bg.yml +6 -0
- data/config/locales/bn.yml +6 -0
- data/config/locales/cs.yml +6 -0
- data/config/locales/cy.yml +6 -0
- data/config/locales/da.yml +6 -0
- data/config/locales/de.yml +6 -0
- data/config/locales/dr.yml +6 -0
- data/config/locales/el.yml +6 -0
- data/config/locales/en.yml +8 -2
- data/config/locales/es-419.yml +6 -0
- data/config/locales/es.yml +6 -0
- data/config/locales/et.yml +6 -0
- data/config/locales/fa.yml +6 -0
- data/config/locales/fi.yml +6 -0
- data/config/locales/fr.yml +6 -0
- data/config/locales/gd.yml +6 -0
- data/config/locales/gu.yml +6 -0
- data/config/locales/he.yml +6 -0
- data/config/locales/hi.yml +6 -0
- data/config/locales/hr.yml +6 -0
- data/config/locales/hu.yml +6 -0
- data/config/locales/hy.yml +6 -0
- data/config/locales/id.yml +6 -0
- data/config/locales/is.yml +6 -0
- data/config/locales/it.yml +6 -0
- data/config/locales/ja.yml +6 -0
- data/config/locales/ka.yml +6 -0
- data/config/locales/kk.yml +6 -0
- data/config/locales/ko.yml +6 -0
- data/config/locales/lt.yml +6 -0
- data/config/locales/lv.yml +6 -0
- data/config/locales/ms.yml +6 -0
- data/config/locales/mt.yml +6 -0
- data/config/locales/nl.yml +6 -0
- data/config/locales/no.yml +6 -0
- data/config/locales/pa-pk.yml +6 -0
- data/config/locales/pa.yml +6 -0
- data/config/locales/pl.yml +6 -0
- data/config/locales/ps.yml +6 -0
- data/config/locales/pt.yml +6 -0
- data/config/locales/ro.yml +6 -0
- data/config/locales/ru.yml +6 -0
- data/config/locales/si.yml +6 -0
- data/config/locales/sk.yml +6 -0
- data/config/locales/sl.yml +6 -0
- data/config/locales/so.yml +6 -0
- data/config/locales/sq.yml +6 -0
- data/config/locales/sr.yml +6 -0
- data/config/locales/sv.yml +6 -0
- data/config/locales/sw.yml +6 -0
- data/config/locales/ta.yml +6 -0
- data/config/locales/th.yml +6 -0
- data/config/locales/tk.yml +6 -0
- data/config/locales/tr.yml +6 -0
- data/config/locales/uk.yml +6 -0
- data/config/locales/ur.yml +6 -0
- data/config/locales/uz.yml +6 -0
- data/config/locales/vi.yml +6 -0
- data/config/locales/zh-hk.yml +6 -0
- data/config/locales/zh-tw.yml +6 -0
- data/config/locales/zh.yml +6 -0
- data/lib/govuk_publishing_components/app_helpers/table_helper.rb +3 -3
- data/lib/govuk_publishing_components/version.rb +1 -1
- data/node_modules/govuk-frontend/govuk/components/_all.scss +1 -0
- data/node_modules/govuk-frontend/govuk/components/accordion/_index.scss +1 -0
- data/node_modules/govuk-frontend/govuk/components/character-count/fixtures.json +2 -1
- data/node_modules/govuk-frontend/govuk/components/checkboxes/fixtures.json +102 -44
- data/node_modules/govuk-frontend/govuk/components/checkboxes/macro-options.json +7 -1
- data/node_modules/govuk-frontend/govuk/components/checkboxes/template.njk +3 -2
- data/node_modules/govuk-frontend/govuk/components/cookie-banner/fixtures.json +10 -10
- data/node_modules/govuk-frontend/govuk/components/fieldset/fixtures.json +92 -1
- data/node_modules/govuk-frontend/govuk/components/file-upload/fixtures.json +2 -1
- data/node_modules/govuk-frontend/govuk/components/header/_index.scss +3 -0
- data/node_modules/govuk-frontend/govuk/components/header/fixtures.json +14 -6
- data/node_modules/govuk-frontend/govuk/components/header/template.njk +9 -3
- data/node_modules/govuk-frontend/govuk/components/input/fixtures.json +2 -1
- data/node_modules/govuk-frontend/govuk/components/input/macro-options.json +1 -1
- data/node_modules/govuk-frontend/govuk/components/label/fixtures.json +76 -1
- data/node_modules/govuk-frontend/govuk/components/pagination/README.md +15 -0
- data/node_modules/govuk-frontend/govuk/components/pagination/_index.scss +244 -0
- data/node_modules/govuk-frontend/govuk/components/pagination/_pagination.scss +2 -0
- data/node_modules/govuk-frontend/govuk/components/pagination/fixtures.json +300 -0
- data/node_modules/govuk-frontend/govuk/components/pagination/macro-options.json +128 -0
- data/node_modules/govuk-frontend/govuk/components/pagination/macro.njk +3 -0
- data/node_modules/govuk-frontend/govuk/components/pagination/template.njk +62 -0
- data/node_modules/govuk-frontend/govuk/components/radios/fixtures.json +147 -43
- data/node_modules/govuk-frontend/govuk/components/radios/macro-options.json +7 -1
- data/node_modules/govuk-frontend/govuk/components/radios/template.njk +3 -2
- data/node_modules/govuk-frontend/govuk/components/select/fixtures.json +56 -2
- data/node_modules/govuk-frontend/govuk/components/select/macro-options.json +7 -1
- data/node_modules/govuk-frontend/govuk/components/select/template.njk +1 -1
- data/node_modules/govuk-frontend/govuk/components/textarea/fixtures.json +2 -1
- data/node_modules/govuk-frontend/govuk-esm/all.mjs +12 -12
- data/node_modules/govuk-frontend/govuk-esm/components/accordion/accordion.mjs +3 -3
- data/node_modules/govuk-frontend/govuk-esm/components/button/button.mjs +2 -2
- data/node_modules/govuk-frontend/govuk-esm/components/character-count/character-count.mjs +3 -3
- data/node_modules/govuk-frontend/govuk-esm/components/checkboxes/checkboxes.mjs +4 -4
- data/node_modules/govuk-frontend/govuk-esm/components/details/details.mjs +3 -3
- data/node_modules/govuk-frontend/govuk-esm/components/error-summary/error-summary.mjs +3 -3
- data/node_modules/govuk-frontend/govuk-esm/components/header/header.mjs +3 -3
- data/node_modules/govuk-frontend/govuk-esm/components/notification-banner/notification-banner.mjs +1 -1
- data/node_modules/govuk-frontend/govuk-esm/components/radios/radios.mjs +4 -4
- data/node_modules/govuk-frontend/govuk-esm/components/skip-link/skip-link.mjs +3 -3
- data/node_modules/govuk-frontend/govuk-esm/components/tabs/tabs.mjs +6 -6
- data/node_modules/govuk-frontend/govuk-esm/vendor/polyfills/{DOMTokenList.js → DOMTokenList.mjs} +0 -0
- data/node_modules/govuk-frontend/govuk-esm/vendor/polyfills/{Document.js → Document.mjs} +0 -0
- data/node_modules/govuk-frontend/govuk-esm/vendor/polyfills/Element/prototype/{classList.js → classList.mjs} +4 -4
- data/node_modules/govuk-frontend/govuk-esm/vendor/polyfills/Element/prototype/{closest.js → closest.mjs} +1 -1
- data/node_modules/govuk-frontend/govuk-esm/vendor/polyfills/Element/prototype/{matches.js → matches.mjs} +0 -0
- data/node_modules/govuk-frontend/govuk-esm/vendor/polyfills/Element/prototype/{nextElementSibling.js → nextElementSibling.mjs} +2 -2
- data/node_modules/govuk-frontend/govuk-esm/vendor/polyfills/Element/prototype/{previousElementSibling.js → previousElementSibling.mjs} +2 -2
- data/node_modules/govuk-frontend/govuk-esm/vendor/polyfills/{Element.js → Element.mjs} +1 -1
- data/node_modules/govuk-frontend/govuk-esm/vendor/polyfills/{Event.js → Event.mjs} +3 -3
- data/node_modules/govuk-frontend/govuk-esm/vendor/polyfills/Function/prototype/{bind.js → bind.mjs} +1 -1
- data/node_modules/govuk-frontend/govuk-esm/vendor/polyfills/Object/{defineProperty.js → defineProperty.mjs} +0 -0
- data/node_modules/govuk-frontend/govuk-esm/vendor/polyfills/{Window.js → Window.mjs} +0 -0
- data/node_modules/govuk-frontend/package.json +8 -2
- metadata +25 -14
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f53467f684078c59a2e499d0697b47183adacc1b30b9c19839ab8a8983715ff2
|
|
4
|
+
data.tar.gz: edddfebbcd07e825aa735e3bbe59fe000ebf5b2007272522ef94e92506cae352
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 25eed8d95465c897c95ab654b97e2bfc15fbf956fd7535c361354da8326cc23795160413abdca24bb80757f4c6ea4c1033f3ca96474caf705ae92059896bf8c8
|
|
7
|
+
data.tar.gz: a7c01b6e8fa79cde09ef1a04c596a97a2dde847341c7e50fece0997cd78472b8a6f30741f228feb6c29b969c3374664f46d9262827027fc42ec4a67bb0c59bd4
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg width="39" height="39" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M17.01 6.818l-2.828 2.828 7.853 7.854-22 .066L0 21.5h22.035l-7.853 7.854 2.828 2.828L29.69 19.5zM39 19.5C39 30.27 30.27 39 19.5 39 9.373 39 1.05 31.28.092 21.405A19.737 19.737 0 010 19.5C0 8.73 8.73 0 19.5 0S39 8.73 39 19.5z" fill="#fff"/></svg>
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
var GOVUK = global.GOVUK || {}
|
|
5
5
|
|
|
6
6
|
GOVUK.Gtm = {
|
|
7
|
+
PIIRemover: new GOVUK.analyticsGA4.PIIRemover(), // imported in analytics-ga4.js
|
|
8
|
+
|
|
7
9
|
sendPageView: function () {
|
|
8
10
|
if (window.dataLayer) {
|
|
9
11
|
var data = {
|
|
@@ -48,15 +50,15 @@
|
|
|
48
50
|
},
|
|
49
51
|
|
|
50
52
|
getLocation: function () {
|
|
51
|
-
return document.location.href
|
|
53
|
+
return this.PIIRemover.stripPII(document.location.href)
|
|
52
54
|
},
|
|
53
55
|
|
|
54
56
|
getReferrer: function () {
|
|
55
|
-
return document.referrer
|
|
57
|
+
return this.PIIRemover.stripPIIWithOverride(document.referrer, true, true)
|
|
56
58
|
},
|
|
57
59
|
|
|
58
60
|
getTitle: function () {
|
|
59
|
-
return document.title
|
|
61
|
+
return this.PIIRemover.stripPII(document.title)
|
|
60
62
|
},
|
|
61
63
|
|
|
62
64
|
// window.httpStatusCode is set in the source of the error page in static
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
;(function (global) {
|
|
2
|
+
'use strict'
|
|
3
|
+
|
|
4
|
+
var GOVUK = global.GOVUK || {}
|
|
5
|
+
var EMAIL_PATTERN = /[^\s=/?&#]+(?:@|%40)[^\s=/?&]+/g
|
|
6
|
+
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
|
|
7
|
+
var DATE_PATTERN = /\d{4}(-?)\d{2}(-?)\d{2}/g
|
|
8
|
+
var ESCAPE_REGEX_PATTERN = /[|\\{}()[\]^$+*?.]/g
|
|
9
|
+
|
|
10
|
+
// specific URL parameters to be redacted from accounts URLs
|
|
11
|
+
var RESET_PASSWORD_TOKEN_PATTERN = /reset_password_token=[a-zA-Z0-9-]+/g
|
|
12
|
+
var UNLOCK_TOKEN_PATTERN = /unlock_token=[a-zA-Z0-9-]+/g
|
|
13
|
+
var STATE_PATTERN = /state=.[^&]+/g
|
|
14
|
+
|
|
15
|
+
function shouldStripDates () {
|
|
16
|
+
var metas = document.querySelectorAll('meta[name="govuk:static-analytics:strip-dates"]')
|
|
17
|
+
return metas.length > 0
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function shouldStripPostcodes () {
|
|
21
|
+
var metas = document.querySelectorAll('meta[name="govuk:static-analytics:strip-postcodes"]')
|
|
22
|
+
return metas.length > 0
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function queryStringParametersToStrip () {
|
|
26
|
+
var meta = document.querySelector('meta[name="govuk:static-analytics:strip-query-string-parameters"]')
|
|
27
|
+
var value = false
|
|
28
|
+
if (meta) {
|
|
29
|
+
value = meta.getAttribute('content')
|
|
30
|
+
}
|
|
31
|
+
var parameters = []
|
|
32
|
+
|
|
33
|
+
if (value) {
|
|
34
|
+
var split = value.split(',')
|
|
35
|
+
for (var i = 0; i < split.length; i++) {
|
|
36
|
+
parameters.push(split[i].trim())
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return parameters
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
var PIIRemover = function () {
|
|
44
|
+
this.stripDatePII = shouldStripDates()
|
|
45
|
+
this.stripPostcodePII = shouldStripPostcodes()
|
|
46
|
+
this.queryStringParametersToStrip = queryStringParametersToStrip()
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
PIIRemover.prototype.PIISafe = function (value) {
|
|
50
|
+
this.value = value
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
PIIRemover.prototype.stripPII = function (value) {
|
|
54
|
+
if (typeof value === 'string') {
|
|
55
|
+
return this.stripPIIFromString(value)
|
|
56
|
+
} else if (Object.prototype.toString.call(value) === '[object Array]' || Object.prototype.toString.call(value) === '[object Arguments]') {
|
|
57
|
+
return this.stripPIIFromArray(value)
|
|
58
|
+
} else if (typeof value === 'object') {
|
|
59
|
+
return this.stripPIIFromObject(value)
|
|
60
|
+
} else {
|
|
61
|
+
return value
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
PIIRemover.prototype.stripPIIWithOverride = function (value, enableDateStripping, enablePostcodeStripping) {
|
|
66
|
+
var oldStripDatePII = this.stripDatePII
|
|
67
|
+
var oldPostcodePII = this.stripPostcodePII
|
|
68
|
+
|
|
69
|
+
this.stripDatePII = enableDateStripping
|
|
70
|
+
this.stripPostcodePII = enablePostcodeStripping
|
|
71
|
+
|
|
72
|
+
var strippedValue = this.stripPII(value)
|
|
73
|
+
|
|
74
|
+
this.stripDatePII = oldStripDatePII
|
|
75
|
+
this.stripPostcodePII = oldPostcodePII
|
|
76
|
+
|
|
77
|
+
return strippedValue
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
PIIRemover.prototype.stripPIIFromString = function (string) {
|
|
81
|
+
var stripped = string.replace(EMAIL_PATTERN, '[email]')
|
|
82
|
+
stripped = stripped.replace(RESET_PASSWORD_TOKEN_PATTERN, 'reset_password_token=[reset_password_token]')
|
|
83
|
+
stripped = stripped.replace(UNLOCK_TOKEN_PATTERN, 'unlock_token=[unlock_token]')
|
|
84
|
+
stripped = stripped.replace(STATE_PATTERN, 'state=[state]')
|
|
85
|
+
stripped = this.stripQueryStringParameters(stripped)
|
|
86
|
+
|
|
87
|
+
if (this.stripDatePII === true) {
|
|
88
|
+
stripped = stripped.replace(DATE_PATTERN, '[date]')
|
|
89
|
+
}
|
|
90
|
+
if (this.stripPostcodePII === true) {
|
|
91
|
+
stripped = stripped.replace(POSTCODE_PATTERN, '[postcode]')
|
|
92
|
+
}
|
|
93
|
+
return stripped
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
PIIRemover.prototype.stripPIIFromObject = function (object) {
|
|
97
|
+
if (object) {
|
|
98
|
+
if (object instanceof this.PIISafe) {
|
|
99
|
+
return object.value
|
|
100
|
+
} else {
|
|
101
|
+
for (var property in object) {
|
|
102
|
+
var value = object[property]
|
|
103
|
+
|
|
104
|
+
object[property] = this.stripPII(value)
|
|
105
|
+
}
|
|
106
|
+
return object
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
PIIRemover.prototype.stripPIIFromArray = function (array) {
|
|
112
|
+
for (var i = 0, l = array.length; i < l; i++) {
|
|
113
|
+
var elem = array[i]
|
|
114
|
+
|
|
115
|
+
array[i] = this.stripPII(elem)
|
|
116
|
+
}
|
|
117
|
+
return array
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
PIIRemover.prototype.stripQueryStringParameters = function (string) {
|
|
121
|
+
for (var i = 0; i < this.queryStringParametersToStrip.length; i++) {
|
|
122
|
+
var parameter = this.queryStringParametersToStrip[i]
|
|
123
|
+
var escaped = parameter.replace(ESCAPE_REGEX_PATTERN, '\\$&')
|
|
124
|
+
var regexp = new RegExp('((?:\\?|&)' + escaped + '=)(?:[^&#\\s]*)', 'g')
|
|
125
|
+
string = string.replace(regexp, '$1[' + parameter + ']')
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
return string
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
GOVUK.analyticsGA4 = GOVUK.analyticsGA4 || {}
|
|
132
|
+
GOVUK.analyticsGA4.PIIRemover = PIIRemover
|
|
133
|
+
|
|
134
|
+
global.GOVUK = GOVUK
|
|
135
|
+
})(window)
|
|
@@ -124,6 +124,16 @@ window.GOVUK.Modules.GovukAccordion = window.GOVUKFrontend.Accordion;
|
|
|
124
124
|
var label = expanded ? 'Show all sections' : 'Hide all sections'
|
|
125
125
|
var action = expanded ? 'accordionOpened' : 'accordionClosed'
|
|
126
126
|
var options = { transport: 'beacon', label: label }
|
|
127
|
+
|
|
128
|
+
var extraOptions = event.target && event.target.getAttribute('data-track-options')
|
|
129
|
+
|
|
130
|
+
// this uses the same logic as track-click.js handleClick
|
|
131
|
+
// means we can add a custom dimensions on click
|
|
132
|
+
if (extraOptions) {
|
|
133
|
+
extraOptions = JSON.parse(extraOptions)
|
|
134
|
+
for (var k in extraOptions) options[k] = extraOptions[k]
|
|
135
|
+
}
|
|
136
|
+
|
|
127
137
|
if (window.GOVUK.analytics && window.GOVUK.analytics.trackEvent) {
|
|
128
138
|
window.GOVUK.analytics.trackEvent('pageElementInteraction', action, options)
|
|
129
139
|
}
|
|
@@ -19,6 +19,8 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
|
|
|
19
19
|
this.promptSuccessMessage = this.$module.querySelector('.js-prompt-success')
|
|
20
20
|
this.surveyWrapper = this.$module.querySelector('#survey-wrapper')
|
|
21
21
|
this.jshiddenClass = 'js-hidden'
|
|
22
|
+
this.whatDoingInput = this.$module.querySelector('[name=what_doing]')
|
|
23
|
+
this.whatWrongInput = this.$module.querySelector('[name=what_wrong]')
|
|
22
24
|
}
|
|
23
25
|
|
|
24
26
|
Feedback.prototype.init = function () {
|
|
@@ -74,6 +76,13 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
|
|
|
74
76
|
this.setHiddenValuesNotUsefulForm(gaClientId)
|
|
75
77
|
}.bind(this))
|
|
76
78
|
|
|
79
|
+
this.somethingIsWrongButton.addEventListener('click', function (e) {
|
|
80
|
+
this.timerInterval = setInterval(function () {
|
|
81
|
+
this.timer = this.timer + 1
|
|
82
|
+
this.timerHoneyPot.setAttribute('value', this.timer)
|
|
83
|
+
}.bind(this), 1000)
|
|
84
|
+
}.bind(this))
|
|
85
|
+
|
|
77
86
|
// much of the JS needed to support sending the form contents via this script is
|
|
78
87
|
// unsupported by IE, even IE11. This check causes IE to not intercept form submits
|
|
79
88
|
// and let them happen normally, which is handled already by the backend
|
|
@@ -94,6 +103,7 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
|
|
|
94
103
|
this.revealInitialPrompt()
|
|
95
104
|
this.setInitialAriaAttributes()
|
|
96
105
|
this.activeForm.hidden = true
|
|
106
|
+
clearInterval(this.timerInterval)
|
|
97
107
|
} else {
|
|
98
108
|
this.showError(xhr)
|
|
99
109
|
this.enableSubmitFormButton($form)
|
|
@@ -142,6 +152,14 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
|
|
|
142
152
|
'<h2>Sorry, we’re unable to send your message as you haven’t given us any information.</h2>',
|
|
143
153
|
' <p>Please tell us what you were doing or what went wrong</p>'
|
|
144
154
|
].join('')
|
|
155
|
+
|
|
156
|
+
this.timer = 0
|
|
157
|
+
|
|
158
|
+
this.timerHoneyPot = document.createElement('input')
|
|
159
|
+
this.timerHoneyPot.setAttribute('type', 'hidden')
|
|
160
|
+
this.timerHoneyPot.setAttribute('name', 'timer')
|
|
161
|
+
this.timerHoneyPot.setAttribute('value', this.timer)
|
|
162
|
+
this.somethingIsWrongForm.appendChild(this.timerHoneyPot)
|
|
145
163
|
}
|
|
146
164
|
|
|
147
165
|
Feedback.prototype.setHiddenValuesNotUsefulForm = function (gaClientId) {
|
|
@@ -185,6 +203,7 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
|
|
|
185
203
|
.focus()
|
|
186
204
|
} else {
|
|
187
205
|
this.activeForm = false
|
|
206
|
+
clearInterval(this.timerInterval)
|
|
188
207
|
}
|
|
189
208
|
}
|
|
190
209
|
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
window.GOVUK = window.GOVUK || {}
|
|
2
|
+
window.GOVUK.Modules = window.GOVUK.Modules || {};
|
|
3
|
+
|
|
4
|
+
(function (Modules) {
|
|
5
|
+
function Table ($module) {
|
|
6
|
+
this.$module = $module
|
|
7
|
+
this.searchInput = $module.querySelector('input[name="filter"]')
|
|
8
|
+
this.tableRows = $module.querySelectorAll('.js-govuk-table__row')
|
|
9
|
+
this.filter = $module.querySelector('.js-gem-c-table__filter')
|
|
10
|
+
this.filterCount = this.filter.querySelector('.js-filter-count')
|
|
11
|
+
this.message = $module.querySelector('.js-gem-c-table__message')
|
|
12
|
+
this.hiddenClass = 'govuk-!-display-none'
|
|
13
|
+
this.filterCountText = this.filterCount.getAttribute('data-count-text')
|
|
14
|
+
this.tableRowsContent = []
|
|
15
|
+
|
|
16
|
+
for (var i = 0; i < this.tableRows.length; i++) {
|
|
17
|
+
this.tableRowsContent.push(this.tableRows[i].textContent.toUpperCase())
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
Table.prototype.init = function () {
|
|
22
|
+
this.$module.updateRows = this.updateRows.bind(this)
|
|
23
|
+
this.filter.classList.remove(this.hiddenClass)
|
|
24
|
+
this.searchInput.addEventListener('input', this.$module.updateRows)
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Reads value of input and filters content
|
|
28
|
+
Table.prototype.updateRows = function () {
|
|
29
|
+
var value = this.searchInput.value
|
|
30
|
+
var hiddenRows = 0
|
|
31
|
+
var length = this.tableRows.length
|
|
32
|
+
|
|
33
|
+
for (var i = 0; i < length; i++) {
|
|
34
|
+
if (this.tableRowsContent[i].includes(value.toUpperCase())) {
|
|
35
|
+
this.tableRows[i].classList.remove(this.hiddenClass)
|
|
36
|
+
} else {
|
|
37
|
+
this.tableRows[i].classList.add(this.hiddenClass)
|
|
38
|
+
hiddenRows++
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
this.filterCount.textContent = (length - hiddenRows) + ' ' + this.filterCountText
|
|
43
|
+
|
|
44
|
+
if (length === hiddenRows) {
|
|
45
|
+
this.message.classList.remove(this.hiddenClass)
|
|
46
|
+
} else {
|
|
47
|
+
this.message.classList.add(this.hiddenClass)
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
Modules.Table = Table
|
|
52
|
+
})(window.GOVUK.Modules)
|
|
@@ -92,6 +92,13 @@
|
|
|
92
92
|
}
|
|
93
93
|
}
|
|
94
94
|
|
|
95
|
+
.gem-c-action-link--white-arrow {
|
|
96
|
+
&:before {
|
|
97
|
+
background-image: image-url("govuk_publishing_components/action-link-arrow--white.png");
|
|
98
|
+
background-image: image-url("govuk_publishing_components/action-link-arrow--white.svg"), linear-gradient(transparent, transparent);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
95
102
|
.gem-c-action-link--blue-arrow {
|
|
96
103
|
&:before {
|
|
97
104
|
width: 36px;
|
|
@@ -1,92 +1 @@
|
|
|
1
|
-
|
|
2
|
-
display: block;
|
|
3
|
-
margin: govuk-spacing(8) 0;
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
.gem-c-pagination__list {
|
|
7
|
-
margin: 0;
|
|
8
|
-
padding: 0;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
.gem-c-pagination__item {
|
|
12
|
-
@include govuk-font($size: 19);
|
|
13
|
-
list-style: none;
|
|
14
|
-
|
|
15
|
-
&:first-child {
|
|
16
|
-
margin-bottom: govuk-spacing(4);
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
.gem-c-pagination__link {
|
|
21
|
-
display: block;
|
|
22
|
-
text-decoration: none;
|
|
23
|
-
padding-bottom: govuk-spacing(4);
|
|
24
|
-
|
|
25
|
-
&:hover,
|
|
26
|
-
&:active,
|
|
27
|
-
&:visited {
|
|
28
|
-
color: $govuk-link-colour;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
&:hover,
|
|
32
|
-
&:active {
|
|
33
|
-
background-color: govuk-colour("light-grey", $legacy: "grey-4");
|
|
34
|
-
|
|
35
|
-
// Add govuk-link hover decoration to title if no label present
|
|
36
|
-
.gem-c-pagination__link-text--decorated {
|
|
37
|
-
@include govuk-link-decoration;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
.gem-c-pagination__link-label,
|
|
41
|
-
.gem-c-pagination__link-text--decorated {
|
|
42
|
-
@include govuk-link-hover-decoration;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
&:focus {
|
|
47
|
-
@include govuk-focused-text;
|
|
48
|
-
|
|
49
|
-
.gem-c-pagination__link-title {
|
|
50
|
-
border-top-color: transparent;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
.gem-c-pagination__link-icon {
|
|
54
|
-
fill: $govuk-text-colour;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
.gem-c-pagination__link-title {
|
|
60
|
-
display: block;
|
|
61
|
-
border-top: 1px solid $govuk-border-colour;
|
|
62
|
-
padding-top: govuk-spacing(3);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
.gem-c-pagination__link-divider {
|
|
66
|
-
@include govuk-visually-hidden;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
.gem-c-pagination__link-text {
|
|
70
|
-
@include govuk-font(19, $weight: bold);
|
|
71
|
-
margin-left: govuk-spacing(2);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
.gem-c-pagination__link-icon {
|
|
75
|
-
@include govuk-font($size: 24, $line-height: (33.75 / 27));
|
|
76
|
-
display: inline-block;
|
|
77
|
-
margin-bottom: 1px;
|
|
78
|
-
height: .482em;
|
|
79
|
-
width: .63em;
|
|
80
|
-
fill: govuk-colour("dark-grey", $legacy: "grey-1");
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
.gem-c-pagination__link-label {
|
|
84
|
-
display: inline-block;
|
|
85
|
-
margin-top: .1em;
|
|
86
|
-
margin-left: govuk-spacing(5);
|
|
87
|
-
@include govuk-link-decoration;
|
|
88
|
-
|
|
89
|
-
@include govuk-media-query($from: tablet) {
|
|
90
|
-
margin-left: govuk-spacing(6);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
1
|
+
@import "govuk/components/pagination/pagination";
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
mobile_subtext ||= false
|
|
11
11
|
light_text ||= false
|
|
12
12
|
blue_arrow ||= false
|
|
13
|
+
white_arrow ||= false
|
|
13
14
|
simple ||= false
|
|
14
15
|
simple_light ||= false
|
|
15
16
|
dark_icon ||= false
|
|
@@ -29,6 +30,7 @@
|
|
|
29
30
|
css_classes << "gem-c-action-link--nhs" if nhs_icon
|
|
30
31
|
css_classes << "gem-c-action-link--brexit" if brexit_icon
|
|
31
32
|
css_classes << "gem-c-action-link--blue-arrow" if blue_arrow
|
|
33
|
+
css_classes << "gem-c-action-link--white-arrow" if white_arrow
|
|
32
34
|
css_classes << "gem-c-action-link--simple" if simple
|
|
33
35
|
css_classes << "gem-c-action-link--simple-light" if simple_light
|
|
34
36
|
css_classes << "gem-c-action-link--with-subtext" if subtext
|
data/app/views/govuk_publishing_components/components/_previous_and_next_navigation.html.erb
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
<% if local_assigns.include?(:next_page) || local_assigns.include?(:previous_page) %>
|
|
2
|
-
<nav
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
>
|
|
7
|
-
<ul class="gem-c-pagination__list" data-module="gem-track-click">
|
|
2
|
+
<nav
|
|
3
|
+
class="govuk-pagination govuk-pagination--block"
|
|
4
|
+
role="navigation"
|
|
5
|
+
aria-label="<%= t("components.previous_and_next_navigation.pagination") %>"
|
|
6
|
+
>
|
|
8
7
|
<% if local_assigns.include?(:previous_page) %>
|
|
9
8
|
<%
|
|
10
|
-
|
|
11
|
-
link_text_classes
|
|
9
|
+
title = previous_page[:title] || t("components.previous_and_next_navigation.previous")
|
|
10
|
+
link_text_classes = %w[govuk-pagination__link-title]
|
|
11
|
+
link_text_classes << "govuk-pagination__link-title--decorated" unless previous_page[:label].present?
|
|
12
12
|
%>
|
|
13
|
-
<
|
|
14
|
-
<a
|
|
15
|
-
|
|
13
|
+
<div class="govuk-pagination__prev">
|
|
14
|
+
<a class="govuk-link govuk-pagination__link"
|
|
15
|
+
href="<%= previous_page[:url] %>"
|
|
16
16
|
rel="prev"
|
|
17
17
|
data-track-category="contentsClicked"
|
|
18
18
|
data-track-action="previous"
|
|
@@ -20,27 +20,27 @@
|
|
|
20
20
|
data-track-dimension="previous"
|
|
21
21
|
data-track-dimension-index="29"
|
|
22
22
|
>
|
|
23
|
-
<
|
|
24
|
-
<
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
<%= tag.span(previous_page[:title], class: link_text_classes) %>
|
|
28
|
-
</span>
|
|
23
|
+
<svg class="govuk-pagination__icon govuk-pagination__icon--prev" xmlns="http://www.w3.org/2000/svg" height="13" width="15" aria-hidden="true" focusable="false" viewBox="0 0 15 13">
|
|
24
|
+
<path d="m6.5938-0.0078125-6.7266 6.7266 6.7441 6.4062 1.377-1.449-4.1856-3.9768h12.896v-2h-12.984l4.2931-4.293-1.414-1.414z"></path>
|
|
25
|
+
</svg>
|
|
26
|
+
<%= tag.span(title, class: link_text_classes) %>
|
|
29
27
|
<% if previous_page[:label].present? %>
|
|
30
|
-
<span class="
|
|
31
|
-
<span class="
|
|
28
|
+
<span class="govuk-visually-hidden">:</span>
|
|
29
|
+
<span class="govuk-pagination__link-label"><%= previous_page[:label] %></span>
|
|
32
30
|
<% end %>
|
|
33
31
|
</a>
|
|
34
|
-
</
|
|
32
|
+
</div>
|
|
35
33
|
<% end %>
|
|
34
|
+
|
|
36
35
|
<% if local_assigns.include?(:next_page) %>
|
|
37
36
|
<%
|
|
38
|
-
|
|
39
|
-
link_text_classes
|
|
37
|
+
title = next_page[:title] || t("components.previous_and_next_navigation.next")
|
|
38
|
+
link_text_classes = %w[govuk-pagination__link-title]
|
|
39
|
+
link_text_classes << "govuk-pagination__link-title--decorated" unless next_page[:label].present?
|
|
40
40
|
%>
|
|
41
|
-
<
|
|
42
|
-
<a
|
|
43
|
-
|
|
41
|
+
<div class="govuk-pagination__next">
|
|
42
|
+
<a class="govuk-link govuk-pagination__link"
|
|
43
|
+
href="<%= next_page[:url] %>"
|
|
44
44
|
rel="next"
|
|
45
45
|
data-track-category="contentsClicked"
|
|
46
46
|
data-track-action="next"
|
|
@@ -48,19 +48,16 @@
|
|
|
48
48
|
data-track-dimension="next"
|
|
49
49
|
data-track-dimension-index="29"
|
|
50
50
|
>
|
|
51
|
-
<
|
|
52
|
-
<
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
<%= tag.span(next_page[:title], class: link_text_classes) %>
|
|
56
|
-
</span>
|
|
51
|
+
<svg class="govuk-pagination__icon govuk-pagination__icon--next" xmlns="http://www.w3.org/2000/svg" height="13" width="15" aria-hidden="true" focusable="false" viewBox="0 0 15 13">
|
|
52
|
+
<path d="m8.107-0.0078125-1.4136 1.414 4.2926 4.293h-12.986v2h12.896l-4.1855 3.9766 1.377 1.4492 6.7441-6.4062-6.7246-6.7266z"></path>
|
|
53
|
+
</svg>
|
|
54
|
+
<%= tag.span(title, class: link_text_classes) %>
|
|
57
55
|
<% if next_page[:label].present? %>
|
|
58
|
-
<span class="
|
|
59
|
-
<span class="
|
|
56
|
+
<span class="govuk-visually-hidden">:</span>
|
|
57
|
+
<span class="govuk-pagination__link-label"><%= next_page[:label] %></span>
|
|
60
58
|
<% end %>
|
|
61
59
|
</a>
|
|
62
|
-
</
|
|
60
|
+
</div>
|
|
63
61
|
<% end %>
|
|
64
|
-
</
|
|
65
|
-
</nav>
|
|
62
|
+
</nav>
|
|
66
63
|
<% end %>
|
|
@@ -2,46 +2,76 @@
|
|
|
2
2
|
caption ||= nil
|
|
3
3
|
head ||= []
|
|
4
4
|
rows ||= []
|
|
5
|
-
first_cell_is_header ||=false
|
|
5
|
+
first_cell_is_header ||= false
|
|
6
6
|
caption_classes ||= nil
|
|
7
|
-
sortable ||=false
|
|
7
|
+
sortable ||= false
|
|
8
|
+
filterable ||= false
|
|
9
|
+
label ||= t("components.table.filter_label")
|
|
10
|
+
|
|
11
|
+
table_id = "table-id-#{SecureRandom.hex(4)}"
|
|
12
|
+
filter_count_id = "filter-count-id-#{SecureRandom.hex(4)}"
|
|
8
13
|
%>
|
|
9
14
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
15
|
+
<% @table = capture do %>
|
|
16
|
+
<%= GovukPublishingComponents::AppHelpers::TableHelper.helper(self, caption, table_id, {
|
|
17
|
+
sortable: sortable,
|
|
18
|
+
filterable: filterable,
|
|
19
|
+
caption_classes: caption_classes
|
|
20
|
+
}) do |t| %>
|
|
21
|
+
|
|
22
|
+
<% if head.any? %>
|
|
23
|
+
<%= t.head do %>
|
|
24
|
+
<% head.each_with_index do |item, cellindex| %>
|
|
25
|
+
<%= t.header item[:text], {
|
|
26
|
+
format: item[:format],
|
|
27
|
+
href: item[:href],
|
|
28
|
+
data_attributes: item[:data_attributes],
|
|
29
|
+
sort_direction: item[:sort_direction]
|
|
30
|
+
} %>
|
|
31
|
+
<% end %>
|
|
24
32
|
<% end %>
|
|
25
33
|
<% end %>
|
|
26
|
-
<% end %>
|
|
27
34
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
35
|
+
<%= t.body do %>
|
|
36
|
+
<% rows.each_with_index do |row, rowindex| %>
|
|
37
|
+
<%= t.row do %>
|
|
38
|
+
<% row.each_with_index do |cell, cellindex| %>
|
|
39
|
+
<% if cellindex == 0 && first_cell_is_header %>
|
|
40
|
+
<%= t.header cell[:text], {
|
|
41
|
+
scope: "row",
|
|
42
|
+
format: cell[:format]
|
|
43
|
+
} %>
|
|
44
|
+
<% else %>
|
|
45
|
+
<%= t.cell cell[:text], {
|
|
46
|
+
format: cell[:format]
|
|
47
|
+
} %>
|
|
48
|
+
<% end %>
|
|
41
49
|
<% end %>
|
|
42
50
|
<% end %>
|
|
43
51
|
<% end %>
|
|
44
52
|
<% end %>
|
|
45
53
|
<% end %>
|
|
54
|
+
<% end %>
|
|
55
|
+
|
|
56
|
+
<% if filterable %>
|
|
57
|
+
<div data-module="table">
|
|
58
|
+
<div class="js-gem-c-table__filter govuk-!-display-none">
|
|
59
|
+
<%= render "govuk_publishing_components/components/input", {
|
|
60
|
+
label: {
|
|
61
|
+
text: label
|
|
62
|
+
},
|
|
63
|
+
name: "filter",
|
|
64
|
+
controls: table_id,
|
|
65
|
+
aria_described_by: filter_count_id,
|
|
66
|
+
} %>
|
|
67
|
+
|
|
68
|
+
<p id="<%= filter_count_id %>" aria-live="polite" class="js-filter-count govuk-visually-hidden" data-count-text="<%= t("components.table.filter_count") %>"></p>
|
|
69
|
+
</div>
|
|
70
|
+
|
|
71
|
+
<%= @table %>
|
|
46
72
|
|
|
73
|
+
<p class="govuk-body govuk-!-display-none js-gem-c-table__message"><%= t("components.table.filter_message") %></p>
|
|
74
|
+
</div>
|
|
75
|
+
<% else %>
|
|
76
|
+
<%= @table %>
|
|
47
77
|
<% end %>
|
|
@@ -189,7 +189,7 @@ examples:
|
|
|
189
189
|
|
|
190
190
|
Each item can also have a `data_attributes` hash. These `data_attributes` are placed on the `button` that triggers the opening and closing - useful for differentiating between each section of the accordion.
|
|
191
191
|
|
|
192
|
-
Data attributes can also be added to the 'Show/hide all' link using the `data_attributes_show_all` option, primarily where custom tracking is required. These attributes are read from the accordion markup and then added to the link by JavaScript (which is how the link is created).
|
|
192
|
+
Data attributes can also be added to the 'Show/hide all' link using the `data_attributes_show_all` option, primarily where custom tracking is required. These attributes are read from the accordion markup and then added to the link by JavaScript (which is how the link is created). If `track_options` within `data_attributes_show_all` is set, then it is possible to pass a custom dimension when 'Show/Hide all' is clicked.
|
|
193
193
|
data:
|
|
194
194
|
data_attributes:
|
|
195
195
|
gtm: gtm-accordion
|
|
@@ -197,6 +197,7 @@ examples:
|
|
|
197
197
|
data_attributes_show_all:
|
|
198
198
|
gtm-event-name: example
|
|
199
199
|
gtm-attributes: "{ 'ui': { 'type': 'type value', 'section': 'section value' } }"
|
|
200
|
+
tracking-options: "{ 'dimension114': 1 }"
|
|
200
201
|
items:
|
|
201
202
|
- heading:
|
|
202
203
|
text: Writing well for the web
|