{"version":3,"file":"main-one.js","mappings":"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","sources":["webpack://frontend-starter/webpack/runtime/chunk loaded","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/./src/scripts/voyage-mobile-styles-helper.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/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/helpers/language-selector-helper.js","webpack://frontend-starter/./src/scripts/elastic-search-helper.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/voyage-insight-filter-title.js","webpack://frontend-starter/./src/scripts/sticky-left-navigation.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-one.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/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};","\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)","import { onDocumentLoaded, onResize } from \"../../apps/StyleguideApp/helpers/utils\"\r\n\r\nfunction hideLeftColumnIfEmpty() {\r\n\r\n var leftSegments = document.getElementsByClassName('voyage__info-segment--left');\r\n if (leftSegments) {\r\n Array.from(leftSegments, function (leftSegment) {\r\n if (leftSegment.getElementsByTagName('*').length == 0) {\r\n leftSegment.style.display = getBrowserWidth() <= 739 ? 'none' : 'block';\r\n }\r\n });\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\nexport default () => {\r\n onDocumentLoaded(hideLeftColumnIfEmpty);\r\n onResize(hideLeftColumnIfEmpty);\r\n} \r\n","/*!\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}","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 class LanguageSelectorHelper {\r\n static openLink(culture, event) {\r\n event.stopImmediatePropagation();\r\n var redirectUrlElement = document.querySelector(`[data-sf-role=\"${culture}\"]`);\r\n\r\n if (redirectUrlElement) {\r\n var url = redirectUrlElement.value;\r\n window.location.href = url;\r\n }\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","\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 (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","const FIXED_CLASS_ACTIVE = 'is-fixed';\r\n\r\nclass StickyLeftNavigation {\r\n constructor() {\r\n this.init();\r\n\r\n const callback = function (mutationsList) {\r\n for (let i = 0, len = mutationsList.length; i < len; i++) {\r\n if (mutationsList[i].type === 'childList') {\r\n this.init();\r\n break;\r\n }\r\n }\r\n }\r\n\r\n const observer = new MutationObserver(callback)\r\n const config = {\r\n childList: true,\r\n subtree: false,\r\n }\r\n var bodyEl = document.getElementById('main');\r\n if (!bodyEl) {\r\n bodyEl = document.getElementById('root');\r\n }\r\n observer.observe(bodyEl, config)\r\n }\r\n\r\n stickySidebar() {\r\n let self = this;\r\n let element = document.querySelector('.sidebar.sticky');\r\n if (!element) return;\r\n let position = window.pageYOffset + element.getBoundingClientRect().top;\r\n let parentEl = element.parentNode.parentNode;\r\n let parentWidth = parentEl.offsetWidth;\r\n element.style.width = `${parentWidth}px`;\r\n\r\n window.addEventListener('resize', () => {\r\n let parentEl = element.parentNode.parentNode;\r\n let parentWidth = parentEl.offsetWidth;\r\n element.style.width = `${parentWidth}px`;\r\n })\r\n\r\n window.addEventListener('scroll', () => {\r\n self.onScroll(position, element)\r\n })\r\n\r\n self.onScroll(position, element)\r\n }\r\n\r\n aboveScroll(position, element) {\r\n return position <= window.pageYOffset + 70\r\n }\r\n\r\n belowScroll(position, element) {\r\n let footer = document.querySelector('footer');\r\n let footerPosition = footer.getBoundingClientRect();\r\n console.log(position);\r\n return footerPosition.top + 100 <= (window.innerHeight || document.documentElement.clientHeight) \r\n }\r\n\r\n onScroll(position, element) {\r\n if (this.aboveScroll(position) && !(this.belowScroll(position))) {\r\n this.setFixed(element, 'top')\r\n } else if (this.belowScroll()) {\r\n this.setFixed(element, 'bottom')\r\n } else {\r\n this.setStatic(element)\r\n }\r\n }\r\n\r\n setFixed(element, position) {\r\n element.classList.add(FIXED_CLASS_ACTIVE)\r\n if (position == 'top') {\r\n element.classList.remove('animated')\r\n element.style.position = 'fixed'\r\n element.style.top = '70px'\r\n } else {\r\n var footerPosition = document.querySelector('footer').getBoundingClientRect();\r\n element.style.top = 'unset'\r\n element.style.bottom = `${(window.innerHeight || document.documentElement.clientHeight) - footerPosition.y}px`\r\n }\r\n }\r\n\r\n setStatic(element) {\r\n element.classList.remove(FIXED_CLASS_ACTIVE)\r\n element.style.position = 'static'\r\n element.style.top = 'auto'\r\n }\r\n\r\n toggleMobileMenu() {\r\n var menu = this.nextElementSibling\r\n var targetMenuTitle = this\r\n\r\n targetMenuTitle.classList.toggle('is-open')\r\n\r\n menu.classList.toggle('is-collapsed')\r\n menu.classList.toggle('animateIn')\r\n }\r\n\r\n // Expand/Collapse sub menus\r\n listree() {\r\n const subMenuTriggerClass = 'listree-menu__trigger'\r\n const expandedClass = 'expanded'\r\n const collapsedClass = 'collapsed'\r\n const subMenuTrigger = document.getElementsByClassName(subMenuTriggerClass)\r\n\r\n Array.from(subMenuTrigger).forEach(function (trigger) {\r\n let subMenuHeading = trigger.parentNode\r\n subMenuHeading.classList.add(collapsedClass)\r\n\r\n if (subMenuHeading.nextElementSibling) {\r\n subMenuHeading.nextElementSibling.style.display = 'none'\r\n }\r\n\r\n trigger.addEventListener('click', function (event) {\r\n event.preventDefault();\r\n let subMenuList = event.currentTarget.parentNode.nextElementSibling;\r\n var triggerParent = event.currentTarget.parentNode.parentNode;\r\n let expandedMenuItem = document.querySelector(`.${triggerParent.className} .listree-menu__item.expanded`);\r\n if (expandedMenuItem && !triggerParent.isEqualNode(expandedMenuItem.parentNode)) {\r\n var expandedMenuItemParent = expandedMenuItem.parentNode;\r\n if (triggerParent.classList[0] == expandedMenuItemParent.classList[0]) {\r\n expandedMenuItem.classList.remove(expandedClass);\r\n expandedMenuItem.nextElementSibling.style.display = 'none';\r\n let expandedItemChild = expandedMenuItem.nextElementSibling.querySelector('.expanded');\r\n if (expandedItemChild) {\r\n expandedItemChild.classList.remove(expandedClass);\r\n expandedItemChild.nextElementSibling.style.display = 'none';\r\n }\r\n }\r\n }\r\n\r\n if (subMenuList && subMenuList.style.display === 'none') {\r\n subMenuHeading.classList.remove(collapsedClass)\r\n subMenuHeading.classList.add(expandedClass)\r\n subMenuList.style.display = 'block';\r\n\r\n while (subMenuList && subMenuList.parentNode && subMenuList.parentNode.parentNode) {\r\n subMenuList = subMenuList.parentNode.parentNode;\r\n if (subMenuList.localName != 'ul') {\r\n break;\r\n }\r\n subMenuList.style.display = 'block';\r\n }\r\n\r\n let subMenuHeadingChild = subMenuHeading.nextElementSibling.querySelector('.expanded');\r\n if (subMenuHeadingChild) {\r\n subMenuHeadingChild.classList.remove(expandedClass);\r\n subMenuHeadingChild.nextElementSibling.style.display = 'none';\r\n }\r\n } else {\r\n subMenuHeading.classList.remove(expandedClass)\r\n subMenuHeading.classList.add(collapsedClass)\r\n subMenuList.style.display = 'none'\r\n }\r\n event.stopPropagation()\r\n })\r\n })\r\n }\r\n\r\n init() {\r\n let self = this\r\n console.log('Init sticky left navigation')\r\n\r\n // Init\r\n self.listree()\r\n self.stickySidebar()\r\n\r\n const active = document.querySelector('.listree-menu__item.active');\r\n if (active) {\r\n let previousLevel = active;\r\n if (active.nextElementSibling) {\r\n active.classList.remove('collapsed');\r\n active.classList.add('expanded');\r\n active.nextElementSibling.style.display = 'block';\r\n while (previousLevel.parentNode && previousLevel.parentNode.parentNode) {\r\n previousLevel = previousLevel.parentNode.parentNode;\r\n let previousLevelSibling = previousLevel.previousElementSibling;\r\n\r\n if (previousLevelSibling && previousLevelSibling.classList.contains('collapsed')) {\r\n previousLevelSibling.classList.remove('collapsed');\r\n previousLevelSibling.classList.add('expanded');\r\n previousLevel.style.display = 'block';\r\n }\r\n }\r\n\r\n\r\n } else {\r\n while (previousLevel.parentNode && previousLevel.parentNode.parentNode) {\r\n previousLevel = previousLevel.parentNode.parentNode;\r\n let previousLevelSibling = previousLevel.previousElementSibling;\r\n\r\n if (previousLevelSibling) {\r\n previousLevelSibling.classList.remove('collapsed');\r\n previousLevelSibling.classList.add('expanded');\r\n previousLevel.style.display = 'block';\r\n let previousPreviousLevel = previousLevelSibling.parentNode.parentNode;\r\n if (previousPreviousLevel.previousElementSibling) {\r\n previousPreviousLevel.previousElementSibling.classList.remove('collapsed');\r\n previousPreviousLevel.previousElementSibling.classList.add('expanded');\r\n previousPreviousLevel.style.display = 'block';\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Mobile\r\n //let toggleMobileMenuClass = document.querySelectorAll('.sticky__toggle');\r\n\r\n //for (var j = 0, jen = toggleMobileMenuClass.length; j < jen; j++) {\r\n //toggleMobileMenuClass[j].addEventListener('click', self.toggleMobileMenu)\r\n //}\r\n }\r\n}\r\n\r\nexport default StickyLeftNavigation","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 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 VoyageMobileStyleHelper from './voyage-mobile-styles-helper';\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 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 LanguageSelectorHelper from './helpers/language-selector-helper';\r\nimport ElasticSearchHelper from './elastic-search-helper';\r\nimport Authors from './authors';\r\nimport populateAnchorMenuByTags from './voyage-anchor-menu-populator';\r\nimport voyageInsightsFilterTitle, { voyageInsights2FilterTitle } from './voyage-insight-filter-title';\r\nimport truncate from './helpers/truncate';\r\nimport StickyLeftNavigation from './sticky-left-navigation';\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 MainOne = {\r\n init: function() {\r\n /* Polyfills */\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 window.LanguageSelectorHelper = LanguageSelectorHelper;\r\n window.Authors = new Authors();\r\n\r\n /* Common tools */\r\n window.LazyImage = new LazyImage();\r\n\r\n /* Main components */\r\n window.ListsContent = new ListsContent();\r\n window.RelatedContent = RelatedContent;\r\n window.pubSubEvents = new PubSub();\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.VoyageMobileStyleHelper = VoyageMobileStyleHelper();\r\n window.VoyageGridItemClassUpdaterLazy = VoyageGridItemClassUpdater;\r\n window.Glide = Glide;\r\n window.DropdownLinks = DropdownLinks;\r\n window.removeExpandableListeners = removeExpandableListeners();\r\n window.addExpandableListeners= addExpandableListeners();\r\n window.addExpandableListenersLazy= 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.StickyLeftNavigation = StickyLeftNavigation;\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\nMainOne.init();","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","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 = 974;","// 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\t974: 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__(741); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","constructor","moveRelatedItemsToTheBody","window","ListsContent","styleLists","container","document","getElementById","related","childNodes","length","appendChild","classList","remove","onDocumentLoaded","callback","readyState","addEventListener","onResize","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","hideLeftColumnIfEmpty","leftSegments","getElementsByClassName","leftSegment","getElementsByTagName","style","display","documentElement","clientWidth","body","_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","querySelector","collectSlides","slides","wrapper","contains","_r","t","Translate","transform","TRANSFORMERS","mutate","transformer","mutator","translate3d","mozTransform","webkitTransform","getStartIndex","isOffset","getTravelDistance","travelDistance","isType","movement","after","startWidth","compose","duration","transition","enable","offset","resolve","token","split","join","addClass","add","removeClass","_v","setupSlides","setupWrapper","wrapperSize","offsetWidth","reductor","len","marginLeft","marginRight","_this","items","collect","_Glide$settings","peekIncrementer","cloneCount","round","append","reverse","prepend","max","cloneNode","_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","getAttribute","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","setAttribute","heading","activeHeadings","text","innerHTML","substring","min","lastIndexOf","links","clientHeight","init","dropdownNodes","dropdownNode","stopImmediatePropagation","keyCode","log","handleClick","expandable","closest","contentHeight","content","closedContentHeight","height","resizeAccordions","expandables","addExpandableListeners","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","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","getBrowserWidth","overLappedHeight","pageYOffset","bottom","setInpageNaviPosition","hash","voyageMenuWrapper","dynamicNaviHeight","scrollElement","scrollIntoView","DomHelper","static","isDOMElement","matchesSelector","msMatchesSelector","mozMatchesSelector","webkitMatchesSelector","oMatchesSelector","SVGElement","search","tagName","toUpperCase","ev","SVGElementInstance","correspondingUseElement","parent","removeElement","classname","testString","baseVal","RegExp","test","classnames","ArrayHelper","arr","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","LanguageSelectorHelper","culture","redirectUrlElement","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","toLowerCase","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","span_near","clauses","slop","in_order","clause","span_multi","prefilterDataParsed","prefilterData","prefilterDataAttr","checkForDate","prefilteredShouldQuery","isDate","filterIsAdded","isTaxonomy","current","string","removeFilters","currentMenuItem","allSections","filterItems","tag","menuItem","selected","selectedFilters","selectedFilter","dataTypes","itm","itemDataTags","tags","findDatatype","section","shouldWeHide","allCards","card","populateAnchorMenuByTags","arrayOfTags","arrayOfRemovableTags","NarrowTagFilters","tagsDataString","Set","prev","createElement","createAnchorMenuItem","setDefaultFilter","onClickFilter","addMenuItemClickEvents","topicsQs","toggleContainer","title","topicsTitle","filterTitle","titleSection","filterContainer","div","insertAdjacentHTML","closeFilter","voyageInsights2FilterTitle","topicsObject","topicsValue","closeFilterHtml","topics","themesTitlesElement","searchFilter","filterList","FIXED_CLASS_ACTIVE","observer","MutationObserver","mutationsList","bodyEl","observe","childList","subtree","stickySidebar","parentWidth","onScroll","aboveScroll","belowScroll","footerPosition","innerHeight","setFixed","setStatic","toggleMobileMenu","menu","nextElementSibling","toggle","listree","expandedClass","collapsedClass","subMenuTrigger","trigger","subMenuHeading","subMenuList","triggerParent","expandedMenuItem","expandedMenuItemParent","expandedItemChild","localName","subMenuHeadingChild","previousLevel","previousLevelSibling","previousElementSibling","previousPreviousLevel","IRScroll","jQuery","ir","$","irHTML","html","initWidth","duplicateContentTimes","createMarquee","resize","marquee","duplicated","pauseOnHover","delayBeforeStart","sliderHandler","sliders","x","lazyImages","lazyImageObserver","IntersectionObserver","entries","entry","isIntersecting","unobserve","lazyImage","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","single","gridSingle","double","cardDouble","multi","cardWrapper","visibleElements","addCssClasses","styleGridLists","cardGridWrapper","visibleGridElements","changeLayout","styleSingleLists","Node","ELEMENT_NODE","cur","RelatedContent","pubSubEvents","subscribers","publish","eventName","subscriberCallback","subscribe","dobriInnerTest","unsubscribe","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","VoyageMobileStyleHelper","removeExpandableListeners","addExpandableListenersLazy","handleUnorthodoxGridItems","unorthodoxGridColumn1","unorthodoxGridColumn2","anchors","a","classOn","anchorClass","anchor","anchorOn","pop","onloadInpageNaviPosition","voyageInsightsFilterTitle","StickyLeftNavigation","Tabs","tabs","isEditMode","tab","tabWrapperUL","tabContent","liElement","tabLi","accordion","currentActive","contentSwitcher","singleTabWrapper","onreadystatechange","WizardSelector","timer","dummySrc","fixRespimg","findPictureImgs","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","input","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","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":""}