govuk_frontend_toolkit 4.18.3 → 4.18.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/.gitignore +1 -0
- data/app/assets/CHANGELOG.md +5 -0
- data/app/assets/Gruntfile.js +21 -22
- data/app/assets/README.md +4 -0
- data/app/assets/VERSION.txt +1 -1
- data/app/assets/docs/javascript.md +29 -28
- data/app/assets/javascripts/govuk/analytics/analytics.js +37 -37
- data/app/assets/javascripts/govuk/analytics/download-link-tracker.js +21 -21
- data/app/assets/javascripts/govuk/analytics/error-tracking.js +19 -19
- data/app/assets/javascripts/govuk/analytics/external-link-tracker.js +23 -24
- data/app/assets/javascripts/govuk/analytics/google-analytics-universal-tracker.js +71 -70
- data/app/assets/javascripts/govuk/analytics/mailto-link-tracker.js +20 -21
- data/app/assets/javascripts/govuk/analytics/print-intent.js +19 -20
- data/app/assets/javascripts/govuk/modules.js +33 -32
- data/app/assets/javascripts/govuk/modules/auto-track-event.js +18 -18
- data/app/assets/javascripts/govuk/multivariate-test.js +83 -85
- data/app/assets/javascripts/govuk/primary-links.js +39 -38
- data/app/assets/javascripts/govuk/selection-buttons.js +57 -58
- data/app/assets/javascripts/govuk/shim-links-with-button-role.js +14 -15
- data/app/assets/javascripts/govuk/stick-at-top-when-scrolling.js +70 -70
- data/app/assets/javascripts/govuk/stop-scrolling-at-footer.js +74 -75
- data/app/assets/javascripts/govuk_toolkit.js +1 -1
- data/app/assets/javascripts/stageprompt.js +24 -25
- data/app/assets/javascripts/vendor/jquery/jquery.player.min.js +1 -1
- data/app/assets/package.json +10 -3
- data/app/assets/spec/manifest.js +2 -0
- data/app/assets/spec/support/console-runner.js +0 -1
- data/app/assets/spec/unit/analytics/analytics.spec.js +51 -47
- data/app/assets/spec/unit/analytics/download-link-tracker.spec.js +59 -51
- data/app/assets/spec/unit/analytics/error-tracking.spec.js +35 -30
- data/app/assets/spec/unit/analytics/external-link-tracker.spec.js +69 -61
- data/app/assets/spec/unit/analytics/google-analytics-universal-tracker.spec.js +129 -122
- data/app/assets/spec/unit/analytics/mailto-link-tracker.spec.js +55 -47
- data/app/assets/spec/unit/modules.spec.js +82 -78
- data/app/assets/spec/unit/modules/auto-track-event.spec.js +45 -40
- data/app/assets/spec/unit/multivariate-test.spec.js +150 -145
- data/app/assets/spec/unit/primary-links.spec.js +53 -47
- data/app/assets/spec/unit/selection-button.spec.js +701 -693
- data/app/assets/spec/unit/shim-links-with-button-role.spec.js +33 -28
- data/app/assets/spec/unit/show-hide-content.spec.js +5 -1
- data/app/assets/spec/unit/stick-at-top-when-scrolling.spec.js +104 -107
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ed31373cbe3fd29495e7825368045f0961c44b00
|
4
|
+
data.tar.gz: 5e1914525810948b8ea7ebeb6a863500c3b8dc7e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6de494a693da9ee1f4650cec2e256de23b91b46627f035e7d688e4ab4625e9dfce928809b6f1ae921e32879bf8de4a32f5492111fe37f88e1742047510128e5c
|
7
|
+
data.tar.gz: 1581b99971f60eebab602605fe1bc1de2e32b69ccec3b4d00653759b9e8f000e76c63d5c3543f08829958e2bebf9bb045f51bf6410a8b19e7b669b4c260f5f34
|
data/app/assets/.gitignore
CHANGED
data/app/assets/CHANGELOG.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
# 4.18.4
|
2
|
+
|
3
|
+
- Lint codebase using standard ([PR #334](https://github.com/alphagov/govuk_frontend_toolkit/pull/334))
|
4
|
+
- Add semicolons at the start of IIFE's ([PR #339](https://github.com/alphagov/govuk_frontend_toolkit/pull/339))
|
5
|
+
|
1
6
|
# 4.18.3
|
2
7
|
|
3
8
|
- For smaller screens (<768px) ensure that the GOVUK.StickAtTopWhenScrolling JS "unsticks" the element which was previously "stuck" (by removing both the class which sets fixed positioning and the shim). ([PR #329](https://github.com/alphagov/govuk_frontend_toolkit/pull/329))
|
data/app/assets/Gruntfile.js
CHANGED
@@ -1,30 +1,29 @@
|
|
1
|
-
module.exports = function(grunt) {
|
2
|
-
var allSassFiles = []
|
3
|
-
|
4
|
-
var path = require('path');
|
1
|
+
module.exports = function (grunt) {
|
2
|
+
var allSassFiles = []
|
5
3
|
|
6
4
|
grunt.file.recurse(
|
7
|
-
|
8
|
-
function(abspath, rootdir, subdir, filename) {
|
9
|
-
|
10
|
-
|
5
|
+
'./stylesheets/',
|
6
|
+
function (abspath, rootdir, subdir, filename) {
|
7
|
+
var relpath
|
8
|
+
if (typeof subdir !== 'undefined') {
|
9
|
+
relpath = subdir + '/' + filename
|
11
10
|
} else {
|
12
|
-
|
11
|
+
relpath = filename
|
13
12
|
}
|
14
13
|
if (filename.match(/\.scss/)) {
|
15
|
-
allSassFiles.push("@import '" + relpath + "';")
|
14
|
+
allSassFiles.push("@import '" + relpath + "';")
|
16
15
|
}
|
17
16
|
}
|
18
|
-
)
|
17
|
+
)
|
19
18
|
|
20
19
|
grunt.file.write(
|
21
|
-
|
22
|
-
allSassFiles.join(
|
23
|
-
)
|
20
|
+
'./spec/stylesheets/test.scss',
|
21
|
+
allSassFiles.join('\n')
|
22
|
+
)
|
24
23
|
|
25
24
|
grunt.initConfig({
|
26
25
|
clean: {
|
27
|
-
sass: [
|
26
|
+
sass: ['spec/stylesheets/test*css']
|
28
27
|
},
|
29
28
|
jasmine: {
|
30
29
|
javascripts: {
|
@@ -53,12 +52,12 @@ module.exports = function(grunt) {
|
|
53
52
|
}
|
54
53
|
}
|
55
54
|
}
|
56
|
-
})
|
55
|
+
})
|
57
56
|
|
58
|
-
grunt.loadNpmTasks('grunt-contrib-clean')
|
59
|
-
grunt.loadNpmTasks('grunt-contrib-jasmine')
|
60
|
-
grunt.loadNpmTasks('grunt-contrib-sass')
|
57
|
+
grunt.loadNpmTasks('grunt-contrib-clean')
|
58
|
+
grunt.loadNpmTasks('grunt-contrib-jasmine')
|
59
|
+
grunt.loadNpmTasks('grunt-contrib-sass')
|
61
60
|
|
62
|
-
grunt.registerTask('test', ['sass', 'clean', 'jasmine'])
|
63
|
-
grunt.registerTask('default', ['test'])
|
64
|
-
}
|
61
|
+
grunt.registerTask('test', ['sass', 'clean', 'jasmine'])
|
62
|
+
grunt.registerTask('default', ['test'])
|
63
|
+
}
|
data/app/assets/README.md
CHANGED
@@ -94,6 +94,10 @@ npm install
|
|
94
94
|
npm test
|
95
95
|
```
|
96
96
|
|
97
|
+
### Standard JavaScript
|
98
|
+
`govuk_frontend_toolkit` uses [standardjs](http://standardjs.com/), an opinionated JavaScript linter.
|
99
|
+
All JavaScript files follow its conventions. [Read more](https://github.com/alphagov/govuk_prototype_kit/blob/master/docs/linting.md)
|
100
|
+
|
97
101
|
### Using the local test runner
|
98
102
|
|
99
103
|
The test suite can be run by opening the `./spec/support/LocalTestRunner.html` file in a browser for a more detailed trace of errors.
|
data/app/assets/VERSION.txt
CHANGED
@@ -1 +1 @@
|
|
1
|
-
4.18.
|
1
|
+
4.18.4
|
@@ -23,7 +23,7 @@ Modules can be found and started by including `govuk/modules.js` and running:
|
|
23
23
|
|
24
24
|
```javascript
|
25
25
|
$(document).ready(function(){
|
26
|
-
GOVUK.modules.start()
|
26
|
+
GOVUK.modules.start()
|
27
27
|
});
|
28
28
|
```
|
29
29
|
|
@@ -32,15 +32,15 @@ This will attempt to find and start all modules in the page. For the example abo
|
|
32
32
|
The module will be instantiated and then its `start` method called. The HTML element with the `data-module` attribute is passed as the first argument to the module. This limits modules to acting only within their containing elements.
|
33
33
|
|
34
34
|
```javascript
|
35
|
-
module = new GOVUK.Modules[type]()
|
36
|
-
module.start(element)
|
35
|
+
module = new GOVUK.Modules[type]()
|
36
|
+
module.start(element)
|
37
37
|
```
|
38
38
|
|
39
39
|
Running `GOVUK.modules.start()` multiple times will have no additional affect. When a module is started a flag is set on the element using the data attribute `module-started`. `data-module-started` is a reserved attribute. It can however be called with an element as the first argument, to allow modules to be started in dynamically loaded content:
|
40
40
|
|
41
41
|
```javascript
|
42
|
-
var $container = $('.dynamic-content')
|
43
|
-
GOVUK.modules.start($container)
|
42
|
+
var $container = $('.dynamic-content')
|
43
|
+
GOVUK.modules.start($container)
|
44
44
|
```
|
45
45
|
|
46
46
|
### Module structure
|
@@ -49,14 +49,15 @@ A module must add its constructor to `GOVUK.Modules` and it must have a `start`
|
|
49
49
|
The simplest module looks like:
|
50
50
|
|
51
51
|
```javascript
|
52
|
-
(function(Modules) {
|
53
|
-
|
52
|
+
;(function(Modules) {
|
53
|
+
'use strict'
|
54
|
+
|
54
55
|
Modules.SomeModule = function() {
|
55
56
|
this.start = function($element) {
|
56
57
|
// module code
|
57
58
|
}
|
58
|
-
}
|
59
|
-
})(window.GOVUK.Modules)
|
59
|
+
}
|
60
|
+
})(window.GOVUK.Modules)
|
60
61
|
```
|
61
62
|
|
62
63
|
### Writing modules
|
@@ -80,8 +81,8 @@ Beginning with a set of event listeners clearly indicates the module’s intenti
|
|
80
81
|
|
81
82
|
```js
|
82
83
|
this.start = function($element) {
|
83
|
-
$element.on('click', '.js-toggle', toggle)
|
84
|
-
$element.on('click', '.js-cancel', cancel)
|
84
|
+
$element.on('click', '.js-toggle', toggle)
|
85
|
+
$element.on('click', '.js-cancel', cancel)
|
85
86
|
}
|
86
87
|
```
|
87
88
|
|
@@ -302,13 +303,13 @@ To add it to all lists which have items with the class `primary-item` use
|
|
302
303
|
something like:
|
303
304
|
|
304
305
|
```javascript
|
305
|
-
GOVUK.primaryLinks.init('.primary-item')
|
306
|
+
GOVUK.primaryLinks.init('.primary-item')
|
306
307
|
```
|
307
308
|
|
308
309
|
Or to add it just to that list you could use:
|
309
310
|
|
310
311
|
```javascript
|
311
|
-
new GOVUK.PrimaryList($('#primary-list'), '.primary-item')
|
312
|
+
new GOVUK.PrimaryList($('#primary-list'), '.primary-item')
|
312
313
|
```
|
313
314
|
|
314
315
|
## Stick at top when scrolling
|
@@ -333,7 +334,7 @@ The following would cause the element to stay when you scroll:
|
|
333
334
|
```
|
334
335
|
|
335
336
|
```javascript
|
336
|
-
GOVUK.stickAtTopWhenScrolling.init()
|
337
|
+
GOVUK.stickAtTopWhenScrolling.init()
|
337
338
|
```
|
338
339
|
|
339
340
|
If you also include the `stopScrollingAtFooter` JavaScript this will also try
|
@@ -356,14 +357,14 @@ When the input is focused or its `checked` attribute is set, classes are added t
|
|
356
357
|
To apply this behaviour to elements with the above HTML pattern, call the `GOVUK.SelectionButtons` constructor with their inputs:
|
357
358
|
|
358
359
|
```
|
359
|
-
var $buttons = $("label input[type='radio'], label input[type='checkbox']")
|
360
|
-
var selectionButtons = new GOVUK.SelectionButtons($buttons)
|
360
|
+
var $buttons = $("label input[type='radio'], label input[type='checkbox']")
|
361
|
+
var selectionButtons = new GOVUK.SelectionButtons($buttons)
|
361
362
|
```
|
362
363
|
|
363
364
|
You can also call `GOVUK.SelectionButtons` with a selector:
|
364
365
|
|
365
366
|
```
|
366
|
-
var selectionButtons = new GOVUK.SelectionButtons("label input[type='radio'], label input[type='checkbox']")
|
367
|
+
var selectionButtons = new GOVUK.SelectionButtons("label input[type='radio'], label input[type='checkbox']")
|
367
368
|
```
|
368
369
|
|
369
370
|
This will bind all events to the document, meaning any changes to content (for example, by AJAX) will not effect the button's behaviour.
|
@@ -371,10 +372,10 @@ This will bind all events to the document, meaning any changes to content (for e
|
|
371
372
|
The classes that get added to the `<label>` tags can be passed in as options:
|
372
373
|
|
373
374
|
```
|
374
|
-
var $buttons = $("label input[type='radio'], label input[type='checkbox']")
|
375
|
-
var selectionButtons = new GOVUK.SelectionButtons($buttons, { focusedClass : 'selectable-focused', selectedClass : 'selectable-selected' })
|
375
|
+
var $buttons = $("label input[type='radio'], label input[type='checkbox']")
|
376
|
+
var selectionButtons = new GOVUK.SelectionButtons($buttons, { focusedClass : 'selectable-focused', selectedClass : 'selectable-selected' })
|
376
377
|
|
377
|
-
var selectionButtons = new GOVUK.SelectionButtons("label input[type='radio'], label input[type='checkbox']", { focusedClass : 'selectable-focused', selectedClass : 'selectable-selected' })
|
378
|
+
var selectionButtons = new GOVUK.SelectionButtons("label input[type='radio'], label input[type='checkbox']", { focusedClass : 'selectable-focused', selectedClass : 'selectable-selected' })
|
378
379
|
```
|
379
380
|
|
380
381
|
#### destroy method
|
@@ -393,8 +394,8 @@ The previous method of calling selection buttons is now deprecated. If you need
|
|
393
394
|
|
394
395
|
```
|
395
396
|
GOVUK.selectionButtons = function (elms, opts) {
|
396
|
-
new GOVUK.SelectionButtons(elms, opts)
|
397
|
-
}
|
397
|
+
new GOVUK.SelectionButtons(elms, opts)
|
398
|
+
}
|
398
399
|
```
|
399
400
|
|
400
401
|
This method will mean the `destroy` method is not available to call.
|
@@ -412,7 +413,7 @@ By default, this behaviour will only be applied to links with a role of button.
|
|
412
413
|
```
|
413
414
|
|
414
415
|
```javascript
|
415
|
-
GOVUK.shimLinksWithButtonRole.init()
|
416
|
+
GOVUK.shimLinksWithButtonRole.init()
|
416
417
|
```
|
417
418
|
|
418
419
|
If you need to override the elements this is applied to then you can do that by passing in a custom selector to the initialiser:
|
@@ -420,7 +421,7 @@ If you need to override the elements this is applied to then you can do that by
|
|
420
421
|
```javascript
|
421
422
|
GOVUK.shimLinksWithButtonRole.init({
|
422
423
|
selector: '.my-class'
|
423
|
-
})
|
424
|
+
})
|
424
425
|
```
|
425
426
|
|
426
427
|
It’s also possible to define more or different keycodes to activate against:
|
@@ -457,8 +458,8 @@ When the input's `checked` attribute is set, the show/hide content's `.js-hidden
|
|
457
458
|
To apply this behaviour to elements with the above HTML pattern, call the `GOVUK.ShowHideContent` constructor:
|
458
459
|
|
459
460
|
```
|
460
|
-
var showHideContent = new GOVUK.ShowHideContent()
|
461
|
-
showHideContent.init()
|
461
|
+
var showHideContent = new GOVUK.ShowHideContent()
|
462
|
+
showHideContent.init()
|
462
463
|
```
|
463
464
|
|
464
465
|
This will bind two event handlers to $(document.body), one for radio inputs and one for checkboxes. By listening for events bubbling up to the `body` tag, additional show/hide content added to the page will still be picked up after `.init()` is called.
|
@@ -466,6 +467,6 @@ This will bind two event handlers to $(document.body), one for radio inputs and
|
|
466
467
|
Alternatively, pass in your own selector. In the example below, event handlers are bound to the form instead.
|
467
468
|
|
468
469
|
```
|
469
|
-
var showHideContent = new GOVUK.ShowHideContent()
|
470
|
-
showHideContent.init($('form.example'))
|
470
|
+
var showHideContent = new GOVUK.ShowHideContent()
|
471
|
+
showHideContent.init($('form.example'))
|
471
472
|
```
|
@@ -1,38 +1,38 @@
|
|
1
|
-
(function(global) {
|
2
|
-
|
1
|
+
;(function (global) {
|
2
|
+
'use strict'
|
3
3
|
|
4
|
-
var GOVUK = global.GOVUK || {}
|
4
|
+
var GOVUK = global.GOVUK || {}
|
5
5
|
|
6
6
|
// For usage and initialisation see:
|
7
7
|
// https://github.com/alphagov/govuk_frontend_toolkit/blob/master/docs/analytics.md#create-an-analytics-tracker
|
8
8
|
|
9
|
-
var Analytics = function(config) {
|
10
|
-
this.trackers = []
|
11
|
-
if (typeof config.universalId
|
12
|
-
var universalId = config.universalId
|
13
|
-
delete config.universalId
|
14
|
-
this.trackers.push(new GOVUK.GoogleAnalyticsUniversalTracker(universalId, config))
|
9
|
+
var Analytics = function (config) {
|
10
|
+
this.trackers = []
|
11
|
+
if (typeof config.universalId !== 'undefined') {
|
12
|
+
var universalId = config.universalId
|
13
|
+
delete config.universalId
|
14
|
+
this.trackers.push(new GOVUK.GoogleAnalyticsUniversalTracker(universalId, config))
|
15
15
|
}
|
16
|
-
}
|
16
|
+
}
|
17
17
|
|
18
|
-
Analytics.prototype.sendToTrackers = function(method, args) {
|
18
|
+
Analytics.prototype.sendToTrackers = function (method, args) {
|
19
19
|
for (var i = 0, l = this.trackers.length; i < l; i++) {
|
20
|
-
var tracker = this.trackers[i]
|
21
|
-
|
20
|
+
var tracker = this.trackers[i]
|
21
|
+
var fn = tracker[method]
|
22
22
|
|
23
|
-
if (typeof fn ===
|
24
|
-
fn.apply(tracker, args)
|
23
|
+
if (typeof fn === 'function') {
|
24
|
+
fn.apply(tracker, args)
|
25
25
|
}
|
26
26
|
}
|
27
|
-
}
|
27
|
+
}
|
28
28
|
|
29
|
-
Analytics.load = function() {
|
30
|
-
GOVUK.GoogleAnalyticsUniversalTracker.load()
|
31
|
-
}
|
29
|
+
Analytics.load = function () {
|
30
|
+
GOVUK.GoogleAnalyticsUniversalTracker.load()
|
31
|
+
}
|
32
32
|
|
33
|
-
Analytics.prototype.trackPageview = function(path, title, options) {
|
34
|
-
this.sendToTrackers('trackPageview', arguments)
|
35
|
-
}
|
33
|
+
Analytics.prototype.trackPageview = function (path, title, options) {
|
34
|
+
this.sendToTrackers('trackPageview', arguments)
|
35
|
+
}
|
36
36
|
|
37
37
|
/*
|
38
38
|
https://developers.google.com/analytics/devguides/collection/analyticsjs/events
|
@@ -40,30 +40,30 @@
|
|
40
40
|
options.value – Values must be non-negative. Useful to pass counts
|
41
41
|
options.nonInteraction – Prevent event from impacting bounce rate
|
42
42
|
*/
|
43
|
-
Analytics.prototype.trackEvent = function(category, action, options) {
|
44
|
-
this.sendToTrackers('trackEvent', arguments)
|
45
|
-
}
|
43
|
+
Analytics.prototype.trackEvent = function (category, action, options) {
|
44
|
+
this.sendToTrackers('trackEvent', arguments)
|
45
|
+
}
|
46
46
|
|
47
|
-
Analytics.prototype.trackShare = function(network) {
|
48
|
-
this.sendToTrackers('trackSocial', [network, 'share', location.pathname])
|
49
|
-
}
|
47
|
+
Analytics.prototype.trackShare = function (network) {
|
48
|
+
this.sendToTrackers('trackSocial', [network, 'share', global.location.pathname])
|
49
|
+
}
|
50
50
|
|
51
51
|
/*
|
52
52
|
The custom dimension index must be configured within the
|
53
53
|
Universal Analytics profile
|
54
54
|
*/
|
55
|
-
Analytics.prototype.setDimension = function(index, value) {
|
56
|
-
this.sendToTrackers('setDimension', arguments)
|
57
|
-
}
|
55
|
+
Analytics.prototype.setDimension = function (index, value) {
|
56
|
+
this.sendToTrackers('setDimension', arguments)
|
57
|
+
}
|
58
58
|
|
59
59
|
/*
|
60
60
|
Add a beacon to track a page in another GA account on another domain.
|
61
61
|
*/
|
62
|
-
Analytics.prototype.addLinkedTrackerDomain = function(trackerId, name, domain) {
|
63
|
-
this.sendToTrackers('addLinkedTrackerDomain', arguments)
|
64
|
-
}
|
62
|
+
Analytics.prototype.addLinkedTrackerDomain = function (trackerId, name, domain) {
|
63
|
+
this.sendToTrackers('addLinkedTrackerDomain', arguments)
|
64
|
+
}
|
65
65
|
|
66
|
-
GOVUK.Analytics = Analytics
|
66
|
+
GOVUK.Analytics = Analytics
|
67
67
|
|
68
|
-
global.GOVUK = GOVUK
|
69
|
-
})(window)
|
68
|
+
global.GOVUK = GOVUK
|
69
|
+
})(window)
|
@@ -1,41 +1,41 @@
|
|
1
|
-
(function(global) {
|
2
|
-
|
1
|
+
;(function (global) {
|
2
|
+
'use strict'
|
3
3
|
|
4
|
-
var $ = global.jQuery
|
5
|
-
var GOVUK = global.GOVUK || {}
|
4
|
+
var $ = global.jQuery
|
5
|
+
var GOVUK = global.GOVUK || {}
|
6
6
|
|
7
|
-
GOVUK.analyticsPlugins = GOVUK.analyticsPlugins || {}
|
7
|
+
GOVUK.analyticsPlugins = GOVUK.analyticsPlugins || {}
|
8
8
|
GOVUK.analyticsPlugins.downloadLinkTracker = function (options) {
|
9
|
-
|
10
|
-
|
9
|
+
options = options || {}
|
10
|
+
var downloadLinkSelector = options.selector
|
11
11
|
|
12
12
|
if (downloadLinkSelector) {
|
13
|
-
$('body').on('click', downloadLinkSelector, trackDownload)
|
13
|
+
$('body').on('click', downloadLinkSelector, trackDownload)
|
14
14
|
}
|
15
15
|
|
16
|
-
function trackDownload(evt) {
|
17
|
-
var $link = getLinkFromEvent(evt)
|
18
|
-
|
19
|
-
|
20
|
-
|
16
|
+
function trackDownload (evt) {
|
17
|
+
var $link = getLinkFromEvent(evt)
|
18
|
+
var href = $link.attr('href')
|
19
|
+
var evtOptions = {transport: 'beacon'}
|
20
|
+
var linkText = $.trim($link.text())
|
21
21
|
|
22
22
|
if (linkText) {
|
23
|
-
evtOptions.label = linkText
|
23
|
+
evtOptions.label = linkText
|
24
24
|
}
|
25
25
|
|
26
|
-
GOVUK.analytics.trackEvent('Download Link Clicked', href, evtOptions)
|
26
|
+
GOVUK.analytics.trackEvent('Download Link Clicked', href, evtOptions)
|
27
27
|
}
|
28
28
|
|
29
|
-
function getLinkFromEvent(evt) {
|
30
|
-
var $target = $(evt.target)
|
29
|
+
function getLinkFromEvent (evt) {
|
30
|
+
var $target = $(evt.target)
|
31
31
|
|
32
32
|
if (!$target.is('a')) {
|
33
|
-
$target = $target.parents('a')
|
33
|
+
$target = $target.parents('a')
|
34
34
|
}
|
35
35
|
|
36
|
-
return $target
|
36
|
+
return $target
|
37
37
|
}
|
38
38
|
}
|
39
39
|
|
40
|
-
global.GOVUK = GOVUK
|
41
|
-
})(window)
|
40
|
+
global.GOVUK = GOVUK
|
41
|
+
})(window)
|
@@ -1,51 +1,51 @@
|
|
1
1
|
// Extension to track errors using google analytics as a data store.
|
2
|
-
(function(global) {
|
3
|
-
|
2
|
+
;(function (global) {
|
3
|
+
'use strict'
|
4
4
|
|
5
|
-
var GOVUK = global.GOVUK || {}
|
5
|
+
var GOVUK = global.GOVUK || {}
|
6
6
|
|
7
|
-
GOVUK.analyticsPlugins = GOVUK.analyticsPlugins || {}
|
7
|
+
GOVUK.analyticsPlugins = GOVUK.analyticsPlugins || {}
|
8
8
|
|
9
9
|
GOVUK.analyticsPlugins.error = function (options) {
|
10
|
-
|
11
|
-
|
10
|
+
options = options || {}
|
11
|
+
var filenameMustMatch = options.filenameMustMatch
|
12
12
|
|
13
13
|
var trackJavaScriptError = function (e) {
|
14
|
-
var errorFilename = e.filename
|
15
|
-
|
14
|
+
var errorFilename = e.filename
|
15
|
+
var errorSource = errorFilename + ': ' + e.lineno
|
16
16
|
|
17
17
|
if (shouldTrackThisError(errorFilename)) {
|
18
18
|
GOVUK.analytics.trackEvent('JavaScript Error', e.message, {
|
19
19
|
label: errorSource,
|
20
20
|
value: 1,
|
21
21
|
nonInteraction: true
|
22
|
-
})
|
22
|
+
})
|
23
23
|
}
|
24
|
-
}
|
24
|
+
}
|
25
25
|
|
26
|
-
function shouldTrackThisError(errorFilename) {
|
26
|
+
function shouldTrackThisError (errorFilename) {
|
27
27
|
// Errors in page should always be tracked
|
28
28
|
// If there's no filename filter, everything is tracked
|
29
29
|
if (!errorFilename || !filenameMustMatch) {
|
30
|
-
return true
|
30
|
+
return true
|
31
31
|
}
|
32
32
|
|
33
33
|
// If there's a filter and the error matches it, track it
|
34
34
|
if (filenameMustMatch.test(errorFilename)) {
|
35
|
-
return true
|
35
|
+
return true
|
36
36
|
}
|
37
37
|
|
38
|
-
return false
|
38
|
+
return false
|
39
39
|
}
|
40
40
|
|
41
41
|
if (global.addEventListener) {
|
42
|
-
global.addEventListener('error', trackJavaScriptError, false)
|
42
|
+
global.addEventListener('error', trackJavaScriptError, false)
|
43
43
|
} else if (global.attachEvent) {
|
44
|
-
global.attachEvent('onerror', trackJavaScriptError)
|
44
|
+
global.attachEvent('onerror', trackJavaScriptError)
|
45
45
|
} else {
|
46
|
-
global.onerror = trackJavaScriptError
|
46
|
+
global.onerror = trackJavaScriptError
|
47
47
|
}
|
48
48
|
}
|
49
49
|
|
50
|
-
global.GOVUK = GOVUK
|
51
|
-
})(window)
|
50
|
+
global.GOVUK = GOVUK
|
51
|
+
})(window)
|