govuk_frontend_toolkit 4.18.3 → 4.18.4

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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/.gitignore +1 -0
  3. data/app/assets/CHANGELOG.md +5 -0
  4. data/app/assets/Gruntfile.js +21 -22
  5. data/app/assets/README.md +4 -0
  6. data/app/assets/VERSION.txt +1 -1
  7. data/app/assets/docs/javascript.md +29 -28
  8. data/app/assets/javascripts/govuk/analytics/analytics.js +37 -37
  9. data/app/assets/javascripts/govuk/analytics/download-link-tracker.js +21 -21
  10. data/app/assets/javascripts/govuk/analytics/error-tracking.js +19 -19
  11. data/app/assets/javascripts/govuk/analytics/external-link-tracker.js +23 -24
  12. data/app/assets/javascripts/govuk/analytics/google-analytics-universal-tracker.js +71 -70
  13. data/app/assets/javascripts/govuk/analytics/mailto-link-tracker.js +20 -21
  14. data/app/assets/javascripts/govuk/analytics/print-intent.js +19 -20
  15. data/app/assets/javascripts/govuk/modules.js +33 -32
  16. data/app/assets/javascripts/govuk/modules/auto-track-event.js +18 -18
  17. data/app/assets/javascripts/govuk/multivariate-test.js +83 -85
  18. data/app/assets/javascripts/govuk/primary-links.js +39 -38
  19. data/app/assets/javascripts/govuk/selection-buttons.js +57 -58
  20. data/app/assets/javascripts/govuk/shim-links-with-button-role.js +14 -15
  21. data/app/assets/javascripts/govuk/stick-at-top-when-scrolling.js +70 -70
  22. data/app/assets/javascripts/govuk/stop-scrolling-at-footer.js +74 -75
  23. data/app/assets/javascripts/govuk_toolkit.js +1 -1
  24. data/app/assets/javascripts/stageprompt.js +24 -25
  25. data/app/assets/javascripts/vendor/jquery/jquery.player.min.js +1 -1
  26. data/app/assets/package.json +10 -3
  27. data/app/assets/spec/manifest.js +2 -0
  28. data/app/assets/spec/support/console-runner.js +0 -1
  29. data/app/assets/spec/unit/analytics/analytics.spec.js +51 -47
  30. data/app/assets/spec/unit/analytics/download-link-tracker.spec.js +59 -51
  31. data/app/assets/spec/unit/analytics/error-tracking.spec.js +35 -30
  32. data/app/assets/spec/unit/analytics/external-link-tracker.spec.js +69 -61
  33. data/app/assets/spec/unit/analytics/google-analytics-universal-tracker.spec.js +129 -122
  34. data/app/assets/spec/unit/analytics/mailto-link-tracker.spec.js +55 -47
  35. data/app/assets/spec/unit/modules.spec.js +82 -78
  36. data/app/assets/spec/unit/modules/auto-track-event.spec.js +45 -40
  37. data/app/assets/spec/unit/multivariate-test.spec.js +150 -145
  38. data/app/assets/spec/unit/primary-links.spec.js +53 -47
  39. data/app/assets/spec/unit/selection-button.spec.js +701 -693
  40. data/app/assets/spec/unit/shim-links-with-button-role.spec.js +33 -28
  41. data/app/assets/spec/unit/show-hide-content.spec.js +5 -1
  42. data/app/assets/spec/unit/stick-at-top-when-scrolling.spec.js +104 -107
  43. metadata +2 -2
