{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/@threespot/expand-toggle/dist/expand-toggle.m.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/what-input/dist/what-input.js","webpack:///./app/javascript/modules/a11y-menu.js","webpack:///./app/javascript/modules/recite-me-toggle.js","webpack:///./node_modules/fg-loadjs/loadJS.js","webpack:///./app/javascript/modules/image-generator.js","webpack:///./app/javascript/lib/form-validation.js","webpack:///./app/javascript/modules/form-validation.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/ev-emitter/ev-emitter.js","webpack:///./node_modules/@threespot/freeze-scroll/dist/freeze-scroll.m.js","webpack:///./app/javascript/modules/story-template.js","webpack:///./app/javascript/modules/gallery-modal.js","webpack:///./app/javascript/modules/share-your-vision-story-upload-form.js","webpack:///./app/javascript/modules/share-your-vision-donation-url-generator.js","webpack:///./app/javascript/packs/syv-main.js","webpack:///./app/javascript/modules/cta-hero.js","webpack:///./app/javascript/lib/modals.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","_typeof","obj","iterator","constructor","indexJs","__webpack_exports__","eval","node_modulesEvEmitterEvEmitterJs","node_modulesLodash_SymbolJs","node_modulesLodash_baseGetTagJs","node_modulesLodash_freeGlobalJs","node_modulesLodash_getRawTagJs","node_modulesLodash_objectToStringJs","node_modulesLodash_rootJs","node_modulesLodashDebounceJs","node_modulesLodashIsObjectJs","node_modulesLodashIsObjectLikeJs","node_modulesLodashIsSymbolJs","node_modulesLodashNowJs","node_modulesLodashToNumberJs","node_modulesWebpackBuildinGlobalJs","g","this","Function","e","window","factory","id","loaded","document","ask","element","ignoreKeys","specificKeys","registerOnChange","unRegisterOnChange","docElem","documentElement","currentElement","currentInput","currentIntent","currentTimestamp","Date","now","shouldPersist","formInputs","functionList","ignoreMap","specificMap","inputMap","keydown","keyup","mousedown","mousemove","MSPointerDown","MSPointerMove","pointerdown","pointermove","touchstart","touchend","isScrolling","mousePos","x","y","pointerMap","2","3","4","supportsPassive","opts","addEventListener","addListeners","options","passive","setPersist","PointerEvent","setInput","setIntent","MSPointerEvent","detectWheel","setElement","clearElement","getAttribute","body","sessionStorage","getItem","doUpdate","event","eventKey","which","type","pointerType","ignoreMatch","length","indexOf","specificMatch","shouldUpdate","validateTouch","persistInput","activeElem","activeElement","nodeName","toLowerCase","checkClosest","setAttribute","fireFunctions","detectScrolling","target","classList","toString","replace","removeAttribute","setItem","timestamp","touchIsValid","createElement","undefined","onmousewheel","len","fn","screenX","screenY","elem","tag","ElementPrototype","Element","matches","msMatchesSelector","webkitMatchesSelector","closest","parentElement","parentNode","nodeType","Array","opt","arr","eventType","push","position","match","objPos","splice","clearStorage","clear","el","self","htmlEl","textSizeEl","getElementById","themeInputs","querySelectorAll","expandToggle","ExpandToggle","querySelector","updateForm","localStorage","a11yMenu","expand","on","evt","val","isNaN","parseInt","updateTheme","updateTextSize","collapse","size","style","fontSize","textSize","dispatchEvent","Event","themeColor","htmlClasses","className","theme","input","checked","selected","ReciteMeToggle","reciteme","loadScript","Recite","loadJS","load","Tracker","Ga","enabled","subscribe","enable","forEach","w","global","src","cb","ordered","tmp","ref","getElementsByTagName","script","async","insertBefore","onload","ImageGenerator","retinalControls","severityControls","dayControls","imageName","form","email","submitBtn","original","url","updateSelectedValues","init","selectedValues","join","handleChange","handleSubmit","handleInput","preventDefault","csrfToken","console","error","fetch","method","headers","JSON","stringify","image_name","then","response","json","data","status","Error","message","log","catch","tagName","updateImage","remove","add","imgName","prevImg","img","ValidateForm","isAjaxSubmit","hasAttribute","errorMsgs","warn","shouldScroll","submitText","textContent","validateEls","filter","groups","currentGroup","prevGroup","emailRegex","numericRegex","phoneRegex","zipRegex","bindEvents","validate","validateGroup","hideErrorMsg","numberEvent","submitHandler","persisted","resetSubmitButton","isEmail","str","test","isNumeric","isPhone","isZip","isEmpty","isRequired","required","formatDollars","getDecimal","String","fromCharCode","getErrorMsgParent","errorMsg","getErrorMsg","showErrorMsg","showGroupErrorMsg","hideGroupErrorMsg","toggleErrorMsg","isValid","getInvalidFields","invalidEls","validateEl","targetEl","validateAll","validateGroupEl","condition","isExact","checkedEls","conditionArr","split","isEqualNode","validateAllGroups","sendData","XHR","XMLHttpRequest","FD","FormData","successShow","successHide","display","errorShow","open","send","disabled","focus","label","scrollIntoView","webpackPolyfill","deprecate","paths","children","EvEmitter","proto","eventName","listener","events","_events","listeners","once","onceEvents","_onceEvents","off","index","emitEvent","args","slice","onceListeners","apply","allOff","configurable","content","button","navigator","clipboard","writeText","setTimeout","GalleryModal","modalEl","modal","Modal","modalToggleBtn","iframes","iframe","handleClick","item","ShareYourVisionStoryUploadForm","fileField","fileUrlField","submitButton","submittable","dropzone","uploading","done","uploadingFilename","doneFilename","file","files","getPresignedUrl","click","dataTransfer","stopPropagation","csrf_token","content_type","settings","Accept","fetchResponse","presignedPost","innerHTML","uploadFile","location","formData","append","text","DOMParser","parseFromString","ShareYourVisionDonationUrlGenerator","emailField","honeypotField","submit","urlField","copy","copyWrapper","copyMessage","honeypot","createUrl","selector","burgerEl","burgerToggle","updateExpandedHeight","toggle","bubbles","EventEmitter","super","assign","transitionSpeed","activeClasses","modalContentClass","onReady","isOpen","hasToggles","contentEl","customContentEl","closeEls","toggleEls","Math","random","substr","prevFocusedEl","focusableEls","getFocusableEls","firstFocusableEl","lastFocusableEl","toggleEl","closeEl","destroy","unbindEvents","getFocusedEl","hasFocus","focusDelay","windowClickHandler","isToggle","targetElExists","contains","targetInsideWrapper","targetIsWrapper","isSameNode","targetIsLink","close","keydownHandler","focusedEl","shiftKey","toggleClick","closeClick","windowClick","removeEventListener","scroll","freeze","scrollTop","unfreeze"],"mappings":"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","file":"js/syv-main-1c8928b7d14a57793923.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 = 78);\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nmodule.exports =\n/******/\nfunction (modules) {\n // webpackBootstrap\n\n /******/\n // The module cache\n\n /******/\n var installedModules = {};\n /******/\n\n /******/\n // The require function\n\n /******/\n\n function __webpack_require__(moduleId) {\n /******/\n\n /******/\n // Check if module is in cache\n\n /******/\n if (installedModules[moduleId]) {\n /******/\n return installedModules[moduleId].exports;\n /******/\n }\n /******/\n // Create a new module (and put it into the cache)\n\n /******/\n\n\n var module = installedModules[moduleId] = {\n /******/\n i: moduleId,\n\n /******/\n l: false,\n\n /******/\n exports: {}\n /******/\n\n };\n /******/\n\n /******/\n // Execute the module function\n\n /******/\n\n modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n /******/\n\n /******/\n // Flag the module as loaded\n\n /******/\n\n module.l = true;\n /******/\n\n /******/\n // Return the exports of the module\n\n /******/\n\n return module.exports;\n /******/\n }\n /******/\n\n /******/\n\n /******/\n // expose the modules object (__webpack_modules__)\n\n /******/\n\n\n __webpack_require__.m = modules;\n /******/\n\n /******/\n // expose the module cache\n\n /******/\n\n __webpack_require__.c = installedModules;\n /******/\n\n /******/\n // define getter function for harmony exports\n\n /******/\n\n __webpack_require__.d = function (exports, name, getter) {\n /******/\n if (!__webpack_require__.o(exports, name)) {\n /******/\n Object.defineProperty(exports, name, {\n enumerable: true,\n get: getter\n });\n /******/\n }\n /******/\n\n };\n /******/\n\n /******/\n // define __esModule on exports\n\n /******/\n\n\n __webpack_require__.r = function (exports) {\n /******/\n if (typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n /******/\n Object.defineProperty(exports, Symbol.toStringTag, {\n value: 'Module'\n });\n /******/\n }\n /******/\n\n\n Object.defineProperty(exports, '__esModule', {\n value: true\n });\n /******/\n };\n /******/\n\n /******/\n // create a fake namespace object\n\n /******/\n // mode & 1: value is a module id, require it\n\n /******/\n // mode & 2: merge all properties of value into the ns\n\n /******/\n // mode & 4: return value when already ns object\n\n /******/\n // mode & 8|1: behave like require\n\n /******/\n\n\n __webpack_require__.t = function (value, mode) {\n /******/\n if (mode & 1) value = __webpack_require__(value);\n /******/\n\n if (mode & 8) return value;\n /******/\n\n if (mode & 4 && _typeof(value) === 'object' && value && value.__esModule) return value;\n /******/\n\n var ns = Object.create(null);\n /******/\n\n __webpack_require__.r(ns);\n /******/\n\n\n Object.defineProperty(ns, 'default', {\n enumerable: true,\n value: value\n });\n /******/\n\n if (mode & 2 && typeof value != 'string') for (var key in value) {\n __webpack_require__.d(ns, key, function (key) {\n return value[key];\n }.bind(null, key));\n }\n /******/\n\n return ns;\n /******/\n };\n /******/\n\n /******/\n // getDefaultExport function for compatibility with non-harmony modules\n\n /******/\n\n\n __webpack_require__.n = function (module) {\n /******/\n var getter = module && module.__esModule ?\n /******/\n function getDefault() {\n return module['default'];\n } :\n /******/\n function getModuleExports() {\n return module;\n };\n /******/\n\n __webpack_require__.d(getter, 'a', getter);\n /******/\n\n\n return getter;\n /******/\n };\n /******/\n\n /******/\n // Object.prototype.hasOwnProperty.call\n\n /******/\n\n\n __webpack_require__.o = function (object, property) {\n return Object.prototype.hasOwnProperty.call(object, property);\n };\n /******/\n\n /******/\n // __webpack_public_path__\n\n /******/\n\n\n __webpack_require__.p = \"\";\n /******/\n\n /******/\n\n /******/\n // Load entry module and return exports\n\n /******/\n\n return __webpack_require__(__webpack_require__.s = \"./index.js\");\n /******/\n}(\n/************************************************************************/\n\n/******/\n{\n /***/\n \"./index.js\":\n /*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n\n /*! exports provided: default */\n\n /***/\n function indexJs(module, __webpack_exports__, __webpack_require__) {\n \"use strict\";\n\n eval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"default\\\", function() { return ExpandToggle; });\\n/* harmony import */ var lodash_debounce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash/debounce */ \\\"./node_modules/lodash/debounce.js\\\");\\n/* harmony import */ var lodash_debounce__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_debounce__WEBPACK_IMPORTED_MODULE_0__);\\n/* harmony import */ var ev_emitter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ev-emitter */ \\\"./node_modules/ev-emitter/ev-emitter.js\\\");\\n/* harmony import */ var ev_emitter__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(ev_emitter__WEBPACK_IMPORTED_MODULE_1__);\\n\\n\\nfunction _typeof(obj) { if (typeof Symbol === \\\"function\\\" && typeof Symbol.iterator === \\\"symbol\\\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \\\"function\\\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \\\"symbol\\\" : typeof obj; }; } return _typeof(obj); }\\n\\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\\n\\nfunction _nonIterableSpread() { throw new TypeError(\\\"Invalid attempt to spread non-iterable instance\\\"); }\\n\\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \\\"[object Arguments]\\\") return Array.from(iter); }\\n\\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\\n\\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\\\"Cannot call a class as a function\\\"); } }\\n\\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\\\"value\\\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\\n\\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\\n\\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \\\"object\\\" || typeof call === \\\"function\\\")) { return call; } return _assertThisInitialized(self); }\\n\\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\\\"this hasn't been initialised - super() hasn't been called\\\"); } return self; }\\n\\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\\n\\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \\\"function\\\" && superClass !== null) { throw new TypeError(\\\"Super expression must either be null or a function\\\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\\n\\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\\n\\n\\n\\n/**\\n * Wrap the last X words in an HTML tag to prevent them from wrapping (i.e. orphans)\\n * @param {HTMLElement} el - Toggle button DOM node\\n * @param {Object} opts - Options\\n * @param {string} [opts.expandedClasses=\\\"\\\"] - Class(es) to apply when expanded\\n * @param {boolean} [opts.shouldToggleHeight=false] - Whether or not to animate height\\n * @param {string} [opts.activeToggleText=\\\"\\\"] - Expanded state toggle button text\\n * @param {boolean} [opts.shouldStartExpanded=false] - Whether menu should start expanded\\n * @param {function} [opts.onReady=\\\"\\\"] - Ready callback function\\n */\\n\\nvar ExpandToggle =\\n/*#__PURE__*/\\nfunction (_EventEmitter) {\\n _inherits(ExpandToggle, _EventEmitter);\\n\\n function ExpandToggle(el, opts) {\\n var _this;\\n\\n _classCallCheck(this, ExpandToggle);\\n\\n // Have to call super() first before referencing \\u201Cthis\\u201D since we\\u2019re extending EventEmitter\\n // https://stackoverflow.com/a/43591507/673457\\n _this = _possibleConstructorReturn(this, _getPrototypeOf(ExpandToggle).call(this));\\n _this.el = el;\\n _this.targetId = _this.el.getAttribute(\\\"data-expands\\\");\\n _this.targetEl = document.getElementById(_this.targetId); // Ensure target element exist before initializing\\n\\n if (!_this.targetEl) {\\n console.warn(\\\"Can\\\\u2019t find expandable target with id \\\\u201C\\\".concat(_this.targetId, \\\"\\\\u201D\\\"));\\n return _possibleConstructorReturn(_this, false);\\n } // Use Object.assign() to merge \\u201Copts\\u201D object with default values in this.options\\n\\n\\n _this.options = Object.assign({}, {\\n expandedClasses: \\\"\\\",\\n // string, accepts multiple space-separated classes\\n shouldToggleHeight: false,\\n // should target element\\u2019s height be animated using max-height\\n activeToggleText: \\\"\\\",\\n // expanded state toggle button text\\n shouldStartExpanded: false,\\n // component starts expanded on init\\n onReady: null // ready callback function\\n\\n }, opts); // Check for custom expanded class(es)\\n\\n _this.expandedClasses = _this.el.getAttribute(\\\"data-expands-class\\\") || _this.options.expandedClasses;\\n\\n if (_this.expandedClasses.length) {\\n // Check if active class string contains multiple classes\\n if (_this.expandedClasses.indexOf(\\\" \\\") > -1) {\\n // Convert to array and remove any empty string values\\n // caused by having multiple spaces in a row.\\n _this.expandedClasses = _this.expandedClasses.split(\\\" \\\").filter(function (n) {\\n return n.length;\\n });\\n } else {\\n // We still need to convert a single active class to an array\\n // so we can use the spread syntax later in classList.add()\\n _this.expandedClasses = [_this.expandedClasses];\\n }\\n } // Check if height should be animated\\n\\n\\n _this.shouldToggleHeight = _this.el.hasAttribute(\\\"data-expands-height\\\") || _this.options.shouldToggleHeight; // Check if component should start expanded\\n\\n _this.shouldStartExpanded = _this.el.hasAttribute(\\\"data-expanded\\\") || _this.options.shouldStartExpanded; // Check for custom toggle button text to use when expanded\\n\\n _this.hasActiveText = false;\\n _this.textEl = _this.el.querySelector(\\\"[data-expands-text]\\\");\\n\\n if (_this.textEl) {\\n _this.defaultToggleText = _this.textEl.textContent;\\n _this.activeToggleText = _this.textEl.getAttribute(\\\"data-expands-text\\\") || _this.options.activeToggleText;\\n _this.hasActiveText = !!_this.activeToggleText.length;\\n }\\n\\n _this.init();\\n\\n return _this;\\n }\\n\\n _createClass(ExpandToggle, [{\\n key: \\\"init\\\",\\n value: function init() {\\n // Store state to avoid calling resize handler after component has been destroyed\\n this.hasInitialized = true; // Accessibility setup\\n\\n this.el.setAttribute(\\\"aria-haspopup\\\", true);\\n this.el.setAttribute(\\\"aria-expanded\\\", this.shouldStartExpanded); // Omit \\u201Caria-controls\\u201D for now\\n // See https://inclusive-components.design/menus-menu-buttons/#ariacontrols\\n // this.el.setAttribute(\\\"aria-controls\\\", this.targetId);\\n\\n this.targetEl.setAttribute(\\\"aria-hidden\\\", !this.shouldStartExpanded);\\n\\n if (this.el.tagName.toLowerCase() === \\\"a\\\") {\\n this.el.setAttribute(\\\"role\\\", \\\"button\\\");\\n }\\n\\n if (this.shouldToggleHeight) {\\n this.heightToggleSetup();\\n } // Click event listener on toggle button\\n // Note: Callback needs to be assigned to a let so we can remove it since we\\u2019re using bind()\\n // https://stackoverflow.com/a/22870717/673457\\n\\n\\n this.clickHandler = this.toggle.bind(this);\\n this.el.addEventListener(\\\"click\\\", this.clickHandler); // Keyboard listeners on toggle button\\n\\n this.keydownHandler = this.keyboardEvents.bind(this);\\n this.el.addEventListener(\\\"keydown\\\", this.keydownHandler); // Check for onReady callback\\n\\n if (typeof this.options.onReady === \\\"function\\\") {\\n this.options.onReady();\\n }\\n }\\n }, {\\n key: \\\"destroy\\\",\\n value: function destroy() {\\n this.hasInitialized = false; // Remove event listeners\\n\\n this.el.removeEventListener(\\\"click\\\", this.clickHandler);\\n this.el.removeEventListener(\\\"keydown\\\", this.keydownHandler);\\n window.removeEventListener(\\\"resize\\\", this.resizeHandler); // Remove aria attributes\\n\\n this.el.removeAttribute(\\\"aria-haspopup\\\");\\n this.el.removeAttribute(\\\"aria-expanded\\\");\\n this.targetEl.removeAttribute(\\\"aria-hidden\\\");\\n this.targetEl.style.removeProperty(\\\"max-height\\\");\\n\\n if (this.el.tagName.toLowerCase() === \\\"a\\\") {\\n this.el.removeAttribute(\\\"role\\\");\\n } // Reset toggle text\\n\\n\\n if (this.hasActiveText) {\\n this.textEl.textContent = this.defaultToggleText;\\n } // Remove custom classes\\n\\n\\n if (this.expandedClasses.length) {\\n var _this$el$classList, _this$targetEl$classL;\\n\\n (_this$el$classList = this.el.classList).remove.apply(_this$el$classList, _toConsumableArray(this.expandedClasses));\\n\\n (_this$targetEl$classL = this.targetEl.classList).remove.apply(_this$targetEl$classL, _toConsumableArray(this.expandedClasses));\\n }\\n\\n this.emitEvent(\\\"destroy\\\");\\n }\\n }, {\\n key: \\\"keyboardEvents\\\",\\n value: function keyboardEvents(event) {\\n // Expand with down arrow\\n if (event.keyCode == 40) {\\n this.expand();\\n } else if (event.keyCode == 38 || event.keyCode == 27) {\\n // Close with up arrow or escape key\\n this.collapse();\\n }\\n }\\n }, {\\n key: \\\"heightToggleSetup\\\",\\n value: function heightToggleSetup() {\\n var _this2 = this;\\n\\n this.targetParentEl = this.targetEl.parentNode; // Set max-height to the expanded height so we can animate it.\\n\\n window.requestAnimationFrame(this.updateExpandedHeight.bind(this));\\n this.resizeHandler = lodash_debounce__WEBPACK_IMPORTED_MODULE_0___default()(function (event) {\\n // Due to debounce() it\\u2019s possible for this to run after destroy() has been called.\\n // To avoid this edge case, check \\u201Cthis.hasInitialized\\u201D first.\\n if (_this2.hasInitialized) {\\n window.requestAnimationFrame(_this2.updateExpandedHeight.bind(_this2));\\n }\\n }, 100).bind(this); // Update target element\\u2019s max-height on resize\\n\\n window.addEventListener(\\\"resize\\\", this.resizeHandler);\\n } // Set max-height of target element to its expanded height without triggering relayout.\\n //\\n // This technique works by creating an absolutely-positioned invisible clone of the target\\n // element and calculating its height. This avoids any relayout that would otherwise occur\\n // if the element was briefly expanded so we could measure it.\\n //\\n // Note: We\\u2019re using CSS to transition max-height instead jQuery\\u2019s slideToggle(),\\n // or another 3rd-party lib like Velocity.js, to avoid loading a large lib.\\n\\n }, {\\n key: \\\"updateExpandedHeight\\\",\\n value: function updateExpandedHeight() {\\n // Get width of original element so we can apply it to the clone\\n var nodeWidth = Math.round(parseFloat(this.targetEl.offsetWidth)); // Create clone of node\\n\\n var cloneEl = this.targetEl.cloneNode(true); // 'true' includes child nodes\\n // Inline styles added to prevent reflow, ensure clone is same size as expanded element\\n\\n cloneEl.style.cssText = \\\"max-height: none !important; position: absolute !important; right: 100% !important; visibility: hidden !important; width: \\\".concat(nodeWidth, \\\"px !important; -webkit-transition: none !important; -moz-transition: none !important; transition: none !important\\\"); // Update \\u201Caria-hidden\\u201D attribute\\n\\n cloneEl.setAttribute(\\\"aria-hidden\\\", false); // Remove id just to be safe\\n\\n cloneEl.removeAttribute(\\\"id\\\"); // Remove \\u201Cname\\u201D attributes to prevent resetting checkbox or radio elements\\n\\n var childElsWithId = cloneEl.querySelectorAll(\\\"[name]\\\"); // IE-friendly way of iterating over a NodeList\\n\\n Array.prototype.forEach.call(childElsWithId, function (el) {\\n el.removeAttribute(\\\"name\\\");\\n }); // Append clone to document, save as new let so we can remove it later\\n\\n var newEl = this.targetParentEl.insertBefore(cloneEl, this.targetEl); // Calculate height\\n\\n var expandedHeight = Math.round(parseFloat(newEl.offsetHeight)); // Remove cloned node to clean up after ourselves\\n\\n this.targetParentEl.removeChild(newEl); // Apply inline max-height to collapsed element\\n // Note: CSS is overriding this when aria-hidden=\\\"true\\\"\\n\\n this.targetEl.style.maxHeight = expandedHeight + \\\"px\\\";\\n }\\n }, {\\n key: \\\"expand\\\",\\n value: function expand(event) {\\n // Update toggle text\\n if (this.hasActiveText) {\\n this.textEl.textContent = this.activeToggleText;\\n } // Add classes\\n\\n\\n if (this.expandedClasses.length) {\\n var _this$el$classList2, _this$targetEl$classL2;\\n\\n (_this$el$classList2 = this.el.classList).add.apply(_this$el$classList2, _toConsumableArray(this.expandedClasses));\\n\\n (_this$targetEl$classL2 = this.targetEl.classList).add.apply(_this$targetEl$classL2, _toConsumableArray(this.expandedClasses));\\n } // Update aria attributes\\n\\n\\n this.el.setAttribute(\\\"aria-expanded\\\", true);\\n this.targetEl.setAttribute(\\\"aria-hidden\\\", false); // Emit event and include original event as an argument\\n\\n this.emitEvent(\\\"expand\\\", event);\\n }\\n }, {\\n key: \\\"collapse\\\",\\n value: function collapse(event) {\\n // Update toggle text\\n if (this.hasActiveText) {\\n this.textEl.textContent = this.defaultToggleText;\\n } // Remove classes\\n\\n\\n if (this.expandedClasses.length) {\\n var _this$el$classList3, _this$targetEl$classL3;\\n\\n (_this$el$classList3 = this.el.classList).remove.apply(_this$el$classList3, _toConsumableArray(this.expandedClasses));\\n\\n (_this$targetEl$classL3 = this.targetEl.classList).remove.apply(_this$targetEl$classL3, _toConsumableArray(this.expandedClasses));\\n } // Update aria attributes\\n\\n\\n this.el.setAttribute(\\\"aria-expanded\\\", false);\\n this.targetEl.setAttribute(\\\"aria-hidden\\\", true); // Emit event and include original event as an argument\\n\\n this.emitEvent(\\\"collapse\\\", event);\\n }\\n }, {\\n key: \\\"toggle\\\",\\n value: function toggle(event) {\\n // Prevent default in case toggle element is a link instead of a button\\n event.preventDefault();\\n\\n if (this.el.getAttribute(\\\"aria-expanded\\\") === \\\"true\\\") {\\n this.collapse(event);\\n } else {\\n this.expand(event);\\n }\\n }\\n }]);\\n\\n return ExpandToggle;\\n}(ev_emitter__WEBPACK_IMPORTED_MODULE_1___default.a);\\n\\n\\n\\n//# sourceURL=webpack://%5Bname%5DLink/./index.js?\");\n /***/\n },\n\n /***/\n \"./node_modules/ev-emitter/ev-emitter.js\":\n /*!***********************************************!*\\\n !*** ./node_modules/ev-emitter/ev-emitter.js ***!\n \\***********************************************/\n\n /*! no static exports found */\n\n /***/\n function node_modulesEvEmitterEvEmitterJs(module, exports, __webpack_require__) {\n eval(\"var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/**\\n * EvEmitter v1.1.0\\n * Lil' event emitter\\n * MIT License\\n */\\n\\n/* jshint unused: true, undef: true, strict: true */\\n\\n( function( global, factory ) {\\n // universal module definition\\n /* jshint strict: false */ /* globals define, module, window */\\n if ( true ) {\\n // AMD - RequireJS\\n !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\\n\\t\\t\\t\\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\\n\\t\\t\\t\\t(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :\\n\\t\\t\\t\\t__WEBPACK_AMD_DEFINE_FACTORY__),\\n\\t\\t\\t\\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\\n } else {}\\n\\n}( typeof window != 'undefined' ? window : this, function() {\\n\\n\\\"use strict\\\";\\n\\nfunction EvEmitter() {}\\n\\nvar proto = EvEmitter.prototype;\\n\\nproto.on = function( eventName, listener ) {\\n if ( !eventName || !listener ) {\\n return;\\n }\\n // set events hash\\n var events = this._events = this._events || {};\\n // set listeners array\\n var listeners = events[ eventName ] = events[ eventName ] || [];\\n // only add once\\n if ( listeners.indexOf( listener ) == -1 ) {\\n listeners.push( listener );\\n }\\n\\n return this;\\n};\\n\\nproto.once = function( eventName, listener ) {\\n if ( !eventName || !listener ) {\\n return;\\n }\\n // add event\\n this.on( eventName, listener );\\n // set once flag\\n // set onceEvents hash\\n var onceEvents = this._onceEvents = this._onceEvents || {};\\n // set onceListeners object\\n var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\\n // set flag\\n onceListeners[ listener ] = true;\\n\\n return this;\\n};\\n\\nproto.off = function( eventName, listener ) {\\n var listeners = this._events && this._events[ eventName ];\\n if ( !listeners || !listeners.length ) {\\n return;\\n }\\n var index = listeners.indexOf( listener );\\n if ( index != -1 ) {\\n listeners.splice( index, 1 );\\n }\\n\\n return this;\\n};\\n\\nproto.emitEvent = function( eventName, args ) {\\n var listeners = this._events && this._events[ eventName ];\\n if ( !listeners || !listeners.length ) {\\n return;\\n }\\n // copy over to avoid interference if .off() in listener\\n listeners = listeners.slice(0);\\n args = args || [];\\n // once stuff\\n var onceListeners = this._onceEvents && this._onceEvents[ eventName ];\\n\\n for ( var i=0; i < listeners.length; i++ ) {\\n var listener = listeners[i]\\n var isOnce = onceListeners && onceListeners[ listener ];\\n if ( isOnce ) {\\n // remove listener\\n // remove before trigger to prevent recursion\\n this.off( eventName, listener );\\n // unset once flag\\n delete onceListeners[ listener ];\\n }\\n // trigger listener\\n listener.apply( this, args );\\n }\\n\\n return this;\\n};\\n\\nproto.allOff = function() {\\n delete this._events;\\n delete this._onceEvents;\\n};\\n\\nreturn EvEmitter;\\n\\n}));\\n\\n\\n//# sourceURL=webpack://%5Bname%5DLink/./node_modules/ev-emitter/ev-emitter.js?\");\n /***/\n },\n\n /***/\n \"./node_modules/lodash/_Symbol.js\":\n /*!****************************************!*\\\n !*** ./node_modules/lodash/_Symbol.js ***!\n \\****************************************/\n\n /*! no static exports found */\n\n /***/\n function node_modulesLodash_SymbolJs(module, exports, __webpack_require__) {\n eval(\"var root = __webpack_require__(/*! ./_root */ \\\"./node_modules/lodash/_root.js\\\");\\n\\n/** Built-in value references. */\\nvar Symbol = root.Symbol;\\n\\nmodule.exports = Symbol;\\n\\n\\n//# sourceURL=webpack://%5Bname%5DLink/./node_modules/lodash/_Symbol.js?\");\n /***/\n },\n\n /***/\n \"./node_modules/lodash/_baseGetTag.js\":\n /*!********************************************!*\\\n !*** ./node_modules/lodash/_baseGetTag.js ***!\n \\********************************************/\n\n /*! no static exports found */\n\n /***/\n function node_modulesLodash_baseGetTagJs(module, exports, __webpack_require__) {\n eval(\"var Symbol = __webpack_require__(/*! ./_Symbol */ \\\"./node_modules/lodash/_Symbol.js\\\"),\\n getRawTag = __webpack_require__(/*! ./_getRawTag */ \\\"./node_modules/lodash/_getRawTag.js\\\"),\\n objectToString = __webpack_require__(/*! ./_objectToString */ \\\"./node_modules/lodash/_objectToString.js\\\");\\n\\n/** `Object#toString` result references. */\\nvar nullTag = '[object Null]',\\n undefinedTag = '[object Undefined]';\\n\\n/** Built-in value references. */\\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\\n\\n/**\\n * The base implementation of `getTag` without fallbacks for buggy environments.\\n *\\n * @private\\n * @param {*} value The value to query.\\n * @returns {string} Returns the `toStringTag`.\\n */\\nfunction baseGetTag(value) {\\n if (value == null) {\\n return value === undefined ? undefinedTag : nullTag;\\n }\\n return (symToStringTag && symToStringTag in Object(value))\\n ? getRawTag(value)\\n : objectToString(value);\\n}\\n\\nmodule.exports = baseGetTag;\\n\\n\\n//# sourceURL=webpack://%5Bname%5DLink/./node_modules/lodash/_baseGetTag.js?\");\n /***/\n },\n\n /***/\n \"./node_modules/lodash/_freeGlobal.js\":\n /*!********************************************!*\\\n !*** ./node_modules/lodash/_freeGlobal.js ***!\n \\********************************************/\n\n /*! no static exports found */\n\n /***/\n function node_modulesLodash_freeGlobalJs(module, exports, __webpack_require__) {\n eval(\"/* WEBPACK VAR INJECTION */(function(global) {/** Detect free variable `global` from Node.js. */\\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\\n\\nmodule.exports = freeGlobal;\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ \\\"./node_modules/webpack/buildin/global.js\\\")))\\n\\n//# sourceURL=webpack://%5Bname%5DLink/./node_modules/lodash/_freeGlobal.js?\");\n /***/\n },\n\n /***/\n \"./node_modules/lodash/_getRawTag.js\":\n /*!*******************************************!*\\\n !*** ./node_modules/lodash/_getRawTag.js ***!\n \\*******************************************/\n\n /*! no static exports found */\n\n /***/\n function node_modulesLodash_getRawTagJs(module, exports, __webpack_require__) {\n eval(\"var Symbol = __webpack_require__(/*! ./_Symbol */ \\\"./node_modules/lodash/_Symbol.js\\\");\\n\\n/** Used for built-in method references. */\\nvar objectProto = Object.prototype;\\n\\n/** Used to check objects for own properties. */\\nvar hasOwnProperty = objectProto.hasOwnProperty;\\n\\n/**\\n * Used to resolve the\\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\\n * of values.\\n */\\nvar nativeObjectToString = objectProto.toString;\\n\\n/** Built-in value references. */\\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\\n\\n/**\\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\\n *\\n * @private\\n * @param {*} value The value to query.\\n * @returns {string} Returns the raw `toStringTag`.\\n */\\nfunction getRawTag(value) {\\n var isOwn = hasOwnProperty.call(value, symToStringTag),\\n tag = value[symToStringTag];\\n\\n try {\\n value[symToStringTag] = undefined;\\n var unmasked = true;\\n } catch (e) {}\\n\\n var result = nativeObjectToString.call(value);\\n if (unmasked) {\\n if (isOwn) {\\n value[symToStringTag] = tag;\\n } else {\\n delete value[symToStringTag];\\n }\\n }\\n return result;\\n}\\n\\nmodule.exports = getRawTag;\\n\\n\\n//# sourceURL=webpack://%5Bname%5DLink/./node_modules/lodash/_getRawTag.js?\");\n /***/\n },\n\n /***/\n \"./node_modules/lodash/_objectToString.js\":\n /*!************************************************!*\\\n !*** ./node_modules/lodash/_objectToString.js ***!\n \\************************************************/\n\n /*! no static exports found */\n\n /***/\n function node_modulesLodash_objectToStringJs(module, exports) {\n eval(\"/** Used for built-in method references. */\\nvar objectProto = Object.prototype;\\n\\n/**\\n * Used to resolve the\\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\\n * of values.\\n */\\nvar nativeObjectToString = objectProto.toString;\\n\\n/**\\n * Converts `value` to a string using `Object.prototype.toString`.\\n *\\n * @private\\n * @param {*} value The value to convert.\\n * @returns {string} Returns the converted string.\\n */\\nfunction objectToString(value) {\\n return nativeObjectToString.call(value);\\n}\\n\\nmodule.exports = objectToString;\\n\\n\\n//# sourceURL=webpack://%5Bname%5DLink/./node_modules/lodash/_objectToString.js?\");\n /***/\n },\n\n /***/\n \"./node_modules/lodash/_root.js\":\n /*!**************************************!*\\\n !*** ./node_modules/lodash/_root.js ***!\n \\**************************************/\n\n /*! no static exports found */\n\n /***/\n function node_modulesLodash_rootJs(module, exports, __webpack_require__) {\n eval(\"var freeGlobal = __webpack_require__(/*! ./_freeGlobal */ \\\"./node_modules/lodash/_freeGlobal.js\\\");\\n\\n/** Detect free variable `self`. */\\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\\n\\n/** Used as a reference to the global object. */\\nvar root = freeGlobal || freeSelf || Function('return this')();\\n\\nmodule.exports = root;\\n\\n\\n//# sourceURL=webpack://%5Bname%5DLink/./node_modules/lodash/_root.js?\");\n /***/\n },\n\n /***/\n \"./node_modules/lodash/debounce.js\":\n /*!*****************************************!*\\\n !*** ./node_modules/lodash/debounce.js ***!\n \\*****************************************/\n\n /*! no static exports found */\n\n /***/\n function node_modulesLodashDebounceJs(module, exports, __webpack_require__) {\n eval(\"var isObject = __webpack_require__(/*! ./isObject */ \\\"./node_modules/lodash/isObject.js\\\"),\\n now = __webpack_require__(/*! ./now */ \\\"./node_modules/lodash/now.js\\\"),\\n toNumber = __webpack_require__(/*! ./toNumber */ \\\"./node_modules/lodash/toNumber.js\\\");\\n\\n/** Error message constants. */\\nvar FUNC_ERROR_TEXT = 'Expected a function';\\n\\n/* Built-in method references for those with the same name as other `lodash` methods. */\\nvar nativeMax = Math.max,\\n nativeMin = Math.min;\\n\\n/**\\n * Creates a debounced function that delays invoking `func` until after `wait`\\n * milliseconds have elapsed since the last time the debounced function was\\n * invoked. The debounced function comes with a `cancel` method to cancel\\n * delayed `func` invocations and a `flush` method to immediately invoke them.\\n * Provide `options` to indicate whether `func` should be invoked on the\\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\\n * with the last arguments provided to the debounced function. Subsequent\\n * calls to the debounced function return the result of the last `func`\\n * invocation.\\n *\\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\\n * invoked on the trailing edge of the timeout only if the debounced function\\n * is invoked more than once during the `wait` timeout.\\n *\\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\\n *\\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\\n * for details over the differences between `_.debounce` and `_.throttle`.\\n *\\n * @static\\n * @memberOf _\\n * @since 0.1.0\\n * @category Function\\n * @param {Function} func The function to debounce.\\n * @param {number} [wait=0] The number of milliseconds to delay.\\n * @param {Object} [options={}] The options object.\\n * @param {boolean} [options.leading=false]\\n * Specify invoking on the leading edge of the timeout.\\n * @param {number} [options.maxWait]\\n * The maximum time `func` is allowed to be delayed before it's invoked.\\n * @param {boolean} [options.trailing=true]\\n * Specify invoking on the trailing edge of the timeout.\\n * @returns {Function} Returns the new debounced function.\\n * @example\\n *\\n * // Avoid costly calculations while the window size is in flux.\\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\\n *\\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\\n * 'leading': true,\\n * 'trailing': false\\n * }));\\n *\\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\\n * var source = new EventSource('/stream');\\n * jQuery(source).on('message', debounced);\\n *\\n * // Cancel the trailing debounced invocation.\\n * jQuery(window).on('popstate', debounced.cancel);\\n */\\nfunction debounce(func, wait, options) {\\n var lastArgs,\\n lastThis,\\n maxWait,\\n result,\\n timerId,\\n lastCallTime,\\n lastInvokeTime = 0,\\n leading = false,\\n maxing = false,\\n trailing = true;\\n\\n if (typeof func != 'function') {\\n throw new TypeError(FUNC_ERROR_TEXT);\\n }\\n wait = toNumber(wait) || 0;\\n if (isObject(options)) {\\n leading = !!options.leading;\\n maxing = 'maxWait' in options;\\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\\n trailing = 'trailing' in options ? !!options.trailing : trailing;\\n }\\n\\n function invokeFunc(time) {\\n var args = lastArgs,\\n thisArg = lastThis;\\n\\n lastArgs = lastThis = undefined;\\n lastInvokeTime = time;\\n result = func.apply(thisArg, args);\\n return result;\\n }\\n\\n function leadingEdge(time) {\\n // Reset any `maxWait` timer.\\n lastInvokeTime = time;\\n // Start the timer for the trailing edge.\\n timerId = setTimeout(timerExpired, wait);\\n // Invoke the leading edge.\\n return leading ? invokeFunc(time) : result;\\n }\\n\\n function remainingWait(time) {\\n var timeSinceLastCall = time - lastCallTime,\\n timeSinceLastInvoke = time - lastInvokeTime,\\n timeWaiting = wait - timeSinceLastCall;\\n\\n return maxing\\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\\n : timeWaiting;\\n }\\n\\n function shouldInvoke(time) {\\n var timeSinceLastCall = time - lastCallTime,\\n timeSinceLastInvoke = time - lastInvokeTime;\\n\\n // Either this is the first call, activity has stopped and we're at the\\n // trailing edge, the system time has gone backwards and we're treating\\n // it as the trailing edge, or we've hit the `maxWait` limit.\\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\\n }\\n\\n function timerExpired() {\\n var time = now();\\n if (shouldInvoke(time)) {\\n return trailingEdge(time);\\n }\\n // Restart the timer.\\n timerId = setTimeout(timerExpired, remainingWait(time));\\n }\\n\\n function trailingEdge(time) {\\n timerId = undefined;\\n\\n // Only invoke if we have `lastArgs` which means `func` has been\\n // debounced at least once.\\n if (trailing && lastArgs) {\\n return invokeFunc(time);\\n }\\n lastArgs = lastThis = undefined;\\n return result;\\n }\\n\\n function cancel() {\\n if (timerId !== undefined) {\\n clearTimeout(timerId);\\n }\\n lastInvokeTime = 0;\\n lastArgs = lastCallTime = lastThis = timerId = undefined;\\n }\\n\\n function flush() {\\n return timerId === undefined ? result : trailingEdge(now());\\n }\\n\\n function debounced() {\\n var time = now(),\\n isInvoking = shouldInvoke(time);\\n\\n lastArgs = arguments;\\n lastThis = this;\\n lastCallTime = time;\\n\\n if (isInvoking) {\\n if (timerId === undefined) {\\n return leadingEdge(lastCallTime);\\n }\\n if (maxing) {\\n // Handle invocations in a tight loop.\\n clearTimeout(timerId);\\n timerId = setTimeout(timerExpired, wait);\\n return invokeFunc(lastCallTime);\\n }\\n }\\n if (timerId === undefined) {\\n timerId = setTimeout(timerExpired, wait);\\n }\\n return result;\\n }\\n debounced.cancel = cancel;\\n debounced.flush = flush;\\n return debounced;\\n}\\n\\nmodule.exports = debounce;\\n\\n\\n//# sourceURL=webpack://%5Bname%5DLink/./node_modules/lodash/debounce.js?\");\n /***/\n },\n\n /***/\n \"./node_modules/lodash/isObject.js\":\n /*!*****************************************!*\\\n !*** ./node_modules/lodash/isObject.js ***!\n \\*****************************************/\n\n /*! no static exports found */\n\n /***/\n function node_modulesLodashIsObjectJs(module, exports) {\n eval(\"/**\\n * Checks if `value` is the\\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\\n *\\n * @static\\n * @memberOf _\\n * @since 0.1.0\\n * @category Lang\\n * @param {*} value The value to check.\\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\\n * @example\\n *\\n * _.isObject({});\\n * // => true\\n *\\n * _.isObject([1, 2, 3]);\\n * // => true\\n *\\n * _.isObject(_.noop);\\n * // => true\\n *\\n * _.isObject(null);\\n * // => false\\n */\\nfunction isObject(value) {\\n var type = typeof value;\\n return value != null && (type == 'object' || type == 'function');\\n}\\n\\nmodule.exports = isObject;\\n\\n\\n//# sourceURL=webpack://%5Bname%5DLink/./node_modules/lodash/isObject.js?\");\n /***/\n },\n\n /***/\n \"./node_modules/lodash/isObjectLike.js\":\n /*!*********************************************!*\\\n !*** ./node_modules/lodash/isObjectLike.js ***!\n \\*********************************************/\n\n /*! no static exports found */\n\n /***/\n function node_modulesLodashIsObjectLikeJs(module, exports) {\n eval(\"/**\\n * Checks if `value` is object-like. A value is object-like if it's not `null`\\n * and has a `typeof` result of \\\"object\\\".\\n *\\n * @static\\n * @memberOf _\\n * @since 4.0.0\\n * @category Lang\\n * @param {*} value The value to check.\\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\\n * @example\\n *\\n * _.isObjectLike({});\\n * // => true\\n *\\n * _.isObjectLike([1, 2, 3]);\\n * // => true\\n *\\n * _.isObjectLike(_.noop);\\n * // => false\\n *\\n * _.isObjectLike(null);\\n * // => false\\n */\\nfunction isObjectLike(value) {\\n return value != null && typeof value == 'object';\\n}\\n\\nmodule.exports = isObjectLike;\\n\\n\\n//# sourceURL=webpack://%5Bname%5DLink/./node_modules/lodash/isObjectLike.js?\");\n /***/\n },\n\n /***/\n \"./node_modules/lodash/isSymbol.js\":\n /*!*****************************************!*\\\n !*** ./node_modules/lodash/isSymbol.js ***!\n \\*****************************************/\n\n /*! no static exports found */\n\n /***/\n function node_modulesLodashIsSymbolJs(module, exports, __webpack_require__) {\n eval(\"var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ \\\"./node_modules/lodash/_baseGetTag.js\\\"),\\n isObjectLike = __webpack_require__(/*! ./isObjectLike */ \\\"./node_modules/lodash/isObjectLike.js\\\");\\n\\n/** `Object#toString` result references. */\\nvar symbolTag = '[object Symbol]';\\n\\n/**\\n * Checks if `value` is classified as a `Symbol` primitive or object.\\n *\\n * @static\\n * @memberOf _\\n * @since 4.0.0\\n * @category Lang\\n * @param {*} value The value to check.\\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\\n * @example\\n *\\n * _.isSymbol(Symbol.iterator);\\n * // => true\\n *\\n * _.isSymbol('abc');\\n * // => false\\n */\\nfunction isSymbol(value) {\\n return typeof value == 'symbol' ||\\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\\n}\\n\\nmodule.exports = isSymbol;\\n\\n\\n//# sourceURL=webpack://%5Bname%5DLink/./node_modules/lodash/isSymbol.js?\");\n /***/\n },\n\n /***/\n \"./node_modules/lodash/now.js\":\n /*!************************************!*\\\n !*** ./node_modules/lodash/now.js ***!\n \\************************************/\n\n /*! no static exports found */\n\n /***/\n function node_modulesLodashNowJs(module, exports, __webpack_require__) {\n eval(\"var root = __webpack_require__(/*! ./_root */ \\\"./node_modules/lodash/_root.js\\\");\\n\\n/**\\n * Gets the timestamp of the number of milliseconds that have elapsed since\\n * the Unix epoch (1 January 1970 00:00:00 UTC).\\n *\\n * @static\\n * @memberOf _\\n * @since 2.4.0\\n * @category Date\\n * @returns {number} Returns the timestamp.\\n * @example\\n *\\n * _.defer(function(stamp) {\\n * console.log(_.now() - stamp);\\n * }, _.now());\\n * // => Logs the number of milliseconds it took for the deferred invocation.\\n */\\nvar now = function() {\\n return root.Date.now();\\n};\\n\\nmodule.exports = now;\\n\\n\\n//# sourceURL=webpack://%5Bname%5DLink/./node_modules/lodash/now.js?\");\n /***/\n },\n\n /***/\n \"./node_modules/lodash/toNumber.js\":\n /*!*****************************************!*\\\n !*** ./node_modules/lodash/toNumber.js ***!\n \\*****************************************/\n\n /*! no static exports found */\n\n /***/\n function node_modulesLodashToNumberJs(module, exports, __webpack_require__) {\n eval(\"var isObject = __webpack_require__(/*! ./isObject */ \\\"./node_modules/lodash/isObject.js\\\"),\\n isSymbol = __webpack_require__(/*! ./isSymbol */ \\\"./node_modules/lodash/isSymbol.js\\\");\\n\\n/** Used as references for various `Number` constants. */\\nvar NAN = 0 / 0;\\n\\n/** Used to match leading and trailing whitespace. */\\nvar reTrim = /^\\\\s+|\\\\s+$/g;\\n\\n/** Used to detect bad signed hexadecimal string values. */\\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\\n\\n/** Used to detect binary string values. */\\nvar reIsBinary = /^0b[01]+$/i;\\n\\n/** Used to detect octal string values. */\\nvar reIsOctal = /^0o[0-7]+$/i;\\n\\n/** Built-in method references without a dependency on `root`. */\\nvar freeParseInt = parseInt;\\n\\n/**\\n * Converts `value` to a number.\\n *\\n * @static\\n * @memberOf _\\n * @since 4.0.0\\n * @category Lang\\n * @param {*} value The value to process.\\n * @returns {number} Returns the number.\\n * @example\\n *\\n * _.toNumber(3.2);\\n * // => 3.2\\n *\\n * _.toNumber(Number.MIN_VALUE);\\n * // => 5e-324\\n *\\n * _.toNumber(Infinity);\\n * // => Infinity\\n *\\n * _.toNumber('3.2');\\n * // => 3.2\\n */\\nfunction toNumber(value) {\\n if (typeof value == 'number') {\\n return value;\\n }\\n if (isSymbol(value)) {\\n return NAN;\\n }\\n if (isObject(value)) {\\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\\n value = isObject(other) ? (other + '') : other;\\n }\\n if (typeof value != 'string') {\\n return value === 0 ? value : +value;\\n }\\n value = value.replace(reTrim, '');\\n var isBinary = reIsBinary.test(value);\\n return (isBinary || reIsOctal.test(value))\\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\\n : (reIsBadHex.test(value) ? NAN : +value);\\n}\\n\\nmodule.exports = toNumber;\\n\\n\\n//# sourceURL=webpack://%5Bname%5DLink/./node_modules/lodash/toNumber.js?\");\n /***/\n },\n\n /***/\n \"./node_modules/webpack/buildin/global.js\":\n /*!***********************************!*\\\n !*** (webpack)/buildin/global.js ***!\n \\***********************************/\n\n /*! no static exports found */\n\n /***/\n function node_modulesWebpackBuildinGlobalJs(module, exports) {\n eval(\"var g;\\n\\n// This works in non-strict mode\\ng = (function() {\\n\\treturn this;\\n})();\\n\\ntry {\\n\\t// This works if eval is allowed (see CSP)\\n\\tg = g || new Function(\\\"return this\\\")();\\n} catch (e) {\\n\\t// This works if the window reference is available\\n\\tif (typeof window === \\\"object\\\") g = window;\\n}\\n\\n// g can still be undefined, but nothing to do about it...\\n// We return undefined, instead of nothing here, so it's\\n// easier to handle this case. if(!global) { ...}\\n\\nmodule.exports = g;\\n\\n\\n//# sourceURL=webpack://%5Bname%5DLink/(webpack)/buildin/global.js?\");\n /***/\n }\n /******/\n\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar g; // This works in non-strict mode\n\ng = function () {\n return this;\n}();\n\ntry {\n // This works if eval is allowed (see CSP)\n g = g || new Function(\"return this\")();\n} catch (e) {\n // This works if the window reference is available\n if ((typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === \"object\") g = window;\n} // g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\n\nmodule.exports = g;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/**\n * what-input - A global utility for tracking the current input method (mouse, keyboard or touch).\n * @version v5.2.10\n * @link https://github.com/ten1seven/what-input\n * @license MIT\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n if ((typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && (typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) === 'object') module.exports = factory();else if (typeof define === 'function' && define.amd) define(\"whatInput\", [], factory);else if ((typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object') exports[\"whatInput\"] = factory();else root[\"whatInput\"] = factory();\n})(this, function () {\n return (\n /******/\n function (modules) {\n // webpackBootstrap\n\n /******/\n // The module cache\n\n /******/\n var installedModules = {};\n /******/\n // The require function\n\n /******/\n\n function __webpack_require__(moduleId) {\n /******/\n // Check if module is in cache\n\n /******/\n if (installedModules[moduleId])\n /******/\n return installedModules[moduleId].exports;\n /******/\n // Create a new module (and put it into the cache)\n\n /******/\n\n var module = installedModules[moduleId] = {\n /******/\n exports: {},\n\n /******/\n id: moduleId,\n\n /******/\n loaded: false\n /******/\n\n };\n /******/\n // Execute the module function\n\n /******/\n\n modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n /******/\n // Flag the module as loaded\n\n /******/\n\n module.loaded = true;\n /******/\n // Return the exports of the module\n\n /******/\n\n return module.exports;\n /******/\n }\n /******/\n // expose the modules object (__webpack_modules__)\n\n /******/\n\n\n __webpack_require__.m = modules;\n /******/\n // expose the module cache\n\n /******/\n\n __webpack_require__.c = installedModules;\n /******/\n // __webpack_public_path__\n\n /******/\n\n __webpack_require__.p = \"\";\n /******/\n // Load entry module and return exports\n\n /******/\n\n return __webpack_require__(0);\n /******/\n }(\n /************************************************************************/\n\n /******/\n [\n /* 0 */\n\n /***/\n function (module, exports) {\n 'use strict';\n\n module.exports = function () {\n /*\n * bail out if there is no document or window\n * (i.e. in a node/non-DOM environment)\n *\n * Return a stubbed API instead\n */\n if (typeof document === 'undefined' || typeof window === 'undefined') {\n return {\n // always return \"initial\" because no interaction will ever be detected\n ask: function ask() {\n return 'initial';\n },\n // always return null\n element: function element() {\n return null;\n },\n // no-op\n ignoreKeys: function ignoreKeys() {},\n // no-op\n specificKeys: function specificKeys() {},\n // no-op\n registerOnChange: function registerOnChange() {},\n // no-op\n unRegisterOnChange: function unRegisterOnChange() {}\n };\n }\n /*\n * variables\n */\n // cache document.documentElement\n\n\n var docElem = document.documentElement; // currently focused dom element\n\n var currentElement = null; // last used input type\n\n var currentInput = 'initial'; // last used input intent\n\n var currentIntent = currentInput; // UNIX timestamp of current event\n\n var currentTimestamp = Date.now(); // check for a `data-whatpersist` attribute on either the `html` or `body` elements, defaults to `true`\n\n var shouldPersist = 'false'; // form input types\n\n var formInputs = ['button', 'input', 'select', 'textarea']; // empty array for holding callback functions\n\n var functionList = []; // list of modifier keys commonly used with the mouse and\n // can be safely ignored to prevent false keyboard detection\n\n var ignoreMap = [16, // shift\n 17, // control\n 18, // alt\n 91, // Windows key / left Apple cmd\n 93 // Windows menu / right Apple cmd\n ];\n var specificMap = []; // mapping of events to input types\n\n var inputMap = {\n keydown: 'keyboard',\n keyup: 'keyboard',\n mousedown: 'mouse',\n mousemove: 'mouse',\n MSPointerDown: 'pointer',\n MSPointerMove: 'pointer',\n pointerdown: 'pointer',\n pointermove: 'pointer',\n touchstart: 'touch',\n touchend: 'touch' // boolean: true if the page is being scrolled\n\n };\n var isScrolling = false; // store current mouse position\n\n var mousePos = {\n x: null,\n y: null // map of IE 10 pointer events\n\n };\n var pointerMap = {\n 2: 'touch',\n 3: 'touch',\n // treat pen like touch\n 4: 'mouse' // check support for passive event listeners\n\n };\n var supportsPassive = false;\n\n try {\n var opts = Object.defineProperty({}, 'passive', {\n get: function get() {\n supportsPassive = true;\n }\n });\n window.addEventListener('test', null, opts);\n } catch (e) {} // fail silently\n\n /*\n * set up\n */\n\n\n var setUp = function setUp() {\n // add correct mouse wheel event mapping to `inputMap`\n inputMap[detectWheel()] = 'mouse';\n addListeners();\n };\n /*\n * events\n */\n\n\n var addListeners = function addListeners() {\n // `pointermove`, `MSPointerMove`, `mousemove` and mouse wheel event binding\n // can only demonstrate potential, but not actual, interaction\n // and are treated separately\n var options = supportsPassive ? {\n passive: true\n } : false;\n document.addEventListener('DOMContentLoaded', setPersist); // pointer events (mouse, pen, touch)\n\n if (window.PointerEvent) {\n window.addEventListener('pointerdown', setInput);\n window.addEventListener('pointermove', setIntent);\n } else if (window.MSPointerEvent) {\n window.addEventListener('MSPointerDown', setInput);\n window.addEventListener('MSPointerMove', setIntent);\n } else {\n // mouse events\n window.addEventListener('mousedown', setInput);\n window.addEventListener('mousemove', setIntent); // touch events\n\n if ('ontouchstart' in window) {\n window.addEventListener('touchstart', setInput, options);\n window.addEventListener('touchend', setInput);\n }\n } // mouse wheel\n\n\n window.addEventListener(detectWheel(), setIntent, options); // keyboard events\n\n window.addEventListener('keydown', setInput);\n window.addEventListener('keyup', setInput); // focus events\n\n window.addEventListener('focusin', setElement);\n window.addEventListener('focusout', clearElement);\n }; // checks if input persistence should happen and\n // get saved state from session storage if true (defaults to `false`)\n\n\n var setPersist = function setPersist() {\n shouldPersist = !(docElem.getAttribute('data-whatpersist') || document.body.getAttribute('data-whatpersist') === 'false');\n\n if (shouldPersist) {\n // check for session variables and use if available\n try {\n if (window.sessionStorage.getItem('what-input')) {\n currentInput = window.sessionStorage.getItem('what-input');\n }\n\n if (window.sessionStorage.getItem('what-intent')) {\n currentIntent = window.sessionStorage.getItem('what-intent');\n }\n } catch (e) {// fail silently\n }\n } // always run these so at least `initial` state is set\n\n\n doUpdate('input');\n doUpdate('intent');\n }; // checks conditions before updating new input\n\n\n var setInput = function setInput(event) {\n var eventKey = event.which;\n var value = inputMap[event.type];\n\n if (value === 'pointer') {\n value = pointerType(event);\n }\n\n var ignoreMatch = !specificMap.length && ignoreMap.indexOf(eventKey) === -1;\n var specificMatch = specificMap.length && specificMap.indexOf(eventKey) !== -1;\n var shouldUpdate = value === 'keyboard' && eventKey && (ignoreMatch || specificMatch) || value === 'mouse' || value === 'touch'; // prevent touch detection from being overridden by event execution order\n\n if (validateTouch(value)) {\n shouldUpdate = false;\n }\n\n if (shouldUpdate && currentInput !== value) {\n currentInput = value;\n persistInput('input', currentInput);\n doUpdate('input');\n }\n\n if (shouldUpdate && currentIntent !== value) {\n // preserve intent for keyboard interaction with form fields\n var activeElem = document.activeElement;\n var notFormInput = activeElem && activeElem.nodeName && (formInputs.indexOf(activeElem.nodeName.toLowerCase()) === -1 || activeElem.nodeName.toLowerCase() === 'button' && !checkClosest(activeElem, 'form'));\n\n if (notFormInput) {\n currentIntent = value;\n persistInput('intent', currentIntent);\n doUpdate('intent');\n }\n }\n }; // updates the doc and `inputTypes` array with new input\n\n\n var doUpdate = function doUpdate(which) {\n docElem.setAttribute('data-what' + which, which === 'input' ? currentInput : currentIntent);\n fireFunctions(which);\n }; // updates input intent for `mousemove` and `pointermove`\n\n\n var setIntent = function setIntent(event) {\n var value = inputMap[event.type];\n\n if (value === 'pointer') {\n value = pointerType(event);\n } // test to see if `mousemove` happened relative to the screen to detect scrolling versus mousemove\n\n\n detectScrolling(event); // only execute if scrolling isn't happening\n\n if ((!isScrolling && !validateTouch(value) || isScrolling && event.type === 'wheel' || event.type === 'mousewheel' || event.type === 'DOMMouseScroll') && currentIntent !== value) {\n currentIntent = value;\n persistInput('intent', currentIntent);\n doUpdate('intent');\n }\n };\n\n var setElement = function setElement(event) {\n if (!event.target.nodeName) {\n // If nodeName is undefined, clear the element\n // This can happen if click inside an element.\n clearElement();\n return;\n }\n\n currentElement = event.target.nodeName.toLowerCase();\n docElem.setAttribute('data-whatelement', currentElement);\n\n if (event.target.classList && event.target.classList.length) {\n docElem.setAttribute('data-whatclasses', event.target.classList.toString().replace(' ', ','));\n }\n };\n\n var clearElement = function clearElement() {\n currentElement = null;\n docElem.removeAttribute('data-whatelement');\n docElem.removeAttribute('data-whatclasses');\n };\n\n var persistInput = function persistInput(which, value) {\n if (shouldPersist) {\n try {\n window.sessionStorage.setItem('what-' + which, value);\n } catch (e) {// fail silently\n }\n }\n };\n /*\n * utilities\n */\n\n\n var pointerType = function pointerType(event) {\n if (typeof event.pointerType === 'number') {\n return pointerMap[event.pointerType];\n } else {\n // treat pen like touch\n return event.pointerType === 'pen' ? 'touch' : event.pointerType;\n }\n }; // prevent touch detection from being overridden by event execution order\n\n\n var validateTouch = function validateTouch(value) {\n var timestamp = Date.now();\n var touchIsValid = value === 'mouse' && currentInput === 'touch' && timestamp - currentTimestamp < 200;\n currentTimestamp = timestamp;\n return touchIsValid;\n }; // detect version of mouse wheel event to use\n // via https://developer.mozilla.org/en-US/docs/Web/API/Element/wheel_event\n\n\n var detectWheel = function detectWheel() {\n var wheelType = null; // Modern browsers support \"wheel\"\n\n if ('onwheel' in document.createElement('div')) {\n wheelType = 'wheel';\n } else {\n // Webkit and IE support at least \"mousewheel\"\n // or assume that remaining browsers are older Firefox\n wheelType = document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\n }\n\n return wheelType;\n }; // runs callback functions\n\n\n var fireFunctions = function fireFunctions(type) {\n for (var i = 0, len = functionList.length; i < len; i++) {\n if (functionList[i].type === type) {\n functionList[i].fn.call(undefined, type === 'input' ? currentInput : currentIntent);\n }\n }\n }; // finds matching element in an object\n\n\n var objPos = function objPos(match) {\n for (var i = 0, len = functionList.length; i < len; i++) {\n if (functionList[i].fn === match) {\n return i;\n }\n }\n };\n\n var detectScrolling = function detectScrolling(event) {\n if (mousePos.x !== event.screenX || mousePos.y !== event.screenY) {\n isScrolling = false;\n mousePos.x = event.screenX;\n mousePos.y = event.screenY;\n } else {\n isScrolling = true;\n }\n }; // manual version of `closest()`\n\n\n var checkClosest = function checkClosest(elem, tag) {\n var ElementPrototype = window.Element.prototype;\n\n if (!ElementPrototype.matches) {\n ElementPrototype.matches = ElementPrototype.msMatchesSelector || ElementPrototype.webkitMatchesSelector;\n }\n\n if (!ElementPrototype.closest) {\n do {\n if (elem.matches(tag)) {\n return elem;\n }\n\n elem = elem.parentElement || elem.parentNode;\n } while (elem !== null && elem.nodeType === 1);\n\n return null;\n } else {\n return elem.closest(tag);\n }\n };\n /*\n * init\n */\n // don't start script unless browser cuts the mustard\n // (also passes if polyfills are used)\n\n\n if ('addEventListener' in window && Array.prototype.indexOf) {\n setUp();\n }\n /*\n * api\n */\n\n\n return {\n // returns string: the current input type\n // opt: 'intent'|'input'\n // 'input' (default): returns the same value as the `data-whatinput` attribute\n // 'intent': includes `data-whatintent` value if it's different than `data-whatinput`\n ask: function ask(opt) {\n return opt === 'intent' ? currentIntent : currentInput;\n },\n // returns string: the currently focused element or null\n element: function element() {\n return currentElement;\n },\n // overwrites ignored keys with provided array\n ignoreKeys: function ignoreKeys(arr) {\n ignoreMap = arr;\n },\n // overwrites specific char keys to update on\n specificKeys: function specificKeys(arr) {\n specificMap = arr;\n },\n // attach functions to input and intent \"events\"\n // funct: function to fire on change\n // eventType: 'input'|'intent'\n registerOnChange: function registerOnChange(fn, eventType) {\n functionList.push({\n fn: fn,\n type: eventType || 'input'\n });\n },\n unRegisterOnChange: function unRegisterOnChange(fn) {\n var position = objPos(fn);\n\n if (position || position === 0) {\n functionList.splice(position, 1);\n }\n },\n clearStorage: function clearStorage() {\n window.sessionStorage.clear();\n }\n };\n }();\n /***/\n\n }\n /******/\n ])\n );\n});\n\n;","//------------------------------------------------------------------------\n// Accessiblity menu functionality (font size and color theme chooser)\n//\n// NOTE: Saved theme preference is applied on load in critical.js to prevent a FOUC\n//------------------------------------------------------------------------\n\"use strict\";\n\nimport ExpandToggle from '@threespot/expand-toggle';\n\nclass A11yMenu {\n constructor(el) {\n var self = this;\n this.htmlEl = document.documentElement;\n this.el = el;\n this.textSizeEl = document.getElementById(\"text-size\");\n this.themeInputs = this.el.querySelectorAll(\".A11yMenu-theme input\");\n\n // Init toggle\n this.expandToggle = new ExpandToggle(\n document.querySelector(\".A11yMenu-toggle\")\n );\n\n // Update form fields on load to reflect currently selected theme and font size\n this.updateForm();\n\n // Expand the menu on load if the user has never collapsed it before\n if (typeof localStorage !== \"undefined\" && !localStorage.a11yMenu) {\n this.expandToggle.expand()\n }\n\n // Set cookie once menu is collapsed\n this.expandToggle.on(\"collapse\", () => {\n if (typeof localStorage !== \"undefined\" && !localStorage.a11yMenu) {\n localStorage.a11yMenu = true;\n }\n });\n\n // Listen for any changes within the form\n this.el.addEventListener(\"change\", function(evt) {\n var val = evt.target.value;\n\n // If the value of the element that changed is not a number, assume it’s a theme class\n if (isNaN(parseInt(val, 10))) {\n self.updateTheme(val);\n } else {\n self.updateTextSize(val);\n }\n });\n\n // Close when click off of it\n window.addEventListener(\"click\", evt => {\n if (!evt.target.closest(\".A11yMenu\")) {\n this.expandToggle.collapse();\n }\n });\n }\n\n updateTextSize(size) {\n // Apply inline font-size to html element\n this.htmlEl.style.fontSize = size + \"%\";\n\n // Save value to localStorage\n if (typeof localStorage !== \"undefined\") {\n localStorage.textSize = size;\n }\n\n // Trigger window resize event to force all expandable components to recalc their height\n window.dispatchEvent(new Event('resize'));\n }\n\n updateTheme(themeColor) {\n // Find any class names starting with “t-” and remove them\n var htmlClasses = this.htmlEl.className.replace(/\\b(\\s*?t-.+?)\\b/g, \"\");\n\n // Add new theme class\n this.htmlEl.className = htmlClasses + \" t-\" + themeColor;\n\n // Save to localStorage\n if (typeof localStorage !== \"undefined\") {\n localStorage.theme = themeColor;\n }\n }\n\n // Get current theme and font size values from localStorage and update form fields\n updateForm() {\n if (typeof localStorage !== \"undefined\") {\n if (localStorage.theme) {\n // Select the current theme radio button\n for (var i = 0, len = this.themeInputs.length; i < len; i++) {\n var input = this.themeInputs[i];\n\n if (input.value == localStorage.theme) {\n input.checked = true;\n }\n }\n }\n\n if (localStorage.textSize) {\n // Add “selected” attribute to current font size\n this.textSizeEl.querySelector(\n '[value=\"' + localStorage.textSize + '\"]'\n ).selected = true;\n }\n }\n }\n}\n\n// Init\nvar a11Menu = new A11yMenu(document.querySelector(\".A11yMenu-form\"));\n","//------------------------------------------------------------------------\n// Load the Recite Me toolbar when users click the toggle button\n// https://github.com/Threespot/blindness/issues/454\n// https://portal.reciteme.com/portal/product/installation/client/e5f6079d59bf23c13a8f868da5d273971977d547/p/1\n//------------------------------------------------------------------------\nimport loadJS from 'fg-loadjs';\n\nclass ReciteMeToggle {\n constructor(el) {\n // Check if Recite Me has previously been enabled,\n // and if so, load it immediately.\n if (sessionStorage.reciteme && sessionStorage.reciteme == 'true') {\n this.loadScript();\n }\n\n // Load Recite Me on toggle click\n el.addEventListener('click', evt => {\n // Check if it’s already been loaded first\n if (typeof Recite == 'undefined') {\n this.loadScript();\n }\n });\n }\n\n loadScript() {\n loadJS('https://api.reciteme.com/asset/js?key=e5f6079d59bf23c13a8f868da5d273971977d547', () => {\n Recite.load({\n Tracker: {\n Ga: { enabled: true }\n }\n });\n\n Recite.Event.subscribe(\"Recite:load\", () => {\n // console.log('Recite:load');\n Recite.enable();\n sessionStorage.reciteme = true;\n });\n\n Recite.Event.subscribe(\"Recite:disable\", () => {\n // console.log('Recite:disable');\n sessionStorage.reciteme = false;\n });\n\n // These events can be used to check the current theme styles\n // to update the logo and icon colors.\n\n // Recite.Event.subscribe('Preferences:load', function() {\n // console.log('Preferences:load', Recite.Preferences.get());\n // });\n\n // Recite.Event.subscribe('Preferences:set', function() {\n // console.log('Preferences:set', Recite.Preferences.get());\n // });\n\n // Recite.Event.subscribe('Preferences:reset', function() {\n // console.log('Preferences:reset', Recite.Preferences.get());\n // });\n\n // Example output from Recite.Preferences.get('style')\n //\n // dictionary: {enabled: false}\n // language: null\n // magnifier: {enabled: false}\n // player: {autoplay: true, continuePlay: false, playbackSpeed: 1}\n // playerControls: {enabled: true}\n // style: {\n // backgroundColor: null\n // charSpacing: null\n // font: {color: null, face: null, size: null}\n // lineHeight: null\n // link: {color: null}\n // marginSize: null\n // ruler: {enabled: false, color: null}\n // screenMask: {enabled: false, color: null}\n // textAlign: null\n // wwHighlight: {color: null}\n // }\n // textMode: {enabled: false}\n // voice: {gender: \"f\"}\n // voices: {en: \"Amy\"}\n });\n }\n}\n\n// Init\ndocument.querySelectorAll('.A11yMenu-tools-toggle').forEach(el => {\n new ReciteMeToggle(el);\n});\n","/*! loadJS: load a JS file asynchronously. [c]2014 @scottjehl, Filament Group, Inc. (Based on http://goo.gl/REQGQ by Paul Irish). Licensed MIT */\n(function (w) {\n var loadJS = function loadJS(src, cb, ordered) {\n \"use strict\";\n\n var tmp;\n var ref = w.document.getElementsByTagName(\"script\")[0];\n var script = w.document.createElement(\"script\");\n\n if (typeof cb === 'boolean') {\n tmp = ordered;\n ordered = cb;\n cb = tmp;\n }\n\n script.src = src;\n script.async = !ordered;\n ref.parentNode.insertBefore(script, ref);\n\n if (cb && typeof cb === \"function\") {\n script.onload = cb;\n }\n\n return script;\n }; // commonjs\n\n\n if (typeof module !== \"undefined\") {\n module.exports = loadJS;\n } else {\n w.loadJS = loadJS;\n }\n})(typeof global !== \"undefined\" ? global : this);","// Image Generator\n// Displays an image when a user selects a day, severity, and retinal disease value\n// https://github.com/Threespot/blindness/issues/700\n\n// After every change\n// We will update the string that will retrieve the image\n// We can also send an API request that gets us the data initially\n\nexport default class ImageGenerator {\n constructor() {\n this.el = document.querySelector('[data-controller=\"image-generator\"]');\n\n if (!this.el) {\n return false;\n }\n\n this.retinalControls = this.el.querySelector('[data-target=\"retinal-diseases\"]');\n this.severityControls = this.el.querySelector('[data-target=\"severity-controls\"]');\n this.dayControls = this.el.querySelector('[data-target=\"day-controls\"]');\n this.imageName = this.el.querySelector('[data-target=\"image-name\"]');\n this.form = this.el.querySelector('[data-target=\"form\"]');\n this.email = this.el.querySelector('[data-target=\"email\"]');\n this.submitBtn = this.el.querySelector('[data-target=\"submit\"]');\n this.original = this.el.querySelector('[data-target=\"original\"]');\n\n this.url = this.form.getAttribute('action');\n\n this.updateSelectedValues();\n this.init();\n }\n\n init() {\n\n // Updates the hidden imageName input field with the filename\n this.imageName.value = this.selectedValues.join(\"-\") + '.jpg';\n\n this.el.addEventListener(\"change\", this.handleChange.bind(this));\n this.form.addEventListener(\"submit\", this.handleSubmit.bind(this));\n this.email.addEventListener('input', this.handleInput.bind(this));\n }\n\n handleInput(evt) {\n this.email.value = evt.target.value;\n }\n\n handleSubmit(evt) {\n evt.preventDefault();\n\n let csrfToken = this.el.querySelector(\"[name='authenticity_token']\").value;\n\n if (!csrfToken) {\n console.error('CSRF TOKEN ERROR');\n return false;\n }\n\n // Kickoff spinner\n this.submitBtn.setAttribute('data-status', 'loading');\n\n fetch(this.url, {\n method: 'POST',\n headers: {\n \"X-CSRF-Token\": csrfToken,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n image_name: this.imageName.value,\n email: this.email.value\n })\n }).then(response => {\n return response.json();\n }).then(data => {\n\n if (data.status === 406) {\n throw new Error(`Status Code: ${data.status} - ${data.message}`);\n }\n\n // Change message to submitted\n this.submitBtn.setAttribute('data-status', 'success');\n console.log(data);\n }).catch(error => {\n this.submitBtn.setAttribute('data-status', 'error');\n // Add error message that indicates that it wasn't send successfully\n console.log(error);\n });\n }\n\n handleChange(evt) {\n let { target } = evt;\n\n if (target.tagName === \"INPUT\") {\n this.updateSelectedValues();\n this.updateImage();\n }\n }\n\n /**\n * Retrieves the parts of the filename from the radio buttons and store it inside of an array\n */\n updateSelectedValues() {\n this.selectedValues = [\n this.retinalControls.querySelector('input[type=\"radio\"]:checked').value,\n this.dayControls.querySelector('input[type=\"radio\"]:checked').value,\n this.severityControls.querySelector('input[type=\"radio\"]:checked').value,\n ];\n }\n\n updateImage() {\n // update original image based on night/day selection\n let nightOrDay = this.dayControls.querySelector('input[type=\"radio\"]:checked').value;\n if (nightOrDay === \"day\") {\n this.original.classList.remove(\"-night\");\n this.original.classList.add(\"-day\");\n } else {\n this.original.classList.remove(\"-day\");\n this.original.classList.add(\"-night\");\n }\n\n let imgName = this.selectedValues.join(\"-\");\n let prevImg = this.el.querySelector('img[data-selected=\"true\"]');\n let img = this.el.querySelector(`[data-img-name=\"${imgName}\"]`);\n\n this.imageName.value = imgName + '.jpg';\n\n // Grab the image that is stored in the data-src attribute\n if (img.getAttribute(\"src\") !== img.getAttribute(\"data-src\")) {\n img.setAttribute(\"src\", img.getAttribute(\"data-src\"));\n }\n\n prevImg.setAttribute(\"data-selected\", \"false\");\n img.setAttribute(\"data-selected\", \"true\");\n }\n}\n","//------------------------------------------------------------------------\n// Basic form validation\n//\n// Usage Info:\n// • Add “js-validate” to
or other wrapper\n// • Add appropriate data-validate value to each input\n// - data-validate=\"email\"\n// - data-validate=\"phone\"\n// - data-validate=\"number\"\n// - data-validate=\"zip\"\n// - data-validate=\"notempty\"\n// • Add error message markup inside of
Please enter a valid email address\n// • Add `data-validate=\"submit\"` to submit button\n// \n// To disable scrolling to the first error message, add the “data-no-jump” attribute\n// • Required fields should use `aria-required=\"true\"` when possible, but `required` and `data-validate-required` will also work\n// • For groups of checkboxes, wrap in
and add appropriate `data-validate-group` value (see examples below)\n// - data-validate-group=\"min-1\"\n// - data-validate-group=\"max-2\"\n// - data-validate-group=\"notempty\"\n// • For groups of radios, wrap in
and add appropriate `data-validate-group` value (see examples above)\n//------------------------------------------------------------------------\n\"use strict\";\n\nexport default class ValidateForm {\n constructor(el) {\n this.el = el;\n this.isAjaxSubmit = this.el.hasAttribute(\"data-form-ajax\");\n\n // Add the “novalidate” attribute to form to disable default browser error messages if using “required” attribute\n // Note: `prop('novalidate', true)` doesn't work for some reason ¯\\_(ツ)_/¯\n this.el.setAttribute(\"novalidate\", \"novalidate\");\n\n // Find error messages\n this.errorMsgs = this.el.querySelectorAll(\"[data-validate='error']\");\n\n // Submit button\n this.submitBtn = this.el.querySelector(\"[data-validate='submit']\");\n\n if (!this.submitBtn) {\n console.warn(`Form is missing “button[data-validate=\"submit\"]” element, skipping validation.`, this.el);\n return false;\n }\n\n this.shouldScroll = !this.submitBtn.hasAttribute(\"data-no-jump\");\n this.submitText = this.submitBtn.textContent;\n\n // Elements that require validation, set to `aria-invalid='true'` on load\n this.validateEls = this.el.querySelectorAll(\"[data-validate]\");\n\n // Exclude submit and error messages\n this.validateEls = [...this.validateEls].filter(\n el =>\n el.getAttribute(\"data-validate\") !== \"submit\" &&\n el.getAttribute(\"data-validate\") !== \"error\"\n );\n\n // Cache the associated elements refences to render error messages\n // this.storeElementReferences(this.$validateEls);\n\n // Groups of checkboxes/radios that require validation\n this.groups = this.el.querySelectorAll(\"[data-validate-group]\");\n this.currentGroup = false;\n\n // Store previously focused checkbox/radio group, validate when focus changes\n this.prevGroup = false;\n\n // Validating every possible email is a fool’s errand and not necessary.\n // Instead, just check for at least one “@” and “.”\n // https://davidcel.is/posts/stop-validating-email-addresses-with-regex/\n this.emailRegex = /^.+@.+\\..+$/;\n\n // If more validation is desired, we can check for only one “@”\n // Based on https://github.com/plataformatec/devise/blob/593ae41f9dac165a404b05cd3abd959245c64908/lib/devise.rb#L109-L113\n // this.emailRegex = /^[^@\\s]+@([^@\\s]+\\.)+[^@\\s]+$/;\n\n // Numeric value test (allows single decimal)\n this.numericRegex = /^((\\d+)|(\\.\\d+)|(\\d+\\.\\d+))%?$/;\n\n // Phone number test (very loose, allows everything except line breaks)\n this.phoneRegex = /^.+$/;\n\n // Postal code RegEx, allows from 2–12 letters, numbers, spaces, or dashes\n this.zipRegex = /^[\\w\\d\\- ]{2,12}$/;\n\n this.bindEvents();\n }\n\n bindEvents() {\n let self = this;\n\n // Validate on blur (i.e. when input loses focus)\n this.validateEls.forEach(el =>\n el.addEventListener(\"blur\", evt => this.validate(evt))\n );\n\n // Selects, radios, and checkboxes require listening to the “change” event instead of “blur”\n // Validate on blur (i.e. when input loses focus)\n this.validateEls.forEach(el =>\n el.addEventListener(\"change\", evt => this.validate(evt))\n );\n\n // Validate groups of selects, radios, or checkboxes\n let groupInputEls = document.querySelectorAll(\n \"[data-validate-group] input\"\n );\n\n groupInputEls.forEach(el =>\n el.addEventListener(\"change\", evt => this.validateGroup(evt))\n );\n\n // Hide error messages while typing\n let validateTextInputs = this.validateEls.filter(\n el =>\n el.tagName.toLowerCase() === \"input\" ||\n el.tagName.toLowerCase() === \"textarea\"\n );\n\n validateTextInputs.forEach(el =>\n el.addEventListener(\"input\", evt => this.hideErrorMsg(evt.target))\n );\n\n // Don’t allow non-numerical characters in number inputs\n let validateNumberInputs = this.validateEls.filter(\n el => el.getAttribute(\"data-validate\") === \"number\"\n );\n\n validateNumberInputs.forEach(el =>\n el.addEventListener(\"keypress\", evt => this.numberEvent(evt))\n );\n\n // Validate form on submit\n this.el.addEventListener(\"submit\", evt => this.submitHandler(evt));\n\n // Using the back button in Firefox and Safari displays a cached page with the submit button still disabled, so we have to manually reenable it.\n // https://bugzilla.mozilla.org/show_bug.cgi?id=443289\n // http://stackoverflow.com/a/13123626/\n window.addEventListener(\"pageshow\", function(evt) {\n if (evt.persisted) {\n self.resetSubmitButton();\n }\n });\n }\n\n isEmail(str) {\n return this.emailRegex.test(str);\n }\n\n isNumeric(str) {\n return this.numericRegex.test(str);\n }\n\n isPhone(str) {\n return this.phoneRegex.test(str);\n }\n\n isZip(str) {\n return this.zipRegex.test(str);\n }\n\n isEmpty(el) {\n // For checkboxes and radio buttons, use the “chacked” attribute\n if (\n el.getAttribute(\"type\") === \"checkbox\" ||\n el.getAttribute(\"type\") === \"radio\"\n ) {\n return !el.checked;\n } else {\n // For all other elements, use the value\n return !el.value;\n }\n }\n\n // We can’t apply the “required” attribute or “aria-required=\"true\"” on checkbox inputs, or groups of them, so we have to use the custom “data-validate-required” attribute\n // https://github.com/GoogleChrome/accessibility-developer-tools/issues/283\n isRequired(el) {\n return (\n el.getAttribute(\"aria-required\") === \"true\" ||\n el.required ||\n el.hasAttribute(\"data-validate-required\")\n );\n }\n\n // Add commas to dollar amounts\n // Source: http://stackoverflow.com/a/2901298\n formatDollars(val) {\n return val.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n }\n\n // Strip out any non-digits except for decimal points\n getDecimal( val ) {\n return val.replace(/[^0-9.]/g, '');\n }\n\n numberEvent(evt) {\n // Get typed character\n let key = String.fromCharCode(evt.which);\n const allowedChars = /[,.0-9%]/;\n\n // Don't allow non-number characters to be entered\n if (!allowedChars.test(key)) {\n evt.preventDefault();\n }\n }\n\n // Get label element whose “for” attribute matches current element’s “id” attribute\n getErrorMsgParent(el) {\n // If element has an ID, look for an associated label\n if (el.hasAttribute(\"id\")) {\n return this.el.querySelector(`[for=\"${el.getAttribute(\"id\")}\"]`);\n } else {\n // Groups don’t have IDs and associated labels, so get error message parent\n let errorMsg = el.querySelector(\"[data-validate='error']\");\n return errorMsg.length ? errorMsg.parentNode : false;\n }\n }\n\n // Get error message element associated with form element\n getErrorMsg(el) {\n return this.getErrorMsgParent(el).querySelector(\"[data-validate='error']\");\n }\n\n // Show an element’s error message and update its “aria-invalid” state\n showErrorMsg(el) {\n let errorMsg = this.getErrorMsg(el);\n errorMsg.classList.remove(\"is-hidden\");\n el.classList.add(\"is-invalid\");\n el.setAttribute(\"aria-invalid\", true);\n }\n\n // Hide an element’s error message and update its “aria-invalid” state\n hideErrorMsg(el) {\n let errorMsg = this.getErrorMsg(el);\n errorMsg.classList.add(\"is-hidden\");\n el.classList.remove(\"is-invalid\");\n el.setAttribute(\"aria-invalid\", false);\n }\n\n // Show group error\n showGroupErrorMsg(el) {\n el.setAttribute(\"aria-invalid\", true);\n\n let errorMsg = el.querySelector(\"[data-validate='error']\");\n\n if (errorMsg) {\n errorMsg.classList.remove(\"is-hidden\");\n }\n }\n\n // Clear group error\n hideGroupErrorMsg(el) {\n el.setAttribute(\"aria-invalid\", false);\n\n let errorMsg = el.querySelector(\"[data-validate='error']\");\n if (errorMsg) {\n errorMsg.classList.add(\"is-hidden\");\n }\n }\n\n // Toggle error message\n toggleErrorMsg(isValid, el) {\n if (isValid) {\n this.hideErrorMsg(el);\n } else {\n this.showErrorMsg(el);\n }\n }\n\n getInvalidFields() {\n // Find all validated elements\n let invalidEls = [...this.validateEls, ...this.groups];\n // Filter only invalid ones\n invalidEls = [...invalidEls].filter(\n el => el.getAttribute(\"aria-invalid\") === \"true\"\n );\n\n return invalidEls;\n }\n\n // Test if element is valid and toggle error msg\n validateEl(el) {\n var type = el.getAttribute(\"data-validate\");\n var val = el.value;\n\n switch (type) {\n // Emails\n case \"email\":\n this.toggleErrorMsg(this.isEmail(val), el);\n break;\n\n // Numbers (allows single decimal and/or % sign)\n case \"number\":\n val = val.replace(/,/g, \"\"); // strip commas\n el.value = val;\n this.toggleErrorMsg(this.isNumeric(val), el);\n break;\n\n // Phone number (allows everything except line breaks)\n case \"phone\":\n this.toggleErrorMsg(this.isPhone(val), el);\n break;\n\n // ZIP code (from 2–12 letters, numbers, dashes, or spaces)\n case \"zip\":\n this.toggleErrorMsg(this.isZip(val), el);\n break;\n\n // Not empty\n case \"notempty\":\n this.toggleErrorMsg(!this.isEmpty(el), el);\n break;\n }\n }\n\n // Event handler to validate elements on blur or change\n validate(evt) {\n var targetEl = evt.target;\n\n // Exclude blank optional fields\n if (this.isRequired(targetEl) || !this.isEmpty(targetEl)) {\n this.validateEl(targetEl);\n }\n\n // Reset current group (the elements that trigger this function aren’t part of a group)\n this.currentGroup = false;\n }\n\n // Validate all single elements\n validateAll() {\n var self = this;\n\n this.validateEls.forEach(function(el) {\n // Exclude optional fields that are blank\n if (self.isRequired(el) || !self.isEmpty(el)) {\n self.validateEl(el);\n }\n });\n }\n\n // Validate group when focus leaves (can’t detect blur on fieldsets)\n validateGroupEl(el) {\n let condition = el.getAttribute(\"data-validate-group\");\n const isExact = !isNaN(condition); // true if string can be converted to a number\n const checkedEls = el.querySelectorAll(\"input:checked\");\n\n // Matches exact number of checked elements\n if (isExact && parseInt(condition, 10) === checkedEls.length) {\n this.hideGroupErrorMsg(el);\n return false;\n }\n\n // Has at least one checked element\n if (condition === \"notempty\" && checkedEls.length > 0) {\n this.hideGroupErrorMsg(el);\n return false;\n }\n\n // Min/max conditions\n const isMinMax =\n condition.indexOf(\"min-\") === 0 || condition.indexOf(\"max-\") === 0;\n\n if (isMinMax) {\n let conditionArr = condition.split(\"-\");\n var type = conditionArr[0];\n var value = parseInt(conditionArr[1], 10);\n\n if (type === \"min\" && checkedEls.length >= value) {\n this.hideGroupErrorMsg(el);\n return false;\n } else if (type === \"max\" && checkedEls.length <= value) {\n this.hideGroupErrorMsg(el);\n return false;\n }\n }\n\n // Show error\n this.showGroupErrorMsg(el);\n }\n\n // Event handler to validate group on change\n validateGroup(evt) {\n var targetEl = evt.target;\n var currentGroup = targetEl.closest(\"[data-validate-group]\");\n\n // Clear error on current group\n this.hideGroupErrorMsg(currentGroup);\n\n // If no previous group, set it to current group\n if (!this.prevGroup) {\n this.prevGroup = currentGroup;\n } else if (!!this.prevGroup && !currentGroup.isEqualNode(this.prevGroup)) {\n // If group has changed, validate the previous group\n this.validateGroupEl(this.prevGroup);\n\n // Update previous group\n this.prevGroup = currentGroup;\n }\n }\n\n // Validate all groups\n validateAllGroups() {\n var self = this;\n\n this.groups.forEach(function(el) {\n // Validate required groups and those with selected items\n // (non-required groups without any selected items will be ignored)\n if (self.isRequired(el) || el.checked) {\n self.validateGroupEl(el);\n }\n });\n }\n\n // Submit form data via XMLHttpRequest()\n // https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms/Sending_forms_through_JavaScript\n sendData() {\n let self = this;\n\n const XHR = new XMLHttpRequest();\n // Use FormData interface (IE 10+)\n // https://developer.mozilla.org/en-US/docs/Web/API/FormData\n const FD = new FormData(this.el);\n\n // console.log([...FD]);\n\n // Define what happens on successful data submission\n XHR.addEventListener(\"load\", function() {\n const successShow = self.el.getAttribute(\"data-success-show\");\n const successHide = self.el.getAttribute(\"data-success-hide\");\n\n // Hide elements on success\n if (successHide) {\n document\n .querySelectorAll(successHide)\n .forEach(el => (el.style.display = \"none\"));\n }\n\n // Show elements on success\n if (successShow) {\n document\n .querySelectorAll(successShow)\n .forEach(el => (el.style.display = \"block\"));\n }\n\n // TODO: Make form reset optional\n\n // Reset form fields\n let inputEls = self.el.querySelectorAll(\"input\");\n let textareas = self.el.querySelectorAll(\"textarea\");\n\n let allInputs = [...inputEls, ...textareas].filter(\n el =>\n el.getAttribute(\"type\") !== \"hidden\" ||\n el.getAttribute(\"type\") !== \"submit\"\n );\n\n // Reset form fields\n allInputs.forEach(function(el) {\n el.value = \"\";\n el.checked = false;\n });\n\n self.resetSubmitButton();\n });\n\n // Define what happens in case of error\n XHR.addEventListener(\"error\", function() {\n const errorShow = self.el.getAttribute(\"data-error-show\");\n\n // Show elements on success\n if (errorShow) {\n document\n .querySelectorAll(errorShow)\n .forEach(el => (el.style.display = \"block\"));\n }\n\n self.resetSubmitButton();\n\n console.error(\n \"Unable to post form data to \" + self.el.getAttribute(\"action\")\n );\n });\n\n // Set up our request\n XHR.open(\"POST\", this.el.getAttribute(\"action\"));\n\n // Send our FormData object; HTTP headers are set automatically\n XHR.send(FD);\n }\n\n resetSubmitButton() {\n this.submitBtn.disabled = false;\n this.submitBtn.setAttribute(\"aria-busy\", \"false\");\n }\n\n // Don't allow submit if validation errors are present\n submitHandler(evt) {\n // Validate all single elements\n this.validateAll();\n\n // Validate all groups\n this.validateAllGroups();\n\n // Check for invalid fields\n let invalidEls = this.getInvalidFields();\n\n // If form is invalid, scroll to first error message\n if (invalidEls.length) {\n // Prevent form submission\n evt.preventDefault();\n\n // Focus input\n invalidEls[0].focus();\n\n if (this.shouldScroll) {\n // Find associated label and scroll into view\n let label = document.querySelector(`[for=\"${invalidEls[0].id}\"]`);\n\n if (label) {\n label.scrollIntoView();\n } else {\n // If can’t find label, scroll to input\n invalidEls[0].scrollIntoView();\n }\n }\n } else {\n // Disable submit button to prevent multiple submissions\n this.submitBtn.disabled = true;\n this.submitBtn.setAttribute(\"aria-busy\", \"true\");\n\n // Check if form should submit via AJAX\n if (this.isAjaxSubmit) {\n evt.preventDefault();\n this.sendData();\n }\n\n // Optional: Trigger “form-valid” event for other modules\n // Backbone.trigger('form-valid', $(evt.target));\n }\n }\n}\n","//------------------------------------------------------------------------\n// Basic form validation\n//\n// Usage Info:\n// • Add “js-validate” to
or other wrapper\n// • Add appropriate data-validate value to each input\n// - data-validate=\"email\"\n// - data-validate=\"phone\"\n// - data-validate=\"number\"\n// - data-validate=\"zip\"\n// - data-validate=\"notempty\"\n// • Add error message markup inside of