analytics-plugin-google-tag-manager
Version:
Google tag manager plugin for 'analytics' module
152 lines (129 loc) • 4.21 kB
JavaScript
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 _objectSpread(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i] != null ? arguments[i] : {};
var ownKeys = Object.keys(source);
if (typeof Object.getOwnPropertySymbols === 'function') {
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
}));
}
ownKeys.forEach(function (key) {
_defineProperty(target, key, source[key]);
});
}
return target;
}
/* global dataLayer */
var config$1 = {
debug: false,
containerId: null // assumesPageview: true,
/**
* Google tag manager plugin
* @link https://getanalytics.io/plugins/google-tag-manager/
* @link https://developers.google.com/tag-manager/
* @param {object} pluginConfig - Plugin settings
* @param {string} pluginConfig.containerId - The Container ID uniquely identifies the GTM Container.
* @return {object} Analytics plugin
* @example
*
* googleTagManager({
* containerId: 'GTM-123xyz'
* })
*/
};
function googleTagManager$1() {
var pluginConfig = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
// Allow for userland overides of base methods
return {
NAMESPACE: 'google-tag-manager',
config: _objectSpread({}, config$1, pluginConfig),
initialize: function initialize(_ref) {
var config = _ref.config;
var containerId = config.containerId;
if (!containerId) {
throw new Error('No google tag manager containerId defined');
}
if (!scriptLoaded()) {
/* eslint-disable */
(function (w, d, s, l, i) {
w[l] = w[l] || [];
w[l].push({
'gtm.start': new Date().getTime(),
event: 'gtm.js'
});
var f = d.getElementsByTagName(s)[0],
j = d.createElement(s),
dl = l != 'dataLayer' ? '&l=' + l : '';
j.async = true;
j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl;
f.parentNode.insertBefore(j, f);
})(window, document, 'script', 'dataLayer', containerId);
/* eslint-enable */
}
},
page: function page(_ref2) {
var payload = _ref2.payload,
options = _ref2.options,
instance = _ref2.instance;
if (typeof dataLayer !== 'undefined') {
dataLayer.push(payload.properties);
}
},
track: function track(_ref3) {
var payload = _ref3.payload,
options = _ref3.options,
config = _ref3.config;
if (typeof dataLayer !== 'undefined') {
var anonymousId = payload.anonymousId,
userId = payload.userId,
properties = payload.properties,
category = payload.category;
var formattedPayload = properties;
if (userId) {
formattedPayload.userId = userId;
}
if (anonymousId) {
formattedPayload.anonymousId = anonymousId;
}
if (!category) {
formattedPayload.category = 'All';
}
if (config.debug) {
console.log('gtag push', _objectSpread({
event: payload.event
}, formattedPayload));
}
dataLayer.push(_objectSpread({
event: payload.event
}, formattedPayload));
}
},
loaded: function loaded() {
var hasDataLayer = !!(window.dataLayer && Array.prototype.push !== window.dataLayer.push);
return scriptLoaded() && hasDataLayer;
}
};
}
function scriptLoaded() {
var scripts = document.getElementsByTagName('script');
return !!Object.keys(scripts).filter(function (key) {
var src = scripts[key].src;
return src.match(/googletagmanager\.com\/gtm\.js/);
}).length;
}
/* This module will shake out unused code and work in browser and node 🎉 */
var index = googleTagManager$1;
export default index;