ga-lite
Version:
Small, cacheable subset of Google Analytics JS client
560 lines (459 loc) • 22.2 kB
JavaScript
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define([], factory);
else if(typeof exports === 'object')
exports["galite"] = factory();
else
root["galite"] = factory();
})(this, function() {
return /******/ (() => { // webpackBootstrap
/******/ var __webpack_modules__ = ({
/***/ 383:
/***/ (() => {
Array.from = Array.from || function () {
var _Array$prototype$slic;
return (_Array$prototype$slic = Array.prototype.slice).call.apply(_Array$prototype$slic, arguments);
};
/***/ })
/******/ });
/************************************************************************/
/******/ // The module cache
/******/ var __webpack_module_cache__ = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ var cachedModule = __webpack_module_cache__[moduleId];
/******/ if (cachedModule !== undefined) {
/******/ return cachedModule.exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = __webpack_module_cache__[moduleId] = {
/******/ // no module.id needed
/******/ // no module.loaded needed
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/************************************************************************/
/******/ /* webpack/runtime/define property getters */
/******/ (() => {
/******/ // define getter functions for harmony exports
/******/ __webpack_require__.d = (exports, definition) => {
/******/ for(var key in definition) {
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ }
/******/ }
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/hasOwnProperty shorthand */
/******/ (() => {
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ })();
/******/
/************************************************************************/
var __webpack_exports__ = {};
// This entry need to be wrapped in an IIFE because it need to be in strict mode.
(() => {
;
// EXPORTS
__webpack_require__.d(__webpack_exports__, {
"default": () => (/* binding */ galite)
});
;// CONCATENATED MODULE: ./src/do-not-track-enabled.js
function doNotTrackEnabled() {
if (typeof navigator === 'undefined' || typeof window === 'undefined') {
return false;
}
var dntNumber = parseInt(navigator.msDoNotTrack || // Internet Explorer 9 and 10 vendor prefix
window.doNotTrack || // IE 11 uses window.doNotTrack
navigator.doNotTrack, // W3C
10);
return dntNumber === 1;
}
;// CONCATENATED MODULE: ./src/tracker-store.js
var store = {};
function addTracker(trackerName, tracker) {
store[trackerName] = tracker;
}
function getTracker(trackerName) {
return store[trackerName];
}
function removeTracker(trackerName) {
delete store[trackerName];
}
function getAllTrackers() {
return Object.keys(store).map(function (key) {
return store[key];
});
}
function clearStore() {
return Object.keys(store).forEach(removeTracker);
}
;// CONCATENATED MODULE: ./src/send-to.js
function sendTo(url) {
if (typeof navigator !== 'undefined' && navigator.sendBeacon) {
try {
var didSucceed = navigator.sendBeacon(url);
if (didSucceed) {
return;
}
} catch (e) {// ignore
}
}
try {
var req = new window.XMLHttpRequest();
req.open('GET', url, false);
req.send();
} catch (e) {
// IE9 throws an error with cross-site XMLHttpRequest so
// we fall back to simple image request
var i = new window.Image();
i.src = url;
}
}
;// CONCATENATED MODULE: ./src/get-user-id.js
var USER_ID_KEY = 'uid';
function getUserId() {
var storage = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window ? window.localStorage : null;
if (storage && storage.getItem(USER_ID_KEY)) {
return storage.getItem(USER_ID_KEY);
}
var userId = Math.random() + '.' + Math.random();
if (storage) {
storage.setItem(USER_ID_KEY, userId);
}
return userId;
}
;// CONCATENATED MODULE: ./src/get-optional-url-param.js
function getOptionalStr(key) {
var values = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
if (!key || values.indexOf(undefined) > -1) return '';
return '&' + key + '=' + values.map(encodeURIComponent).join('');
}
;// CONCATENATED MODULE: ./src/get-base-url.js
function getBaseUrl(trackingId, userId) {
return 'https://www.google-analytics.com/collect' + '?v=1' + '&de=UTF-8' + getOptionalStr('ul', [navigator.language.toLowerCase()]) + getOptionalStr('dl', [document.location.href]) + getOptionalStr('dt', [document.title]) + getOptionalStr('sd', [window.screen.colorDepth, '-bit']) + getOptionalStr('sr', [window.screen.availWidth, 'x', window.screen.availHeight]) + getOptionalStr('vp', [window.innerWidth, 'x', window.innerHeight]) + getOptionalStr('dr', [document.referrer]);
}
;// CONCATENATED MODULE: ./src/object-to-query-string.js
function objectToQueryString() {
var object = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
return Object.keys(object).map(function (key) {
return [key, object[key]].map(booleansToNumbers).map(encodeURIComponent).join('=');
}).join('&');
}
function booleansToNumbers(value) {
return typeof value === 'boolean' ? +value : value;
}
;// CONCATENATED MODULE: ./src/fields-to-params.js
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
function fieldsToParams(fieldsObject) {
var params = {};
for (var fieldName in fieldsObject) {
var paramValue = fieldsObject[fieldName];
if (paramValue == null || paramValue === '') {
continue;
}
if (fieldName in FIELDS_TO_PARAMS_MAP) {
var paramName = FIELDS_TO_PARAMS_MAP[fieldName];
params[paramName] = paramValue;
} // handle dimension1, metric2, etc.
var matchedCustomValue = CUSTOM_VALUES_RE.exec(fieldName);
if (matchedCustomValue) {
var _matchedCustomValue = _slicedToArray(matchedCustomValue, 3),
type = _matchedCustomValue[1],
digits = _matchedCustomValue[2];
var _paramName = CUSTOM_VALUES_TO_PARAMS_MAP[type] + digits;
params[_paramName] = paramValue;
}
}
return params;
}
var FIELDS_TO_PARAMS_MAP = {
anonymizeIp: 'aip',
dataSource: 'ds',
queueTime: 'qt',
userId: 'uid',
sessionControl: 'sc',
referrer: 'dr',
campaignName: 'cn',
campaignSource: 'cs',
campaignMedium: 'cm',
campaignKeyword: 'ck',
campaignContent: 'cc',
campaignId: 'ci',
screenResolution: 'sr',
viewportSize: 'vp',
encoding: 'de',
screenColors: 'sd',
language: 'ul',
javaEnabled: 'je',
flashVersion: 'fl',
hitType: 't',
nonInteraction: 'ni',
location: 'dl',
hostname: 'dh',
page: 'dp',
title: 'dt',
screenName: 'cd',
linkid: 'linkid',
appName: 'an',
appId: 'aid',
appVersion: 'av',
appInstallerId: 'aiid',
eventCategory: 'ec',
eventAction: 'ea',
eventLabel: 'el',
eventValue: 'ev',
currencyCode: 'cu',
socialNetwork: 'sn',
socialAction: 'sa',
socialTarget: 'st',
timingCategory: 'utc',
timingVar: 'utv',
timingValue: 'utt',
timingLabel: 'utl',
exDescription: 'exd',
exFatal: 'exf',
expId: 'xid',
expVar: 'xvar'
};
var CUSTOM_VALUES_RE = /(dimension|metric)(\d+)/;
var CUSTOM_VALUES_TO_PARAMS_MAP = {
dimension: 'cd',
metric: 'cm'
};
;// CONCATENATED MODULE: ./src/build-event-url.js
function buildEventUrl(trackingId, timestamp, userId) {
var params = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
var anonymizeIp = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
var paramsQueryString = objectToQueryString(fieldsToParams(params));
return getBaseUrl() + (paramsQueryString ? '&' + paramsQueryString : '') + (anonymizeIp ? '&aip=1' : '') + '&cid=' + userId + '&tid=' + trackingId + '&z=' + timestamp;
}
;// CONCATENATED MODULE: ./src/user-opted-out.js
function userOptedOut(trackerName) {
// https://developers.google.com/analytics/devguides/collection/analyticsjs/user-opt-out#opt-out_of_tracking_for_your_site
return window["ga-disable-".concat(trackerName)] === true;
}
;// CONCATENATED MODULE: ./src/tracker.js
function tracker_slicedToArray(arr, i) { return tracker_arrayWithHoles(arr) || tracker_iterableToArrayLimit(arr, i) || tracker_unsupportedIterableToArray(arr, i) || tracker_nonIterableRest(); }
function tracker_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function tracker_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return tracker_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return tracker_arrayLikeToArray(o, minLen); }
function tracker_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
function tracker_iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
function tracker_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
var DEFAULT_TRACKER_NAME = 't0';
var Tracker = /*#__PURE__*/function () {
function Tracker(trackingId) {
_classCallCheck(this, Tracker);
this.fields = {
trackingId: trackingId
};
this.userId = getUserId();
this._sendTo = sendTo;
this._getTime = getTime;
}
_createClass(Tracker, [{
key: "send",
value: function send(hitType) {
if (userOptedOut(this.fields.trackingId)) {
return;
}
for (var _len = arguments.length, fieldsObject = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
fieldsObject[_key - 1] = arguments[_key];
}
var params = _objectSpread(_objectSpread({
hitType: hitType
}, argumentsToFields(hitType, fieldsObject)), this.fields);
var url = buildEventUrl(this.fields.trackingId, this._getTime(), this.userId, params);
this._sendTo(url);
}
}, {
key: "get",
value: function get(fieldName) {
return this.fields[fieldName];
}
}, {
key: "set",
value: function set(fieldNameOrObject, fieldValue) {
if (fieldNameOrObject.constructor === Object) {
for (var fieldName in fieldNameOrObject) {
this.fields[fieldName] = fieldNameOrObject[fieldName];
}
} else {
this.fields[fieldNameOrObject] = fieldValue;
}
}
}]);
return Tracker;
}();
function getTime() {
return new Date().getTime();
}
function argumentsToFields(hitType) {
var args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
var lastArgIsFieldsObject = args.length >= 1 && args[args.length - 1].constructor === Object;
var fieldsObject = lastArgIsFieldsObject ? args[args.length - 1] : {};
args = lastArgIsFieldsObject ? args.slice(0, -1) : args;
switch (hitType) {
case 'pageview':
{
var _args = args,
_args2 = tracker_slicedToArray(_args, 1),
page = _args2[0];
return _objectSpread({
page: page
}, fieldsObject);
}
case 'event':
{
var _args3 = args,
_args4 = tracker_slicedToArray(_args3, 4),
eventCategory = _args4[0],
eventAction = _args4[1],
eventLabel = _args4[2],
eventValue = _args4[3];
return _objectSpread({
eventCategory: eventCategory,
eventAction: eventAction,
eventLabel: eventLabel,
eventValue: eventValue
}, fieldsObject);
}
case 'social':
{
var _args5 = args,
_args6 = tracker_slicedToArray(_args5, 3),
socialNetwork = _args6[0],
socialAction = _args6[1],
socialTarget = _args6[2];
return _objectSpread({
socialNetwork: socialNetwork,
socialAction: socialAction,
socialTarget: socialTarget
}, fieldsObject);
}
case 'timing':
{
var _args7 = args,
_args8 = tracker_slicedToArray(_args7, 4),
timingCategory = _args8[0],
timingVar = _args8[1],
timingValue = _args8[2],
timingLabel = _args8[3];
return _objectSpread({
timingCategory: timingCategory,
timingVar: timingVar,
timingValue: timingValue,
timingLabel: timingLabel
}, fieldsObject);
}
default:
return fieldsObject;
}
}
;// CONCATENATED MODULE: ./src/commands/create.js
function create(trackingId, cookieDomain) {
var name = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : DEFAULT_TRACKER_NAME;
var fieldsObject = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : undefined;
var tracker = new Tracker(trackingId);
addTracker(name, tracker);
return tracker;
}
;// CONCATENATED MODULE: ./src/commands/get-by-name.js
function getByName(name) {
return getTracker(name);
}
;// CONCATENATED MODULE: ./src/ga-lite-commands.js
var galiteCommands = {
create: create,
getByName: getByName
};
/* harmony default export */ const ga_lite_commands = (galiteCommands);
;// CONCATENATED MODULE: ./src/get-tasks-in-command-queue.js
function getTasksInCommandQueue() {
if (typeof window === 'undefined') {
return [];
}
return window.galite && window.galite.q || [];
}
// EXTERNAL MODULE: ./src/simple-polyfill-array-from.js
var simple_polyfill_array_from = __webpack_require__(383);
;// CONCATENATED MODULE: ./src/ga-lite.js
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || ga_lite_unsupportedIterableToArray(arr) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return ga_lite_arrayLikeToArray(arr); }
function ga_lite_slicedToArray(arr, i) { return ga_lite_arrayWithHoles(arr) || ga_lite_iterableToArrayLimit(arr, i) || ga_lite_unsupportedIterableToArray(arr, i) || ga_lite_nonIterableRest(); }
function ga_lite_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function ga_lite_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return ga_lite_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return ga_lite_arrayLikeToArray(o, minLen); }
function ga_lite_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
function ga_lite_iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
function ga_lite_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
function galite(command) {
// Check for doNotTrack variable. If it's present, the user has decided to
// opt-out of the tracking, so we kill this tracking script
if (doNotTrackEnabled()) {
return;
}
var _splitTrackerCommand = splitTrackerCommand(command),
_splitTrackerCommand2 = ga_lite_slicedToArray(_splitTrackerCommand, 2),
trackerName = _splitTrackerCommand2[0],
trackerCommand = _splitTrackerCommand2[1];
var commandFoundInGlobalCommands = !!ga_lite_commands[command];
var commandFoundInTrackerMethods = !!Tracker.prototype[trackerCommand] && trackerCommand !== 'constructor';
for (var _len = arguments.length, values = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
values[_key - 1] = arguments[_key];
}
if (commandFoundInGlobalCommands) {
ga_lite_commands[command].apply(ga_lite_commands, values);
} else if (commandFoundInTrackerMethods) {
var tracker = getTracker(trackerName);
if (tracker) tracker[trackerCommand].apply(tracker, values);
} else if (typeof command === 'function') {
var _tracker = getTracker(trackerName);
command(_tracker);
} else {
throw new Error("Command ".concat(command, " is not available in ga-lite"));
}
}
function splitTrackerCommand(command) {
if (typeof command === 'string' && command.indexOf('.') > -1) {
return command.split('.');
} else {
return [DEFAULT_TRACKER_NAME, command];
}
}
Object.keys(ga_lite_commands).forEach(function (key) {
galite[key] = ga_lite_commands[key];
});
getTasksInCommandQueue().forEach(function (args) {
return galite.apply(void 0, _toConsumableArray(args));
});
})();
__webpack_exports__ = __webpack_exports__["default"];
/******/ return __webpack_exports__;
/******/ })()
;
});