{"version":3,"file":"main-one.legacy.js","mappings":"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","sources":["webpack://frontend-starter/webpack/runtime/chunk loaded","webpack://frontend-starter/./src/scripts/iePolyfills.js","webpack://frontend-starter/./src/scripts/lazy-images.js","webpack://frontend-starter/./src/scripts/content-hub.js","webpack://frontend-starter/./src/scripts/related-content.js","webpack://frontend-starter/./src/scripts/filter-list.js","webpack://frontend-starter/./src/scripts/url-handler.js","webpack://frontend-starter/./src/scripts/lists-content.js","webpack://frontend-starter/./src/scripts/grid-lists-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/authors.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/tabs.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/./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};","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","\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 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","\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","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","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","\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","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","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\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","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;","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();","/*! 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","IePolyfills","this","init","toStr","isCallable","maxSafeInteger","toLength","undefined","window","Object","assign","document","documentMode","picturefill","objectFitImages","NodeList","prototype","forEach","Array","from","toString","fn","call","Math","pow","value","len","number","Number","isNaN","isFinite","floor","abs","toInteger","min","max","arrayLike","C","items","TypeError","T","mapFn","arguments","length","kValue","A","k","observer","images","querySelectorAll","backgroundImages","IntersectionObserver","entries","entry","intersectionRatio","unobserve","target","dataset","background","preloadBackgroundImage","preloadImage","rootMargin","threshold","image","observe","backgroundImage","onbeforeprint","event","element","src","parentNode","classList","remove","srcset","style","subscribers","eventName","data","subscriberCallback","callback","dobriInnerTest","push","unsubscribe","splice","index","ListsContent","styleLists","container","getElementById","related","childNodes","appendChild","dataTaxon","pubSubEvents","subscribe","params","hasSearchUrl","filterListsByIds","filterListsByCategories","getFilteredIds","then","ids","foundLists","filter","item","hubId","some","id","toLowerCase","elm","showList","listsToHide","indexOf","taxons","el","hideList","list","hasOwnProperty","ObjectHelper","isArray","taxaParams","param","taxonName","taxas","slice","every","foundTaxa","tx","formattedParams","map","i","replace","val","includes","VoyageGridItemClassUpdaterLazy","querySelector","hideDuplicateElements","elId","getAttribute","listObj","JSON","parse","searchUrl","contentHubResultServiceUrl","console","log","listEl","contains","add","links","href","obj","ElasticSearchHelper","buildFilterListRequestBody","Promise","resolve","reject","APIHelper","post","url","response","hits","_id","urlArr","dataAsQueryString","parseData","self","history","pushState","location","pathname","trim","join","search","substring","split","str","tmp","values","setTimeout","publish","result","searchFields","searchValue","fieldName","encodeURI","classes","single","gridSingle","double","cardDouble","multi","cardWrapper","visibleElements","children","n","addCssClasses","cardGridWrapper","visibleGridElements","changeLayout","nodeType","Node","ELEMENT_NODE","className","reduce","cur","next","styleGridLists","onDocumentLoaded","readyState","addEventListener","onResize","getNumberOfColumns","innerWidth","voyageGridItemClassUpdater","grids","gridNode","gridItems","g","gridItem","numberOfGridItems","numberOfColumns","remainder","getGridItemClassName","voyageInsightsMostRecentGridsItemClassUpdater","everyThird","evenRow","ceil","getInsightsMostRecentGridItemClassName","voyageSimpleGridItemClassUpdater","simpleGrids","addEventListeners","voyageInsightsMostRecentGrids","hideLeftColumnIfEmpty","leftSegments","getElementsByClassName","leftSegment","getElementsByTagName","display","documentElement","clientWidth","body","_typeof","Symbol","iterator","constructor","instance","Constructor","props","descriptor","enumerable","configurable","writable","defineProperty","key","protoProps","staticProps","_getPrototypeOf","o","setPrototypeOf","getPrototypeOf","__proto__","_setPrototypeOf","p","_possibleConstructorReturn","ReferenceError","_assertThisInitialized","_superPropBase","object","property","_get","Reflect","get","receiver","base","desc","getOwnPropertyDescriptor","apply","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","swipeable","dragging","ltr","rtl","slider","carousel","slide","clone","active","arrow","disabled","nav","warn","msg","error","concat","toInt","parseInt","isString","isObject","isFunction","isUndefined","mount","glide","extensions","events","components","name","_name","prop","definition","mergeOptions","settings","options","EventsBus","hop","handler","on","context","emit","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","previous","later","leading","throttled","at","remaining","clearTimeout","trailing","cancel","MARGIN_TYPE","siblings","node","firstChild","matched","nextSibling","exist","HTMLElement","toArray","nodeList","TRACK_SELECTOR","EventsBinder","listeners","closure","capture","removeEventListener","VALID_DIRECTIONS","FLIPED_MOVEMENTS","Rtl","Components","modify","translate","Direction","is","Gap","multiplier","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","r","COMPONENTS","Html","Events","root","track","collectSlides","slides","wrapper","_r","t","Translate","transform","TRANSFORMERS","mutate","transformer","mutator","translate3d","mozTransform","webkitTransform","getStartIndex","isOffset","getTravelDistance","travelDistance","isType","movement","after","startWidth","compose","duration","transition","enable","offset","token","addClass","removeClass","_v","setupSlides","setupWrapper","wrapperSize","offsetWidth","reductor","marginLeft","marginRight","_this","collect","_Glide$settings","peekIncrementer","cloneCount","round","append","reverse","prepend","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","powEY","swipeHypotenuse","sqrt","swipeCathetus","asin","PI","stopPropagation","parseFloat","end","_Glide$settings2","swipeDistance","swipeDeg","unbindSwipeMove","unbindSwipeEnd","_Glide$settings3","unbindSwipeStart","_this2","_this3","changedTouches","Images","dragstart","preventDefault","Anchors","detached","prevented","_a","click","detach","draggable","attach","Controls","_n","_arrowControls","addBindings","setActive","removeActive","controls","setArrowState","resetArrowState","disableArrow","_len","lists","_key","_len2","_key2","removeBindings","elements","currentTarget","Keyboard","press","code","Autoplay","setInterval","stop","time","clearInterval","Breakpoints","match","matchMedia","point","matches","_Core","subClass","superClass","create","_inherits","Derived","hasNativeReflectConstruct","_super","construct","sham","Proxy","Boolean","valueOf","_isNativeReflectConstruct","Super","NewTarget","OPENED_CLASS","linksContainer","openedDropdown","equal","isEqualNode","setAttribute","heading","activeHeadings","text","innerHTML","lastIndexOf","clientHeight","dropdownNodes","dropdownNode","openHandler","stopImmediatePropagation","keyCode","handleClick","expandable","closest","contentHeight","content","closedContentHeight","height","resizeAccordions","expandables","addExpandableListeners","carouselClasses","voyageCarouselHandler","carousels","getPrevChild","getChildren","getNextChild","setClasses","activeItem","setItem","child","mediaId","mediaid","mediaElement","media","spinnerElement","spinner","addEventHandldersToclone","link","openAccordionPopup","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","voyageMenuHandler","inpageNaviWrapper","voyageMenuWrapperY","calculateOverlappedPosition","overLappedTarget","getBrowserWidth","overLappedHeight","pageYOffset","bottom","setInpageNaviPosition","hash","voyageMenuWrapper","dynamicNaviHeight","scrollElement","scrollIntoView","DomHelper","isDOMElement","matchesSelector","msMatchesSelector","mozMatchesSelector","webkitMatchesSelector","oMatchesSelector","SVGElement","tagName","toUpperCase","ev","SVGElementInstance","correspondingUseElement","parent","removeElement","classname","testString","baseVal","RegExp","test","classnames","ArrayHelper","arr","compareFunc","removedItems","IconHelper","iconId","cssClasses","fill","GUIDHelper","guidGenerator","random","date","toLocaleString","lang","day","month","year","dateToConvert","theElement","localDate","getDate","getMonth","getFullYear","QueryStringHelper","queryParams","getQueryStringHashFromUrl","setUrlQueryString","queryString","toHash","qs","fromHash","protocol","host","fakeNavigation","insertSlashAfterPath","parts","retval","queryHash","encodeURIComponent","btoa","qString","trimStart","decodeURIComponent","c","charAt","urlParams","responseType","send","method","okResult","query","toQueryString","callApi","xhr","XMLHttpRequest","onload","responseText","callReject","onerror","onabort","open","setRequestHeader","stringify","isConnectionError","tryGetResponse","getQueryStringParameter","DeviceHelper","navigator","userAgent","LanguageSelectorHelper","culture","redirectUrlElement","buildContentHubQuery","addFilterQueryToElasticSearchBody","contentHubSkipIDs","bool","prefilterQuery","getPrefilterQuery","addPrefilterQuery","page","size","numberOfItems","filterYearOnly","onlyFilteredByYear","NewsReleaseDate","newsQueryResult","buildNewsQuery","idsObj","hasYearSelected","DatePublished","must","addShouldExpression","mustMatchLanguage","defaultMust","dateFieldName","keyworSearchConditions","dateConditions","idx","array","range","gte","lte","searchConditions","getKeywordSearchConditions","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","Authors","authorsPlaceholder","authorsList","showAuthors","outerHTML","authors","addMenuItemClickEvents","menuItem","selected","tag","currentMenuItem","allSections","filterItems","selectedFilters","selectedFilter","dataTypes","itm","itemDataTags","tags","findDatatype","section","shouldWeHide","allCards","card","removeFilters","setDefaultFilter","onClickFilter","populateAnchorMenuByTags","arrayOfTags","arrayOfRemovableTags","anchorMenuInner","NarrowTagFilters","tagsDataString","Set","prev","createElement","createAnchorMenuItem","topicsQs","toggleContainer","title","topicsTitle","filterTitle","titleSection","filterContainer","div","insertAdjacentHTML","closeFilter","voyageInsights2FilterTitle","topicsObject","topicsValue","closeFilterHtml","topics","themesTitlesElement","searchFilter","filterList","FIXED_CLASS_ACTIVE","MutationObserver","mutationsList","bodyEl","childList","subtree","parentWidth","onScroll","footerPosition","innerHeight","aboveScroll","belowScroll","setFixed","setStatic","menu","nextElementSibling","toggle","expandedClass","collapsedClass","subMenuTrigger","trigger","subMenuHeading","subMenuList","triggerParent","expandedMenuItem","expandedMenuItemParent","expandedItemChild","localName","subMenuHeadingChild","listree","stickySidebar","previousLevel","previousLevelSibling","previousElementSibling","previousPreviousLevel","IRScroll","jQuery","ir","$","irHTML","html","initWidth","duplicateContentTimes","createMarquee","resize","marquee","duplicated","pauseOnHover","delayBeforeStart","Tabs","tabs","isEditMode","tab","tabWrapperUL","tabContent","liElement","isMobilebrowser","tabLi","accordion","currentActive","contentSwitcher","singleTabWrapper","sliderHandler","sliders","x","lazyImages","lazyImageObserver","isIntersecting","lazyImage","wizardSelectorContainer","gradientContainer","titles","attachEvents","screen","createMobileSelector","matchMediaMobile","matchMediaChanged","addListener","openedPanels","panel","openedPanel","activeheading","level","mobileContainer","mobileTitles","arrows","wizardButtonMobile","mobileDiv","levelHeadings","levelContainers","firstLevelTitles","counter","secondLevelContainers","secondCounter","thirdCounter","lastCounter","thirdLevelRow","attachMobileEvents","dropdownLinks","DropdownLinks","voyageToughtLeaderCounterAnimation","qSelector","thousandSeparator","startTimestamp","timestamp","progress","formatNumber","requestAnimationFrame","num","DateTimeHelper","LazyImage","RelatedContent","PubSub","FilterList","UrlHandler","GridListsContent","VoyageGridItemClassUpdater","VoyageMobileStyleHelper","removeExpandableListeners","addExpandableListenersLazy","handleUnorthodoxGridItems","unorthodoxGridColumn1","unorthodoxGridColumn2","anchors","a","classOn","anchorClass","anchor","anchorOn","pop","onloadInpageNaviPosition","voyageInsightsFilterTitle","StickyLeftNavigation","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":""}