Skip to content

Instantly share code, notes, and snippets.

@jfeldstein
Created April 18, 2019 21:37
Show Gist options
  • Save jfeldstein/5e8c78063abdac19842e474ff0a5c442 to your computer and use it in GitHub Desktop.
Save jfeldstein/5e8c78063abdac19842e474ff0a5c442 to your computer and use it in GitHub Desktop.
<script>
var DEBUG=!1,DEVICE_UNIQUE_ID="device_unique_id",DOMAIN=".kiddom.co",EVENT_LOADED_A_PAGE="Loaded a Page",PROTOCOL="https://",HOST="api.kiddom.co",PATH="/track/anonymous",TRACK_ENDPOINT=PROTOCOL+HOST+PATH,docCookies={getItem:function(e){return e&&decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*"+encodeURIComponent(e).replace(/[\-\.\+\*]/g,"\\$&")+"\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"))||null},setItem:function(e,t,o,s,n,a){if(!e||/^(?:expires|max\-age|path|domain|secure)$/i.test(e))return!1;var i="";if(o)switch(o.constructor){case Number:i=o===1/0?"; expires=Fri, 31 Dec 9999 23:59:59 GMT":"; max-age="+o;break;case String:i="; expires="+o;break;case Date:i="; expires="+o.toUTCString()}return document.cookie=encodeURIComponent(e)+"="+encodeURIComponent(t)+i+(n?"; domain="+n:"")+(s?"; path="+s:"")+(a?"; secure":""),!0},removeItem:function(e,t,o){return!!this.hasItem(e)&&(document.cookie=encodeURIComponent(e)+"=; expires=Thu, 01 Jan 1970 00:00:00 GMT"+(o?"; domain="+o:"")+(t?"; path="+t:""),!0)},hasItem:function(e){return!(!e||/^(?:expires|max\-age|path|domain|secure)$/i.test(e))&&new RegExp("(?:^|;\\s*)"+encodeURIComponent(e).replace(/[\-\.\+\*]/g,"\\$&")+"\\s*\\=").test(document.cookie)},keys:function(){for(var e=document.cookie.replace(/((?:^|\s*;)[^\=]+)(?=;|$)|^\s*|\s*(?:\=[^;]*)?(?:\1|$)/g,"").split(/\s*(?:\=[^;]*)?;\s*/),t=e.length,o=0;o<t;o++)e[o]=decodeURIComponent(e[o]);return e},clear:function(e,t){for(var o=this.keys(),s=o.length,n=0;n<s;n++)this.removeItem(o[n],e,t)}},AnalyticsUTM={cookies:["first_","latest_"],params:["utm_campaign","utm_content","utm_medium","utm_source","utm_term"],values:{cookies:{},params:{}},merged:{},get:function(){this.params.forEach(function(o){var e=getQueryStringValue(o);this.values.params[o]=""===e?null:e,this.cookies.forEach(function(e){var t=e+o;this.values.cookies[t]=docCookies.getItem(t)},this),this.merge(o)},this);var e=docCookies.getItem(DEVICE_UNIQUE_ID)||getUUID();return this.merged[DEVICE_UNIQUE_ID]=e.toLowerCase(),setUUID(this.merged[DEVICE_UNIQUE_ID]),this},merge:function(e){Object.keys(this.values.params).forEach(function(e){var t=this.values.params[e];if(null!==t){var o="first_"+e,s="latest_"+e,n=new Date;n.setDate(n.getDate()+30),null===this.values.cookies[o]?(this.merged[o]=t,docCookies.setItem(o,t,n,"/",DOMAIN)):this.merged[o]=this.values.cookies[o],this.merged[s]=t,docCookies.setItem(s,t,n,"/",DOMAIN)}},this)},track:function(e,t){var o=this.get().merged,s=window.location,n=new XMLHttpRequest;n.withCredentials=!0,n.open("POST",TRACK_ENDPOINT);var a=JSON.stringify({event:e,device_id:o[DEVICE_UNIQUE_ID],metadata:{Attribution:o,User:{device_id:o[DEVICE_UNIQUE_ID],email:t},url:s.protocol+"//"+s.host+s.pathname}});DEBUG&&console.log("Body",a),n.onreadystatechange=function(){4===n.readyState&&(200!==n.status&&204!==n.status||!DEBUG?DEBUG&&console.log("Track failed",n.statusText):console.log("Track success",n.responseText))},n.send(a)}};function getQueryStringValue(e){return decodeURIComponent(window.location.search.replace(new RegExp("^(?:.*[&\\?]"+encodeURIComponent(e).replace(/[\.\+\*]/g,"\\$&")+"(?:\\=([^&]*))?)?.*$","i"),"$1"))}function s4(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)}function getUUID(){return[s4(),s4(),"-",s4(),"-",s4(),"-",s4(),"-",s4(),s4(),s4()].join("")}function setUUID(e){var t=new Date;t.setDate(t.getDate()+90),docCookies.setItem(DEVICE_UNIQUE_ID,e,t,"/",DOMAIN)}
</script>
<script>
AnalyticsUTM.track(EVENT_LOADED_A_PAGE);
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment