govuk_frontend_toolkit 4.14.1 → 4.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/assets/CHANGELOG.md +5 -0
- data/app/assets/VERSION.txt +1 -1
- data/app/assets/javascripts/govuk/analytics/analytics.js +3 -1
- data/app/assets/javascripts/govuk/analytics/google-analytics-universal-tracker.js +13 -6
- data/app/assets/javascripts/govuk/anchor-buttons.js +61 -0
- data/app/assets/javascripts/govuk/selection-buttons.js +0 -2
- data/app/assets/spec/unit/analytics/analytics.spec.js +17 -9
- data/app/assets/spec/unit/analytics/google-analytics-universal-tracker.spec.js +29 -9
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 851436b61e519834d96f32d1269b194d2664599c
|
4
|
+
data.tar.gz: bb4bec220d75477490dc8fc10ba7140380e1c34c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6b6c3638a4df4d76c23d5dffed432c565208ca81664890a6c1dbf2ca5969ae13281e9479c3f1c75484ba71768dbc85eca0a25685ddf1803f2f55613ac415b790
|
7
|
+
data.tar.gz: 2dec81dc8c4d5e1437527eaf201c6f4f34d928f6bde344d709acc8faf2443482a3bab004020beec37c0cee273fc6bde6deee6ae9ec5e561cf01a1bebaafeb76a
|
data/app/assets/CHANGELOG.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
# 4.15.0
|
2
|
+
|
3
|
+
- Add support for Google Analytics fieldsObject ([PR #298](https://github.com/alphagov/govuk_frontend_toolkit/pull/298))
|
4
|
+
- anchor-buttons.js: normalise keyboard behaviour between buttons and links with a button role ([PR #297](https://github.com/alphagov/govuk_frontend_toolkit/pull/297))
|
5
|
+
|
1
6
|
# 4.14.1
|
2
7
|
|
3
8
|
- Fix tabular number sizing in Firefox ([PR #301](https://github.com/alphagov/govuk_frontend_toolkit/pull/301))
|
data/app/assets/VERSION.txt
CHANGED
@@ -1 +1 @@
|
|
1
|
-
4.
|
1
|
+
4.15.0
|
@@ -9,7 +9,9 @@
|
|
9
9
|
var Analytics = function(config) {
|
10
10
|
this.trackers = [];
|
11
11
|
if (typeof config.universalId != 'undefined') {
|
12
|
-
|
12
|
+
var universalId = config.universalId;
|
13
|
+
delete config.universalId;
|
14
|
+
this.trackers.push(new GOVUK.GoogleAnalyticsUniversalTracker(universalId, config));
|
13
15
|
}
|
14
16
|
};
|
15
17
|
|
@@ -3,25 +3,32 @@
|
|
3
3
|
|
4
4
|
var GOVUK = global.GOVUK || {};
|
5
5
|
|
6
|
-
var GoogleAnalyticsUniversalTracker = function(
|
7
|
-
configureProfile(id, cookieDomain);
|
8
|
-
anonymizeIp();
|
6
|
+
var GoogleAnalyticsUniversalTracker = function(trackingId, fieldsObject) {
|
9
7
|
|
10
|
-
function configureProfile(
|
11
|
-
|
8
|
+
function configureProfile() {
|
9
|
+
// https://developers.google.com/analytics/devguides/collection/analyticsjs/command-queue-reference#create
|
10
|
+
sendToGa('create', trackingId, fieldsObject);
|
12
11
|
}
|
13
12
|
|
14
13
|
function anonymizeIp() {
|
15
14
|
// https://developers.google.com/analytics/devguides/collection/analyticsjs/advanced#anonymizeip
|
16
15
|
sendToGa('set', 'anonymizeIp', true);
|
17
16
|
}
|
17
|
+
|
18
|
+
// Support legacy cookieDomain param
|
19
|
+
if (typeof fieldsObject === 'string') {
|
20
|
+
fieldsObject = { cookieDomain: fieldsObject };
|
21
|
+
}
|
22
|
+
|
23
|
+
configureProfile();
|
24
|
+
anonymizeIp();
|
18
25
|
};
|
19
26
|
|
20
27
|
GoogleAnalyticsUniversalTracker.load = function() {
|
21
28
|
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
22
29
|
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
23
30
|
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
24
|
-
})(global,document,'script','
|
31
|
+
})(global,document,'script','https://www.google-analytics.com/analytics.js','ga');
|
25
32
|
};
|
26
33
|
|
27
34
|
// https://developers.google.com/analytics/devguides/collection/analyticsjs/pages
|
@@ -0,0 +1,61 @@
|
|
1
|
+
// javascript 'shim' to trigger the click event of element(s)
|
2
|
+
// when the space key is pressed.
|
3
|
+
//
|
4
|
+
// usage instructions:
|
5
|
+
// GOVUK.anchorButtons.init();
|
6
|
+
//
|
7
|
+
// If you want to customise the shim you can pass in a custom configuration
|
8
|
+
// object with your own selector for the target elements and addional keyup
|
9
|
+
// codes if there becomes a need to do so. For example:
|
10
|
+
// GOVUK.anchorButtons.init({ selector: '[role="button"]' });
|
11
|
+
(function(global) {
|
12
|
+
"use strict";
|
13
|
+
|
14
|
+
var $ = global.jQuery;
|
15
|
+
var GOVUK = global.GOVUK || {};
|
16
|
+
|
17
|
+
GOVUK.anchorButtons = {
|
18
|
+
|
19
|
+
// default configuration that can be overridden by passing object as second parameter to module
|
20
|
+
config: {
|
21
|
+
// the target element(s) to attach the shim event to
|
22
|
+
selector: 'a[role="button"]',
|
23
|
+
// array of keys to match against upon the keyup event
|
24
|
+
keycodes: [
|
25
|
+
32 // spacekey
|
26
|
+
],
|
27
|
+
},
|
28
|
+
|
29
|
+
// event behaviour (not a typical anonymous function for resuse if needed)
|
30
|
+
triggerClickOnTarget: function triggerClickOnTarget(event) {
|
31
|
+
var code = event.charCode || event.keyCode;
|
32
|
+
// if the keyCode/charCode from this event is in the keycodes array then
|
33
|
+
if ($.inArray(code, this.config.keycodes) !== -1) {
|
34
|
+
event.preventDefault();
|
35
|
+
// trigger the target's click event
|
36
|
+
$(event.target).trigger("click");
|
37
|
+
}
|
38
|
+
},
|
39
|
+
|
40
|
+
// By default this will find all anchors with role attribute set to
|
41
|
+
// 'button' and will trigger their click event when the space key (32) is pressed.
|
42
|
+
// @method init
|
43
|
+
// @param {Object} customConfig object to override default configuration
|
44
|
+
// {String} customConfig.selector a selector for the elements to be 'clicked'
|
45
|
+
// {Array} customConfig.keycodes an array of javascript keycode values to match against that when pressed will trigger the click
|
46
|
+
init: function init(customConfig) {
|
47
|
+
// extend the default config with any custom attributes passed in
|
48
|
+
this.config = $.extend(this.config, customConfig);
|
49
|
+
// if we have found elements then:
|
50
|
+
if($(this.config.selector).length > 0) {
|
51
|
+
// listen to 'document' for keyup event on the elements and fire the triggerClickOnTarget
|
52
|
+
$(document).on('keyup', this.config.selector, this.triggerClickOnTarget.bind(this));
|
53
|
+
}
|
54
|
+
}
|
55
|
+
|
56
|
+
};
|
57
|
+
|
58
|
+
// hand back to global
|
59
|
+
global.GOVUK = GOVUK;
|
60
|
+
|
61
|
+
})(window);
|
@@ -5,7 +5,6 @@
|
|
5
5
|
var GOVUK = global.GOVUK || {};
|
6
6
|
|
7
7
|
var SelectionButtons = function (elmsOrSelector, opts) {
|
8
|
-
var $elms;
|
9
8
|
|
10
9
|
this.selectedClass = 'selected';
|
11
10
|
this.focusedClass = 'focused';
|
@@ -15,7 +14,6 @@
|
|
15
14
|
}.bind(this));
|
16
15
|
}
|
17
16
|
if (typeof elmsOrSelector === 'string') {
|
18
|
-
$elms = $(elmsOrSelector);
|
19
17
|
this.selector = elmsOrSelector;
|
20
18
|
this.setInitialState($(this.selector));
|
21
19
|
} else if (elmsOrSelector !== undefined) {
|
@@ -1,21 +1,29 @@
|
|
1
1
|
describe("GOVUK.Analytics", function() {
|
2
|
+
function addGoogleAnalyticsSpy() {
|
3
|
+
window.ga = function() {};
|
4
|
+
spyOn(window, 'ga');
|
5
|
+
}
|
6
|
+
|
2
7
|
var analytics;
|
8
|
+
var universalSetupArguments;
|
3
9
|
|
4
10
|
beforeEach(function() {
|
5
|
-
|
6
|
-
spyOn(window, 'ga');
|
7
|
-
this.config = {
|
8
|
-
universalId: 'universal-id',
|
9
|
-
cookieDomain: '.www.gov.uk'
|
10
|
-
};
|
11
|
+
addGoogleAnalyticsSpy();
|
11
12
|
|
12
|
-
analytics = new GOVUK.Analytics(
|
13
|
+
analytics = new GOVUK.Analytics({
|
14
|
+
universalId: 'universal-id',
|
15
|
+
cookieDomain: '.www.gov.uk',
|
16
|
+
siteSpeedSampleRate: 100
|
17
|
+
});
|
13
18
|
});
|
14
19
|
|
15
20
|
describe('when created', function() {
|
21
|
+
beforeEach(function() {
|
22
|
+
universalSetupArguments = window.ga.calls.allArgs();
|
23
|
+
});
|
24
|
+
|
16
25
|
it('configures a universal tracker', function () {
|
17
|
-
|
18
|
-
expect(universalSetupArguments[0]).toEqual(['create', 'universal-id', {'cookieDomain': '.www.gov.uk'}]);
|
26
|
+
expect(universalSetupArguments[0]).toEqual(['create', 'universal-id', {cookieDomain: '.www.gov.uk', siteSpeedSampleRate: 100}]);
|
19
27
|
});
|
20
28
|
});
|
21
29
|
|
@@ -1,17 +1,26 @@
|
|
1
1
|
describe("GOVUK.GoogleAnalyticsUniversalTracker", function() {
|
2
|
+
function addGoogleAnalyticsSpy() {
|
3
|
+
window.ga = function() {};
|
4
|
+
spyOn(window, 'ga');
|
5
|
+
}
|
6
|
+
|
2
7
|
var universal;
|
8
|
+
var setupArguments;
|
3
9
|
|
4
10
|
beforeEach(function() {
|
5
|
-
|
6
|
-
|
7
|
-
universal = new GOVUK.GoogleAnalyticsUniversalTracker('id',
|
11
|
+
addGoogleAnalyticsSpy();
|
12
|
+
|
13
|
+
universal = new GOVUK.GoogleAnalyticsUniversalTracker('id', {
|
14
|
+
cookieDomain: 'cookie-domain.com',
|
15
|
+
siteSpeedSampleRate: 100
|
16
|
+
});
|
8
17
|
});
|
9
18
|
|
10
19
|
it('can load the libraries needed to run universal Google Analytics', function() {
|
11
20
|
delete window.ga;
|
12
|
-
$('[src="
|
21
|
+
$('[src="https://www.google-analytics.com/analytics.js"]').remove();
|
13
22
|
GOVUK.GoogleAnalyticsUniversalTracker.load();
|
14
|
-
expect($('script[async][src="
|
23
|
+
expect($('script[async][src="https://www.google-analytics.com/analytics.js"]').length).toBe(1);
|
15
24
|
expect(typeof window.ga).toBe('function');
|
16
25
|
|
17
26
|
window.ga('send message');
|
@@ -19,14 +28,12 @@ describe("GOVUK.GoogleAnalyticsUniversalTracker", function() {
|
|
19
28
|
});
|
20
29
|
|
21
30
|
describe('when created', function() {
|
22
|
-
var setupArguments;
|
23
|
-
|
24
31
|
beforeEach(function() {
|
25
32
|
setupArguments = window.ga.calls.allArgs();
|
26
33
|
});
|
27
34
|
|
28
|
-
it('configures a Google tracker using the provided profile ID and
|
29
|
-
expect(setupArguments[0]).toEqual(['create', 'id', {
|
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}]);
|
30
37
|
});
|
31
38
|
|
32
39
|
it('anonymises the IP', function() {
|
@@ -34,6 +41,19 @@ describe("GOVUK.GoogleAnalyticsUniversalTracker", function() {
|
|
34
41
|
});
|
35
42
|
});
|
36
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
|
+
|
37
57
|
describe('when pageviews are tracked', function() {
|
38
58
|
it('sends them to Google Analytics', function() {
|
39
59
|
universal.trackPageview();
|
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: 4.
|
4
|
+
version: 4.15.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: 2016-08-
|
11
|
+
date: 2016-08-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -229,6 +229,7 @@ files:
|
|
229
229
|
- app/assets/javascripts/govuk/analytics/google-analytics-universal-tracker.js
|
230
230
|
- app/assets/javascripts/govuk/analytics/mailto-link-tracker.js
|
231
231
|
- app/assets/javascripts/govuk/analytics/print-intent.js
|
232
|
+
- app/assets/javascripts/govuk/anchor-buttons.js
|
232
233
|
- app/assets/javascripts/govuk/modules.js
|
233
234
|
- app/assets/javascripts/govuk/modules/auto-track-event.js
|
234
235
|
- app/assets/javascripts/govuk/multivariate-test.js
|