UNPKG

@gleaner/tracker

Version:

A JavaScript tracking library with ecommerce support

90 lines (79 loc) 1.69 kB
// DOM Events IE8+ Support const on = function (el, type, callback) { if (el.addEventListener) { el.addEventListener(type, callback); } else { el.attachEvent('on' + type, function() { callback.call(el); }); } } const off = function (el, type, callback) { if (el.removeEventListener) { el.removeEventListener(type, callback); } else { el.detachEvent('on' + type, callback); } } /* 'Unwraps' array to object by key. Similar to _.keyBy @param {Array} @param {String} @returns {Object} */ const keyBy = function(arr, key) { let result = {}; for (let i in arr) { let item = arr[i]; result[item[key]] = item; } return result; } /* @param {Object} @param {String} @returns {Object} */ const mapValues = function(obj, prop) { let result = {}; for (let key in obj) { result[key] = obj[key][prop]; } // Object.keys(obj).map((key) => { // result[key] = obj[key][prop]; // }); return result; } /* @returns {Boolean} flag for localStorage support */ function hasLocalStorage() { const test = '__gleaner-test__'; // random string would be better try { localStorage.setItem(test, test); localStorage.removeItem(test); return true; } catch(e) { return false; } } /* Creates function for capturing track commands in a queue @param {Object} context e.g. window @returns {Function} */ function createInstance(ctx = {}) { let instance = ctx[name] = ctx[name] || function() { ctx[name].queue.push(arguments); // log all calls in a queue } instance.queue = instance.queue || []; // queue alredy empty before calling the function... return instance; } export { on, off, keyBy, mapValues, hasLocalStorage, createInstance, }