-
-
Notifications
You must be signed in to change notification settings - Fork 160
/
mixpanel.js
87 lines (72 loc) · 3.98 KB
/
mixpanel.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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import { assert } from '@ember/debug';
import {
without,
compact,
hasOwnProperties,
} from 'ember-metrics/-private/utils/object-transforms';
import removeFromDOM from 'ember-metrics/-private/utils/remove-from-dom';
import BaseAdapter from './base';
export default class Mixpanel extends BaseAdapter {
toStringExtension() {
return 'Mixpanel';
}
install() {
const config = { ...{ batch_requests: true }, ...this.config };
const { token } = config;
delete config.token;
assert(
`[ember-metrics] You must pass a valid \`token\` to the ${this.toString()} adapter`,
token
);
this._injectScript();
window.mixpanel.init(token, config);
}
/* eslint-disable */
// prettier-ignore
_injectScript() {
(function(c,a){if(!a.__SV){var b=window;try{var d,m,j,k=b.location,f=k.hash;d=function(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="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||[]);
}
/* eslint-enable */
identify(options = {}) {
const compactedOptions = compact(options);
const { distinctId } = compactedOptions;
const props = without(compactedOptions, 'distinctId');
if (hasOwnProperties(props)) {
window.mixpanel.identify(distinctId);
window.mixpanel.people.set(props);
} else {
window.mixpanel.identify(distinctId);
}
}
trackEvent(options = {}) {
const compactedOptions = compact(options);
const { event } = compactedOptions;
const props = without(compactedOptions, 'event');
if (hasOwnProperties(props)) {
window.mixpanel.track(event, props);
} else {
window.mixpanel.track(event);
}
}
trackPage(options = {}) {
const event = { event: 'page viewed' };
const mergedOptions = { ...event, ...options };
this.trackEvent(mergedOptions);
}
alias(options = {}) {
const compactedOptions = compact(options);
const { alias, original } = compactedOptions;
if (original) {
window.mixpanel.alias(alias, original);
} else {
window.mixpanel.alias(alias);
}
}
uninstall() {
removeFromDOM('script[src*="mixpanel"]');
delete window.mixpanel;
}
}