@@ -1,69 +1,77 @@
1
- describe("GOVUK.analyticsPlugins.externalLinkTracker", function() {
2
- var $links;
3
-
4
- beforeEach(function() {
5
- $links = $('\
6
- <div class="external-links">\
7
- <a href="http://www.nationalarchives.gov.uk"> National Archives </a>\
8
- <a href="https://www.nationalarchives.gov.uk"></a>\
9
- <a href="https://www.nationalarchives.gov.uk/one.pdf">National Archives PDF</a>\
10
- <a href="https://www.nationalarchives.gov.uk/an/image/link.png"><img src="/img" /></a>\
11
- </div>\
12
- <div class="internal-links">\
13
- <a href="/some-path">Local link</a>\
14
- <a href="http://fake-hostname.com/some-path">Another local link</a>\
15
- </div>');
16
-
17
- $('html').on('click', function(evt) { evt.preventDefault(); });
18
- $('body').append($links);
19
- GOVUK.analytics = {trackEvent:function(){}};
20
-
21
- spyOn(GOVUK.analyticsPlugins.externalLinkTracker, 'getHostname').and.returnValue('fake-hostname.com');
22
- GOVUK.analyticsPlugins.externalLinkTracker();
23
- });
24
-
25
- afterEach(function() {
26
- $('html').off();
27
- $('body').off();
28
- $links.remove();
29
- delete GOVUK.analytics;
30
- });
31
-
32
- it('listens to click events on only external links', function() {
33
- spyOn(GOVUK.analytics, 'trackEvent');
34
-
35
- $('.external-links a').each(function() {
36
- $(this).trigger('click');
37
- expect(GOVUK.analytics.trackEvent).toHaveBeenCalled();
38
- GOVUK.analytics.trackEvent.calls.reset();
39
- });
40
-
41
- $('.internal-links a').each(function() {
42
- $(this).trigger('click');
43
- expect(GOVUK.analytics.trackEvent).not.toHaveBeenCalled();
44
- GOVUK.analytics.trackEvent.calls.reset();
45
- });
46
- });
47
-
48
- it('listens to click events on elements within external links', function() {
49
- spyOn(GOVUK.analytics, 'trackEvent');
50
-
51
- $('.external-links a img').trigger('click');
1
+ /* global describe it expect beforeEach afterEach spyOn */
2
+
3
+ var $ = window.jQuery
4
+
5
+ describe('GOVUK.analyticsPlugins.externalLinkTracker', function () {
6
+ 'use strict'
7
+ var GOVUK = window.GOVUK
8
+
9
+ var $links
10
+
11
+ beforeEach(function () {
12
+ $links = $(
13
+ '<div class="external-links">' +
14
+ '<a href="http://www.nationalarchives.gov.uk"> National Archives </a>' +
15
+ '<a href="https://www.nationalarchives.gov.uk"></a>' +
16
+ '<a href="https://www.nationalarchives.gov.uk/one.pdf">National Archives PDF</a>' +
17
+ '<a href="https://www.nationalarchives.gov.uk/an/image/link.png"><img src="/img" /></a>' +
18
+ '</div>' +
19
+ '<div class="internal-links">' +
20
+ '<a href="/some-path">Local link</a>' +
21
+ '<a href="http://fake-hostname.com/some-path">Another local link</a>' +
22
+ '</div>'
23
+ )
24
+
25
+ $('html').on('click', function (evt) { evt.preventDefault() })
26
+ $('body').append($links)
27
+ GOVUK.analytics = {trackEvent: function () {}}
28
+
29
+ spyOn(GOVUK.analyticsPlugins.externalLinkTracker, 'getHostname').and.returnValue('fake-hostname.com')
30
+ GOVUK.analyticsPlugins.externalLinkTracker()
31
+ })
32
+
33
+ afterEach(function () {
34
+ $('html').off()
35
+ $('body').off()
36
+ $links.remove()
37
+ delete GOVUK.analytics
38
+ })
39
+
40
+ it('listens to click events on only external links', function () {
41
+ spyOn(GOVUK.analytics, 'trackEvent')
42
+
43
+ $('.external-links a').each(function () {
44
+ $(this).trigger('click')
45
+ expect(GOVUK.analytics.trackEvent).toHaveBeenCalled()
46
+ GOVUK.analytics.trackEvent.calls.reset()
47
+ })
48
+
49
+ $('.internal-links a').each(function () {
50
+ $(this).trigger('click')
51
+ expect(GOVUK.analytics.trackEvent).not.toHaveBeenCalled()
52
+ GOVUK.analytics.trackEvent.calls.reset()
53
+ })
54
+ })
55
+
56
+ it('listens to click events on elements within external links', function () {
57
+ spyOn(GOVUK.analytics, 'trackEvent')
58
+
59
+ $('.external-links a img').trigger('click')
52
60
  expect(GOVUK.analytics.trackEvent).toHaveBeenCalledWith(
53
- 'External Link Clicked', 'https://www.nationalarchives.gov.uk/an/image/link.png', {transport: 'beacon'});
54
- });
61
+ 'External Link Clicked', 'https://www.nationalarchives.gov.uk/an/image/link.png', {transport: 'beacon'})
62
+ })
55
63
 
56
- it('tracks an external link\'s href and link text', function() {
57
- spyOn(GOVUK.analytics, 'trackEvent');
58
- $('.external-links a').trigger('click');
64
+ it('tracks an external link\'s href and link text', function () {
65
+ spyOn(GOVUK.analytics, 'trackEvent')
66
+ $('.external-links a').trigger('click')
59
67
 
60
68
  expect(GOVUK.analytics.trackEvent).toHaveBeenCalledWith(
61
- 'External Link Clicked', 'http://www.nationalarchives.gov.uk', {transport: 'beacon', label: 'National Archives'});
69
+ 'External Link Clicked', 'http://www.nationalarchives.gov.uk', {transport: 'beacon', label: 'National Archives'})
62
70
 
63
71
  expect(GOVUK.analytics.trackEvent).toHaveBeenCalledWith(
64
- 'External Link Clicked', 'https://www.nationalarchives.gov.uk', {transport: 'beacon'});
72
+ 'External Link Clicked', 'https://www.nationalarchives.gov.uk', {transport: 'beacon'})
65
73
 
66
74
  expect(GOVUK.analytics.trackEvent).toHaveBeenCalledWith(
67
- 'External Link Clicked', 'https://www.nationalarchives.gov.uk/one.pdf', {transport: 'beacon', label: 'National Archives PDF'});
68
- });
69
- });
75
+ 'External Link Clicked', 'https://www.nationalarchives.gov.uk/one.pdf', {transport: 'beacon', label: 'National Archives PDF'})
76
+ })
77
+ })
@@ -1,113 +1,120 @@
1
- describe("GOVUK.GoogleAnalyticsUniversalTracker", function() {
2
- function addGoogleAnalyticsSpy() {
3
- window.ga = function() {};
4
- spyOn(window, 'ga');
1
+ /* global describe it expect beforeEach spyOn jasmine */
2
+
3
+ var $ = window.jQuery
4
+
5
+ describe('GOVUK.GoogleAnalyticsUniversalTracker', function () {
6
+ 'use strict'
7
+ var GOVUK = window.GOVUK
8
+
9
+ function addGoogleAnalyticsSpy () {
10
+ window.ga = function () {}
11
+ spyOn(window, 'ga')
5
12
  }
6
13
 
7
- var universal;
8
- var setupArguments;
14
+ var universal
15
+ var setupArguments
9
16
 
10
- beforeEach(function() {
11
- addGoogleAnalyticsSpy();
17
+ beforeEach(function () {
18
+ addGoogleAnalyticsSpy()
12
19
 
13
20
  universal = new GOVUK.GoogleAnalyticsUniversalTracker('id', {
14
21
  cookieDomain: 'cookie-domain.com',
15
22
  siteSpeedSampleRate: 100
16
- });
17
- });
18
-
19
- it('can load the libraries needed to run universal Google Analytics', function() {
20
- delete window.ga;
21
- $('[src="https://www.google-analytics.com/analytics.js"]').remove();
22
- GOVUK.GoogleAnalyticsUniversalTracker.load();
23
- expect($('script[async][src="https://www.google-analytics.com/analytics.js"]').length).toBe(1);
24
- expect(typeof window.ga).toBe('function');
25
-
26
- window.ga('send message');
27
- expect(window.ga.q[0]).toEqual(jasmine.any(Object));
28
- });
29
-
30
- describe('when created', function() {
31
- beforeEach(function() {
32
- setupArguments = window.ga.calls.allArgs();
33
- });
34
-
35
- it('configures a Google tracker using the provided profile ID and config', function() {
36
- expect(setupArguments[0]).toEqual(['create', 'id', {cookieDomain: 'cookie-domain.com', siteSpeedSampleRate: 100}]);
37
- });
38
-
39
- it('anonymises the IP', function() {
40
- expect(setupArguments[1]).toEqual(['set', 'anonymizeIp', true]);
41
- });
42
- });
43
-
44
- describe('when created (with legacy non-object syntax)', function() {
45
- beforeEach(function() {
46
- addGoogleAnalyticsSpy();
47
-
48
- universal = new GOVUK.GoogleAnalyticsUniversalTracker('id', 'cookie-domain.com');
49
- setupArguments = window.ga.calls.allArgs();
50
- });
51
-
52
- it('configures a Google tracker using the provided profile ID and cookie domain', function() {
53
- expect(setupArguments[0]).toEqual(['create', 'id', {cookieDomain: 'cookie-domain.com'}]);
54
- });
55
- });
56
-
57
- describe('when pageviews are tracked', function() {
58
- it('sends them to Google Analytics', function() {
59
- universal.trackPageview();
60
- expect(window.ga.calls.mostRecent().args).toEqual(['send', 'pageview']);
61
- });
62
-
63
- it('can track a virtual pageview', function() {
64
- universal.trackPageview('/nicholas-page');
65
- expect(window.ga.calls.mostRecent().args).toEqual(['send', 'pageview', {page: '/nicholas-page'}]);
66
- });
67
-
68
- it('can track a virtual pageview with a custom title', function() {
69
- universal.trackPageview('/nicholas-page', 'Nicholas Page');
70
- expect(window.ga.calls.mostRecent().args).toEqual(['send', 'pageview', {page: '/nicholas-page', title: 'Nicholas Page'}]);
71
- });
72
-
73
- it('can set the transport method on a pageview', function() {
74
- universal.trackPageview('/t', 'T', {transport: 'beacon'});
75
- expect(window.ga.calls.mostRecent().args).toEqual(['send', 'pageview', {page: '/t', title: 'T', transport: 'beacon'}]);
76
- });
77
- });
78
-
79
- describe('when events are tracked', function() {
80
- function eventObjectFromSpy() {
81
- return window.ga.calls.mostRecent().args[1];
23
+ })
24
+ })
25
+
26
+ it('can load the libraries needed to run universal Google Analytics', function () {
27
+ delete window.ga
28
+ $('[src="https://www.google-analytics.com/analytics.js"]').remove()
29
+ GOVUK.GoogleAnalyticsUniversalTracker.load()
30
+ expect($('script[async][src="https://www.google-analytics.com/analytics.js"]').length).toBe(1)
31
+ expect(typeof window.ga).toBe('function')
32
+
33
+ window.ga('send message')
34
+ expect(window.ga.q[0]).toEqual(jasmine.any(Object))
35
+ })
36
+
37
+ describe('when created', function () {
38
+ beforeEach(function () {
39
+ setupArguments = window.ga.calls.allArgs()
40
+ })
41
+
42
+ it('configures a Google tracker using the provided profile ID and config', function () {
43
+ expect(setupArguments[0]).toEqual(['create', 'id', {cookieDomain: 'cookie-domain.com', siteSpeedSampleRate: 100}])
44
+ })
45
+
46
+ it('anonymises the IP', function () {
47
+ expect(setupArguments[1]).toEqual(['set', 'anonymizeIp', true])
48
+ })
49
+ })
50
+
51
+ describe('when created (with legacy non-object syntax)', function () {
52
+ beforeEach(function () {
53
+ addGoogleAnalyticsSpy()
54
+
55
+ universal = new GOVUK.GoogleAnalyticsUniversalTracker('id', 'cookie-domain.com')
56
+ setupArguments = window.ga.calls.allArgs()
57
+ })
58
+
59
+ it('configures a Google tracker using the provided profile ID and cookie domain', function () {
60
+ expect(setupArguments[0]).toEqual(['create', 'id', {cookieDomain: 'cookie-domain.com'}])
61
+ })
62
+ })
63
+
64
+ describe('when pageviews are tracked', function () {
65
+ it('sends them to Google Analytics', function () {
66
+ universal.trackPageview()
67
+ expect(window.ga.calls.mostRecent().args).toEqual(['send', 'pageview'])
68
+ })
69
+
70
+ it('can track a virtual pageview', function () {
71
+ universal.trackPageview('/nicholas-page')
72
+ expect(window.ga.calls.mostRecent().args).toEqual(['send', 'pageview', {page: '/nicholas-page'}])
73
+ })
74
+
75
+ it('can track a virtual pageview with a custom title', function () {
76
+ universal.trackPageview('/nicholas-page', 'Nicholas Page')
77
+ expect(window.ga.calls.mostRecent().args).toEqual(['send', 'pageview', {page: '/nicholas-page', title: 'Nicholas Page'}])
78
+ })
79
+
80
+ it('can set the transport method on a pageview', function () {
81
+ universal.trackPageview('/t', 'T', {transport: 'beacon'})
82
+ expect(window.ga.calls.mostRecent().args).toEqual(['send', 'pageview', {page: '/t', title: 'T', transport: 'beacon'}])
83
+ })
84
+ })
85
+
86
+ describe('when events are tracked', function () {
87
+ function eventObjectFromSpy () {
88
+ return window.ga.calls.mostRecent().args[1]
82
89
  }
83
90
 
84
- it('sends them to Google Analytics', function() {
85
- universal.trackEvent('category', 'action', {label: 'label'});
91
+ it('sends them to Google Analytics', function () {
92
+ universal.trackEvent('category', 'action', {label: 'label'})
86
93
  expect(window.ga.calls.mostRecent().args).toEqual(
87
94
  ['send', {hitType: 'event', eventCategory: 'category', eventAction: 'action', eventLabel: 'label'}]
88
- );
89
- });
95
+ )
96
+ })
90
97
 
91
- it('the label is optional', function() {
92
- universal.trackEvent('category', 'action');
98
+ it('the label is optional', function () {
99
+ universal.trackEvent('category', 'action')
93
100
  expect(window.ga.calls.mostRecent().args).toEqual(
94
101
  ['send', {hitType: 'event', eventCategory: 'category', eventAction: 'action'}]
95
- );
96
- });
102
+ )
103
+ })
97
104
 
98
- it('only sends values if they are parseable as numbers', function() {
99
- universal.trackEvent('category', 'action', {label: 'label', value: '10'});
100
- expect(eventObjectFromSpy()['eventValue']).toEqual(10);
105
+ it('only sends values if they are parseable as numbers', function () {
106
+ universal.trackEvent('category', 'action', {label: 'label', value: '10'})
107
+ expect(eventObjectFromSpy()['eventValue']).toEqual(10)
101
108
 
102
- universal.trackEvent('category', 'action', {label: 'label', value: 10});
103
- expect(eventObjectFromSpy()['eventValue']).toEqual(10);
109
+ universal.trackEvent('category', 'action', {label: 'label', value: 10})
110
+ expect(eventObjectFromSpy()['eventValue']).toEqual(10)
104
111
 
105
- universal.trackEvent('category', 'action', {label: 'label', value: 'not a number'});
106
- expect(eventObjectFromSpy()['eventValue']).toEqual(undefined);
107
- });
112
+ universal.trackEvent('category', 'action', {label: 'label', value: 'not a number'})
113
+ expect(eventObjectFromSpy()['eventValue']).toEqual(undefined)
114
+ })
108
115
 
109
- it('can mark an event as non interactive', function() {
110
- universal.trackEvent('category', 'action', {label: 'label', value: 0, nonInteraction: true});
116
+ it('can mark an event as non interactive', function () {
117
+ universal.trackEvent('category', 'action', {label: 'label', value: 0, nonInteraction: true})
111
118
  expect(window.ga.calls.mostRecent().args).toEqual(
112
119
  ['send', {
113
120
  hitType: 'event',
@@ -117,45 +124,45 @@ describe("GOVUK.GoogleAnalyticsUniversalTracker", function() {
117
124
  eventValue: 0,
118
125
  nonInteraction: 1
119
126
  }]
120
- );
121
- });
127
+ )
128
+ })
122
129
 
123
- it('sends the page if supplied', function() {
124
- universal.trackEvent('category', 'action', {page: '/path/to/page'});
130
+ it('sends the page if supplied', function () {
131
+ universal.trackEvent('category', 'action', {page: '/path/to/page'})
125
132
  expect(window.ga.calls.mostRecent().args).toEqual(
126
133
  ['send', {hitType: 'event', eventCategory: 'category', eventAction: 'action', page: '/path/to/page'}]
127
- );
128
- });
134
+ )
135
+ })
129
136
 
130
- it('can set the transport method on an event', function() {
131
- universal.trackEvent('category', 'action', {transport: 'beacon'});
137
+ it('can set the transport method on an event', function () {
138
+ universal.trackEvent('category', 'action', {transport: 'beacon'})
132
139
  expect(window.ga.calls.mostRecent().args).toEqual(
133
140
  ['send', {hitType: 'event', eventCategory: 'category', eventAction: 'action', transport: 'beacon'}]
134
- );
135
- });
136
- });
141
+ )
142
+ })
143
+ })
137
144
 
138
- describe('when social events are tracked', function() {
139
- it('sends them to Google Analytics', function() {
140
- universal.trackSocial('network', 'action', 'target');
145
+ describe('when social events are tracked', function () {
146
+ it('sends them to Google Analytics', function () {
147
+ universal.trackSocial('network', 'action', 'target')
141
148
  expect(window.ga.calls.mostRecent().args).toEqual(['send', {
142
149
  'hitType': 'social',
143
150
  'socialNetwork': 'network',
144
151
  'socialAction': 'action',
145
152
  'socialTarget': 'target'
146
- }]);
147
- });
148
- });
149
-
150
- describe('when setting a custom dimension', function() {
151
- it('sends the dimension to Google Analytics with the specified index and value', function() {
152
- universal.setDimension(1, 'value');
153
- expect(window.ga.calls.mostRecent().args).toEqual(['set', 'dimension1', 'value']);
154
- });
155
-
156
- it('coerces the value to a string', function() {
157
- universal.setDimension(1, 10);
158
- expect(window.ga.calls.mostRecent().args).toEqual(['set', 'dimension1', '10']);
159
- });
160
- });
161
- });
153
+ }])
154
+ })
155
+ })
156
+
157
+ describe('when setting a custom dimension', function () {
158
+ it('sends the dimension to Google Analytics with the specified index and value', function () {
159
+ universal.setDimension(1, 'value')
160
+ expect(window.ga.calls.mostRecent().args).toEqual(['set', 'dimension1', 'value'])
161
+ })
162
+
163
+ it('coerces the value to a string', function () {
164
+ universal.setDimension(1, 10)
165
+ expect(window.ga.calls.mostRecent().args).toEqual(['set', 'dimension1', '10'])
166
+ })
167
+ })
168
+ })
@@ -1,54 +1,62 @@
1
- describe("GOVUK.analyticsPlugins.mailtoLinkTracker", function() {
2
- var $links;
3
-
4
- beforeEach(function() {
5
- $links = $('\
6
- <div class="mailto-links">\
7
- <a href="mailto:name1@email.com"></a>\
8
- <a href="mailto:name2@email.com">The link for a mailto</a>\
9
- <a href="mailto:name3@email.com"><img src="/img" /></a>\
10
- </div>');
11
-
12
- $('html').on('click', function(evt) { evt.preventDefault(); });
13
- $('body').append($links);
14
- GOVUK.analytics = {trackEvent:function(){}};
15
-
16
- GOVUK.analyticsPlugins.mailtoLinkTracker();
17
- });
18
-
19
- afterEach(function() {
20
- $('html').off();
21
- $('body').off();
22
- $links.remove();
23
- delete GOVUK.analytics;
24
- });
25
-
26
- it('listens to click events on mailto links', function() {
27
- spyOn(GOVUK.analytics, 'trackEvent');
28
-
29
- $('.mailto-links a').each(function() {
30
- $(this).trigger('click');
31
- expect(GOVUK.analytics.trackEvent).toHaveBeenCalled();
32
- GOVUK.analytics.trackEvent.calls.reset();
33
- });
34
- });
35
-
36
- it('tracks mailto addresses and link text', function() {
37
- spyOn(GOVUK.analytics, 'trackEvent');
38
- $('.mailto-links a').trigger('click');
1
+ /* global describe it expect afterEach beforeEach spyOn */
2
+
3
+ var $ = window.jQuery
4
+
5
+ describe('GOVUK.analyticsPlugins.mailtoLinkTracker', function () {
6
+ 'use strict'
7
+ var GOVUK = window.GOVUK
8
+
9
+ var $links
10
+
11
+ beforeEach(function () {
12
+ $links = $(
13
+ '<div class="mailto-links">' +
14
+ '<a href="mailto:name1@email.com"></a>' +
15
+ '<a href="mailto:name2@email.com">The link for a mailto</a>' +
16
+ '<a href="mailto:name3@email.com"><img src="/img" /></a>' +
17
+ '</div>'
18
+ )
19
+
20
+ $('html').on('click', function (evt) { evt.preventDefault() })
21
+ $('body').append($links)
22
+ GOVUK.analytics = {trackEvent: function () {}}
23
+
24
+ GOVUK.analyticsPlugins.mailtoLinkTracker()
25
+ })
26
+
27
+ afterEach(function () {
28
+ $('html').off()
29
+ $('body').off()
30
+ $links.remove()
31
+ delete GOVUK.analytics
32
+ })
33
+
34
+ it('listens to click events on mailto links', function () {
35
+ spyOn(GOVUK.analytics, 'trackEvent')
36
+
37
+ $('.mailto-links a').each(function () {
38
+ $(this).trigger('click')
39
+ expect(GOVUK.analytics.trackEvent).toHaveBeenCalled()
40
+ GOVUK.analytics.trackEvent.calls.reset()
41
+ })
42
+ })
43
+
44
+ it('tracks mailto addresses and link text', function () {
45
+ spyOn(GOVUK.analytics, 'trackEvent')
46
+ $('.mailto-links a').trigger('click')
39
47
 
40
48
  expect(GOVUK.analytics.trackEvent).toHaveBeenCalledWith(
41
- 'Mailto Link Clicked', 'mailto:name1@email.com', {transport: 'beacon'});
49
+ 'Mailto Link Clicked', 'mailto:name1@email.com', {transport: 'beacon'})
42
50
 
43
51
  expect(GOVUK.analytics.trackEvent).toHaveBeenCalledWith(
44
- 'Mailto Link Clicked', 'mailto:name2@email.com', {transport: 'beacon', label: 'The link for a mailto'});
45
- });
52
+ 'Mailto Link Clicked', 'mailto:name2@email.com', {transport: 'beacon', label: 'The link for a mailto'})
53
+ })
46
54
 
47
- it('listens to click events on elements within mailto links', function() {
48
- spyOn(GOVUK.analytics, 'trackEvent');
55
+ it('listens to click events on elements within mailto links', function () {
56
+ spyOn(GOVUK.analytics, 'trackEvent')
49
57
 
50
- $('.mailto-links a img').trigger('click');
58
+ $('.mailto-links a img').trigger('click')
51
59
  expect(GOVUK.analytics.trackEvent).toHaveBeenCalledWith(
52
- 'Mailto Link Clicked', 'mailto:name3@email.com', {transport: 'beacon'});
53
- });
54
- });
60
+ 'Mailto Link Clicked', 'mailto:name3@email.com', {transport: 'beacon'})
61
+ })
62
+ })