{"version":3,"file":"ahoy.107b20aa.js","sources":["../../node_modules/object-to-formdata/dist/index.module.js","../../node_modules/ahoy.js/dist/ahoy.esm.js"],"sourcesContent":["const isUndefined = (value) => value === undefined;\n\nconst isNull = (value) => value === null;\n\nconst isBoolean = (value) => typeof value === 'boolean';\n\nconst isObject = (value) => value === Object(value);\n\nconst isArray = (value) => Array.isArray(value);\n\nconst isDate = (value) => value instanceof Date;\n\nconst isBlob = (value) =>\n value &&\n typeof value.size === 'number' &&\n typeof value.type === 'string' &&\n typeof value.slice === 'function';\n\nconst isFile = (value) =>\n isBlob(value) &&\n typeof value.name === 'string' &&\n (typeof value.lastModifiedDate === 'object' ||\n typeof value.lastModified === 'number');\n\nconst serialize = (obj, cfg, fd, pre) => {\n cfg = cfg || {};\n\n cfg.indices = isUndefined(cfg.indices) ? false : cfg.indices;\n\n cfg.nullsAsUndefineds = isUndefined(cfg.nullsAsUndefineds)\n ? false\n : cfg.nullsAsUndefineds;\n\n cfg.booleansAsIntegers = isUndefined(cfg.booleansAsIntegers)\n ? false\n : cfg.booleansAsIntegers;\n\n cfg.allowEmptyArrays = isUndefined(cfg.allowEmptyArrays)\n ? false\n : cfg.allowEmptyArrays;\n\n fd = fd || new FormData();\n\n if (isUndefined(obj)) {\n return fd;\n } else if (isNull(obj)) {\n if (!cfg.nullsAsUndefineds) {\n fd.append(pre, '');\n }\n } else if (isBoolean(obj)) {\n if (cfg.booleansAsIntegers) {\n fd.append(pre, obj ? 1 : 0);\n } else {\n fd.append(pre, obj);\n }\n } else if (isArray(obj)) {\n if (obj.length) {\n obj.forEach((value, index) => {\n const key = pre + '[' + (cfg.indices ? index : '') + ']';\n\n serialize(value, cfg, fd, key);\n });\n } else if (cfg.allowEmptyArrays) {\n fd.append(pre + '[]', '');\n }\n } else if (isDate(obj)) {\n fd.append(pre, obj.toISOString());\n } else if (isObject(obj) && !isFile(obj) && !isBlob(obj)) {\n Object.keys(obj).forEach((prop) => {\n const value = obj[prop];\n\n if (isArray(value)) {\n while (prop.length > 2 && prop.lastIndexOf('[]') === prop.length - 2) {\n prop = prop.substring(0, prop.length - 2);\n }\n }\n\n const key = pre ? pre + '[' + prop + ']' : prop;\n\n serialize(value, cfg, fd, key);\n });\n } else {\n fd.append(pre, obj);\n }\n\n return fd;\n};\n\nmodule.exports = {\n serialize,\n};\n","/*\n * Ahoy.js\n * Simple, powerful JavaScript analytics\n * https://github.com/ankane/ahoy.js\n * v0.3.7\n * MIT License\n */\n\nimport { serialize } from 'object-to-formdata';\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\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 return matches.apply(element, [selector]);\n } else {\n log(\"Unable to match\");\n return false;\n }\n}\n\nfunction onEvent(eventName, selector, callback) {\n document.addEventListener(eventName, function (e) {\n if (matchesSelector(e.target, selector)) {\n callback(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(e) {\n var target = e.target;\n return cleanObject({\n tag: target.tagName.toLowerCase(),\n id: presence(target.id),\n \"class\": presence(target.className),\n page: page(),\n section: getClosestSection(target)\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 () {\n onEvent(\"click\", \"a, button, input[type=submit]\", function (e) {\n var target = e.target;\n var properties = eventProperties(e);\n properties.text = properties.tag == \"input\" ? target.value : (target.textContent || target.innerText || target.innerHTML).replace(/[\\s\\r\\n]+/g, \" \").trim();\n properties.href = target.href;\n ahoy.track(\"$click\", properties);\n });\n};\n\nahoy.trackSubmits = function () {\n onEvent(\"submit\", \"form\", function (e) {\n var properties = eventProperties(e);\n ahoy.track(\"$submit\", properties);\n });\n};\n\nahoy.trackChanges = function () {\n onEvent(\"change\", \"input, textarea, select\", function (e) {\n var properties = eventProperties(e);\n ahoy.track(\"$change\", properties);\n });\n};\n\nahoy.trackAll = function() {\n ahoy.trackView();\n ahoy.trackClicks();\n ahoy.trackSubmits();\n ahoy.trackChanges();\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"],"names":["isUndefined","value","isNull","isBoolean","isObject","isArray","isDate","isBlob","isFile","serialize","obj","cfg","fd","pre","index","key","prop","index_module","Cookies","name","ttl","domain","expires","cookieDomain","date","i","c","nameEQ","ca","config","ahoy","options","$","visitId","visitorId","track","isReady","queue","canStringify","eventQueue","visitsUrl","eventsUrl","isEmpty","canTrackNow","setCookie","getCookie","destroyCookie","log","message","setReady","callback","matchesSelector","element","selector","matches","onEvent","eventName","e","documentReady","generateId","r","v","saveEventQueue","csrfToken","meta","csrfParam","CSRFProtection","xhr","token","sendRequest","url","data","success","header","eventData","event","trackEvent","trackEventNow","param","page","presence","str","cleanObject","eventProperties","target","getClosestSection","createVisit","enabled","properties","additionalProperties","propName"],"mappings":"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"}