UNPKG

tramatm-analytics-mixpanel

Version:

Mixpanel plugin for 'analytics' module

184 lines (147 loc) 6.58 kB
var analyticsMixpanel = (function () { 'use strict'; function mixpanelPlugin() { var pluginConfig = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return { name: "mixpanel", config: pluginConfig, /* https://developer.mixpanel.com/docs/javascript-full-api-reference#mixpanelinit */ initialize: function initialize(_ref) { var config = _ref.config; var token = config.token, customScriptSrc = config.customScriptSrc; if (!token) { throw new Error("No mixpanel token defined"); } // NoOp if mixpanel already loaded by external source or already loaded if (typeof window.mixpanel !== "undefined") { return; } // Load mixpanel library (function (c, a) { if (!a.__SV) { var b = window; try { var d, m, j, k = b.location, f = k.hash; d = function d(a, b) { return (m = a.match(RegExp(b + "=([^&]*)"))) ? m[1] : null; }; f && d(f, "state") && (j = JSON.parse(decodeURIComponent(d(f, "state"))), "mpeditor" === j.action && (b.sessionStorage.setItem("_mpcehash", f), history.replaceState(j.desiredHash || "", c.title, k.pathname + k.search))); } catch (n) {} var l, h; window.mixpanel = a; a._i = []; a.init = function (b, d, g) { function c(b, i) { var a = i.split("."); 2 == a.length && (b = b[a[0]], i = a[1]); b[i] = function () { b.push([i].concat(Array.prototype.slice.call(arguments, 0))); }; } var e = a; "undefined" !== typeof g ? e = a[g] = [] : g = "mixpanel"; e.people = e.people || []; e.toString = function (b) { var a = "mixpanel"; "mixpanel" !== g && (a += "." + g); b || (a += " (stub)"); return a; }; e.people.toString = function () { return e.toString(1) + ".people (stub)"; }; l = "disable time_event track track_pageview track_links track_forms track_with_groups add_group set_group remove_group register register_once alias unregister identify name_tag set_config reset opt_in_tracking opt_out_tracking has_opted_in_tracking has_opted_out_tracking clear_opt_in_out_tracking people.set people.set_once people.unset people.increment people.append people.union people.track_charge people.clear_charges people.delete_user people.remove".split(" "); for (h = 0; h < l.length; h++) { c(e, l[h]); } var f = "set set_once union unset remove delete".split(" "); e.get_group = function () { function a(c) { b[c] = function () { call2_args = arguments; call2 = [c].concat(Array.prototype.slice.call(call2_args, 0)); e.push([d, call2]); }; } for (var b = {}, d = ["get_group"].concat(Array.prototype.slice.call(arguments, 0)), c = 0; c < f.length; c++) { a(f[c]); } return b; }; a._i.push([b, d, g]); }; a.__SV = 1.2; b = c.createElement("script"); b.type = "text/javascript"; b.async = !0; b.src = customScriptSrc ? customScriptSrc : "undefined" !== typeof MIXPANEL_CUSTOM_LIB_URL ? MIXPANEL_CUSTOM_LIB_URL : "file:" === c.location.protocol && "//cdn.mxpnl.com/libs/mixpanel-2-latest.min.js".match(/^\/\//) ? "https://cdn.mxpnl.com/libs/mixpanel-2-latest.min.js" : "//cdn.mxpnl.com/libs/mixpanel-2-latest.min.js"; d = c.getElementsByTagName("script")[0]; d.parentNode.insertBefore(b, d); } })(document, window.mixpanel || []); mixpanel.init(config.token, { batch_requests: true }); }, /** * Identify a visitor in mixpanel * @link https://developer.mixpanel.com/docs/javascript-full-api-reference#mixpanelidentify * * Mixpanel doesn't allow to set properties directly in identify, so mixpanel.people.set is * also called if properties are passed */ identify: function identify(_ref2) { var payload = _ref2.payload; var userId = payload.userId, traits = payload.traits; if (typeof userId === "string") { mixpanel.identify(userId); } if (traits) { mixpanel.people.set(traits); } }, /** * Mixpanel doesn't have a "page" function, so we are using the track method by sending * the path as tracked event and search parameters as properties */ page: function page(_ref3) { var payload = _ref3.payload; mixpanel.track(payload.properties.pageName, { search: payload.properties.search }); }, /* https://developer.mixpanel.com/docs/javascript-full-api-reference#mixpaneltrack */ track: function track(_ref4) { var payload = _ref4.payload; mixpanel.track(payload.event, payload.properties); }, loaded: function loaded() { return !!window.mixpanel; }, /* Clears super properties and generates a new random distinct_id for this instance. Useful for clearing data when a user logs out. */ reset: function reset() { mixpanel.reset(); }, /* Custom methods to add .alias call */ methods: { /** * The alias method creates an alias which Mixpanel will use to remap one id to another. Multiple aliases can point to the same identifier. * @link https://developer.mixpanel.com/docs/javascript-full-api-reference#mixpanelalias * * @param {string} [alias] - A unique identifier that you want to use for this user in the future. * @param {string} [original] - The current identifier being used for this user. */ alias: function alias(_alias, original) { mixpanel.alias(_alias, original); } } }; } /* This module will shake out unused code and work in browser and node 🎉 */ var index = mixpanelPlugin ; return index; }());