{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./app/javascript/packs/tracking.js","webpack:///./node_modules/ahoy.js/dist/ahoy.esm.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","ahoy","require","window","Cookies","ttl","domain","expires","cookieDomain","date","Date","setTime","getTime","toGMTString","document","cookie","escape","nameEQ","ca","split","length","charAt","substring","indexOf","unescape","config","urlPrefix","visitsUrl","eventsUrl","page","platform","useBeacon","startOnReady","trackVisits","cookies","headers","visitParams","withCredentials","visitDuration","visitorDuration","Ahoy","configure","options","visitId","visitorId","track","callback","$","jQuery","Zepto","isReady","queue","canStringify","JSON","eventQueue","canTrackNow","trackNow","obj","keys","navigator","setCookie","getCookie","destroyCookie","log","message","console","setReady","shift","matchesSelector","element","selector","matches","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","apply","parentElement","onEvent","eventName","addEventListener","e","matchedElement","target","generateId","replace","Math","random","toString","saveEventQueue","stringify","csrfToken","meta","querySelector","content","CSRFProtection","xhr","token","setRequestHeader","sendRequest","url","data","success","ajax","type","contentType","dataType","beforeSend","xhrFields","XMLHttpRequest","header","open","onload","status","send","eventData","event","events","visit_token","visitor_token","trackEvent","ready","id","splice","trackEventNow","param","events_json","sendBeacon","FormData","append","serialize","location","pathname","presence","str","eventProperties","cleanObject","tag","this","tagName","toLowerCase","className","section","getClosestSection","parentNode","hasAttribute","getAttribute","createVisit","getVisitId","getVisitorId","landing_page","href","screen_width","screen","width","screen_height","height","js","referrer","push","getVisitToken","getVisitorToken","reset","debug","enabled","properties","time","setTimeout","trackView","additionalProperties","title","propName","trackClicks","undefined","text","textContent","innerText","innerHTML","trim","trackSubmits","trackChanges","trackAll","parse","start","readyState"],"mappings":";aACE,IAAIA,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUC,QAGnC,IAAIC,EAASJ,EAAiBE,GAAY,CACzCG,EAAGH,EACHI,GAAG,EACHH,QAAS,IAUV,OANAI,EAAQL,GAAUM,KAAKJ,EAAOD,QAASC,EAAQA,EAAOD,QAASF,GAG/DG,EAAOE,GAAI,EAGJF,EAAOD,QAKfF,EAAoBQ,EAAIF,EAGxBN,EAAoBS,EAAIV,EAGxBC,EAAoBU,EAAI,SAASR,EAASS,EAAMC,GAC3CZ,EAAoBa,EAAEX,EAASS,IAClCG,OAAOC,eAAeb,EAASS,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEZ,EAAoBkB,EAAI,SAAShB,GACX,qBAAXiB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAeb,EAASiB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAeb,EAAS,aAAc,CAAEmB,OAAO,KAQvDrB,EAAoBsB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQrB,EAAoBqB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,kBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFA1B,EAAoBkB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOrB,EAAoBU,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRzB,EAAoB6B,EAAI,SAAS1B,GAChC,IAAIS,EAAST,GAAUA,EAAOqB,WAC7B,WAAwB,OAAOrB,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAH,EAAoBU,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRZ,EAAoBa,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG/B,EAAoBkC,EAAI,UAIjBlC,EAAoBA,EAAoBmC,EAAI,K,sBClFrD,IAAMC,EAAOC,EAAQ,KACrBC,OAAOF,KAAOA,EAAI,SAAYA,G,iCCD9B,OAUA,IAAIG,EACG,SAAU5B,EAAMU,EAAOmB,EAAKC,GAC/B,IAAIC,EAAU,GACVC,EAAe,GACnB,GAAIH,EAAK,CACP,IAAII,EAAO,IAAIC,KACfD,EAAKE,QAAQF,EAAKG,UAAmB,GAANP,EAAW,KAC1CE,EAAU,aAAeE,EAAKI,cAE5BP,IACFE,EAAe,YAAcF,GAE/BQ,SAASC,OAASvC,EAAO,IAAMwC,OAAO9B,GAASqB,EAAUC,EAAe,YAZxEJ,EAcG,SAAU5B,GACb,IAAIP,EAAGK,EACH2C,EAASzC,EAAO,IAChB0C,EAAKJ,SAASC,OAAOI,MAAM,KAC/B,IAAKlD,EAAI,EAAGA,EAAIiD,EAAGE,OAAQnD,IAAK,CAE9B,IADAK,EAAI4C,EAAGjD,GACgB,MAAhBK,EAAE+C,OAAO,IACd/C,EAAIA,EAAEgD,UAAU,EAAGhD,EAAE8C,QAEvB,GAA0B,IAAtB9C,EAAEiD,QAAQN,GACZ,OAAOO,SAASlD,EAAEgD,UAAUL,EAAOG,OAAQ9C,EAAE8C,SAGjD,OAAO,MAIPK,EAAS,CACXC,UAAW,GACXC,UAAW,eACXC,UAAW,eACXC,KAAM,KACNC,SAAU,MACVC,WAAW,EACXC,cAAc,EACdC,aAAa,EACbC,SAAS,EACT1B,aAAc,KACd2B,QAAS,GACTC,YAAa,GACbC,iBAAiB,EACjBC,cAAe,IACfC,gBAAiB,SAGftC,EAAOE,OAAOF,MAAQE,OAAOqC,MAAQ,GAEzCvC,EAAKwC,UAAY,SAAUC,GACzB,IAAK,IAAIlD,KAAOkD,EACVA,EAAQ5C,eAAeN,KACzBiC,EAAOjC,GAAOkD,EAAQlD,KAM5BS,EAAKwC,UAAUxC,GAEf,IACI0C,EAASC,EAAWC,EAmGDC,EApGnBC,EAAI5C,OAAO6C,QAAU7C,OAAO8C,OAAS9C,OAAO4C,EAE5CG,GAAU,EACVC,EAAQ,GACRC,EAAgC,qBAAX,MAAqD,qBAApBC,KAAc,UACpEC,EAAa,GAMjB,SAAS1B,IACP,OAAOH,EAAOC,UAAYD,EAAOG,UAOnC,SAAS2B,IACP,OAAQ9B,EAAOM,WAAaN,EAAO+B,YALpBC,EAKyChC,EAAOU,QAJ5B,IAA5BxD,OAAO+E,KAAKD,GAAKrC,SAImDgC,GAAwD,qBAAjCjD,OAAOwD,UAAoB,aAAsBlC,EAAOY,gBAL5J,IAAiBoB,EAoBjB,SAASG,EAAUpF,EAAMU,EAAOmB,GAC9BD,EAAY5B,EAAMU,EAAOmB,EAAKoB,EAAOjB,cAAgBiB,EAAOnB,QAG9D,SAASuD,EAAUrF,GACjB,OAAO4B,EAAY5B,GAGrB,SAASsF,EAActF,GACrB4B,EAAY5B,EAAM,IAAK,GAGzB,SAASuF,EAAIC,GACPH,EAAU,eACZ1D,OAAO8D,QAAQF,IAAIC,GAIvB,SAASE,IAEP,IADA,IAAIpB,EACIA,EAAWK,EAAMgB,SACvBrB,IAEFI,GAAU,EAWZ,SAASkB,EAAgBC,EAASC,GAChC,IAAIC,EAAUF,EAAQE,SACpBF,EAAQD,iBACRC,EAAQG,oBACRH,EAAQI,mBACRJ,EAAQK,kBACRL,EAAQM,sBAEV,OAAIJ,EACEA,EAAQK,MAAMP,EAAS,CAACC,IACnBD,EACEA,EAAQQ,cACVT,EAAgBC,EAAQQ,cAAeP,GAEzC,MAEPP,EAAI,mBACG,MAIX,SAASe,EAAQC,EAAWT,EAAUxB,GACpChC,SAASkE,iBAAiBD,GAAW,SAAUE,GAC7C,IAAIC,EAAiBd,EAAgBa,EAAEE,OAAQb,GAC3CY,GACFpC,EAAS1E,KAAK8G,EAAgBD,MAepC,SAASG,IACP,MAAO,uCAAuCC,QAAQ,SAAS,SAAS/G,GACtE,IAAIS,EAAkB,GAAduG,KAAKC,SAAY,EACzB,OADqC,KAALjH,EAAWS,EAAO,EAAFA,EAAM,GAC7CyG,SAAS,OAItB,SAASC,IACHhE,EAAOS,SAAWkB,GACpBQ,EAAU,cAAeP,KAAKqC,UAAUpC,GAAa,GAMzD,SAASqC,IACP,IAAIC,EAAO9E,SAAS+E,cAAc,yBAClC,OAAOD,GAAQA,EAAKE,QAQtB,SAASC,EAAeC,GACtB,IAAIC,EAAQN,IACRM,GAASD,EAAIE,iBAAiB,eAAgBD,GAGpD,SAASE,EAAYC,EAAKC,EAAMC,GAC9B,GAAIlD,EACF,GAAIL,GAAKA,EAAEwD,KACTxD,EAAEwD,KAAK,CACLC,KAAM,OACNJ,IAAKA,EACLC,KAAMhD,KAAKqC,UAAUW,GACrBI,YAAa,kCACbC,SAAU,OACVC,WAAYZ,EACZO,QAASA,EACTnE,QAASV,EAAOU,QAChByE,UAAW,CACTvE,gBAAiBZ,EAAOY,uBAGvB,CACL,IAAI2D,EAAM,IAAIa,eAId,IAAK,IAAIC,KAHTd,EAAIe,KAAK,OAAQX,GAAK,GACtBJ,EAAI3D,gBAAkBZ,EAAOY,gBAC7B2D,EAAIE,iBAAiB,eAAgB,oBAClBzE,EAAOU,QACpBV,EAAOU,QAAQrC,eAAegH,IAChCd,EAAIE,iBAAiBY,EAAQrF,EAAOU,QAAQ2E,IAGhDd,EAAIgB,OAAS,WACQ,MAAfhB,EAAIiB,QACNX,KAGJP,EAAeC,GACfA,EAAIkB,KAAK7D,KAAKqC,UAAUW,KAK9B,SAASc,EAAUC,GACjB,IAAIf,EAAO,CACTgB,OAAQ,CAACD,IAQX,OANI3F,EAAOS,UACTmE,EAAKiB,YAAcF,EAAME,YACzBjB,EAAKkB,cAAgBH,EAAMG,sBAEtBH,EAAME,mBACNF,EAAMG,cACNlB,EAGT,SAASmB,EAAWJ,GAClBnH,EAAKwH,OAAO,WACVtB,EAAYvE,IAAauF,EAAUC,IAAQ,WAEzC,IAAK,IAAInJ,EAAI,EAAGA,EAAIqF,EAAWlC,OAAQnD,IACrC,GAAIqF,EAAWrF,GAAGyJ,IAAMN,EAAMM,GAAI,CAChCpE,EAAWqE,OAAO1J,EAAG,GACrB,MAGJwH,UAKN,SAASmC,EAAcR,GACrBnH,EAAKwH,OAAO,WACV,IA5EE7B,EA4EES,EAAOc,EAAUC,GACjBS,GA7EFjC,EAAO9E,SAAS+E,cAAc,2BACnBD,EAAKE,QA6EdG,EAAQN,IACRkC,GAAS5B,IAASI,EAAKwB,GAAS5B,GAEpCI,EAAKyB,YAAczE,KAAKqC,UAAUW,EAAKgB,eAChChB,EAAKgB,OACZlH,OAAOwD,UAAUoE,WAAWnG,IA9LhC,SAAmBjC,GACjB,IAAI0G,EAAO,IAAI2B,SACf,IAAK,IAAIxI,KAAOG,EACVA,EAAOG,eAAeN,IACxB6G,EAAK4B,OAAOzI,EAAKG,EAAOH,IAG5B,OAAO6G,EAuLoC6B,CAAU7B,OAIvD,SAASxE,IACP,OAAOJ,EAAOI,MAAQ1B,OAAOgI,SAASC,SAGxC,SAASC,EAASC,GAChB,OAAQA,GAAOA,EAAIlH,OAAS,EAAKkH,EAAM,KAczC,SAASC,IACP,OAZF,SAAqB9E,GACnB,IAAK,IAAIjE,KAAOiE,EACVA,EAAI3D,eAAeN,IACJ,OAAbiE,EAAIjE,WACCiE,EAAIjE,GAIjB,OAAOiE,EAIA+E,CAAY,CACjBC,IAAKC,KAAKC,QAAQC,cAClBlB,GAAIW,EAASK,KAAKhB,IAClB,MAASW,EAASK,KAAKG,WACvBhH,KAAMA,IACNiH,QAASC,EAAkBL,QAI/B,SAASK,EAAkB1E,GACzB,KAAQA,GAAWA,IAAYvD,SAAUuD,EAAUA,EAAQ2E,WACzD,GAAI3E,EAAQ4E,aAAa,gBACvB,OAAO5E,EAAQ6E,aAAa,gBAIhC,OAAO,KAGT,SAASC,IAOP,GANAjG,GAAU,EAEVP,EAAU1C,EAAKmJ,aACfxG,EAAY3C,EAAKoJ,eACjBxG,EAAQgB,EAAU,eAEK,IAAnBpC,EAAOS,UAA4C,IAAvBT,EAAOQ,YACrC8B,EAAI,2BACJG,SACK,GAAIvB,GAAWC,IAAcC,EAElCkB,EAAI,gBACJG,SAQA,GANKvB,GAEHiB,EAAU,aADVjB,EAAUyC,IACuB3D,EAAOa,eAItCuB,EAAU,cAAe,CAC3BE,EAAI,iBAECnB,GAEHgB,EAAU,eADVhB,EAAYwC,IACyB3D,EAAOc,iBAG9C,IAAI8D,EAAO,CACTiB,YAAa3E,EACb4E,cAAe3E,EACfd,SAAUL,EAAOK,SACjBwH,aAAcnJ,OAAOgI,SAASoB,KAC9BC,aAAcrJ,OAAOsJ,OAAOC,MAC5BC,cAAexJ,OAAOsJ,OAAOG,OAC7BC,IAAI,GAQN,IAAK,IAAIrK,KAJLsB,SAASgJ,SAAS1I,OAAS,IAC7BiF,EAAKyD,SAAWhJ,SAASgJ,UAGXrI,EAAOW,YACjBX,EAAOW,YAAYtC,eAAeN,KACpC6G,EAAK7G,GAAOiC,EAAOW,YAAY5C,IAInCuE,EAAIsC,GAEJF,EA5SG1E,EAAOC,UAAYD,EAAOE,UA4SJ0E,GAAM,WAE7BvC,EAAc,cACdI,YAGFH,EAAI,oBACJG,IA9PNjE,EAAKwH,MAAQ,SAAU3E,GACjBI,EACFJ,IAEAK,EAAM4G,KAAKjH,IA+Pf7C,EAAKmJ,WAAanJ,EAAK+J,cAAgB,WACrC,OAAOnG,EAAU,eAGnB5D,EAAKoJ,aAAepJ,EAAKgK,gBAAkB,WACzC,OAAOpG,EAAU,iBAGnB5D,EAAKiK,MAAQ,WAKX,OAJApG,EAAc,cACdA,EAAc,gBACdA,EAAc,eACdA,EAAc,eACP,GAGT7D,EAAKkK,MAAQ,SAAUC,GAMrB,OALgB,IAAZA,EACFtG,EAAc,cAEdF,EAAU,aAAc,IAAK,SAExB,GAGT3D,EAAK4C,MAAQ,SAAUrE,EAAM6L,GAE3B,IAAIjD,EAAQ,CACV5I,KAAMA,EACN6L,WAAYA,GAAc,GAC1BC,MAAM,IAAK5J,MAAQE,UAAY,IAC/B8G,GAAItC,IACJyE,IAAI,GA4BN,OAzBA5J,EAAKwH,OAAO,WACNhG,EAAOS,UAAYjC,EAAKmJ,cAC1BD,IAGFlJ,EAAKwH,OAAO,WACV1D,EAAIqD,GAEJA,EAAME,YAAcrH,EAAKmJ,aACzBhC,EAAMG,cAAgBtH,EAAKoJ,eAEvB9F,IACFqE,EAAcR,IAEd9D,EAAWyG,KAAK3C,GAChB3B,IAGA8E,YAAY,WACV/C,EAAWJ,KACV,aAKF,GAGTnH,EAAKuK,UAAY,SAAUC,GACzB,IAAIJ,EAAa,CACfjE,IAAKjG,OAAOgI,SAASoB,KACrBmB,MAAO5J,SAAS4J,MAChB7I,KAAMA,KAGR,GAAI4I,EACF,IAAI,IAAIE,KAAYF,EACdA,EAAqB3K,eAAe6K,KACtCN,EAAWM,GAAYF,EAAqBE,IAIlD1K,EAAK4C,MAAM,QAASwH,IAGtBpK,EAAK2K,YAAc,SAAUtG,QACVuG,IAAbvG,IACFP,EAAI,gDACJO,EAAW,iCAEbQ,EAAQ,QAASR,GAAU,SAAUW,GACnC,IAAIoF,EAAa9B,EAAgBnK,KAAKsK,KAAMzD,GAC5CoF,EAAWS,KAAyB,SAAlBT,EAAW5B,IAAiBC,KAAKxJ,OAASwJ,KAAKqC,aAAerC,KAAKsC,WAAatC,KAAKuC,WAAW5F,QAAQ,aAAc,KAAK6F,OAC7Ib,EAAWd,KAAOb,KAAKa,KACvBtJ,EAAK4C,MAAM,SAAUwH,OAIzBpK,EAAKkL,aAAe,SAAU7G,QACXuG,IAAbvG,IACFP,EAAI,iDACJO,EAAW,QAEbQ,EAAQ,SAAUR,GAAU,SAAUW,GACpC,IAAIoF,EAAa9B,EAAgBnK,KAAKsK,KAAMzD,GAC5ChF,EAAK4C,MAAM,UAAWwH,OAI1BpK,EAAKmL,aAAe,SAAU9G,QACXuG,IAAbvG,IAEFP,EAAI,2DACJO,EAAW,2BAEbQ,EAAQ,SAAUR,GAAU,SAAUW,GACpC,IAAIoF,EAAa9B,EAAgBnK,KAAKsK,KAAMzD,GAC5ChF,EAAK4C,MAAM,UAAWwH,OAI1BpK,EAAKoL,SAAW,WACdtH,EAAI,uDACJ9D,EAAKuK,YACLvK,EAAK2K,YAAY,iCACjB3K,EAAKkL,aAAa,QAClBlL,EAAKmL,aAAa,4BAIpB,IACE9H,EAAaD,KAAKiI,MAAMzH,EAAU,gBAAkB,MACpD,MAAOoB,IAIT,IAAK,IAAIhH,EAAI,EAAGA,EAAIqF,EAAWlC,OAAQnD,IACrCuJ,EAAWlE,EAAWrF,IAGxBgC,EAAKsL,MAAQ,WACXpC,IAEAlJ,EAAKsL,MAAQ,cAtWQzI,EAyWT,WACRrB,EAAOO,cACT/B,EAAKsL,SA1WqB,gBAAxBzK,SAAS0K,YAAwD,aAAxB1K,SAAS0K,WACpDjB,WAAWzH,EAAU,GAErBhC,SAASkE,iBAAiB,mBAAoBlC,GA2WnC","file":"js/tracking-77a8709a3216c23f82e3.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/packs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 114);\n","const ahoy = require('ahoy.js');\nwindow.ahoy = ahoy.default || ahoy;","/*!\n * Ahoy.js\n * Simple, powerful JavaScript analytics\n * https://github.com/ankane/ahoy.js\n * v0.3.9\n * MIT License\n */\n\n// https://www.quirksmode.org/js/cookies.html\n\nvar Cookies = {\n set: function (name, value, ttl, domain) {\n var expires = \"\";\n var cookieDomain = \"\";\n if (ttl) {\n var date = new Date();\n date.setTime(date.getTime() + (ttl * 60 * 1000));\n expires = \"; expires=\" + date.toGMTString();\n }\n if (domain) {\n cookieDomain = \"; domain=\" + domain;\n }\n document.cookie = name + \"=\" + escape(value) + expires + cookieDomain + \"; path=/\";\n },\n get: function (name) {\n var i, c;\n var nameEQ = name + \"=\";\n var ca = document.cookie.split(';');\n for (i = 0; i < ca.length; i++) {\n c = ca[i];\n while (c.charAt(0) === ' ') {\n c = c.substring(1, c.length);\n }\n if (c.indexOf(nameEQ) === 0) {\n return unescape(c.substring(nameEQ.length, c.length));\n }\n }\n return null;\n }\n};\n\nvar config = {\n urlPrefix: \"\",\n visitsUrl: \"/ahoy/visits\",\n eventsUrl: \"/ahoy/events\",\n page: null,\n platform: \"Web\",\n useBeacon: true,\n startOnReady: true,\n trackVisits: true,\n cookies: true,\n cookieDomain: null,\n headers: {},\n visitParams: {},\n withCredentials: false,\n visitDuration: 4 * 60, // default 4 hours\n visitorDuration: 2 * 365 * 24 * 60 // default 2 years\n};\n\nvar ahoy = window.ahoy || window.Ahoy || {};\n\nahoy.configure = function (options) {\n for (var key in options) {\n if (options.hasOwnProperty(key)) {\n config[key] = options[key];\n }\n }\n};\n\n// legacy\nahoy.configure(ahoy);\n\nvar $ = window.jQuery || window.Zepto || window.$;\nvar visitId, visitorId, track;\nvar isReady = false;\nvar queue = [];\nvar canStringify = typeof(JSON) !== \"undefined\" && typeof(JSON.stringify) !== \"undefined\";\nvar eventQueue = [];\n\nfunction visitsUrl() {\n return config.urlPrefix + config.visitsUrl;\n}\n\nfunction eventsUrl() {\n return config.urlPrefix + config.eventsUrl;\n}\n\nfunction isEmpty(obj) {\n return Object.keys(obj).length === 0;\n}\n\nfunction canTrackNow() {\n return (config.useBeacon || config.trackNow) && isEmpty(config.headers) && canStringify && typeof(window.navigator.sendBeacon) !== \"undefined\" && !config.withCredentials;\n}\n\nfunction serialize(object) {\n var data = new FormData();\n for (var key in object) {\n if (object.hasOwnProperty(key)) {\n data.append(key, object[key]);\n }\n }\n return data;\n}\n\n// cookies\n\nfunction setCookie(name, value, ttl) {\n Cookies.set(name, value, ttl, config.cookieDomain || config.domain);\n}\n\nfunction getCookie(name) {\n return Cookies.get(name);\n}\n\nfunction destroyCookie(name) {\n Cookies.set(name, \"\", -1);\n}\n\nfunction log(message) {\n if (getCookie(\"ahoy_debug\")) {\n window.console.log(message);\n }\n}\n\nfunction setReady() {\n var callback;\n while ((callback = queue.shift())) {\n callback();\n }\n isReady = true;\n}\n\nahoy.ready = function (callback) {\n if (isReady) {\n callback();\n } else {\n queue.push(callback);\n }\n};\n\nfunction matchesSelector(element, selector) {\n var matches = element.matches ||\n element.matchesSelector ||\n element.mozMatchesSelector ||\n element.msMatchesSelector ||\n element.oMatchesSelector ||\n element.webkitMatchesSelector;\n\n if (matches) {\n if (matches.apply(element, [selector])) {\n return element;\n } else if (element.parentElement) {\n return matchesSelector(element.parentElement, selector);\n }\n return null;\n } else {\n log(\"Unable to match\");\n return null;\n }\n}\n\nfunction onEvent(eventName, selector, callback) {\n document.addEventListener(eventName, function (e) {\n var matchedElement = matchesSelector(e.target, selector);\n if (matchedElement) {\n callback.call(matchedElement, e);\n }\n });\n}\n\n// http://beeker.io/jquery-document-ready-equivalent-vanilla-javascript\nfunction documentReady(callback) {\n if (document.readyState === \"interactive\" || document.readyState === \"complete\") {\n setTimeout(callback, 0);\n } else {\n document.addEventListener(\"DOMContentLoaded\", callback);\n }\n}\n\n// https://stackoverflow.com/a/2117523/1177228\nfunction generateId() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);\n return v.toString(16);\n });\n}\n\nfunction saveEventQueue() {\n if (config.cookies && canStringify) {\n setCookie(\"ahoy_events\", JSON.stringify(eventQueue), 1);\n }\n}\n\n// from rails-ujs\n\nfunction csrfToken() {\n var meta = document.querySelector(\"meta[name=csrf-token]\");\n return meta && meta.content;\n}\n\nfunction csrfParam() {\n var meta = document.querySelector(\"meta[name=csrf-param]\");\n return meta && meta.content;\n}\n\nfunction CSRFProtection(xhr) {\n var token = csrfToken();\n if (token) { xhr.setRequestHeader(\"X-CSRF-Token\", token); }\n}\n\nfunction sendRequest(url, data, success) {\n if (canStringify) {\n if ($ && $.ajax) {\n $.ajax({\n type: \"POST\",\n url: url,\n data: JSON.stringify(data),\n contentType: \"application/json; charset=utf-8\",\n dataType: \"json\",\n beforeSend: CSRFProtection,\n success: success,\n headers: config.headers,\n xhrFields: {\n withCredentials: config.withCredentials\n }\n });\n } else {\n var xhr = new XMLHttpRequest();\n xhr.open(\"POST\", url, true);\n xhr.withCredentials = config.withCredentials;\n xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n for (var header in config.headers) {\n if (config.headers.hasOwnProperty(header)) {\n xhr.setRequestHeader(header, config.headers[header]);\n }\n }\n xhr.onload = function() {\n if (xhr.status === 200) {\n success();\n }\n };\n CSRFProtection(xhr);\n xhr.send(JSON.stringify(data));\n }\n }\n}\n\nfunction eventData(event) {\n var data = {\n events: [event]\n };\n if (config.cookies) {\n data.visit_token = event.visit_token;\n data.visitor_token = event.visitor_token;\n }\n delete event.visit_token;\n delete event.visitor_token;\n return data;\n}\n\nfunction trackEvent(event) {\n ahoy.ready( function () {\n sendRequest(eventsUrl(), eventData(event), function() {\n // remove from queue\n for (var i = 0; i < eventQueue.length; i++) {\n if (eventQueue[i].id == event.id) {\n eventQueue.splice(i, 1);\n break;\n }\n }\n saveEventQueue();\n });\n });\n}\n\nfunction trackEventNow(event) {\n ahoy.ready( function () {\n var data = eventData(event);\n var param = csrfParam();\n var token = csrfToken();\n if (param && token) { data[param] = token; }\n // stringify so we keep the type\n data.events_json = JSON.stringify(data.events);\n delete data.events;\n window.navigator.sendBeacon(eventsUrl(), serialize(data));\n });\n}\n\nfunction page() {\n return config.page || window.location.pathname;\n}\n\nfunction presence(str) {\n return (str && str.length > 0) ? str : null;\n}\n\nfunction cleanObject(obj) {\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n if (obj[key] === null) {\n delete obj[key];\n }\n }\n }\n return obj;\n}\n\nfunction eventProperties() {\n return cleanObject({\n tag: this.tagName.toLowerCase(),\n id: presence(this.id),\n \"class\": presence(this.className),\n page: page(),\n section: getClosestSection(this)\n });\n}\n\nfunction getClosestSection(element) {\n for ( ; element && element !== document; element = element.parentNode) {\n if (element.hasAttribute('data-section')) {\n return element.getAttribute('data-section');\n }\n }\n\n return null;\n}\n\nfunction createVisit() {\n isReady = false;\n\n visitId = ahoy.getVisitId();\n visitorId = ahoy.getVisitorId();\n track = getCookie(\"ahoy_track\");\n\n if (config.cookies === false || config.trackVisits === false) {\n log(\"Visit tracking disabled\");\n setReady();\n } else if (visitId && visitorId && !track) {\n // TODO keep visit alive?\n log(\"Active visit\");\n setReady();\n } else {\n if (!visitId) {\n visitId = generateId();\n setCookie(\"ahoy_visit\", visitId, config.visitDuration);\n }\n\n // make sure cookies are enabled\n if (getCookie(\"ahoy_visit\")) {\n log(\"Visit started\");\n\n if (!visitorId) {\n visitorId = generateId();\n setCookie(\"ahoy_visitor\", visitorId, config.visitorDuration);\n }\n\n var data = {\n visit_token: visitId,\n visitor_token: visitorId,\n platform: config.platform,\n landing_page: window.location.href,\n screen_width: window.screen.width,\n screen_height: window.screen.height,\n js: true\n };\n\n // referrer\n if (document.referrer.length > 0) {\n data.referrer = document.referrer;\n }\n\n for (var key in config.visitParams) {\n if (config.visitParams.hasOwnProperty(key)) {\n data[key] = config.visitParams[key];\n }\n }\n\n log(data);\n\n sendRequest(visitsUrl(), data, function () {\n // wait until successful to destroy\n destroyCookie(\"ahoy_track\");\n setReady();\n });\n } else {\n log(\"Cookies disabled\");\n setReady();\n }\n }\n}\n\nahoy.getVisitId = ahoy.getVisitToken = function () {\n return getCookie(\"ahoy_visit\");\n};\n\nahoy.getVisitorId = ahoy.getVisitorToken = function () {\n return getCookie(\"ahoy_visitor\");\n};\n\nahoy.reset = function () {\n destroyCookie(\"ahoy_visit\");\n destroyCookie(\"ahoy_visitor\");\n destroyCookie(\"ahoy_events\");\n destroyCookie(\"ahoy_track\");\n return true;\n};\n\nahoy.debug = function (enabled) {\n if (enabled === false) {\n destroyCookie(\"ahoy_debug\");\n } else {\n setCookie(\"ahoy_debug\", \"t\", 365 * 24 * 60); // 1 year\n }\n return true;\n};\n\nahoy.track = function (name, properties) {\n // generate unique id\n var event = {\n name: name,\n properties: properties || {},\n time: (new Date()).getTime() / 1000.0,\n id: generateId(),\n js: true\n };\n\n ahoy.ready( function () {\n if (config.cookies && !ahoy.getVisitId()) {\n createVisit();\n }\n\n ahoy.ready( function () {\n log(event);\n\n event.visit_token = ahoy.getVisitId();\n event.visitor_token = ahoy.getVisitorId();\n\n if (canTrackNow()) {\n trackEventNow(event);\n } else {\n eventQueue.push(event);\n saveEventQueue();\n\n // wait in case navigating to reduce duplicate events\n setTimeout( function () {\n trackEvent(event);\n }, 1000);\n }\n });\n });\n\n return true;\n};\n\nahoy.trackView = function (additionalProperties) {\n var properties = {\n url: window.location.href,\n title: document.title,\n page: page()\n };\n\n if (additionalProperties) {\n for(var propName in additionalProperties) {\n if (additionalProperties.hasOwnProperty(propName)) {\n properties[propName] = additionalProperties[propName];\n }\n }\n }\n ahoy.track(\"$view\", properties);\n};\n\nahoy.trackClicks = function (selector) {\n if (selector === undefined) {\n log(\"trackClicks will require a selector in 0.4.0\");\n selector = \"a, button, input[type=submit]\";\n }\n onEvent(\"click\", selector, function (e) {\n var properties = eventProperties.call(this, e);\n properties.text = properties.tag == \"input\" ? this.value : (this.textContent || this.innerText || this.innerHTML).replace(/[\\s\\r\\n]+/g, \" \").trim();\n properties.href = this.href;\n ahoy.track(\"$click\", properties);\n });\n};\n\nahoy.trackSubmits = function (selector) {\n if (selector === undefined) {\n log(\"trackSubmits will require a selector in 0.4.0\");\n selector = \"form\";\n }\n onEvent(\"submit\", selector, function (e) {\n var properties = eventProperties.call(this, e);\n ahoy.track(\"$submit\", properties);\n });\n};\n\nahoy.trackChanges = function (selector) {\n if (selector === undefined) {\n // put here instead of above to prevent message with trackAll\n log(\"trackChanges is deprecated and will be removed in 0.4.0\");\n selector = \"input, textarea, select\";\n }\n onEvent(\"change\", selector, function (e) {\n var properties = eventProperties.call(this, e);\n ahoy.track(\"$change\", properties);\n });\n};\n\nahoy.trackAll = function() {\n log(\"trackAll is deprecated and will be removed in 0.4.0\");\n ahoy.trackView();\n ahoy.trackClicks(\"a, button, input[type=submit]\");\n ahoy.trackSubmits(\"form\");\n ahoy.trackChanges(\"input, textarea, select\");\n};\n\n// push events from queue\ntry {\n eventQueue = JSON.parse(getCookie(\"ahoy_events\") || \"[]\");\n} catch (e) {\n // do nothing\n}\n\nfor (var i = 0; i < eventQueue.length; i++) {\n trackEvent(eventQueue[i]);\n}\n\nahoy.start = function () {\n createVisit();\n\n ahoy.start = function () {};\n};\n\ndocumentReady(function() {\n if (config.startOnReady) {\n ahoy.start();\n }\n});\n\nexport default ahoy;\n"],"sourceRoot":""}