{"version":3,"file":"main.js","mappings":"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","sources":["webpack://frontend-starter/webpack/runtime/chunk loaded","webpack://frontend-starter/./src/scripts/consts.js","webpack://frontend-starter/./src/scripts/mobile-nav-helper.js","webpack://frontend-starter/./src/scripts/related-content.js","webpack://frontend-starter/./apps/StyleguideApp/helpers/utils.js","webpack://frontend-starter/./src/scripts/voyage-grid-item-class-updater.js","webpack://frontend-starter/./node_modules/@glidejs/glide/dist/glide.esm.js","webpack://frontend-starter/./src/scripts/dropdown-links.js","webpack://frontend-starter/./src/scripts/voyage-expandable-handler.js","webpack://frontend-starter/./src/scripts/helpers/truncate.js","webpack://frontend-starter/./src/scripts/voyage-carousel-handler.js","webpack://frontend-starter/./src/scripts/voyage-unorthodox-list-handler.js","webpack://frontend-starter/./src/scripts/voyage-anchor-menu-handler.js","webpack://frontend-starter/./src/scripts/voyage-anchor-menu-filtering.js","webpack://frontend-starter/./src/scripts/voyage-anchor-menu-populator.js","webpack://frontend-starter/./src/scripts/helpers/dom-helper.js","webpack://frontend-starter/./src/scripts/helpers/array-helper.js","webpack://frontend-starter/./src/scripts/helpers/icon-helper.js","webpack://frontend-starter/./src/scripts/helpers/guid-helper.js","webpack://frontend-starter/./src/scripts/date-time-handling.js","webpack://frontend-starter/./src/scripts/helpers/query-string-helper.js","webpack://frontend-starter/./src/scripts/helpers/api-helper.js","webpack://frontend-starter/./src/scripts/helpers/object-helper.js","webpack://frontend-starter/./src/scripts/helpers/device-helper.js","webpack://frontend-starter/./src/scripts/voyage-insight-filter-title.js","webpack://frontend-starter/./src/scripts/elastic-search-helper.js","webpack://frontend-starter/./src/scripts/ir-scroll.js","webpack://frontend-starter/./src/scripts/slider-handler.js","webpack://frontend-starter/./src/scripts/wizard-selector.js","webpack://frontend-starter/./src/scripts/voyage-tought-leader-counter-animation.js","webpack://frontend-starter/./src/scripts/main.js","webpack://frontend-starter/./src/scripts/iePolyfills.js","webpack://frontend-starter/./src/scripts/authors.js","webpack://frontend-starter/./src/scripts/lazy-images.js","webpack://frontend-starter/./src/scripts/main-navigation.js","webpack://frontend-starter/./src/scripts/region-selector.js","webpack://frontend-starter/./src/scripts/mobile-nav.js","webpack://frontend-starter/./src/scripts/lang-selector.js","webpack://frontend-starter/./src/scripts/lists-content.js","webpack://frontend-starter/./src/scripts/content-hub.js","webpack://frontend-starter/./src/scripts/filter-list.js","webpack://frontend-starter/./src/scripts/url-handler.js","webpack://frontend-starter/./src/scripts/grid-lists-content.js","webpack://frontend-starter/./src/scripts/tabs.js","webpack://frontend-starter/./node_modules/picturefill/dist/picturefill.js","webpack://frontend-starter/webpack/bootstrap","webpack://frontend-starter/webpack/runtime/compat get default export","webpack://frontend-starter/webpack/runtime/define property getters","webpack://frontend-starter/webpack/runtime/hasOwnProperty shorthand","webpack://frontend-starter/webpack/runtime/runtimeId","webpack://frontend-starter/webpack/runtime/jsonp chunk loading","webpack://frontend-starter/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","export const NAV_MOBILE = document.querySelector(\"div.nav-mobile\")\r\nexport const COLLAPSE_OPACITY_CLASS = \"collapse\"\r\n","import * as uiConsts from './consts';\r\n\r\nconst getMobileLangSelector = () => {\r\n const langFrag = document.createDocumentFragment();\r\n const langSelectElm = document.createElement('select');\r\n const langMenuElm = document.querySelector('.lang-mobile');\r\n\r\n Array.prototype.slice\r\n .call(document.querySelectorAll('.lang-menu li a'))\r\n .forEach(e => {\r\n langSelectElm.options.add(\r\n new Option(e.innerHTML, e.getAttribute('data-culture'))\r\n );\r\n });\r\n\r\n langSelectElm.classList.add('mobileSelect', 'mobilelanguageSelect');\r\n langFrag.appendChild(langSelectElm);\r\n langMenuElm.appendChild(langFrag);\r\n\r\n return langMenuElm;\r\n};\r\n\r\nconst getMobileRegionSelector = () => {\r\n const regionSelector = document.querySelector('.top-nav__region-wrapper');\r\n const regionSelectElm = document.createElement('select');\r\n const regMenuElm = document.querySelector('.region-mobile');\r\n const regFrag = document.createDocumentFragment();\r\n\r\n Array.prototype.slice\r\n .call(regionSelector.querySelectorAll('li a'))\r\n .forEach(e => {\r\n regionSelectElm.options.add(new Option(e.innerHTML, e.href));\r\n });\r\n\r\n regionSelectElm.options[0].selected = true;\r\n\r\n regionSelectElm.classList.add('mobileSelect', 'mobileregionSelect');\r\n regFrag.appendChild(regionSelectElm);\r\n regMenuElm.appendChild(regFrag);\r\n return regMenuElm;\r\n};\r\n\r\nconst getMobileLogin = () => {\r\n const wartsilaOnline = document.querySelector('.top-nav__login a');\r\n const mobileWartsila = wartsilaOnline.cloneNode(true);\r\n mobileWartsila.classList.add('mobile-login');\r\n return mobileWartsila;\r\n};\r\n\r\nconst getMobileSearch = () => {\r\n const searchSelector = document.querySelector('.search-input--small');\r\n if(searchSelector){\r\n const mobileSearch = searchSelector.cloneNode(true);\r\n mobileSearch.classList.remove('display__desktop-only');\r\n mobileSearch.classList.add('display__mobile-only');\r\n \r\n var input = mobileSearch.querySelector('input')\r\n var inputId = input.getAttribute('id');\r\n input.setAttribute('id', 'mobile-' + inputId);\r\n \r\n var searchIcon = mobileSearch.querySelector('i')\r\n var searchIconId = searchIcon.getAttribute('id');\r\n searchIcon.setAttribute('id', 'mobile-' + searchIconId);\r\n \r\n return mobileSearch;\r\n }\r\n\r\n return null;\r\n};\r\n\r\nexport const getMobileNav = () => {\r\n const menuLinks = document.querySelectorAll('[class^=main-nav__nav-link]');\r\n const secondaryLinks = document.querySelectorAll(\r\n '[class^=top-nav-bar__nav-link]'\r\n );\r\n\r\n console.log('mobile nav ' + menuLinks.length)\r\n if (!(menuLinks && menuLinks.length > 0)) {\r\n return;\r\n }\r\n\r\n if(getMobileSearch() !== null){\r\n uiConsts.NAV_MOBILE.appendChild(getMobileSearch());\r\n }\r\n\r\n Array.prototype.slice.call(menuLinks).forEach(e => {\r\n uiConsts.NAV_MOBILE.appendChild(e.cloneNode(true));\r\n });\r\n Array.prototype.slice.call(secondaryLinks).forEach(e => {\r\n uiConsts.NAV_MOBILE.appendChild(e.cloneNode(true));\r\n });\r\n\r\n const node = document.createElement('div');\r\n node.classList.add('mobile-actions-wrapper');\r\n\r\n node.appendChild(getMobileLangSelector());\r\n node.appendChild(getMobileRegionSelector());\r\n node.appendChild(getMobileLogin());\r\n\r\n return uiConsts.NAV_MOBILE.appendChild(node.cloneNode(true));\r\n};\r\n","\r\nclass RelatedContent {\r\n constructor() {\r\n\r\n }\r\n\r\n moveRelatedItemsToTheBody() {\r\n window.ListsContent.styleLists();\r\n const container = document.getElementById('related-body-content');\r\n const related = document.getElementById('content-body-related-items');\r\n if(!related)return;\r\n\r\n if(container !== undefined && container !== null) {\r\n while (related.childNodes.length > 0) {\r\n container.appendChild(related.childNodes[0]);\r\n }\r\n } else{\r\n related.classList.remove('do-not-show');\r\n }\r\n }\r\n }\r\n\r\nexport default RelatedContent;\r\n","export const atomicDir = file => {\r\n const filePath = file.split('/');\r\n return filePath.slice(filePath.length - 3, filePath.length - 2)[0];\r\n};\r\n\r\nexport function onDocumentLoaded (callback) {\r\n if (document.readyState === 'loading') {\r\n window.addEventListener('DOMContentLoaded', callback)\r\n } else {\r\n callback()\r\n }\r\n}\r\n\r\nexport function onStateChange (callback) {\r\n document.onreadystatechange = function () {\r\n if (document.readyState === 'complete') {\r\n callback();\r\n }\r\n }\r\n}\r\n\r\nexport function onResize (callback) {\r\n if (document.readyState !== 'complete') {\r\n window.addEventListener('resize', callback)\r\n } else {\r\n callback()\r\n }\r\n}","import { onDocumentLoaded } from \"../../apps/StyleguideApp/helpers/utils\"\r\n\r\nconst getNumberOfColumns = () => window.innerWidth < 961 ? 2 : 3 // 960px is 3x the minimum supported size\r\n\r\nconst getGridItemClassName = (index, numberOfGridItems) => {\r\n const numberOfColumns = getNumberOfColumns()\r\n const remainder = numberOfGridItems % numberOfColumns\r\n\r\n switch (true) {\r\n case remainder === 0:\r\n return 'voyage__grid-item--in-' + numberOfColumns + '-column-layout'\r\n\r\n case remainder === 1 && index === 0 && window.innerWidth > 739:\r\n return \"voyage__grid-item--in-1-column-layout\"\r\n\r\n case remainder === 2 && [0, 1].includes(index):\r\n return 'voyage__grid-item--in-' + remainder + '-column-layout'\r\n\r\n default:\r\n return 'voyage__grid-item--in-' + numberOfColumns + '-column-layout'\r\n }\r\n}\r\n\r\nconst getInsightsMostRecentGridItemClassName = (index, numberOfGridItems) => {\r\n const numberOfColumns = 3;\r\n var everyThird = (index+1) % numberOfColumns;\r\n var currentRow = Math.ceil((index+1)/numberOfColumns)\r\n var evenRow = currentRow % 2;\r\n\r\n switch (true) {\r\n case window.innerWidth <= 739:\r\n return 'voyage__grid-item--in-' + numberOfColumns + '-column-layout'\r\n\r\n case everyThird === 1 && evenRow === 1:\r\n return 'voyage__grid-item--in-' + 1 + '-column-layout'\r\n\r\n case everyThird === 2 && evenRow === 1:\r\n return 'voyage__grid-item--in-' + 2 + '-column-layout'\r\n\r\n case everyThird === 0 && evenRow === 1:\r\n return 'voyage__grid-item--in-' + 2 + '-column-layout'\r\n\r\n case evenRow === 0:\r\n return 'voyage__grid-item--in-' + numberOfColumns + '-column-layout'\r\n \r\n default:\r\n return 'voyage__grid-item--in-' + numberOfColumns + '-column-layout'\r\n }\r\n}\r\n\r\nfunction voyageGridItemClassUpdater (grids) {\r\n Array.prototype.forEach.call(grids, gridNode => {\r\n const gridItems = Array.from(gridNode.children).filter(function(g) { return g.className.indexOf('do-not-show') < 0 });\r\n\r\n Array.prototype.forEach.call(gridItems, (gridItem, index) => {\r\n gridItem.className = 'voyage__grid--item-wrapper ' + getGridItemClassName(index, gridItems.length)\r\n })\r\n })\r\n}\r\n\r\nfunction voyageInsightsMostRecentGridsItemClassUpdater (grids) {\r\n Array.prototype.forEach.call(grids, gridNode => {\r\n const gridItems = Array.from(gridNode.children).filter(function(g) { return g.className.indexOf('do-not-show') < 0 });\r\n\r\n Array.prototype.forEach.call(gridItems, (gridItem, index) => {\r\n gridItem.className = 'voyage__grid--item-wrapper ' + getInsightsMostRecentGridItemClassName(index, gridItems.length)\r\n })\r\n })\r\n}\r\n\r\n\r\nconst getSimpleGridItemClassName = () => {\r\n const numberOfColumns = getNumberOfColumns()\r\n return `voyage__simple-grid-item--in-${numberOfColumns}-column-layout`\r\n}\r\n\r\nfunction voyageSimpleGridItemClassUpdater (simpleGrids) {\r\n simpleGrids.forEach(gridNode => {\r\n const gridItems = Array.prototype.slice.call(gridNode.children)\r\n\r\n gridItems.forEach((gridItem) => {\r\n gridItem.className = getSimpleGridItemClassName()\r\n })\r\n })\r\n}\r\n\r\nconst addEventListeners = () => {\r\n const grids = document.querySelectorAll(\"div[class='voyage__grid-container--grid-items']\") || []\r\n const voyageInsightsMostRecentGrids = document.querySelectorAll('.voyage-most-recent .voyage__grid-container--related-content-grid-items') || []\r\n const simpleGrids = document.querySelectorAll(\"div[class='voyage__grid-container--simple-grid-items']\") || []\r\n const relatedContentGrids = document.querySelectorAll(\"div[class='voyage__grid-container--related-content-grid-items']\") || []\r\n\r\n voyageGridItemClassUpdater(grids)\r\n voyageInsightsMostRecentGridsItemClassUpdater(voyageInsightsMostRecentGrids)\r\n voyageSimpleGridItemClassUpdater(simpleGrids)\r\n\r\n window.addEventListener('resize', () => {\r\n voyageGridItemClassUpdater(grids)\r\n voyageInsightsMostRecentGridsItemClassUpdater(voyageInsightsMostRecentGrids)\r\n voyageSimpleGridItemClassUpdater(simpleGrids)\r\n })\r\n}\r\n\r\nexport default () => onDocumentLoaded(addEventListeners)","/*!\n * Glide.js v3.6.0\n * (c) 2013-2022 Jędrzej Chałubek (https://github.com/jedrzejchalubek/)\n * Released under the MIT License.\n */\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _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 _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _createSuper(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct();\n\n return function _createSuperInternal() {\n var Super = _getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = _getPrototypeOf(this).constructor;\n\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return _possibleConstructorReturn(this, result);\n };\n}\n\nfunction _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = _getPrototypeOf(object);\n if (object === null) break;\n }\n\n return object;\n}\n\nfunction _get() {\n if (typeof Reflect !== \"undefined\" && Reflect.get) {\n _get = Reflect.get;\n } else {\n _get = function _get(target, property, receiver) {\n var base = _superPropBase(target, property);\n\n if (!base) return;\n var desc = Object.getOwnPropertyDescriptor(base, property);\n\n if (desc.get) {\n return desc.get.call(arguments.length < 3 ? target : receiver);\n }\n\n return desc.value;\n };\n }\n\n return _get.apply(this, arguments);\n}\n\nvar defaults = {\n /**\n * Type of the movement.\n *\n * Available types:\n * `slider` - Rewinds slider to the start/end when it reaches the first or last slide.\n * `carousel` - Changes slides without starting over when it reaches the first or last slide.\n *\n * @type {String}\n */\n type: 'slider',\n\n /**\n * Start at specific slide number defined with zero-based index.\n *\n * @type {Number}\n */\n startAt: 0,\n\n /**\n * A number of slides visible on the single viewport.\n *\n * @type {Number}\n */\n perView: 1,\n\n /**\n * Focus currently active slide at a specified position in the track.\n *\n * Available inputs:\n * `center` - Current slide will be always focused at the center of a track.\n * `0,1,2,3...` - Current slide will be focused on the specified zero-based index.\n *\n * @type {String|Number}\n */\n focusAt: 0,\n\n /**\n * A size of the gap added between slides.\n *\n * @type {Number}\n */\n gap: 10,\n\n /**\n * Change slides after a specified interval. Use `false` for turning off autoplay.\n *\n * @type {Number|Boolean}\n */\n autoplay: false,\n\n /**\n * Stop autoplay on mouseover event.\n *\n * @type {Boolean}\n */\n hoverpause: true,\n\n /**\n * Allow for changing slides with left and right keyboard arrows.\n *\n * @type {Boolean}\n */\n keyboard: true,\n\n /**\n * Stop running `perView` number of slides from the end. Use this\n * option if you don't want to have an empty space after\n * a slider. Works only with `slider` type and a\n * non-centered `focusAt` setting.\n *\n * @type {Boolean}\n */\n bound: false,\n\n /**\n * Minimal swipe distance needed to change the slide. Use `false` for turning off a swiping.\n *\n * @type {Number|Boolean}\n */\n swipeThreshold: 80,\n\n /**\n * Minimal mouse drag distance needed to change the slide. Use `false` for turning off a dragging.\n *\n * @type {Number|Boolean}\n */\n dragThreshold: 120,\n\n /**\n * A number of slides moved on single swipe.\n *\n * Available types:\n * `` - Moves slider by one slide per swipe\n * `|` - Moves slider between views per swipe (number of slides defined in `perView` options)\n *\n * @type {String}\n */\n perSwipe: '',\n\n /**\n * Moving distance ratio of the slides on a swiping and dragging.\n *\n * @type {Number}\n */\n touchRatio: 0.5,\n\n /**\n * Angle required to activate slides moving on swiping or dragging.\n *\n * @type {Number}\n */\n touchAngle: 45,\n\n /**\n * Duration of the animation in milliseconds.\n *\n * @type {Number}\n */\n animationDuration: 400,\n\n /**\n * Allows looping the `slider` type. Slider will rewind to the first/last slide when it's at the start/end.\n *\n * @type {Boolean}\n */\n rewind: true,\n\n /**\n * Duration of the rewinding animation of the `slider` type in milliseconds.\n *\n * @type {Number}\n */\n rewindDuration: 800,\n\n /**\n * Easing function for the animation.\n *\n * @type {String}\n */\n animationTimingFunc: 'cubic-bezier(.165, .840, .440, 1)',\n\n /**\n * Wait for the animation to finish until the next user input can be processed\n *\n * @type {boolean}\n */\n waitForTransition: true,\n\n /**\n * Throttle costly events at most once per every wait milliseconds.\n *\n * @type {Number}\n */\n throttle: 10,\n\n /**\n * Moving direction mode.\n *\n * Available inputs:\n * - 'ltr' - left to right movement,\n * - 'rtl' - right to left movement.\n *\n * @type {String}\n */\n direction: 'ltr',\n\n /**\n * The distance value of the next and previous viewports which\n * have to peek in the current view. Accepts number and\n * pixels as a string. Left and right peeking can be\n * set up separately with a directions object.\n *\n * For example:\n * `100` - Peek 100px on the both sides.\n * { before: 100, after: 50 }` - Peek 100px on the left side and 50px on the right side.\n *\n * @type {Number|String|Object}\n */\n peek: 0,\n\n /**\n * Defines how many clones of current viewport will be generated.\n *\n * @type {Number}\n */\n cloningRatio: 1,\n\n /**\n * Collection of options applied at specified media breakpoints.\n * For example: display two slides per view under 800px.\n * `{\n * '800px': {\n * perView: 2\n * }\n * }`\n */\n breakpoints: {},\n\n /**\n * Collection of internally used HTML classes.\n *\n * @todo Refactor `slider` and `carousel` properties to single `type: { slider: '', carousel: '' }` object\n * @type {Object}\n */\n classes: {\n swipeable: 'glide--swipeable',\n dragging: 'glide--dragging',\n direction: {\n ltr: 'glide--ltr',\n rtl: 'glide--rtl'\n },\n type: {\n slider: 'glide--slider',\n carousel: 'glide--carousel'\n },\n slide: {\n clone: 'glide__slide--clone',\n active: 'glide__slide--active'\n },\n arrow: {\n disabled: 'glide__arrow--disabled'\n },\n nav: {\n active: 'glide__bullet--active'\n }\n }\n};\n\n/**\n * Outputs warning message to the bowser console.\n *\n * @param {String} msg\n * @return {Void}\n */\nfunction warn(msg) {\n console.error(\"[Glide warn]: \".concat(msg));\n}\n\n/**\n * Converts value entered as number\n * or string to integer value.\n *\n * @param {String} value\n * @returns {Number}\n */\nfunction toInt(value) {\n return parseInt(value);\n}\n/**\n * Converts value entered as number\n * or string to flat value.\n *\n * @param {String} value\n * @returns {Number}\n */\n\nfunction toFloat(value) {\n return parseFloat(value);\n}\n/**\n * Indicates whether the specified value is a string.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\nfunction isString(value) {\n return typeof value === 'string';\n}\n/**\n * Indicates whether the specified value is an object.\n *\n * @param {*} value\n * @return {Boolean}\n *\n * @see https://github.com/jashkenas/underscore\n */\n\nfunction isObject(value) {\n var type = _typeof(value);\n\n return type === 'function' || type === 'object' && !!value; // eslint-disable-line no-mixed-operators\n}\n/**\n * Indicates whether the specified value is a function.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\nfunction isFunction(value) {\n return typeof value === 'function';\n}\n/**\n * Indicates whether the specified value is undefined.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\nfunction isUndefined(value) {\n return typeof value === 'undefined';\n}\n/**\n * Indicates whether the specified value is an array.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\nfunction isArray(value) {\n return value.constructor === Array;\n}\n\n/**\n * Creates and initializes specified collection of extensions.\n * Each extension receives access to instance of glide and rest of components.\n *\n * @param {Object} glide\n * @param {Object} extensions\n *\n * @returns {Object}\n */\n\nfunction mount(glide, extensions, events) {\n var components = {};\n\n for (var name in extensions) {\n if (isFunction(extensions[name])) {\n components[name] = extensions[name](glide, components, events);\n } else {\n warn('Extension must be a function');\n }\n }\n\n for (var _name in components) {\n if (isFunction(components[_name].mount)) {\n components[_name].mount();\n }\n }\n\n return components;\n}\n\n/**\n * Defines getter and setter property on the specified object.\n *\n * @param {Object} obj Object where property has to be defined.\n * @param {String} prop Name of the defined property.\n * @param {Object} definition Get and set definitions for the property.\n * @return {Void}\n */\nfunction define(obj, prop, definition) {\n Object.defineProperty(obj, prop, definition);\n}\n/**\n * Sorts aphabetically object keys.\n *\n * @param {Object} obj\n * @return {Object}\n */\n\nfunction sortKeys(obj) {\n return Object.keys(obj).sort().reduce(function (r, k) {\n r[k] = obj[k];\n return r[k], r;\n }, {});\n}\n/**\n * Merges passed settings object with default options.\n *\n * @param {Object} defaults\n * @param {Object} settings\n * @return {Object}\n */\n\nfunction mergeOptions(defaults, settings) {\n var options = Object.assign({}, defaults, settings); // `Object.assign` do not deeply merge objects, so we\n // have to do it manually for every nested object\n // in options. Although it does not look smart,\n // it's smaller and faster than some fancy\n // merging deep-merge algorithm script.\n\n if (settings.hasOwnProperty('classes')) {\n options.classes = Object.assign({}, defaults.classes, settings.classes);\n\n if (settings.classes.hasOwnProperty('direction')) {\n options.classes.direction = Object.assign({}, defaults.classes.direction, settings.classes.direction);\n }\n\n if (settings.classes.hasOwnProperty('type')) {\n options.classes.type = Object.assign({}, defaults.classes.type, settings.classes.type);\n }\n\n if (settings.classes.hasOwnProperty('slide')) {\n options.classes.slide = Object.assign({}, defaults.classes.slide, settings.classes.slide);\n }\n\n if (settings.classes.hasOwnProperty('arrow')) {\n options.classes.arrow = Object.assign({}, defaults.classes.arrow, settings.classes.arrow);\n }\n\n if (settings.classes.hasOwnProperty('nav')) {\n options.classes.nav = Object.assign({}, defaults.classes.nav, settings.classes.nav);\n }\n }\n\n if (settings.hasOwnProperty('breakpoints')) {\n options.breakpoints = Object.assign({}, defaults.breakpoints, settings.breakpoints);\n }\n\n return options;\n}\n\nvar EventsBus = /*#__PURE__*/function () {\n /**\n * Construct a EventBus instance.\n *\n * @param {Object} events\n */\n function EventsBus() {\n var events = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, EventsBus);\n\n this.events = events;\n this.hop = events.hasOwnProperty;\n }\n /**\n * Adds listener to the specifed event.\n *\n * @param {String|Array} event\n * @param {Function} handler\n */\n\n\n _createClass(EventsBus, [{\n key: \"on\",\n value: function on(event, handler) {\n if (isArray(event)) {\n for (var i = 0; i < event.length; i++) {\n this.on(event[i], handler);\n }\n\n return;\n } // Create the event's object if not yet created\n\n\n if (!this.hop.call(this.events, event)) {\n this.events[event] = [];\n } // Add the handler to queue\n\n\n var index = this.events[event].push(handler) - 1; // Provide handle back for removal of event\n\n return {\n remove: function remove() {\n delete this.events[event][index];\n }\n };\n }\n /**\n * Runs registered handlers for specified event.\n *\n * @param {String|Array} event\n * @param {Object=} context\n */\n\n }, {\n key: \"emit\",\n value: function emit(event, context) {\n if (isArray(event)) {\n for (var i = 0; i < event.length; i++) {\n this.emit(event[i], context);\n }\n\n return;\n } // If the event doesn't exist, or there's no handlers in queue, just leave\n\n\n if (!this.hop.call(this.events, event)) {\n return;\n } // Cycle through events queue, fire!\n\n\n this.events[event].forEach(function (item) {\n item(context || {});\n });\n }\n }]);\n\n return EventsBus;\n}();\n\nvar Glide$1 = /*#__PURE__*/function () {\n /**\r\n * Construct glide.\r\n *\r\n * @param {String} selector\r\n * @param {Object} options\r\n */\n function Glide(selector) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, Glide);\n\n this._c = {};\n this._t = [];\n this._e = new EventsBus();\n this.disabled = false;\n this.selector = selector;\n this.settings = mergeOptions(defaults, options);\n this.index = this.settings.startAt;\n }\n /**\r\n * Initializes glide.\r\n *\r\n * @param {Object} extensions Collection of extensions to initialize.\r\n * @return {Glide}\r\n */\n\n\n _createClass(Glide, [{\n key: \"mount\",\n value: function mount$1() {\n var extensions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this._e.emit('mount.before');\n\n if (isObject(extensions)) {\n this._c = mount(this, extensions, this._e);\n } else {\n warn('You need to provide a object on `mount()`');\n }\n\n this._e.emit('mount.after');\n\n return this;\n }\n /**\r\n * Collects an instance `translate` transformers.\r\n *\r\n * @param {Array} transformers Collection of transformers.\r\n * @return {Void}\r\n */\n\n }, {\n key: \"mutate\",\n value: function mutate() {\n var transformers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n if (isArray(transformers)) {\n this._t = transformers;\n } else {\n warn('You need to provide a array on `mutate()`');\n }\n\n return this;\n }\n /**\r\n * Updates glide with specified settings.\r\n *\r\n * @param {Object} settings\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"update\",\n value: function update() {\n var settings = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.settings = mergeOptions(this.settings, settings);\n\n if (settings.hasOwnProperty('startAt')) {\n this.index = settings.startAt;\n }\n\n this._e.emit('update');\n\n return this;\n }\n /**\r\n * Change slide with specified pattern. A pattern must be in the special format:\r\n * `>` - Move one forward\r\n * `<` - Move one backward\r\n * `={i}` - Go to {i} zero-based slide (eq. '=1', will go to second slide)\r\n * `>>` - Rewinds to end (last slide)\r\n * `<<` - Rewinds to start (first slide)\r\n * `|>` - Move one viewport forward\r\n * `|<` - Move one viewport backward\r\n *\r\n * @param {String} pattern\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"go\",\n value: function go(pattern) {\n this._c.Run.make(pattern);\n\n return this;\n }\n /**\r\n * Move track by specified distance.\r\n *\r\n * @param {String} distance\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"move\",\n value: function move(distance) {\n this._c.Transition.disable();\n\n this._c.Move.make(distance);\n\n return this;\n }\n /**\r\n * Destroy instance and revert all changes done by this._c.\r\n *\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"destroy\",\n value: function destroy() {\n this._e.emit('destroy');\n\n return this;\n }\n /**\r\n * Start instance autoplaying.\r\n *\r\n * @param {Boolean|Number} interval Run autoplaying with passed interval regardless of `autoplay` settings\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"play\",\n value: function play() {\n var interval = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n if (interval) {\n this.settings.autoplay = interval;\n }\n\n this._e.emit('play');\n\n return this;\n }\n /**\r\n * Stop instance autoplaying.\r\n *\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"pause\",\n value: function pause() {\n this._e.emit('pause');\n\n return this;\n }\n /**\r\n * Sets glide into a idle status.\r\n *\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"disable\",\n value: function disable() {\n this.disabled = true;\n return this;\n }\n /**\r\n * Sets glide into a active status.\r\n *\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"enable\",\n value: function enable() {\n this.disabled = false;\n return this;\n }\n /**\r\n * Adds cuutom event listener with handler.\r\n *\r\n * @param {String|Array} event\r\n * @param {Function} handler\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"on\",\n value: function on(event, handler) {\n this._e.on(event, handler);\n\n return this;\n }\n /**\r\n * Checks if glide is a precised type.\r\n *\r\n * @param {String} name\r\n * @return {Boolean}\r\n */\n\n }, {\n key: \"isType\",\n value: function isType(name) {\n return this.settings.type === name;\n }\n /**\r\n * Gets value of the core options.\r\n *\r\n * @return {Object}\r\n */\n\n }, {\n key: \"settings\",\n get: function get() {\n return this._o;\n }\n /**\r\n * Sets value of the core options.\r\n *\r\n * @param {Object} o\r\n * @return {Void}\r\n */\n ,\n set: function set(o) {\n if (isObject(o)) {\n this._o = o;\n } else {\n warn('Options must be an `object` instance.');\n }\n }\n /**\r\n * Gets current index of the slider.\r\n *\r\n * @return {Object}\r\n */\n\n }, {\n key: \"index\",\n get: function get() {\n return this._i;\n }\n /**\r\n * Sets current index a slider.\r\n *\r\n * @return {Object}\r\n */\n ,\n set: function set(i) {\n this._i = toInt(i);\n }\n /**\r\n * Gets type name of the slider.\r\n *\r\n * @return {String}\r\n */\n\n }, {\n key: \"type\",\n get: function get() {\n return this.settings.type;\n }\n /**\r\n * Gets value of the idle status.\r\n *\r\n * @return {Boolean}\r\n */\n\n }, {\n key: \"disabled\",\n get: function get() {\n return this._d;\n }\n /**\r\n * Sets value of the idle status.\r\n *\r\n * @return {Boolean}\r\n */\n ,\n set: function set(status) {\n this._d = !!status;\n }\n }]);\n\n return Glide;\n}();\n\nfunction Run (Glide, Components, Events) {\n var Run = {\n /**\n * Initializes autorunning of the glide.\n *\n * @return {Void}\n */\n mount: function mount() {\n this._o = false;\n },\n\n /**\n * Makes glides running based on the passed moving schema.\n *\n * @param {String} move\n */\n make: function make(move) {\n var _this = this;\n\n if (!Glide.disabled) {\n !Glide.settings.waitForTransition || Glide.disable();\n this.move = move;\n Events.emit('run.before', this.move);\n this.calculate();\n Events.emit('run', this.move);\n Components.Transition.after(function () {\n if (_this.isStart()) {\n Events.emit('run.start', _this.move);\n }\n\n if (_this.isEnd()) {\n Events.emit('run.end', _this.move);\n }\n\n if (_this.isOffset()) {\n _this._o = false;\n Events.emit('run.offset', _this.move);\n }\n\n Events.emit('run.after', _this.move);\n Glide.enable();\n });\n }\n },\n\n /**\n * Calculates current index based on defined move.\n *\n * @return {Number|Undefined}\n */\n calculate: function calculate() {\n var move = this.move,\n length = this.length;\n var steps = move.steps,\n direction = move.direction; // By default assume that size of view is equal to one slide\n\n var viewSize = 1; // While direction is `=` we want jump to\n // a specified index described in steps.\n\n if (direction === '=') {\n // Check if bound is true, \n // as we want to avoid whitespaces.\n if (Glide.settings.bound && toInt(steps) > length) {\n Glide.index = length;\n return;\n }\n\n Glide.index = steps;\n return;\n } // When pattern is equal to `>>` we want\n // fast forward to the last slide.\n\n\n if (direction === '>' && steps === '>') {\n Glide.index = length;\n return;\n } // When pattern is equal to `<<` we want\n // fast forward to the first slide.\n\n\n if (direction === '<' && steps === '<') {\n Glide.index = 0;\n return;\n } // pagination movement\n\n\n if (direction === '|') {\n viewSize = Glide.settings.perView || 1;\n } // we are moving forward\n\n\n if (direction === '>' || direction === '|' && steps === '>') {\n var index = calculateForwardIndex(viewSize);\n\n if (index > length) {\n this._o = true;\n }\n\n Glide.index = normalizeForwardIndex(index, viewSize);\n return;\n } // we are moving backward\n\n\n if (direction === '<' || direction === '|' && steps === '<') {\n var _index = calculateBackwardIndex(viewSize);\n\n if (_index < 0) {\n this._o = true;\n }\n\n Glide.index = normalizeBackwardIndex(_index, viewSize);\n return;\n }\n\n warn(\"Invalid direction pattern [\".concat(direction).concat(steps, \"] has been used\"));\n },\n\n /**\n * Checks if we are on the first slide.\n *\n * @return {Boolean}\n */\n isStart: function isStart() {\n return Glide.index <= 0;\n },\n\n /**\n * Checks if we are on the last slide.\n *\n * @return {Boolean}\n */\n isEnd: function isEnd() {\n return Glide.index >= this.length;\n },\n\n /**\n * Checks if we are making a offset run.\n *\n * @param {String} direction\n * @return {Boolean}\n */\n isOffset: function isOffset() {\n var direction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;\n\n if (!direction) {\n return this._o;\n }\n\n if (!this._o) {\n return false;\n } // did we view to the right?\n\n\n if (direction === '|>') {\n return this.move.direction === '|' && this.move.steps === '>';\n } // did we view to the left?\n\n\n if (direction === '|<') {\n return this.move.direction === '|' && this.move.steps === '<';\n }\n\n return this.move.direction === direction;\n },\n\n /**\n * Checks if bound mode is active\n *\n * @return {Boolean}\n */\n isBound: function isBound() {\n return Glide.isType('slider') && Glide.settings.focusAt !== 'center' && Glide.settings.bound;\n }\n };\n /**\n * Returns index value to move forward/to the right\n *\n * @param viewSize\n * @returns {Number}\n */\n\n function calculateForwardIndex(viewSize) {\n var index = Glide.index;\n\n if (Glide.isType('carousel')) {\n return index + viewSize;\n }\n\n return index + (viewSize - index % viewSize);\n }\n /**\n * Normalizes the given forward index based on glide settings, preventing it to exceed certain boundaries\n *\n * @param index\n * @param length\n * @param viewSize\n * @returns {Number}\n */\n\n\n function normalizeForwardIndex(index, viewSize) {\n var length = Run.length;\n\n if (index <= length) {\n return index;\n }\n\n if (Glide.isType('carousel')) {\n return index - (length + 1);\n }\n\n if (Glide.settings.rewind) {\n // bound does funny things with the length, therefor we have to be certain\n // that we are on the last possible index value given by bound\n if (Run.isBound() && !Run.isEnd()) {\n return length;\n }\n\n return 0;\n }\n\n if (Run.isBound()) {\n return length;\n }\n\n return Math.floor(length / viewSize) * viewSize;\n }\n /**\n * Calculates index value to move backward/to the left\n *\n * @param viewSize\n * @returns {Number}\n */\n\n\n function calculateBackwardIndex(viewSize) {\n var index = Glide.index;\n\n if (Glide.isType('carousel')) {\n return index - viewSize;\n } // ensure our back navigation results in the same index as a forward navigation\n // to experience a homogeneous paging\n\n\n var view = Math.ceil(index / viewSize);\n return (view - 1) * viewSize;\n }\n /**\n * Normalizes the given backward index based on glide settings, preventing it to exceed certain boundaries\n *\n * @param index\n * @param length\n * @param viewSize\n * @returns {*}\n */\n\n\n function normalizeBackwardIndex(index, viewSize) {\n var length = Run.length;\n\n if (index >= 0) {\n return index;\n }\n\n if (Glide.isType('carousel')) {\n return index + (length + 1);\n }\n\n if (Glide.settings.rewind) {\n // bound does funny things with the length, therefor we have to be certain\n // that we are on first possible index value before we to rewind to the length given by bound\n if (Run.isBound() && Run.isStart()) {\n return length;\n }\n\n return Math.floor(length / viewSize) * viewSize;\n }\n\n return 0;\n }\n\n define(Run, 'move', {\n /**\n * Gets value of the move schema.\n *\n * @returns {Object}\n */\n get: function get() {\n return this._m;\n },\n\n /**\n * Sets value of the move schema.\n *\n * @returns {Object}\n */\n set: function set(value) {\n var step = value.substr(1);\n this._m = {\n direction: value.substr(0, 1),\n steps: step ? toInt(step) ? toInt(step) : step : 0\n };\n }\n });\n define(Run, 'length', {\n /**\n * Gets value of the running distance based\n * on zero-indexing number of slides.\n *\n * @return {Number}\n */\n get: function get() {\n var settings = Glide.settings;\n var length = Components.Html.slides.length; // If the `bound` option is active, a maximum running distance should be\n // reduced by `perView` and `focusAt` settings. Running distance\n // should end before creating an empty space after instance.\n\n if (this.isBound()) {\n return length - 1 - (toInt(settings.perView) - 1) + toInt(settings.focusAt);\n }\n\n return length - 1;\n }\n });\n define(Run, 'offset', {\n /**\n * Gets status of the offsetting flag.\n *\n * @return {Boolean}\n */\n get: function get() {\n return this._o;\n }\n });\n return Run;\n}\n\n/**\n * Returns a current time.\n *\n * @return {Number}\n */\nfunction now() {\n return new Date().getTime();\n}\n\n/**\n * Returns a function, that, when invoked, will only be triggered\n * at most once during a given window of time.\n *\n * @param {Function} func\n * @param {Number} wait\n * @param {Object=} options\n * @return {Function}\n *\n * @see https://github.com/jashkenas/underscore\n */\n\nfunction throttle(func, wait, options) {\n var timeout, context, args, result;\n var previous = 0;\n if (!options) options = {};\n\n var later = function later() {\n previous = options.leading === false ? 0 : now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n var throttled = function throttled() {\n var at = now();\n if (!previous && options.leading === false) previous = at;\n var remaining = wait - (at - previous);\n context = this;\n args = arguments;\n\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n\n previous = at;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n\n return result;\n };\n\n throttled.cancel = function () {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\n}\n\nvar MARGIN_TYPE = {\n ltr: ['marginLeft', 'marginRight'],\n rtl: ['marginRight', 'marginLeft']\n};\nfunction Gaps (Glide, Components, Events) {\n var Gaps = {\n /**\n * Applies gaps between slides. First and last\n * slides do not receive it's edge margins.\n *\n * @param {HTMLCollection} slides\n * @return {Void}\n */\n apply: function apply(slides) {\n for (var i = 0, len = slides.length; i < len; i++) {\n var style = slides[i].style;\n var direction = Components.Direction.value;\n\n if (i !== 0) {\n style[MARGIN_TYPE[direction][0]] = \"\".concat(this.value / 2, \"px\");\n } else {\n style[MARGIN_TYPE[direction][0]] = '';\n }\n\n if (i !== slides.length - 1) {\n style[MARGIN_TYPE[direction][1]] = \"\".concat(this.value / 2, \"px\");\n } else {\n style[MARGIN_TYPE[direction][1]] = '';\n }\n }\n },\n\n /**\n * Removes gaps from the slides.\n *\n * @param {HTMLCollection} slides\n * @returns {Void}\n */\n remove: function remove(slides) {\n for (var i = 0, len = slides.length; i < len; i++) {\n var style = slides[i].style;\n style.marginLeft = '';\n style.marginRight = '';\n }\n }\n };\n define(Gaps, 'value', {\n /**\n * Gets value of the gap.\n *\n * @returns {Number}\n */\n get: function get() {\n return toInt(Glide.settings.gap);\n }\n });\n define(Gaps, 'grow', {\n /**\n * Gets additional dimensions value caused by gaps.\n * Used to increase width of the slides wrapper.\n *\n * @returns {Number}\n */\n get: function get() {\n return Gaps.value * Components.Sizes.length;\n }\n });\n define(Gaps, 'reductor', {\n /**\n * Gets reduction value caused by gaps.\n * Used to subtract width of the slides.\n *\n * @returns {Number}\n */\n get: function get() {\n var perView = Glide.settings.perView;\n return Gaps.value * (perView - 1) / perView;\n }\n });\n /**\n * Apply calculated gaps:\n * - after building, so slides (including clones) will receive proper margins\n * - on updating via API, to recalculate gaps with new options\n */\n\n Events.on(['build.after', 'update'], throttle(function () {\n Gaps.apply(Components.Html.wrapper.children);\n }, 30));\n /**\n * Remove gaps:\n * - on destroying to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Gaps.remove(Components.Html.wrapper.children);\n });\n return Gaps;\n}\n\n/**\n * Finds siblings nodes of the passed node.\n *\n * @param {Element} node\n * @return {Array}\n */\nfunction siblings(node) {\n if (node && node.parentNode) {\n var n = node.parentNode.firstChild;\n var matched = [];\n\n for (; n; n = n.nextSibling) {\n if (n.nodeType === 1 && n !== node) {\n matched.push(n);\n }\n }\n\n return matched;\n }\n\n return [];\n}\n/**\n * Checks if passed node exist and is a valid element.\n *\n * @param {Element} node\n * @return {Boolean}\n */\n\nfunction exist(node) {\n if (node && node instanceof window.HTMLElement) {\n return true;\n }\n\n return false;\n}\n/**\n * Coerces a NodeList to an Array.\n *\n * @param {NodeList} nodeList\n * @return {Array}\n */\n\nfunction toArray(nodeList) {\n return Array.prototype.slice.call(nodeList);\n}\n\nvar TRACK_SELECTOR = '[data-glide-el=\"track\"]';\nfunction Html (Glide, Components, Events) {\n var Html = {\n /**\n * Setup slider HTML nodes.\n *\n * @param {Glide} glide\n */\n mount: function mount() {\n this.root = Glide.selector;\n this.track = this.root.querySelector(TRACK_SELECTOR);\n this.collectSlides();\n },\n\n /**\n * Collect slides\n */\n collectSlides: function collectSlides() {\n this.slides = toArray(this.wrapper.children).filter(function (slide) {\n return !slide.classList.contains(Glide.settings.classes.slide.clone);\n });\n }\n };\n define(Html, 'root', {\n /**\n * Gets node of the glide main element.\n *\n * @return {Object}\n */\n get: function get() {\n return Html._r;\n },\n\n /**\n * Sets node of the glide main element.\n *\n * @return {Object}\n */\n set: function set(r) {\n if (isString(r)) {\n r = document.querySelector(r);\n }\n\n if (exist(r)) {\n Html._r = r;\n } else {\n warn('Root element must be a existing Html node');\n }\n }\n });\n define(Html, 'track', {\n /**\n * Gets node of the glide track with slides.\n *\n * @return {Object}\n */\n get: function get() {\n return Html._t;\n },\n\n /**\n * Sets node of the glide track with slides.\n *\n * @return {Object}\n */\n set: function set(t) {\n if (exist(t)) {\n Html._t = t;\n } else {\n warn(\"Could not find track element. Please use \".concat(TRACK_SELECTOR, \" attribute.\"));\n }\n }\n });\n define(Html, 'wrapper', {\n /**\n * Gets node of the slides wrapper.\n *\n * @return {Object}\n */\n get: function get() {\n return Html.track.children[0];\n }\n });\n /**\n * Add/remove/reorder dynamic slides\n */\n\n Events.on('update', function () {\n Html.collectSlides();\n });\n return Html;\n}\n\nfunction Peek (Glide, Components, Events) {\n var Peek = {\n /**\n * Setups how much to peek based on settings.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.value = Glide.settings.peek;\n }\n };\n define(Peek, 'value', {\n /**\n * Gets value of the peek.\n *\n * @returns {Number|Object}\n */\n get: function get() {\n return Peek._v;\n },\n\n /**\n * Sets value of the peek.\n *\n * @param {Number|Object} value\n * @return {Void}\n */\n set: function set(value) {\n if (isObject(value)) {\n value.before = toInt(value.before);\n value.after = toInt(value.after);\n } else {\n value = toInt(value);\n }\n\n Peek._v = value;\n }\n });\n define(Peek, 'reductor', {\n /**\n * Gets reduction value caused by peek.\n *\n * @returns {Number}\n */\n get: function get() {\n var value = Peek.value;\n var perView = Glide.settings.perView;\n\n if (isObject(value)) {\n return value.before / perView + value.after / perView;\n }\n\n return value * 2 / perView;\n }\n });\n /**\n * Recalculate peeking sizes on:\n * - when resizing window to update to proper percents\n */\n\n Events.on(['resize', 'update'], function () {\n Peek.mount();\n });\n return Peek;\n}\n\nfunction Move (Glide, Components, Events) {\n var Move = {\n /**\n * Constructs move component.\n *\n * @returns {Void}\n */\n mount: function mount() {\n this._o = 0;\n },\n\n /**\n * Calculates a movement value based on passed offset and currently active index.\n *\n * @param {Number} offset\n * @return {Void}\n */\n make: function make() {\n var _this = this;\n\n var offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n this.offset = offset;\n Events.emit('move', {\n movement: this.value\n });\n Components.Transition.after(function () {\n Events.emit('move.after', {\n movement: _this.value\n });\n });\n }\n };\n define(Move, 'offset', {\n /**\n * Gets an offset value used to modify current translate.\n *\n * @return {Object}\n */\n get: function get() {\n return Move._o;\n },\n\n /**\n * Sets an offset value used to modify current translate.\n *\n * @return {Object}\n */\n set: function set(value) {\n Move._o = !isUndefined(value) ? toInt(value) : 0;\n }\n });\n define(Move, 'translate', {\n /**\n * Gets a raw movement value.\n *\n * @return {Number}\n */\n get: function get() {\n return Components.Sizes.slideWidth * Glide.index;\n }\n });\n define(Move, 'value', {\n /**\n * Gets an actual movement value corrected by offset.\n *\n * @return {Number}\n */\n get: function get() {\n var offset = this.offset;\n var translate = this.translate;\n\n if (Components.Direction.is('rtl')) {\n return translate + offset;\n }\n\n return translate - offset;\n }\n });\n /**\n * Make movement to proper slide on:\n * - before build, so glide will start at `startAt` index\n * - on each standard run to move to newly calculated index\n */\n\n Events.on(['build.before', 'run'], function () {\n Move.make();\n });\n return Move;\n}\n\nfunction Sizes (Glide, Components, Events) {\n var Sizes = {\n /**\n * Setups dimensions of slides.\n *\n * @return {Void}\n */\n setupSlides: function setupSlides() {\n var width = \"\".concat(this.slideWidth, \"px\");\n var slides = Components.Html.slides;\n\n for (var i = 0; i < slides.length; i++) {\n slides[i].style.width = width;\n }\n },\n\n /**\n * Setups dimensions of slides wrapper.\n *\n * @return {Void}\n */\n setupWrapper: function setupWrapper() {\n Components.Html.wrapper.style.width = \"\".concat(this.wrapperSize, \"px\");\n },\n\n /**\n * Removes applied styles from HTML elements.\n *\n * @returns {Void}\n */\n remove: function remove() {\n var slides = Components.Html.slides;\n\n for (var i = 0; i < slides.length; i++) {\n slides[i].style.width = '';\n }\n\n Components.Html.wrapper.style.width = '';\n }\n };\n define(Sizes, 'length', {\n /**\n * Gets count number of the slides.\n *\n * @return {Number}\n */\n get: function get() {\n return Components.Html.slides.length;\n }\n });\n define(Sizes, 'width', {\n /**\n * Gets width value of the slider (visible area).\n *\n * @return {Number}\n */\n get: function get() {\n return Components.Html.track.offsetWidth;\n }\n });\n define(Sizes, 'wrapperSize', {\n /**\n * Gets size of the slides wrapper.\n *\n * @return {Number}\n */\n get: function get() {\n return Sizes.slideWidth * Sizes.length + Components.Gaps.grow + Components.Clones.grow;\n }\n });\n define(Sizes, 'slideWidth', {\n /**\n * Gets width value of a single slide.\n *\n * @return {Number}\n */\n get: function get() {\n return Sizes.width / Glide.settings.perView - Components.Peek.reductor - Components.Gaps.reductor;\n }\n });\n /**\n * Apply calculated glide's dimensions:\n * - before building, so other dimensions (e.g. translate) will be calculated propertly\n * - when resizing window to recalculate sildes dimensions\n * - on updating via API, to calculate dimensions based on new options\n */\n\n Events.on(['build.before', 'resize', 'update'], function () {\n Sizes.setupSlides();\n Sizes.setupWrapper();\n });\n /**\n * Remove calculated glide's dimensions:\n * - on destoting to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Sizes.remove();\n });\n return Sizes;\n}\n\nfunction Build (Glide, Components, Events) {\n var Build = {\n /**\n * Init glide building. Adds classes, sets\n * dimensions and setups initial state.\n *\n * @return {Void}\n */\n mount: function mount() {\n Events.emit('build.before');\n this.typeClass();\n this.activeClass();\n Events.emit('build.after');\n },\n\n /**\n * Adds `type` class to the glide element.\n *\n * @return {Void}\n */\n typeClass: function typeClass() {\n Components.Html.root.classList.add(Glide.settings.classes.type[Glide.settings.type]);\n },\n\n /**\n * Sets active class to current slide.\n *\n * @return {Void}\n */\n activeClass: function activeClass() {\n var classes = Glide.settings.classes;\n var slide = Components.Html.slides[Glide.index];\n\n if (slide) {\n slide.classList.add(classes.slide.active);\n siblings(slide).forEach(function (sibling) {\n sibling.classList.remove(classes.slide.active);\n });\n }\n },\n\n /**\n * Removes HTML classes applied at building.\n *\n * @return {Void}\n */\n removeClasses: function removeClasses() {\n var _Glide$settings$class = Glide.settings.classes,\n type = _Glide$settings$class.type,\n slide = _Glide$settings$class.slide;\n Components.Html.root.classList.remove(type[Glide.settings.type]);\n Components.Html.slides.forEach(function (sibling) {\n sibling.classList.remove(slide.active);\n });\n }\n };\n /**\n * Clear building classes:\n * - on destroying to bring HTML to its initial state\n * - on updating to remove classes before remounting component\n */\n\n Events.on(['destroy', 'update'], function () {\n Build.removeClasses();\n });\n /**\n * Remount component:\n * - on resizing of the window to calculate new dimensions\n * - on updating settings via API\n */\n\n Events.on(['resize', 'update'], function () {\n Build.mount();\n });\n /**\n * Swap active class of current slide:\n * - after each move to the new index\n */\n\n Events.on('move.after', function () {\n Build.activeClass();\n });\n return Build;\n}\n\nfunction Clones (Glide, Components, Events) {\n var Clones = {\n /**\n * Create pattern map and collect slides to be cloned.\n */\n mount: function mount() {\n this.items = [];\n\n if (Glide.isType('carousel')) {\n this.items = this.collect();\n }\n },\n\n /**\n * Collect clones with pattern.\n *\n * @return {[]}\n */\n collect: function collect() {\n var items = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var slides = Components.Html.slides;\n var _Glide$settings = Glide.settings,\n perView = _Glide$settings.perView,\n classes = _Glide$settings.classes,\n cloningRatio = _Glide$settings.cloningRatio;\n\n if (slides.length !== 0) {\n var peekIncrementer = +!!Glide.settings.peek;\n var cloneCount = perView + peekIncrementer + Math.round(perView / 2);\n var append = slides.slice(0, cloneCount).reverse();\n var prepend = slides.slice(cloneCount * -1);\n\n for (var r = 0; r < Math.max(cloningRatio, Math.floor(perView / slides.length)); r++) {\n for (var i = 0; i < append.length; i++) {\n var clone = append[i].cloneNode(true);\n clone.classList.add(classes.slide.clone);\n items.push(clone);\n }\n\n for (var _i = 0; _i < prepend.length; _i++) {\n var _clone = prepend[_i].cloneNode(true);\n\n _clone.classList.add(classes.slide.clone);\n\n items.unshift(_clone);\n }\n }\n }\n\n return items;\n },\n\n /**\n * Append cloned slides with generated pattern.\n *\n * @return {Void}\n */\n append: function append() {\n var items = this.items;\n var _Components$Html = Components.Html,\n wrapper = _Components$Html.wrapper,\n slides = _Components$Html.slides;\n var half = Math.floor(items.length / 2);\n var prepend = items.slice(0, half).reverse();\n var append = items.slice(half * -1).reverse();\n var width = \"\".concat(Components.Sizes.slideWidth, \"px\");\n\n for (var i = 0; i < append.length; i++) {\n wrapper.appendChild(append[i]);\n }\n\n for (var _i2 = 0; _i2 < prepend.length; _i2++) {\n wrapper.insertBefore(prepend[_i2], slides[0]);\n }\n\n for (var _i3 = 0; _i3 < items.length; _i3++) {\n items[_i3].style.width = width;\n }\n },\n\n /**\n * Remove all cloned slides.\n *\n * @return {Void}\n */\n remove: function remove() {\n var items = this.items;\n\n for (var i = 0; i < items.length; i++) {\n Components.Html.wrapper.removeChild(items[i]);\n }\n }\n };\n define(Clones, 'grow', {\n /**\n * Gets additional dimensions value caused by clones.\n *\n * @return {Number}\n */\n get: function get() {\n return (Components.Sizes.slideWidth + Components.Gaps.value) * Clones.items.length;\n }\n });\n /**\n * Append additional slide's clones:\n * - while glide's type is `carousel`\n */\n\n Events.on('update', function () {\n Clones.remove();\n Clones.mount();\n Clones.append();\n });\n /**\n * Append additional slide's clones:\n * - while glide's type is `carousel`\n */\n\n Events.on('build.before', function () {\n if (Glide.isType('carousel')) {\n Clones.append();\n }\n });\n /**\n * Remove clones HTMLElements:\n * - on destroying, to bring HTML to its initial state\n */\n\n Events.on('destroy', function () {\n Clones.remove();\n });\n return Clones;\n}\n\nvar EventsBinder = /*#__PURE__*/function () {\n /**\n * Construct a EventsBinder instance.\n */\n function EventsBinder() {\n var listeners = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, EventsBinder);\n\n this.listeners = listeners;\n }\n /**\n * Adds events listeners to arrows HTML elements.\n *\n * @param {String|Array} events\n * @param {Element|Window|Document} el\n * @param {Function} closure\n * @param {Boolean|Object} capture\n * @return {Void}\n */\n\n\n _createClass(EventsBinder, [{\n key: \"on\",\n value: function on(events, el, closure) {\n var capture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n if (isString(events)) {\n events = [events];\n }\n\n for (var i = 0; i < events.length; i++) {\n this.listeners[events[i]] = closure;\n el.addEventListener(events[i], this.listeners[events[i]], capture);\n }\n }\n /**\n * Removes event listeners from arrows HTML elements.\n *\n * @param {String|Array} events\n * @param {Element|Window|Document} el\n * @param {Boolean|Object} capture\n * @return {Void}\n */\n\n }, {\n key: \"off\",\n value: function off(events, el) {\n var capture = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n if (isString(events)) {\n events = [events];\n }\n\n for (var i = 0; i < events.length; i++) {\n el.removeEventListener(events[i], this.listeners[events[i]], capture);\n }\n }\n /**\n * Destroy collected listeners.\n *\n * @returns {Void}\n */\n\n }, {\n key: \"destroy\",\n value: function destroy() {\n delete this.listeners;\n }\n }]);\n\n return EventsBinder;\n}();\n\nfunction Resize (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var Resize = {\n /**\n * Initializes window bindings.\n */\n mount: function mount() {\n this.bind();\n },\n\n /**\n * Binds `rezsize` listener to the window.\n * It's a costly event, so we are debouncing it.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('resize', window, throttle(function () {\n Events.emit('resize');\n }, Glide.settings.throttle));\n },\n\n /**\n * Unbinds listeners from the window.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('resize', window);\n }\n };\n /**\n * Remove bindings from window:\n * - on destroying, to remove added EventListener\n */\n\n Events.on('destroy', function () {\n Resize.unbind();\n Binder.destroy();\n });\n return Resize;\n}\n\nvar VALID_DIRECTIONS = ['ltr', 'rtl'];\nvar FLIPED_MOVEMENTS = {\n '>': '<',\n '<': '>',\n '=': '='\n};\nfunction Direction (Glide, Components, Events) {\n var Direction = {\n /**\n * Setups gap value based on settings.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.value = Glide.settings.direction;\n },\n\n /**\n * Resolves pattern based on direction value\n *\n * @param {String} pattern\n * @returns {String}\n */\n resolve: function resolve(pattern) {\n var token = pattern.slice(0, 1);\n\n if (this.is('rtl')) {\n return pattern.split(token).join(FLIPED_MOVEMENTS[token]);\n }\n\n return pattern;\n },\n\n /**\n * Checks value of direction mode.\n *\n * @param {String} direction\n * @returns {Boolean}\n */\n is: function is(direction) {\n return this.value === direction;\n },\n\n /**\n * Applies direction class to the root HTML element.\n *\n * @return {Void}\n */\n addClass: function addClass() {\n Components.Html.root.classList.add(Glide.settings.classes.direction[this.value]);\n },\n\n /**\n * Removes direction class from the root HTML element.\n *\n * @return {Void}\n */\n removeClass: function removeClass() {\n Components.Html.root.classList.remove(Glide.settings.classes.direction[this.value]);\n }\n };\n define(Direction, 'value', {\n /**\n * Gets value of the direction.\n *\n * @returns {Number}\n */\n get: function get() {\n return Direction._v;\n },\n\n /**\n * Sets value of the direction.\n *\n * @param {String} value\n * @return {Void}\n */\n set: function set(value) {\n if (VALID_DIRECTIONS.indexOf(value) > -1) {\n Direction._v = value;\n } else {\n warn('Direction value must be `ltr` or `rtl`');\n }\n }\n });\n /**\n * Clear direction class:\n * - on destroy to bring HTML to its initial state\n * - on update to remove class before reappling bellow\n */\n\n Events.on(['destroy', 'update'], function () {\n Direction.removeClass();\n });\n /**\n * Remount component:\n * - on update to reflect changes in direction value\n */\n\n Events.on('update', function () {\n Direction.mount();\n });\n /**\n * Apply direction class:\n * - before building to apply class for the first time\n * - on updating to reapply direction class that may changed\n */\n\n Events.on(['build.before', 'update'], function () {\n Direction.addClass();\n });\n return Direction;\n}\n\n/**\n * Reflects value of glide movement.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\nfunction Rtl (Glide, Components) {\n return {\n /**\n * Negates the passed translate if glide is in RTL option.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n if (Components.Direction.is('rtl')) {\n return -translate;\n }\n\n return translate;\n }\n };\n}\n\n/**\n * Updates glide movement with a `gap` settings.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\nfunction Gap (Glide, Components) {\n return {\n /**\n * Modifies passed translate value with number in the `gap` settings.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n var multiplier = Math.floor(translate / Components.Sizes.slideWidth);\n return translate + Components.Gaps.value * multiplier;\n }\n };\n}\n\n/**\n * Updates glide movement with width of additional clones width.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\nfunction Grow (Glide, Components) {\n return {\n /**\n * Adds to the passed translate width of the half of clones.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n return translate + Components.Clones.grow / 2;\n }\n };\n}\n\n/**\n * Updates glide movement with a `peek` settings.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\n\nfunction Peeking (Glide, Components) {\n return {\n /**\n * Modifies passed translate value with a `peek` setting.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n if (Glide.settings.focusAt >= 0) {\n var peek = Components.Peek.value;\n\n if (isObject(peek)) {\n return translate - peek.before;\n }\n\n return translate - peek;\n }\n\n return translate;\n }\n };\n}\n\n/**\n * Updates glide movement with a `focusAt` settings.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\nfunction Focusing (Glide, Components) {\n return {\n /**\n * Modifies passed translate value with index in the `focusAt` setting.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n var gap = Components.Gaps.value;\n var width = Components.Sizes.width;\n var focusAt = Glide.settings.focusAt;\n var slideWidth = Components.Sizes.slideWidth;\n\n if (focusAt === 'center') {\n return translate - (width / 2 - slideWidth / 2);\n }\n\n return translate - slideWidth * focusAt - gap * focusAt;\n }\n };\n}\n\n/**\n * Applies diffrent transformers on translate value.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\n\nfunction mutator (Glide, Components, Events) {\n /**\n * Merge instance transformers with collection of default transformers.\n * It's important that the Rtl component be last on the list,\n * so it reflects all previous transformations.\n *\n * @type {Array}\n */\n var TRANSFORMERS = [Gap, Grow, Peeking, Focusing].concat(Glide._t, [Rtl]);\n return {\n /**\n * Piplines translate value with registered transformers.\n *\n * @param {Number} translate\n * @return {Number}\n */\n mutate: function mutate(translate) {\n for (var i = 0; i < TRANSFORMERS.length; i++) {\n var transformer = TRANSFORMERS[i];\n\n if (isFunction(transformer) && isFunction(transformer().modify)) {\n translate = transformer(Glide, Components, Events).modify(translate);\n } else {\n warn('Transformer should be a function that returns an object with `modify()` method');\n }\n }\n\n return translate;\n }\n };\n}\n\nfunction Translate (Glide, Components, Events) {\n var Translate = {\n /**\n * Sets value of translate on HTML element.\n *\n * @param {Number} value\n * @return {Void}\n */\n set: function set(value) {\n var transform = mutator(Glide, Components).mutate(value);\n var translate3d = \"translate3d(\".concat(-1 * transform, \"px, 0px, 0px)\");\n Components.Html.wrapper.style.mozTransform = translate3d; // needed for supported Firefox 10-15\n\n Components.Html.wrapper.style.webkitTransform = translate3d; // needed for supported Chrome 10-35, Safari 5.1-8, and Opera 15-22\n\n Components.Html.wrapper.style.transform = translate3d;\n },\n\n /**\n * Removes value of translate from HTML element.\n *\n * @return {Void}\n */\n remove: function remove() {\n Components.Html.wrapper.style.transform = '';\n },\n\n /**\n * @return {number}\n */\n getStartIndex: function getStartIndex() {\n var length = Components.Sizes.length;\n var index = Glide.index;\n var perView = Glide.settings.perView;\n\n if (Components.Run.isOffset('>') || Components.Run.isOffset('|>')) {\n return length + (index - perView);\n } // \"modulo length\" converts an index that equals length to zero\n\n\n return (index + perView) % length;\n },\n\n /**\n * @return {number}\n */\n getTravelDistance: function getTravelDistance() {\n var travelDistance = Components.Sizes.slideWidth * Glide.settings.perView;\n\n if (Components.Run.isOffset('>') || Components.Run.isOffset('|>')) {\n // reverse travel distance so that we don't have to change subtract operations\n return travelDistance * -1;\n }\n\n return travelDistance;\n }\n };\n /**\n * Set new translate value:\n * - on move to reflect index change\n * - on updating via API to reflect possible changes in options\n */\n\n Events.on('move', function (context) {\n if (!Glide.isType('carousel') || !Components.Run.isOffset()) {\n return Translate.set(context.movement);\n }\n\n Components.Transition.after(function () {\n Events.emit('translate.jump');\n Translate.set(Components.Sizes.slideWidth * Glide.index);\n });\n var startWidth = Components.Sizes.slideWidth * Components.Translate.getStartIndex();\n return Translate.set(startWidth - Components.Translate.getTravelDistance());\n });\n /**\n * Remove translate:\n * - on destroying to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Translate.remove();\n });\n return Translate;\n}\n\nfunction Transition (Glide, Components, Events) {\n /**\n * Holds inactivity status of transition.\n * When true transition is not applied.\n *\n * @type {Boolean}\n */\n var disabled = false;\n var Transition = {\n /**\n * Composes string of the CSS transition.\n *\n * @param {String} property\n * @return {String}\n */\n compose: function compose(property) {\n var settings = Glide.settings;\n\n if (!disabled) {\n return \"\".concat(property, \" \").concat(this.duration, \"ms \").concat(settings.animationTimingFunc);\n }\n\n return \"\".concat(property, \" 0ms \").concat(settings.animationTimingFunc);\n },\n\n /**\n * Sets value of transition on HTML element.\n *\n * @param {String=} property\n * @return {Void}\n */\n set: function set() {\n var property = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'transform';\n Components.Html.wrapper.style.transition = this.compose(property);\n },\n\n /**\n * Removes value of transition from HTML element.\n *\n * @return {Void}\n */\n remove: function remove() {\n Components.Html.wrapper.style.transition = '';\n },\n\n /**\n * Runs callback after animation.\n *\n * @param {Function} callback\n * @return {Void}\n */\n after: function after(callback) {\n setTimeout(function () {\n callback();\n }, this.duration);\n },\n\n /**\n * Enable transition.\n *\n * @return {Void}\n */\n enable: function enable() {\n disabled = false;\n this.set();\n },\n\n /**\n * Disable transition.\n *\n * @return {Void}\n */\n disable: function disable() {\n disabled = true;\n this.set();\n }\n };\n define(Transition, 'duration', {\n /**\n * Gets duration of the transition based\n * on currently running animation type.\n *\n * @return {Number}\n */\n get: function get() {\n var settings = Glide.settings;\n\n if (Glide.isType('slider') && Components.Run.offset) {\n return settings.rewindDuration;\n }\n\n return settings.animationDuration;\n }\n });\n /**\n * Set transition `style` value:\n * - on each moving, because it may be cleared by offset move\n */\n\n Events.on('move', function () {\n Transition.set();\n });\n /**\n * Disable transition:\n * - before initial build to avoid transitioning from `0` to `startAt` index\n * - while resizing window and recalculating dimensions\n * - on jumping from offset transition at start and end edges in `carousel` type\n */\n\n Events.on(['build.before', 'resize', 'translate.jump'], function () {\n Transition.disable();\n });\n /**\n * Enable transition:\n * - on each running, because it may be disabled by offset move\n */\n\n Events.on('run', function () {\n Transition.enable();\n });\n /**\n * Remove transition:\n * - on destroying to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Transition.remove();\n });\n return Transition;\n}\n\n/**\n * Test via a getter in the options object to see\n * if the passive property is accessed.\n *\n * @see https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection\n */\nvar supportsPassive = false;\n\ntry {\n var opts = Object.defineProperty({}, 'passive', {\n get: function get() {\n supportsPassive = true;\n }\n });\n window.addEventListener('testPassive', null, opts);\n window.removeEventListener('testPassive', null, opts);\n} catch (e) {}\n\nvar supportsPassive$1 = supportsPassive;\n\nvar START_EVENTS = ['touchstart', 'mousedown'];\nvar MOVE_EVENTS = ['touchmove', 'mousemove'];\nvar END_EVENTS = ['touchend', 'touchcancel', 'mouseup', 'mouseleave'];\nvar MOUSE_EVENTS = ['mousedown', 'mousemove', 'mouseup', 'mouseleave'];\nfunction Swipe (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var swipeSin = 0;\n var swipeStartX = 0;\n var swipeStartY = 0;\n var disabled = false;\n var capture = supportsPassive$1 ? {\n passive: true\n } : false;\n var Swipe = {\n /**\n * Initializes swipe bindings.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.bindSwipeStart();\n },\n\n /**\n * Handler for `swipestart` event. Calculates entry points of the user's tap.\n *\n * @param {Object} event\n * @return {Void}\n */\n start: function start(event) {\n if (!disabled && !Glide.disabled) {\n this.disable();\n var swipe = this.touches(event);\n swipeSin = null;\n swipeStartX = toInt(swipe.pageX);\n swipeStartY = toInt(swipe.pageY);\n this.bindSwipeMove();\n this.bindSwipeEnd();\n Events.emit('swipe.start');\n }\n },\n\n /**\n * Handler for `swipemove` event. Calculates user's tap angle and distance.\n *\n * @param {Object} event\n */\n move: function move(event) {\n if (!Glide.disabled) {\n var _Glide$settings = Glide.settings,\n touchAngle = _Glide$settings.touchAngle,\n touchRatio = _Glide$settings.touchRatio,\n classes = _Glide$settings.classes;\n var swipe = this.touches(event);\n var subExSx = toInt(swipe.pageX) - swipeStartX;\n var subEySy = toInt(swipe.pageY) - swipeStartY;\n var powEX = Math.abs(subExSx << 2);\n var powEY = Math.abs(subEySy << 2);\n var swipeHypotenuse = Math.sqrt(powEX + powEY);\n var swipeCathetus = Math.sqrt(powEY);\n swipeSin = Math.asin(swipeCathetus / swipeHypotenuse);\n\n if (swipeSin * 180 / Math.PI < touchAngle) {\n event.stopPropagation();\n Components.Move.make(subExSx * toFloat(touchRatio));\n Components.Html.root.classList.add(classes.dragging);\n Events.emit('swipe.move');\n } else {\n return false;\n }\n }\n },\n\n /**\n * Handler for `swipeend` event. Finitializes user's tap and decides about glide move.\n *\n * @param {Object} event\n * @return {Void}\n */\n end: function end(event) {\n if (!Glide.disabled) {\n var _Glide$settings2 = Glide.settings,\n perSwipe = _Glide$settings2.perSwipe,\n touchAngle = _Glide$settings2.touchAngle,\n classes = _Glide$settings2.classes;\n var swipe = this.touches(event);\n var threshold = this.threshold(event);\n var swipeDistance = swipe.pageX - swipeStartX;\n var swipeDeg = swipeSin * 180 / Math.PI;\n this.enable();\n\n if (swipeDistance > threshold && swipeDeg < touchAngle) {\n Components.Run.make(Components.Direction.resolve(\"\".concat(perSwipe, \"<\")));\n } else if (swipeDistance < -threshold && swipeDeg < touchAngle) {\n Components.Run.make(Components.Direction.resolve(\"\".concat(perSwipe, \">\")));\n } else {\n // While swipe don't reach distance apply previous transform.\n Components.Move.make();\n }\n\n Components.Html.root.classList.remove(classes.dragging);\n this.unbindSwipeMove();\n this.unbindSwipeEnd();\n Events.emit('swipe.end');\n }\n },\n\n /**\n * Binds swipe's starting event.\n *\n * @return {Void}\n */\n bindSwipeStart: function bindSwipeStart() {\n var _this = this;\n\n var _Glide$settings3 = Glide.settings,\n swipeThreshold = _Glide$settings3.swipeThreshold,\n dragThreshold = _Glide$settings3.dragThreshold;\n\n if (swipeThreshold) {\n Binder.on(START_EVENTS[0], Components.Html.wrapper, function (event) {\n _this.start(event);\n }, capture);\n }\n\n if (dragThreshold) {\n Binder.on(START_EVENTS[1], Components.Html.wrapper, function (event) {\n _this.start(event);\n }, capture);\n }\n },\n\n /**\n * Unbinds swipe's starting event.\n *\n * @return {Void}\n */\n unbindSwipeStart: function unbindSwipeStart() {\n Binder.off(START_EVENTS[0], Components.Html.wrapper, capture);\n Binder.off(START_EVENTS[1], Components.Html.wrapper, capture);\n },\n\n /**\n * Binds swipe's moving event.\n *\n * @return {Void}\n */\n bindSwipeMove: function bindSwipeMove() {\n var _this2 = this;\n\n Binder.on(MOVE_EVENTS, Components.Html.wrapper, throttle(function (event) {\n _this2.move(event);\n }, Glide.settings.throttle), capture);\n },\n\n /**\n * Unbinds swipe's moving event.\n *\n * @return {Void}\n */\n unbindSwipeMove: function unbindSwipeMove() {\n Binder.off(MOVE_EVENTS, Components.Html.wrapper, capture);\n },\n\n /**\n * Binds swipe's ending event.\n *\n * @return {Void}\n */\n bindSwipeEnd: function bindSwipeEnd() {\n var _this3 = this;\n\n Binder.on(END_EVENTS, Components.Html.wrapper, function (event) {\n _this3.end(event);\n });\n },\n\n /**\n * Unbinds swipe's ending event.\n *\n * @return {Void}\n */\n unbindSwipeEnd: function unbindSwipeEnd() {\n Binder.off(END_EVENTS, Components.Html.wrapper);\n },\n\n /**\n * Normalizes event touches points accorting to different types.\n *\n * @param {Object} event\n */\n touches: function touches(event) {\n if (MOUSE_EVENTS.indexOf(event.type) > -1) {\n return event;\n }\n\n return event.touches[0] || event.changedTouches[0];\n },\n\n /**\n * Gets value of minimum swipe distance settings based on event type.\n *\n * @return {Number}\n */\n threshold: function threshold(event) {\n var settings = Glide.settings;\n\n if (MOUSE_EVENTS.indexOf(event.type) > -1) {\n return settings.dragThreshold;\n }\n\n return settings.swipeThreshold;\n },\n\n /**\n * Enables swipe event.\n *\n * @return {self}\n */\n enable: function enable() {\n disabled = false;\n Components.Transition.enable();\n return this;\n },\n\n /**\n * Disables swipe event.\n *\n * @return {self}\n */\n disable: function disable() {\n disabled = true;\n Components.Transition.disable();\n return this;\n }\n };\n /**\n * Add component class:\n * - after initial building\n */\n\n Events.on('build.after', function () {\n Components.Html.root.classList.add(Glide.settings.classes.swipeable);\n });\n /**\n * Remove swiping bindings:\n * - on destroying, to remove added EventListeners\n */\n\n Events.on('destroy', function () {\n Swipe.unbindSwipeStart();\n Swipe.unbindSwipeMove();\n Swipe.unbindSwipeEnd();\n Binder.destroy();\n });\n return Swipe;\n}\n\nfunction Images (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var Images = {\n /**\n * Binds listener to glide wrapper.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.bind();\n },\n\n /**\n * Binds `dragstart` event on wrapper to prevent dragging images.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('dragstart', Components.Html.wrapper, this.dragstart);\n },\n\n /**\n * Unbinds `dragstart` event on wrapper.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('dragstart', Components.Html.wrapper);\n },\n\n /**\n * Event handler. Prevents dragging.\n *\n * @return {Void}\n */\n dragstart: function dragstart(event) {\n event.preventDefault();\n }\n };\n /**\n * Remove bindings from images:\n * - on destroying, to remove added EventListeners\n */\n\n Events.on('destroy', function () {\n Images.unbind();\n Binder.destroy();\n });\n return Images;\n}\n\nfunction Anchors (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n /**\n * Holds detaching status of anchors.\n * Prevents detaching of already detached anchors.\n *\n * @private\n * @type {Boolean}\n */\n\n var detached = false;\n /**\n * Holds preventing status of anchors.\n * If `true` redirection after click will be disabled.\n *\n * @private\n * @type {Boolean}\n */\n\n var prevented = false;\n var Anchors = {\n /**\n * Setups a initial state of anchors component.\n *\n * @returns {Void}\n */\n mount: function mount() {\n /**\n * Holds collection of anchors elements.\n *\n * @private\n * @type {HTMLCollection}\n */\n this._a = Components.Html.wrapper.querySelectorAll('a');\n this.bind();\n },\n\n /**\n * Binds events to anchors inside a track.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('click', Components.Html.wrapper, this.click);\n },\n\n /**\n * Unbinds events attached to anchors inside a track.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('click', Components.Html.wrapper);\n },\n\n /**\n * Handler for click event. Prevents clicks when glide is in `prevent` status.\n *\n * @param {Object} event\n * @return {Void}\n */\n click: function click(event) {\n if (prevented) {\n event.stopPropagation();\n event.preventDefault();\n }\n },\n\n /**\n * Detaches anchors click event inside glide.\n *\n * @return {self}\n */\n detach: function detach() {\n prevented = true;\n\n if (!detached) {\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].draggable = false;\n }\n\n detached = true;\n }\n\n return this;\n },\n\n /**\n * Attaches anchors click events inside glide.\n *\n * @return {self}\n */\n attach: function attach() {\n prevented = false;\n\n if (detached) {\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].draggable = true;\n }\n\n detached = false;\n }\n\n return this;\n }\n };\n define(Anchors, 'items', {\n /**\n * Gets collection of the arrows HTML elements.\n *\n * @return {HTMLElement[]}\n */\n get: function get() {\n return Anchors._a;\n }\n });\n /**\n * Detach anchors inside slides:\n * - on swiping, so they won't redirect to its `href` attributes\n */\n\n Events.on('swipe.move', function () {\n Anchors.detach();\n });\n /**\n * Attach anchors inside slides:\n * - after swiping and transitions ends, so they can redirect after click again\n */\n\n Events.on('swipe.end', function () {\n Components.Transition.after(function () {\n Anchors.attach();\n });\n });\n /**\n * Unbind anchors inside slides:\n * - on destroying, to bring anchors to its initial state\n */\n\n Events.on('destroy', function () {\n Anchors.attach();\n Anchors.unbind();\n Binder.destroy();\n });\n return Anchors;\n}\n\nvar NAV_SELECTOR = '[data-glide-el=\"controls[nav]\"]';\nvar CONTROLS_SELECTOR = '[data-glide-el^=\"controls\"]';\nvar PREVIOUS_CONTROLS_SELECTOR = \"\".concat(CONTROLS_SELECTOR, \" [data-glide-dir*=\\\"<\\\"]\");\nvar NEXT_CONTROLS_SELECTOR = \"\".concat(CONTROLS_SELECTOR, \" [data-glide-dir*=\\\">\\\"]\");\nfunction Controls (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var capture = supportsPassive$1 ? {\n passive: true\n } : false;\n var Controls = {\n /**\n * Inits arrows. Binds events listeners\n * to the arrows HTML elements.\n *\n * @return {Void}\n */\n mount: function mount() {\n /**\n * Collection of navigation HTML elements.\n *\n * @private\n * @type {HTMLCollection}\n */\n this._n = Components.Html.root.querySelectorAll(NAV_SELECTOR);\n /**\n * Collection of controls HTML elements.\n *\n * @private\n * @type {HTMLCollection}\n */\n\n this._c = Components.Html.root.querySelectorAll(CONTROLS_SELECTOR);\n /**\n * Collection of arrow control HTML elements.\n *\n * @private\n * @type {Object}\n */\n\n this._arrowControls = {\n previous: Components.Html.root.querySelectorAll(PREVIOUS_CONTROLS_SELECTOR),\n next: Components.Html.root.querySelectorAll(NEXT_CONTROLS_SELECTOR)\n };\n this.addBindings();\n },\n\n /**\n * Sets active class to current slide.\n *\n * @return {Void}\n */\n setActive: function setActive() {\n for (var i = 0; i < this._n.length; i++) {\n this.addClass(this._n[i].children);\n }\n },\n\n /**\n * Removes active class to current slide.\n *\n * @return {Void}\n */\n removeActive: function removeActive() {\n for (var i = 0; i < this._n.length; i++) {\n this.removeClass(this._n[i].children);\n }\n },\n\n /**\n * Toggles active class on items inside navigation.\n *\n * @param {HTMLElement} controls\n * @return {Void}\n */\n addClass: function addClass(controls) {\n var settings = Glide.settings;\n var item = controls[Glide.index];\n\n if (!item) {\n return;\n }\n\n if (item) {\n item.classList.add(settings.classes.nav.active);\n siblings(item).forEach(function (sibling) {\n sibling.classList.remove(settings.classes.nav.active);\n });\n }\n },\n\n /**\n * Removes active class from active control.\n *\n * @param {HTMLElement} controls\n * @return {Void}\n */\n removeClass: function removeClass(controls) {\n var item = controls[Glide.index];\n\n if (item) {\n item.classList.remove(Glide.settings.classes.nav.active);\n }\n },\n\n /**\n * Calculates, removes or adds `Glide.settings.classes.disabledArrow` class on the control arrows\n */\n setArrowState: function setArrowState() {\n if (Glide.settings.rewind) {\n return;\n }\n\n var next = Controls._arrowControls.next;\n var previous = Controls._arrowControls.previous;\n this.resetArrowState(next, previous);\n\n if (Glide.index === 0) {\n this.disableArrow(previous);\n }\n\n if (Glide.index === Components.Run.length) {\n this.disableArrow(next);\n }\n },\n\n /**\n * Removes `Glide.settings.classes.disabledArrow` from given NodeList elements\n *\n * @param {NodeList[]} lists\n */\n resetArrowState: function resetArrowState() {\n var settings = Glide.settings;\n\n for (var _len = arguments.length, lists = new Array(_len), _key = 0; _key < _len; _key++) {\n lists[_key] = arguments[_key];\n }\n\n lists.forEach(function (list) {\n toArray(list).forEach(function (element) {\n element.classList.remove(settings.classes.arrow.disabled);\n });\n });\n },\n\n /**\n * Adds `Glide.settings.classes.disabledArrow` to given NodeList elements\n *\n * @param {NodeList[]} lists\n */\n disableArrow: function disableArrow() {\n var settings = Glide.settings;\n\n for (var _len2 = arguments.length, lists = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n lists[_key2] = arguments[_key2];\n }\n\n lists.forEach(function (list) {\n toArray(list).forEach(function (element) {\n element.classList.add(settings.classes.arrow.disabled);\n });\n });\n },\n\n /**\n * Adds handles to the each group of controls.\n *\n * @return {Void}\n */\n addBindings: function addBindings() {\n for (var i = 0; i < this._c.length; i++) {\n this.bind(this._c[i].children);\n }\n },\n\n /**\n * Removes handles from the each group of controls.\n *\n * @return {Void}\n */\n removeBindings: function removeBindings() {\n for (var i = 0; i < this._c.length; i++) {\n this.unbind(this._c[i].children);\n }\n },\n\n /**\n * Binds events to arrows HTML elements.\n *\n * @param {HTMLCollection} elements\n * @return {Void}\n */\n bind: function bind(elements) {\n for (var i = 0; i < elements.length; i++) {\n Binder.on('click', elements[i], this.click);\n Binder.on('touchstart', elements[i], this.click, capture);\n }\n },\n\n /**\n * Unbinds events binded to the arrows HTML elements.\n *\n * @param {HTMLCollection} elements\n * @return {Void}\n */\n unbind: function unbind(elements) {\n for (var i = 0; i < elements.length; i++) {\n Binder.off(['click', 'touchstart'], elements[i]);\n }\n },\n\n /**\n * Handles `click` event on the arrows HTML elements.\n * Moves slider in direction given via the\n * `data-glide-dir` attribute.\n *\n * @param {Object} event\n * @return {void}\n */\n click: function click(event) {\n if (!supportsPassive$1 && event.type === 'touchstart') {\n event.preventDefault();\n }\n\n var direction = event.currentTarget.getAttribute('data-glide-dir');\n Components.Run.make(Components.Direction.resolve(direction));\n }\n };\n define(Controls, 'items', {\n /**\n * Gets collection of the controls HTML elements.\n *\n * @return {HTMLElement[]}\n */\n get: function get() {\n return Controls._c;\n }\n });\n /**\n * Swap active class of current navigation item:\n * - after mounting to set it to initial index\n * - after each move to the new index\n */\n\n Events.on(['mount.after', 'move.after'], function () {\n Controls.setActive();\n });\n /**\n * Add or remove disabled class of arrow elements\n */\n\n Events.on(['mount.after', 'run'], function () {\n Controls.setArrowState();\n });\n /**\n * Remove bindings and HTML Classes:\n * - on destroying, to bring markup to its initial state\n */\n\n Events.on('destroy', function () {\n Controls.removeBindings();\n Controls.removeActive();\n Binder.destroy();\n });\n return Controls;\n}\n\nfunction Keyboard (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var Keyboard = {\n /**\n * Binds keyboard events on component mount.\n *\n * @return {Void}\n */\n mount: function mount() {\n if (Glide.settings.keyboard) {\n this.bind();\n }\n },\n\n /**\n * Adds keyboard press events.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('keyup', document, this.press);\n },\n\n /**\n * Removes keyboard press events.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('keyup', document);\n },\n\n /**\n * Handles keyboard's arrows press and moving glide foward and backward.\n *\n * @param {Object} event\n * @return {Void}\n */\n press: function press(event) {\n var perSwipe = Glide.settings.perSwipe;\n\n if (event.code === 'ArrowRight') {\n Components.Run.make(Components.Direction.resolve(\"\".concat(perSwipe, \">\")));\n }\n\n if (event.code === 'ArrowLeft') {\n Components.Run.make(Components.Direction.resolve(\"\".concat(perSwipe, \"<\")));\n }\n }\n };\n /**\n * Remove bindings from keyboard:\n * - on destroying to remove added events\n * - on updating to remove events before remounting\n */\n\n Events.on(['destroy', 'update'], function () {\n Keyboard.unbind();\n });\n /**\n * Remount component\n * - on updating to reflect potential changes in settings\n */\n\n Events.on('update', function () {\n Keyboard.mount();\n });\n /**\n * Destroy binder:\n * - on destroying to remove listeners\n */\n\n Events.on('destroy', function () {\n Binder.destroy();\n });\n return Keyboard;\n}\n\nfunction Autoplay (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var Autoplay = {\n /**\n * Initializes autoplaying and events.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.enable();\n this.start();\n\n if (Glide.settings.hoverpause) {\n this.bind();\n }\n },\n\n /**\n * Enables autoplaying\n *\n * @returns {Void}\n */\n enable: function enable() {\n this._e = true;\n },\n\n /**\n * Disables autoplaying.\n *\n * @returns {Void}\n */\n disable: function disable() {\n this._e = false;\n },\n\n /**\n * Starts autoplaying in configured interval.\n *\n * @param {Boolean|Number} force Run autoplaying with passed interval regardless of `autoplay` settings\n * @return {Void}\n */\n start: function start() {\n var _this = this;\n\n if (!this._e) {\n return;\n }\n\n this.enable();\n\n if (Glide.settings.autoplay) {\n if (isUndefined(this._i)) {\n this._i = setInterval(function () {\n _this.stop();\n\n Components.Run.make('>');\n\n _this.start();\n\n Events.emit('autoplay');\n }, this.time);\n }\n }\n },\n\n /**\n * Stops autorunning of the glide.\n *\n * @return {Void}\n */\n stop: function stop() {\n this._i = clearInterval(this._i);\n },\n\n /**\n * Stops autoplaying while mouse is over glide's area.\n *\n * @return {Void}\n */\n bind: function bind() {\n var _this2 = this;\n\n Binder.on('mouseover', Components.Html.root, function () {\n if (_this2._e) {\n _this2.stop();\n }\n });\n Binder.on('mouseout', Components.Html.root, function () {\n if (_this2._e) {\n _this2.start();\n }\n });\n },\n\n /**\n * Unbind mouseover events.\n *\n * @returns {Void}\n */\n unbind: function unbind() {\n Binder.off(['mouseover', 'mouseout'], Components.Html.root);\n }\n };\n define(Autoplay, 'time', {\n /**\n * Gets time period value for the autoplay interval. Prioritizes\n * times in `data-glide-autoplay` attrubutes over options.\n *\n * @return {Number}\n */\n get: function get() {\n var autoplay = Components.Html.slides[Glide.index].getAttribute('data-glide-autoplay');\n\n if (autoplay) {\n return toInt(autoplay);\n }\n\n return toInt(Glide.settings.autoplay);\n }\n });\n /**\n * Stop autoplaying and unbind events:\n * - on destroying, to clear defined interval\n * - on updating via API to reset interval that may changed\n */\n\n Events.on(['destroy', 'update'], function () {\n Autoplay.unbind();\n });\n /**\n * Stop autoplaying:\n * - before each run, to restart autoplaying\n * - on pausing via API\n * - on destroying, to clear defined interval\n * - while starting a swipe\n * - on updating via API to reset interval that may changed\n */\n\n Events.on(['run.before', 'swipe.start', 'update'], function () {\n Autoplay.stop();\n });\n Events.on(['pause', 'destroy'], function () {\n Autoplay.disable();\n Autoplay.stop();\n });\n /**\n * Start autoplaying:\n * - after each run, to restart autoplaying\n * - on playing via API\n * - while ending a swipe\n */\n\n Events.on(['run.after', 'swipe.end'], function () {\n Autoplay.start();\n });\n /**\n * Start autoplaying:\n * - after each run, to restart autoplaying\n * - on playing via API\n * - while ending a swipe\n */\n\n Events.on(['play'], function () {\n Autoplay.enable();\n Autoplay.start();\n });\n /**\n * Remount autoplaying:\n * - on updating via API to reset interval that may changed\n */\n\n Events.on('update', function () {\n Autoplay.mount();\n });\n /**\n * Destroy a binder:\n * - on destroying glide instance to clearup listeners\n */\n\n Events.on('destroy', function () {\n Binder.destroy();\n });\n return Autoplay;\n}\n\n/**\n * Sorts keys of breakpoint object so they will be ordered from lower to bigger.\n *\n * @param {Object} points\n * @returns {Object}\n */\n\nfunction sortBreakpoints(points) {\n if (isObject(points)) {\n return sortKeys(points);\n } else {\n warn(\"Breakpoints option must be an object\");\n }\n\n return {};\n}\n\nfunction Breakpoints (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n /**\n * Holds reference to settings.\n *\n * @type {Object}\n */\n\n var settings = Glide.settings;\n /**\n * Holds reference to breakpoints object in settings. Sorts breakpoints\n * from smaller to larger. It is required in order to proper\n * matching currently active breakpoint settings.\n *\n * @type {Object}\n */\n\n var points = sortBreakpoints(settings.breakpoints);\n /**\n * Cache initial settings before overwritting.\n *\n * @type {Object}\n */\n\n var defaults = Object.assign({}, settings);\n var Breakpoints = {\n /**\n * Matches settings for currectly matching media breakpoint.\n *\n * @param {Object} points\n * @returns {Object}\n */\n match: function match(points) {\n if (typeof window.matchMedia !== 'undefined') {\n for (var point in points) {\n if (points.hasOwnProperty(point)) {\n if (window.matchMedia(\"(max-width: \".concat(point, \"px)\")).matches) {\n return points[point];\n }\n }\n }\n }\n\n return defaults;\n }\n };\n /**\n * Overwrite instance settings with currently matching breakpoint settings.\n * This happens right after component initialization.\n */\n\n Object.assign(settings, Breakpoints.match(points));\n /**\n * Update glide with settings of matched brekpoint:\n * - window resize to update slider\n */\n\n Binder.on('resize', window, throttle(function () {\n Glide.settings = mergeOptions(settings, Breakpoints.match(points));\n }, Glide.settings.throttle));\n /**\n * Resort and update default settings:\n * - on reinit via API, so breakpoint matching will be performed with options\n */\n\n Events.on('update', function () {\n points = sortBreakpoints(points);\n defaults = Object.assign({}, settings);\n });\n /**\n * Unbind resize listener:\n * - on destroying, to bring markup to its initial state\n */\n\n Events.on('destroy', function () {\n Binder.off('resize', window);\n });\n return Breakpoints;\n}\n\nvar COMPONENTS = {\n // Required\n Html: Html,\n Translate: Translate,\n Transition: Transition,\n Direction: Direction,\n Peek: Peek,\n Sizes: Sizes,\n Gaps: Gaps,\n Move: Move,\n Clones: Clones,\n Resize: Resize,\n Build: Build,\n Run: Run,\n // Optional\n Swipe: Swipe,\n Images: Images,\n Anchors: Anchors,\n Controls: Controls,\n Keyboard: Keyboard,\n Autoplay: Autoplay,\n Breakpoints: Breakpoints\n};\n\nvar Glide = /*#__PURE__*/function (_Core) {\n _inherits(Glide, _Core);\n\n var _super = _createSuper(Glide);\n\n function Glide() {\n _classCallCheck(this, Glide);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(Glide, [{\n key: \"mount\",\n value: function mount() {\n var extensions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return _get(_getPrototypeOf(Glide.prototype), \"mount\", this).call(this, Object.assign({}, COMPONENTS, extensions));\n }\n }]);\n\n return Glide;\n}(Glide$1);\n\nexport { Glide as default };\n","const OPENED_CLASS = 'dropdown-links--opened'\r\nconst DROPDOWN_CLASS = 'dropdown-links'\r\n\r\nclass DropdownLinks {\r\n constructor() {\r\n }\r\n\r\n openHandler(event) {\r\n event.stopPropagation()\r\n const currentTarget = event.currentTarget\r\n const linksContainer = currentTarget.querySelector('.dropdown-links__links')\r\n let openedDropdown = document.querySelector(`.${OPENED_CLASS}`);\r\n var equal = currentTarget.isEqualNode(openedDropdown);\r\n\r\n //Fix here\r\n if (openedDropdown && equal) {\r\n openedDropdown.classList.remove(OPENED_CLASS)\r\n openedDropdown.setAttribute('aria-selected', false)\r\n //let openedDropdownLinkContainer = openedDropdown.querySelector('.dropdown-links__links')\r\n //openedDropdownLinkContainer.setAttribute('aria-hidden', true)\r\n let heading = openedDropdown.querySelector('.levelOne-h6');\r\n let activeHeadings = openedDropdown.querySelector('.active');\r\n if (activeHeadings) {\r\n var text = activeHeadings.querySelector('.wizard-selector-h6').innerHTML;\r\n if (text.length > 30) {\r\n heading.innerHTML = text.substring(0, Math.min(30, text.lastIndexOf(\" \"))) + '...';\r\n } else {\r\n heading.innerHTML = text;\r\n }\r\n } else {\r\n if (openedDropdown.querySelector('.select-text')) {\r\n heading.innerHTML = openedDropdown.querySelector('.select-text').innerHTML;\r\n }\r\n }\r\n } else if (currentTarget === event.target && currentTarget.classList.contains(OPENED_CLASS)) {\r\n currentTarget.classList.remove(OPENED_CLASS)\r\n currentTarget.setAttribute('aria-selected', false)\r\n //linksContainer.setAttribute('aria-hidden', true)\r\n } else {\r\n currentTarget.classList.add(OPENED_CLASS)\r\n currentTarget.setAttribute('aria-selected', true)\r\n //linksContainer.setAttribute('aria-hidden', false)\r\n\r\n var links = linksContainer.querySelectorAll('.dropdown-links .level-title div');\r\n if (links.length > 0) {\r\n links.forEach(element => {\r\n if (element.clientHeight > 20) {\r\n element.classList.add('two-lines');\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n init() {\r\n this.dropdownNodes = document.querySelectorAll('.' + DROPDOWN_CLASS)\r\n\r\n if (this.dropdownNodes.length > 0) {\r\n for (let i = 0; i < this.dropdownNodes.length; i++) {\r\n const dropdownNode = this.dropdownNodes[i];\r\n\r\n dropdownNode.addEventListener('click', this.openHandler)\r\n dropdownNode.addEventListener('keydown', event => {\r\n event.stopImmediatePropagation()\r\n\r\n if (event.keyCode === 32 || event.keyCode === 13) {\r\n console.log('from keyboard', event.keyCode)\r\n this.openHandler(event)\r\n }\r\n })\r\n }\r\n\r\n document.addEventListener('click', event => {\r\n if (!event.target.classList.contains(DROPDOWN_CLASS)) {\r\n for (let i = 0; i < this.dropdownNodes.length; i++) {\r\n const dropdownNode = this.dropdownNodes[i]\r\n\r\n dropdownNode.classList.remove(OPENED_CLASS)\r\n dropdownNode.setAttribute('aria-selected', false)\r\n //dropdownNode.querySelector('.dropdown-links__links').setAttribute('aria-hidden', true)\r\n }\r\n }\r\n })\r\n }\r\n }\r\n}\r\n\r\nexport default DropdownLinks;","import { onResize } from \"../../apps/StyleguideApp/helpers/utils\"\r\n/*\r\n\r\n 1) the expandable root element should have an id #voyage__expandable\r\n 2) the expandable activator should have an id #voyage__expandable--button\r\n 3) the content should be children of VoyageExpandableContent component\r\n\r\n*/\r\n\r\n\r\nconst handleClick = (event) => {\r\n const expandable = event.target.closest(\"#voyage__expandable, [data-id='voyage__expandable']\")\r\n\r\n const contentHeight = expandable.querySelector(\"#voyage__expandable--content-wrapper, [data-id='voyage__expandable--content-wrapper']\").clientHeight\r\n const content = expandable.querySelector(\"#voyage__expandable--content, [data-id='voyage__expandable--content']\")\r\n const closedContentHeight = expandable.getAttribute('data-closed-height')\r\n\r\n if (!expandable.classList.contains(\"expanded\")) {\r\n content.style.height = `${contentHeight + 40}px` // \"+ 40\" is considered a padding for the content\r\n expandable.classList.add(\"expanded\");\r\n }\r\n else {\r\n content.style.height = closedContentHeight\r\n expandable.classList.remove(\"expanded\")\r\n }\r\n}\r\n\r\n\r\nconst resizeAccordions = (event) => {\r\n const expandables = document.querySelectorAll(\".voyage__accordion.expanded\")\r\n\r\n Array.from(expandables).forEach(function(element) {\r\n\r\n const contentHeight = element.querySelector(\"#voyage__expandable--content-wrapper, [data-id='voyage__expandable--content-wrapper']\").clientHeight\r\n const content = element.querySelector(\"#voyage__expandable--content, [data-id='voyage__expandable--content']\")\r\n content.style.height = contentHeight + 40 + 'px';\r\n });\r\n}\r\n\r\n\r\n\r\nexport const addExpandableListeners = () => {\r\n const expandables = Array.prototype.slice.call(document.querySelectorAll(\"#voyage__expandable, [data-id='voyage__expandable']\"));\r\n\r\n expandables.forEach((expandable) => {\r\n const closedContentHeight = expandable.querySelector(\"#voyage__expandable--content, [data-id='voyage__expandable--content']\").clientHeight\r\n \r\n expandable.setAttribute('data-closed-height', `${closedContentHeight}px`)\r\n expandable.querySelector(\"#voyage__expandable--button, [data-id='voyage__expandable--button']\")\r\n .addEventListener(\"click\", handleClick)\r\n })\r\n\r\n onResize(resizeAccordions)\r\n}\r\n\r\nexport const removeExpandableListeners = () => {\r\n const expandables = Array.prototype.slice.call(document.querySelectorAll(\"#voyage__expandable, [data-id='voyage__expandable']\"));\r\n\r\n expandables.forEach((expandable) => {\r\n expandable.removeEventListener(\"click\", handleClick)\r\n })\r\n}\r\n","export default (str, n) => \r\n (str.length > n) ? str.substr(0, n-'...'.length) + '...' : str;\r\n","import { onDocumentLoaded } from \"../../apps/StyleguideApp/helpers/utils\"\r\nimport truncate from \"./helpers/truncate\"\r\nimport { addExpandableListeners } from './voyage-expandable-handler';\r\n\r\nconst carouselClasses = [\r\n \"voyage__carousel--prev\",\r\n \"voyage__carousel--active\",\r\n \"voyage__carousel--next\"\r\n]\r\n\r\nexport function voyageCarouselHandler () {\r\n // using spread operator to make the collection iterable\r\n const carousels = document.querySelectorAll(\"body:not(.sfPageEditor) [data-carousel-items]\")\r\n\r\n Array.prototype.slice.call(carousels).forEach(carousel => { \r\n const getPrevChild = (index) => getChildren()[index - 1] \r\n const getNextChild = (index) => getChildren()[index + 1]\r\n\r\n const removeClassesFromAllItems = () => {\r\n Array.prototype.slice.call(getChildren()).forEach(child => child.classList.remove(...carouselClasses))\r\n }\r\n\r\n const setClasses = (activeItem /* index */) => {\r\n getChildren()[activeItem].classList.add(\"voyage__carousel--active\")\r\n if (getPrevChild(activeItem)) getPrevChild(activeItem).classList.add(\"voyage__carousel--prev\")\r\n if (getNextChild(activeItem)) getNextChild(activeItem).classList.add(\"voyage__carousel--next\")\r\n }\r\n\r\n const setItem = (number, item) => {\r\n removeClassesFromAllItems()\r\n setClasses(number)\r\n var mediaId = item && item.dataset.mediaid ? item.dataset.mediaid : '';\r\n if (mediaId) {\r\n var id = mediaId.replace('carousel_', 'media_');\r\n var mediaElement = document.getElementById(id)\r\n if (mediaElement) {\r\n\r\n var container = mediaElement.closest('.move-next');\r\n if (container) {\r\n Array.from(container.querySelectorAll('*[id^=\"media_\"]')).forEach(function(media) {\r\n media.classList.add('voyage__hidden');\r\n })\r\n }\r\n mediaElement.classList.remove('voyage__hidden');\r\n }\r\n\r\n var id = mediaId.replace('carousel_', 'spinner_');\r\n var spinnerElement = document.getElementById(id)\r\n if (spinnerElement) {\r\n var container = spinnerElement.closest('.loading-spinner');\r\n if (container) {\r\n Array.from(container.querySelectorAll('.carousel-spinners')).forEach(function(spinner) {\r\n spinner.classList.remove('active');\r\n })\r\n }\r\n spinnerElement.classList.add('active')\r\n }\r\n }\r\n }\r\n\r\n const getChildren = () => {\r\n return carousel.querySelectorAll(\".voyage__carousel--item-wrapper\");\r\n }\r\n\r\n const setInfityNext = () => {\r\n if(!isLastItem()) return;\r\n const children = getChildren();\r\n for (var i = 0; i < children.length; i++) {\r\n var clone = children[i].cloneNode(true);\r\n clone.classList.remove(\"voyage__carousel--active\");\r\n clone.classList.remove(\"voyage__carousel--prev\");\r\n clone.classList.remove(\"voyage__carousel--next\");\r\n addEventHandldersToclone(clone);\r\n carousel.append(clone);\r\n }\r\n }\r\n\r\n const addEventHandldersToclone = (clone) => {\r\n var link = clone.querySelector('a');\r\n if (!link) return;\r\n if (window.openAccordionPopup === undefined) return;\r\n link.addEventListener('click', function(e) {openAccordionPopup(e, false)} );\r\n\r\n var image = clone.querySelector('.voyage__highlighted-content--image > div');\r\n if (!image) return;\r\n if (window.openAccordionPopup === undefined) return;\r\n image.addEventListener('click', function(e) {openAccordionPopup(e, true)} );\r\n\r\n bindClickActions(carousel, '[data-carousel-prev]', voyageCarouselSlidePrev);\r\n bindClickActions(carousel, '[data-carousel-next]', voyageCarouselSlideNext);\r\n }\r\n \r\n const setInfityPrevious = (currentItem) => {\r\n if(!isFirstItem()) return currentItem;\r\n const children = getChildren();\r\n for (var i = children.length - 1; i >= 0; i--) {\r\n var clone = children[i].cloneNode(true);\r\n clone.classList.remove(\"voyage__carousel--active\");\r\n clone.classList.remove(\"voyage__carousel--prev\");\r\n clone.classList.remove(\"voyage__carousel--next\");\r\n addEventHandldersToclone(clone);\r\n carousel.prepend(clone);\r\n }\r\n return children.length;\r\n }\r\n\r\n (function initializeClasses () {\r\n setItem(0)\r\n setClasses(0)\r\n })()\r\n\r\n const getCurrentItem = () => Array.prototype.slice.call(getChildren()).findIndex(child => child.classList.contains(\"voyage__carousel--active\"))\r\n const isLastItem = () => Array.prototype.slice.call(getChildren()).findIndex(child => child.classList.contains(\"voyage__carousel--next\")) === getChildren().length-1;\r\n const isFirstItem = () => Array.prototype.slice.call(getChildren()).findIndex(child => child.classList.contains(\"voyage__carousel--active\")) === 0;\r\n \r\n function voyageCarouselSlideNext () {\r\n const currentItem = getCurrentItem()\r\n setInfityNext();\r\n var next = getNextChild(currentItem);\r\n if (next) setItem(currentItem + 1, next)\r\n else setItem(0)\r\n calculateAccordionHeight(next);\r\n }\r\n \r\n function voyageCarouselSlidePrev () {\r\n var currentItem = getCurrentItem()\r\n currentItem = setInfityPrevious(currentItem);\r\n var previous = getPrevChild(currentItem);\r\n if (previous) setItem(currentItem - 1, previous)\r\n else setItem(Array.prototype.slice.call(getChildren()).length - 1 )\r\n calculateAccordionHeight(previous);\r\n }\r\n \r\n function calculateAccordionHeight(element) {\r\n const expandable = element.closest(\"#voyage__expandable, [data-id='voyage__expandable']\")\r\n if (!expandable) return;\r\n const contentHeight = expandable.querySelector(\"#voyage__expandable--content-wrapper, [data-id='voyage__expandable--content-wrapper']\").clientHeight\r\n const content = expandable.querySelector(\"#voyage__expandable--content, [data-id='voyage__expandable--content']\")\r\n content.style.height = contentHeight + 40 + 'px';\r\n }\r\n\r\n /* */\r\n let touchStartX = null\r\n let touchStartY = null\r\n \r\n function onTouchStart (event) {\r\n const touchStart = event.touches[0] || event.changedTouches[0];\r\n touchStartX = touchStart.pageX\r\n touchStartY = touchStart.pageY\r\n }\r\n \r\n function onTouchEnd (event) {\r\n const touchEnd = event.touches[0] || event.changedTouches[0];\r\n const validateSwipeY = (touchStartY - touchEnd.pageY) < 50 && (touchStartY - touchEnd.pageY) > -50\r\n const swipeLeft = (touchStartX - touchEnd.pageX) > 15\r\n const swipeRight = (touchStartX - touchEnd.pageX) < -15\r\n \r\n if (swipeLeft && validateSwipeY) voyageCarouselSlideNext()\r\n if (swipeRight && validateSwipeY) voyageCarouselSlidePrev()\r\n \r\n touchStartX = null\r\n touchStartY = null\r\n }\r\n\r\n function bindClickActions(carousel, selector, functionName) {\r\n const buttons = carousel.parentElement.querySelectorAll(selector)\r\n Array.from(buttons).forEach(function(button) {\r\n button.addEventListener('click', functionName)\r\n if (getChildren().length < 2) {\r\n button.style.display = \"none\";\r\n }\r\n });\r\n }\r\n\r\n try {\r\n\r\n bindClickActions(carousel, '[data-carousel-prev]', voyageCarouselSlidePrev);\r\n bindClickActions(carousel, '[data-carousel-next]', voyageCarouselSlideNext);\r\n \r\n }\r\n catch {}\r\n\r\n try {\r\n carousel.addEventListener('touchstart', onTouchStart, { passive: true })\r\n carousel.addEventListener('touchend', onTouchEnd, { passive: true })\r\n }\r\n catch (err) {\r\n console.error('carouselHandler: No element with data-attribute \"[data-carousel-items]\" found')\r\n }\r\n /* */\r\n });\r\n\r\n const carouselsElements = document.querySelectorAll(\".voyage__carousel\");\r\n [].forEach.call(carouselsElements, carouselsElement => {\r\n\r\n const wrappers = document.querySelectorAll(\".voyage__carousel--item-wrapper\");\r\n [].forEach.call(wrappers, wrapper => {\r\n\r\n \r\n const contenTopText = wrapper.querySelector(\".voyage__highlighted-content--category\");\r\n const contentHeader = wrapper.querySelector(\".voyage__highlighted-content--topic\");\r\n const contentElement = wrapper.querySelector(\".voyage__highlighted-content--summary\");\r\n\r\n var contentHeaderText = contentHeader && contentHeader.innerText ? contentHeader.innerText : \"\";\r\n\r\n if (contentElement) {\r\n const textWithoutTruncate = wrapper.querySelector(\".text-without-truncate\");\r\n if(!textWithoutTruncate) {\r\n var truncatedCount = 400 - predictTheContentTextLengthWhenLongHeaderText(contentHeaderText);\r\n truncatedCount = contenTopText && contenTopText.innerText ? truncatedCount : truncatedCount + 106;\r\n contentElement.innerText = truncate(contentElement.innerText, truncatedCount);\r\n }\r\n }\r\n });\r\n });\r\n}\r\n\r\nconst predictTheContentTextLengthWhenLongHeaderText = (contentHeaderText) => {\r\n // 27 is the max char length of the row\r\n if (contentHeaderText.length > 27 * 4) {\r\n return contentHeaderText.length * 2.2;\r\n }\r\n\r\n if (contentHeaderText.length > 27 * 3) {\r\n return contentHeaderText.length * 2;\r\n }\r\n\r\n if (contentHeaderText.length > 27 * 2) {\r\n return contentHeaderText.length * 1.8;\r\n }\r\n\r\n if (contentHeaderText.length > 27) {\r\n return contentHeaderText.length * 1.6;\r\n }\r\n\r\n return contentHeaderText.length;\r\n}\r\n\r\nexport default () => onDocumentLoaded(voyageCarouselHandler)","\r\nconst addClasses = (column, columnNumber) => {\r\n const classes = [\"voyage__unorthodox-grid-item--low-img\", \"voyage__unorthodox-grid-item--tall-img\"]\r\n\r\n\r\n\r\nArray.prototype.forEach.call(column.children,(child, index) => { \r\n const isUnevenColumn = columnNumber % 2 === 1\r\n if (isUnevenColumn) child.classList.add(classes[index % 2])\r\n else child.classList.add(classes[(index + 1) % 2])\r\n })\r\n}\r\n\r\nexport default function handleUnorthodoxGridItems() {\r\n try{\r\n const unorthodoxGridColumn1 = document.querySelector(\"[data-unorthodox-grid-col-1]\")\r\n const unorthodoxGridColumn2 = document.querySelector(\"[data-unorthodox-grid-col-2]\")\r\n\r\n addClasses(unorthodoxGridColumn1, 1)\r\n addClasses(unorthodoxGridColumn2, 2)\r\n }\r\n catch(error){\r\n }\r\n}","import { onDocumentLoaded } from '../../apps/StyleguideApp/helpers/utils'\r\n\r\nexport function voyageAnchorMenuHandler(anchorMenuWrapper, anchorMenu, anchorElements, mainMenu, voyageMenu) {\r\n const anchorMenuWrapperY = anchorMenuWrapper.getBoundingClientRect().y\r\n const anchorMenuY = anchorMenu.getBoundingClientRect().y\r\n const styles = anchorMenu.style;\r\n var mainMenuHeight = (mainMenu ? mainMenu.getBoundingClientRect().height : 0) + (voyageMenu ? voyageMenu.parentElement.getBoundingClientRect().height : 0);\r\n if (anchorMenuWrapperY <= mainMenuHeight) { \r\n styles.position = \"fixed\"\r\n styles.top = mainMenuHeight + \"px\";\r\n styles.backgroundColor = \"#fff\";\r\n removeOverLappedPosition(anchorMenuWrapper);\r\n }\r\n\r\n if (anchorMenuWrapperY > mainMenuHeight) {\r\n styles.position = 'static';\r\n styles.width = \"100%\"\r\n styles.left = 0\r\n styles.backgroundColor = \"transparent\";\r\n setOverLappedPosition(anchorMenuWrapper);\r\n }\r\n\r\n var index = Array.from(anchorElements).findIndex(function (element) { return element && element.anchorElement && element.anchorElement.hasAttribute('data-byPassOnCroll') });\r\n if (index > -1) {\r\n anchorElements[index].anchorElement.removeAttribute('data-byPassOnCroll');\r\n return;\r\n }\r\n Array.from(anchorElements, function (element) {\r\n if (element && element.anchorElement && element.targetElement) {\r\n if (element.anchorElement.getBoundingClientRect().y >= element.targetElement.getBoundingClientRect().y) {\r\n element.anchorElement.setAttribute(\"data-selected\", \"true\");\r\n Array.from(anchorElements, function (element2) {\r\n if (element.anchorElement.href !== element2.anchorElement.href) {\r\n element2.anchorElement.setAttribute(\"data-selected\", \"false\");\r\n }\r\n });\r\n }\r\n }\r\n });\r\n}\r\n\r\nexport function voyageMenuHandler(mainMenu, voyageMenu, inpageNaviWrapper) {\r\n if(!voyageMenu) return;\r\n\r\n const voyageMenuY = voyageMenu.getBoundingClientRect().y;\r\n const voyageMenuWrapperY = voyageMenu.parentElement.getBoundingClientRect().y;\r\n \tvar mainMenuHeight = (mainMenu ? mainMenu.getBoundingClientRect().height : 0);\r\n\r\n if (voyageMenuWrapperY <= mainMenuHeight) {\r\n voyageMenu.style.position = 'fixed';\r\n voyageMenu.style.top = mainMenuHeight + \"px\";\r\n voyageMenu.classList.add('animation');\r\n if (inpageNaviWrapper)\r\n voyageMenu.parentElement.classList.add('animated');\r\n }\r\n\r\n if (voyageMenuWrapperY >= mainMenuHeight) { \r\n voyageMenu.style.position = \"static\";\r\n voyageMenu.classList.remove('animation');\r\n if (inpageNaviWrapper)\r\n voyageMenu.parentElement.classList.remove('animated');\r\n }\r\n}\r\n\r\nexport function addEventListeners() {\r\n try {\r\n\r\n const mainMenu = document.querySelector('.header-one');\r\n const voyageMenu = document.querySelector('.voyage-subnavi');\r\n var inpageNaviWrapper = document.querySelector(\"[data-anchor-menu], [data-anchor-menu-no-filter]\")\r\n\r\n voyageMenuHandler(mainMenu, voyageMenu, inpageNaviWrapper);\r\n\r\n window.addEventListener('resize', function() {\r\n voyageMenuHandler(mainMenu, voyageMenu, inpageNaviWrapper)\r\n \r\n } );\r\n window.addEventListener('scroll', function() {\r\n voyageMenuHandler(mainMenu, voyageMenu, inpageNaviWrapper);\r\n } );\r\n\r\n const anchorMenuWrapper = document.querySelector(\"[data-anchor-menu-wrapper]\")\r\n const anchorMenu = anchorMenuWrapper.querySelectorAll(\"[data-anchor-menu], [data-anchor-menu-no-filter]\")\r\n\r\n if (!anchorMenuWrapper || !anchorMenu || anchorMenu.length === 0) return;\r\n\r\n var anchors = anchorMenu[0].querySelectorAll('.voyage__navigation-item');\r\n var anchorElements = Array.from(anchors, function (a) {\r\n\r\n a.addEventListener('click', function () { anchorOn(a.id) });\r\n\r\n var hash = a.href.split('#').pop();\r\n\r\n var targetElement = document.getElementById(hash);\r\n if (targetElement) {\r\n return { anchorElement: a, targetElement: targetElement }\r\n }\r\n })\r\n\r\n if (voyageMenu) {\r\n voyageMenu.addEventListener('transitionend', () => {\r\n calculateOverlappedPosition(anchorMenuWrapper);\r\n setOverLappedPosition(anchorMenuWrapper);\r\n \r\n });\r\n }\r\n else {\r\n calculateOverlappedPosition(anchorMenuWrapper);\r\n setOverLappedPosition(anchorMenuWrapper);\r\n }\r\n onloadInpageNaviPosition();\r\n\r\n window.addEventListener('resize', function() {\r\n calculateOverlappedPosition(anchorMenuWrapper);\r\n voyageAnchorMenuHandler(anchorMenuWrapper, anchorMenu[0], anchorElements, mainMenu, voyageMenu);\r\n\r\n } );\r\n window.addEventListener('scroll', function() {\r\n voyageAnchorMenuHandler(anchorMenuWrapper, anchorMenu[0], anchorElements, mainMenu, voyageMenu);\r\n } );\r\n }\r\n catch (error) {\r\n }\r\n}\r\n\r\nfunction anchorOn(classOn) {\r\n var anchorClass = document.querySelectorAll(\".voyage__navigation-item\"), i;\r\n for (i = 0; i < anchorClass.length; ++i) {\r\n anchorClass[i].setAttribute(\"data-selected\", \"false\");\r\n\r\n }\r\n\r\n var anchor = document.getElementById(classOn);\r\n if (anchor) {\r\n anchor.setAttribute(\"data-selected\", \"true\");\r\n anchor.setAttribute(\"data-byPassOnCroll\", \"true\");\r\n }\r\n}\r\n\r\nfunction calculateOverlappedPosition(anchorElement, log) {\r\n\r\n var overLappedTarget = document.getElementsByClassName(\"voyage__hero-with-info\");\r\n if (!overLappedTarget || !overLappedTarget.length || !anchorElement.classList.contains('overLapped') || (getBrowserWidth() <= 739)) {\r\n anchorElement.setAttribute('data-overLappedHeight', 0)\r\n anchorElement.style.position = 'static';\r\n anchorElement.classList.add('overLapped-on-mobile')\r\n return 0;\r\n } \r\n var overLappedHeight = window.pageYOffset + overLappedTarget[0].getBoundingClientRect().bottom - anchorElement.getBoundingClientRect().height - recursiveBottomPadding(80); // last value is margin to image bottom\r\n anchorElement.setAttribute('data-overLappedHeight', overLappedHeight)\r\n return overLappedHeight;\r\n}\r\n\r\nfunction setOverLappedPosition(anchorElement) {\r\n var value = anchorElement.getAttribute('data-overLappedHeight') *1 || 0;\r\n if (value) {\r\n anchorElement.style.position = 'absolute';\r\n anchorElement.style.top = value + 'px';\r\n anchorElement.style.backgroundColor = 'transparent';\r\n anchorElement.classList.remove('isFixed');\r\n }\r\n}\r\n\r\nfunction removeOverLappedPosition(anchorElement) {\r\n var value = anchorElement.getAttribute('data-overLappedHeight') *1 || 0;\r\n if (value) {\r\n anchorElement.classList.add('isFixed');\r\n }\r\n}\r\n\r\nfunction getBrowserWidth() {\r\n return window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;\r\n}\r\n\r\nfunction recursiveBottomPadding(value) {\r\n if (getBrowserWidth() <= 1023) {\r\n return value;\r\n }\r\n if (getBrowserWidth() <= 1400) {\r\n return value * (getBrowserWidth() / 1400);\r\n }\r\n else return value\r\n}\r\n\r\nfunction onloadInpageNaviPosition() {\r\n var container = document.querySelector('nav.voyage__navigation--desktop');\r\n if (!container) return;\r\n Array.from(container.children, (a) => {\r\n a.addEventListener('click', function() {setInpageNaviPosition.call(this, '')});\r\n });\r\n var hash = location.hash;\r\n if (hash) {\r\n setInpageNaviPosition(hash);\r\n }\r\n}\r\nfunction setInpageNaviPosition(hash) {\r\n const mainMenu = document.querySelector('.header-one');\r\n const voyageMenuWrapper = document.querySelector('.voyage-subnavi-wrapper');\r\n const anchorMenu = document.querySelector(\"[data-anchor-menu], [data-anchor-menu-no-filter]\")\r\n var dynamicNaviHeight = (mainMenu ? mainMenu.getBoundingClientRect().height : 0) + \r\n (voyageMenuWrapper ? voyageMenuWrapper.getBoundingClientRect().height: 0) + \r\n (anchorMenu ? anchorMenu.getBoundingClientRect().height:0)\r\n setTimeout(function(){\r\n var id = hash ? hash : this.hash;\r\n if (!id) return;\r\n var scrollElement = document.querySelector(id);\r\n if (!scrollElement) return;\r\n scrollElement.style.position = 'relative';\r\n scrollElement.style.top = -Math.abs(dynamicNaviHeight) + \"px\"\r\n scrollElement.scrollIntoView(true);\r\n \r\n }.call(this), 100); \r\n}","\r\nfunction showHideSection() {\r\n const allSections = document.querySelectorAll(\".voyage__solutions-listing--simple-grid-content-wrapper\")\r\n Array.prototype.slice.call(allSections).forEach((section) => {\r\n let shouldWeHide = 0 \r\n const allCards = Array.prototype.slice.call(section.querySelectorAll(\"[data-grid-item]\"))\r\n allCards.forEach(card => card.classList.contains(\"voyage__hidden\") ? shouldWeHide++ : null)\r\n shouldWeHide < allCards.length ? section.classList.remove(\"voyage__hidden\") : section.classList.add(\"voyage__hidden\")\r\n })\r\n}\r\n\r\nconst removeFilters = (currentMenuItem) => {\r\n const gridItems = Array.prototype.slice.call(document.querySelectorAll(\"[data-grid-item]\"))\r\n const filterItems = Array.prototype.slice.call(document.querySelectorAll(\".voyage__navigation-item\"))\r\n\r\n if (currentMenuItem.dataset.tag && currentMenuItem.dataset.tag.toLowerCase() === 'all'){\r\n filterItems.forEach( menuItem => {\r\n if (menuItem.dataset.tag && menuItem.dataset.tag.toLowerCase() !== 'all' ) menuItem.dataset.selected = false \r\n })\r\n gridItems.forEach( gridItem => {\r\n gridItem.classList.remove('voyage__hidden')\r\n })\r\n } else {\r\n filterItems.forEach( menuItem => {\r\n if (menuItem.dataset.tag && menuItem.dataset.tag.toLowerCase() === 'all') menuItem.dataset.selected = false \r\n })\r\n\r\n const selectedFilters = filterItems.filter(selectedFilter => selectedFilter.dataset.selected === 'true')\r\n let dataTypes = []\r\n selectedFilters.forEach(itm => {\r\n if (itm.dataset.tag) {\r\n dataTypes.push(itm.dataset.tag.toLowerCase())\r\n } \r\n })\r\n\r\n gridItems.forEach(gridItem => {\r\n const itemDataTags = gridItem.dataset.tags.toLowerCase().split(',')\r\n\r\n Array.prototype.findDatatype = function(arr) {\r\n return this.filter(function(e) {\r\n return arr.indexOf(e) > -1;\r\n });\r\n };\r\n \r\n const intersection = itemDataTags.findDatatype(dataTypes);\r\n\r\n if (intersection.length > 0){\r\n gridItem.classList.remove('voyage__hidden')\r\n } else {\r\n gridItem.classList.add('voyage__hidden')\r\n }\r\n\r\n // selectedFilters.forEach(selectedFilter => {\r\n // if (gridItem.dataset.tags.toLowerCase().includes(selectedFilter.dataset.tag.toLowerCase())){\r\n // gridItem.classList.remove('voyage__hidden')\r\n // } else {\r\n // gridItem.classList.add('voyage__hidden')\r\n // }\r\n // })\r\n })\r\n }\r\n showHideSection()\r\n}\r\n\r\nconst onClickFilter = (menuItem) => {\r\n if(menuItem.dataset.selected === \"true\" && menuItem.dataset.tag && menuItem.dataset.tag.toLowerCase() !== 'all'){\r\n menuItem.dataset.selected = false\r\n }else{\r\n menuItem.dataset.selected = true\r\n }\r\n removeFilters(menuItem);\r\n setDefaultFilter(menuItem);\r\n}\r\n\r\nfunction setDefaultFilter(menuItem) {\r\n var anySelected = menuItem.parentElement.querySelectorAll('[data-selected=\"true\"]');\r\n if (!anySelected.length) {\r\n if(menuItem.parentElement.children.length) {\r\n if (menuItem.parentElement.children[0].dataset.tag === \"all\") {\r\n menuItem.parentElement.children[0].click();\r\n }\r\n }\r\n }\r\n}\r\n\r\nconst addMenuItemClickEvents = (anchorMenu) => {\r\n if(!anchorMenu) {\r\n return;\r\n }\r\n \r\n Array.prototype.slice.call(anchorMenu).forEach(menuItem => {\r\n menuItem.addEventListener('click', () => { onClickFilter(menuItem) })\r\n })\r\n}\r\n\r\nexport const addFilteringToAnchorMenuItems = () => {\r\n const anchorMenuInner = document.querySelectorAll('[data-anchor-menu] > a.voyage__navigation-item')\r\n\r\n addMenuItemClickEvents(anchorMenuInner)\r\n}\r\n","import { onDocumentLoaded } from '../../apps/StyleguideApp/helpers/utils'\r\nimport { addFilteringToAnchorMenuItems } from './voyage-anchor-menu-filtering'\r\n\r\nexport function getUniqueTags () {\r\n const gridItems = document.querySelectorAll('[data-grid-item]')\r\n let arrayOfTags = []\r\n const arrayOfRemovableTags = window.NarrowTagFilters || [];\r\n Array.prototype.slice.call(gridItems).forEach(gridItem => {\r\n if(!gridItem.closest('.mixed-content')) {\r\n const tags = gridItem.dataset.tags\r\n if (tags) {\r\n const tagsDataString = tags.split(',')\r\n arrayOfTags = [...arrayOfTags, ...tagsDataString]\r\n }\r\n }\r\n\r\n })\r\n\r\n const uniqueTags = [...new Set(arrayOfTags)].filter(function(t) {\r\n return !arrayOfRemovableTags.includes(t);\r\n });\r\n\r\n return uniqueTags\r\n}\r\n\r\nexport function populateAnchorMenuByTags () {\r\n const tags = getUniqueTags()\r\n const anchorMenu = document.querySelector(\"[data-anchor-menu]\")\r\n\r\n const createAnchorMenuItem = (tagName) => {\r\n const menuItem = document.createElement('a')\r\n menuItem.className = \"voyage__navigation-item\"\r\n menuItem.dataset.tag = tagName\r\n menuItem.innerHTML = tagName\r\n if (anchorMenu) {\r\n anchorMenu.appendChild(menuItem)\r\n }\r\n }\r\n\r\n const sortedTags = tags.sort((prev, next) => prev === next ? 0 : prev < next ? -1 : 1)\r\n sortedTags.forEach((tagName) => {\r\n createAnchorMenuItem(tagName)\r\n })\r\n\r\n addFilteringToAnchorMenuItems()\r\n}\r\n\r\nexport default () => onDocumentLoaded(populateAnchorMenuByTags)\r\n","export default class DomHelper {\r\n static matches(el, selector) {\r\n if (!this.isDOMElement(el)) {\r\n return false;\r\n }\r\n\r\n return (el.matches\r\n || el.matchesSelector\r\n || el.msMatchesSelector\r\n || el.mozMatchesSelector\r\n || el.webkitMatchesSelector\r\n || el.oMatchesSelector).call(el, selector);\r\n }\r\n\r\n static closest(el, selector, container) {\r\n if (!el) {\r\n return;\r\n }\r\n\r\n if (!container) {\r\n container = document.body;\r\n }\r\n\r\n let element = el;\r\n\r\n while (!this.matches(element, selector) && element.parentNode && element !== container) {\r\n element = element.parentNode;\r\n }\r\n\r\n return this.matches(element, selector) ? element : undefined;\r\n }\r\n\r\n static isDOMElement(el) {\r\n return el && (el instanceof HTMLElement || el instanceof SVGElement ||\r\n (el.constructor && el.constructor.name && el.constructor.name.search(/\\HTML.+Element/) > -1));\r\n }\r\n\r\n static isLinkElement(el) {\r\n return this.isDOMElement(el) && ['IMG', 'A'].indexOf(el.tagName.toUpperCase()) >= 0;\r\n }\r\n\r\n static getClickTarget(ev) {\r\n let target = ev.target;\r\n\r\n if ((window.SVGElementInstance) && (target instanceof SVGElementInstance) && target.correspondingUseElement)\r\n {\r\n target = target.correspondingUseElement;\r\n }\r\n\r\n return target;\r\n }\r\n\r\n static removeElement(el) {\r\n if (this.isDOMElement(el)) {\r\n const parent = this.parentElement(el);\r\n\r\n if (parent) {\r\n parent.removeChild(el);\r\n }\r\n }\r\n }\r\n\r\n static removeElements(elements) {\r\n const elementsArray = Array.isArray(elements) ? elements : Array.prototype.slice.call(elements);\r\n\r\n elementsArray.forEach((el) => {\r\n this.removeElement(el);\r\n });\r\n }\r\n\r\n static parentElement(el) {\r\n if (this.isDOMElement(el)) {\r\n if (el.parentNode) {\r\n return el.parentNode;\r\n }\r\n\r\n // IE & Edge workaround. IE & Edge can't get the parentNode on svg 'use' element.\r\n if (el.correspondingUseElement) {\r\n return el.correspondingUseElement.parentNode;\r\n }\r\n }\r\n }\r\n\r\n static hasClass(classname, el) {\r\n if (classname && this.isDOMElement(el)) {\r\n const testString = el.className.baseVal || el.className;\r\n\r\n return Boolean(!!testString && testString.length && (new RegExp(`(^| )${classname}( |$)`, 'i')).test(testString));\r\n }\r\n\r\n return false;\r\n }\r\n\r\n static addClass(classname, el) {\r\n if (classname && this.isDOMElement(el)) {\r\n el.classList.add(classname);\r\n }\r\n }\r\n\r\n static removeClass(classname, el) {\r\n if (classname && this.isDOMElement(el)) {\r\n el.classList.remove(classname);\r\n }\r\n }\r\n\r\n static addClasses(classnames, el) {\r\n if (classnames && classnames.length && this.isDOMElement(el)) {\r\n for (var i = 0; i < classnames.length; i++) {\r\n if (classnames[i]) {\r\n el.classList.add(classnames[i]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n static removeClasses(classnames, el) {\r\n if (classnames && classnames.length && this.isDOMElement(el)) {\r\n for (var i = 0; i < classnames.length; i++) {\r\n if (classnames[i]) {\r\n el.classList.remove(classnames[i]);\r\n }\r\n }\r\n }\r\n }\r\n}","export default class ArrayHelper {\r\n static removeWhere(arr, compareFunc) {\r\n if (!arr) {\r\n return [];\r\n }\r\n\r\n const removedItems = [];\r\n let i = 0;\r\n\r\n while (i < arr.length) {\r\n if (compareFunc(arr[i])) {\r\n removedItems.push(arr[i]);\r\n arr.splice(i, 1);\r\n } else {\r\n i++;\r\n }\r\n }\r\n\r\n return removedItems;\r\n }\r\n}","export default class IconHelper {\r\n static getSvgHref(iconId, cssClasses, fill) {\r\n const style = fill ? ` style=\"fill:${fill}\"` : '';\r\n\r\n if (!cssClasses) {\r\n cssClasses = '';\r\n }\r\n\r\n return ``;\r\n }\r\n}","export default class GUIDHelper {\r\n static get() {\r\n const guidGenerator = function guidGenerator() {\r\n return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);\r\n };\r\n\r\n return `${guidGenerator()}${guidGenerator()}-${guidGenerator()}-${guidGenerator()}-${guidGenerator()}-${guidGenerator()}${guidGenerator()}${guidGenerator()}`;\r\n }\r\n}\r\n","\r\nclass DateTimeHelper {\r\n constructor() {\r\n }\r\n\r\n toLocalDateShort() {\r\n const elsToConvert = document.querySelectorAll('[data-date]');\r\n elsToConvert.forEach(element => {\r\n const localDate = new Date(element.getAttribute('data-date'));\r\n const dateFormat = {\r\n day: 'numeric',\r\n month: 'short'\r\n };\r\n let date = localDate.toLocaleString(document.documentElement.lang, dateFormat).split(' ');\r\n element.innerHTML = `${date[1]} ${date[0]}`;\r\n });\r\n }\r\n\r\n toLocalDate() {\r\n const elsToConvert = document.querySelectorAll('[data-date]');\r\n elsToConvert.forEach(element => {\r\n const localDate = new Date(element.getAttribute('data-date'));\r\n const dateFormat = {\r\n year: 'numeric',\r\n day: 'numeric',\r\n month: 'short'\r\n };\r\n let date = localDate.toLocaleString(document.documentElement.lang, dateFormat).split(' ');\r\n element.innerHTML = `${date[1].replace(/[^0-9]/g, '')} ${date[0]} ${date[2]}`;\r\n });\r\n }\r\n\r\n toLocalDateLong(el, dateToConvert) {\r\n const dateFormat = {\r\n day: '2-digit',\r\n month: 'long',\r\n year: 'numeric'\r\n };\r\n const theElement = document.getElementById(el);\r\n const localDate = new Date(dateToConvert);\r\n\r\n if (document.documentElement.lang == 'es') {\r\n var months = ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio',\r\n 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'];\r\n theElement.innerHTML = `${localDate.getDate()} ${months[localDate.getMonth()]} ${localDate.getFullYear()}`;\r\n } else {\r\n let date = localDate.toLocaleString(document.documentElement.lang, dateFormat).split(' ');\r\n theElement.innerHTML = `${date[1].replace(/[^0-9]/g, '')} ${date[0]} ${date[2]}`;\r\n }\r\n }\r\n}\r\n\r\nexport default DateTimeHelper;\r\n","export default class QueryStringHelper {\r\n static setQueryStringParameter(name, value) {\r\n const queryParams = this.getQueryStringHashFromUrl();\r\n queryParams[name] = value;\r\n this.setUrlQueryString(queryParams);\r\n }\r\n\r\n static getQueryStringParameter(name) {\r\n const queryParams = this.getQueryStringHashFromUrl();\r\n return queryParams[name];\r\n }\r\n\r\n static removeQueryStringParameter(name) {\r\n const queryParams = this.getQueryStringHashFromUrl();\r\n delete queryParams[name];\r\n this.setUrlQueryString(queryParams);\r\n }\r\n\r\n static getQueryStringHashFromUrl() {\r\n if (document.location.search && document.location.search.length > 0) {\r\n const queryString = document.location.search;\r\n return this.toHash(queryString);\r\n }\r\n return {};\r\n }\r\n\r\n static getUpdatedUrl(hash) {\r\n if (window.history && window.history.pushState) {\r\n const qs = this.fromHash(hash);\r\n const val = !qs ? '' : '?' + qs;\r\n return document.location.protocol +\r\n '//' +\r\n document.location.host +\r\n document.location.pathname +\r\n val;\r\n }\r\n }\r\n\r\n static setUrlQueryString(hash) {\r\n if (window.history && window.history.pushState) {\r\n const qs = this.fromHash(hash);\r\n const val = !qs ? '' : '?' + qs;\r\n const stateObj = { fakeNavigation: true };\r\n window.history.pushState(stateObj, '',\r\n document.location.protocol +\r\n '//' +\r\n document.location.host +\r\n document.location.pathname +\r\n val);\r\n }\r\n }\r\n\r\n static setQueryParameter(url, name, value, insertSlashAfterPath = false) {\r\n const parts = url.split('?');\r\n const base = parts[0];\r\n const search = parts.length > 1 ? parts[1] : '';\r\n const hash = this.toHash(search);\r\n hash[name] = value;\r\n\r\n let retval = base;\r\n\r\n if (insertSlashAfterPath && retval.length && retval[retval.length - 1] !== '/') {\r\n retval += '/';\r\n }\r\n\r\n return retval + '?' + this.fromHash(hash);\r\n }\r\n\r\n static setQueryParameters(url, queryHash) {\r\n const parts = url.split('?');\r\n const base = parts[0];\r\n const search = parts.length > 1 ? parts[1] : '';\r\n const hash = this.toHash(search);\r\n\r\n for (const key in queryHash) {\r\n if (queryHash[key]) {\r\n hash[key] = queryHash[key];\r\n }\r\n }\r\n\r\n return base + '?' + this.fromHash(hash);\r\n }\r\n\r\n static mask(value) {\r\n if (!value) {\r\n return '';\r\n }\r\n\r\n return encodeURIComponent(btoa(value));\r\n }\r\n\r\n static toHash(qString) {\r\n const queryParams = {};\r\n if (qString && qString.length > 0) {\r\n const queryString = this.trimStart(qString, '?');\r\n queryString.split('&').forEach((item) => {\r\n const i = item.split('=');\r\n if (i.length > 1) {\r\n queryParams[i[0]] = decodeURIComponent(i[1]);\r\n }\r\n });\r\n }\r\n\r\n return queryParams;\r\n }\r\n\r\n static fromHash(hash) {\r\n let retval = '';\r\n if (hash) {\r\n let i = 0;\r\n\r\n // tslint:disable-next-line:forin\r\n for (const key in hash) {\r\n if (hash[key]) {\r\n retval += `${key}=${encodeURIComponent(hash[key])}&`;\r\n }\r\n i++;\r\n }\r\n\r\n if (i > 0) {\r\n retval = retval.replace(/&$/, '');\r\n }\r\n }\r\n\r\n return retval;\r\n }\r\n\r\n static trimStart(value, c) {\r\n if (!value) {\r\n return '';\r\n }\r\n\r\n if (value.length === 0) {\r\n return value;\r\n }\r\n\r\n c = c ? c : ' ';\r\n let i = 0;\r\n\r\n // tslint:disable-next-line:curly\r\n for (; value.charAt(i) === c && i < value.length; i++);\r\n\r\n return value.substring(i);\r\n }\r\n}\r\n","export default class APIHelper {\r\n static get({ url, urlParams, responseType }) {\r\n return this.send({\r\n url,\r\n urlParams,\r\n responseType,\r\n method: 'GET',\r\n okResult: 200,\r\n });\r\n }\r\n\r\n static post({ url, urlParams, responseType, data }) {\r\n return this.send({\r\n url,\r\n urlParams,\r\n responseType,\r\n data,\r\n method: 'POST',\r\n okResult: 200,\r\n });\r\n }\r\n\r\n static send({ method, url, urlParams, responseType, data, okResult }) {\r\n if (urlParams) {\r\n const query = this.toQueryString(urlParams);\r\n\r\n if (query) {\r\n url = url + '?' + query;\r\n }\r\n }\r\n\r\n return this.callApi({\r\n url,\r\n method,\r\n responseType,\r\n data,\r\n okResult\r\n });\r\n }\r\n\r\n static callApi({ method, url, responseType, okResult, data }) {\r\n return new Promise((resolve, reject) => {\r\n const xhr = new XMLHttpRequest();\r\n\r\n xhr.onload = () => {\r\n // tslint:disable-next-line:triple-equals\r\n if (xhr.status == okResult) {\r\n if (xhr.responseText) {\r\n resolve(JSON.parse(xhr.responseText));\r\n } else {\r\n resolve(xhr.response);\r\n }\r\n } else {\r\n this.callReject(xhr, reject);\r\n }\r\n };\r\n\r\n xhr.onerror = () => {\r\n this.callReject(xhr, reject);\r\n };\r\n\r\n xhr.onabort = () => {\r\n this.callReject(xhr, reject);\r\n };\r\n\r\n xhr.open(method, url, true);\r\n\r\n if (responseType) {\r\n xhr.responseType = responseType;\r\n }\r\n\r\n if (data) {\r\n xhr.setRequestHeader('Content-Type', 'application/json');\r\n xhr.send(JSON.stringify(data));\r\n } else {\r\n xhr.send();\r\n }\r\n });\r\n }\r\n \r\n static tryGetResponse(xhr) {\r\n var response;\r\n\r\n try {\r\n response = JSON.parse(xhr.response);\r\n } catch (e) {\r\n response = undefined;\r\n }\r\n\r\n return response;\r\n }\r\n\r\n static callReject(xhr, reject, isConnectionError = false) {\r\n if (reject) {\r\n reject({\r\n status: xhr.status,\r\n response: this.tryGetResponse(xhr),\r\n isConnectionError\r\n });\r\n }\r\n }\r\n\r\n static toQueryString(obj) {\r\n if (typeof obj !== 'object') {\r\n return '';\r\n }\r\n\r\n return Object.keys(obj)\r\n .map((o) => this.getQueryStringParameter(o, obj[o]))\r\n .filter((o) => !!o)\r\n .join('&');\r\n }\r\n\r\n static getQueryStringParameter(key, value) {\r\n if (value === null || typeof value === 'undefined') {\r\n return '';\r\n }\r\n\r\n const items = [];\r\n\r\n if (Array.isArray(value)) {\r\n value.forEach((val) => {\r\n items.push(encodeURIComponent(key) + '=' + encodeURIComponent(val));\r\n });\r\n } else {\r\n items.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\r\n }\r\n\r\n return items.join('&');\r\n }\r\n}\r\n","export default class ObjectHelper {\r\n static isNullOrEmpty(obj) {\r\n return typeof obj === 'undefined' || obj === null || obj.length === 0;\r\n }\r\n\r\n static isDefined(obj) {\r\n return typeof obj !== 'undefined' && obj !== null;\r\n }\r\n\r\n static isArray(obj){\r\n if (typeof Array.isArray === 'undefined') {\r\n return Object.prototype.toString.call(obj) === '[object Array]';\r\n }\r\n\r\n return Array.isArray(obj);\r\n }\r\n\r\n static isString(obj) {\r\n return typeof obj === 'string';\r\n }\r\n\r\n static isNumber(obj) {\r\n return typeof obj === 'number';\r\n }\r\n\r\n static isDate(obj) {\r\n return obj instanceof Date;\r\n }\r\n}","export default class DeviceHelper {\r\n static isMobilebrowser() {\r\n return /Android|webOS|iPhone|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\r\n }\r\n}","export default (topicsQs) => {\r\n\r\n if (topicsQs) {\r\n toggleContainer('voyage-filtered-list', 'block');\r\n toggleContainer('hide-toggle', 'none');\r\n var title = document.getElementsByTagName('h1');\r\n var topicsTitle = document.querySelectorAll('[data-topicname=\"' + topicsQs + '\"]');\r\n if (title && title.length > 0 && topicsTitle && topicsTitle.length > 0) {\r\n var filterTitle = document.getElementById('topicsFilterTitle');\r\n if (filterTitle) {\r\n filterTitle.innerText = \" - \" + topicsTitle[0].innerText;\r\n }\r\n else {\r\n var span = document.createElement('span');\r\n span.id = 'topicsFilterTitle';\r\n span.innerText = \" - \" + topicsTitle[0].innerText;\r\n title[0].append(span);\r\n }\r\n\r\n var titleSection = title[0].getElementsByTagName('span');\r\n if (titleSection && titleSection.length > 0) {\r\n titleSection[0].classList.add('do-not-show');\r\n }\r\n }\r\n\r\n var filterContainer = document.getElementById('Multi-field-Media');\r\n if (filterContainer) {\r\n var closeFilterTitle = document.getElementById('closeFilterTitle');\r\n if (!closeFilterTitle) {\r\n var div = document.createElement('div');\r\n div.classList.add('clear-filter');\r\n div.insertAdjacentHTML('beforeend', '
');\r\n filterContainer.parentNode.append(div);\r\n }\r\n }\r\n\r\n var closeFilter = document.getElementById('closeFilterTitle');\r\n if (closeFilter) {\r\n closeFilter.addEventListener('click', (e) => {\r\n e.preventDefault();\r\n location.href = location.href.split(\"?\")[0];\r\n });\r\n }\r\n }\r\n else {\r\n toggleContainer('voyage-filtered-list', 'none');\r\n toggleContainer('hide-toggle', 'block');\r\n var title = document.getElementById('topicsFilterTitle');\r\n if (title) {\r\n title.remove();\r\n }\r\n }\r\n}\r\n\r\nexport const voyageInsights2FilterTitle = (topicsQs) => {\r\n\r\n\r\n if (topicsQs) {\r\n toggleContainer('voyage-filtered-list', 'block');\r\n toggleContainer('hide-toggle', 'none');\r\n\r\n var filterContainer = document.getElementById('Multi-field-Media');\r\n if (filterContainer && topicsQs['topics']) {\r\n var topicsObject = topicsQs['topics'];\r\n var topicsValue = Array.isArray(topicsObject) ? topicsObject[0] : topicsObject;\r\n filterContainer.innerHTML = '';\r\n var div = document.createElement('div');\r\n var closeFilterTitle = document.getElementById('closeFilterTitle');\r\n var closeFilterHtml = !closeFilterTitle ? '
' +\r\n '' +\r\n '' +\r\n '' +\r\n ''\r\n : '';\r\n div.insertAdjacentHTML('beforeend', '
' +\r\n '
' + ((topics || {})[topicsValue] || '') + '
' +\r\n closeFilterHtml +\r\n '
' +\r\n '
');\r\n filterContainer.append(div); \r\n }\r\n else if (filterContainer && topicsQs['themes']) {\r\n \r\n filterContainer.innerHTML = '';\r\n var div = document.createElement('div');\r\n var closeFilterTitle = document.getElementById('closeFilterTitle');\r\n var closeFilterHtml = !closeFilterTitle ? '
' +\r\n '' +\r\n '' +\r\n '' +\r\n ''\r\n : '';\r\n div.insertAdjacentHTML('beforeend', '
' +\r\n '
' + getThemeTitle(topicsQs['themes']) + '
' +\r\n closeFilterHtml +\r\n '
' +\r\n '
');\r\n filterContainer.append(div); \r\n }\r\n\r\n var searchFilter = document.getElementById('filter-search-field');\r\n var filterList = document.getElementsByClassName('checkBoxGroup');\r\n if (searchFilter && filterList.length) {\r\n var isFilterListContainingSearchFilter = filterList[0].getElementsByClassName('filter-search-field-wrapper');\r\n if (!isFilterListContainingSearchFilter.length) {\r\n filterList[0].append(searchFilter.parentElement.parentElement);\r\n } \r\n }\r\n\r\n var closeFilterTitle = document.getElementById('closeFilterTitle');\r\n if (!closeFilterTitle) {\r\n var filterContainer = document.getElementsByClassName('checkBoxGroup');\r\n if (filterContainer.length) {\r\n var div = document.createElement('div');\r\n div.classList.add('clear-filter');\r\n div.insertAdjacentHTML('beforeend', '
');\r\n filterContainer[0].append(div);\r\n }\r\n } \r\n\r\n var closeFilter = document.getElementById('closeFilterTitle');\r\n if (closeFilter) {\r\n closeFilter.addEventListener('click', (e) => {\r\n e.preventDefault();\r\n location.href = location.href.split(\"?\")[0];\r\n });\r\n }\r\n }\r\n else {\r\n toggleContainer('voyage-filtered-list', 'none');\r\n toggleContainer('hide-toggle', 'block');\r\n var title = document.getElementById('topicsFilterTitle');\r\n if (title) {\r\n title.remove();\r\n }\r\n }\r\n}\r\n\r\nfunction getThemeTitle(value) {\r\n var themesTitlesElement = document.querySelector(\"a.voyage__more-link[href*='?themes='\");\r\n var themesTitle = themesTitlesElement && themesTitlesElement.parentElement && themesTitlesElement.parentElement.parentElement \r\n ? themesTitlesElement.parentElement.parentElement.querySelector('div').innerText \r\n : (document.getElementById(value) ? document.getElementById(value).innerText : '')\r\n return themesTitle;\r\n}\r\n\r\n\r\nconst toggleContainer = (className, value) => {\r\n var toggleContainer = document.getElementsByClassName(className);\r\n if(toggleContainer.length) {\r\n Array.from(toggleContainer, function(container) {\r\n container.style.display = value;\r\n });\r\n }\r\n}\r\n","class ElasticSearchHelper {\r\n static buildFilterListRequestBody(obj, culture) {\r\n let body = {};\r\n body._source = [\r\n \"Id\",\r\n \"OriginalItemId\"\r\n ];\r\n body.from = 0;\r\n body.size = 10000;\r\n\r\n var query = this.buildContentHubQuery(obj);\r\n this.addFilterQueryToElasticSearchBody(body, query, culture);\r\n\r\n if (window.contentHubSkipIDs && window.contentHubSkipIDs.length > 0) {\r\n let filter = {\r\n ids: {\r\n values: window.contentHubSkipIDs\r\n }\r\n }\r\n\r\n body.query.bool['filter'] = filter;\r\n }\r\n\r\n let prefilterQuery = this.getPrefilterQuery();\r\n if (prefilterQuery) {\r\n this.addPrefilterQuery(body, prefilterQuery);\r\n }\r\n\r\n return body;\r\n }\r\n\r\n static buildNewsRequestBody(obj, page, size, numberOfItems, culture, filterYearOnly) {\r\n let result = {\r\n body: {},\r\n onlyFilteredByYear: false\r\n };\r\n let body = {};\r\n body.from = (page - 1) * numberOfItems;\r\n body.size = size;\r\n if (!filterYearOnly) {\r\n body.sort = { NewsReleaseDate: { \"order\": \"desc\" } };\r\n }\r\n\r\n\r\n var newsQueryResult = this.buildNewsQuery(obj, 'NewsReleaseDate', filterYearOnly);\r\n var query = newsQueryResult.query;\r\n this.addFilterQueryToElasticSearchBody(body, query, culture);\r\n\r\n if (window.contentHubSkipIDs) {\r\n let idsObj = {\r\n ids: {\r\n values: window.contentHubSkipIDs\r\n }\r\n };\r\n\r\n body.query.bool['must_not'] = idsObj;\r\n }\r\n\r\n let prefilterQuery = this.getPrefilterQuery();\r\n if (prefilterQuery) {\r\n this.addPrefilterQuery(body, prefilterQuery, !newsQueryResult.hasYearSelected);\r\n }\r\n\r\n result.body = body;\r\n result.onlyFilteredByYear = newsQueryResult.onlyFilteredByYear;\r\n return result;\r\n }\r\n\r\n static buildContentHubRequestBody(obj, page, size, numberOfItems, culture) {\r\n let body = {};\r\n body.from = (page - 1) * numberOfItems;\r\n body.size = size;\r\n body.sort = { DatePublished: { \"order\": \"desc\" } };\r\n\r\n\r\n var query = this.buildContentHubQuery(obj);\r\n this.addFilterQueryToElasticSearchBody(body, query, culture);\r\n\r\n if (window.contentHubSkipIDs) {\r\n let idsObj = {\r\n ids: {\r\n values: window.contentHubSkipIDs\r\n }\r\n };\r\n\r\n body.query.bool['must_not'] = idsObj;\r\n }\r\n\r\n let prefilterQuery = this.getPrefilterQuery();\r\n if (prefilterQuery) {\r\n this.addPrefilterQuery(body, prefilterQuery);\r\n }\r\n\r\n return body;\r\n }\r\n\r\n static buildVoyageTopicsBody(obj, page, size, numberOfItems, culture) {\r\n let body = {};\r\n body.from = (page - 1) * numberOfItems;\r\n body.size = size;\r\n body.sort = { DatePublished: { \"order\": \"desc\" } };\r\n\r\n let query = {\r\n bool: {\r\n must: []\r\n }\r\n };\r\n\r\n\r\n let voyageTopics = [\r\n { \"term\": { \"topics\": \"voyage\" } },\r\n { \"term\": { \"topics\": \"autonomous-shipping\" } },\r\n { \"term\": { \"topics\": \"ship-traffic-control\" } },\r\n { \"term\": { \"topics\": \"smart-simulation\" } },\r\n { \"term\": { \"topics\": \"smart-voyage-optimisation\" } }\r\n ]\r\n\r\n this.addShouldExpression(query, voyageTopics);\r\n this.addFilterQueryToElasticSearchBody(body, query, culture);\r\n\r\n if (window.contentHubSkipIDs) {\r\n let idsObj = {\r\n ids: {\r\n values: window.contentHubSkipIDs\r\n }\r\n };\r\n\r\n body.query.bool['must_not'] = idsObj;\r\n }\r\n\r\n return body;\r\n }\r\n\r\n static addFilterQueryToElasticSearchBody(body, query, culture) {\r\n let mustMatchLanguage = null;\r\n\r\n if (culture && culture.length > 0) {\r\n mustMatchLanguage = { \"match\": { \"Language\": culture } }\r\n }\r\n\r\n var defaultMust = mustMatchLanguage ? [mustMatchLanguage] : [];\r\n\r\n if (!query) {\r\n body.query = {\r\n bool: {\r\n must: defaultMust\r\n }\r\n };\r\n } else {\r\n if (!query.bool.must) {\r\n query.bool.must = defaultMust;\r\n } else if (Array.isArray(query.bool.must)) {\r\n if (mustMatchLanguage) {\r\n query.bool.must.push(mustMatchLanguage);\r\n }\r\n } else {\r\n var must = defaultMust;\r\n must.push(query.bool.must);\r\n query.bool.must = must;\r\n }\r\n body.query = query;\r\n }\r\n }\r\n\r\n static buildNewsQuery(obj, dateFieldName, filterYearOnly) {\r\n if (!filterYearOnly) {\r\n filterYearOnly = false;\r\n }\r\n var result = {\r\n hasYearSelected: false,\r\n onlyFilteredByYear: true\r\n };\r\n\r\n if (!(obj && obj.length > 0)) {\r\n return result;\r\n }\r\n\r\n let query = {\r\n bool: {\r\n must: []\r\n }\r\n }\r\n\r\n var keyworSearchConditions = [];\r\n var dateConditions = [];\r\n if (!dateFieldName) {\r\n dateFieldName = 'DatePublished';\r\n }\r\n\r\n obj.forEach((e, idx, array) => {\r\n if (e.taxonName && e.taxonName.toLowerCase() === \"year\") {\r\n if (e.value && !isNaN(e.value)) {\r\n var year = Number(e.value);\r\n\r\n dateConditions.push({\r\n range: {\r\n [dateFieldName]: {\r\n gte: (year - 1) + '-12-31',\r\n lte: year + 1 + '',\r\n }\r\n }\r\n });\r\n result.hasYearSelected = true;\r\n }\r\n }\r\n else if (e.hasOwnProperty('fieldName') && !filterYearOnly) {\r\n var searchConditions = this.getKeywordSearchConditions(e.fieldName, e.value);\r\n\r\n for (var j = 0; j < searchConditions.length; j++) {\r\n keyworSearchConditions.push(searchConditions[j]);\r\n }\r\n result.onlyFilteredByYear = false;\r\n }\r\n else if (!filterYearOnly) {\r\n let singleCategoryConditions = [];\r\n let propName = (e.taxonName == \"Industries\" || e.taxonName == \"Business function\" ? e.taxonName.replace(/\\s/g, '') : e.taxonName.toLowerCase().replace(/\\s/g, '')) + \".keyword\";\r\n\r\n for (let i = 0; i < e.value.length; i++) {\r\n let propValue = e.value[i];\r\n\r\n let categoryCondition = {\r\n match: {\r\n [propName]: propValue\r\n }\r\n };\r\n\r\n singleCategoryConditions.push(categoryCondition);\r\n result.onlyFilteredByYear = false;\r\n }\r\n this.addShouldExpression(query, singleCategoryConditions);\r\n }\r\n });\r\n\r\n this.addShouldExpression(query, keyworSearchConditions);\r\n this.addShouldExpression(query, dateConditions);\r\n\r\n result.query = query;\r\n return result;\r\n }\r\n\r\n static buildContentHubQuery(obj) {\r\n if (!(obj && obj.length > 0)) {\r\n return;\r\n }\r\n\r\n let query = {\r\n bool: {\r\n must: []\r\n }\r\n }\r\n\r\n var keyworSearchConditions = [];\r\n // var taxaConditions = [];\r\n var dateConditions = [];\r\n\r\n obj.forEach((e, idx, array) => {\r\n if (e.hasOwnProperty('fieldName')) {\r\n var searchConditions = this.getKeywordSearchConditions(this.uppercaseFirstLetter(e.fieldName), e.value);\r\n\r\n for (var j = 0; j < searchConditions.length; j++) {\r\n keyworSearchConditions.push(searchConditions[j]);\r\n }\r\n }\r\n else if (e.taxonName && e.taxonName.toLowerCase() === \"year\") {\r\n if (e.value && !isNaN(e.value)) {\r\n var year = Number(e.value) + 1;\r\n var yearLte = year + '-01-01';\r\n\r\n dateConditions.push({\r\n range: {\r\n \"DatePublished\": {\r\n lte: yearLte\r\n }\r\n }\r\n });\r\n }\r\n }\r\n else {\r\n let singleCategoryConditions = [];\r\n let propName = (e.taxonName == \"Industries\" || e.taxonName == \"Business function\" ? e.taxonName.replace(/\\s/g, '') : e.taxonName.toLowerCase().replace(/\\s/g, '')) + \".keyword\";\r\n\r\n for (let i = 0; i < e.value.length; i++) {\r\n let propValue = e.value[i];\r\n\r\n let categoryCondition = {\r\n match: {\r\n [propName]: propValue\r\n }\r\n };\r\n\r\n singleCategoryConditions.push(categoryCondition);\r\n // taxaConditions.push(categoryCondition);\r\n }\r\n\r\n this.addShouldExpression(query, singleCategoryConditions);\r\n }\r\n });\r\n\r\n this.addShouldExpression(query, keyworSearchConditions);\r\n // this.addShouldExpression(query, taxaConditions);\r\n this.addShouldExpression(query, dateConditions);\r\n\r\n return query;\r\n }\r\n\r\n static addShouldExpression(query, conditions) {\r\n if (conditions.length > 0) {\r\n if (conditions.length == 1) {\r\n query.bool.must.push(conditions[0]);\r\n } else {\r\n var shouldExpression = {\r\n \"bool\": {\r\n \"should\": [],\r\n \"minimum_should_match\": 1\r\n }\r\n };\r\n\r\n for (let i = 0; i < conditions.length; i++) {\r\n shouldExpression.bool.should.push(conditions[i]);\r\n }\r\n\r\n query.bool.must.push(shouldExpression);\r\n }\r\n }\r\n }\r\n\r\n static getKeywordSearchConditions(fieldName, searchPhrase) {\r\n var keyworSearchConditions = [];\r\n\r\n var value = searchPhrase.replace(/#|_|\\?|,|\\.|!|:|\\\"/g, '').replace(/\\s+/, \" \");\r\n var words = value.split(\" \");\r\n\r\n if (words && words.length > 0) {\r\n if (words.length === 1) {\r\n var condition = this.buildFuzzyWordMatch(fieldName, words[0]);\r\n keyworSearchConditions.push(condition);\r\n } else {\r\n var exact = this.buildExactPhraseMatch(fieldName, searchPhrase);\r\n keyworSearchConditions.push(exact);\r\n\r\n if (searchPhrase !== value) {\r\n var exactSanitized = this.buildExactPhraseMatch(fieldName, value);\r\n keyworSearchConditions.push(exactSanitized);\r\n }\r\n\r\n var fuzzyTerms = [];\r\n for (var j = 0; j < words.length; j++) {\r\n if (words[j].length > 2) {\r\n fuzzyTerms.push(words[j]);\r\n }\r\n }\r\n\r\n var fuzzy = this.buildFuzzyPhraseMatch(fieldName, fuzzyTerms, \"1\");\r\n keyworSearchConditions.push(fuzzy);\r\n }\r\n }\r\n\r\n return keyworSearchConditions;\r\n }\r\n\r\n static buildFuzzyWordMatch(fieldName, value) {\r\n var match = {\r\n match: {\r\n [fieldName]: {\r\n query: value,\r\n fuzziness: \"AUTO\"\r\n }\r\n }\r\n }\r\n\r\n return match;\r\n }\r\n\r\n static buildExactPhraseMatch(fieldName, value) {\r\n var match = {\r\n match_phrase: {\r\n [fieldName]: {\r\n query: value\r\n }\r\n }\r\n }\r\n\r\n return match;\r\n }\r\n\r\n static buildFuzzyPhraseMatch(fieldName, parts, fuzziness) {\r\n if (!fuzziness) {\r\n fuzziness = \"AUTO\";\r\n }\r\n\r\n var span = {\r\n span_near: {\r\n clauses: [],\r\n slop: 2,\r\n in_order: \"true\"\r\n }\r\n }\r\n\r\n for (var i = 0; i < parts.length; i++) {\r\n var clause = {\r\n span_multi: {\r\n match: {\r\n fuzzy: {\r\n [fieldName]: {\r\n fuzziness: fuzziness,\r\n value: parts[i]\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n span.span_near.clauses.push(clause);\r\n }\r\n\r\n if (span.span_near.clauses.length > 0) {\r\n return span;\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n static getPrefilterQuery() {\r\n\r\n let prefilterDataParsed = \"\";\r\n var prefilterData = document.getElementsByClassName('prefilter-data')[0];\r\n\r\n if (prefilterData) {\r\n let prefilterDataAttr = prefilterData.getAttribute('data-prefilter-data');\r\n\r\n if (prefilterDataAttr && prefilterDataAttr.length > 0) {\r\n prefilterDataParsed = JSON.parse(prefilterDataAttr);\r\n }\r\n if (prefilterDataParsed.length > 0) {\r\n prefilterDataParsed.forEach((e) => {\r\n if (Array.isArray(e.value) && e.value.length == 1) {\r\n e.value = e.value[0];\r\n }\r\n });\r\n }\r\n }\r\n\r\n return prefilterDataParsed;\r\n }\r\n\r\n static addPrefilterQuery(body, prefilterDataParsed, checkForDate) {\r\n if (!(prefilterDataParsed && prefilterDataParsed.length > 0)) {\r\n return;\r\n }\r\n\r\n let prefilteredShouldQuery = {\r\n bool: {\r\n should: [],\r\n \"minimum_should_match\": 1\r\n }\r\n };\r\n\r\n var dateConditions = [];\r\n\r\n\r\n prefilterDataParsed.forEach((e, idx, array) => {\r\n e.name = this.uppercaseFirstLetter(e.name);\r\n if (checkForDate && e.isDate) {\r\n var year = Number(e.value);\r\n dateConditions.push({\r\n range: {\r\n [e.name]: {\r\n gte: (year - 1) + '-12-31',\r\n lte: year + 1 + '',\r\n }\r\n }\r\n });\r\n }\r\n else if (e.isDate == false) {\r\n let filterIsAdded = false;\r\n let propName;\r\n if (e.isTaxonomy) {\r\n propName = e.name + \".keyword\";\r\n if (Array.isArray(e.value)) {\r\n e.value.forEach((val) => {\r\n let current = { match: { [propName]: val } };\r\n prefilteredShouldQuery.bool.should.push(current);\r\n });\r\n filterIsAdded = true;\r\n }\r\n } else {\r\n propName = e.name;\r\n }\r\n\r\n if (!filterIsAdded) {\r\n let current = { match: { [propName]: e.value } };\r\n prefilteredShouldQuery.bool.should.push(current);\r\n }\r\n }\r\n });\r\n\r\n if (dateConditions.length > 0) {\r\n this.addShouldExpression(body.query, dateConditions);\r\n }\r\n if (prefilteredShouldQuery.bool.should.length > 0) {\r\n body.query.bool.must.push(prefilteredShouldQuery);\r\n }\r\n }\r\n\r\n static uppercaseFirstLetter(string) {\r\n return string.charAt(0).toUpperCase() + string.slice(1);\r\n }\r\n}\r\n\r\nexport default ElasticSearchHelper;\r\n\r\n","export default class IRScroll {\r\n constructor() {\r\n this.init();\r\n }\r\n\r\n init() {\r\n if (!window.jQuery) {\r\n return;\r\n }\r\n var ir = $('.irScroll');\r\n if (!ir || ir.length == 0) {\r\n return;\r\n }\r\n\r\n var irHTML = $(ir).html();\r\n var initWidth = $(ir).width();\r\n\r\n if (initWidth > 478) {\r\n var duplicateContentTimes = Math.round(initWidth / 478);\r\n\r\n for (var i = 0; i < duplicateContentTimes; i++) {\r\n $(ir).append(irHTML);\r\n\r\n //init marquee when the last append comes\r\n if (i == duplicateContentTimes - 1) {\r\n createMarquee($(ir));\r\n\r\n //reinit marquee on resize\r\n $(window).resize(function () {\r\n initWidth = $(ir).width();\r\n $(ir).marquee('destroy');\r\n createMarquee($(ir));\r\n });\r\n }\r\n }\r\n\r\n } else {\r\n createMarquee($(ir));\r\n }\r\n\r\n function createMarquee(element) {\r\n element.marquee({\r\n duration: 25000,\r\n duplicated: true,\r\n pauseOnHover: true,\r\n delayBeforeStart: 0\r\n });\r\n }\r\n\r\n }\r\n\r\n}\r\n","import { onStateChange } from \"../../apps/StyleguideApp/helpers/utils\"\r\n\r\nexport function sliderHandler() {\r\n let sliders = document.querySelectorAll('.glide');\r\n if (sliders.length > 0) {\r\n sliders.forEach(x => {\r\n var autoplay = x.getAttribute('id') ? x.getAttribute('id') : false;\r\n new window.Glide(x, {\r\n autoplay: autoplay,\r\n startAt: 0,\r\n perView: 1,\r\n gap: 0,\r\n keyboard: false,\r\n dragThreshold: false\r\n }).mount();\r\n });\r\n }\r\n\r\n var lazyImages = [].slice.call(document.querySelectorAll(\".glide .glide__slide img[data-src]\"));\r\n\r\n if (\"IntersectionObserver\" in window) {\r\n let lazyImageObserver = new IntersectionObserver(function (entries, observer) {\r\n entries.forEach(function (entry) {\r\n if (entry.isIntersecting) {\r\n entry.target.setAttribute('src', entry.target.getAttribute('data-src'));\r\n lazyImageObserver.unobserve(entry.target);\r\n }\r\n });\r\n });\r\n\r\n lazyImages.forEach(function (lazyImage) {\r\n lazyImageObserver.observe(lazyImage);\r\n });\r\n }\r\n else {\r\n for (var i = 0; i < lazyImages.length; i++) {\r\n lazyImages[i].setAttribute('src', lazyImages[i].getAttribute('data-war-media-src'));\r\n }\r\n }\r\n}\r\n\r\nexport default () => onStateChange(sliderHandler)","import DropdownLinks from \"./dropdown-links\";\r\n\r\nclass WizardSelector {\r\n constructor() {\r\n }\r\n\r\n init() {\r\n this.wizardSelectorContainer = document.querySelector('.wizard-selector');\r\n this.gradientContainer = document.querySelector('.gradient-container');\r\n this.titles = document.getElementsByClassName('level-title');\r\n this.attachEvents();\r\n\r\n if (DeviceHelper.isMobilebrowser()\r\n && screen.width < 900\r\n && screen.height < 900) {\r\n this.createMobileSelector();\r\n }\r\n }\r\n\r\n attachEvents() {\r\n var matchMediaMobile = window.matchMedia('(max-width: 991px)');\r\n if (matchMediaMobile) {\r\n if (matchMediaMobile.addEventListener) {\r\n matchMediaMobile.addEventListener('change', event => {\r\n this.matchMediaChanged(event);\r\n });\r\n } else if (matchMediaMobile.addListener) {\r\n matchMediaMobile.addListener('change', event => {\r\n this.matchMediaChanged(event);\r\n });\r\n }\r\n }\r\n\r\n for (let i = 0; i < this.titles.length; i++) {\r\n this.titles[i].addEventListener('click', function () {\r\n var id = this.getAttribute('id');\r\n this.classList.add('active');\r\n var panel = document.querySelector(`.level-panel#${id}`);\r\n if (panel.style.display === 'block') {\r\n if (!panel.classList.contains('level-two')) {\r\n var openedPanels = document.querySelectorAll('.level-panel.opened');\r\n openedPanels.forEach((openedPanel) => {\r\n openedPanel.classList.remove('opened');\r\n openedPanel.style.display = 'none';\r\n });\r\n\r\n var activeHeadings = document.querySelectorAll('.level-title.active');\r\n activeHeadings.forEach((activeheading) => {\r\n activeheading.classList.remove('active');\r\n });\r\n } else {\r\n panel.classList.remove('opened');\r\n panel.style.display = 'none';\r\n this.classList.remove('active');\r\n }\r\n } else {\r\n var openedPanels = document.querySelectorAll('.level-panel.opened');\r\n if (openedPanels.length > 0) {\r\n if (openedPanels.length === 1) {\r\n if (openedPanels[0].classList[1] === panel.classList[1]) {\r\n openedPanels[0].classList.remove('opened');\r\n openedPanels[0].style.display = 'none';\r\n var activeHeadings = document.querySelectorAll('.level-title.active');\r\n if (!activeHeadings[0].isEqualNode(this)) {\r\n activeHeadings[0].classList.remove('active');\r\n } else {\r\n activeHeadings[1].classList.remove('active');\r\n }\r\n panel.classList.add('opened');\r\n panel.style.display = 'block';\r\n } else {\r\n panel.classList.add('opened');\r\n panel.style.display = 'block';\r\n this.classList.add('active');\r\n }\r\n }\r\n if (openedPanels.length === 2) {\r\n var level = panel.classList[1];\r\n if (level === 'level-one') {\r\n openedPanels.forEach((openedPanel) => {\r\n openedPanel.classList.remove('opened');\r\n openedPanel.style.display = 'none';\r\n });\r\n var activeHeadings = document.querySelectorAll('.level-title.active');\r\n activeHeadings.forEach((activeheading) => {\r\n activeheading.classList.remove('active');\r\n });\r\n this.classList.add('active');\r\n } else {\r\n openedPanels.forEach((openedPanel) => {\r\n if (openedPanel.classList.contains('level-two')) {\r\n openedPanel.classList.remove('opened');\r\n openedPanel.style.display = 'none';\r\n }\r\n });\r\n var activeHeadings = document.querySelectorAll('.level-title.active');\r\n if (!activeHeadings[1].isEqualNode(this)) {\r\n activeHeadings[1].classList.remove('active');\r\n } else {\r\n activeHeadings[2].classList.remove('active');\r\n }\r\n }\r\n\r\n panel.classList.add('opened');\r\n panel.style.display = 'block';\r\n }\r\n } else {\r\n panel.classList.add('opened');\r\n panel.style.display = 'block';\r\n }\r\n }\r\n\r\n var levels = document.querySelectorAll('.level-container');\r\n levels.forEach((level) => {\r\n if (level.querySelectorAll('.active').length > 0) {\r\n level.classList.add('is-active');\r\n } else {\r\n if (level.classList.contains('is-active')) {\r\n level.classList.remove('is-active');\r\n }\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n attachMobileEvents() {\r\n var mobileContainer = document.querySelector('.wizard-selector__mobile');\r\n var mobileTitles = mobileContainer.getElementsByClassName('level-title');\r\n for (let i = 0; i < mobileTitles.length; i++) {\r\n mobileTitles[i].addEventListener('click', function () {\r\n var id = this.getAttribute('id');\r\n this.classList.add('active');\r\n var panel = mobileContainer.querySelector(`.level-panel#${id}`);\r\n if (panel.style.display === 'block') {\r\n if (!panel.classList.contains('level-two')) {\r\n var openedPanels = mobileContainer.querySelectorAll('.level-panel.opened');\r\n openedPanels.forEach((openedPanel) => {\r\n openedPanel.classList.remove('opened');\r\n openedPanel.style.display = 'none';\r\n });\r\n\r\n var activeHeadings = mobileContainer.querySelectorAll('.level-title.active');\r\n activeHeadings.forEach((activeheading) => {\r\n activeheading.classList.remove('active');\r\n });\r\n } else {\r\n panel.classList.remove('opened');\r\n panel.style.display = 'none';\r\n this.classList.remove('active');\r\n }\r\n } else {\r\n var openedPanels = mobileContainer.querySelectorAll('.level-panel.opened');\r\n if (openedPanels.length > 0) {\r\n if (openedPanels.length === 1) {\r\n if (openedPanels[0].classList[1] === panel.classList[1]) {\r\n openedPanels[0].classList.remove('opened');\r\n openedPanels[0].style.display = 'none';\r\n var activeHeadings = mobileContainer.querySelectorAll('.level-title.active');\r\n if (!activeHeadings[0].isEqualNode(this)) {\r\n activeHeadings[0].classList.remove('active');\r\n } else {\r\n activeHeadings[1].classList.remove('active');\r\n }\r\n panel.classList.add('opened');\r\n panel.style.display = 'block';\r\n } else {\r\n panel.classList.add('opened');\r\n panel.style.display = 'block';\r\n this.classList.add('active');\r\n }\r\n }\r\n if (openedPanels.length === 2) {\r\n var level = panel.classList[1];\r\n if (level === 'level-one') {\r\n openedPanels.forEach((openedPanel) => {\r\n openedPanel.classList.remove('opened');\r\n openedPanel.style.display = 'none';\r\n });\r\n var activeHeadings = mobileContainer.querySelectorAll('.level-title.active');\r\n activeHeadings.forEach((activeheading) => {\r\n activeheading.classList.remove('active');\r\n });\r\n this.classList.add('active');\r\n } else {\r\n openedPanels.forEach((openedPanel) => {\r\n if (openedPanel.classList.contains('level-two')) {\r\n openedPanel.classList.remove('opened');\r\n openedPanel.style.display = 'none';\r\n }\r\n });\r\n var activeHeadings = mobileContainer.querySelectorAll('.level-title.active');\r\n if (!activeHeadings[1].isEqualNode(this)) {\r\n activeHeadings[1].classList.remove('active');\r\n } else {\r\n activeHeadings[2].classList.remove('active');\r\n }\r\n }\r\n\r\n panel.classList.add('opened');\r\n panel.style.display = 'block';\r\n }\r\n } else {\r\n panel.classList.add('opened');\r\n panel.style.display = 'block';\r\n }\r\n }\r\n\r\n var glide = mobileContainer.querySelector('.level-panel.opened .wizard-glide');\r\n if (glide) {\r\n var mount = new window.Glide(glide, {\r\n type: 'slider',\r\n startAt: 0,\r\n perView: 1,\r\n peek: {\r\n before: 0,\r\n after: 50\r\n },\r\n gap: 0,\r\n arrows: {\r\n prev: '.glide__arrow--prev',\r\n next: '.glide__arrow--next'\r\n },\r\n keyboard: false,\r\n dragThreshold: false\r\n }).mount();\r\n\r\n glide.querySelector('.glide-controls').style.display = 'block';\r\n var lazyImages = [].slice.call(glide.querySelectorAll(\"[data-src]\"));\r\n lazyImages.forEach(function (image) {\r\n image.setAttribute('src', image.getAttribute('data-src'));\r\n });\r\n }\r\n\r\n var levels = mobileContainer.querySelectorAll('.level-container');\r\n levels.forEach((level) => {\r\n if (level.querySelectorAll('.active').length > 0) {\r\n level.classList.add('is-active');\r\n } else {\r\n if (level.classList.contains('is-active')) {\r\n level.classList.remove('is-active');\r\n }\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n matchMediaChanged(event) {\r\n if (event.matches) {\r\n this.createMobileSelector();\r\n } else {\r\n document.querySelector('.wizard-selector__mobile').style.display = 'none';\r\n this.gradientContainer.style.display = 'block';\r\n }\r\n }\r\n\r\n createMobileSelector() {\r\n this.gradientContainer.style.display = 'none';\r\n if (document.querySelector('.wizard-selector__mobile')) {\r\n document.querySelector('.wizard-selector__mobile').style.display = 'block';\r\n } else {\r\n var wizardButtonMobile = this.wizardSelectorContainer.querySelector('.wizard-button__mobile');\r\n if (wizardButtonMobile) {\r\n wizardButtonMobile.insertAdjacentHTML('beforebegin', '
');\r\n }\r\n else {\r\n this.gradientContainer.insertAdjacentHTML('afterend', '
');\r\n }\r\n var mobileDiv = this.wizardSelectorContainer.querySelector('.wizard-selector__mobile');\r\n\r\n // Adding first level heading\r\n var levelHeadings = this.gradientContainer.querySelectorAll('.levelOne-h4');\r\n mobileDiv.insertAdjacentHTML('beforeend', levelHeadings[0].outerHTML);\r\n\r\n // Adding first level titles\r\n mobileDiv.insertAdjacentHTML('beforeend', '
');\r\n var levelContainers = this.gradientContainer.querySelectorAll('.level-container');\r\n var firstLevelTitles = levelContainers[0].querySelectorAll('.card-step-title').length > 0 ? levelContainers[0].querySelectorAll('.card-step-title') : levelContainers[0].querySelectorAll('.level-title');\r\n let counter = 1;\r\n firstLevelTitles.forEach((title) => {\r\n if (title.classList.contains('card-step-title')) {\r\n mobileDiv.querySelector('.level-container').insertAdjacentHTML('beforeend', `${title.outerHTML}`);\r\n } else {\r\n mobileDiv.querySelector('.level-container').insertAdjacentHTML('beforeend', title.outerHTML);\r\n }\r\n mobileDiv.insertAdjacentHTML('beforeend', `
`);\r\n counter++;\r\n });\r\n\r\n // Adding second level titles\r\n var secondLevelContainers = mobileDiv.querySelectorAll('.level-one .level-container');\r\n var secondCounter = 1;\r\n var thirdCounter = 1;\r\n secondLevelContainers.forEach((container) => {\r\n container.setAttribute(\"role\", \"tablist\");\r\n container.insertAdjacentHTML('beforeend', `
${levelHeadings[1].innerHTML}
${levelHeadings[1].innerHTML}
`);\r\n var secondLevelTitles = levelContainers[secondCounter].querySelectorAll('.card-step-title').length > 0 ? levelContainers[secondCounter].querySelectorAll('.card-step-title') : levelContainers[secondCounter].querySelectorAll('.level-title');\r\n secondLevelTitles.forEach((title) => {\r\n if (title.classList.contains('card-step-title')) {\r\n container.querySelector('.dropdown-links ul').insertAdjacentHTML('beforeend', `
  • ${title.outerHTML}
  • `);\r\n } else {\r\n container.querySelector('.dropdown-links ul').insertAdjacentHTML('beforeend', `
  • ${title.outerHTML}
  • `);\r\n }\r\n mobileDiv.insertAdjacentHTML('beforeend', `
      `);\r\n thirdCounter++;\r\n });\r\n secondCounter++;\r\n });\r\n\r\n var lastCounter = 0;\r\n var thirdLevelContainers = mobileDiv.querySelectorAll('.level-two .glide__slides');\r\n thirdLevelContainers.forEach((container) => {\r\n //container.insertAdjacentHTML('beforeend', '
    • ');\r\n var thirdLevelRow = this.gradientContainer.querySelectorAll('.level-two .row');\r\n for (let i = 0; i < thirdLevelRow[lastCounter].children.length - 1; i++) {\r\n container.insertAdjacentHTML('beforeend', `
    • ${thirdLevelRow[lastCounter].children[i].outerHTML}
    • `);\r\n }\r\n container.parentElement.parentElement.insertAdjacentHTML('beforeend', `${thirdLevelRow[lastCounter].querySelector('.glide-controls').outerHTML}`);\r\n lastCounter++;\r\n });\r\n\r\n this.attachMobileEvents();\r\n this.dropdownLinks = new DropdownLinks();\r\n var firstItem = document.querySelector('.wizard-selector__mobile .level-title');\r\n firstItem.click();\r\n }\r\n }\r\n}\r\nexport default WizardSelector;","export function voyageToughtLeaderCounterAnimation (qSelector, start = 0, end = 1000, duration = 1000, thousandSeparator = \"\") {\r\n const target = document.querySelector(qSelector);\r\n if (!target)\r\n return;\r\n\r\n let startTimestamp = null;\r\n const step = (timestamp) => {\r\n if (!startTimestamp) startTimestamp = timestamp;\r\n const progress = Math.min((timestamp - startTimestamp) / duration, 1);\r\n const result = formatNumber(Math.floor(progress * (end - start) + start), thousandSeparator);\r\n target.innerText = result;\r\n if (progress < 1) {\r\n window.requestAnimationFrame(step);\r\n }\r\n };\r\n window.requestAnimationFrame(step);\r\n\r\n const formatNumber = (num, thousandSeparator = \"\") => {\r\n return num.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, thousandSeparator);\r\n }\r\n}","import IePolyfills from './iePolyfills';\r\nimport MainNavigation from './main-navigation';\r\nimport LangMenuDropdown from './lang-selector';\r\nimport MobileNav from './mobile-nav';\r\nimport LazyImage from './lazy-images';\r\nimport PubSub from './content-hub';\r\nimport RelatedContent from './related-content';\r\nimport FilterList from './filter-list';\r\nimport UrlHandler from './url-handler';\r\nimport ListsContent from './lists-content';\r\nimport GridListsContent from './grid-lists-content';\r\nimport VoyageGridItemClassUpdater from './voyage-grid-item-class-updater';\r\nimport Glide from \"@glidejs/glide\";\r\nimport DropdownLinks from './dropdown-links';\r\nimport { removeExpandableListeners,addExpandableListeners } from './voyage-expandable-handler';\r\nimport voyageCarouselHandler from './voyage-carousel-handler';\r\nimport handleUnorthodoxGridItems from './voyage-unorthodox-list-handler';\r\nimport {addEventListeners} from './voyage-anchor-menu-handler';\r\nimport populateAnchorMenuByTags from './voyage-anchor-menu-populator';\r\nimport DomHelper from './helpers/dom-helper';\r\nimport ArrayHelper from './helpers/array-helper';\r\nimport IconHelper from './helpers/icon-helper';\r\nimport GUIDHelper from './helpers/guid-helper';\r\nimport DateTimeHelper from './date-time-handling';\r\nimport QueryStringHelper from './helpers/query-string-helper';\r\nimport APIHelper from './helpers/api-helper';\r\nimport ObjectHelper from './helpers/object-helper';\r\nimport DeviceHelper from './helpers/device-helper';\r\nimport voyageInsightsFilterTitle, { voyageInsights2FilterTitle } from './voyage-insight-filter-title';\r\nimport truncate from './helpers/truncate';\r\nimport ElasticSearchHelper from './elastic-search-helper';\r\nimport Authors from './authors';\r\nimport IRScroll from './ir-scroll';\r\nimport Tabs from './tabs';\r\nimport sliderHandler from './slider-handler';\r\nimport WizardSelector from './wizard-selector';\r\nimport {voyageToughtLeaderCounterAnimation} from './voyage-tought-leader-counter-animation';\r\n\r\nconst Main = {\r\n init: function() {\r\n window.IePolyfills = new IePolyfills();\r\n\r\n /* Helpers */\r\n window.DomHelper = DomHelper;\r\n window.ArrayHelper = ArrayHelper;\r\n window.GUIDHelper = GUIDHelper;\r\n window.IconHelper = IconHelper;\r\n window.QueryStringHelper = QueryStringHelper;\r\n window.DateTimeHelper = DateTimeHelper;\r\n window.APIHelper = APIHelper;\r\n window.ObjectHelper = ObjectHelper;\r\n window.DeviceHelper = DeviceHelper;\r\n window.ElasticSearchHelper = ElasticSearchHelper;\r\n\r\n /* Main components */\r\n window.Authors = new Authors();\r\n window.LazyImage = new LazyImage();\r\n window.mainNavigation = new MainNavigation();\r\n window.MobileNav = new MobileNav();\r\n window.languageSelector = new LangMenuDropdown();\r\n window.ListsContent = new ListsContent();\r\n window.pubSubEvents = new PubSub();\r\n window.RelatedContent = RelatedContent;\r\n window.FilterList = new FilterList();\r\n window.UrlHandler = new UrlHandler();\r\n window.GridListsContent = new GridListsContent();\r\n window.VoyageGridItemClassUpdater = VoyageGridItemClassUpdater();\r\n window.Glide = Glide;\r\n window.DropdownLinks = DropdownLinks;\r\n window.removeExpandableListeners = removeExpandableListeners();\r\n window.addExpandableListeners= addExpandableListeners();\r\n window.voyageCarouselHandler = voyageCarouselHandler();\r\n window.handleUnorthodoxGridItems=handleUnorthodoxGridItems();\r\n window.addEventListeners=addEventListeners();\r\n window.populateAnchorMenuByTags = populateAnchorMenuByTags();\r\n window.voyageInsightsFilterTitle = voyageInsightsFilterTitle;\r\n window.voyageInsights2FilterTitle = voyageInsights2FilterTitle;\r\n window.truncate = truncate;\r\n window.IRScroll = new IRScroll();\r\n window.Tabs = new Tabs();\r\n window.sliderHandler = sliderHandler();\r\n window.WizardSelector = WizardSelector;\r\n window.voyageToughtLeaderCounterAnimation = voyageToughtLeaderCounterAnimation;\r\n },\r\n};\r\n\r\ndocument.addEventListener(\r\n 'DOMContentLoaded',\r\n () => {\r\n var dropdownLinks = new window.DropdownLinks();\r\n dropdownLinks.init();\r\n },\r\n false\r\n)\r\n\r\nMain.init();\r\n","import picturefill from 'picturefill';\r\nimport objectFitImages from 'object-fit-images';\r\n\r\nclass IePolyfills {\r\n constructor() {\r\n this.init();\r\n }\r\n\r\n init() {\r\n // IE\r\n window.Object.assign === undefined ? window.Object.assign = Object.assign : null;\r\n\r\n if (window.document.documentMode) {\r\n picturefill();\r\n objectFitImages();\r\n }\r\n // missing forEach on NodeList for IE11\r\n if (window.NodeList && !NodeList.prototype.forEach) {\r\n NodeList.prototype.forEach = Array.prototype.forEach;\r\n }\r\n\r\n if (!Array.from) {\r\n Array.from = (function () {\r\n var toStr = Object.prototype.toString;\r\n var isCallable = function (fn) {\r\n return typeof fn === 'function' || toStr.call(fn) === '[object Function]';\r\n };\r\n var toInteger = function (value) {\r\n var number = Number(value);\r\n if (isNaN(number)) { return 0; }\r\n if (number === 0 || !isFinite(number)) { return number; }\r\n return (number > 0 ? 1 : -1) * Math.floor(Math.abs(number));\r\n };\r\n var maxSafeInteger = Math.pow(2, 53) - 1;\r\n var toLength = function (value) {\r\n var len = toInteger(value);\r\n return Math.min(Math.max(len, 0), maxSafeInteger);\r\n };\r\n \r\n // The length property of the from method is 1.\r\n return function from(arrayLike/*, mapFn, thisArg */) {\r\n // 1. Let C be the this value.\r\n var C = this;\r\n \r\n // 2. Let items be ToObject(arrayLike).\r\n var items = Object(arrayLike);\r\n \r\n // 3. ReturnIfAbrupt(items).\r\n if (arrayLike == null) {\r\n throw new TypeError(\"Array.from requires an array-like object - not null or undefined\");\r\n }\r\n \r\n // 4. If mapfn is undefined, then let mapping be false.\r\n var mapFn = arguments.length > 1 ? arguments[1] : void undefined;\r\n var T;\r\n if (typeof mapFn !== 'undefined') {\r\n // 5. else\r\n // 5. a If IsCallable(mapfn) is false, throw a TypeError exception.\r\n if (!isCallable(mapFn)) {\r\n throw new TypeError('Array.from: when provided, the second argument must be a function');\r\n }\r\n \r\n // 5. b. If thisArg was supplied, let T be thisArg; else let T be undefined.\r\n if (arguments.length > 2) {\r\n T = arguments[2];\r\n }\r\n }\r\n \r\n // 10. Let lenValue be Get(items, \"length\").\r\n // 11. Let len be ToLength(lenValue).\r\n var len = toLength(items.length);\r\n \r\n // 13. If IsConstructor(C) is true, then\r\n // 13. a. Let A be the result of calling the [[Construct]] internal method of C with an argument list containing the single item len.\r\n // 14. a. Else, Let A be ArrayCreate(len).\r\n var A = isCallable(C) ? Object(new C(len)) : new Array(len);\r\n \r\n // 16. Let k be 0.\r\n var k = 0;\r\n // 17. Repeat, while k < len… (also steps a - h)\r\n var kValue;\r\n while (k < len) {\r\n kValue = items[k];\r\n if (mapFn) {\r\n A[k] = typeof T === 'undefined' ? mapFn(kValue, k) : mapFn.call(T, kValue, k);\r\n } else {\r\n A[k] = kValue;\r\n }\r\n k += 1;\r\n }\r\n // 18. Let putStatus be Put(A, \"length\", len, true).\r\n A.length = len;\r\n // 20. Return A.\r\n return A;\r\n };\r\n }());\r\n }\r\n }\r\n}\r\n\r\nexport default IePolyfills;\r\n","class Authors {\r\n constructor() {\r\n this.init();\r\n }\r\n\r\n init() {\r\n const authorsPlaceholder = document.getElementsByClassName('authors-placeholder');\r\n const authorsList = document.getElementsByClassName('js-authors-list');\r\n if (authorsPlaceholder && authorsPlaceholder.length > 0 && authorsList && authorsList.length > 0) {\r\n this.showAuthors(authorsList[0]);\r\n authorsPlaceholder[0].innerHTML = authorsList[0].outerHTML;\r\n authorsPlaceholder[0].firstChild.classList.remove('js-authors-list');\r\n authorsList[0].parentNode.removeChild(authorsList[0]);\r\n }\r\n else if (authorsPlaceholder && authorsPlaceholder.length > 0) {\r\n authorsPlaceholder[0].parentNode.removeChild(authorsPlaceholder[0]);\r\n }\r\n else if (authorsList && authorsList.length > 0) {\r\n this.showAuthors(authorsList[0]);\r\n }\r\n }\r\n\r\n showAuthors(authors) {\r\n if (authors.getAttribute('style') != null && authors.getAttribute('style') != \"\") {\r\n authors.setAttribute('style', '');\r\n }\r\n }\r\n}\r\n\r\nexport default Authors;","\r\nclass LazyImage {\r\n constructor() {\r\n const images = window.document.querySelectorAll('source, img');\r\n const backgroundImages = window.document.querySelectorAll('.background-lazy');\r\n\r\n // Some config parameters for the IntersectionObserve\r\n const config = {\r\n // If the image gets within 50px in the Y axis, start the download.\r\n rootMargin: '50px 0px',\r\n threshold: 0.01\r\n };\r\n\r\n let observer;\r\n\r\n const onIntersection = (entries) => {\r\n entries.forEach(entry => {\r\n if (entry.intersectionRatio > 0) {\r\n // Stop watching and load the image\r\n observer.unobserve(entry.target);\r\n // call our method: preloadImage\r\n if (entry.target.dataset.background) {\r\n this.preloadBackgroundImage(entry.target);\r\n } else {\r\n this.preloadImage(entry.target);\r\n }\r\n }\r\n });\r\n };\r\n\r\n // If we don't have support for intersection observer, load the images immediately\r\n if (!('IntersectionObserver' in window)) {\r\n images.forEach(image => this.preloadImage(image));\r\n backgroundImages.forEach(backgroundImage => this.preloadBackgroundImage(backgroundImage));\r\n } else {\r\n // It is supported, load the images by calling our method: onIntersection\r\n observer = new IntersectionObserver(onIntersection, config);\r\n images.forEach(image => {\r\n observer.observe(image);\r\n });\r\n\r\n backgroundImages.forEach(backgroundImage => {\r\n observer.observe(backgroundImage);\r\n });\r\n }\r\n\r\n window.onbeforeprint = (event) => {\r\n images.forEach(image => this.preloadImage(image));\r\n backgroundImages.forEach(backgroundImage => this.preloadBackgroundImage(backgroundImage));\r\n };\r\n }\r\n\r\n preloadImage(element) {\r\n if (element.dataset && element.dataset.src) {\r\n element.src = element.dataset.src;\r\n if (element.parentNode.parentNode) {\r\n element.parentNode.parentNode.classList.remove('lazy');\r\n }\r\n }\r\n if (element.dataset && element.dataset.srcset) {\r\n element.srcset = element.dataset.srcset;\r\n }\r\n }\r\n\r\n preloadBackgroundImage(element) {\r\n if (element.dataset && element.dataset.background) {\r\n element.style.backgroundImage = `url('${element.dataset.background}')`;\r\n }\r\n }\r\n}\r\n\r\nexport default LazyImage;\r\n","import RegionSelector from './region-selector';\r\nimport * as uiConsts from './consts';\r\n\r\nclass MainNavigation {\r\n constructor() {\r\n this.navigationNode = document.getElementsByClassName('main-navigation')[0];\r\n this.regionSelector = new RegionSelector();\r\n\r\n this.stickyNav();\r\n }\r\n\r\n stickyNav() {\r\n const header = document.querySelector('.header');\r\n\r\n window.addEventListener('scroll', () => {\r\n if (window.pageYOffset > 0) {\r\n header.classList.add('sticky');\r\n\r\n if (this.regionSelector.regionFlyout) {\r\n this.regionSelector.regionFlyout.classList.add(\r\n uiConsts.COLLAPSE_OPACITY_CLASS\r\n );\r\n }\r\n } else {\r\n header.classList.remove('sticky');\r\n \r\n if (this.regionSelector.regionFlyout) {\r\n this.regionSelector.regionFlyout.classList.remove(\r\n uiConsts.COLLAPSE_OPACITY_CLASS\r\n );\r\n }\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default MainNavigation;\r\n","import * as uiConsts from \"./consts\"\r\nclass RegionSelector {\r\n constructor() {\r\n this.region = document.querySelector(\".region\")\r\n this.regionFlyout = document.querySelector(\".region__dropdown-content\")\r\n\r\n if (!this.region || !this.regionFlyout) {\r\n return;\r\n }\r\n\r\n this.initRegionMobile()\r\n }\r\n\r\n initRegionMobile() {\r\n document.querySelector(\".region-mobile\").addEventListener(\"change\", e => {\r\n e.preventDefault()\r\n let selectedReg = document.querySelector(\".mobileregionSelect\");\r\n \r\n if (!selectedReg) {\r\n return;\r\n }\r\n\r\n let slectedRegValue = selectedReg.options[selectedReg.selectedIndex].value\r\n window.location.assign(slectedRegValue)\r\n })\r\n\r\n this.region.addEventListener(\"click\", () => {\r\n if (this.regionFlyout.classList.contains(uiConsts.COLLAPSE_OPACITY_CLASS))\r\n this.regionFlyout.classList.remove(uiConsts.COLLAPSE_OPACITY_CLASS)\r\n else this.regionFlyout.classList.add(uiConsts.COLLAPSE_OPACITY_CLASS)\r\n })\r\n }\r\n}\r\n\r\nexport default RegionSelector\r\n","import * as uiConsts from \"./consts\"\r\nimport * as mobileNavHelper from \"./mobile-nav-helper\"\r\n\r\nclass MobileNavigation {\r\n constructor() {\r\n this.navigationNode = document.getElementsByClassName(\"main-navigation\")[0]\r\n this.hamburger = document.querySelector(\".btn-toggleMobile\")\r\n\r\n window.matchMedia(\"(min-width: 767px)\").addListener(e => {\r\n if (e.matches) {\r\n this.closeNav()\r\n this.hamburger.classList.remove(\"open\")\r\n }\r\n })\r\n\r\n this.initMobile()\r\n }\r\n\r\n initMobile() {\r\n if (this.hamburger === null) return;\r\n this.hamburger.addEventListener(\"click\", event => {\r\n this.hamburger.classList.toggle(\"open\")\r\n if (this.hamburger.classList.contains(\"open\")) this.openNav()\r\n else this.closeNav()\r\n })\r\n\r\n mobileNavHelper.getMobileNav()\r\n }\r\n\r\n openNav() {\r\n document.getElementById(\"nav-mobile\").style.width = \"100%\"\r\n uiConsts.NAV_MOBILE.style.display = \"block\"\r\n }\r\n\r\n closeNav() {\r\n document.getElementById(\"nav-mobile\").style.width = \"0\"\r\n uiConsts.NAV_MOBILE.style.display = \"none\"\r\n }\r\n}\r\n\r\nexport default MobileNavigation\r\n","class LangMenuDropdown {\r\n constructor() {\r\n this.langMenu = document.querySelector(\"#lang-menu-trigger\")\r\n //TODO: load only when mobile\r\n this.initMobileLang()\r\n }\r\n\r\n initMobileLang() {\r\n if (!this.langMenu) {\r\n return\r\n }\r\n\r\n document.querySelector(\".lang-mobile\").addEventListener(\"change\", e => {\r\n e.preventDefault()\r\n let selectedIndex = document.querySelector(\".mobilelanguageSelect\")\r\n .selectedIndex\r\n let slectedLangValue = document.querySelector(\".mobilelanguageSelect\")\r\n .options[selectedIndex].value\r\n\r\n this.openLink(slectedLangValue)\r\n })\r\n }\r\n\r\n openLink(culture) {\r\n const redirectUrl = document.querySelector(\"[data-sf-role=\" + culture + \"]\")\r\n .value\r\n window.location.assign(redirectUrl)\r\n }\r\n}\r\n\r\nexport default LangMenuDropdown\r\n","class ListsContent {\r\n constructor() {\r\n this.classes = {\r\n single: ['col-md-12', 'col-lg-12', 'card-single'],\r\n gridSingle: ['col-md-12', 'col-lg-12'],\r\n double: ['col-md-6', 'col-lg-6'],\r\n cardDouble: ['col-md-6', 'col-lg-6', 'card-double'],\r\n multi: ['col-md-6', 'col-lg-4']\r\n };\r\n }\r\n\r\n styleLists() {\r\n const cardWrapper = document.querySelectorAll('.js-card-lift.automatic');\r\n for (let i = 0; i < cardWrapper.length; i++) {\r\n let visibleElements = [...cardWrapper[i].children].filter(n => !n.classList.contains('do-not-show') && !n.classList.contains('grid-card-lift') && n.classList.contains('card-lift'));\r\n this.addCssClasses(visibleElements);\r\n }\r\n }\r\n\r\n styleGridLists() {\r\n const cardGridWrapper = document.querySelectorAll('.js-card-lift-grid .js-card-lift');\r\n for (let i = 0; i < cardGridWrapper.length; i++) {\r\n let visibleGridElements = [...cardGridWrapper[i].children].filter(n => !n.classList.contains('do-not-show') && n.classList.contains('card-lift'));\r\n visibleGridElements.forEach(el => {\r\n el.classList.remove('card-lift');\r\n el.classList.add('grid-card-lift'); \r\n }); \r\n \r\n switch(visibleGridElements.length) {\r\n case 1:\r\n this.changeLayout(visibleGridElements, this.classes.gridSingle);\r\n break;\r\n case 2:\r\n this.changeLayout(visibleGridElements, this.classes.double);\r\n break;\r\n default:\r\n this.changeLayout(visibleGridElements, this.classes.multi);\r\n }\r\n }\r\n }\r\n\r\n styleSingleLists() {\r\n const cardWrapper = document.querySelectorAll('.js-card-lift.list-view');\r\n for (let i = 0; i < cardWrapper.length; i++) {\r\n let visibleElements = [...cardWrapper[i].children].filter(n => !n.classList.contains('do-not-show') && !n.classList.contains('grid-card-lift') && n.classList.contains('card-lift'));\r\n \r\n switch(visibleElements.length) {\r\n case 1:\r\n this.changeLayout(visibleElements.slice(0, 1), this.classes.gridSingle);\r\n break;\r\n case 2:\r\n this.changeLayout(visibleElements.slice(0, 2), this.classes.double);\r\n break;\r\n default:\r\n this.changeLayout(visibleElements.slice(), this.classes.multi);\r\n }\r\n }\r\n }\r\n\r\n addCssClasses(visibleElements) {\r\n switch(visibleElements.length % 3) {\r\n case 1:\r\n this.changeLayout(visibleElements.slice(0, 1), this.classes.single);\r\n this.changeLayout(visibleElements.slice(1), this.classes.multi);\r\n break;\r\n case 2:\r\n this.changeLayout(visibleElements.slice(0, 2), this.classes.cardDouble);\r\n this.changeLayout(visibleElements.slice(2), this.classes.multi);\r\n break;\r\n default:\r\n this.changeLayout(visibleElements.slice(), this.classes.multi);\r\n }\r\n }\r\n\r\n changeLayout(items, classes) {\r\n if(items && items.length > 0) {\r\n items.forEach(el => {\r\n if(el.nodeType === Node.ELEMENT_NODE ) {\r\n el.classList.remove(...this.classes.single, ...this.classes.double, ...this.classes.multi, ...this.classes.cardDouble);\r\n el.classList.add(...classes);\r\n } else{\r\n el.className = classes.reduce((cur, next) => cur + ' ' + next);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\nexport default ListsContent;\r\n","class PubSub {\r\n constructor() {\r\n this.subscribers = {\r\n 'hubsUpdate': [],\r\n 'urlUpdate': [] };\r\n }\r\n publish(eventName, data) {\r\n if (!this.subscribers[eventName]) return;\r\n this.subscribers[eventName].forEach((subscriberCallback) => {\r\n subscriberCallback(data !== undefined ? data : {});\r\n });\r\n }\r\n\r\n subscribe(eventName, callback) {\r\n if (!this.subscribers[eventName]) {\r\n this.subscribers[eventName] = [];\r\n }\r\n if (window.dobriInnerTest) {\r\n window.dobriInnerTest.push(callback);\r\n } else {\r\n window.dobriInnerTest = [];\r\n window.dobriInnerTest.push(callback);\r\n }\r\n this.subscribers[eventName].push(callback);\r\n\r\n return {\r\n unsubscribe() {\r\n this.subscribers[eventName].splice(index, 1);\r\n }\r\n };\r\n }\r\n}\r\n\r\nexport default PubSub;\r\n\r\n","class FilterList {\r\n constructor() {\r\n this.dataTaxon = [];\r\n this.init();\r\n\r\n window.pubSubEvents.subscribe('hubsUpdate', (params) => {\r\n if (this.hasSearchUrl()) {\r\n this.filterListsByIds(params);\r\n } else {\r\n this.filterListsByCategories(params);\r\n }\r\n });\r\n }\r\n\r\n filterListsByIds(params) {\r\n if(params && params.length > 0) {\r\n this.getFilteredIds(params).then((ids) => {\r\n var foundLists = this.dataTaxon.filter(item => {\r\n return item.hubId && ids.some((id) => item.hubId.toLowerCase() == id.toLowerCase());\r\n });\r\n \r\n if (foundLists) {\r\n foundLists.forEach(elm => {\r\n this.showList(elm);\r\n });\r\n }\r\n \r\n const listsToHide = this.dataTaxon.filter((item) => foundLists.indexOf(item) === -1 && item.taxons.length > 0);\r\n if (listsToHide) {\r\n listsToHide.forEach( el => this.hideList(el));\r\n }\r\n window.ListsContent.styleLists();\r\n });\r\n } else{\r\n this.dataTaxon.forEach(el => this.showList(el));\r\n window.ListsContent.styleLists();\r\n }\r\n\r\n \r\n }\r\n\r\n // Old\r\n filterListsByCategories(params) {\r\n if(params && params.length > 0) {\r\n this.params = params;\r\n let foundLists = [];\r\n foundLists = this.dataTaxon.filter(list => {\r\n if (!(list.hasOwnProperty('taxons') && ObjectHelper.isArray(list.taxons))) {\r\n return false;\r\n }\r\n\r\n var taxaParams = params.filter((param) =>{\r\n return !(param.hasOwnProperty('fieldName') || param.taxonName === 'year')\r\n });\r\n\r\n const taxas = list.taxons.slice();\r\n return taxaParams.every((param) => {\r\n const foundTaxa = taxas.filter((tx) => {\r\n return tx.taxonName.toLowerCase() === param.taxonName.toLowerCase();\r\n });\r\n\r\n if (foundTaxa.length > 0) {\r\n const formattedParams = param.value.map(i =>\r\n i.toLowerCase().replace(/-|\\s/g, '')\r\n );\r\n\r\n return foundTaxa[0].value.some(val => formattedParams.includes(val.replace(/-|\\s/g, '').toLowerCase()));\r\n }\r\n\r\n return false;\r\n });\r\n });\r\n\r\n\r\n if (foundLists) {\r\n foundLists.forEach(elm => {\r\n this.showList(elm);\r\n });\r\n }\r\n\r\n const listsToHide = this.dataTaxon.filter((item) => foundLists.indexOf(item) === -1 && item.taxons.length > 0);\r\n if (listsToHide) {\r\n listsToHide.forEach( el => this.hideList(el));\r\n }\r\n } else{\r\n this.dataTaxon.forEach(el => this.showList(el));\r\n }\r\n\r\n window.ListsContent.styleLists();\r\n window.VoyageGridItemClassUpdaterLazy();\r\n }\r\n\r\n\r\n init() {\r\n const filter = document.querySelector('.filter-widget__wrapper');\r\n if(filter) {\r\n this.hideDuplicateElements();\r\n }\r\n\r\n const lists = document.querySelectorAll('[data-taxa]');\r\n lists.forEach(element => {\r\n const elId = element.getAttribute('id');\r\n const taxons = element.getAttribute('data-taxa');\r\n const hubId = element.getAttribute('data-hub-id');\r\n\r\n const listObj = {\r\n id: elId,\r\n hubId: hubId\r\n };\r\n\r\n if (taxons && taxons.length > 0) {\r\n listObj.taxons = JSON.parse(taxons);\r\n }\r\n\r\n this.dataTaxon.push(listObj);\r\n });\r\n\r\n this.searchUrl = window.contentHubResultServiceUrl;\r\n\r\n if (!this.searchUrl) {\r\n console.log('hub search not configured. Filtering by categories');\r\n }\r\n }\r\n\r\n hasSearchUrl(){\r\n return !!this.searchUrl;\r\n }\r\n\r\n hideList(el) {\r\n const listEl = document.getElementById(el.id);\r\n if(listEl && !listEl.classList.contains('do-not-show')) {\r\n listEl.classList.add('do-not-show');\r\n }\r\n }\r\n\r\n showList(el) {\r\n const listEl = document.getElementById(el.id);\r\n if(listEl && listEl.classList.contains('do-not-show')) {\r\n listEl.classList.remove('do-not-show');\r\n }\r\n }\r\n\r\n hideDuplicateElements() {\r\n const items = document.querySelectorAll('.card-lift');\r\n const links = [];\r\n items.forEach(item => {\r\n const href = item.querySelector('a').href;\r\n if(links.indexOf(href) === -1) {\r\n links.push(href);\r\n } else{\r\n item.classList.add('do-not-show');\r\n }\r\n });\r\n }\r\n\r\n getFilteredIds(obj) {\r\n const data = ElasticSearchHelper.buildFilterListRequestBody(obj);\r\n if(data)\r\n\r\n return new Promise((resolve, reject) => {\r\n APIHelper.post({\r\n url: this.searchUrl,\r\n data\r\n }).then((response) => {\r\n let hits = response.hits.hits;\r\n\r\n let ids = [];\r\n for (var i = 0; i < hits.length; i++) {\r\n ids.push(hits[i]._id)\r\n }\r\n \r\n resolve(ids);\r\n })\r\n });\r\n }\r\n}\r\n\r\nexport default FilterList;\r\n","class UrlHandler {\r\n constructor() {\r\n this.urlArr = [];\r\n\r\n this.init();\r\n\r\n window.pubSubEvents.subscribe('hubsUpdate', (params) => {\r\n if(params && params.length > 0) {\r\n const dataAsQueryString = this.parseData(params).filter((value, index, self) => {\r\n return self.indexOf(value) === index;\r\n });\r\n window.history.pushState(\r\n null,\r\n 'contentHubsStateTitle',\r\n window.location.pathname.trim('/') + '?' + dataAsQueryString.join('&'));\r\n } else {\r\n window.history.pushState(null, 'contentHubsStateTitle', window.location.pathname.trim('/'));\r\n }\r\n });\r\n }\r\n\r\n init() {\r\n if (window.location.search > '') {\r\n const urlParams = location.search.substring(1).split('&').map((str) => {\r\n const tmp = str.split('=');\r\n if (tmp.length > 1) {\r\n return {\r\n param: tmp[0],\r\n values: tmp[1].split(/[, ]+/)\r\n };\r\n }\r\n });\r\n\r\n urlParams.forEach(param => setTimeout(function() { window.pubSubEvents.publish('urlUpdate', param); }, 600));\r\n }\r\n }\r\n\r\n parseData(data) {\r\n const result = [];\r\n const searchFields = [];\r\n let searchValue = '';\r\n\r\n data.forEach(el => {\r\n if (el.hasOwnProperty('fieldName')) {\r\n if (el.fieldName != 'search-value-with-fields') {\r\n searchFields.push(encodeURI(el.fieldName));\r\n }\r\n searchValue = encodeURI(el.value);\r\n }\r\n else {\r\n result.push(el.taxonName + '=' + el.value.join())\r\n }\r\n });\r\n\r\n if (searchValue) {\r\n result.push('search-value-with-fields' + '=' + searchValue + \",\" + searchFields.join());\r\n }\r\n return result;\r\n }\r\n}\r\n\r\nexport default UrlHandler;\r\n","\r\nclass GridListsContent {\r\n constructor() {\r\n this.init();\r\n }\r\n\r\n init() {\r\n if (document.querySelector('.js-card-lift-grid') !== null) {\r\n window.ListsContent.styleGridLists();\r\n }\r\n }\r\n}\r\n\r\nexport default GridListsContent;\r\n","class Tabs {\r\n constructor() {\r\n this.init();\r\n }\r\n\r\n init() {\r\n const tabs = document.querySelectorAll('.tabWidget');\r\n const isEditMode = document.querySelectorAll('.sfPageEditor').length > 0;\r\n\r\n tabs.forEach(tab => {\r\n tab.classList.add('tabWrapper');\r\n var tabsCount = 0;\r\n var tabWrapperUL = tab.querySelector('ul.tabs');\r\n var tabContent = tab.querySelector('.tabContent')\r\n\r\n //generate desktop tabs\r\n tab.querySelectorAll('.tabHeaderText .sfContentBlock').forEach(el => {\r\n var liElement = document.createElement('li');\r\n liElement.innerHTML = el.innerHTML;\r\n tabWrapperUL.appendChild(liElement);\r\n tabsCount++;\r\n });\r\n tab.querySelectorAll('.tabHeaderText .ui-content-block').forEach(el => {\r\n var liElement = document.createElement('li');\r\n liElement.innerHTML = el.innerHTML;\r\n tabWrapperUL.appendChild(liElement);\r\n tabsCount++;\r\n });\r\n\r\n if (!isEditMode) {\r\n tab.querySelectorAll('.tabHeaderWrapper').forEach(el => {\r\n el.classList.add('desktopHidden');\r\n });\r\n }\r\n\r\n //show first tab on desktop on init\r\n tab.querySelector('.singleTabWrapper').classList.add('visible');\r\n tabWrapperUL.querySelector('li').classList.add('active');\r\n tab.querySelector('.tabHeaderWrapper').classList.add('active');\r\n\r\n if (DeviceHelper.isMobilebrowser()) {\r\n tab.querySelector('.singleTabWrapper').classList.remove('visible');\r\n tabWrapperUL.querySelector('li').classList.remove('active');\r\n tab.querySelector('.tabHeaderWrapper').classList.remove('active');\r\n }\r\n\r\n //desktop tab click function\r\n var tabWrapperLi = tabWrapperUL.querySelectorAll('li');\r\n tabWrapperLi.forEach(tabLi => {\r\n tabLi.addEventListener('click', (ev) => {\r\n tabWrapperUL.querySelector('.active').classList.remove('active');\r\n let el = ev.target.tagName === 'LI' ? ev.target : ev.target.closest('li');\r\n let index = Array.prototype.slice.call(tabWrapperUL.children).indexOf(el)\r\n el.classList.add('active');\r\n tab.querySelector('.singleTabWrapper.visible').classList.remove('visible');\r\n tab.querySelectorAll('.singleTabWrapper')[index].classList.add('visible');\r\n tab.querySelector('.tabHeaderWrapper.active').classList.remove('active')\r\n tab.querySelectorAll('.tabHeaderWrapper')[index].classList.add('active');\r\n });\r\n });\r\n\r\n if (!isEditMode) {\r\n //mobile accordeon click\r\n var accordionWrapperLi = tabContent.querySelectorAll('.tabHeaderText');\r\n accordionWrapperLi.forEach(accordion => {\r\n accordion.addEventListener('click', (ev) => {\r\n let el = ev.target.closest(\".singleTabWrapper\");\r\n let currentActive = el.querySelector('.tabHeaderWrapper');\r\n if (currentActive.classList.contains('active')) {\r\n currentActive.classList.remove('active');\r\n currentActive.parentElement.classList.remove('visible');\r\n }\r\n else {\r\n currentActive.classList.add('active');\r\n currentActive.parentElement.classList.add('visible');\r\n }\r\n });\r\n });\r\n }\r\n });\r\n\r\n if (isEditMode) {\r\n var contentSwitcher = document.querySelector('.sfContentSwitcher');\r\n if (contentSwitcher) {\r\n contentSwitcher.addEventListener('click', function (event) {\r\n var wrappers = document.querySelectorAll('.singleTabWrapper').forEach(singleTabWrapper => {\r\n if (!singleTabWrapper.querySelector('.tabHeaderText .sfContentBlock')\r\n && !singleTabWrapper.querySelector('.tabHeaderText .ui-content-block')) {\r\n if (!singleTabWrapper.classList.contains('visible')) {\r\n singleTabWrapper.classList.add('visible');\r\n }\r\n };\r\n });\r\n });\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default Tabs;","/*! picturefill - v3.0.2 - 2016-02-12\n * https://scottjehl.github.io/picturefill/\n * Copyright (c) 2016 https://github.com/scottjehl/picturefill/blob/master/Authors.txt; Licensed MIT\n */\n/*! Gecko-Picture - v1.0\n * https://github.com/scottjehl/picturefill/tree/3.0/src/plugins/gecko-picture\n * Firefox's early picture implementation (prior to FF41) is static and does\n * not react to viewport changes. This tiny module fixes this.\n */\n(function(window) {\n\t/*jshint eqnull:true */\n\tvar ua = navigator.userAgent;\n\n\tif ( window.HTMLPictureElement && ((/ecko/).test(ua) && ua.match(/rv\\:(\\d+)/) && RegExp.$1 < 45) ) {\n\t\taddEventListener(\"resize\", (function() {\n\t\t\tvar timer;\n\n\t\t\tvar dummySrc = document.createElement(\"source\");\n\n\t\t\tvar fixRespimg = function(img) {\n\t\t\t\tvar source, sizes;\n\t\t\t\tvar picture = img.parentNode;\n\n\t\t\t\tif (picture.nodeName.toUpperCase() === \"PICTURE\") {\n\t\t\t\t\tsource = dummySrc.cloneNode();\n\n\t\t\t\t\tpicture.insertBefore(source, picture.firstElementChild);\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tpicture.removeChild(source);\n\t\t\t\t\t});\n\t\t\t\t} else if (!img._pfLastSize || img.offsetWidth > img._pfLastSize) {\n\t\t\t\t\timg._pfLastSize = img.offsetWidth;\n\t\t\t\t\tsizes = img.sizes;\n\t\t\t\t\timg.sizes += \",100vw\";\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\timg.sizes = sizes;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tvar findPictureImgs = function() {\n\t\t\t\tvar i;\n\t\t\t\tvar imgs = document.querySelectorAll(\"picture > img, img[srcset][sizes]\");\n\t\t\t\tfor (i = 0; i < imgs.length; i++) {\n\t\t\t\t\tfixRespimg(imgs[i]);\n\t\t\t\t}\n\t\t\t};\n\t\t\tvar onResize = function() {\n\t\t\t\tclearTimeout(timer);\n\t\t\t\ttimer = setTimeout(findPictureImgs, 99);\n\t\t\t};\n\t\t\tvar mq = window.matchMedia && matchMedia(\"(orientation: landscape)\");\n\t\t\tvar init = function() {\n\t\t\t\tonResize();\n\n\t\t\t\tif (mq && mq.addListener) {\n\t\t\t\t\tmq.addListener(onResize);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tdummySrc.srcset = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n\n\t\t\tif (/^[c|i]|d$/.test(document.readyState || \"\")) {\n\t\t\t\tinit();\n\t\t\t} else {\n\t\t\t\tdocument.addEventListener(\"DOMContentLoaded\", init);\n\t\t\t}\n\n\t\t\treturn onResize;\n\t\t})());\n\t}\n})(window);\n\n/*! Picturefill - v3.0.2\n * http://scottjehl.github.io/picturefill\n * Copyright (c) 2015 https://github.com/scottjehl/picturefill/blob/master/Authors.txt;\n * License: MIT\n */\n\n(function( window, document, undefined ) {\n\t// Enable strict mode\n\t\"use strict\";\n\n\t// HTML shim|v it for old IE (IE9 will still need the HTML video tag workaround)\n\tdocument.createElement( \"picture\" );\n\n\tvar warn, eminpx, alwaysCheckWDescriptor, evalId;\n\t// local object for method references and testing exposure\n\tvar pf = {};\n\tvar isSupportTestReady = false;\n\tvar noop = function() {};\n\tvar image = document.createElement( \"img\" );\n\tvar getImgAttr = image.getAttribute;\n\tvar setImgAttr = image.setAttribute;\n\tvar removeImgAttr = image.removeAttribute;\n\tvar docElem = document.documentElement;\n\tvar types = {};\n\tvar cfg = {\n\t\t//resource selection:\n\t\talgorithm: \"\"\n\t};\n\tvar srcAttr = \"data-pfsrc\";\n\tvar srcsetAttr = srcAttr + \"set\";\n\t// ua sniffing is done for undetectable img loading features,\n\t// to do some non crucial perf optimizations\n\tvar ua = navigator.userAgent;\n\tvar supportAbort = (/rident/).test(ua) || ((/ecko/).test(ua) && ua.match(/rv\\:(\\d+)/) && RegExp.$1 > 35 );\n\tvar curSrcProp = \"currentSrc\";\n\tvar regWDesc = /\\s+\\+?\\d+(e\\d+)?w/;\n\tvar regSize = /(\\([^)]+\\))?\\s*(.+)/;\n\tvar setOptions = window.picturefillCFG;\n\t/**\n\t * Shortcut property for https://w3c.github.io/webappsec/specs/mixedcontent/#restricts-mixed-content ( for easy overriding in tests )\n\t */\n\t// baseStyle also used by getEmValue (i.e.: width: 1em is important)\n\tvar baseStyle = \"position:absolute;left:0;visibility:hidden;display:block;padding:0;border:none;font-size:1em;width:1em;overflow:hidden;clip:rect(0px, 0px, 0px, 0px)\";\n\tvar fsCss = \"font-size:100%!important;\";\n\tvar isVwDirty = true;\n\n\tvar cssCache = {};\n\tvar sizeLengthCache = {};\n\tvar DPR = window.devicePixelRatio;\n\tvar units = {\n\t\tpx: 1,\n\t\t\"in\": 96\n\t};\n\tvar anchor = document.createElement( \"a\" );\n\t/**\n\t * alreadyRun flag used for setOptions. is it true setOptions will reevaluate\n\t * @type {boolean}\n\t */\n\tvar alreadyRun = false;\n\n\t// Reusable, non-\"g\" Regexes\n\n\t// (Don't use \\s, to avoid matching non-breaking space.)\n\tvar regexLeadingSpaces = /^[ \\t\\n\\r\\u000c]+/,\n\t regexLeadingCommasOrSpaces = /^[, \\t\\n\\r\\u000c]+/,\n\t regexLeadingNotSpaces = /^[^ \\t\\n\\r\\u000c]+/,\n\t regexTrailingCommas = /[,]+$/,\n\t regexNonNegativeInteger = /^\\d+$/,\n\n\t // ( Positive or negative or unsigned integers or decimals, without or without exponents.\n\t // Must include at least one digit.\n\t // According to spec tests any decimal point must be followed by a digit.\n\t // No leading plus sign is allowed.)\n\t // https://html.spec.whatwg.org/multipage/infrastructure.html#valid-floating-point-number\n\t regexFloatingPoint = /^-?(?:[0-9]+|[0-9]*\\.[0-9]+)(?:[eE][+-]?[0-9]+)?$/;\n\n\tvar on = function(obj, evt, fn, capture) {\n\t\tif ( obj.addEventListener ) {\n\t\t\tobj.addEventListener(evt, fn, capture || false);\n\t\t} else if ( obj.attachEvent ) {\n\t\t\tobj.attachEvent( \"on\" + evt, fn);\n\t\t}\n\t};\n\n\t/**\n\t * simple memoize function:\n\t */\n\n\tvar memoize = function(fn) {\n\t\tvar cache = {};\n\t\treturn function(input) {\n\t\t\tif ( !(input in cache) ) {\n\t\t\t\tcache[ input ] = fn(input);\n\t\t\t}\n\t\t\treturn cache[ input ];\n\t\t};\n\t};\n\n\t// UTILITY FUNCTIONS\n\n\t// Manual is faster than RegEx\n\t// http://jsperf.com/whitespace-character/5\n\tfunction isSpace(c) {\n\t\treturn (c === \"\\u0020\" || // space\n\t\t c === \"\\u0009\" || // horizontal tab\n\t\t c === \"\\u000A\" || // new line\n\t\t c === \"\\u000C\" || // form feed\n\t\t c === \"\\u000D\"); // carriage return\n\t}\n\n\t/**\n\t * gets a mediaquery and returns a boolean or gets a css length and returns a number\n\t * @param css mediaqueries or css length\n\t * @returns {boolean|number}\n\t *\n\t * based on: https://gist.github.com/jonathantneal/db4f77009b155f083738\n\t */\n\tvar evalCSS = (function() {\n\n\t\tvar regLength = /^([\\d\\.]+)(em|vw|px)$/;\n\t\tvar replace = function() {\n\t\t\tvar args = arguments, index = 0, string = args[0];\n\t\t\twhile (++index in args) {\n\t\t\t\tstring = string.replace(args[index], args[++index]);\n\t\t\t}\n\t\t\treturn string;\n\t\t};\n\n\t\tvar buildStr = memoize(function(css) {\n\n\t\t\treturn \"return \" + replace((css || \"\").toLowerCase(),\n\t\t\t\t// interpret `and`\n\t\t\t\t/\\band\\b/g, \"&&\",\n\n\t\t\t\t// interpret `,`\n\t\t\t\t/,/g, \"||\",\n\n\t\t\t\t// interpret `min-` as >=\n\t\t\t\t/min-([a-z-\\s]+):/g, \"e.$1>=\",\n\n\t\t\t\t// interpret `max-` as <=\n\t\t\t\t/max-([a-z-\\s]+):/g, \"e.$1<=\",\n\n\t\t\t\t//calc value\n\t\t\t\t/calc([^)]+)/g, \"($1)\",\n\n\t\t\t\t// interpret css values\n\t\t\t\t/(\\d+[\\.]*[\\d]*)([a-z]+)/g, \"($1 * e.$2)\",\n\t\t\t\t//make eval less evil\n\t\t\t\t/^(?!(e.[a-z]|[0-9\\.&=|><\\+\\-\\*\\(\\)\\/])).*/ig, \"\"\n\t\t\t) + \";\";\n\t\t});\n\n\t\treturn function(css, length) {\n\t\t\tvar parsedLength;\n\t\t\tif (!(css in cssCache)) {\n\t\t\t\tcssCache[css] = false;\n\t\t\t\tif (length && (parsedLength = css.match( regLength ))) {\n\t\t\t\t\tcssCache[css] = parsedLength[ 1 ] * units[parsedLength[ 2 ]];\n\t\t\t\t} else {\n\t\t\t\t\t/*jshint evil:true */\n\t\t\t\t\ttry{\n\t\t\t\t\t\tcssCache[css] = new Function(\"e\", buildStr(css))(units);\n\t\t\t\t\t} catch(e) {}\n\t\t\t\t\t/*jshint evil:false */\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cssCache[css];\n\t\t};\n\t})();\n\n\tvar setResolution = function( candidate, sizesattr ) {\n\t\tif ( candidate.w ) { // h = means height: || descriptor.type === 'h' do not handle yet...\n\t\t\tcandidate.cWidth = pf.calcListLength( sizesattr || \"100vw\" );\n\t\t\tcandidate.res = candidate.w / candidate.cWidth ;\n\t\t} else {\n\t\t\tcandidate.res = candidate.d;\n\t\t}\n\t\treturn candidate;\n\t};\n\n\t/**\n\t *\n\t * @param opt\n\t */\n\tvar picturefill = function( opt ) {\n\n\t\tif (!isSupportTestReady) {return;}\n\n\t\tvar elements, i, plen;\n\n\t\tvar options = opt || {};\n\n\t\tif ( options.elements && options.elements.nodeType === 1 ) {\n\t\t\tif ( options.elements.nodeName.toUpperCase() === \"IMG\" ) {\n\t\t\t\toptions.elements = [ options.elements ];\n\t\t\t} else {\n\t\t\t\toptions.context = options.elements;\n\t\t\t\toptions.elements = null;\n\t\t\t}\n\t\t}\n\n\t\telements = options.elements || pf.qsa( (options.context || document), ( options.reevaluate || options.reselect ) ? pf.sel : pf.selShort );\n\n\t\tif ( (plen = elements.length) ) {\n\n\t\t\tpf.setupRun( options );\n\t\t\talreadyRun = true;\n\n\t\t\t// Loop through all elements\n\t\t\tfor ( i = 0; i < plen; i++ ) {\n\t\t\t\tpf.fillImg(elements[ i ], options);\n\t\t\t}\n\n\t\t\tpf.teardownRun( options );\n\t\t}\n\t};\n\n\t/**\n\t * outputs a warning for the developer\n\t * @param {message}\n\t * @type {Function}\n\t */\n\twarn = ( window.console && console.warn ) ?\n\t\tfunction( message ) {\n\t\t\tconsole.warn( message );\n\t\t} :\n\t\tnoop\n\t;\n\n\tif ( !(curSrcProp in image) ) {\n\t\tcurSrcProp = \"src\";\n\t}\n\n\t// Add support for standard mime types.\n\ttypes[ \"image/jpeg\" ] = true;\n\ttypes[ \"image/gif\" ] = true;\n\ttypes[ \"image/png\" ] = true;\n\n\tfunction detectTypeSupport( type, typeUri ) {\n\t\t// based on Modernizr's lossless img-webp test\n\t\t// note: asynchronous\n\t\tvar image = new window.Image();\n\t\timage.onerror = function() {\n\t\t\ttypes[ type ] = false;\n\t\t\tpicturefill();\n\t\t};\n\t\timage.onload = function() {\n\t\t\ttypes[ type ] = image.width === 1;\n\t\t\tpicturefill();\n\t\t};\n\t\timage.src = typeUri;\n\t\treturn \"pending\";\n\t}\n\n\t// test svg support\n\ttypes[ \"image/svg+xml\" ] = document.implementation.hasFeature( \"http://www.w3.org/TR/SVG11/feature#Image\", \"1.1\" );\n\n\t/**\n\t * updates the internal vW property with the current viewport width in px\n\t */\n\tfunction updateMetrics() {\n\n\t\tisVwDirty = false;\n\t\tDPR = window.devicePixelRatio;\n\t\tcssCache = {};\n\t\tsizeLengthCache = {};\n\n\t\tpf.DPR = DPR || 1;\n\n\t\tunits.width = Math.max(window.innerWidth || 0, docElem.clientWidth);\n\t\tunits.height = Math.max(window.innerHeight || 0, docElem.clientHeight);\n\n\t\tunits.vw = units.width / 100;\n\t\tunits.vh = units.height / 100;\n\n\t\tevalId = [ units.height, units.width, DPR ].join(\"-\");\n\n\t\tunits.em = pf.getEmValue();\n\t\tunits.rem = units.em;\n\t}\n\n\tfunction chooseLowRes( lowerValue, higherValue, dprValue, isCached ) {\n\t\tvar bonusFactor, tooMuch, bonus, meanDensity;\n\n\t\t//experimental\n\t\tif (cfg.algorithm === \"saveData\" ){\n\t\t\tif ( lowerValue > 2.7 ) {\n\t\t\t\tmeanDensity = dprValue + 1;\n\t\t\t} else {\n\t\t\t\ttooMuch = higherValue - dprValue;\n\t\t\t\tbonusFactor = Math.pow(lowerValue - 0.6, 1.5);\n\n\t\t\t\tbonus = tooMuch * bonusFactor;\n\n\t\t\t\tif (isCached) {\n\t\t\t\t\tbonus += 0.1 * bonusFactor;\n\t\t\t\t}\n\n\t\t\t\tmeanDensity = lowerValue + bonus;\n\t\t\t}\n\t\t} else {\n\t\t\tmeanDensity = (dprValue > 1) ?\n\t\t\t\tMath.sqrt(lowerValue * higherValue) :\n\t\t\t\tlowerValue;\n\t\t}\n\n\t\treturn meanDensity > dprValue;\n\t}\n\n\tfunction applyBestCandidate( img ) {\n\t\tvar srcSetCandidates;\n\t\tvar matchingSet = pf.getSet( img );\n\t\tvar evaluated = false;\n\t\tif ( matchingSet !== \"pending\" ) {\n\t\t\tevaluated = evalId;\n\t\t\tif ( matchingSet ) {\n\t\t\t\tsrcSetCandidates = pf.setRes( matchingSet );\n\t\t\t\tpf.applySetCandidate( srcSetCandidates, img );\n\t\t\t}\n\t\t}\n\t\timg[ pf.ns ].evaled = evaluated;\n\t}\n\n\tfunction ascendingSort( a, b ) {\n\t\treturn a.res - b.res;\n\t}\n\n\tfunction setSrcToCur( img, src, set ) {\n\t\tvar candidate;\n\t\tif ( !set && src ) {\n\t\t\tset = img[ pf.ns ].sets;\n\t\t\tset = set && set[set.length - 1];\n\t\t}\n\n\t\tcandidate = getCandidateForSrc(src, set);\n\n\t\tif ( candidate ) {\n\t\t\tsrc = pf.makeUrl(src);\n\t\t\timg[ pf.ns ].curSrc = src;\n\t\t\timg[ pf.ns ].curCan = candidate;\n\n\t\t\tif ( !candidate.res ) {\n\t\t\t\tsetResolution( candidate, candidate.set.sizes );\n\t\t\t}\n\t\t}\n\t\treturn candidate;\n\t}\n\n\tfunction getCandidateForSrc( src, set ) {\n\t\tvar i, candidate, candidates;\n\t\tif ( src && set ) {\n\t\t\tcandidates = pf.parseSet( set );\n\t\t\tsrc = pf.makeUrl(src);\n\t\t\tfor ( i = 0; i < candidates.length; i++ ) {\n\t\t\t\tif ( src === pf.makeUrl(candidates[ i ].url) ) {\n\t\t\t\t\tcandidate = candidates[ i ];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn candidate;\n\t}\n\n\tfunction getAllSourceElements( picture, candidates ) {\n\t\tvar i, len, source, srcset;\n\n\t\t// SPEC mismatch intended for size and perf:\n\t\t// actually only source elements preceding the img should be used\n\t\t// also note: don't use qsa here, because IE8 sometimes doesn't like source as the key part in a selector\n\t\tvar sources = picture.getElementsByTagName( \"source\" );\n\n\t\tfor ( i = 0, len = sources.length; i < len; i++ ) {\n\t\t\tsource = sources[ i ];\n\t\t\tsource[ pf.ns ] = true;\n\t\t\tsrcset = source.getAttribute( \"srcset\" );\n\n\t\t\t// if source does not have a srcset attribute, skip\n\t\t\tif ( srcset ) {\n\t\t\t\tcandidates.push( {\n\t\t\t\t\tsrcset: srcset,\n\t\t\t\t\tmedia: source.getAttribute( \"media\" ),\n\t\t\t\t\ttype: source.getAttribute( \"type\" ),\n\t\t\t\t\tsizes: source.getAttribute( \"sizes\" )\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Srcset Parser\n\t * By Alex Bell | MIT License\n\t *\n\t * @returns Array [{url: _, d: _, w: _, h:_, set:_(????)}, ...]\n\t *\n\t * Based super duper closely on the reference algorithm at:\n\t * https://html.spec.whatwg.org/multipage/embedded-content.html#parse-a-srcset-attribute\n\t */\n\n\t// 1. Let input be the value passed to this algorithm.\n\t// (TO-DO : Explain what \"set\" argument is here. Maybe choose a more\n\t// descriptive & more searchable name. Since passing the \"set\" in really has\n\t// nothing to do with parsing proper, I would prefer this assignment eventually\n\t// go in an external fn.)\n\tfunction parseSrcset(input, set) {\n\n\t\tfunction collectCharacters(regEx) {\n\t\t\tvar chars,\n\t\t\t match = regEx.exec(input.substring(pos));\n\t\t\tif (match) {\n\t\t\t\tchars = match[ 0 ];\n\t\t\t\tpos += chars.length;\n\t\t\t\treturn chars;\n\t\t\t}\n\t\t}\n\n\t\tvar inputLength = input.length,\n\t\t url,\n\t\t descriptors,\n\t\t currentDescriptor,\n\t\t state,\n\t\t c,\n\n\t\t // 2. Let position be a pointer into input, initially pointing at the start\n\t\t // of the string.\n\t\t pos = 0,\n\n\t\t // 3. Let candidates be an initially empty source set.\n\t\t candidates = [];\n\n\t\t/**\n\t\t* Adds descriptor properties to a candidate, pushes to the candidates array\n\t\t* @return undefined\n\t\t*/\n\t\t// (Declared outside of the while loop so that it's only created once.\n\t\t// (This fn is defined before it is used, in order to pass JSHINT.\n\t\t// Unfortunately this breaks the sequencing of the spec comments. :/ )\n\t\tfunction parseDescriptors() {\n\n\t\t\t// 9. Descriptor parser: Let error be no.\n\t\t\tvar pError = false,\n\n\t\t\t// 10. Let width be absent.\n\t\t\t// 11. Let density be absent.\n\t\t\t// 12. Let future-compat-h be absent. (We're implementing it now as h)\n\t\t\t w, d, h, i,\n\t\t\t candidate = {},\n\t\t\t desc, lastChar, value, intVal, floatVal;\n\n\t\t\t// 13. For each descriptor in descriptors, run the appropriate set of steps\n\t\t\t// from the following list:\n\t\t\tfor (i = 0 ; i < descriptors.length; i++) {\n\t\t\t\tdesc = descriptors[ i ];\n\n\t\t\t\tlastChar = desc[ desc.length - 1 ];\n\t\t\t\tvalue = desc.substring(0, desc.length - 1);\n\t\t\t\tintVal = parseInt(value, 10);\n\t\t\t\tfloatVal = parseFloat(value);\n\n\t\t\t\t// If the descriptor consists of a valid non-negative integer followed by\n\t\t\t\t// a U+0077 LATIN SMALL LETTER W character\n\t\t\t\tif (regexNonNegativeInteger.test(value) && (lastChar === \"w\")) {\n\n\t\t\t\t\t// If width and density are not both absent, then let error be yes.\n\t\t\t\t\tif (w || d) {pError = true;}\n\n\t\t\t\t\t// Apply the rules for parsing non-negative integers to the descriptor.\n\t\t\t\t\t// If the result is zero, let error be yes.\n\t\t\t\t\t// Otherwise, let width be the result.\n\t\t\t\t\tif (intVal === 0) {pError = true;} else {w = intVal;}\n\n\t\t\t\t// If the descriptor consists of a valid floating-point number followed by\n\t\t\t\t// a U+0078 LATIN SMALL LETTER X character\n\t\t\t\t} else if (regexFloatingPoint.test(value) && (lastChar === \"x\")) {\n\n\t\t\t\t\t// If width, density and future-compat-h are not all absent, then let error\n\t\t\t\t\t// be yes.\n\t\t\t\t\tif (w || d || h) {pError = true;}\n\n\t\t\t\t\t// Apply the rules for parsing floating-point number values to the descriptor.\n\t\t\t\t\t// If the result is less than zero, let error be yes. Otherwise, let density\n\t\t\t\t\t// be the result.\n\t\t\t\t\tif (floatVal < 0) {pError = true;} else {d = floatVal;}\n\n\t\t\t\t// If the descriptor consists of a valid non-negative integer followed by\n\t\t\t\t// a U+0068 LATIN SMALL LETTER H character\n\t\t\t\t} else if (regexNonNegativeInteger.test(value) && (lastChar === \"h\")) {\n\n\t\t\t\t\t// If height and density are not both absent, then let error be yes.\n\t\t\t\t\tif (h || d) {pError = true;}\n\n\t\t\t\t\t// Apply the rules for parsing non-negative integers to the descriptor.\n\t\t\t\t\t// If the result is zero, let error be yes. Otherwise, let future-compat-h\n\t\t\t\t\t// be the result.\n\t\t\t\t\tif (intVal === 0) {pError = true;} else {h = intVal;}\n\n\t\t\t\t// Anything else, Let error be yes.\n\t\t\t\t} else {pError = true;}\n\t\t\t} // (close step 13 for loop)\n\n\t\t\t// 15. If error is still no, then append a new image source to candidates whose\n\t\t\t// URL is url, associated with a width width if not absent and a pixel\n\t\t\t// density density if not absent. Otherwise, there is a parse error.\n\t\t\tif (!pError) {\n\t\t\t\tcandidate.url = url;\n\n\t\t\t\tif (w) { candidate.w = w;}\n\t\t\t\tif (d) { candidate.d = d;}\n\t\t\t\tif (h) { candidate.h = h;}\n\t\t\t\tif (!h && !d && !w) {candidate.d = 1;}\n\t\t\t\tif (candidate.d === 1) {set.has1x = true;}\n\t\t\t\tcandidate.set = set;\n\n\t\t\t\tcandidates.push(candidate);\n\t\t\t}\n\t\t} // (close parseDescriptors fn)\n\n\t\t/**\n\t\t* Tokenizes descriptor properties prior to parsing\n\t\t* Returns undefined.\n\t\t* (Again, this fn is defined before it is used, in order to pass JSHINT.\n\t\t* Unfortunately this breaks the logical sequencing of the spec comments. :/ )\n\t\t*/\n\t\tfunction tokenize() {\n\n\t\t\t// 8.1. Descriptor tokeniser: Skip whitespace\n\t\t\tcollectCharacters(regexLeadingSpaces);\n\n\t\t\t// 8.2. Let current descriptor be the empty string.\n\t\t\tcurrentDescriptor = \"\";\n\n\t\t\t// 8.3. Let state be in descriptor.\n\t\t\tstate = \"in descriptor\";\n\n\t\t\twhile (true) {\n\n\t\t\t\t// 8.4. Let c be the character at position.\n\t\t\t\tc = input.charAt(pos);\n\n\t\t\t\t// Do the following depending on the value of state.\n\t\t\t\t// For the purpose of this step, \"EOF\" is a special character representing\n\t\t\t\t// that position is past the end of input.\n\n\t\t\t\t// In descriptor\n\t\t\t\tif (state === \"in descriptor\") {\n\t\t\t\t\t// Do the following, depending on the value of c:\n\n\t\t\t\t // Space character\n\t\t\t\t // If current descriptor is not empty, append current descriptor to\n\t\t\t\t // descriptors and let current descriptor be the empty string.\n\t\t\t\t // Set state to after descriptor.\n\t\t\t\t\tif (isSpace(c)) {\n\t\t\t\t\t\tif (currentDescriptor) {\n\t\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\t\tcurrentDescriptor = \"\";\n\t\t\t\t\t\t\tstate = \"after descriptor\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// U+002C COMMA (,)\n\t\t\t\t\t// Advance position to the next character in input. If current descriptor\n\t\t\t\t\t// is not empty, append current descriptor to descriptors. Jump to the step\n\t\t\t\t\t// labeled descriptor parser.\n\t\t\t\t\t} else if (c === \",\") {\n\t\t\t\t\t\tpos += 1;\n\t\t\t\t\t\tif (currentDescriptor) {\n\t\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t// U+0028 LEFT PARENTHESIS (()\n\t\t\t\t\t// Append c to current descriptor. Set state to in parens.\n\t\t\t\t\t} else if (c === \"\\u0028\") {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t\tstate = \"in parens\";\n\n\t\t\t\t\t// EOF\n\t\t\t\t\t// If current descriptor is not empty, append current descriptor to\n\t\t\t\t\t// descriptors. Jump to the step labeled descriptor parser.\n\t\t\t\t\t} else if (c === \"\") {\n\t\t\t\t\t\tif (currentDescriptor) {\n\t\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t// Anything else\n\t\t\t\t\t// Append c to current descriptor.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t}\n\t\t\t\t// (end \"in descriptor\"\n\n\t\t\t\t// In parens\n\t\t\t\t} else if (state === \"in parens\") {\n\n\t\t\t\t\t// U+0029 RIGHT PARENTHESIS ())\n\t\t\t\t\t// Append c to current descriptor. Set state to in descriptor.\n\t\t\t\t\tif (c === \")\") {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t\tstate = \"in descriptor\";\n\n\t\t\t\t\t// EOF\n\t\t\t\t\t// Append current descriptor to descriptors. Jump to the step labeled\n\t\t\t\t\t// descriptor parser.\n\t\t\t\t\t} else if (c === \"\") {\n\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t// Anything else\n\t\t\t\t\t// Append c to current descriptor.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t}\n\n\t\t\t\t// After descriptor\n\t\t\t\t} else if (state === \"after descriptor\") {\n\n\t\t\t\t\t// Do the following, depending on the value of c:\n\t\t\t\t\t// Space character: Stay in this state.\n\t\t\t\t\tif (isSpace(c)) {\n\n\t\t\t\t\t// EOF: Jump to the step labeled descriptor parser.\n\t\t\t\t\t} else if (c === \"\") {\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t// Anything else\n\t\t\t\t\t// Set state to in descriptor. Set position to the previous character in input.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstate = \"in descriptor\";\n\t\t\t\t\t\tpos -= 1;\n\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Advance position to the next character in input.\n\t\t\t\tpos += 1;\n\n\t\t\t// Repeat this step.\n\t\t\t} // (close while true loop)\n\t\t}\n\n\t\t// 4. Splitting loop: Collect a sequence of characters that are space\n\t\t// characters or U+002C COMMA characters. If any U+002C COMMA characters\n\t\t// were collected, that is a parse error.\n\t\twhile (true) {\n\t\t\tcollectCharacters(regexLeadingCommasOrSpaces);\n\n\t\t\t// 5. If position is past the end of input, return candidates and abort these steps.\n\t\t\tif (pos >= inputLength) {\n\t\t\t\treturn candidates; // (we're done, this is the sole return path)\n\t\t\t}\n\n\t\t\t// 6. Collect a sequence of characters that are not space characters,\n\t\t\t// and let that be url.\n\t\t\turl = collectCharacters(regexLeadingNotSpaces);\n\n\t\t\t// 7. Let descriptors be a new empty list.\n\t\t\tdescriptors = [];\n\n\t\t\t// 8. If url ends with a U+002C COMMA character (,), follow these substeps:\n\t\t\t//\t\t(1). Remove all trailing U+002C COMMA characters from url. If this removed\n\t\t\t// more than one character, that is a parse error.\n\t\t\tif (url.slice(-1) === \",\") {\n\t\t\t\turl = url.replace(regexTrailingCommas, \"\");\n\t\t\t\t// (Jump ahead to step 9 to skip tokenization and just push the candidate).\n\t\t\t\tparseDescriptors();\n\n\t\t\t//\tOtherwise, follow these substeps:\n\t\t\t} else {\n\t\t\t\ttokenize();\n\t\t\t} // (close else of step 8)\n\n\t\t// 16. Return to the step labeled splitting loop.\n\t\t} // (Close of big while loop.)\n\t}\n\n\t/*\n\t * Sizes Parser\n\t *\n\t * By Alex Bell | MIT License\n\t *\n\t * Non-strict but accurate and lightweight JS Parser for the string value \n\t *\n\t * Reference algorithm at:\n\t * https://html.spec.whatwg.org/multipage/embedded-content.html#parse-a-sizes-attribute\n\t *\n\t * Most comments are copied in directly from the spec\n\t * (except for comments in parens).\n\t *\n\t * Grammar is:\n\t * = # [ , ]? | \n\t * = \n\t * = \n\t * http://www.w3.org/html/wg/drafts/html/master/embedded-content.html#attr-img-sizes\n\t *\n\t * E.g. \"(max-width: 30em) 100vw, (max-width: 50em) 70vw, 100vw\"\n\t * or \"(min-width: 30em), calc(30vw - 15px)\" or just \"30vw\"\n\t *\n\t * Returns the first valid with a media condition that evaluates to true,\n\t * or \"100vw\" if all valid media conditions evaluate to false.\n\t *\n\t */\n\n\tfunction parseSizes(strValue) {\n\n\t\t// (Percentage CSS lengths are not allowed in this case, to avoid confusion:\n\t\t// https://html.spec.whatwg.org/multipage/embedded-content.html#valid-source-size-list\n\t\t// CSS allows a single optional plus or minus sign:\n\t\t// http://www.w3.org/TR/CSS2/syndata.html#numbers\n\t\t// CSS is ASCII case-insensitive:\n\t\t// http://www.w3.org/TR/CSS2/syndata.html#characters )\n\t\t// Spec allows exponential notation for type:\n\t\t// http://dev.w3.org/csswg/css-values/#numbers\n\t\tvar regexCssLengthWithUnits = /^(?:[+-]?[0-9]+|[0-9]*\\.[0-9]+)(?:[eE][+-]?[0-9]+)?(?:ch|cm|em|ex|in|mm|pc|pt|px|rem|vh|vmin|vmax|vw)$/i;\n\n\t\t// (This is a quick and lenient test. Because of optional unlimited-depth internal\n\t\t// grouping parens and strict spacing rules, this could get very complicated.)\n\t\tvar regexCssCalc = /^calc\\((?:[0-9a-z \\.\\+\\-\\*\\/\\(\\)]+)\\)$/i;\n\n\t\tvar i;\n\t\tvar unparsedSizesList;\n\t\tvar unparsedSizesListLength;\n\t\tvar unparsedSize;\n\t\tvar lastComponentValue;\n\t\tvar size;\n\n\t\t// UTILITY FUNCTIONS\n\n\t\t// (Toy CSS parser. The goals here are:\n\t\t// 1) expansive test coverage without the weight of a full CSS parser.\n\t\t// 2) Avoiding regex wherever convenient.\n\t\t// Quick tests: http://jsfiddle.net/gtntL4gr/3/\n\t\t// Returns an array of arrays.)\n\t\tfunction parseComponentValues(str) {\n\t\t\tvar chrctr;\n\t\t\tvar component = \"\";\n\t\t\tvar componentArray = [];\n\t\t\tvar listArray = [];\n\t\t\tvar parenDepth = 0;\n\t\t\tvar pos = 0;\n\t\t\tvar inComment = false;\n\n\t\t\tfunction pushComponent() {\n\t\t\t\tif (component) {\n\t\t\t\t\tcomponentArray.push(component);\n\t\t\t\t\tcomponent = \"\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction pushComponentArray() {\n\t\t\t\tif (componentArray[0]) {\n\t\t\t\t\tlistArray.push(componentArray);\n\t\t\t\t\tcomponentArray = [];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// (Loop forwards from the beginning of the string.)\n\t\t\twhile (true) {\n\t\t\t\tchrctr = str.charAt(pos);\n\n\t\t\t\tif (chrctr === \"\") { // ( End of string reached.)\n\t\t\t\t\tpushComponent();\n\t\t\t\t\tpushComponentArray();\n\t\t\t\t\treturn listArray;\n\t\t\t\t} else if (inComment) {\n\t\t\t\t\tif ((chrctr === \"*\") && (str[pos + 1] === \"/\")) { // (At end of a comment.)\n\t\t\t\t\t\tinComment = false;\n\t\t\t\t\t\tpos += 2;\n\t\t\t\t\t\tpushComponent();\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpos += 1; // (Skip all characters inside comments.)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t} else if (isSpace(chrctr)) {\n\t\t\t\t\t// (If previous character in loop was also a space, or if\n\t\t\t\t\t// at the beginning of the string, do not add space char to\n\t\t\t\t\t// component.)\n\t\t\t\t\tif ( (str.charAt(pos - 1) && isSpace( str.charAt(pos - 1) ) ) || !component ) {\n\t\t\t\t\t\tpos += 1;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else if (parenDepth === 0) {\n\t\t\t\t\t\tpushComponent();\n\t\t\t\t\t\tpos +=1;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// (Replace any space character with a plain space for legibility.)\n\t\t\t\t\t\tchrctr = \" \";\n\t\t\t\t\t}\n\t\t\t\t} else if (chrctr === \"(\") {\n\t\t\t\t\tparenDepth += 1;\n\t\t\t\t} else if (chrctr === \")\") {\n\t\t\t\t\tparenDepth -= 1;\n\t\t\t\t} else if (chrctr === \",\") {\n\t\t\t\t\tpushComponent();\n\t\t\t\t\tpushComponentArray();\n\t\t\t\t\tpos += 1;\n\t\t\t\t\tcontinue;\n\t\t\t\t} else if ( (chrctr === \"/\") && (str.charAt(pos + 1) === \"*\") ) {\n\t\t\t\t\tinComment = true;\n\t\t\t\t\tpos += 2;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tcomponent = component + chrctr;\n\t\t\t\tpos += 1;\n\t\t\t}\n\t\t}\n\n\t\tfunction isValidNonNegativeSourceSizeValue(s) {\n\t\t\tif (regexCssLengthWithUnits.test(s) && (parseFloat(s) >= 0)) {return true;}\n\t\t\tif (regexCssCalc.test(s)) {return true;}\n\t\t\t// ( http://www.w3.org/TR/CSS2/syndata.html#numbers says:\n\t\t\t// \"-0 is equivalent to 0 and is not a negative number.\" which means that\n\t\t\t// unitless zero and unitless negative zero must be accepted as special cases.)\n\t\t\tif ((s === \"0\") || (s === \"-0\") || (s === \"+0\")) {return true;}\n\t\t\treturn false;\n\t\t}\n\n\t\t// When asked to parse a sizes attribute from an element, parse a\n\t\t// comma-separated list of component values from the value of the element's\n\t\t// sizes attribute (or the empty string, if the attribute is absent), and let\n\t\t// unparsed sizes list be the result.\n\t\t// http://dev.w3.org/csswg/css-syntax/#parse-comma-separated-list-of-component-values\n\n\t\tunparsedSizesList = parseComponentValues(strValue);\n\t\tunparsedSizesListLength = unparsedSizesList.length;\n\n\t\t// For each unparsed size in unparsed sizes list:\n\t\tfor (i = 0; i < unparsedSizesListLength; i++) {\n\t\t\tunparsedSize = unparsedSizesList[i];\n\n\t\t\t// 1. Remove all consecutive s from the end of unparsed size.\n\t\t\t// ( parseComponentValues() already omits spaces outside of parens. )\n\n\t\t\t// If unparsed size is now empty, that is a parse error; continue to the next\n\t\t\t// iteration of this algorithm.\n\t\t\t// ( parseComponentValues() won't push an empty array. )\n\n\t\t\t// 2. If the last component value in unparsed size is a valid non-negative\n\t\t\t// , let size be its value and remove the component value\n\t\t\t// from unparsed size. Any CSS function other than the calc() function is\n\t\t\t// invalid. Otherwise, there is a parse error; continue to the next iteration\n\t\t\t// of this algorithm.\n\t\t\t// http://dev.w3.org/csswg/css-syntax/#parse-component-value\n\t\t\tlastComponentValue = unparsedSize[unparsedSize.length - 1];\n\n\t\t\tif (isValidNonNegativeSourceSizeValue(lastComponentValue)) {\n\t\t\t\tsize = lastComponentValue;\n\t\t\t\tunparsedSize.pop();\n\t\t\t} else {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// 3. Remove all consecutive s from the end of unparsed\n\t\t\t// size. If unparsed size is now empty, return size and exit this algorithm.\n\t\t\t// If this was not the last item in unparsed sizes list, that is a parse error.\n\t\t\tif (unparsedSize.length === 0) {\n\t\t\t\treturn size;\n\t\t\t}\n\n\t\t\t// 4. Parse the remaining component values in unparsed size as a\n\t\t\t// . If it does not parse correctly, or it does parse\n\t\t\t// correctly but the evaluates to false, continue to the\n\t\t\t// next iteration of this algorithm.\n\t\t\t// (Parsing all possible compound media conditions in JS is heavy, complicated,\n\t\t\t// and the payoff is unclear. Is there ever an situation where the\n\t\t\t// media condition parses incorrectly but still somehow evaluates to true?\n\t\t\t// Can we just rely on the browser/polyfill to do it?)\n\t\t\tunparsedSize = unparsedSize.join(\" \");\n\t\t\tif (!(pf.matchesMedia( unparsedSize ) ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// 5. Return size and exit this algorithm.\n\t\t\treturn size;\n\t\t}\n\n\t\t// If the above algorithm exhausts unparsed sizes list without returning a\n\t\t// size value, return 100vw.\n\t\treturn \"100vw\";\n\t}\n\n\t// namespace\n\tpf.ns = (\"pf\" + new Date().getTime()).substr(0, 9);\n\n\t// srcset support test\n\tpf.supSrcset = \"srcset\" in image;\n\tpf.supSizes = \"sizes\" in image;\n\tpf.supPicture = !!window.HTMLPictureElement;\n\n\t// UC browser does claim to support srcset and picture, but not sizes,\n\t// this extended test reveals the browser does support nothing\n\tif (pf.supSrcset && pf.supPicture && !pf.supSizes) {\n\t\t(function(image2) {\n\t\t\timage.srcset = \"data:,a\";\n\t\t\timage2.src = \"data:,a\";\n\t\t\tpf.supSrcset = image.complete === image2.complete;\n\t\t\tpf.supPicture = pf.supSrcset && pf.supPicture;\n\t\t})(document.createElement(\"img\"));\n\t}\n\n\t// Safari9 has basic support for sizes, but does't expose the `sizes` idl attribute\n\tif (pf.supSrcset && !pf.supSizes) {\n\n\t\t(function() {\n\t\t\tvar width2 = \"data:image/gif;base64,R0lGODlhAgABAPAAAP///wAAACH5BAAAAAAALAAAAAACAAEAAAICBAoAOw==\";\n\t\t\tvar width1 = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n\t\t\tvar img = document.createElement(\"img\");\n\t\t\tvar test = function() {\n\t\t\t\tvar width = img.width;\n\n\t\t\t\tif (width === 2) {\n\t\t\t\t\tpf.supSizes = true;\n\t\t\t\t}\n\n\t\t\t\talwaysCheckWDescriptor = pf.supSrcset && !pf.supSizes;\n\n\t\t\t\tisSupportTestReady = true;\n\t\t\t\t// force async\n\t\t\t\tsetTimeout(picturefill);\n\t\t\t};\n\n\t\t\timg.onload = test;\n\t\t\timg.onerror = test;\n\t\t\timg.setAttribute(\"sizes\", \"9px\");\n\n\t\t\timg.srcset = width1 + \" 1w,\" + width2 + \" 9w\";\n\t\t\timg.src = width1;\n\t\t})();\n\n\t} else {\n\t\tisSupportTestReady = true;\n\t}\n\n\t// using pf.qsa instead of dom traversing does scale much better,\n\t// especially on sites mixing responsive and non-responsive images\n\tpf.selShort = \"picture>img,img[srcset]\";\n\tpf.sel = pf.selShort;\n\tpf.cfg = cfg;\n\n\t/**\n\t * Shortcut property for `devicePixelRatio` ( for easy overriding in tests )\n\t */\n\tpf.DPR = (DPR || 1 );\n\tpf.u = units;\n\n\t// container of supported mime types that one might need to qualify before using\n\tpf.types = types;\n\n\tpf.setSize = noop;\n\n\t/**\n\t * Gets a string and returns the absolute URL\n\t * @param src\n\t * @returns {String} absolute URL\n\t */\n\n\tpf.makeUrl = memoize(function(src) {\n\t\tanchor.href = src;\n\t\treturn anchor.href;\n\t});\n\n\t/**\n\t * Gets a DOM element or document and a selctor and returns the found matches\n\t * Can be extended with jQuery/Sizzle for IE7 support\n\t * @param context\n\t * @param sel\n\t * @returns {NodeList|Array}\n\t */\n\tpf.qsa = function(context, sel) {\n\t\treturn ( \"querySelector\" in context ) ? context.querySelectorAll(sel) : [];\n\t};\n\n\t/**\n\t * Shortcut method for matchMedia ( for easy overriding in tests )\n\t * wether native or pf.mMQ is used will be decided lazy on first call\n\t * @returns {boolean}\n\t */\n\tpf.matchesMedia = function() {\n\t\tif ( window.matchMedia && (matchMedia( \"(min-width: 0.1em)\" ) || {}).matches ) {\n\t\t\tpf.matchesMedia = function( media ) {\n\t\t\t\treturn !media || ( matchMedia( media ).matches );\n\t\t\t};\n\t\t} else {\n\t\t\tpf.matchesMedia = pf.mMQ;\n\t\t}\n\n\t\treturn pf.matchesMedia.apply( this, arguments );\n\t};\n\n\t/**\n\t * A simplified matchMedia implementation for IE8 and IE9\n\t * handles only min-width/max-width with px or em values\n\t * @param media\n\t * @returns {boolean}\n\t */\n\tpf.mMQ = function( media ) {\n\t\treturn media ? evalCSS(media) : true;\n\t};\n\n\t/**\n\t * Returns the calculated length in css pixel from the given sourceSizeValue\n\t * http://dev.w3.org/csswg/css-values-3/#length-value\n\t * intended Spec mismatches:\n\t * * Does not check for invalid use of CSS functions\n\t * * Does handle a computed length of 0 the same as a negative and therefore invalid value\n\t * @param sourceSizeValue\n\t * @returns {Number}\n\t */\n\tpf.calcLength = function( sourceSizeValue ) {\n\n\t\tvar value = evalCSS(sourceSizeValue, true) || false;\n\t\tif (value < 0) {\n\t\t\tvalue = false;\n\t\t}\n\n\t\treturn value;\n\t};\n\n\t/**\n\t * Takes a type string and checks if its supported\n\t */\n\n\tpf.supportsType = function( type ) {\n\t\treturn ( type ) ? types[ type ] : true;\n\t};\n\n\t/**\n\t * Parses a sourceSize into mediaCondition (media) and sourceSizeValue (length)\n\t * @param sourceSizeStr\n\t * @returns {*}\n\t */\n\tpf.parseSize = memoize(function( sourceSizeStr ) {\n\t\tvar match = ( sourceSizeStr || \"\" ).match(regSize);\n\t\treturn {\n\t\t\tmedia: match && match[1],\n\t\t\tlength: match && match[2]\n\t\t};\n\t});\n\n\tpf.parseSet = function( set ) {\n\t\tif ( !set.cands ) {\n\t\t\tset.cands = parseSrcset(set.srcset, set);\n\t\t}\n\t\treturn set.cands;\n\t};\n\n\t/**\n\t * returns 1em in css px for html/body default size\n\t * function taken from respondjs\n\t * @returns {*|number}\n\t */\n\tpf.getEmValue = function() {\n\t\tvar body;\n\t\tif ( !eminpx && (body = document.body) ) {\n\t\t\tvar div = document.createElement( \"div\" ),\n\t\t\t\toriginalHTMLCSS = docElem.style.cssText,\n\t\t\t\toriginalBodyCSS = body.style.cssText;\n\n\t\t\tdiv.style.cssText = baseStyle;\n\n\t\t\t// 1em in a media query is the value of the default font size of the browser\n\t\t\t// reset docElem and body to ensure the correct value is returned\n\t\t\tdocElem.style.cssText = fsCss;\n\t\t\tbody.style.cssText = fsCss;\n\n\t\t\tbody.appendChild( div );\n\t\t\teminpx = div.offsetWidth;\n\t\t\tbody.removeChild( div );\n\n\t\t\t//also update eminpx before returning\n\t\t\teminpx = parseFloat( eminpx, 10 );\n\n\t\t\t// restore the original values\n\t\t\tdocElem.style.cssText = originalHTMLCSS;\n\t\t\tbody.style.cssText = originalBodyCSS;\n\n\t\t}\n\t\treturn eminpx || 16;\n\t};\n\n\t/**\n\t * Takes a string of sizes and returns the width in pixels as a number\n\t */\n\tpf.calcListLength = function( sourceSizeListStr ) {\n\t\t// Split up source size list, ie ( max-width: 30em ) 100%, ( max-width: 50em ) 50%, 33%\n\t\t//\n\t\t// or (min-width:30em) calc(30% - 15px)\n\t\tif ( !(sourceSizeListStr in sizeLengthCache) || cfg.uT ) {\n\t\t\tvar winningLength = pf.calcLength( parseSizes( sourceSizeListStr ) );\n\n\t\t\tsizeLengthCache[ sourceSizeListStr ] = !winningLength ? units.width : winningLength;\n\t\t}\n\n\t\treturn sizeLengthCache[ sourceSizeListStr ];\n\t};\n\n\t/**\n\t * Takes a candidate object with a srcset property in the form of url/\n\t * ex. \"images/pic-medium.png 1x, images/pic-medium-2x.png 2x\" or\n\t * \"images/pic-medium.png 400w, images/pic-medium-2x.png 800w\" or\n\t * \"images/pic-small.png\"\n\t * Get an array of image candidates in the form of\n\t * {url: \"/foo/bar.png\", resolution: 1}\n\t * where resolution is http://dev.w3.org/csswg/css-values-3/#resolution-value\n\t * If sizes is specified, res is calculated\n\t */\n\tpf.setRes = function( set ) {\n\t\tvar candidates;\n\t\tif ( set ) {\n\n\t\t\tcandidates = pf.parseSet( set );\n\n\t\t\tfor ( var i = 0, len = candidates.length; i < len; i++ ) {\n\t\t\t\tsetResolution( candidates[ i ], set.sizes );\n\t\t\t}\n\t\t}\n\t\treturn candidates;\n\t};\n\n\tpf.setRes.res = setResolution;\n\n\tpf.applySetCandidate = function( candidates, img ) {\n\t\tif ( !candidates.length ) {return;}\n\t\tvar candidate,\n\t\t\ti,\n\t\t\tj,\n\t\t\tlength,\n\t\t\tbestCandidate,\n\t\t\tcurSrc,\n\t\t\tcurCan,\n\t\t\tcandidateSrc,\n\t\t\tabortCurSrc;\n\n\t\tvar imageData = img[ pf.ns ];\n\t\tvar dpr = pf.DPR;\n\n\t\tcurSrc = imageData.curSrc || img[curSrcProp];\n\n\t\tcurCan = imageData.curCan || setSrcToCur(img, curSrc, candidates[0].set);\n\n\t\t// if we have a current source, we might either become lazy or give this source some advantage\n\t\tif ( curCan && curCan.set === candidates[ 0 ].set ) {\n\n\t\t\t// if browser can abort image request and the image has a higher pixel density than needed\n\t\t\t// and this image isn't downloaded yet, we skip next part and try to save bandwidth\n\t\t\tabortCurSrc = (supportAbort && !img.complete && curCan.res - 0.1 > dpr);\n\n\t\t\tif ( !abortCurSrc ) {\n\t\t\t\tcurCan.cached = true;\n\n\t\t\t\t// if current candidate is \"best\", \"better\" or \"okay\",\n\t\t\t\t// set it to bestCandidate\n\t\t\t\tif ( curCan.res >= dpr ) {\n\t\t\t\t\tbestCandidate = curCan;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( !bestCandidate ) {\n\n\t\t\tcandidates.sort( ascendingSort );\n\n\t\t\tlength = candidates.length;\n\t\t\tbestCandidate = candidates[ length - 1 ];\n\n\t\t\tfor ( i = 0; i < length; i++ ) {\n\t\t\t\tcandidate = candidates[ i ];\n\t\t\t\tif ( candidate.res >= dpr ) {\n\t\t\t\t\tj = i - 1;\n\n\t\t\t\t\t// we have found the perfect candidate,\n\t\t\t\t\t// but let's improve this a little bit with some assumptions ;-)\n\t\t\t\t\tif (candidates[ j ] &&\n\t\t\t\t\t\t(abortCurSrc || curSrc !== pf.makeUrl( candidate.url )) &&\n\t\t\t\t\t\tchooseLowRes(candidates[ j ].res, candidate.res, dpr, candidates[ j ].cached)) {\n\n\t\t\t\t\t\tbestCandidate = candidates[ j ];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbestCandidate = candidate;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( bestCandidate ) {\n\n\t\t\tcandidateSrc = pf.makeUrl( bestCandidate.url );\n\n\t\t\timageData.curSrc = candidateSrc;\n\t\t\timageData.curCan = bestCandidate;\n\n\t\t\tif ( candidateSrc !== curSrc ) {\n\t\t\t\tpf.setSrc( img, bestCandidate );\n\t\t\t}\n\t\t\tpf.setSize( img );\n\t\t}\n\t};\n\n\tpf.setSrc = function( img, bestCandidate ) {\n\t\tvar origWidth;\n\t\timg.src = bestCandidate.url;\n\n\t\t// although this is a specific Safari issue, we don't want to take too much different code paths\n\t\tif ( bestCandidate.set.type === \"image/svg+xml\" ) {\n\t\t\torigWidth = img.style.width;\n\t\t\timg.style.width = (img.offsetWidth + 1) + \"px\";\n\n\t\t\t// next line only should trigger a repaint\n\t\t\t// if... is only done to trick dead code removal\n\t\t\tif ( img.offsetWidth + 1 ) {\n\t\t\t\timg.style.width = origWidth;\n\t\t\t}\n\t\t}\n\t};\n\n\tpf.getSet = function( img ) {\n\t\tvar i, set, supportsType;\n\t\tvar match = false;\n\t\tvar sets = img [ pf.ns ].sets;\n\n\t\tfor ( i = 0; i < sets.length && !match; i++ ) {\n\t\t\tset = sets[i];\n\n\t\t\tif ( !set.srcset || !pf.matchesMedia( set.media ) || !(supportsType = pf.supportsType( set.type )) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( supportsType === \"pending\" ) {\n\t\t\t\tset = supportsType;\n\t\t\t}\n\n\t\t\tmatch = set;\n\t\t\tbreak;\n\t\t}\n\n\t\treturn match;\n\t};\n\n\tpf.parseSets = function( element, parent, options ) {\n\t\tvar srcsetAttribute, imageSet, isWDescripor, srcsetParsed;\n\n\t\tvar hasPicture = parent && parent.nodeName.toUpperCase() === \"PICTURE\";\n\t\tvar imageData = element[ pf.ns ];\n\n\t\tif ( imageData.src === undefined || options.src ) {\n\t\t\timageData.src = getImgAttr.call( element, \"src\" );\n\t\t\tif ( imageData.src ) {\n\t\t\t\tsetImgAttr.call( element, srcAttr, imageData.src );\n\t\t\t} else {\n\t\t\t\tremoveImgAttr.call( element, srcAttr );\n\t\t\t}\n\t\t}\n\n\t\tif ( imageData.srcset === undefined || options.srcset || !pf.supSrcset || element.srcset ) {\n\t\t\tsrcsetAttribute = getImgAttr.call( element, \"srcset\" );\n\t\t\timageData.srcset = srcsetAttribute;\n\t\t\tsrcsetParsed = true;\n\t\t}\n\n\t\timageData.sets = [];\n\n\t\tif ( hasPicture ) {\n\t\t\timageData.pic = true;\n\t\t\tgetAllSourceElements( parent, imageData.sets );\n\t\t}\n\n\t\tif ( imageData.srcset ) {\n\t\t\timageSet = {\n\t\t\t\tsrcset: imageData.srcset,\n\t\t\t\tsizes: getImgAttr.call( element, \"sizes\" )\n\t\t\t};\n\n\t\t\timageData.sets.push( imageSet );\n\n\t\t\tisWDescripor = (alwaysCheckWDescriptor || imageData.src) && regWDesc.test(imageData.srcset || \"\");\n\n\t\t\t// add normal src as candidate, if source has no w descriptor\n\t\t\tif ( !isWDescripor && imageData.src && !getCandidateForSrc(imageData.src, imageSet) && !imageSet.has1x ) {\n\t\t\t\timageSet.srcset += \", \" + imageData.src;\n\t\t\t\timageSet.cands.push({\n\t\t\t\t\turl: imageData.src,\n\t\t\t\t\td: 1,\n\t\t\t\t\tset: imageSet\n\t\t\t\t});\n\t\t\t}\n\n\t\t} else if ( imageData.src ) {\n\t\t\timageData.sets.push( {\n\t\t\t\tsrcset: imageData.src,\n\t\t\t\tsizes: null\n\t\t\t} );\n\t\t}\n\n\t\timageData.curCan = null;\n\t\timageData.curSrc = undefined;\n\n\t\t// if img has picture or the srcset was removed or has a srcset and does not support srcset at all\n\t\t// or has a w descriptor (and does not support sizes) set support to false to evaluate\n\t\timageData.supported = !( hasPicture || ( imageSet && !pf.supSrcset ) || (isWDescripor && !pf.supSizes) );\n\n\t\tif ( srcsetParsed && pf.supSrcset && !imageData.supported ) {\n\t\t\tif ( srcsetAttribute ) {\n\t\t\t\tsetImgAttr.call( element, srcsetAttr, srcsetAttribute );\n\t\t\t\telement.srcset = \"\";\n\t\t\t} else {\n\t\t\t\tremoveImgAttr.call( element, srcsetAttr );\n\t\t\t}\n\t\t}\n\n\t\tif (imageData.supported && !imageData.srcset && ((!imageData.src && element.src) || element.src !== pf.makeUrl(imageData.src))) {\n\t\t\tif (imageData.src === null) {\n\t\t\t\telement.removeAttribute(\"src\");\n\t\t\t} else {\n\t\t\t\telement.src = imageData.src;\n\t\t\t}\n\t\t}\n\n\t\timageData.parsed = true;\n\t};\n\n\tpf.fillImg = function(element, options) {\n\t\tvar imageData;\n\t\tvar extreme = options.reselect || options.reevaluate;\n\n\t\t// expando for caching data on the img\n\t\tif ( !element[ pf.ns ] ) {\n\t\t\telement[ pf.ns ] = {};\n\t\t}\n\n\t\timageData = element[ pf.ns ];\n\n\t\t// if the element has already been evaluated, skip it\n\t\t// unless `options.reevaluate` is set to true ( this, for example,\n\t\t// is set to true when running `picturefill` on `resize` ).\n\t\tif ( !extreme && imageData.evaled === evalId ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !imageData.parsed || options.reevaluate ) {\n\t\t\tpf.parseSets( element, element.parentNode, options );\n\t\t}\n\n\t\tif ( !imageData.supported ) {\n\t\t\tapplyBestCandidate( element );\n\t\t} else {\n\t\t\timageData.evaled = evalId;\n\t\t}\n\t};\n\n\tpf.setupRun = function() {\n\t\tif ( !alreadyRun || isVwDirty || (DPR !== window.devicePixelRatio) ) {\n\t\t\tupdateMetrics();\n\t\t}\n\t};\n\n\t// If picture is supported, well, that's awesome.\n\tif ( pf.supPicture ) {\n\t\tpicturefill = noop;\n\t\tpf.fillImg = noop;\n\t} else {\n\n\t\t // Set up picture polyfill by polling the document\n\t\t(function() {\n\t\t\tvar isDomReady;\n\t\t\tvar regReady = window.attachEvent ? /d$|^c/ : /d$|^c|^i/;\n\n\t\t\tvar run = function() {\n\t\t\t\tvar readyState = document.readyState || \"\";\n\n\t\t\t\ttimerId = setTimeout(run, readyState === \"loading\" ? 200 : 999);\n\t\t\t\tif ( document.body ) {\n\t\t\t\t\tpf.fillImgs();\n\t\t\t\t\tisDomReady = isDomReady || regReady.test(readyState);\n\t\t\t\t\tif ( isDomReady ) {\n\t\t\t\t\t\tclearTimeout( timerId );\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tvar timerId = setTimeout(run, document.body ? 9 : 99);\n\n\t\t\t// Also attach picturefill on resize and readystatechange\n\t\t\t// http://modernjavascript.blogspot.com/2013/08/building-better-debounce.html\n\t\t\tvar debounce = function(func, wait) {\n\t\t\t\tvar timeout, timestamp;\n\t\t\t\tvar later = function() {\n\t\t\t\t\tvar last = (new Date()) - timestamp;\n\n\t\t\t\t\tif (last < wait) {\n\t\t\t\t\t\ttimeout = setTimeout(later, wait - last);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttimeout = null;\n\t\t\t\t\t\tfunc();\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\treturn function() {\n\t\t\t\t\ttimestamp = new Date();\n\n\t\t\t\t\tif (!timeout) {\n\t\t\t\t\t\ttimeout = setTimeout(later, wait);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\t\t\tvar lastClientWidth = docElem.clientHeight;\n\t\t\tvar onResize = function() {\n\t\t\t\tisVwDirty = Math.max(window.innerWidth || 0, docElem.clientWidth) !== units.width || docElem.clientHeight !== lastClientWidth;\n\t\t\t\tlastClientWidth = docElem.clientHeight;\n\t\t\t\tif ( isVwDirty ) {\n\t\t\t\t\tpf.fillImgs();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\ton( window, \"resize\", debounce(onResize, 99 ) );\n\t\t\ton( document, \"readystatechange\", run );\n\t\t})();\n\t}\n\n\tpf.picturefill = picturefill;\n\t//use this internally for easy monkey patching/performance testing\n\tpf.fillImgs = picturefill;\n\tpf.teardownRun = noop;\n\n\t/* expose methods for testing */\n\tpicturefill._ = pf;\n\n\twindow.picturefillCFG = {\n\t\tpf: pf,\n\t\tpush: function(args) {\n\t\t\tvar name = args.shift();\n\t\t\tif (typeof pf[name] === \"function\") {\n\t\t\t\tpf[name].apply(pf, args);\n\t\t\t} else {\n\t\t\t\tcfg[name] = args[0];\n\t\t\t\tif (alreadyRun) {\n\t\t\t\t\tpf.fillImgs( { reselect: true } );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\twhile (setOptions && setOptions.length) {\n\t\twindow.picturefillCFG.push(setOptions.shift());\n\t}\n\n\t/* expose picturefill */\n\twindow.picturefill = picturefill;\n\n\t/* expose picturefill */\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t// CommonJS, just export\n\t\tmodule.exports = picturefill;\n\t} else if ( typeof define === \"function\" && define.amd ) {\n\t\t// AMD support\n\t\tdefine( \"picturefill\", function() { return picturefill; } );\n\t}\n\n\t// IE8 evals this sync, so it must be the last thing we do\n\tif ( !pf.supPicture ) {\n\t\ttypes[ \"image/webp\" ] = detectTypeSupport(\"image/webp\", \"data:image/webp;base64,UklGRkoAAABXRUJQVlA4WAoAAAAQAAAAAAAAAAAAQUxQSAwAAAABBxAR/Q9ERP8DAABWUDggGAAAADABAJ0BKgEAAQADADQlpAADcAD++/1QAA==\" );\n\t}\n\n} )( window, document );\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","__webpack_require__.j = 179;","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t179: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkfrontend_starter\"] = self[\"webpackChunkfrontend_starter\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [736], function() { return __webpack_require__(414); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","NAV_MOBILE","document","querySelector","COLLAPSE_OPACITY_CLASS","getMobileSearch","searchSelector","mobileSearch","cloneNode","classList","remove","add","input","inputId","getAttribute","setAttribute","searchIcon","searchIconId","constructor","moveRelatedItemsToTheBody","window","ListsContent","styleLists","container","getElementById","related","childNodes","length","appendChild","onDocumentLoaded","callback","readyState","addEventListener","getNumberOfColumns","innerWidth","voyageGridItemClassUpdater","grids","Array","prototype","forEach","call","gridNode","gridItems","from","children","filter","g","className","indexOf","gridItem","index","numberOfGridItems","numberOfColumns","remainder","includes","getGridItemClassName","voyageInsightsMostRecentGridsItemClassUpdater","everyThird","evenRow","Math","ceil","getInsightsMostRecentGridItemClassName","voyageSimpleGridItemClassUpdater","simpleGrids","slice","addEventListeners","querySelectorAll","voyageInsightsMostRecentGrids","_typeof","obj","Symbol","iterator","_classCallCheck","instance","Constructor","TypeError","_defineProperties","target","props","i","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_createClass","protoProps","staticProps","_getPrototypeOf","o","setPrototypeOf","getPrototypeOf","__proto__","_setPrototypeOf","p","_possibleConstructorReturn","self","ReferenceError","_assertThisInitialized","_superPropBase","object","property","hasOwnProperty","_get","Reflect","get","receiver","base","desc","getOwnPropertyDescriptor","arguments","value","apply","this","defaults","type","startAt","perView","focusAt","gap","autoplay","hoverpause","keyboard","bound","swipeThreshold","dragThreshold","perSwipe","touchRatio","touchAngle","animationDuration","rewind","rewindDuration","animationTimingFunc","waitForTransition","throttle","direction","peek","cloningRatio","breakpoints","classes","swipeable","dragging","ltr","rtl","slider","carousel","slide","clone","active","arrow","disabled","nav","warn","msg","console","error","concat","toInt","parseInt","isString","isObject","isFunction","isUndefined","isArray","mount","glide","extensions","events","components","name","_name","prop","definition","mergeOptions","settings","options","assign","EventsBus","undefined","hop","event","handler","push","on","context","emit","item","Glide$1","Glide","selector","_c","_t","_e","transformers","pattern","Run","make","distance","Transition","disable","Move","interval","_o","set","_i","_d","status","now","Date","getTime","func","wait","timeout","args","result","previous","later","leading","throttled","at","remaining","clearTimeout","trailing","setTimeout","cancel","MARGIN_TYPE","siblings","node","parentNode","n","firstChild","matched","nextSibling","nodeType","exist","HTMLElement","toArray","nodeList","TRACK_SELECTOR","EventsBinder","listeners","el","closure","capture","removeEventListener","VALID_DIRECTIONS","FLIPED_MOVEMENTS","Rtl","Components","modify","translate","Direction","is","Gap","multiplier","floor","Sizes","slideWidth","Gaps","Grow","Clones","grow","Peeking","Peek","before","Focusing","width","supportsPassive","opts","e","supportsPassive$1","START_EVENTS","MOVE_EVENTS","END_EVENTS","MOUSE_EVENTS","CONTROLS_SELECTOR","PREVIOUS_CONTROLS_SELECTOR","NEXT_CONTROLS_SELECTOR","sortBreakpoints","points","keys","sort","reduce","r","k","COMPONENTS","Html","Events","root","track","collectSlides","slides","wrapper","contains","_r","t","Translate","transform","TRANSFORMERS","mutate","transformer","mutator","translate3d","style","mozTransform","webkitTransform","getStartIndex","isOffset","getTravelDistance","travelDistance","isType","movement","after","startWidth","compose","duration","transition","enable","offset","resolve","token","split","join","addClass","removeClass","_v","setupSlides","setupWrapper","wrapperSize","offsetWidth","reductor","len","marginLeft","marginRight","_this","items","collect","_Glide$settings","peekIncrementer","cloneCount","round","append","reverse","prepend","max","_clone","unshift","_Components$Html","half","_i2","insertBefore","_i3","removeChild","Resize","Binder","bind","unbind","off","destroy","Build","typeClass","activeClass","sibling","removeClasses","_Glide$settings$class","move","calculate","isStart","isEnd","steps","viewSize","calculateForwardIndex","isBound","normalizeForwardIndex","_index","calculateBackwardIndex","normalizeBackwardIndex","_m","step","substr","Swipe","swipeSin","swipeStartX","swipeStartY","passive","bindSwipeStart","start","swipe","touches","pageX","pageY","bindSwipeMove","bindSwipeEnd","subExSx","subEySy","powEX","abs","powEY","swipeHypotenuse","sqrt","swipeCathetus","asin","PI","stopPropagation","parseFloat","end","_Glide$settings2","threshold","swipeDistance","swipeDeg","unbindSwipeMove","unbindSwipeEnd","_Glide$settings3","unbindSwipeStart","_this2","_this3","changedTouches","Images","dragstart","preventDefault","Anchors","detached","prevented","_a","click","detach","draggable","attach","Controls","_n","_arrowControls","next","addBindings","setActive","removeActive","controls","setArrowState","resetArrowState","disableArrow","_len","lists","_key","list","element","_len2","_key2","removeBindings","elements","currentTarget","Keyboard","press","code","Autoplay","setInterval","stop","time","clearInterval","Breakpoints","match","matchMedia","point","matches","_Core","subClass","superClass","create","_inherits","Derived","hasNativeReflectConstruct","_super","construct","sham","Proxy","Boolean","valueOf","_isNativeReflectConstruct","Super","NewTarget","OPENED_CLASS","openHandler","linksContainer","openedDropdown","equal","isEqualNode","heading","activeHeadings","text","innerHTML","substring","min","lastIndexOf","links","clientHeight","init","dropdownNodes","dropdownNode","stopImmediatePropagation","keyCode","log","handleClick","expandable","closest","contentHeight","content","closedContentHeight","height","resizeAccordions","expandables","str","carouselClasses","voyageCarouselHandler","carousels","getPrevChild","getChildren","getNextChild","setClasses","activeItem","setItem","number","child","mediaId","dataset","mediaid","id","replace","mediaElement","media","spinnerElement","spinner","addEventHandldersToclone","link","openAccordionPopup","image","bindClickActions","voyageCarouselSlidePrev","voyageCarouselSlideNext","getCurrentItem","findIndex","currentItem","setInfityNext","calculateAccordionHeight","setInfityPrevious","touchStartX","touchStartY","functionName","buttons","parentElement","button","display","touchStart","touchEnd","validateSwipeY","swipeLeft","swipeRight","err","carouselsElements","carouselsElement","wrappers","contenTopText","contentHeader","contentElement","contentHeaderText","innerText","truncatedCount","predictTheContentTextLengthWhenLongHeaderText","truncate","addClasses","column","columnNumber","voyageAnchorMenuHandler","anchorMenuWrapper","anchorMenu","anchorElements","mainMenu","voyageMenu","anchorElement","anchorMenuWrapperY","getBoundingClientRect","y","styles","mainMenuHeight","position","top","backgroundColor","left","setOverLappedPosition","hasAttribute","removeAttribute","targetElement","element2","href","voyageMenuHandler","inpageNaviWrapper","voyageMenuWrapperY","calculateOverlappedPosition","overLappedTarget","getElementsByClassName","getBrowserWidth","overLappedHeight","pageYOffset","bottom","documentElement","clientWidth","body","setInpageNaviPosition","hash","voyageMenuWrapper","dynamicNaviHeight","scrollElement","scrollIntoView","removeFilters","currentMenuItem","allSections","filterItems","tag","toLowerCase","menuItem","selected","selectedFilters","selectedFilter","dataTypes","itm","itemDataTags","tags","findDatatype","arr","section","shouldWeHide","allCards","card","populateAnchorMenuByTags","arrayOfTags","arrayOfRemovableTags","NarrowTagFilters","tagsDataString","Set","prev","tagName","createElement","createAnchorMenuItem","setDefaultFilter","onClickFilter","addMenuItemClickEvents","DomHelper","static","isDOMElement","matchesSelector","msMatchesSelector","mozMatchesSelector","webkitMatchesSelector","oMatchesSelector","SVGElement","search","toUpperCase","ev","SVGElementInstance","correspondingUseElement","parent","removeElement","classname","testString","baseVal","RegExp","test","classnames","ArrayHelper","compareFunc","removedItems","splice","IconHelper","iconId","cssClasses","fill","GUIDHelper","guidGenerator","random","toString","toLocalDateShort","date","toLocaleString","lang","day","month","toLocalDate","year","toLocalDateLong","dateToConvert","theElement","localDate","getDate","getMonth","getFullYear","QueryStringHelper","queryParams","getQueryStringHashFromUrl","setUrlQueryString","location","queryString","toHash","history","pushState","qs","fromHash","val","protocol","host","pathname","fakeNavigation","url","insertSlashAfterPath","parts","retval","queryHash","encodeURIComponent","btoa","qString","trimStart","decodeURIComponent","c","charAt","APIHelper","urlParams","responseType","send","method","okResult","data","query","toQueryString","callApi","Promise","reject","xhr","XMLHttpRequest","onload","responseText","JSON","parse","response","callReject","onerror","onabort","open","setRequestHeader","stringify","isConnectionError","tryGetResponse","map","getQueryStringParameter","ObjectHelper","DeviceHelper","navigator","userAgent","topicsQs","toggleContainer","title","getElementsByTagName","topicsTitle","filterTitle","span","titleSection","filterContainer","div","insertAdjacentHTML","closeFilter","voyageInsights2FilterTitle","topicsObject","topicsValue","closeFilterHtml","topics","themesTitlesElement","searchFilter","filterList","culture","buildContentHubQuery","addFilterQueryToElasticSearchBody","contentHubSkipIDs","ids","values","bool","prefilterQuery","getPrefilterQuery","addPrefilterQuery","page","size","numberOfItems","filterYearOnly","onlyFilteredByYear","NewsReleaseDate","newsQueryResult","buildNewsQuery","idsObj","hasYearSelected","DatePublished","must","addShouldExpression","mustMatchLanguage","defaultMust","dateFieldName","keyworSearchConditions","dateConditions","idx","array","taxonName","isNaN","Number","range","gte","lte","searchConditions","getKeywordSearchConditions","fieldName","j","singleCategoryConditions","propName","categoryCondition","uppercaseFirstLetter","yearLte","conditions","shouldExpression","should","searchPhrase","words","condition","buildFuzzyWordMatch","exact","buildExactPhraseMatch","exactSanitized","fuzzyTerms","fuzzy","buildFuzzyPhraseMatch","fuzziness","match_phrase","span_near","clauses","slop","in_order","clause","span_multi","prefilterDataParsed","prefilterData","prefilterDataAttr","checkForDate","prefilteredShouldQuery","isDate","filterIsAdded","isTaxonomy","current","string","IRScroll","jQuery","ir","$","irHTML","html","initWidth","duplicateContentTimes","createMarquee","resize","marquee","duplicated","pauseOnHover","delayBeforeStart","sliderHandler","sliders","x","lazyImages","lazyImageObserver","IntersectionObserver","entries","observer","entry","isIntersecting","unobserve","lazyImage","observe","wizardSelectorContainer","gradientContainer","titles","attachEvents","isMobilebrowser","screen","createMobileSelector","matchMediaMobile","matchMediaChanged","addListener","openedPanels","panel","openedPanel","activeheading","level","attachMobileEvents","mobileContainer","mobileTitles","arrows","wizardButtonMobile","mobileDiv","levelHeadings","outerHTML","levelContainers","firstLevelTitles","counter","secondLevelContainers","secondCounter","thirdCounter","lastCounter","thirdLevelRow","dropdownLinks","DropdownLinks","voyageToughtLeaderCounterAnimation","qSelector","thousandSeparator","startTimestamp","timestamp","progress","formatNumber","requestAnimationFrame","num","IePolyfills","toStr","isCallable","maxSafeInteger","toLength","documentMode","picturefill","objectFitImages","NodeList","fn","pow","isFinite","toInteger","arrayLike","C","T","mapFn","kValue","A","DateTimeHelper","ElasticSearchHelper","Authors","authorsPlaceholder","authorsList","showAuthors","authors","LazyImage","images","backgroundImages","intersectionRatio","background","preloadBackgroundImage","preloadImage","rootMargin","backgroundImage","onbeforeprint","src","srcset","mainNavigation","navigationNode","regionSelector","region","regionFlyout","initRegionMobile","selectedReg","slectedRegValue","selectedIndex","uiConsts","stickyNav","header","MobileNav","hamburger","closeNav","initMobile","toggle","openNav","menuLinks","secondaryLinks","langFrag","langSelectElm","langMenuElm","regionSelectElm","regMenuElm","regFrag","mobileWartsila","createDocumentFragment","Option","mobileNavHelper","languageSelector","langMenu","initMobileLang","slectedLangValue","openLink","redirectUrl","single","gridSingle","double","cardDouble","multi","cardWrapper","visibleElements","addCssClasses","styleGridLists","cardGridWrapper","visibleGridElements","changeLayout","styleSingleLists","Node","ELEMENT_NODE","cur","pubSubEvents","subscribers","publish","eventName","subscriberCallback","subscribe","dobriInnerTest","unsubscribe","RelatedContent","FilterList","dataTaxon","params","hasSearchUrl","filterListsByIds","filterListsByCategories","getFilteredIds","then","foundLists","hubId","some","elm","showList","listsToHide","taxons","hideList","taxaParams","param","taxas","every","foundTaxa","tx","formattedParams","VoyageGridItemClassUpdaterLazy","hideDuplicateElements","elId","listObj","searchUrl","contentHubResultServiceUrl","listEl","buildFilterListRequestBody","post","hits","_id","UrlHandler","urlArr","dataAsQueryString","parseData","trim","tmp","searchFields","searchValue","encodeURI","GridListsContent","VoyageGridItemClassUpdater","removeExpandableListeners","addExpandableListeners","handleUnorthodoxGridItems","unorthodoxGridColumn1","unorthodoxGridColumn2","anchors","a","classOn","anchorClass","anchor","anchorOn","pop","onloadInpageNaviPosition","voyageInsightsFilterTitle","Tabs","tabs","isEditMode","tab","tabWrapperUL","tabContent","liElement","tabLi","accordion","currentActive","contentSwitcher","singleTabWrapper","onStateChange","onreadystatechange","WizardSelector","timer","dummySrc","fixRespimg","findPictureImgs","onResize","mq","ua","HTMLPictureElement","$1","img","source","sizes","picture","nodeName","firstElementChild","_pfLastSize","imgs","eminpx","alwaysCheckWDescriptor","evalId","pf","isSupportTestReady","noop","getImgAttr","setImgAttr","removeImgAttr","docElem","types","cfg","algorithm","srcAttr","srcsetAttr","supportAbort","curSrcProp","regWDesc","regSize","setOptions","picturefillCFG","fsCss","isVwDirty","cssCache","sizeLengthCache","DPR","devicePixelRatio","units","px","alreadyRun","regexLeadingSpaces","regexLeadingCommasOrSpaces","regexLeadingNotSpaces","regexTrailingCommas","regexNonNegativeInteger","regexFloatingPoint","evt","attachEvent","memoize","cache","isSpace","regLength","buildStr","image2","width1","isDomReady","regReady","run","timerId","lastClientWidth","evalCSS","css","parsedLength","Function","setResolution","candidate","sizesattr","w","cWidth","calcListLength","res","d","opt","plen","qsa","reevaluate","reselect","sel","selShort","setupRun","fillImg","teardownRun","ascendingSort","b","getCandidateForSrc","candidates","parseSet","makeUrl","implementation","hasFeature","ns","supSrcset","supSizes","supPicture","complete","u","setSize","matchesMedia","mMQ","calcLength","sourceSizeValue","supportsType","parseSize","sourceSizeStr","cands","collectCharacters","regEx","chars","exec","pos","descriptors","currentDescriptor","state","inputLength","parseDescriptors","h","lastChar","intVal","floatVal","pError","has1x","tokenize","parseSrcset","getEmValue","originalHTMLCSS","cssText","originalBodyCSS","sourceSizeListStr","uT","winningLength","strValue","unparsedSizesList","unparsedSizesListLength","unparsedSize","lastComponentValue","s","regexCssLengthWithUnits","regexCssCalc","chrctr","component","componentArray","listArray","parenDepth","inComment","pushComponent","pushComponentArray","parseComponentValues","parseSizes","setRes","applySetCandidate","bestCandidate","curSrc","curCan","candidateSrc","abortCurSrc","lowerValue","higherValue","dprValue","isCached","bonusFactor","bonus","meanDensity","imageData","dpr","sets","setSrcToCur","cached","setSrc","origWidth","getSet","parseSets","srcsetAttribute","imageSet","isWDescripor","srcsetParsed","hasPicture","pic","sources","getAllSourceElements","supported","parsed","extreme","evaled","srcSetCandidates","matchingSet","evaluated","applyBestCandidate","innerHeight","vw","vh","em","rem","fillImgs","last","_","shift","module","exports","typeUri","Image","detectTypeSupport","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","m","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","getter","__esModule","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}