govuk_frontend_toolkit 7.4.2 → 7.5.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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eff63e0599f9da09739df587ffd34308b7eb485e94d1cceb8a86c1d44f67ccbc
|
4
|
+
data.tar.gz: 9abe419f1eea6dc31ed054d7028cf2057a4d4a7e2e3969116c3510e1b39205ea
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d813921775ca00d88421a4b46102acae335295bf45f7655fc7b9ced2c1ebc212eb25c83e1932aa90453834392fff2fd791d50f200fef96c1b9a3f0d4f1edb859
|
7
|
+
data.tar.gz: 12516e2bfe55aa4d1eceafa8ea9a346020174570edbd83235fc3f2c5d4433095d79acdd4159724b8fa8b4c3bf94218fe00d29d8485fa124232e253a61937c534
|
data/app/assets/CHANGELOG.md
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
# 7.5.0
|
2
|
+
|
3
|
+
- Implement optional stripping of dates for arguments passed to GA: ([PR #459](https://github.com/alphagov/govuk_frontend_toolkit/pull/459))
|
4
|
+
|
1
5
|
# 7.4.2
|
2
6
|
|
3
7
|
- Remove the deprecation warning in javascripts/govuk/selection-buttons.js as it is coupled to a different project which is not always used with this gem.
|
data/app/assets/VERSION.txt
CHANGED
@@ -1 +1 @@
|
|
1
|
-
7.
|
1
|
+
7.5.0
|
@@ -7,7 +7,7 @@ The toolkit provides an abstraction around analytics to make tracking pageviews,
|
|
7
7
|
* a generic Analytics wrapper that allows multiple trackers to be configured
|
8
8
|
* sensible defaults such as anonymising IPs
|
9
9
|
* data coercion into the format required by Google Analytics (eg a custom dimension’s value must be a string)
|
10
|
-
* stripping of PII from data sent to the tracker (strips email by default, can be configured to also strip UK postcodes)
|
10
|
+
* stripping of PII from data sent to the tracker (strips email by default, can be configured to also strip dates and UK postcodes)
|
11
11
|
|
12
12
|
## Create an analytics tracker
|
13
13
|
|
@@ -223,7 +223,8 @@ Mailto Link Clicked | mailto:name@email.com | Link text
|
|
223
223
|
The tracker will strip any PII it detects from all arguments sent to the
|
224
224
|
tracker. If a PII is detected in the arguments it is replaced with a
|
225
225
|
placeholder value of `[<type of PII removed>]`; for example: `[email]` if an
|
226
|
-
email address was removed,
|
226
|
+
email address was removed, `[date]` if a date was removed, or `[postcode]`
|
227
|
+
if a postcode was removed.
|
227
228
|
|
228
229
|
We have to parse all arguments which means that if you don't pass a path to
|
229
230
|
`trackPageView` to track the current page we have to extract the current page
|
@@ -234,21 +235,22 @@ part of the URL anyway so this doesn't change the behaviour other than to make
|
|
234
235
|
the path explicit.
|
235
236
|
|
236
237
|
By default we strip email addresses, but it can also be configured to strip
|
237
|
-
postcodes too.
|
238
|
-
cause false positives. If you know you are likely to
|
239
|
-
the data you send to the tracker you can configure
|
240
|
-
initialize time as follows:
|
238
|
+
dates and postcodes too. Dates and postcodes are off by default because
|
239
|
+
they're more likely to cause false positives. If you know you are likely to
|
240
|
+
include dates or postcodes in the data you send to the tracker you can configure
|
241
|
+
to strip postcodes at initialize time as follows:
|
241
242
|
|
242
243
|
```js
|
243
244
|
GOVUK.analytics = new GOVUK.Analytics({
|
244
245
|
universalId: 'UA-XXXXXXXX-X',
|
245
246
|
cookieDomain: cookieDomain,
|
247
|
+
stripDatePII: true,
|
246
248
|
stripPostcodePII: true
|
247
249
|
});
|
248
250
|
````
|
249
251
|
|
250
|
-
Any value other than the JS literal `true`
|
251
|
-
|
252
|
+
Any value other than the JS literal `true` will leave the analytics module
|
253
|
+
configured not to strip.
|
252
254
|
|
253
255
|
#### Avoding false positives
|
254
256
|
|
@@ -258,8 +260,8 @@ to every document can sometimes contain a string of characters that look like a
|
|
258
260
|
UK postcode: in `eed5b92e-8279-4ca9-a141-5c35ed22fcf1` the substring `c35ed` in
|
259
261
|
the final portion looks like a postcode, `C3 5ED`, and will be transformed into
|
260
262
|
`eed5b92e-8279-4ca9-a141-5[postcode]22fcf1` which breaks the `content_id`. To
|
261
|
-
send data that you know is not PII, but it looks like an email address
|
262
|
-
postcode you can provide your arguments wrapped in a `GOVUK.Analytics.PIISafe`
|
263
|
+
send data that you know is not PII, but it looks like an email address, a date,
|
264
|
+
or a UK postcode you can provide your arguments wrapped in a `GOVUK.Analytics.PIISafe`
|
263
265
|
object. If any argument to an analytics function is an instance of one of these
|
264
266
|
objects the value contained within will be extracted and sent directly to the
|
265
267
|
analytics tracker without attempting to strip PII from it. For example:
|
@@ -4,11 +4,19 @@
|
|
4
4
|
var GOVUK = global.GOVUK || {}
|
5
5
|
var EMAIL_PATTERN = /[^\s=/?&]+(?:@|%40)[^\s=/?&]+/g
|
6
6
|
var POSTCODE_PATTERN = /[A-PR-UWYZ][A-HJ-Z]?[0-9][0-9A-HJKMNPR-Y]?(?:[\s+]|%20)*[0-9][ABD-HJLNPQ-Z]{2}/gi
|
7
|
+
var DATE_PATTERN = /\d{4}(-?)\d{2}(-?)\d{2}/g
|
7
8
|
|
8
9
|
// For usage and initialisation see:
|
9
10
|
// https://github.com/alphagov/govuk_frontend_toolkit/blob/master/docs/analytics.md#create-an-analytics-tracker
|
10
11
|
|
11
12
|
var Analytics = function (config) {
|
13
|
+
this.stripDatePII = false
|
14
|
+
if (typeof config.stripDatePII !== 'undefined') {
|
15
|
+
this.stripDatePII = (config.stripDatePII === true)
|
16
|
+
// remove the option so we don't pass it to other trackers - it's not
|
17
|
+
// their concern
|
18
|
+
delete config.stripDatePII
|
19
|
+
}
|
12
20
|
this.stripPostcodePII = false
|
13
21
|
if (typeof config.stripPostcodePII !== 'undefined') {
|
14
22
|
this.stripPostcodePII = (config.stripPostcodePII === true)
|
@@ -47,12 +55,14 @@
|
|
47
55
|
}
|
48
56
|
|
49
57
|
Analytics.prototype.stripPIIFromString = function (string) {
|
50
|
-
var
|
58
|
+
var stripped = string.replace(EMAIL_PATTERN, '[email]')
|
59
|
+
if (this.stripDatePII === true) {
|
60
|
+
stripped = stripped.replace(DATE_PATTERN, '[date]')
|
61
|
+
}
|
51
62
|
if (this.stripPostcodePII === true) {
|
52
|
-
|
53
|
-
} else {
|
54
|
-
return emailStripped
|
63
|
+
stripped = stripped.replace(POSTCODE_PATTERN, '[postcode]')
|
55
64
|
}
|
65
|
+
return stripped
|
56
66
|
}
|
57
67
|
|
58
68
|
Analytics.prototype.stripPIIFromObject = function (object) {
|
@@ -33,6 +33,21 @@ describe('GOVUK.Analytics', function () {
|
|
33
33
|
expect(universalSetupArguments[2]).toEqual(['set', 'displayFeaturesTask', null])
|
34
34
|
})
|
35
35
|
|
36
|
+
it('is configured not to strip date data from GA calls', function () {
|
37
|
+
expect(analytics.stripDatePII).toEqual(false)
|
38
|
+
})
|
39
|
+
|
40
|
+
it('can be told to strip date data from GA calls', function () {
|
41
|
+
analytics = new GOVUK.Analytics({
|
42
|
+
universalId: 'universal-id',
|
43
|
+
cookieDomain: '.www.gov.uk',
|
44
|
+
siteSpeedSampleRate: 100,
|
45
|
+
stripDatePII: true
|
46
|
+
})
|
47
|
+
|
48
|
+
expect(analytics.stripDatePII).toEqual(true)
|
49
|
+
})
|
50
|
+
|
36
51
|
it('is configured not to strip postcode data from GA calls', function () {
|
37
52
|
expect(analytics.stripPostcodePII).toEqual(false)
|
38
53
|
})
|
@@ -150,6 +165,35 @@ describe('GOVUK.Analytics', function () {
|
|
150
165
|
expect(window.ga.calls.mostRecent().args).toEqual(['set', 'dimension1', '[email]']) // set dimension ignores extra options
|
151
166
|
})
|
152
167
|
|
168
|
+
it('leaves dates embedded in arguments by default', function () {
|
169
|
+
analytics.trackPageview('/path/to/an/embedded/2018-01-01/postcode/?with=an&postcode=2017-01-01', '20192217', { label: '12345678', value: ['data', 'data', 'someone has added their personal9999-9999 postcode'] })
|
170
|
+
expect(window.ga.calls.mostRecent().args).toEqual(['send', 'pageview', { page: '/path/to/an/embedded/2018-01-01/postcode/?with=an&postcode=2017-01-01', title: '20192217', label: '12345678', value: ['data', 'data', 'someone has added their personal9999-9999 postcode'] }])
|
171
|
+
|
172
|
+
analytics.trackEvent('2017-01-01-category', '20192217-action', { label: '12345678', value: ['data', 'data', 'someone has added their personal9999-9999 postcode'] })
|
173
|
+
expect(window.ga.calls.mostRecent().args).toEqual(['send', { hitType: 'event', eventCategory: '2017-01-01-category', eventAction: '20192217-action', eventLabel: '12345678' }]) // trackEvent ignores options other than label or integer values for value
|
174
|
+
|
175
|
+
analytics.setDimension(1, '2017-01-01-value', { label: '12345678', value: ['data', 'data', 'someone has added their personal9999-9999 postcode'] })
|
176
|
+
expect(window.ga.calls.mostRecent().args).toEqual(['set', 'dimension1', '2017-01-01-value']) // set dimension ignores extra options
|
177
|
+
})
|
178
|
+
|
179
|
+
it('strips dates embedded in arguments if configured to do so', function () {
|
180
|
+
analytics = new GOVUK.Analytics({
|
181
|
+
universalId: 'universal-id',
|
182
|
+
cookieDomain: '.www.gov.uk',
|
183
|
+
siteSpeedSampleRate: 100,
|
184
|
+
stripDatePII: true
|
185
|
+
})
|
186
|
+
|
187
|
+
analytics.trackPageview('/path/to/an/embedded/2018-01-01/postcode/?with=an&postcode=2017-01-01', '20192217', { label: '12345678', value: ['data', 'data', 'someone has added their personal9999-9999 postcode'] })
|
188
|
+
expect(window.ga.calls.mostRecent().args).toEqual(['send', 'pageview', { page: '/path/to/an/embedded/[date]/postcode/?with=an&postcode=[date]', title: '[date]', label: '[date]', value: ['data', 'data', 'someone has added their personal[date] postcode'] }])
|
189
|
+
|
190
|
+
analytics.trackEvent('2017-01-01-category', '20192217-action', { label: '12345678', value: ['data', 'data', 'someone has added their personal9999-9999 postcode'] })
|
191
|
+
expect(window.ga.calls.mostRecent().args).toEqual(['send', { hitType: 'event', eventCategory: '[date]-category', eventAction: '[date]-action', eventLabel: '[date]' }]) // trackEvent ignores options other than label or integer values for value
|
192
|
+
|
193
|
+
analytics.setDimension(1, '2017-01-01-value', { label: '12345678', value: ['data', 'data', 'someone has added their personal9999-9999 postcode'] })
|
194
|
+
expect(window.ga.calls.mostRecent().args).toEqual(['set', 'dimension1', '[date]-value']) // set dimension ignores extra options
|
195
|
+
})
|
196
|
+
|
153
197
|
it('leaves postcodes embedded in arguments by default', function () {
|
154
198
|
analytics.trackPageview('/path/to/an/embedded/SW1+1AA/postcode/?with=an&postcode=SP4%207DE', 'TD15 2SE', { label: 'RG209NJ', value: ['data', 'data', 'someone has added their personalIV63 6TU postcode'] })
|
155
199
|
expect(window.ga.calls.mostRecent().args).toEqual(['send', 'pageview', { page: '/path/to/an/embedded/SW1+1AA/postcode/?with=an&postcode=SP4%207DE', title: 'TD15 2SE', label: 'RG209NJ', value: ['data', 'data', 'someone has added their personalIV63 6TU postcode'] }])
|
@@ -179,22 +223,23 @@ describe('GOVUK.Analytics', function () {
|
|
179
223
|
expect(window.ga.calls.mostRecent().args).toEqual(['set', 'dimension1', '[postcode]-value']) // set dimension ignores extra options
|
180
224
|
})
|
181
225
|
|
182
|
-
it('ignores any PIISafe arguments even if they look like emails or postcodes', function () {
|
226
|
+
it('ignores any PIISafe arguments even if they look like emails, dates, or postcodes', function () {
|
183
227
|
analytics = new GOVUK.Analytics({
|
184
228
|
universalId: 'universal-id',
|
185
229
|
cookieDomain: '.www.gov.uk',
|
186
230
|
siteSpeedSampleRate: 100,
|
231
|
+
stripDatePII: true,
|
187
232
|
stripPostcodePII: true
|
188
233
|
})
|
189
234
|
|
190
|
-
analytics.trackPageview(new GOVUK.Analytics.PIISafe('/path/to/an/embedded/SW1+1AA/postcode/?with=an&postcode=SP4%207DE'), new GOVUK.Analytics.PIISafe('an.email@example.com'), { label: new GOVUK.Analytics.PIISafe('another.email@example.com'), value: ['data', 'data', new GOVUK.Analytics.PIISafe('someone has added their personalIV63 6TU postcode')] })
|
191
|
-
expect(window.ga.calls.mostRecent().args).toEqual(['send', 'pageview', { page: '/path/to/an/embedded/SW1+1AA/postcode/?with=an&postcode=SP4%207DE', title: 'an.email@example.com', label: 'another.email@example.com', value: ['data', 'data', 'someone has added their personalIV63 6TU postcode'] }])
|
235
|
+
analytics.trackPageview(new GOVUK.Analytics.PIISafe('/path/to/an/embedded/SW1+1AA/postcode/?with=an&postcode=SP4%207DE'), new GOVUK.Analytics.PIISafe('an.email@example.com 2017-01-01'), { label: new GOVUK.Analytics.PIISafe('another.email@example.com'), value: ['data', 'data', new GOVUK.Analytics.PIISafe('someone has added their personalIV63 6TU postcode')] })
|
236
|
+
expect(window.ga.calls.mostRecent().args).toEqual(['send', 'pageview', { page: '/path/to/an/embedded/SW1+1AA/postcode/?with=an&postcode=SP4%207DE', title: 'an.email@example.com 2017-01-01', label: 'another.email@example.com', value: ['data', 'data', 'someone has added their personalIV63 6TU postcode'] }])
|
192
237
|
|
193
|
-
analytics.trackEvent(new GOVUK.Analytics.PIISafe('SW1+1AA-category'), new GOVUK.Analytics.PIISafe('an.email@example.com-action'), { label: new GOVUK.Analytics.PIISafe('RG209NJ'), value: ['data', 'data', 'someone has added their personalIV63 6TU postcode'] })
|
194
|
-
expect(window.ga.calls.mostRecent().args).toEqual(['send', { hitType: 'event', eventCategory: 'SW1+1AA-category', eventAction: 'an.email@example.com-action', eventLabel: 'RG209NJ' }]) // trackEvent ignores options other than label or integer values for value
|
238
|
+
analytics.trackEvent(new GOVUK.Analytics.PIISafe('SW1+1AA-category'), new GOVUK.Analytics.PIISafe('an.email@example.com-action 2017-01-01'), { label: new GOVUK.Analytics.PIISafe('RG209NJ'), value: ['data', 'data', 'someone has added their personalIV63 6TU postcode'] })
|
239
|
+
expect(window.ga.calls.mostRecent().args).toEqual(['send', { hitType: 'event', eventCategory: 'SW1+1AA-category', eventAction: 'an.email@example.com-action 2017-01-01', eventLabel: 'RG209NJ' }]) // trackEvent ignores options other than label or integer values for value
|
195
240
|
|
196
|
-
analytics.setDimension(1, new GOVUK.Analytics.PIISafe('an.email@SW1+1AA-value.com'), { label: new GOVUK.Analytics.PIISafe('RG209NJ'), value: ['data', 'data', new GOVUK.Analytics.PIISafe('someone has added their personalIV63 6TU postcode')] })
|
197
|
-
expect(window.ga.calls.mostRecent().args).toEqual(['set', 'dimension1', 'an.email@SW1+1AA-value.com']) // set dimension ignores extra options
|
241
|
+
analytics.setDimension(1, new GOVUK.Analytics.PIISafe('an.email@SW1+1AA-value.com 2017-01-01'), { label: new GOVUK.Analytics.PIISafe('RG209NJ'), value: ['data', 'data', new GOVUK.Analytics.PIISafe('someone has added their personalIV63 6TU postcode')] })
|
242
|
+
expect(window.ga.calls.mostRecent().args).toEqual(['set', 'dimension1', 'an.email@SW1+1AA-value.com 2017-01-01']) // set dimension ignores extra options
|
198
243
|
})
|
199
244
|
})
|
200
245
|
|
@@ -228,6 +273,49 @@ describe('GOVUK.Analytics', function () {
|
|
228
273
|
}])
|
229
274
|
})
|
230
275
|
|
276
|
+
it('leaves dates embedded in arguments by default', function () {
|
277
|
+
analytics.trackShare('email', {
|
278
|
+
to: '2017-01-01',
|
279
|
+
label: '20170101',
|
280
|
+
value: ['data', 'data', 'someone has added their personal29990303 postcode']
|
281
|
+
})
|
282
|
+
|
283
|
+
expect(window.ga.calls.mostRecent().args).toEqual(['send', {
|
284
|
+
hitType: 'social',
|
285
|
+
socialNetwork: 'email',
|
286
|
+
socialAction: 'share',
|
287
|
+
socialTarget: jasmine.any(String),
|
288
|
+
to: '2017-01-01',
|
289
|
+
label: '20170101',
|
290
|
+
value: ['data', 'data', 'someone has added their personal29990303 postcode']
|
291
|
+
}])
|
292
|
+
})
|
293
|
+
|
294
|
+
it('strips dates embedded in arguments if configured to do so', function () {
|
295
|
+
analytics = new GOVUK.Analytics({
|
296
|
+
universalId: 'universal-id',
|
297
|
+
cookieDomain: '.www.gov.uk',
|
298
|
+
siteSpeedSampleRate: 100,
|
299
|
+
stripDatePII: true
|
300
|
+
})
|
301
|
+
|
302
|
+
analytics.trackShare('email', {
|
303
|
+
to: '2017-01-01',
|
304
|
+
label: '20170101',
|
305
|
+
value: ['data', 'data', 'someone has added their personal29990303 postcode']
|
306
|
+
})
|
307
|
+
|
308
|
+
expect(window.ga.calls.mostRecent().args).toEqual(['send', {
|
309
|
+
hitType: 'social',
|
310
|
+
socialNetwork: 'email',
|
311
|
+
socialAction: 'share',
|
312
|
+
socialTarget: jasmine.any(String),
|
313
|
+
to: '[date]',
|
314
|
+
label: '[date]',
|
315
|
+
value: ['data', 'data', 'someone has added their personal[date] postcode']
|
316
|
+
}])
|
317
|
+
})
|
318
|
+
|
231
319
|
it('leaves postcodes embedded in arguments by default', function () {
|
232
320
|
analytics.trackShare('email', {
|
233
321
|
to: 'IV63 6TU',
|
@@ -271,7 +359,7 @@ describe('GOVUK.Analytics', function () {
|
|
271
359
|
}])
|
272
360
|
})
|
273
361
|
|
274
|
-
it('ignores any PIISafe arguments even if they look like emails or postcodes', function () {
|
362
|
+
it('ignores any PIISafe arguments even if they look like emails, dates, or postcodes', function () {
|
275
363
|
analytics = new GOVUK.Analytics({
|
276
364
|
universalId: 'universal-id',
|
277
365
|
cookieDomain: '.www.gov.uk',
|
@@ -281,7 +369,7 @@ describe('GOVUK.Analytics', function () {
|
|
281
369
|
|
282
370
|
analytics.trackShare('email', {
|
283
371
|
to: new GOVUK.Analytics.PIISafe('IV63 6TU'),
|
284
|
-
label: new GOVUK.Analytics.PIISafe('an.email@example.com'),
|
372
|
+
label: new GOVUK.Analytics.PIISafe('an.email@example.com 2017-01-01'),
|
285
373
|
value: new GOVUK.Analytics.PIISafe(['data', 'another.email@example.com', 'someone has added their personalTD15 2SE postcode'])
|
286
374
|
})
|
287
375
|
|
@@ -291,7 +379,7 @@ describe('GOVUK.Analytics', function () {
|
|
291
379
|
socialAction: 'share',
|
292
380
|
socialTarget: jasmine.any(String),
|
293
381
|
to: 'IV63 6TU',
|
294
|
-
label: 'an.email@example.com',
|
382
|
+
label: 'an.email@example.com 2017-01-01',
|
295
383
|
value: ['data', 'another.email@example.com', 'someone has added their personalTD15 2SE postcode']
|
296
384
|
}])
|
297
385
|
})
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: govuk_frontend_toolkit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.
|
4
|
+
version: 7.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Government Digital Service
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-04-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|