-
Notifications
You must be signed in to change notification settings - Fork 4
/
gaab.v0.1.1.js
61 lines (47 loc) · 1.76 KB
/
gaab.v0.1.1.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
(function (window) {'use strict';
var domready = (function () {
/*jshint expr:true*/
/*jshint -W084 */
'use strict';
var fns = [],
listener, doc = document,
domContentLoaded = 'DOMContentLoaded',
loaded = /^loaded|^i|^c/.test(doc.readyState);
if (!loaded)
doc.addEventListener(domContentLoaded, listener = function () {
doc.removeEventListener(domContentLoaded, listener);
loaded = 1;
while (listener = fns.shift()) listener();
});
return function (fn) {
loaded ? fn() : fns.push(fn);
};
})();
/*global ga:false, domready:false*/
window.gaab = function (name, dimension, experiments) {
'use strict';
// functions passed to ga are executed once the lib is loaded
ga(function (tracker) {
// First we bucket the visitor
var clientId = tracker.get('clientId'); // https://developers.google.com/analytics/devguides/ollection/analyticsjs/domains#getClientId
var randomBasedOnCookie = (parseFloat(clientId, 10) % 100) / 100;
var experiment = experiments[Math.floor(randomBasedOnCookie * experiments.length)];
// Then we set the GA Dimension
ga('set', 'dimension' + dimension, name + ': ' + experiment.name);
// then we run valid tests on domready
for (var key in experiment) {
if (key !== 'name' && experiment.hasOwnProperty(key))
domready(testGenerator(key, experiment[key]));
}
/*jshint latedef:false*/
// this gets hoisted
function testGenerator(selector, txtOrFunction) {
return function () {
if (typeof txtOrFunction === 'function') txtOrFunction(selector);
else if (typeof jQuery !== 'undefined') jQuery(selector).html(txtOrFunction);
else document.querySelectorAll(selector).innerHTML = txtOrFunction;
};
}
});
};
})(window);