This repository has been archived by the owner on Apr 27, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy pathmixpanel-lite.min.js
8 lines (8 loc) · 10.8 KB
/
mixpanel-lite.min.js
1
2
3
4
5
6
7
8
/*!
* mixpanel-lite.js - v1.6.0
* Lightweight version of mixpanel-js with offline support
* https://github.com/john-doherty/mixpanel-lite
* @author John Doherty <www.johndoherty.info>
* @license MIT
*/
!function(e,t){if(e.localStorage)if(e.Promise){var n=localStorage,r="https://api.mixpanel.com/track?ip=1&verbose=1&data=",o="https://api.mixpanel.com/engage?ip=1&verbose=1&data=",i=null,a=!1,l=!1,s=null,c=(new Date).getTime(),d=0,u={},g={exists:function(e){return Object.prototype.hasOwnProperty.call(n,e)},get:function(e){var t=String(n.getItem(e));if("null"===t)return null;if("undefined"!==t){if(/^[0-9.]+$/.test(t))return parseFloat(t);if(/^[-0-9]+$/.test(t))return parseInt(t,10);if("true"===t||"false"===t)return"true"===t;if("{"===t[0]||"["===t[0])try{var r=JSON.parse(t);if("object"==typeof r||Array.isArray(r))return r}catch(e){}return t}},set:function(e,t){if("string"!=typeof e)throw new TypeError("localStorage: Key must be a string");("object"==typeof t||Array.isArray(t))&&(t=JSON.stringify(t)),n.setItem(e,t)},remove:function(e){n.removeItem(e)},clear:function(){n.clear()}},f={_key:"mixpanel-lite",_maxLength:100,all:function(){return g.get(f._key)||[]},add:function(e){var t=f.all();d++,e._id=c+"-"+d,t.length+1>f._maxLength&&t.shift(),t.push(e),g.set(f._key,t)},remove:function(e){var t=(e||[]).map(function(e){return e._id}),n=f.all().filter(function(e){return-1===t.indexOf(e._id)});g.set(f._key,n)},clear:function(){g.set(f._key,[])}},p={init:function(e,t){console.log("mixpanel.track('"+e+"',"+JSON.stringify(t||{})+")")},track:function(e,t){console.log("mixpanel.track('"+e+"',"+JSON.stringify(t||{})+")")},register:function(e){console.log("mixpanel.register("+JSON.stringify(e||{})+")")},reset:function(){console.log("mixpanel.reset()")},identify:function(e){console.log("mixpanel.identify('"+e+"')")},getProperty:function(e){console.log("mixpanel.getProperty('"+e+"')")},people:{set:function(e){console.log("mixpanel.people.set("+JSON.stringify(e||{})+")")}},mute:O,unmute:$,muted:!0},m={init:B,track:v,register:function(e){Object.keys(e||{}).forEach(function(t){null!==e[t]&&""!==e[t]?u[t]=e[t]:delete u[t]})},reset:function(){B(i),a&&console.log("mixpanel.reset()")},identify:function(e){e&&""!==e.trim()?(a&&console.log("mixpanel.identify('"+e+"')"),v("$identify",{$anon_distinct_id:u.distinct_id,distinct_id:e,$user_id:e}),u.distinct_id=e,u.$user_id=e):console.warn("mixpanel.identify: Invalid id")},getProperty:function(e){return u[e]},people:{set:function(e){if(e&&"object"==typeof e){var t={$token:i,$distinct_id:u.distinct_id,$set:{}};Object.keys(e||{}).forEach(function(n){t.$set[n]=e[n]}),Object.keys(t.$set).forEach(function(e){null!==t.$set[e]&&""!==t.$set[e]||delete t.$set[e]}),f.add(t),b(),a&&(console.log("mixpanel.people.set("+JSON.stringify(e||{})+")"),console.dir(t))}else console.warn("mixpanel.setPeople: Invalid data param, must be an object")}},mute:O,unmute:$,muted:!1};e.mixpanel=m,e.addEventListener(e.cordova?"deviceready":"load",b,{passive:!0}),e.addEventListener("online",b,{passive:!0})}else console.warn("mixpanel-lite: Promise not supported (try adding a polyfill)");else console.warn("mixpanel-lite: localStorage not supported");function h(){var e=navigator.connection||navigator.mozConnection||navigator.webkitConnection||{};return e.effectiveType||e.type||""}function v(t,n){if(i)if(t&&""!==t)if(n&&"object"!=typeof n)console.warn("mixpanel.track: Data param must be an object");else{var r={event:t,properties:y(u)};Object.keys(n||{}).forEach(function(e){r.properties[e]=n[e]}),r.properties.$insert_id=Math.random().toString(36).substring(2,10)+Math.random().toString(36).substring(2,10),r.properties.time=Math.round((new Date).getTime()/1e3),Object.keys(r.properties).forEach(function(e){null!==r.properties[e]&&""!==r.properties[e]||delete r.properties[e]}),e.navigator.onLine||(r.properties.offline=!0),function(){if(e._phantom||e.phantom)return!0;if(e.__nightmare)return!0;if(navigator.webdriver)return!0;if(e.Cypress)return!0;if(/HeadlessChrome/.test(e.navigator.userAgent))return!0;if(0===screen.width||0===screen.height)return!0;return!1}()&&(r.properties.automated=!0),(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(location.hostname)||"file:"===location.protocol)&&(r.properties.dev=!0),function(){for(var e=String(navigator.userAgent||"").toLowerCase(),t=["ahrefsbot","ahrefssiteaudit","baiduspider","bingbot","bingpreview","chrome-lighthouse","facebookexternal","petalbot","pinterest","screaming frog","yahoo! slurp","yandexbot","adsbot-google","apis-google","duplexweb-google","feedfetcher-google","google favicon","google web preview","google-read-aloud","googlebot","googleweblight","mediapartners-google","storebot-google","twitterbot","coccocbot","duckduckbot","barkrowler","applebot","tweetmemebot","bitlybot","linkdexbot","linkedinbot","mj12bot","seznambot","slurp","sogou","teoma","yandex","alexabot","semrushbot","ubot","crawler","spider","exabot"],n=0;n<t.length;n++)if(-1!==e.indexOf(t[n]))return!0;return!1}()&&(r.properties.bot=!0),f.add(r),b(),a&&(n?console.log("mixpanel.track('"+t+"',"+JSON.stringify(n||{})+")"):console.log("mixpanel.track('"+t+"')"),console.dir(r))}else console.warn("mixpanel.track: Invalid eventName");else console.warn("mixpanel.track: You must call mixpanel.init(token) first")}function b(){if(l)return s&&clearTimeout(s),void(s=setTimeout(b,500));var t=f.all();if(-1!==t.length){l=!0,s&&(clearTimeout(s),s=null);var n,i,c=t.map(function(t){return function(){var n=t.$set?o:r,i=y(t);delete i._id;var a,l=(a=JSON.stringify(i),e.btoa(unescape(encodeURIComponent(a))));return function(e){return new Promise(function(t,n){var r=new XMLHttpRequest;r.open("GET",e),r.withCredentials=!0,r.onreadystatechange=function(){4===r.readyState&&(200===r.status?t({url:e,status:200,body:r.responseText||""}):n({url:e,status:r.status,body:r.responseText||""}))},r.send()})}(n+=encodeURIComponent(l)+"&_="+(new Date).getTime()).then(function(){t.__completed=!0})}});(n=c,i=Promise.resolve(),n.forEach(function(e){i=i.then(e)}),i).then(function(){var e=t.filter(function(e){return e.__completed});f.remove(e),l=!1}).catch(function(e){a&&console.log(e),l=!1})}}function y(e){return JSON.parse(JSON.stringify(e))}function k(){var e=navigator.userAgent;return/Windows Phone/i.test(e)||/WPDesktop/.test(e)?"Windows Phone":/iPad/.test(e)?"iPad":/iPod/.test(e)?"iPod Touch":/iPhone/.test(e)?"iPhone":/(BlackBerry|PlayBook|BB10)/i.test(e)?"BlackBerry":/Android/.test(e)?"Android":""}function _(e,t){return-1!==e.indexOf(t)}function x(){var t=navigator.userAgent,n=navigator.vendor||"";return e.opera||_(t," OPR/")?_(t,"Mini")?"Opera Mini":"Opera":/(BlackBerry|PlayBook|BB10)/i.test(t)?"BlackBerry":_(t,"IEMobile")||_(t,"WPDesktop")?"Internet Explorer Mobile":_(t,"Edge")?"Microsoft Edge":_(t,"FBIOS")?"Facebook Mobile":_(t,"Chrome")?"Chrome":_(t,"CriOS")?"Chrome iOS":_(t,"UCWEB")||_(t,"UCBrowser")?"UC Browser":_(t,"FxiOS")?"Firefox iOS":_(n,"Apple")?_(t,"Mobile")?"Mobile Safari":"Safari":_(t,"Android")?"Android Mobile":_(t,"Konqueror")?"Konqueror":_(t,"Firefox")?"Firefox":_(t,"MSIE")||_(t,"Trident/")?"Internet Explorer":_(t,"Gecko")?"Mozilla":""}function w(){var e=x(),t=navigator.userAgent,n={"Internet Explorer Mobile":/rv:(\d+(\.\d+)?)/,"Microsoft Edge":/Edge\/(\d+(\.\d+)?)/,Chrome:/Chrome\/(\d+(\.\d+)?)/,"Chrome iOS":/CriOS\/(\d+(\.\d+)?)/,"UC Browser":/(UCBrowser|UCWEB)\/(\d+(\.\d+)?)/,Safari:/Version\/(\d+(\.\d+)?)/,"Mobile Safari":/Version\/(\d+(\.\d+)?)/,Opera:/(Opera|OPR)\/(\d+(\.\d+)?)/,Firefox:/Firefox\/(\d+(\.\d+)?)/,"Firefox iOS":/FxiOS\/(\d+(\.\d+)?)/,Konqueror:/Konqueror:(\d+(\.\d+)?)/,BlackBerry:/BlackBerry (\d+(\.\d+)?)/,"Android Mobile":/android\s(\d+(\.\d+)?)/,"Internet Explorer":/(rv:|MSIE )(\d+(\.\d+)?)/,Mozilla:/rv:(\d+(\.\d+)?)/}[e];if(void 0===n)return null;var r=t.match(n);return r?parseFloat(r[r.length-2]):null}function S(){var t=function(){var t,n=1*new Date;if(e.performance&&e.performance.now)t=e.performance.now();else for(t=0;n==1*new Date;)t++;return n.toString(16)+Math.floor(t).toString(16)},n=(screen.height*screen.width).toString(16);return t()+"-"+Math.random().toString(16).replace(".","")+"-"+function(){var e,t,n=navigator.userAgent,r=[],o=0;function i(e,t){var n,o=0;for(n=0;n<t.length;n++)o|=r[n]<<8*n;return e^o}for(e=0;e<n.length;e++)t=n.charCodeAt(e),r.unshift(255&t),r.length>=4&&(o=i(o,r),r=[]);return r.length>0&&(o=i(o,r)),o.toString(16)}()+"-"+n+"-"+t()}function O(){e.mixpanel=p}function $(){e.mixpanel=m}function B(n,l){if(!0===(l=l||{}).mute&&(e.mixpanel=p),l.trackingUrl&&""!==l.trackingUrl&&(r=l.trackingUrl),l.engageUrl&&""!==l.engageUrl&&(o=l.engageUrl),""!==(n=String(n||""))){i=n,a=!0===l.debug;var s,c,d=S(),f=g.get("device_id")||S();g.exists("device_id")||g.set("device_id",f),u={token:n,$os:(c=navigator.userAgent,/Windows/i.test(c)?/Phone/.test(c)||/WPDesktop/.test(c)?"Windows Phone":"Windows":/(iPhone|iPad|iPod)/.test(c)?"iOS":/Android/.test(c)?"Android":/(BlackBerry|PlayBook|BB10)/i.test(c)?"BlackBerry":/Mac/i.test(c)?"Mac OS X":/Linux/.test(c)?"Linux":/CrOS/.test(c)?"Chrome OS":""),$browser:x(),$browser_version:w(),$device:k(),$screen_height:screen.height,$screen_width:screen.width,$referrer:t.referrer,$referring_domain:(s=String(t.referrer||"").split("/"),s.length>=3?s[2]:""),distinct_id:d,$device_id:f,mp_lib:"mixpanel-lite",$lib_version:"1.6.0",language:navigator.languages&&navigator.languages.length?navigator.languages[0]:navigator.language||navigator.userLanguage||navigator.browserLanguage||navigator.systemLanguage||"en"};var m=function(){var t=new URLSearchParams(e.location.search||""),n={};return t.has("utm_source")&&(n.source=t.get("utm_source")),t.has("utm_medium")&&(n.medium=t.get("utm_medium")),t.has("utm_campaign")&&(n.campaign=t.get("utm_campaign")),t.has("utm_term")&&(n.term=t.get("utm_term")),t.has("utm_content")&&(n.content=t.get("utm_content")),Object.keys(n).length>0?n:null}();m&&(u.utm=m);var v,b,y=(v=new URLSearchParams(e.location.search||""),b={},v.has("dclid")&&(b.dclid=v.get("dclid")),v.has("fbclid")&&(b.fbclid=v.get("fbclid")),v.has("gclid")&&(b.gclid=v.get("gclid")),v.has("ko_click_id")&&(b.ko_click_id=v.get("ko_click_id")),v.has("li_fat_id")&&(b.li_fat_id=v.get("li_fat_id")),v.has("msclkid")&&(b.msclkid=v.get("msclkid")),v.has("ttclid")&&(b.ttclid=v.get("ttclid")),v.has("twclid")&&(b.twclid=v.get("twclid")),v.has("wbraid")&&(b.wbraid=v.get("wbraid")),Object.keys(b).length>0?b:null);y&&(u.ad=y),0===String(e.location.protocol).indexOf("http")&&(u.$current_url=e.location.href),"1"===String(navigator.doNotTrack||"0")&&(u.doNotTrack=!0),e.device&&(e.device.manufacturer&&(u.$manufacturer=e.device.manufacturer),e.device.model&&(u.$model=e.device.model),e.device.version&&(u.$os_version=e.device.version)),u.connectionType=h();var _=navigator.connection||navigator.mozConnection||navigator.webkitConnection;_&&_.addEventListener&&_.addEventListener("change",function(){u.connectionType=h()}),a&&console.log("mixpanel.init('"+i+"')")}else console.warn("mixpanel.init: invalid token")}}(this,document);