{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./app/packs/javascript/require-form-answer.js","webpack:///./node_modules/object-to-formdata/dist/index.module.js","webpack:///./node_modules/swiped-events/src/swiped-events.js","webpack:///./node_modules/ahoy.js/dist/ahoy.esm.js","webpack:///./app/packs/javascript/participants.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","checkboxSelected","checkBoxes","checked","enableRequireButton","enabled","nextButton","document","getElementsByClassName","disabled","listenForRequiredAnswer","questionType","radios","classList","contains","radioSelected","addEventListener","event","section","_typeof","obj","iterator","constructor","isUndefined","undefined","isArray","Array","isBlob","size","type","slice","serialize","cfg","fd","pre","indices","nullsAsUndefineds","booleansAsIntegers","allowEmptyArrays","FormData","append","isBoolean","length","forEach","index","Date","isDate","isObject","lastModifiedDate","lastModified","isFile","keys","prop","lastIndexOf","substring","toISOString","window","CustomEvent","params","bubbles","cancelable","detail","evt","createEvent","initCustomEvent","Event","e","target","getAttribute","startEl","timeDown","now","xDown","touches","clientX","yDown","clientY","xDiff","yDiff","xUp","yUp","swipeThreshold","parseInt","getNearestAttribute","swipeTimeout","timeDiff","eventType","changedTouches","Math","abs","eventData","dir","replace","xStart","xEnd","yStart","yEnd","dispatchEvent","el","attributeName","defaultValue","documentElement","attributeValue","parentNode","Cookies","ttl","domain","expires","cookieDomain","date","setTime","getTime","toGMTString","cookie","escape","nameEQ","ca","split","charAt","indexOf","unescape","config","urlPrefix","visitsUrl","eventsUrl","page","platform","useBeacon","startOnReady","trackVisits","cookies","headers","visitParams","withCredentials","visitDuration","visitorDuration","ahoy","Ahoy","configure","options","visitId","visitorId","track","callback","$","jQuery","Zepto","isReady","queue","canStringify","JSON","stringify","eventQueue","canTrackNow","trackNow","navigator","sendBeacon","setCookie","getCookie","destroyCookie","log","message","console","setReady","shift","onEvent","eventName","selector","element","matches","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","apply","generateId","random","toString","saveEventQueue","csrfToken","meta","querySelector","content","CSRFProtection","xhr","token","setRequestHeader","sendRequest","url","data","success","ajax","contentType","dataType","beforeSend","xhrFields","XMLHttpRequest","header","open","onload","status","send","events","visit_token","visitor_token","trackEvent","ready","id","splice","trackEventNow","param","events_json","location","pathname","presence","str","eventProperties","cleanObject","tag","tagName","toLowerCase","className","getClosestSection","hasAttribute","createVisit","getVisitId","getVisitorId","landing_page","href","screen_width","screen","width","screen_height","height","js","referrer","push","getVisitToken","getVisitorToken","reset","debug","properties","time","setTimeout","trackView","additionalProperties","title","propName","trackClicks","text","textContent","innerText","innerHTML","trim","trackSubmits","trackChanges","trackAll","parse","start","readyState","add","remove","swipeListen","direction","redirectOnSwipe","history","back","backOnSwipe"],"mappings":"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","file":"js/javascript/participants-f5e4776d4d5aab9e25f0.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 = 171);\n","// Disable next button if an answer is required\n// works for checkboxes, radio-select,\n\n// checkbox selected must be evaluated every time\n// there is a click event on a checkbox\nconst checkboxSelected = function(checkBoxes) {\n for (let box of checkBoxes) {\n if (box.checked) {\n return true;\n }\n }\n return false;\n}\n\n// radio selected is checked once on page load\n// for an existing answer.\nconst radioSelected = function(radios) {\n for (let radio of radios) {\n if (radio.classList.contains('active')) {\n return true;\n }\n }\n return false;\n}\n\n// pass the appropriate evaluation method of true/false to\n// enable to disable the 'Next' button\nconst enableRequireButton = function(enabled=false) {\n const nextButton = document.getElementsByClassName('-btn-requires-answer')[0];\n\n if (enabled) {\n nextButton.disabled = false;\n } else {\n nextButton.disabled = true;\n }\n}\n\nconst listenForRequiredAnswer = function(questionType) {\n\n if (questionType === 'radio') {\n\n const radios = document.getElementsByClassName('question-btn');\n enableRequireButton(radioSelected(radios));\n\n for (let radio of radios) {\n // for radios, as soon as one has been clicked,\n // selection is a known positive\n radio.addEventListener('click', event => {\n enableRequireButton(true);\n })\n }\n\n } else if (questionType === 'checkbox') {\n\n const checkBoxes = document.getElementsByClassName('form-check-input');\n enableRequireButton(checkboxSelected(checkBoxes));\n\n for (let box of checkBoxes) {\n box.addEventListener('click', event => {\n enableRequireButton(checkboxSelected(checkBoxes));\n })\n }\n }\n}\n\nconst getQuestionType = function() {\n const section = document.getElementsByClassName('question-contents')[0];\n let qType = 'unknown';\n if (section && section.classList.contains('-single-choice')) {\n qType = 'radio';\n } else if (section && section.classList.contains('-yes-no')) {\n qType = 'radio';\n } else {\n qType = 'checkbox';\n }\n return qType\n}\n\ndocument.addEventListener('turbolinks:load', () => {\n const nextButton = document.getElementsByClassName('-btn-requires-answer')[0];\n if (nextButton) {\n const questionType = getQuestionType();\n listenForRequiredAnswer(questionType);\n }\n});\n","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nvar isUndefined = function isUndefined(value) {\n return value === undefined;\n};\n\nvar isNull = function isNull(value) {\n return value === null;\n};\n\nvar isBoolean = function isBoolean(value) {\n return typeof value === 'boolean';\n};\n\nvar isObject = function isObject(value) {\n return value === Object(value);\n};\n\nvar isArray = function isArray(value) {\n return Array.isArray(value);\n};\n\nvar isDate = function isDate(value) {\n return value instanceof Date;\n};\n\nvar isBlob = function isBlob(value) {\n return value && typeof value.size === 'number' && typeof value.type === 'string' && typeof value.slice === 'function';\n};\n\nvar isFile = function isFile(value) {\n return isBlob(value) && typeof value.name === 'string' && (_typeof(value.lastModifiedDate) === 'object' || typeof value.lastModified === 'number');\n};\n\nvar serialize = function serialize(obj, cfg, fd, pre) {\n cfg = cfg || {};\n cfg.indices = isUndefined(cfg.indices) ? false : cfg.indices;\n cfg.nullsAsUndefineds = isUndefined(cfg.nullsAsUndefineds) ? false : cfg.nullsAsUndefineds;\n cfg.booleansAsIntegers = isUndefined(cfg.booleansAsIntegers) ? false : cfg.booleansAsIntegers;\n cfg.allowEmptyArrays = isUndefined(cfg.allowEmptyArrays) ? false : cfg.allowEmptyArrays;\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(function (value, index) {\n var key = pre + '[' + (cfg.indices ? index : '') + ']';\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(function (prop) {\n var 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 var key = pre ? pre + '[' + prop + ']' : prop;\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: serialize\n};","/*!\n * swiped-events.js - v@version@\n * Pure JavaScript swipe events\n * https://github.com/john-doherty/swiped-events\n * @inspiration https://stackoverflow.com/questions/16348031/disable-scrolling-when-touch-moving-certain-element\n * @author John Doherty \n * @license MIT\n */\n(function (window, document) {\n 'use strict'; // patch CustomEvent to allow constructor creation (IE/Chrome)\n\n if (typeof window.CustomEvent !== 'function') {\n window.CustomEvent = function (event, params) {\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n var evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n };\n\n window.CustomEvent.prototype = window.Event.prototype;\n }\n\n document.addEventListener('touchstart', handleTouchStart, false);\n document.addEventListener('touchmove', handleTouchMove, false);\n document.addEventListener('touchend', handleTouchEnd, false);\n var xDown = null;\n var yDown = null;\n var xDiff = null;\n var yDiff = null;\n var timeDown = null;\n var startEl = null;\n /**\n * Fires swiped event if swipe detected on touchend\n * @param {object} e - browser event object\n * @returns {void}\n */\n\n function handleTouchEnd(e) {\n // if the user released on a different target, cancel!\n if (startEl !== e.target) return;\n var swipeThreshold = parseInt(getNearestAttribute(startEl, 'data-swipe-threshold', '20'), 10); // default 20px\n\n var swipeTimeout = parseInt(getNearestAttribute(startEl, 'data-swipe-timeout', '500'), 10); // default 500ms\n\n var timeDiff = Date.now() - timeDown;\n var eventType = '';\n var changedTouches = e.changedTouches || e.touches || [];\n\n if (Math.abs(xDiff) > Math.abs(yDiff)) {\n // most significant\n if (Math.abs(xDiff) > swipeThreshold && timeDiff < swipeTimeout) {\n if (xDiff > 0) {\n eventType = 'swiped-left';\n } else {\n eventType = 'swiped-right';\n }\n }\n } else if (Math.abs(yDiff) > swipeThreshold && timeDiff < swipeTimeout) {\n if (yDiff > 0) {\n eventType = 'swiped-up';\n } else {\n eventType = 'swiped-down';\n }\n }\n\n if (eventType !== '') {\n var eventData = {\n dir: eventType.replace(/swiped-/, ''),\n xStart: parseInt(xDown, 10),\n xEnd: parseInt((changedTouches[0] || {}).clientX || -1, 10),\n yStart: parseInt(yDown, 10),\n yEnd: parseInt((changedTouches[0] || {}).clientY || -1, 10)\n }; // fire `swiped` event event on the element that started the swipe\n\n startEl.dispatchEvent(new CustomEvent('swiped', {\n bubbles: true,\n cancelable: true,\n detail: eventData\n })); // fire `swiped-dir` event on the element that started the swipe\n\n startEl.dispatchEvent(new CustomEvent(eventType, {\n bubbles: true,\n cancelable: true,\n detail: eventData\n }));\n } // reset values\n\n\n xDown = null;\n yDown = null;\n timeDown = null;\n }\n /**\n * Records current location on touchstart event\n * @param {object} e - browser event object\n * @returns {void}\n */\n\n\n function handleTouchStart(e) {\n // if the element has data-swipe-ignore=\"true\" we stop listening for swipe events\n if (e.target.getAttribute('data-swipe-ignore') === 'true') return;\n startEl = e.target;\n timeDown = Date.now();\n xDown = e.touches[0].clientX;\n yDown = e.touches[0].clientY;\n xDiff = 0;\n yDiff = 0;\n }\n /**\n * Records location diff in px on touchmove event\n * @param {object} e - browser event object\n * @returns {void}\n */\n\n\n function handleTouchMove(e) {\n if (!xDown || !yDown) return;\n var xUp = e.touches[0].clientX;\n var yUp = e.touches[0].clientY;\n xDiff = xDown - xUp;\n yDiff = yDown - yUp;\n }\n /**\n * Gets attribute off HTML element or nearest parent\n * @param {object} el - HTML element to retrieve attribute from\n * @param {string} attributeName - name of the attribute\n * @param {any} defaultValue - default value to return if no match found\n * @returns {any} attribute value or defaultValue\n */\n\n\n function getNearestAttribute(el, attributeName, defaultValue) {\n // walk up the dom tree looking for data-action and data-trigger\n while (el && el !== document.documentElement) {\n var attributeValue = el.getAttribute(attributeName);\n\n if (attributeValue) {\n return attributeValue;\n }\n\n el = el.parentNode;\n }\n\n return defaultValue;\n }\n})(window, document);","/*\n * Ahoy.js\n * Simple, powerful JavaScript analytics\n * https://github.com/ankane/ahoy.js\n * v0.3.7\n * MIT License\n */\nimport { serialize } from 'object-to-formdata'; // https://www.quirksmode.org/js/cookies.html\n\nvar Cookies = {\n set: function set(name, value, ttl, domain) {\n var expires = \"\";\n var cookieDomain = \"\";\n\n if (ttl) {\n var date = new Date();\n date.setTime(date.getTime() + ttl * 60 * 1000);\n expires = \"; expires=\" + date.toGMTString();\n }\n\n if (domain) {\n cookieDomain = \"; domain=\" + domain;\n }\n\n document.cookie = name + \"=\" + escape(value) + expires + cookieDomain + \"; path=/\";\n },\n get: function get(name) {\n var i, c;\n var nameEQ = name + \"=\";\n var ca = document.cookie.split(';');\n\n for (i = 0; i < ca.length; i++) {\n c = ca[i];\n\n while (c.charAt(0) === ' ') {\n c = c.substring(1, c.length);\n }\n\n if (c.indexOf(nameEQ) === 0) {\n return unescape(c.substring(nameEQ.length, c.length));\n }\n }\n\n return null;\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,\n // 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}; // legacy\n\n\nahoy.configure(ahoy);\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} // cookies\n\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\n while (callback = queue.shift()) {\n callback();\n }\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 || element.matchesSelector || element.mozMatchesSelector || element.msMatchesSelector || element.oMatchesSelector || 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} // http://beeker.io/jquery-document-ready-equivalent-vanilla-javascript\n\n\nfunction documentReady(callback) {\n if (document.readyState === \"interactive\" || document.readyState === \"complete\") {\n setTimeout(callback, 0);\n } else {\n document.addEventListener(\"DOMContentLoaded\", callback);\n }\n} // https://stackoverflow.com/a/2117523/1177228\n\n\nfunction generateId() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n var r = Math.random() * 16 | 0,\n 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} // from rails-ujs\n\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\n if (token) {\n xhr.setRequestHeader(\"X-CSRF-Token\", token);\n }\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\n for (var header in config.headers) {\n if (config.headers.hasOwnProperty(header)) {\n xhr.setRequestHeader(header, config.headers[header]);\n }\n }\n\n xhr.onload = function () {\n if (xhr.status === 200) {\n success();\n }\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\n if (config.cookies) {\n data.visit_token = event.visit_token;\n data.visitor_token = event.visitor_token;\n }\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\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\n if (param && token) {\n data[param] = token;\n } // stringify so we keep the type\n\n\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\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 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 } // make sure cookies are enabled\n\n\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 }; // referrer\n\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 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\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 ahoy.ready(function () {\n if (config.cookies && !ahoy.getVisitId()) {\n createVisit();\n }\n\n ahoy.ready(function () {\n log(event);\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(); // wait in case navigating to reduce duplicate events\n\n setTimeout(function () {\n trackEvent(event);\n }, 1000);\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\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}; // push events from queue\n\n\ntry {\n eventQueue = JSON.parse(getCookie(\"ahoy_events\") || \"[]\");\n} catch (e) {// 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});\nexport default ahoy;","import ahoy from 'ahoy.js';\nimport 'swiped-events';\nimport './require-form-answer.js'\n\n// Track changes to page\nahoy.trackClicks();\nahoy.trackSubmits();\nahoy.trackChanges();\n\n// Track page views\ndocument.addEventListener('turbolinks:load', () => {\n ahoy.trackView();\n});\n\n// Handle toggle button changes\ndocument.addEventListener('turbolinks:load', () => {\n const elements = document.getElementsByClassName('toggle-ajax-btn');\n for (let element of elements) {\n element.addEventListener('ajax:success', event => {\n const active = event.detail[0];\n if (active) {\n element.classList.add('active');\n }\n else {\n element.classList.remove('active');\n }\n });\n }\n});\n\n// Swipe handling\nconst swipeListen = (direction, callback) => {\n document.addEventListener(`swiped-${direction}`, callback);\n};\n\nconst redirectOnSwipe = (direction, url) => {\n swipeListen(direction, () => {\n window.location.href = url;\n });\n};\n\nconst backOnSwipe = (direction) => {\n swipeListen(direction, () => {\n window.history.back();\n });\n};\n\ndocument.addEventListener('turbolinks:load', () => {\n const element = document.querySelector('[data-swipe-url]');\n if (element !== null) {\n ['left'].forEach((direction) => {\n redirectOnSwipe(direction, element.getAttribute('data-swipe-url'));\n });\n ['right'].forEach((direction) => {\n backOnSwipe(direction);\n });\n }\n});\n\n\n"],"sourceRoot":""}