govuk_publishing_components 29.13.0 → 29.15.1
Sign up to get free protection for your applications and to get access to all the features.
- 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 +27 -22
- 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/models/govuk_publishing_components/audit_applications.rb +31 -9
- data/app/models/govuk_publishing_components/audit_comparer.rb +15 -9
- data/app/views/govuk_publishing_components/audit/_components.html.erb +20 -2
- 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 +61 -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/back_link.yml +1 -1
- data/app/views/govuk_publishing_components/components/docs/big_number.yml +2 -2
- data/app/views/govuk_publishing_components/components/docs/breadcrumbs.yml +2 -2
- data/app/views/govuk_publishing_components/components/docs/button.yml +41 -40
- data/app/views/govuk_publishing_components/components/docs/cards.yml +2 -0
- data/app/views/govuk_publishing_components/components/docs/checkboxes.yml +216 -216
- data/app/views/govuk_publishing_components/components/docs/cookie_banner.yml +2 -1
- data/app/views/govuk_publishing_components/components/docs/copy_to_clipboard.yml +2 -2
- data/app/views/govuk_publishing_components/components/docs/details.yml +5 -1
- data/app/views/govuk_publishing_components/components/docs/document_list.yml +1 -2
- data/app/views/govuk_publishing_components/components/docs/error_alert.yml +4 -0
- data/app/views/govuk_publishing_components/components/docs/error_summary.yml +4 -6
- data/app/views/govuk_publishing_components/components/docs/image_card.yml +2 -1
- data/app/views/govuk_publishing_components/components/docs/intervention.yml +25 -25
- data/app/views/govuk_publishing_components/components/docs/organisation_logo.yml +1 -2
- data/app/views/govuk_publishing_components/components/docs/previous_and_next_navigation.yml +1 -1
- data/app/views/govuk_publishing_components/components/docs/print_link.yml +5 -1
- data/app/views/govuk_publishing_components/components/docs/select.yml +101 -98
- data/app/views/govuk_publishing_components/components/docs/table.yml +36 -1
- data/app/views/govuk_publishing_components/components/docs/tabs.yml +4 -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 +6 -0
- 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 +4 -2
- 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 +26 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d9201a328c875b8cb5c93315a6365ea7dbc632027d0b973f9b0e700c86e01f6a
|
4
|
+
data.tar.gz: 78cd444356c208537d7108cda4c471774a09b140c9db3e7aec1b0899adebf968
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cf29058c5c655fed33c3f10e34728752117387c0006893c70dccf563862a5cc98dae584218e974b40b63b71f64aef1ea8ffb9b9f0c98dde7bbc49fcea331da99
|
7
|
+
data.tar.gz: 94bac53144fd6f7685976fbc884485d054ac991f07e1bee42c31707509cf6702063f3c1b9f67314e54dc48ea5f5d08ab00562a68e2af65b9b7dd0f98a7d5e1e5
|
@@ -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)
|
@@ -10,27 +10,22 @@ window.GOVUK.Modules.GovukAccordion = window.GOVUKFrontend.Accordion;
|
|
10
10
|
function GemAccordion ($module) {
|
11
11
|
this.$module = $module
|
12
12
|
this.sectionClass = 'govuk-accordion__section'
|
13
|
-
this.
|
14
|
-
this.
|
15
|
-
|
16
|
-
this.
|
17
|
-
this.
|
18
|
-
this.
|
19
|
-
|
20
|
-
|
13
|
+
this.sectionExpandedClass = 'govuk-accordion__section--expanded'
|
14
|
+
this.sectionInnerContentClass = 'govuk-accordion__section-content'
|
15
|
+
|
16
|
+
this.sectionHeader = '.govuk-accordion__section-header'
|
17
|
+
this.showAllControls = '.govuk-accordion__show-all'
|
18
|
+
this.sectionButton = '.govuk-accordion__section-button'
|
19
|
+
this.headingText = '.govuk-accordion__section-heading-text'
|
20
|
+
|
21
|
+
// language attribute pulled from data attributes
|
21
22
|
this.$module.actions = {}
|
22
23
|
this.$module.actions.locale = this.$module.getAttribute('data-locale')
|
23
|
-
this.$module.actions.showText = this.$module.getAttribute('data-show-text')
|
24
|
-
this.$module.actions.hideText = this.$module.getAttribute('data-hide-text')
|
25
|
-
this.$module.actions.showAllText = this.$module.getAttribute('data-show-all-text')
|
26
|
-
this.$module.actions.hideAllText = this.$module.getAttribute('data-hide-all-text')
|
27
|
-
this.$module.actions.thisSectionVisuallyHidden = this.$module.getAttribute('data-this-section-visually-hidden')
|
28
24
|
}
|
29
25
|
|
30
26
|
GemAccordion.prototype.init = function () {
|
31
27
|
// Indicate that JavaScript has worked
|
32
|
-
this.$module.classList.add('gem-c-
|
33
|
-
this.$module.querySelector('.' + this.showAllControls).classList.add('gem-c-accordion__show-all')
|
28
|
+
this.$module.querySelector(this.showAllControls).classList.add('gem-c-accordion__show-all')
|
34
29
|
|
35
30
|
// Feature flag for anchor tag navigation used on manuals
|
36
31
|
if (this.$module.getAttribute('data-anchor-navigation') === 'true') {
|
@@ -50,7 +45,7 @@ window.GOVUK.Modules.GovukAccordion = window.GOVUKFrontend.Accordion;
|
|
50
45
|
var showAllAttributes = this.$module.getAttribute('data-show-all-attributes')
|
51
46
|
if (showAllAttributes) {
|
52
47
|
try {
|
53
|
-
var showAll = this.$module.querySelector(
|
48
|
+
var showAll = this.$module.querySelector(this.showAllControls)
|
54
49
|
var values = JSON.parse(showAllAttributes)
|
55
50
|
var keys = Object.keys(values)
|
56
51
|
for (var i = 0; i < keys.length; i++) {
|
@@ -74,7 +69,7 @@ window.GOVUK.Modules.GovukAccordion = window.GOVUKFrontend.Accordion;
|
|
74
69
|
// Add event listeners for links to open accordion sections when navigated to using said anchor links on the page
|
75
70
|
// 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
|
76
71
|
GemAccordion.prototype.addEventListenersForAnchors = function () {
|
77
|
-
var links = this.$module.querySelectorAll(
|
72
|
+
var links = this.$module.querySelectorAll(this.sectionInnerContentClass + ' a[href*="#"]')
|
78
73
|
|
79
74
|
nodeListForEach(links, function (link) {
|
80
75
|
if (link.pathname === window.location.pathname) {
|
@@ -87,7 +82,7 @@ window.GOVUK.Modules.GovukAccordion = window.GOVUKFrontend.Accordion;
|
|
87
82
|
GemAccordion.prototype.openForAnchor = function (hash) {
|
88
83
|
var target = document.getElementById(hash)
|
89
84
|
var $section = this.getContainingSection(target)
|
90
|
-
var $header = $section.querySelector(
|
85
|
+
var $header = $section.querySelector(this.sectionHeader)
|
91
86
|
var $expanded = this.getContainingSection($section)
|
92
87
|
var $parent = $header.parentElement
|
93
88
|
|
@@ -95,7 +90,7 @@ window.GOVUK.Modules.GovukAccordion = window.GOVUKFrontend.Accordion;
|
|
95
90
|
// Should the target anchor link be within the same page, open section - navigate normally
|
96
91
|
// Should the target anchor link be within a different, closed section, open this section
|
97
92
|
// Should the target anchor link be within a different page and different, closed section open this section
|
98
|
-
if ($expanded && (!$parent.classList.contains(this.
|
93
|
+
if ($expanded && (!$parent.classList.contains(this.sectionExpandedClass))) {
|
99
94
|
$header.click()
|
100
95
|
}
|
101
96
|
}
|
@@ -119,11 +114,21 @@ window.GOVUK.Modules.GovukAccordion = window.GOVUKFrontend.Accordion;
|
|
119
114
|
|
120
115
|
// To track the Accordion's "Show all sections" / "Hide all sections" button click events and pass them to the GA event tracking
|
121
116
|
GemAccordion.prototype.addAccordionOpenAllTracking = function () {
|
122
|
-
this.$module.querySelector(
|
117
|
+
this.$module.querySelector(this.showAllControls).addEventListener('click', function (event) {
|
123
118
|
var expanded = event.target.getAttribute('aria-expanded') === 'true'
|
124
119
|
var label = expanded ? 'Show all sections' : 'Hide all sections'
|
125
120
|
var action = expanded ? 'accordionOpened' : 'accordionClosed'
|
126
121
|
var options = { transport: 'beacon', label: label }
|
122
|
+
|
123
|
+
var extraOptions = event.target && event.target.getAttribute('data-track-options')
|
124
|
+
|
125
|
+
// this uses the same logic as track-click.js handleClick
|
126
|
+
// means we can add a custom dimensions on click
|
127
|
+
if (extraOptions) {
|
128
|
+
extraOptions = JSON.parse(extraOptions)
|
129
|
+
for (var k in extraOptions) options[k] = extraOptions[k]
|
130
|
+
}
|
131
|
+
|
127
132
|
if (window.GOVUK.analytics && window.GOVUK.analytics.trackEvent) {
|
128
133
|
window.GOVUK.analytics.trackEvent('pageElementInteraction', action, options)
|
129
134
|
}
|
@@ -131,7 +136,7 @@ window.GOVUK.Modules.GovukAccordion = window.GOVUKFrontend.Accordion;
|
|
131
136
|
}
|
132
137
|
|
133
138
|
GemAccordion.prototype.addEventListenerSections = function () {
|
134
|
-
var sections = this.$module.querySelectorAll(
|
139
|
+
var sections = this.$module.querySelectorAll(this.sectionButton)
|
135
140
|
nodeListForEach(sections, function (section) {
|
136
141
|
section.addEventListener('click', this.addAccordionSectionTracking.bind(this, section))
|
137
142
|
}.bind(this))
|
@@ -140,7 +145,7 @@ window.GOVUK.Modules.GovukAccordion = window.GOVUKFrontend.Accordion;
|
|
140
145
|
// If the Accordion's sections are opened on click, then pass them to the GA event tracking
|
141
146
|
GemAccordion.prototype.addAccordionSectionTracking = function (section) {
|
142
147
|
var expanded = section.getAttribute('aria-expanded') === 'false'
|
143
|
-
var label = section.querySelector(
|
148
|
+
var label = section.querySelector(this.headingText).textContent
|
144
149
|
var action = expanded ? 'accordionOpened' : 'accordionClosed'
|
145
150
|
var options = { transport: 'beacon', label: label }
|
146
151
|
|
@@ -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";
|
@@ -6,6 +6,7 @@ module GovukPublishingComponents
|
|
6
6
|
@path = path
|
7
7
|
application_found = application_exists(path)
|
8
8
|
components_found = []
|
9
|
+
@component_locations = {}
|
9
10
|
@gem_style_references = []
|
10
11
|
@jquery_references = []
|
11
12
|
|
@@ -25,15 +26,15 @@ module GovukPublishingComponents
|
|
25
26
|
@find_all_javascripts = /\/\/ *= require govuk_publishing_components\/all_components/
|
26
27
|
find_javascripts = /(?<=require govuk_publishing_components\/components\/)[a-zA-Z_-]+/
|
27
28
|
|
28
|
-
components_in_templates = find_components(templates, find_components, "templates") || []
|
29
|
-
components_in_stylesheets = find_components(stylesheets, find_stylesheets, "stylesheets") || []
|
30
|
-
components_in_print_stylesheets = find_components(stylesheets, find_print_stylesheets, "print_stylesheets") || []
|
31
|
-
components_in_javascripts = find_components(javascripts, find_javascripts, "javascripts") || []
|
29
|
+
components_in_templates = find_components(templates, find_components, "templates", true) || []
|
30
|
+
components_in_stylesheets = find_components(stylesheets, find_stylesheets, "stylesheets", false) || []
|
31
|
+
components_in_print_stylesheets = find_components(stylesheets, find_print_stylesheets, "print_stylesheets", false) || []
|
32
|
+
components_in_javascripts = find_components(javascripts, find_javascripts, "javascripts", false) || []
|
32
33
|
|
33
34
|
ruby_paths = %w[/app/helpers/ /app/presenters/ /lib/]
|
34
35
|
components_in_ruby = []
|
35
36
|
ruby_paths.each do |ruby_path|
|
36
|
-
components_in_ruby << find_components(Dir["#{path}#{ruby_path}**/*.{rb,erb}"], find_components, "ruby") || []
|
37
|
+
components_in_ruby << find_components(Dir["#{path}#{ruby_path}**/*.{rb,erb}"], find_components, "ruby", true) || []
|
37
38
|
end
|
38
39
|
components_in_ruby = components_in_ruby.flatten.uniq
|
39
40
|
|
@@ -67,17 +68,32 @@ module GovukPublishingComponents
|
|
67
68
|
components_found: components_found,
|
68
69
|
gem_style_references: @gem_style_references.flatten.uniq.sort,
|
69
70
|
jquery_references: @jquery_references.flatten.uniq.sort,
|
71
|
+
component_locations: @component_locations,
|
70
72
|
}
|
71
73
|
end
|
72
74
|
|
73
75
|
private
|
74
76
|
|
75
|
-
def find_components(files, find, type)
|
77
|
+
def find_components(files, find, type, keep_locations)
|
76
78
|
components_found = []
|
77
79
|
|
78
80
|
files.each do |file|
|
79
81
|
src = File.read(file)
|
80
|
-
|
82
|
+
|
83
|
+
if keep_locations
|
84
|
+
components = find_match(find, src, type)
|
85
|
+
if components.any?
|
86
|
+
components_found << components
|
87
|
+
components.each do |component|
|
88
|
+
component_sym = component.to_sym
|
89
|
+
@component_locations[component_sym] = [] unless @component_locations[component_sym]
|
90
|
+
@component_locations[component_sym] << clean_file_path(file)
|
91
|
+
@component_locations[component_sym].sort!
|
92
|
+
end
|
93
|
+
end
|
94
|
+
else
|
95
|
+
components_found << find_match(find, src, type)
|
96
|
+
end
|
81
97
|
|
82
98
|
if type == "javascripts"
|
83
99
|
jquery_references = find_code_references(file, src, /\$\(/)
|
@@ -93,12 +109,16 @@ module GovukPublishingComponents
|
|
93
109
|
components_found.flatten.uniq.sort
|
94
110
|
end
|
95
111
|
|
112
|
+
# looks for components in the given src of a file
|
113
|
+
# returns an array of component names or an empty array
|
96
114
|
def find_match(find, src, type)
|
97
115
|
return %w[all] if src.match(@find_all_stylesheets) && type == "stylesheets"
|
98
116
|
return %w[all] if src.match(@find_all_print_stylesheets) && type == "print_stylesheets"
|
99
117
|
return %w[all] if src.match(@find_all_javascripts) && type == "javascripts"
|
100
118
|
|
101
119
|
matches = src.scan(find)
|
120
|
+
return [] unless matches.any?
|
121
|
+
|
102
122
|
all_matches = []
|
103
123
|
matches.each do |match|
|
104
124
|
all_matches << clean_file_name(match.tr('[])\'"', ""))
|
@@ -108,9 +128,11 @@ module GovukPublishingComponents
|
|
108
128
|
end
|
109
129
|
|
110
130
|
def find_code_references(file, src, regex)
|
111
|
-
clean_file_path
|
131
|
+
return clean_file_path(file) if regex.match?(src)
|
132
|
+
end
|
112
133
|
|
113
|
-
|
134
|
+
def clean_file_path(file)
|
135
|
+
file[/(?<=#{Regexp.escape(@path.to_s)}\/)[\/a-zA-Z_-]+.[a-zA-Z.]+/]
|
114
136
|
end
|
115
137
|
|
116
138
|
def clean_file_name(name)
|
@@ -106,6 +106,7 @@ module GovukPublishingComponents
|
|
106
106
|
warning_count: warnings.length,
|
107
107
|
gem_style_references: result[:gem_style_references],
|
108
108
|
jquery_references: result[:jquery_references],
|
109
|
+
component_locations: result[:component_locations],
|
109
110
|
}
|
110
111
|
else
|
111
112
|
data << {
|
@@ -244,28 +245,33 @@ module GovukPublishingComponents
|
|
244
245
|
(haystack - needle).flatten.sort
|
245
246
|
end
|
246
247
|
|
248
|
+
# returns details of component inclusion by applications
|
247
249
|
def get_components_by_application
|
248
250
|
results = []
|
249
251
|
found_something = false
|
250
252
|
|
251
253
|
@gem_data[:component_listing].each do |component|
|
252
|
-
|
254
|
+
component_name = component[:name]
|
255
|
+
locations = []
|
253
256
|
|
254
257
|
@applications_data.each do |application|
|
255
|
-
next unless application[:application_found]
|
258
|
+
next unless application[:application_found] && application[:component_locations][component_name.to_sym]
|
256
259
|
|
257
|
-
|
260
|
+
application_name = application[:name]
|
258
261
|
found_something = true
|
259
262
|
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
+
locations << {
|
264
|
+
name: application_name,
|
265
|
+
locations: application[:component_locations][component_name.to_sym],
|
266
|
+
}
|
263
267
|
end
|
264
268
|
|
269
|
+
locations = locations.flatten
|
270
|
+
|
265
271
|
results << {
|
266
|
-
component:
|
267
|
-
count:
|
268
|
-
|
272
|
+
component: component_name,
|
273
|
+
count: locations.length,
|
274
|
+
locations: locations,
|
269
275
|
}
|
270
276
|
end
|
271
277
|
|
@@ -63,10 +63,28 @@
|
|
63
63
|
<% @components[:components_by_application].each do |component| %>
|
64
64
|
<div class="govuk-summary-list__row">
|
65
65
|
<dt class="govuk-summary-list__key">
|
66
|
-
<%= component[:component] %> (<%= component[:count] %>)
|
66
|
+
<%= component[:component] %> (<%= pluralize(component[:count], 'use') %>)
|
67
67
|
</dt>
|
68
68
|
<dd class="govuk-summary-list__value">
|
69
|
-
|
69
|
+
<% component[:locations].each do |application| %>
|
70
|
+
<% github_link = 'https://github.com/alphagov/' + application[:name] + '/blob/main/' %>
|
71
|
+
<details class="govuk-details govuk-!-margin-bottom-2" data-module="govuk-details">
|
72
|
+
<summary class="govuk-details__summary">
|
73
|
+
<span class="govuk-details__summary-text">
|
74
|
+
<%= application[:name] %> (<%= application[:locations].length %>)
|
75
|
+
</span>
|
76
|
+
</summary>
|
77
|
+
<div class="govuk-details__text">
|
78
|
+
<ul class="govuk-list govuk-list--bullet">
|
79
|
+
<% application[:locations].each do |location| %>
|
80
|
+
<li>
|
81
|
+
<a href="<%= github_link %><%= location %>" class="govuk-link"><%= location %></a>
|
82
|
+
</li>
|
83
|
+
<% end %>
|
84
|
+
</ul>
|
85
|
+
</div>
|
86
|
+
</details>
|
87
|
+
<% end %>
|
70
88
|
</dd>
|
71
89
|
</div>
|
72
90
|
<% end %>
|
@@ -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
|