{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./scripts/utils/base.js","webpack:///./scripts/lib/Events.js","webpack:///./scripts/utils/thirdParties.js","webpack:///../node_modules/micromodal/dist/micromodal.es.js","webpack:///./scripts/lib/loadScript.js","webpack:///./scripts/common/globals.js","webpack:///../node_modules/process/browser.js","webpack:///./scripts/utils/cms.js","webpack:///./scripts/init/init.js","webpack:///./scripts/common/analytics.js","webpack:///./scripts/init/initThirdParties.js","webpack:///throttle.js","webpack:///debounce.js","webpack:///./scripts/init/init.styles.js","webpack:///../node_modules/regenerator-runtime/runtime.js","webpack:///./layouts/blog/blog-layout.styles.js","webpack:///./templates/header-blog/components/HeaderMenuItem.js","webpack:///./templates/header-blog/components/HeaderMenu.js","webpack:///./templates/header-blog/components/MobileMenu.js","webpack:///./layouts/blog/blog-layout.js","webpack:///./templates/header-blog/header.js","webpack:///./scripts/common/constants.js","webpack:///./scripts/lib/ImgLazyLoad.js","webpack:///./scripts/lib/microTmpl.js","webpack:///./scripts/common/breakpoints.js","webpack:///./components/Pagination/algorithms/paginate.js","webpack:///./components/Pagination/Pagination.js","webpack:///./components/Pagination/pagination.html","webpack:///./pages-blog/author/author.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","getCoords","elem","left","top","width","height","getBoundingClientRect","pageYOffset","pageXOffset","bottom","right","map","escaper","source","testRegexp","replaceRegexp","match","keys","join","RegExp","setClassIf","el","className","val","classList","add","remove","isLocalStorageEnabled","testKey","Date","localStorage","setItem","removeItem","swapImgSources","img","src","srcset","dataset","addEventListener","parentElement","HTMLPictureElement","querySelectorAll","forEach","showModal","id","config","Micromodal","show","globals","commonMicromodalConfig","events","Events","window","newValue","type","data","JSON","parse","emit","chunk","size","res","Array","Math","ceil","length","j","slice","transitionTurn","off","on","requestAnimationFrame","copyToClipboard","str","$","document","createElement","style","cssText","readOnly","body","appendChild","select","execCommand","removeChild","constructor","this","_handlers","_regexpHandlers","addListener","handler","isArray","push","addListenerOnce","_handler","removeListener","filter","item","args","reg","test","sendGA","operation","ga","logJSError","errorObj","process","env","SENTRY","Sentry","message","captureException","_defineProperties","target","props","descriptor","configurable","writable","_toConsumableArray","arr","_arrayLikeToArray","_arrayWithoutHoles","iter","iterator","from","_iterableToArray","minLen","toString","_unsupportedIterableToArray","TypeError","_nonIterableSpread","len","arr2","FOCUSABLE_ELEMENTS","Modal","activeModal","validateModalPresence","validateArgs","MicroModal","_ref","targetModal","_ref$triggers","triggers","_ref$onShow","onShow","_ref$onClose","onClose","_ref$openTrigger","openTrigger","_ref$closeTrigger","closeTrigger","_ref$openClass","openClass","_ref$disableScroll","disableScroll","_ref$disableFocus","disableFocus","_ref$awaitCloseAnimat","awaitCloseAnimation","_ref$awaitOpenAnimati","awaitOpenAnimation","_ref$debugMode","debugMode","instance","Constructor","_classCallCheck","modal","getElementById","registerTriggers","apply","onClick","onKeydown","protoProps","staticProps","_this","_len","arguments","_key","Boolean","trigger","event","_this2","undefined","activeElement","setAttribute","scrollBehaviour","addEventListeners","removeEventListener","setFocusToFirstNode","removeEventListeners","focus","closeModal","toggle","querySelector","assign","overflow","hasAttribute","keyCode","retainFocus","nodes","_this3","focusableNodes","getFocusableNodes","nodesWhichAreNotCloseTargets","node","offsetParent","contains","focusedItemIndex","indexOf","shiftKey","preventDefault","console","warn","concat","triggerMap","validateTriggerPresence","init","options","triggerAttr","attributes","generateTriggerMap","close","closeModalById","inProgress","Map","done","Set","loadScript","has","Promise","resolve","loadPromise","reject","script","onload","delete","onerror","set","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","Error","defaultClearTimeout","runTimeout","fun","setTimeout","e","clearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","timeout","run","marker","runClearTimeout","Item","array","noop","nextTick","title","browser","argv","version","versions","once","removeAllListeners","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask","getTemplateData","dataSelect","inlineJsonElement","textContent","err","error","formatDate","date","constants","monthsShort","getMonth","getDate","y","getFullYear","getThumbnail","thumbnails","find","makeSrcset","k","url","getDirectusHeaders","headers","DIRECTUS_PROTO","DIRECTUS_HOST","initPage","initAnalytics","initThirdParties","closest","micromodal","initMicromodal","a","w","getTime","f","getElementsByTagName","async","parentNode","insertBefore","q","FS_ORG","_fs_debug","_fs_host","_fs_org","_fs_namespace","g","log","b","_api","identify","v","uid","setUserVars","identifyAccount","acctId","clearUserCookie","cookie","domain","toUTCString","FB_PIXEL","fbq","callMethod","_fbq","loaded","FS","tracker","cancelled","lastExec","arguments_","self","elapsed","callback","timeoutID","debounceMode","exec","clearExistingTimeout","noTrailing","clear","delay","wrapper","throttle","atBegin","runtime","Op","hasOwn","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","define","obj","wrap","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","context","Context","_invoke","state","method","arg","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","makeInvokeMethod","fn","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","previousPromise","callInvokeWithMethodAndArg","invoke","result","__await","then","unwrapped","info","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","displayName","isGeneratorFunction","genFun","ctor","mark","setPrototypeOf","__proto__","awrap","reverse","pop","skipTempReset","prev","charAt","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","Function","HeaderMenuItem","root","$root","_init","_getElements","setVisibility","visible","hide","_hiddenClass","$link","tabIndex","_visible","removeAttribute","isVisible","updateMetrics","HeaderMenu","container","$container","_initItems","update","_initEvents","_ready","_updateMetrics","_recalculate","_containerWidth","cw","_totalItemsWith","items","moreItem","showMore","maxWidth","reduce","total","resizing","_startResizing","debounce","_stopResizing","_animationFrame","tik","_tik","cancelAnimationFrame","$items","$item","$more","MobileMenu","headerMenu","modalId","_render","list","cloneNode","_prepareMenuList","$itemsContainer","initBlogLayout","$header","$headerMenu","$nav","mobileMenu","months","DEF_OPTIONS","lazyClass","preferNative","offset","innerHeight","scrollableContainer","useOffsetAfterInteractive","hasNativeSupport","HTMLImageElement","ImgLazyLoad","images","_runHandler","_run","_active","_frameId","_options","_images","_setupOffsetAfterInteractive","_initNativeLazy","_addEvents","_runForImg","_removeEvents","bounding","_swapImgSources","_forgetImg","lazyImg","realOffset","runHandler","useNative","cache","microTemplate","template","parsed","replace","split","paginate","cur","pages","delta","min","center","max","buttons","manualRouting","linkGenerator","page","URL","location","searchParams","Pagination","_paginate","_root","_pages","_cur","_pageNumberButtons","_disabled","_mobileMedia","matchMedia","breakpoints","render","_updateConfig","innerHTML","pageBtn","_setPage","newPage","parseInt","oldPage","_delta","matches","$page","$pagination","maxPage","pagination","humTracker","trackScroll","trackClick"],"mappings":"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","file":"scripts/author-blog.js?a9dc4c976fb046c5cfd2","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 = \"/static/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 114);\n","import Micromodal from 'micromodal';\nimport globals from '../common/globals';\nimport regexp from '../common/regexp';\nimport Events from '../lib/Events';\n\nexport function sleep(time) {\n return new Promise(resolve => setTimeout(resolve, time));\n}\n\n/** @param {HTMLElement} elem */\nexport function getCoords(elem) {\n const { left, top, width, height } = elem.getBoundingClientRect();\n\n return {\n top: top + pageYOffset,\n left: left + pageXOffset,\n bottom: top + pageYOffset + height,\n right: left + pageXOffset + width,\n width, height,\n };\n}\n\nexport function isTouch() {\n return ('ontouchstart' in window) || navigator.maxTouchPoints;\n}\n\n// Copy of underscore escape\nexport const escape = (function () {\n const map = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`',\n };\n let escaper = function (match) {\n return map[match];\n };\n let source = '(?:' + Object.keys(map).join('|') + ')';\n let testRegexp = RegExp(source);\n let replaceRegexp = RegExp(source, 'g');\n\n return function (string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n}());\n\n/** @returns {{[key: string]: string}} */\nexport function getGetParams(prepare = decodeURIComponent) {\n const search = location.search.slice(1);\n const getParams = {};\n\n if (!search) {\n return getParams;\n }\n\n search.split('&').forEach((item) => {\n const [key, val] = item.split('=', 2);\n getParams[key] = prepare(val);\n });\n\n return getParams;\n}\n\n/**\n * @param {String} html representing of a single element\n * @returns {HTMLElement}\n */\nexport function htmlToElem(html) {\n const template = document.createElement('template');\n template.innerHTML = html;\n\n return template.content.firstChild;\n}\n\n/** @param {'auto'|'manual'} value */\nexport function setScrollBehavior(value) {\n if (!('scrollRestoration' in history)) return;\n history.scrollRestoration = value;\n}\n\nexport function isEmail(email) {\n return regexp.email.test(email);\n}\n\n/**\n * Clone the object using JSON method\n * \n * p.s. this method can be used for JSON-like object only (e.g. API responses), \n * but also this method is faster then loop based methods\n * (JSON much simpler the JS, so it can be parsed fast)\n * \n * @template T\n * @param {T} object\n * @return {T}\n */\nexport function jsonClone(object) {\n return JSON.parse(JSON.stringify(object));\n}\n\n/**\n * Redirects to the url with a slight delay\n * \n * Use cases:\n * \n * - use it when you need to reload the page when closing a modal. \n * \n * The reason is that you can usually close the modal by the ESC button too, \n * but pressing the ESC also can stop the redirect. So, you can write:\n * \n * Micromodal.show('modal-id', { onClose: asyncRedirect('/some/path') });\n * \n * @param {string} url \n */\nexport function asyncRedirect(url) {\n requestAnimationFrame(() => location.href = url);\n}\n\nexport function asyncReload() {\n requestAnimationFrame(() => location.reload());\n}\n\n/**\n * @param {HTMLElement} el \n * @param {string} className \n * @param {boolean} val \n * \n * @example\n * \n * \n * ```js\n * // instead of:\n * if (a === b) {\n * $someEl.classList.add('visible');\n * } else {\n * $someEl.classList.remove('visible');\n * }\n * //You can write:\n * setClassIf($someEl, 'visible', a === b)\n * ```\n */\nexport function setClassIf(el, className, val) {\n if (val) el.classList.add(className);\n else el.classList.remove(className);\n}\n\nexport function decrypt(str, key) {\n return str.split('x')\n .filter(Boolean)\n .map(s => String.fromCharCode(parseInt(s, 16) ^ key))\n .join('');\n}\n\nexport function isLocalStorageEnabled() {\n const testKey = new Date();\n\n try {\n localStorage.setItem(testKey, testKey);\n localStorage.removeItem(testKey);\n\n return true;\n } catch {\n return false;\n }\n}\n\nexport function swapImgSources(img) {\n if (img.src || img.srcset) return;\n\n if (img.dataset.src) img.src = img.dataset.src;\n if (img.dataset.srcset) img.srcset = img.dataset.srcset;\n\n img.addEventListener('load', function () {\n img.classList.add('loaded');\n });\n\n if (!(img.parentElement instanceof HTMLPictureElement)) {\n return;\n }\n\n const sources = img.parentElement.querySelectorAll('source') || [];\n\n sources.forEach((source) => {\n if (source.dataset.srcset) source.srcset = source.dataset.srcset;\n });\n}\n\n/** \n * @param {string} id\n * @param {import('micromodal').MicroModalConfig} config \n */\nexport function showModal(id, config) {\n Micromodal.show(id, {\n ...globals.commonMicromodalConfig,\n ...config,\n });\n}\n\nexport function hideModal(id) {\n Micromodal.close(id);\n}\n\nexport const addStorageListener = (function () {\n const events = new Events();\n\n window.addEventListener('storage', ({ key, newValue }) => {\n if (key !== 'storage-message' || !newValue) return;\n const { type, data } = JSON.parse(newValue);\n events.emit(type, data);\n });\n\n /** \n * @param {string} type \n * @param {function} handler\n */\n function addStorageListener(type, handler) {\n events.addListener(type, handler);\n }\n\n return addStorageListener;\n}());\n\n/** @param {string} eventType */\nexport function emitStorageEvent(type, data) {\n if (!isLocalStorageEnabled()) return;\n\n const msg = JSON.stringify({ type, data });\n localStorage.setItem('storage-message', msg);\n localStorage.removeItem('storage-message');\n}\n\n/**\n * @param {T[]} src \n * @param {number} size\n * @returns {T[][]}\n * @template T\n */\nexport function chunk(src, size) {\n const res = new Array(Math.ceil(src.length / size));\n\n for (let i = 0, j = 0; i < src.length; i += size, j++) {\n res[j] = src.slice(i, i + size);\n }\n\n return res;\n}\n\nexport const transitionTurn = {\n off(el) {\n el.classList.add('no-transition');\n },\n on(el) {\n requestAnimationFrame(() => {\n el.classList.remove('no-transition');\n });\n },\n};\n\nexport function forceReloadOnBack() {\n window.addEventListener('pageshow', ({ persisted }) => {\n const isBack = performance && performance.navigation.type === 2;\n if (persisted || isBack) location.reload();\n });\n}\n\nexport function doOnBack(handler) {\n window.addEventListener('pageshow', ({ persisted }) => {\n const isBack = performance && performance.navigation.type === 2;\n if (persisted || isBack) handler();\n });\n}\n\nexport function copyToClipboard(str) {\n const $ = document.createElement('textarea');\n $.style.cssText = 'position: absolute; left: -9999px';\n $.value = str;\n $.readOnly = true;\n document.body.appendChild($);\n $.select();\n document.execCommand('copy');\n document.body.removeChild($);\n}","/** @template AvailableEventType */\nexport default class Events {\n /** @typedef {AvailableEventType|RegExp} EventType */\n constructor() {\n /** @private */\n this._handlers = {};\n\n /** @type {{type: RegExp, handler: function}[]} */\n this._regexpHandlers = [];\n }\n\n /**\n * @param {EventType|EventType[]} type \n * @param {function} handler \n */\n addListener(type, handler = () => { }) {\n if (Array.isArray(type)) {\n type.forEach(t => this.addListener(t, handler));\n return;\n }\n\n if (typeof type === 'string') {\n this._handlers[type] = this._handlers[type] || [];\n this._handlers[type].push(handler);\n } else {\n this._regexpHandlers.push({ type, handler });\n }\n\n return handler;\n }\n\n /**\n * @param {EventType|EventType[]} type\n * @param {function} handler \n */\n addListenerOnce(type, handler = () => { }) {\n const _handler = (...args) => {\n this.removeListener(type, _handler);\n handler(...args);\n };\n\n this.addListener(type, _handler);\n }\n\n /**\n * @param {string|string[]} type \n * @param {function} handler \n */\n removeListener(type, handler) {\n if (Array.isArray(type)) {\n type.forEach(t => this.removeListener(t, handler));\n return;\n }\n\n if (!this._handlers[type]) return;\n\n this._handlers[type] = this._handlers[type]\n .filter(item => item != handler);\n }\n\n /**\n * @param {AvailableEventType} type\n * @param {...any} args \n */\n emit(type, ...args) {\n if (type in this._handlers) {\n this._handlers[type].forEach(handler => handler(...args));\n }\n\n this._regexpHandlers\n .filter(({ type: reg }) => reg.test(type))\n .forEach(({ handler }) => handler(type, ...args));\n }\n}","import globals from '../common/globals';\nimport loadScript from '../lib/loadScript';\n\nexport async function loadGoogleMaps() {\n const key = process.env.GOOGLE_WEB_API;\n const src = `https://maps.googleapis.com/maps/api/js?key=${key}&libraries=places&language=en`;\n\n await loadScript(src);\n}\n\nexport async function initStripeV3() {\n if (globals.stripe) return;\n\n await loadScript('https://js.stripe.com/v3/');\n globals.stripe = window.Stripe(process.env.STRIPE);\n}\n\nexport async function initStripeV2() {\n if (window.Stripe) return;\n\n await loadScript('https://js.stripe.com/v2/');\n window.Stripe.setPublishableKey(process.env.STRIPE);\n}\n\nexport function logMessage(message) {\n if (process.env.SENTRY && window.Sentry) {\n window.Sentry.captureMessage(message);\n }\n}\n\nexport function prepareGAEventInfo(eventCategory, eventAction, eventLabel) {\n return { eventCategory, eventAction, eventLabel };\n}\n\nexport function sendGA(operation, name, value) {\n if (!window.ga) return;\n\n window.ga(operation, name, value);\n}\n\nexport function logJSError(errorObj) {\n if (process.env.SENTRY && window.Sentry) {\n if (errorObj && {}.hasOwnProperty.call(errorObj, 'message')) {\n errorObj.message = 'Processed error: ' + errorObj.message;\n }\n window.Sentry.captureException(errorObj);\n }\n}","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar MicroModal = function () {\n\n var FOCUSABLE_ELEMENTS = ['a[href]', 'area[href]', 'input:not([disabled]):not([type=\"hidden\"]):not([aria-hidden])', 'select:not([disabled]):not([aria-hidden])', 'textarea:not([disabled]):not([aria-hidden])', 'button:not([disabled]):not([aria-hidden])', 'iframe', 'object', 'embed', '[contenteditable]', '[tabindex]:not([tabindex^=\"-\"])'];\n\n var Modal = /*#__PURE__*/function () {\n function Modal(_ref) {\n var targetModal = _ref.targetModal,\n _ref$triggers = _ref.triggers,\n triggers = _ref$triggers === void 0 ? [] : _ref$triggers,\n _ref$onShow = _ref.onShow,\n onShow = _ref$onShow === void 0 ? function () {} : _ref$onShow,\n _ref$onClose = _ref.onClose,\n onClose = _ref$onClose === void 0 ? function () {} : _ref$onClose,\n _ref$openTrigger = _ref.openTrigger,\n openTrigger = _ref$openTrigger === void 0 ? 'data-micromodal-trigger' : _ref$openTrigger,\n _ref$closeTrigger = _ref.closeTrigger,\n closeTrigger = _ref$closeTrigger === void 0 ? 'data-micromodal-close' : _ref$closeTrigger,\n _ref$openClass = _ref.openClass,\n openClass = _ref$openClass === void 0 ? 'is-open' : _ref$openClass,\n _ref$disableScroll = _ref.disableScroll,\n disableScroll = _ref$disableScroll === void 0 ? false : _ref$disableScroll,\n _ref$disableFocus = _ref.disableFocus,\n disableFocus = _ref$disableFocus === void 0 ? false : _ref$disableFocus,\n _ref$awaitCloseAnimat = _ref.awaitCloseAnimation,\n awaitCloseAnimation = _ref$awaitCloseAnimat === void 0 ? false : _ref$awaitCloseAnimat,\n _ref$awaitOpenAnimati = _ref.awaitOpenAnimation,\n awaitOpenAnimation = _ref$awaitOpenAnimati === void 0 ? false : _ref$awaitOpenAnimati,\n _ref$debugMode = _ref.debugMode,\n debugMode = _ref$debugMode === void 0 ? false : _ref$debugMode;\n\n _classCallCheck(this, Modal);\n\n // Save a reference of the modal\n this.modal = document.getElementById(targetModal); // Save a reference to the passed config\n\n this.config = {\n debugMode: debugMode,\n disableScroll: disableScroll,\n openTrigger: openTrigger,\n closeTrigger: closeTrigger,\n openClass: openClass,\n onShow: onShow,\n onClose: onClose,\n awaitCloseAnimation: awaitCloseAnimation,\n awaitOpenAnimation: awaitOpenAnimation,\n disableFocus: disableFocus\n }; // Register click events only if pre binding eventListeners\n\n if (triggers.length > 0) this.registerTriggers.apply(this, _toConsumableArray(triggers)); // pre bind functions for event listeners\n\n this.onClick = this.onClick.bind(this);\n this.onKeydown = this.onKeydown.bind(this);\n }\n /**\n * Loops through all openTriggers and binds click event\n * @param {array} triggers [Array of node elements]\n * @return {void}\n */\n\n\n _createClass(Modal, [{\n key: \"registerTriggers\",\n value: function registerTriggers() {\n var _this = this;\n\n for (var _len = arguments.length, triggers = new Array(_len), _key = 0; _key < _len; _key++) {\n triggers[_key] = arguments[_key];\n }\n\n triggers.filter(Boolean).forEach(function (trigger) {\n trigger.addEventListener('click', function (event) {\n return _this.showModal(event);\n });\n });\n }\n }, {\n key: \"showModal\",\n value: function showModal() {\n var _this2 = this;\n\n var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n this.activeElement = document.activeElement;\n this.modal.setAttribute('aria-hidden', 'false');\n this.modal.classList.add(this.config.openClass);\n this.scrollBehaviour('disable');\n this.addEventListeners();\n\n if (this.config.awaitOpenAnimation) {\n var handler = function handler() {\n _this2.modal.removeEventListener('animationend', handler, false);\n\n _this2.setFocusToFirstNode();\n };\n\n this.modal.addEventListener('animationend', handler, false);\n } else {\n this.setFocusToFirstNode();\n }\n\n this.config.onShow(this.modal, this.activeElement, event);\n }\n }, {\n key: \"closeModal\",\n value: function closeModal() {\n var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var modal = this.modal;\n this.modal.setAttribute('aria-hidden', 'true');\n this.removeEventListeners();\n this.scrollBehaviour('enable');\n\n if (this.activeElement && this.activeElement.focus) {\n this.activeElement.focus();\n }\n\n this.config.onClose(this.modal, this.activeElement, event);\n\n if (this.config.awaitCloseAnimation) {\n var openClass = this.config.openClass; // <- old school ftw\n\n this.modal.addEventListener('animationend', function handler() {\n modal.classList.remove(openClass);\n modal.removeEventListener('animationend', handler, false);\n }, false);\n } else {\n modal.classList.remove(this.config.openClass);\n }\n }\n }, {\n key: \"closeModalById\",\n value: function closeModalById(targetModal) {\n this.modal = document.getElementById(targetModal);\n if (this.modal) this.closeModal();\n }\n }, {\n key: \"scrollBehaviour\",\n value: function scrollBehaviour(toggle) {\n if (!this.config.disableScroll) return;\n var body = document.querySelector('body');\n\n switch (toggle) {\n case 'enable':\n Object.assign(body.style, {\n overflow: ''\n });\n break;\n\n case 'disable':\n Object.assign(body.style, {\n overflow: 'hidden'\n });\n break;\n }\n }\n }, {\n key: \"addEventListeners\",\n value: function addEventListeners() {\n this.modal.addEventListener('touchstart', this.onClick);\n this.modal.addEventListener('click', this.onClick);\n document.addEventListener('keydown', this.onKeydown);\n }\n }, {\n key: \"removeEventListeners\",\n value: function removeEventListeners() {\n this.modal.removeEventListener('touchstart', this.onClick);\n this.modal.removeEventListener('click', this.onClick);\n document.removeEventListener('keydown', this.onKeydown);\n }\n }, {\n key: \"onClick\",\n value: function onClick(event) {\n if (event.target.hasAttribute(this.config.closeTrigger)) {\n this.closeModal(event);\n }\n }\n }, {\n key: \"onKeydown\",\n value: function onKeydown(event) {\n if (event.keyCode === 27) this.closeModal(event); // esc\n\n if (event.keyCode === 9) this.retainFocus(event); // tab\n }\n }, {\n key: \"getFocusableNodes\",\n value: function getFocusableNodes() {\n var nodes = this.modal.querySelectorAll(FOCUSABLE_ELEMENTS);\n return Array.apply(void 0, _toConsumableArray(nodes));\n }\n /**\n * Tries to set focus on a node which is not a close trigger\n * if no other nodes exist then focuses on first close trigger\n */\n\n }, {\n key: \"setFocusToFirstNode\",\n value: function setFocusToFirstNode() {\n var _this3 = this;\n\n if (this.config.disableFocus) return;\n var focusableNodes = this.getFocusableNodes(); // no focusable nodes\n\n if (focusableNodes.length === 0) return; // remove nodes on whose click, the modal closes\n // could not think of a better name :(\n\n var nodesWhichAreNotCloseTargets = focusableNodes.filter(function (node) {\n return !node.hasAttribute(_this3.config.closeTrigger);\n });\n if (nodesWhichAreNotCloseTargets.length > 0) nodesWhichAreNotCloseTargets[0].focus();\n if (nodesWhichAreNotCloseTargets.length === 0) focusableNodes[0].focus();\n }\n }, {\n key: \"retainFocus\",\n value: function retainFocus(event) {\n var focusableNodes = this.getFocusableNodes(); // no focusable nodes\n\n if (focusableNodes.length === 0) return;\n /**\n * Filters nodes which are hidden to prevent\n * focus leak outside modal\n */\n\n focusableNodes = focusableNodes.filter(function (node) {\n return node.offsetParent !== null;\n }); // if disableFocus is true\n\n if (!this.modal.contains(document.activeElement)) {\n focusableNodes[0].focus();\n } else {\n var focusedItemIndex = focusableNodes.indexOf(document.activeElement);\n\n if (event.shiftKey && focusedItemIndex === 0) {\n focusableNodes[focusableNodes.length - 1].focus();\n event.preventDefault();\n }\n\n if (!event.shiftKey && focusableNodes.length > 0 && focusedItemIndex === focusableNodes.length - 1) {\n focusableNodes[0].focus();\n event.preventDefault();\n }\n }\n }\n }]);\n\n return Modal;\n }();\n /**\n * Modal prototype ends.\n * Here on code is responsible for detecting and\n * auto binding event handlers on modal triggers\n */\n // Keep a reference to the opened modal\n\n\n var activeModal = null;\n /**\n * Generates an associative array of modals and it's\n * respective triggers\n * @param {array} triggers An array of all triggers\n * @param {string} triggerAttr The data-attribute which triggers the module\n * @return {array}\n */\n\n var generateTriggerMap = function generateTriggerMap(triggers, triggerAttr) {\n var triggerMap = [];\n triggers.forEach(function (trigger) {\n var targetModal = trigger.attributes[triggerAttr].value;\n if (triggerMap[targetModal] === undefined) triggerMap[targetModal] = [];\n triggerMap[targetModal].push(trigger);\n });\n return triggerMap;\n };\n /**\n * Validates whether a modal of the given id exists\n * in the DOM\n * @param {number} id The id of the modal\n * @return {boolean}\n */\n\n\n var validateModalPresence = function validateModalPresence(id) {\n if (!document.getElementById(id)) {\n console.warn(\"MicroModal: \\u2757Seems like you have missed %c'\".concat(id, \"'\"), 'background-color: #f8f9fa;color: #50596c;font-weight: bold;', 'ID somewhere in your code. Refer example below to resolve it.');\n console.warn(\"%cExample:\", 'background-color: #f8f9fa;color: #50596c;font-weight: bold;', \"
\"));\n return false;\n }\n };\n /**\n * Validates if there are modal triggers present\n * in the DOM\n * @param {array} triggers An array of data-triggers\n * @return {boolean}\n */\n\n\n var validateTriggerPresence = function validateTriggerPresence(triggers) {\n if (triggers.length <= 0) {\n console.warn(\"MicroModal: \\u2757Please specify at least one %c'micromodal-trigger'\", 'background-color: #f8f9fa;color: #50596c;font-weight: bold;', 'data attribute.');\n console.warn(\"%cExample:\", 'background-color: #f8f9fa;color: #50596c;font-weight: bold;', \"\");\n return false;\n }\n };\n /**\n * Checks if triggers and their corresponding modals\n * are present in the DOM\n * @param {array} triggers Array of DOM nodes which have data-triggers\n * @param {array} triggerMap Associative array of modals and their triggers\n * @return {boolean}\n */\n\n\n var validateArgs = function validateArgs(triggers, triggerMap) {\n validateTriggerPresence(triggers);\n if (!triggerMap) return true;\n\n for (var id in triggerMap) {\n validateModalPresence(id);\n }\n\n return true;\n };\n /**\n * Binds click handlers to all modal triggers\n * @param {object} config [description]\n * @return void\n */\n\n\n var init = function init(config) {\n // Create an config object with default openTrigger\n var options = Object.assign({}, {\n openTrigger: 'data-micromodal-trigger'\n }, config); // Collects all the nodes with the trigger\n\n var triggers = _toConsumableArray(document.querySelectorAll(\"[\".concat(options.openTrigger, \"]\"))); // Makes a mappings of modals with their trigger nodes\n\n\n var triggerMap = generateTriggerMap(triggers, options.openTrigger); // Checks if modals and triggers exist in dom\n\n if (options.debugMode === true && validateArgs(triggers, triggerMap) === false) return; // For every target modal creates a new instance\n\n for (var key in triggerMap) {\n var value = triggerMap[key];\n options.targetModal = key;\n options.triggers = _toConsumableArray(value);\n activeModal = new Modal(options); // eslint-disable-line no-new\n }\n };\n /**\n * Shows a particular modal\n * @param {string} targetModal [The id of the modal to display]\n * @param {object} config [The configuration object to pass]\n * @return {void}\n */\n\n\n var show = function show(targetModal, config) {\n var options = config || {};\n options.targetModal = targetModal; // Checks if modals and triggers exist in dom\n\n if (options.debugMode === true && validateModalPresence(targetModal) === false) return; // clear events in case previous modal wasn't close\n\n if (activeModal) activeModal.removeEventListeners(); // stores reference to active modal\n\n activeModal = new Modal(options); // eslint-disable-line no-new\n\n activeModal.showModal();\n };\n /**\n * Closes the active modal\n * @param {string} targetModal [The id of the modal to close]\n * @return {void}\n */\n\n\n var close = function close(targetModal) {\n targetModal ? activeModal.closeModalById(targetModal) : activeModal.closeModal();\n };\n\n return {\n init: init,\n show: show,\n close: close\n };\n}();\nwindow.MicroModal = MicroModal;\n\nexport default MicroModal;\n","const inProgress = new Map();\nconst done = new Set();\n\n/**\n * Async load script\n * @param {string} src \n * @returns {Promise}\n */\nexport default function loadScript(src, name = '', type=null, attributes = null) {\n name = name || src;\n\n if (done.has(name)) return Promise.resolve();\n if (inProgress.has(name)) return inProgress.get(name);\n\n const loadPromise = new Promise((resolve, reject) => {\n const script = document.createElement('script');\n\n if (type){\n script.setAttribute('type', type);\n }\n\n if (attributes) {\n for (let i in attributes) {\n if (Object.prototype.hasOwnProperty.call(attributes, i)) {\n script.setAttribute(i, attributes[i]);\n }\n }\n }\n\n script.onload = () => {\n inProgress.delete(name);\n done.add(name);\n resolve();\n };\n\n script.onerror = () => {\n inProgress.delete(name);\n reject(`Couldn't load script: ${name}`);\n };\n\n script.src = src;\n document.body.appendChild(script);\n });\n\n inProgress.set(name, loadPromise);\n return loadPromise;\n}\n\n/**\n * Check if the script is completely loaded\n * @param {string} src\n * @returns {boolean}\n */\nexport function isLoadedScript(name) {\n return done.has(name);\n}\n\n/** \n * Check if the script is loading now \n * @param {string} src\n * @returns {boolean}\n */\nexport function isScriptInProgress(src) {\n return inProgress.has(src);\n}","/** \n * @type {{\n * currentUser: User,\n * commonMicromodalConfig: import('micromodal').MicroModalConfig\n * }}\n */\nconst globals = {\n commonMicromodalConfig: {\n disableScroll: true,\n awaitCloseAnimation: true,\n },\n};\n\nexport default globals;","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","import constants from '../common/constants';\nimport { logJSError } from './thirdParties';\n\nexport function getTemplateData(dataSelect) {\n try {\n const inlineJsonElement = document.querySelector(\n `script[type=\"application/json\"][data-gig-selector=\"${dataSelect}\"]`,\n );\n if (inlineJsonElement) {\n const data = JSON.parse(inlineJsonElement.textContent);\n return data;\n }\n return false;\n } catch (err) {\n logJSError(err);\n console.error(`Couldn't read JSON data from ${dataSelect}`, err);\n }\n return false;\n}\n\n/** \n * Formats date (in local time zone, i.e. no getUTC*)\n * @param {Date} date \n * @returns {string} 'Jan 02, 2006'\n */\nexport function formatDate(date) {\n const m = constants.monthsShort[date.getMonth()];\n const d = date.getDate();\n const y = date.getFullYear();\n return `${m} ${d}, ${y}`;\n}\n\n/**\n * @param {ApiImage} img\n * @param {string} key\n */\nexport function getThumbnail(img, key) {\n return img.data.thumbnails.find(d => d.key === key);\n}\n\n/**\n * @param {ApiImage} img\n * @param {...string} keys\n */\nexport function makeSrcset(img, ...keys) {\n return keys.map(k => getThumbnail(img, k))\n .filter(d => d && d.width <= img.width)\n .map(d => `${d.url} ${d.width}w`).join(', ');\n}\n\nexport function getDirectusHeaders() {\n const headers = {};\n\n if (process.env.DIRECTUS_PROTO) {\n headers['X-Forwarded-Proto'] = process.env.DIRECTUS_PROTO;\n }\n\n if (process.env.DIRECTUS_HOST) {\n headers['X-Forwarded-Host'] = process.env.DIRECTUS_HOST;\n }\n\n return headers;\n}","import 'regenerator-runtime/runtime';\n\nimport micromodal from 'micromodal';\n\nimport initThirdParties from './initThirdParties';\nimport initAnalytics from '../common/analytics';\n\nexport default function initPage() {\n initAnalytics();\n initThirdParties();\n initMicromodal();\n}\n\nfunction initMicromodal() {\n document.body.addEventListener('mousedown', (e) => close(e.target));\n document.body.addEventListener('touchstart', (e) => close(e.target));\n\n /** @param {HTMLElement} target */\n function close(target) {\n if (!target.hasAttribute('data-close-parent-modal')) return;\n const modal = target.closest('.modal');\n if (modal) micromodal.close(modal.id);\n }\n}\n","import { getTemplateData } from '@/scripts/utils/cms';\nimport loadScript from '../lib/loadScript';\n\nexport default function initAnalytics() {\n\n /* Google Tag Manager */\n (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\n new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\n j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=\n 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\n })(window,document,'script','dataLayer',process.env.GTM_ID);\n /* Google Analytics */\n (function (i, s, o, g, r, a, m) {\n i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function () {\n (i[r].q = i[r].q || []).push(arguments);\n }, i[r].l = 1 * new Date(); a = s.createElement(o),\n m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; a.type='javascript/privado-block'; a.setAttribute('privado-cookie-category', 'C002'); m.parentNode.insertBefore(a, m);\n })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');\n\n if (window.ga) {\n window.ga('create', process.env.UA_ID, 'auto');\n }\n\n //FullStory\n if (process.env.FS_ORG) {\n window._fs_debug = false;\n window._fs_host = 'fullstory.com';\n window._fs_org = process.env.FS_ORG;\n window._fs_namespace = 'FS';\n\n (function (m, n, e, t, l, o, g, y) {\n if (e in m && m.console && m.console.log) {\n m.console.log('FullStory namespace conflict. Please set window._fs_namespace.');\n return;\n }\n g = m[e] = function (a, b) {\n g.q ? g.q.push([a, b]) : g._api(a, b);\n };\n g.q = [];\n o = n.createElement(t);\n o.async = 1;\n o.src = 'https://' + window._fs_host + '/s/fs.js';\n y = n.getElementsByTagName(t)[0];\n y.parentNode.insertBefore(o, y);\n g.identify = function (i, v) {\n g(l, { uid: i });\n if (v) g(l, v);\n };\n g.setUserVars = function (v) {\n g(l, v);\n };\n g.identifyAccount = function (i, v) {\n o = 'account';\n v = v || {};\n v.acctId = i;\n g(o, v);\n };\n g.clearUserCookie = function (c, d, i) {\n if (!c || document.cookie.match('fs_uid=[`;`]*`[`;`]*`[`;`]*`')) {\n d = n.domain;\n while (1) {\n n.cookie = 'fs_uid=;domain=' + d +\n ';path=/;expires=' + new Date(0).toUTCString();\n i = d.indexOf('.');\n if (i < 0) break;\n d = d.slice(i + 1);\n }\n }\n };\n })(window, document, window['_fs_namespace'], 'script', 'user');\n }\n\n if (process.env.FB_PIXEL) {\n !function (f, b, e, v, n, t, s) {\n if (f.fbq) return;\n n = f.fbq = function () {\n n.callMethod ?\n n.callMethod.apply(n, arguments) : n.queue.push(arguments);\n };\n if (!f._fbq) f._fbq = n;\n n.push = n;\n n.loaded = !0;\n n.version = '2.0';\n n.queue = [];\n t = b.createElement(e);\n t.async = !0;\n t.src = v;\n s = b.getElementsByTagName(e)[0];\n s.parentNode.insertBefore(t, s);\n }(window, document, 'script',\n 'https://connect.facebook.net/en_US/fbevents.js');\n if (window.fbq) {\n window.fbq('init', process.env.FB_PIXEL);\n window.fbq('track', 'PageView');\n }\n }\n\n}","import { sendGA } from '../utils/thirdParties';\n\nexport default function initThirdParties() {\n initJSErrorLog();\n initFullStory();\n initGA();\n // Gig.sendSeoCampaignInfo();\n}\n\nfunction initJSErrorLog() {\n}\n\nfunction initFullStory() {\n if (process.env.FS_ORG) {\n if (window.FS) {\n window.FS.identify(false);\n } else {\n // Gig.logJSError({\n // msg: 'FullStory not initialized'\n // });\n }\n }\n}\n\nfunction initGA() {\n if (process.env.UA_ID) {\n sendGA('set', 'userId', null);\n setGADimensions();\n sendGA('send', 'pageview', null);\n }\n}\n\nfunction setGADimensions() {\n if (window.ga) {\n window.ga(function (tracker) {\n sendGA('set', 'dimension1', tracker.get('clientId'));\n });\n }\n}\n","/* eslint-disable no-undefined,no-param-reassign,no-shadow */\n\n/**\n * Throttle execution of a function. Especially useful for rate limiting\n * execution of handlers on events like resize and scroll.\n *\n * @param {number} delay - A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param {boolean} [noTrailing] - Optional, defaults to false. If noTrailing is true, callback will only execute every `delay` milliseconds while the\n * throttled-function is being called. If noTrailing is false or unspecified, callback will be executed one final time\n * after the last throttled-function call. (After the throttled-function has not been called for `delay` milliseconds,\n * the internal counter is reset).\n * @param {Function} callback - A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n * to `callback` when the throttled-function is executed.\n * @param {boolean} [debounceMode] - If `debounceMode` is true (at begin), schedule `clear` to execute after `delay` ms. If `debounceMode` is false (at end),\n * schedule `callback` to execute after `delay` ms.\n *\n * @returns {Function} A new, throttled, function.\n */\nexport default function(delay, noTrailing, callback, debounceMode) {\n\t/*\n\t * After wrapper has stopped being called, this timeout ensures that\n\t * `callback` is executed at the proper times in `throttle` and `end`\n\t * debounce modes.\n\t */\n\tlet timeoutID;\n\tlet cancelled = false;\n\n\t// Keep track of the last time `callback` was executed.\n\tlet lastExec = 0;\n\n\t// Function to clear existing timeout\n\tfunction clearExistingTimeout() {\n\t\tif (timeoutID) {\n\t\t\tclearTimeout(timeoutID);\n\t\t}\n\t}\n\n\t// Function to cancel next exec\n\tfunction cancel() {\n\t\tclearExistingTimeout();\n\t\tcancelled = true;\n\t}\n\n\t// `noTrailing` defaults to falsy.\n\tif (typeof noTrailing !== 'boolean') {\n\t\tdebounceMode = callback;\n\t\tcallback = noTrailing;\n\t\tnoTrailing = undefined;\n\t}\n\n\t/*\n\t * The `wrapper` function encapsulates all of the throttling / debouncing\n\t * functionality and when executed will limit the rate at which `callback`\n\t * is executed.\n\t */\n\tfunction wrapper(...arguments_) {\n\t\tlet self = this;\n\t\tlet elapsed = Date.now() - lastExec;\n\n\t\tif (cancelled) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Execute `callback` and update the `lastExec` timestamp.\n\t\tfunction exec() {\n\t\t\tlastExec = Date.now();\n\t\t\tcallback.apply(self, arguments_);\n\t\t}\n\n\t\t/*\n\t\t * If `debounceMode` is true (at begin) this is used to clear the flag\n\t\t * to allow future `callback` executions.\n\t\t */\n\t\tfunction clear() {\n\t\t\ttimeoutID = undefined;\n\t\t}\n\n\t\tif (debounceMode && !timeoutID) {\n\t\t\t/*\n\t\t\t * Since `wrapper` is being called for the first time and\n\t\t\t * `debounceMode` is true (at begin), execute `callback`.\n\t\t\t */\n\t\t\texec();\n\t\t}\n\n\t\tclearExistingTimeout();\n\n\t\tif (debounceMode === undefined && elapsed > delay) {\n\t\t\t/*\n\t\t\t * In throttle mode, if `delay` time has been exceeded, execute\n\t\t\t * `callback`.\n\t\t\t */\n\t\t\texec();\n\t\t} else if (noTrailing !== true) {\n\t\t\t/*\n\t\t\t * In trailing throttle mode, since `delay` time has not been\n\t\t\t * exceeded, schedule `callback` to execute `delay` ms after most\n\t\t\t * recent execution.\n\t\t\t *\n\t\t\t * If `debounceMode` is true (at begin), schedule `clear` to execute\n\t\t\t * after `delay` ms.\n\t\t\t *\n\t\t\t * If `debounceMode` is false (at end), schedule `callback` to\n\t\t\t * execute after `delay` ms.\n\t\t\t */\n\t\t\ttimeoutID = setTimeout(\n\t\t\t\tdebounceMode ? clear : exec,\n\t\t\t\tdebounceMode === undefined ? delay - elapsed : delay\n\t\t\t);\n\t\t}\n\t}\n\n\twrapper.cancel = cancel;\n\n\t// Return the wrapper function.\n\treturn wrapper;\n}\n","/* eslint-disable no-undefined */\n\nimport throttle from './throttle';\n\n/**\n * Debounce execution of a function. Debouncing, unlike throttling,\n * guarantees that a function is only executed a single time, either at the\n * very beginning of a series of calls, or at the very end.\n *\n * @param {number} delay - A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param {boolean} [atBegin] - Optional, defaults to false. If atBegin is false or unspecified, callback will only be executed `delay` milliseconds\n * after the last debounced-function call. If atBegin is true, callback will be executed only at the first debounced-function call.\n * (After the throttled-function has not been called for `delay` milliseconds, the internal counter is reset).\n * @param {Function} callback - A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n * to `callback` when the debounced-function is executed.\n *\n * @returns {Function} A new, debounced function.\n */\nexport default function(delay, atBegin, callback) {\n\treturn callback === undefined\n\t\t? throttle(delay, atBegin, false)\n\t\t: throttle(delay, callback, atBegin !== false);\n}\n","import '@/styles/fonts.scss';\nimport '@/styles/icons/icons.scss';\n\nimport '@/styles/base.scss';","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","import './styles/base.scss';","\nexport default class HeaderMenuItem {\n _hiddenClass = 'header-menu--item__hidden';\n _visible = true;\n\n width = 0;\n\n /** @param {HTMLElement} root */\n constructor(root) {\n this.$root = root;\n this._init();\n }\n\n _init() {\n this._getElements();\n }\n\n setVisibility(visible) {\n if (visible) this.show();\n else this.hide();\n }\n\n hide() {\n this.$root.classList.add(this._hiddenClass);\n this.$link.tabIndex = -1;\n this._visible = false;\n }\n\n show() {\n this.$root.classList.remove(this._hiddenClass);\n this.$link.removeAttribute('tabindex');\n this._visible = true;\n }\n\n isVisible() {\n return this._visible;\n }\n\n updateMetrics() {\n this.width = this.$root.getBoundingClientRect().width;\n }\n\n _getElements() {\n this.$link = this.$root.querySelector('.header-menu--link');\n }\n}","import Events from '@/scripts/lib/Events';\nimport { debounce } from 'throttle-debounce';\nimport HeaderMenuItem from './HeaderMenuItem';\n\n/** @param {HTMLElement} header */\nexport default class HeaderMenu {\n events = new Events();\n\n _animationFrame = 0;\n _containerWidth = 0;\n _totalItemsWith = 0;\n\n /** \n * @param {HTMLElement} root \n * @param {HTMLElement} container\n */\n constructor(root, container) {\n this.$root = root;\n this.$container = container;\n\n this._init();\n }\n\n _init() {\n this._getElements();\n this._initItems();\n this.update();\n\n this._initEvents();\n this._ready();\n }\n\n update() {\n this._updateMetrics();\n this._recalculate();\n this.events.emit('update');\n }\n\n _recalculate() {\n const { _containerWidth: cw, _totalItemsWith, items, moreItem } = this;\n\n const showMore = _totalItemsWith >= cw;\n const maxWidth = (showMore) ? cw - moreItem.width : cw;\n\n items.reduce((width, item) => {\n width += item.width;\n item.setVisibility(width <= maxWidth);\n return width;\n }, 0);\n\n moreItem.setVisibility(showMore);\n }\n\n _updateMetrics() {\n this._containerWidth = this.$container.getBoundingClientRect().width;\n\n this.moreItem.updateMetrics();\n this.items.forEach(item => item.updateMetrics());\n\n this._totalItemsWith = this.items\n .reduce((total, { width }) => total + width, 0);\n }\n\n _initEvents() {\n window.addEventListener('orientationchange', () => {\n requestAnimationFrame(() => this.update());\n });\n\n let resizing = false;\n window.addEventListener('resize', () => {\n if (resizing === true) return;\n resizing = true;\n\n this._startResizing();\n });\n\n window.addEventListener('resize', debounce(200, () => {\n resizing = false;\n this._stopResizing();\n }));\n }\n\n _startResizing() {\n this._animationFrame = requestAnimationFrame(function tik() {\n this._tik();\n this._animationFrame = requestAnimationFrame(tik.bind(this));\n }.bind(this));\n }\n\n _stopResizing() {\n cancelAnimationFrame(this._animationFrame);\n }\n\n _tik() {\n this.update();\n }\n\n _initItems() {\n this.items = this.$items.map($item => new HeaderMenuItem($item));\n this.moreItem = new HeaderMenuItem(this.$more);\n }\n\n _ready() {\n this.$root.classList.add('header-menu__ready');\n }\n\n _getElements() {\n this.$more = this.$root.querySelector('.menu-more-item-js');\n this.$items = [...this.$root.querySelectorAll('.menu-item-js')];\n }\n}","import Events from '@/scripts/lib/Events';\nimport { showModal } from '@/scripts/utils/base';\n\n/** @type {MobileMenu} */\nlet mobileMenu = null;\n\nexport default class MobileMenu {\n events = new Events();\n modalId = 'mobile-menu';\n\n /** @param {HTMLElement} headerMenu */\n constructor(headerMenu) {\n if (mobileMenu) return mobileMenu;\n this.headerMenu = headerMenu;\n this._init();\n }\n\n show() {\n this.events.emit('show');\n showModal(this.modalId);\n }\n\n _init() {\n this._getElements();\n this._initEvents();\n }\n\n _initEvents() {\n this.events.addListenerOnce('show', () => {\n this._render();\n });\n }\n\n _render() {\n const list = this.headerMenu.cloneNode(true);\n this._prepareMenuList(list);\n this.$itemsContainer.appendChild(list);\n }\n\n /** @param {HTMLElement} list */\n _prepareMenuList(list) {\n const items = list.querySelectorAll('.header-menu--link');\n items.forEach(($) => {\n $.removeAttribute('tabindex');\n });\n }\n\n _getElements() {\n this.$root = document.querySelector(`#${this.modalId}`);\n this.$itemsContainer = this.$root.querySelector('.items-container-js');\n }\n}","import './blog-layout.styles';\n\nimport initHeader from '@/templates/header-blog/header';\nimport initFooter from '@/templates/footer-blog/footer';\n\nexport default function initBlogLayout() {\n initHeader();\n initFooter();\n}","import './header.styles';\n\nimport HeaderMenu from './components/HeaderMenu';\nimport MobileMenu from './components/MobileMenu';\nimport { showModal } from '@/scripts/utils/base';\n\n\nexport default function initHeader() {\n const $header = document.querySelector('.header-js');\n const $headerMenu = $header.querySelector('.header-menu-js');\n const $nav = $header.querySelector('.header-nav-js');\n\n const headerMenu = window.headerMenu = new HeaderMenu($headerMenu, $nav);\n const mobileMenu = new MobileMenu($headerMenu);\n\n (function initEvents() {\n window.addEventListener('load', () => {\n headerMenu.update();\n });\n\n document.body.addEventListener('click', (e) => {\n if (!e.target.closest('.open-mobile-menu-js')) return;\n e.preventDefault();\n mobileMenu.show();\n });\n }());\n}\n","export default {\n months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n};","/**\n * @typedef {{\n * preferNative: boolean,\n * lazyClass: string,\n * offset: number,\n * useOffsetAfterInteractive: boolean\n * }} Options\n * \n * preferNative - do nothing if the browser supports loading=\"lazy\" attribute \n * and the img has that attribute\n */\n\nimport { swapImgSources } from '../utils/base';\n\n/** @type {Options} */\nconst DEF_OPTIONS = {\n lazyClass: 'lazy',\n preferNative: true,\n offset: window.innerHeight,\n scrollableContainer: document,\n useOffsetAfterInteractive: true,\n};\n\nconst hasNativeSupport = 'loading' in HTMLImageElement.prototype;\n\nexport default class ImgLazyLoad {\n /**\n * @param {HTMLCollection | HTMLImageElement[]} images \n * @param {Options} options\n */\n constructor(images, options = {}) {\n if (!images) return;\n\n this._runHandler = () => this._run();\n this._active = false;\n this._frameId = 0;\n\n this._options = { ...DEF_OPTIONS, ...options };\n this._images = [...images];\n\n if (this._options.useOffsetAfterInteractive) {\n this._setupOffsetAfterInteractive(this._options.offset);\n this._options.offset = 0;\n }\n\n if (this._options.preferNative && hasNativeSupport) {\n this._initNativeLazy();\n }\n\n if (!this._images.length) {\n return;\n }\n\n this._addEvents();\n this._run();\n }\n\n _run() {\n if (this._active) return;\n this._active = true;\n\n if (this._frameId) {\n cancelAnimationFrame(this._frameId);\n }\n\n this._frameId = requestAnimationFrame(() => {\n this._images.forEach((img) => {\n this._runForImg(img);\n });\n\n this._active = false;\n\n if (!this._images.length) {\n this._removeEvents();\n }\n });\n }\n\n _runForImg(img) {\n const bounding = img.getBoundingClientRect();\n const offset = this._options.offset;\n\n const isVisible = bounding.bottom >= -offset &&\n bounding.top <= window.innerHeight + offset;\n\n if (!isVisible) {\n return;\n }\n\n img.classList.remove(this._options.lazyClass);\n\n this._swapImgSources(img);\n this._forgetImg(img);\n }\n\n _swapImgSources(img) {\n swapImgSources(img);\n }\n\n _forgetImg(img) {\n this._images = this._images.filter(lazyImg => lazyImg !== img);\n }\n\n _setupOffsetAfterInteractive(realOffset) {\n const runHandler = this._runHandler;\n\n this._runHandler = (...args) => {\n runHandler(...args);\n\n // Remove custom runHandler from events\n this._removeEvents();\n\n this._options.offset = realOffset;\n this._runHandler = runHandler;\n\n this._addEvents();\n };\n }\n\n _initNativeLazy() {\n this._images = this._images.filter((img) => {\n const useNative = img.hasAttribute('loading');\n if (useNative) this._swapImgSources(img);\n return !useNative;\n });\n }\n\n _addEvents() {\n this._options.scrollableContainer.addEventListener('scroll', this._runHandler);\n window.addEventListener('resize', this._runHandler);\n window.addEventListener('orientationchange', this._runHandler);\n }\n\n _removeEvents() {\n this._options.scrollableContainer.removeEventListener('scroll', this._runHandler);\n window.removeEventListener('resize', this._runHandler);\n window.removeEventListener('orientationchange', this._runHandler);\n }\n}\n","const cache = new Map();\n\n/**\n * Simple JavaScript Templates\n * \n * Original Source: https://johnresig.com/blog/javascript-micro-templating\n * \n * Be careful, in some cases you **MUST** add semicolon to your js in template,\n * for example:\n * \n * ```html\n * <% [].forEach((item) => { %>\n * // . . .\n * <% }); %>\n *```\n * \n * Another bottleneck is: sometimes you **MUST** escape single quotes in html\n * \n * ```html\n *

I\\'m The Title

\n * ``` \n * \n * @param {string} template template string (*not any selector*)\n * @param {object} data \n * \n * @returns string\n */\nexport default function microTemplate(template, data = {}) {\n if (cache.has(template)) {\n return cache.get(template)(data);\n }\n\n const parsed = template\n .replace(/[\\r\\t\\n]/g, ' ')\n .split('<%').join('\\t')\n .replace(/((^|%>)[^\\t]*)'/g, '$1\\r')\n .replace(/\\t=(.*?)%>/g, \"',$1,'\")\n .split('\\t').join(\"');\")\n .split('%>').join(\"p.push('\")\n .split('\\r').join(\"\\\\'\");\n\n const fn = new Function('obj',\n `let p=[];with(obj){p.push('${parsed}')};return p.join('');`,\n );\n \n cache.set(template, fn);\n return fn(data);\n}","export default {\n largeTablet: 1100,\n tablet: 800,\n largeMobile: 620,\n horMobile: 480,\n verMobile: 320,\n};","/**\n * Create pagination config\n * \n * @param {{\n * pages: number,\n * cur: number,\n * delta: number,\n * }} options\n * \n * @param {number} options.delta the number of visible page number\n * buttons at both sides of current page\n * \n * @returns {number[]} array of page numbers or -1 if there's a delimiter\n */\nexport default function paginate({ cur, pages, delta }) {\n if (pages === 1) return [1];\n delta = Math.min(delta, pages - 1);\n\n const center = Math.min(Math.max(cur, delta + 1), pages - delta);\n const buttons = [1];\n\n const left = center - delta;\n const right = center + delta;\n\n if (left > 2) {\n buttons.push((left === 3) ? 2 : -1);\n }\n\n for (let i = Math.max(left, 2); i < center; i++) {\n buttons.push(i);\n }\n\n if (center !== 1 && center !== pages) {\n buttons.push(center);\n }\n\n for (let i = center + 1; i <= Math.min(right, pages - 1); i++) {\n buttons.push(i);\n }\n\n if (right < pages - 1) {\n buttons.push((right === pages - 2) ? pages - 1 : -1);\n }\n\n buttons.push(pages);\n return buttons;\n}","import './pagination.scss';\n\nimport template from './pagination.html';\n\nimport Events from '@/scripts/lib/Events';\nimport microTemplate from '@/scripts/lib/microTmpl';\n\nimport breakpoints from '@/scripts/common/breakpoints';\nimport paginate from './algorithms/paginate';\n\n/**\n * @typedef {{\n * delta?: number,\n * linkGenerator?: (page: number) => string,\n * manualRouting: boolean,\n * }} PaginationOptions\n */\n\n/** @type {PaginationOptions} */\nconst DEF_OPTIONS = {\n // The number of visible page buttons at both sides of cur page\n delta: 2,\n manualRouting: true,\n linkGenerator: defaultLinkGenerator,\n};\n\nexport default class Pagination {\n /**\n * @param {HTMLElement} root \n * @param {PaginationOptions} options\n */\n constructor(root, options) {\n this.events = new Events();\n this._paginate = paginate;\n\n this._options = { ...DEF_OPTIONS, ...options };\n this._root = root;\n\n this._pages = 10;\n this._cur = 1;\n\n this._pageNumberButtons = [];\n\n this._disabled = false;\n\n this._mobileMedia = matchMedia(`\n screen and (max-width: ${breakpoints.largeMobile}px)\n `);\n\n this._initEvents();\n }\n\n render() {\n this._updateConfig();\n this._root.innerHTML = microTemplate(template, this);\n }\n\n _initEvents() {\n if (!this._options.manualRouting) return;\n \n this._root.addEventListener('click', (event) => {\n const selector = '.pagination--link:not(.pagination--disabled)';\n const pageBtn = event.target.closest(selector);\n\n if (pageBtn) {\n event.preventDefault();\n\n if (this._disabled) return;\n\n this._setPage(+pageBtn.dataset.page);\n return;\n }\n });\n\n this._mobileMedia.addListener(() => {\n this.render();\n });\n }\n\n _setPage(newPage) {\n newPage = parseInt(newPage + '');\n\n if (isNaN(newPage) || newPage === this._cur) return;\n const oldPage = this._cur;\n this._cur = newPage;\n\n this.render();\n this.events.emit('change', newPage, oldPage);\n }\n\n _updateConfig() {\n this._pageNumberButtons = this._paginate({\n cur: this._cur,\n pages: this._pages,\n delta: this._delta,\n });\n }\n\n get _delta() {\n if (this._mobileMedia.matches) return 1;\n return this._options.delta;\n }\n\n get cur() { return this._cur; }\n set cur(val) { this._cur = val; }\n\n get pages() { return this._pages; }\n set pages(val) { this._pages = val; }\n\n get disabled() { return this._disabled; }\n set disabled(val) { this._disabled = val; }\n}\n\n/**\n * @param {number} page \n * @returns {string}\n */\nfunction defaultLinkGenerator(page) {\n const url = new URL(location);\n url.searchParams.set('page', page);\n if (page <= 1) url.searchParams.delete('page');\n\n return url;\n}","module.exports = \"<%\\nconst prevDisabled = (_cur === 1) ? 'pagination--disabled' : '';\\nconst nextDisabled = (_cur === _pages) ? 'pagination--disabled' : '';\\n\\nconst prevPage = Math.max(_cur - 1, 1);\\nconst nextPage = Math.min(_cur + 1, _pages);\\n\\nconst prevHref = (_cur > 1) ? `href=\\\"${_options.linkGenerator(prevPage)}\\\"` : '';\\nconst nextHref = (_cur < _pages) ? `href=\\\"${_options.linkGenerator(nextPage)}\\\"` : '';\\n%>\\n\\n\";","import './author.styles';\n\nimport { getTemplateData } from '@/scripts/utils/cms';\nimport initBlogLayout from '@/layouts/blog/blog-layout';\nimport initPage from '@/scripts/init/init';\nimport ImgLazyLoad from '@/scripts/lib/ImgLazyLoad';\nimport Pagination from '@/components/Pagination/Pagination';\n\nconst $page = document.querySelector('.author-js');\nconst $pagination = $page.querySelector('.pagination-js');\n\nconst page = getTemplateData('page');\nconst maxPage = getTemplateData('maxPage');\n\ninitPage();\ninitBlogLayout();\nnew ImgLazyLoad(document.querySelectorAll('img.lazy'));\n\nconst pagination = new Pagination($pagination, { manualRouting: false });\npagination.cur = page;\npagination.pages = maxPage;\npagination.render();\n\n(function setHumEvents(){\n if (!window.humTracker) return;\n \n humTracker.trackScroll($page, 'author scroll');\n humTracker.trackClick($pagination, 'author pagination click');\n \n}());\n"],"sourceRoot":""}