{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///../node_modules/@babel/runtime/helpers/arrayLikeToArray.js","webpack:///../node_modules/@babel/runtime/helpers/arrayWithHoles.js","webpack:///../node_modules/@babel/runtime/helpers/assertThisInitialized.js","webpack:///../node_modules/@babel/runtime/helpers/classCallCheck.js","webpack:///../node_modules/@babel/runtime/helpers/construct.js","webpack:///../node_modules/@babel/runtime/helpers/createClass.js","webpack:///../node_modules/@babel/runtime/helpers/defineProperty.js","webpack:///../node_modules/@babel/runtime/helpers/getPrototypeOf.js","webpack:///../node_modules/@babel/runtime/helpers/inherits.js","webpack:///../node_modules/@babel/runtime/helpers/isNativeFunction.js","webpack:///../node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js","webpack:///../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","webpack:///../node_modules/@babel/runtime/helpers/nonIterableRest.js","webpack:///../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","webpack:///../node_modules/@babel/runtime/helpers/setPrototypeOf.js","webpack:///../node_modules/@babel/runtime/helpers/slicedToArray.js","webpack:///../node_modules/@babel/runtime/helpers/typeof.js","webpack:///../node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","webpack:///../node_modules/@babel/runtime/helpers/wrapNativeSuper.js","webpack:///./cartridges/org_newbalance/cartridge/client/default/js/staffstart.js","webpack:///./cartridges/org_newbalance/cartridge/client/default/js/staffstart/staffstartCache.js","webpack:///./cartridges/org_newbalance/cartridge/client/default/js/staffstart/staffstartDetail.js","webpack:///./cartridges/org_newbalance/cartridge/client/default/js/staffstart/staffstartFavoritesButton.js","webpack:///./cartridges/org_newbalance/cartridge/client/default/js/staffstart/staffstartFavoritesPage.js","webpack:///./cartridges/org_newbalance/cartridge/client/default/js/staffstart/staffstartFetcher.js","webpack:///./cartridges/org_newbalance/cartridge/client/default/js/staffstart/staffstartLazyLoader.js","webpack:///./cartridges/org_newbalance/cartridge/client/default/js/staffstart/staffstartLog.js","webpack:///./cartridges/org_newbalance/cartridge/client/default/js/staffstart/staffstartMain.js","webpack:///./cartridges/org_newbalance/cartridge/client/default/js/staffstart/staffstartMainImageCarousel.js","webpack:///./cartridges/org_newbalance/cartridge/client/default/js/staffstart/staffstartPagination.js","webpack:///./cartridges/org_newbalance/cartridge/client/default/js/staffstart/staffstartProductDetail.js","webpack:///./cartridges/org_newbalance/cartridge/client/default/js/staffstart/staffstartRefineBar.js","webpack:///./cartridges/org_newbalance/cartridge/client/default/js/staffstart/staffstartSorting.js","webpack:///./cartridges/org_newbalance/cartridge/client/default/js/staffstart/staffstartTabs.js","webpack:///./cartridges/org_newbalance/cartridge/client/default/js/staffstart/staffstartUtils.js","webpack:///./cartridges/org_newbalance/cartridge/client/default/js/util/debounce.js","webpack:///./cartridges/org_newbalance/cartridge/client/default/js/util/safeParse.js","webpack:///./cartridges/org_newbalance/cartridge/client/default/js/util/url.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","arr","len","length","arr2","Array","isArray","self","ReferenceError","instance","Constructor","TypeError","setPrototypeOf","require","isNativeReflectConstruct","_construct","Parent","args","Class","Reflect","construct","a","push","apply","Function","arguments","_defineProperties","target","props","descriptor","configurable","writable","protoProps","staticProps","obj","_getPrototypeOf","getPrototypeOf","__proto__","subClass","superClass","constructor","fn","toString","indexOf","sham","Proxy","Date","e","iterator","_arr","_n","_d","_e","undefined","_s","_i","next","done","err","_typeof","assertThisInitialized","_setPrototypeOf","arrayWithHoles","iterableToArrayLimit","unsupportedIterableToArray","nonIterableRest","arrayLikeToArray","minLen","slice","from","test","isNativeFunction","_wrapNativeSuper","_cache","Map","has","set","Wrapper","this","components","productDetail","lazyLoader","mainImageCarousel","refineBar","pagination","sorting","tabs","detail","favoritesButton","favoritesPage","main","window","customElements","keys","component","define","CACHE","setInterval","staleBefore","now","staleEntries","entries","filter","entry","time","getEntry","cacheEntry","data","setEntry","StaffstartFetcher","cache","ATTRIBUTES","StaffstartDetail","template","baseUrl","detailIdParam","detailId","document","getElementById","getAttribute","setAttribute","clearContent","detailPageUrl","includes","encodeURIComponent","join","cachedData","innerHTML","registerView","appendChild","content","cloneNode","fetchData","pageUrl","ajaxUrl","showSpinner","staffStartRegisterStyleView","hasChildNodes","removeChild","lastChild","logMessage","StaffstartFavoritesButton","itemType","itemId","itemIsFavorite","addRemoveUrl","inFavoritesUrl","mutating","clickHandler","handleClick","checkStatus","setListeners","userStatus","getUserStatus","error","authenticated","addOrRemoveFavorite","loadLoginDialog","url","fetch","method","credentials","then","response","json","handleCheckData","catch","handleCheckError","isFavorite","Boolean","favorite","setStatus","checkForStoredStatus","storedData","getStoredItemDetails","timestamp","action","body","JSON","stringify","handleFavoriteMutation","handleFavoriteMutationError","postData","receivedData","success","Error","useElement","querySelector","container","loginFormContainer","dataset","storeItemDetails","$","modal","find","spinner","start","location","href","storeData","sessionStorage","setItem","getItem","parse","uncachedData","user","activate","button","type","removeUrl","changeHandler","handleChange","event","closest","id","preventDefault","removeFavorite","pathname","page","item","setSpinner","reload","callback","options","readyCallback","fetchFromCache","handleResponse","handleData","handleDataError","status","text","console","showSpinnerWhenCached","timeout","setTimeout","stop","HTMLElement","StaffstartLazyLoader","observer","setObserver","unobserve","isIntersecting","classList","add","handleFetchedData","parentNode","div","createElement","insertBefore","firstChild","remove","IntersectionObserver","handleIntersection","rootMargin","observe","logAll","localStorage","logItem","messages","isOpeningNewTab","updateUrl","getSearchParams","safeJSONParse","ELEMENTS","refineBarContainerMobile","modalBackground","grid","multiple","selector","totalItems","listContainer","detailContainer","EVENT_TYPES","StaffstartMain","elements","popStateTimer","isDetailActive","resizeHandler","handleResize","popStateHandler","handlePopState","getElements","setInitCache","contains","setFiltersOpenState","clickElement","clickType","goToDetail","goToList","clearTimeout","handlePopStateDetail","search","initPopStateRequest","searchParams","setDetailActive","changedParams","getChangedParams","urls","createUrls","handleDataReady","properties","extractProperties","setSelectedFilters","selectedFilters","setSortOrder","sortOrder","textContent","String","setPagination","gridHTML","scrollTo","isListUrl","preloadNextPage","currentUrl","URL","delete","spaUrl","isDetailUrl","setDetailId","nextPage","currentPageNumber","lastPage","lastPageNumber","setOpen","sort","filterType","filterValue","getParameters","reduce","result","urlKeys","currentParams","adjustedParams","assign","queryParameters","ajaxParameters","attribute","querySelectorAll","html","outerHTML","sourceContainer","paginationValue","selectedFiltersValue","totalItemsValue","parseInt","NaN","isNaN","debounce","mainContainer","mainItems","thumbsContainer","thumbs","indicatorsContainer","indicators","SCROLL_TYPES","StaffstartMainImageCarousel","scrollType","windowWidth","scrollHandler","handleScroll","scrollEndHandler","handleScrollEnd","innerWidth","goToSlide","activeItem","findViewPortSlide","activeIndex","index","setActiveIndicator","Math","round","scrollLeft","getBoundingClientRect","width","newWindowWidth","element","mainRect","mainLeft","left","mainWidth","mainMiddle","StaffstartPagination","addEventListener","removeEventListener","buttonClass","prevLabel","nextLabel","previousPageNumber","createButton","className","label","pages","pageNumber","active","nextPageNumber","pageElement","eventType","trim","dispatchEvent","CustomEvent","bubbles","StaffstartProductDetail","productCode","attributeSelectHandler","handleAttributeSelect","getProductCode","product","children","styleAttribute","variationAttributes","attributeId","values","selectedStyle","selected","styleID","styleId","styleIdAdapted","replace","fullMatch","numbers","letters","StaffstartRefineBar","items","useType","selectedFiltersOfType","setSelectedFiltersOfType","filterContainers","setSelectedFilterButtons","clickTypeElement","handleFilterOpenCloseClick","handleFilterClick","handleRelaxClick","handleRelaxAllClick","isOpen","clickInfo","getClickInfo","isActive","dispatchChangeEvent","buttons","some","selectedItems","selectedFiltersContainer","selectedFilter","buttonTemplate","firstElementChild","selectedFiltersMainContainer","filterContainerElements","hasAttribute","StaffstartSorting","buttonSortOrder","sortOrderButton","StaffstartTabs","contentContainers","parameterPrefix","offsetTop","getOffset","fillContainer","selectTab","offset","offsetParent","typeElement","activeType","activeContentContainer","getTabIndex","tab","contentContainer","activeTab","nextActiveTab","lastTab","fetchContainerData","state","urlSet","history","pushState","title","isCtrlPressed","ctrlKey","isMetaKeyPressed","metaKey","delay","timeoutID","that","output","safeDecodeUriComponent","decodeURIComponent","queryMatch","match","split","part","keyValue"],"mappings":"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","file":"staffstart.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./cartridges/org_newbalance/cartridge/client/default/js/staffstart.js\");\n","function _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n\n  for (var i = 0, arr2 = new Array(len); i < len; i++) {\n    arr2[i] = arr[i];\n  }\n\n  return arr2;\n}\n\nmodule.exports = _arrayLikeToArray;","function _arrayWithHoles(arr) {\n  if (Array.isArray(arr)) return arr;\n}\n\nmodule.exports = _arrayWithHoles;","function _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\nmodule.exports = _assertThisInitialized;","function _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nmodule.exports = _classCallCheck;","var setPrototypeOf = require(\"./setPrototypeOf\");\n\nvar isNativeReflectConstruct = require(\"./isNativeReflectConstruct\");\n\nfunction _construct(Parent, args, Class) {\n  if (isNativeReflectConstruct()) {\n    module.exports = _construct = Reflect.construct;\n  } else {\n    module.exports = _construct = function _construct(Parent, args, Class) {\n      var a = [null];\n      a.push.apply(a, args);\n      var Constructor = Function.bind.apply(Parent, a);\n      var instance = new Constructor();\n      if (Class) setPrototypeOf(instance, Class.prototype);\n      return instance;\n    };\n  }\n\n  return _construct.apply(null, arguments);\n}\n\nmodule.exports = _construct;","function _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\nmodule.exports = _createClass;","function _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}\n\nmodule.exports = _defineProperty;","function _getPrototypeOf(o) {\n  module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n    return o.__proto__ || Object.getPrototypeOf(o);\n  };\n  return _getPrototypeOf(o);\n}\n\nmodule.exports = _getPrototypeOf;","var setPrototypeOf = require(\"./setPrototypeOf\");\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\nmodule.exports = _inherits;","function _isNativeFunction(fn) {\n  return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\n\nmodule.exports = _isNativeFunction;","function _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    Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\nmodule.exports = _isNativeReflectConstruct;","function _iterableToArrayLimit(arr, i) {\n  if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n  var _arr = [];\n  var _n = true;\n  var _d = false;\n  var _e = undefined;\n\n  try {\n    for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n      _arr.push(_s.value);\n\n      if (i && _arr.length === i) break;\n    }\n  } catch (err) {\n    _d = true;\n    _e = err;\n  } finally {\n    try {\n      if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n    } finally {\n      if (_d) throw _e;\n    }\n  }\n\n  return _arr;\n}\n\nmodule.exports = _iterableToArrayLimit;","function _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableRest;","var _typeof = require(\"../helpers/typeof\");\n\nvar assertThisInitialized = require(\"./assertThisInitialized\");\n\nfunction _possibleConstructorReturn(self, call) {\n  if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n    return call;\n  }\n\n  return assertThisInitialized(self);\n}\n\nmodule.exports = _possibleConstructorReturn;","function _setPrototypeOf(o, p) {\n  module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n\n  return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf;","var arrayWithHoles = require(\"./arrayWithHoles\");\n\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray\");\n\nvar nonIterableRest = require(\"./nonIterableRest\");\n\nfunction _slicedToArray(arr, i) {\n  return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}\n\nmodule.exports = _slicedToArray;","function _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    module.exports = _typeof = function _typeof(obj) {\n      return typeof obj;\n    };\n  } else {\n    module.exports = _typeof = function _typeof(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\nmodule.exports = _typeof;","var arrayLikeToArray = require(\"./arrayLikeToArray\");\n\nfunction _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\n\nmodule.exports = _unsupportedIterableToArray;","var getPrototypeOf = require(\"./getPrototypeOf\");\n\nvar setPrototypeOf = require(\"./setPrototypeOf\");\n\nvar isNativeFunction = require(\"./isNativeFunction\");\n\nvar construct = require(\"./construct\");\n\nfunction _wrapNativeSuper(Class) {\n  var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n  module.exports = _wrapNativeSuper = function _wrapNativeSuper(Class) {\n    if (Class === null || !isNativeFunction(Class)) return Class;\n\n    if (typeof Class !== \"function\") {\n      throw new TypeError(\"Super expression must either be null or a function\");\n    }\n\n    if (typeof _cache !== \"undefined\") {\n      if (_cache.has(Class)) return _cache.get(Class);\n\n      _cache.set(Class, Wrapper);\n    }\n\n    function Wrapper() {\n      return construct(Class, arguments, getPrototypeOf(this).constructor);\n    }\n\n    Wrapper.prototype = Object.create(Class.prototype, {\n      constructor: {\n        value: Wrapper,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n    return setPrototypeOf(Wrapper, Class);\n  };\n\n  return _wrapNativeSuper(Class);\n}\n\nmodule.exports = _wrapNativeSuper;","'use strict';\n\n(function () {\n    // Components need to supply name and component property.\n    // name: name of web component.\n    // component: web component.\n    const components = {\n        productDetail: require('./staffstart/staffstartProductDetail'),\n        lazyLoader: require('./staffstart/staffstartLazyLoader'),\n        mainImageCarousel: require('./staffstart/staffstartMainImageCarousel'),\n        refineBar: require('./staffstart/staffstartRefineBar'),\n        pagination: require('./staffstart/staffstartPagination'),\n        sorting: require('./staffstart/staffstartSorting'),\n        tabs: require('./staffstart/staffstartTabs'),\n        detail: require('./staffstart/staffstartDetail'),\n        favoritesButton: require('./staffstart/staffstartFavoritesButton'),\n        favoritesPage: require('./staffstart/staffstartFavoritesPage'),\n        main: require('./staffstart/staffstartMain')\n    };\n\n    if (!window.customElements) {\n        return;\n    }\n\n    for (let i = 0, keys = Object.keys(components); i < keys.length; i += 1) {\n        const key = keys[i];\n        const { name, component } = components[key];\n\n        if (!window.customElements.get(name)) {\n            window.customElements.define(name, component);\n        }\n    }\n}());\n","'use strict';\n\nconst CACHE = {};\nconst MAX_CACHE_TIME = (6 * 60 * 1000);\n\n/**\n * Get cache entry.\n * @param {string} key - Cache key.\n * @returns {*|null} - Cached data or null.\n */\nfunction getEntry(key) {\n    const cacheEntry = CACHE[key] || null;\n\n    if (!cacheEntry) {\n        return null;\n    }\n\n    if (Date.now() > cacheEntry.time + MAX_CACHE_TIME) {\n        delete CACHE[key];\n        return null;\n    }\n\n    return CACHE[key].data;\n}\n\n/**\n * Cache an entry.\n * @param {string} key - Cache key.\n * @param {*} data - Data to cache.\n */\nfunction setEntry(key, data) {\n    CACHE[key] = {\n        data,\n        time: Date.now()\n    };\n}\n\n/**\n * Delete stale cache entries.\n */\nfunction collectGarbage() {\n    const staleBefore = Date.now() - MAX_CACHE_TIME;\n    const staleEntries = Object.entries(CACHE).filter(entry => entry[1].time < staleBefore);\n\n    for (let i = 0; i < staleEntries.length; i += 1) {\n        const key = staleEntries[i][0];\n        delete CACHE[key];\n    }\n}\n\n// Delete stale cache entries once per minute.\nsetInterval(collectGarbage, 60 * 1000);\n\nmodule.exports = {\n    getEntry,\n    setEntry\n};\n","'use strict';\n\nconst { StaffstartFetcher } = require('./staffstartFetcher');\nconst cache = require('./staffstartCache');\n\nconst ELEMENT_NAME = 'staffstart-detail';\n\nconst ATTRIBUTES = {\n    dataBaseUrl: 'data-detail-base-url',\n    detailIdParam: 'data-detail-id-param',\n    detailPageId: 'data-detail-id',\n    detailType: 'data-detail-type'\n};\n\nclass StaffstartDetail extends StaffstartFetcher {\n    // Lifecycle methods.\n\n    constructor() {\n        super();\n\n        this.template = null;\n        this.baseUrl = null;\n        this.detailIdParam = null;\n        this.detailId = null;\n    }\n\n    connectedCallback() {\n        this.template = document.getElementById('detail-skeleton');\n        this.baseUrl = this.getAttribute(ATTRIBUTES.dataBaseUrl);\n        this.detailIdParam = this.getAttribute(ATTRIBUTES.detailIdParam);\n        this.detailId = this.getAttribute(ATTRIBUTES.detailPageId);\n    }\n\n    // Public.\n\n    setDetailId(detailId) {\n        if (detailId === this.detailId) {\n            return;\n        }\n\n        // Set detail ID.\n        this.detailId = detailId;\n        this.setAttribute(ATTRIBUTES.detailPageId, detailId);\n\n        // Clear content.\n        this.clearContent();\n\n        // If detailId is empty, exit early.\n        if (!detailId) {\n            return;\n        }\n\n        // Try to get entry from cache.\n        const detailPageUrl = [\n            this.baseUrl,\n            this.baseUrl.includes('?') ? '&' : '?',\n            this.detailIdParam,\n            '=',\n            encodeURIComponent(detailId)\n        ].join('');\n\n        const cachedData = cache.getEntry(detailPageUrl);\n\n        if (cachedData) {\n            this.innerHTML = cachedData;\n            this.registerView(detailId);\n            return;\n        }\n\n        // Render skeleton.\n        this.appendChild(this.template.content.cloneNode(true));\n\n        // Fetch content.\n        const callback = (data) => {\n            // No longer relevant.\n            if (detailId !== this.detailId) {\n                return;\n            }\n\n            this.clearContent();\n            this.innerHTML = data;\n            this.registerView(detailId);\n        };\n\n        this.fetchData(\n            { pageUrl: detailPageUrl, ajaxUrl: detailPageUrl },\n            callback,\n            { showSpinner: false }\n        );\n    }\n\n    // Helper methods.\n\n    registerView(detailId) {\n        const type = this.getAttribute(ATTRIBUTES.detailType);\n\n        if (type === 'style' && typeof window.staffStartRegisterStyleView === 'function') {\n            window.staffStartRegisterStyleView(detailId);\n        }\n    }\n\n    clearContent() {\n        while (this.hasChildNodes()) {\n            this.removeChild(this.lastChild);\n        }\n    }\n}\n\nmodule.exports = {\n    name: ELEMENT_NAME,\n    component: StaffstartDetail\n};\n","'use strict';\n\nconst { StaffstartFetcher } = require('./staffstartFetcher');\nconst { logMessage } = require('./staffstartLog');\n\nconst ELEMENT_NAME = 'staffstart-favoritebutton';\n\nclass StaffstartFavoritesButton extends StaffstartFetcher {\n    // Lifecycle methods.\n\n    constructor() {\n        super();\n\n        this.itemType = null;\n        this.itemId = null;\n        this.itemIsFavorite = null;\n\n        this.addRemoveUrl = null;\n        this.inFavoritesUrl = null;\n\n        this.mutating = false;\n\n        this.clickHandler = this.handleClick.bind(this);\n    }\n\n    connectedCallback() {\n        this.itemType = this.getAttribute('type');\n        this.itemId = this.getAttribute('item-id');\n\n        this.addRemoveUrl = this.getAttribute('add-remove-url');\n        this.inFavoritesUrl = this.getAttribute('is-favorite-url');\n\n        if (this.itemType && this.itemId) {\n            this.checkStatus();\n        }\n    }\n\n    disconnectedCallback() {\n        this.setListeners(false);\n    }\n\n    // Event handling.\n\n    handleClick() {\n        const userStatus = this.getUserStatus();\n\n        if (userStatus.error) {\n            logMessage('error', userStatus.error);\n            return;\n        }\n\n        if (!userStatus.authenticated) {\n            this.loadLoginDialog();\n        } else {\n            this.addOrRemoveFavorite();\n        }\n    }\n\n    // Check favorite status.\n\n    checkStatus() {\n        const userStatus = this.getUserStatus();\n\n        // No need to check when user is not logged in.\n        if (!userStatus.authenticated) {\n            this.setListeners(true);\n            return;\n        }\n\n        // Fetch status data.\n        const url = [\n            this.inFavoritesUrl,\n            (this.inFavoritesUrl.includes('?') ? '&' : '?'),\n            'itemType=' + encodeURIComponent(this.itemType),\n            '&itemId=' + encodeURIComponent(this.itemId)\n        ].join('');\n\n        window.fetch(url, {\n            method: 'GET',\n            credentials: 'include'\n        })\n            .then(response => response.json())\n            .then(this.handleCheckData.bind(this))\n            .catch(this.handleCheckError.bind(this));\n    }\n\n    handleCheckData(data) {\n        logMessage('log', 'is favorite data: ', data);\n\n        const isFavorite = Boolean(data && data.favorite);\n\n        this.setListeners(true);\n        this.setStatus(isFavorite);\n\n        if (!isFavorite) {\n            this.checkForStoredStatus();\n        }\n    }\n\n    // eslint-disable-next-line class-methods-use-this\n    handleCheckError(error) {\n        logMessage('error', 'favorite check error: ', error);\n\n        this.setListeners(true);\n    }\n\n    checkForStoredStatus() {\n        const storedData = this.getStoredItemDetails();\n\n        if (!storedData) {\n            return;\n        }\n\n        if (storedData.itemId !== this.itemId || storedData.itemType !== this.itemType) {\n            return;\n        }\n\n        // Ignore when time between storing and reading is longer than 5 minutes.\n        if (storedData.timestamp > (Date.now() - (5 * 60 * 1000))) {\n            logMessage('log', 'add to favorites after login');\n            this.addOrRemoveFavorite();\n        }\n    }\n\n    // Adding and removing items from favorites.\n\n    addOrRemoveFavorite() {\n        if (this.mutating) {\n            return;\n        }\n\n        this.mutating = true;\n\n        const url = this.addRemoveUrl;\n        const data = {\n            itemType: this.itemType,\n            itemId: this.itemId,\n            action: this.itemIsFavorite ? 'remove' : 'add'\n        };\n\n        logMessage('log', 'favorite posted data: ', data);\n\n        window.fetch(url, {\n            method: 'POST',\n            credentials: 'include',\n            body: JSON.stringify(data)\n        })\n            .then(response => response.json())\n            .then(this.handleFavoriteMutation.bind(this, data))\n            .catch(this.handleFavoriteMutationError.bind(this));\n    }\n\n    handleFavoriteMutation(postData, receivedData) {\n        this.mutating = false;\n\n        logMessage('log', 'favorite received data: ', receivedData);\n\n        const data = receivedData || {};\n        if (!data.success || data.error) {\n            throw new Error(data.error || 'No success');\n        }\n\n        this.setStatus(postData.action === 'add');\n    }\n\n    handleFavoriteMutationError(error) {\n        this.mutating = false;\n        logMessage('error', 'favorites mutation error: ', error);\n    }\n\n    // Assistants.\n\n    setStatus(isFavorite) {\n        this.itemIsFavorite = isFavorite;\n\n        const useElement = this.querySelector('use');\n        if (useElement) {\n            useElement.setAttribute('xlink:href', this.itemIsFavorite ? '#wishlist-active' : '#wishlist-inactive');\n        }\n    }\n\n    loadLoginDialog() {\n        var container = document.querySelector('#staffstart-login-modal');\n        const loginFormContainer = container ? container.querySelector('.js-load-url') : null;\n        const baseUrl = loginFormContainer ? loginFormContainer.dataset.url : '';\n\n        if (!container || !loginFormContainer || !baseUrl) {\n            return;\n        }\n\n        this.storeItemDetails();\n\n        $(container).modal('show')\n            .find('.modal-body')\n            .spinner()\n            .start();\n\n        const url = baseUrl + (baseUrl.includes('?') ? '&' : '?') + 'targetUrl=' + window.encodeURIComponent(window.location.href);\n        const callback = function (data) {\n            loginFormContainer.innerHTML = data;\n        };\n\n        this.fetchData({ ajaxUrl: url, pageUrl: url }, callback, {});\n    }\n\n    storeItemDetails() {\n        const storeData = {\n            itemId: this.itemId,\n            itemType: this.itemType,\n            timestamp: Date.now()\n        };\n\n        try {\n            window.sessionStorage.setItem('staffstartFutureFavorite', JSON.stringify(storeData));\n        } catch (e) {\n            logMessage('warn', 'could not store favorite details');\n        }\n    }\n\n    // eslint-disable-next-line class-methods-use-this\n    getStoredItemDetails() {\n        try {\n            const data = window.sessionStorage.getItem('staffstartFutureFavorite');\n            return data ? JSON.parse(data) : null;\n        } catch (e) {\n            return null;\n        }\n    }\n\n    // eslint-disable-next-line class-methods-use-this\n    getUserStatus() {\n        if (!window.uncachedData || !window.uncachedData.user) {\n            return {\n                authenticated: null,\n                error: 'Can not determine user status'\n            };\n        }\n\n        return {\n            authenticated: window.uncachedData.user.authenticated || false,\n            error: null\n        };\n    }\n\n    setListeners(activate) {\n        const method = activate ? 'addEventListener' : 'removeEventListener';\n        const button = this.querySelector('button');\n\n        if (button) {\n            button[method]('click', this.clickHandler);\n        }\n    }\n}\n\nmodule.exports = {\n    name: ELEMENT_NAME,\n    component: StaffstartFavoritesButton\n};\n","'use strict';\n\nconst { logMessage } = require('./staffstartLog');\nconst { StaffstartFetcher } = require('./staffstartFetcher');\n\nconst ELEMENT_NAME = 'staffstart-favoritespage';\n\nclass StaffstartFavoritesButton extends StaffstartFetcher {\n    // Lifecycle methods.\n\n    constructor() {\n        super();\n\n        this.type = null;\n        this.removeUrl = null;\n\n        this.clickHandler = this.handleClick.bind(this);\n        this.changeHandler = this.handleChange.bind(this);\n    }\n\n    connectedCallback() {\n        this.type = this.getAttribute('type');\n        this.removeUrl = this.getAttribute('remove-url');\n\n        this.setListeners(true);\n    }\n\n    disconnectedCallback() {\n        this.setListeners(false);\n    }\n\n    // Event handling.\n\n    handleClick(event) {\n        const button = event.target.closest('[data-remove-favorite-button]');\n        const id = button ? button.getAttribute('data-id') : null;\n\n        if (!id) {\n            return;\n        }\n\n        event.preventDefault();\n        this.removeFavorite(id, button.closest('a'));\n    }\n\n    // eslint-disable-next-line class-methods-use-this\n    handleChange(event) {\n        const detail = event.detail || {};\n\n        if (detail.type === 'pagination') {\n            let url = window.location.pathname;\n            url += (detail.page > 1) ? '?page=' + detail.page : '';\n            window.location.href = url;\n        }\n    }\n\n    // Remove item from favorites.\n\n    removeFavorite(id, item) {\n        const url = this.removeUrl;\n        const data = {\n            itemType: this.type,\n            itemId: id,\n            action: 'remove'\n        };\n\n        logMessage('log', 'favorite posted data: ', data);\n        this.setSpinner(true);\n\n        window.fetch(url, {\n            method: 'POST',\n            credentials: 'include',\n            body: JSON.stringify(data)\n        })\n            .then(response => response.json())\n            .then(this.handleFavoriteMutation.bind(this, item))\n            .catch(this.handleFavoriteMutationError.bind(this));\n    }\n\n    handleFavoriteMutation(item, receivedData) {\n        logMessage('log', 'favorite received data: ', receivedData);\n\n        const data = receivedData || {};\n        if (!data.success || data.error) {\n            throw new Error(data.error || 'No success');\n        }\n\n        this.setSpinner(false);\n        window.location.reload();\n    }\n\n    handleFavoriteMutationError(error) {\n        logMessage('error', 'favorites mutation error: ', error);\n        this.setSpinner(false);\n    }\n\n    // Assistants.\n\n    setListeners(activate) {\n        const method = activate ? 'addEventListener' : 'removeEventListener';\n\n        this[method]('click', this.clickHandler);\n        this[method]('staffstart:change', this.changeHandler);\n    }\n}\n\nmodule.exports = {\n    name: ELEMENT_NAME,\n    component: StaffstartFavoritesButton\n};\n","'use strict';\n\nconst cache = require('./staffstartCache');\n\nclass StaffstartFetcher extends HTMLElement {\n    // Lifecycle methods.\n\n    constructor() {\n        super();\n\n        this.ajaxUrl = null;\n        this.pageUrl = null;\n    }\n\n    // Fetching and handling data.\n\n    fetchData({ ajaxUrl, pageUrl }, callback, options) {\n        const readyCallback = typeof callback === 'function' ? callback : function () {};\n\n        this.ajaxUrl = ajaxUrl;\n        this.pageUrl = pageUrl;\n\n        if (this.fetchFromCache(ajaxUrl, readyCallback, options)) {\n            return;\n        }\n\n        if (options.showSpinner) {\n            this.setSpinner(true);\n        }\n\n        const promise = window.fetch(this.ajaxUrl, {\n            method: 'GET',\n            credentials: 'include'\n        });\n\n        promise\n            .then(this.handleResponse.bind(this))\n            .then(this.handleData.bind(this, this.ajaxUrl, readyCallback))\n            .catch(this.handleDataError.bind(this, this.ajaxUrl));\n    }\n\n    // eslint-disable-next-line class-methods-use-this\n    handleResponse(response) {\n        if (response.status !== 200) {\n            throw Error(`Status ${response.status} on response`);\n        } else {\n            return response.text();\n        }\n    }\n\n    handleData(url, readyCallback, data) {\n        this.setSpinner(false);\n\n        // Data no longer relevant.\n        if (url !== this.ajaxUrl) {\n            return;\n        }\n\n        // Cache.\n        cache.setEntry(url, data);\n\n        // Callback.\n        readyCallback(data);\n    }\n\n    // eslint-disable-next-line class-methods-use-this\n    handleDataError(url, error) {\n        this.setSpinner(false);\n\n        if (window.console) {\n            window.console.error(`Error on fetching url ${url}: `, error);\n        }\n    }\n\n    // Assistants.\n\n    fetchFromCache(ajaxUrl, readyCallback, options) {\n        const cacheEntry = cache.getEntry(ajaxUrl);\n\n        if (!cacheEntry) {\n            return false;\n        }\n\n        const showSpinnerWhenCached = options.showSpinner && this.showSpinnerWhenCached();\n        const timeout = showSpinnerWhenCached ? 150 : 1;\n\n        if (showSpinnerWhenCached) {\n            this.setSpinner(true);\n        }\n\n        setTimeout(() => {\n            this.setSpinner(false);\n\n            // Data no longer relevant.\n            if (ajaxUrl !== this.ajaxUrl) {\n                return;\n            }\n\n            readyCallback(cacheEntry);\n        }, timeout);\n\n        return true;\n    }\n\n    // eslint-disable-next-line class-methods-use-this\n    showSpinnerWhenCached() {\n        // Default implementation.\n        return false;\n    }\n\n    // eslint-disable-next-line class-methods-use-this\n    setSpinner(activate) {\n        try {\n            if (activate) {\n                $.spinner().start();\n            } else {\n                $.spinner().stop();\n            }\n        } catch (e) {\n            // Try catch used because of https://newbalance.atlassian.net/browse/CCT-6714.\n            // Application still usable without spinner.\n        }\n    }\n}\n\nmodule.exports = {\n    StaffstartFetcher\n};\n","'use strict';\n\nconst { StaffstartFetcher } = require('./staffstartFetcher');\n\nconst ELEMENT_NAME = 'staffstart-lazyloader';\n\nclass StaffstartLazyLoader extends StaffstartFetcher {\n    // Lifecycle methods.\n\n    constructor() {\n        super();\n\n        this.status = null;\n    }\n\n    connectedCallback() {\n        this.status = {\n            url: this.getAttribute('url'),\n            observer: null\n        };\n\n        this.setObserver();\n    }\n\n    disconnectedCallback() {\n        const status = this.status || {};\n\n        if (status.observer) {\n            status.observer.unobserve(this);\n        }\n\n        this.status = null;\n    }\n\n    // Event handling.\n\n    handleIntersection(entries) {\n        const entry = entries[0] || {};\n\n        if (entry.isIntersecting) {\n            this.classList.add('scrolled-into-view');\n\n            this.status.observer.unobserve(this);\n            this.status.observer = null;\n\n            this.fetchData(\n                { pageUrl: this.status.url, ajaxUrl: this.status.url },\n                this.handleFetchedData.bind(this, this.status),\n                { showSpinner: false }\n            );\n        }\n    }\n\n    handleFetchedData(status, data) {\n        if (!this.parentNode || !this.status || status !== this.status) {\n            return;\n        }\n\n        const div = document.createElement('div');\n        div.innerHTML = data;\n\n        while (div.hasChildNodes()) {\n            this.parentNode.insertBefore(div.firstChild, this);\n        }\n\n        this.remove();\n    }\n\n    // Overriding base method.\n    handleDataError(url, error) {\n        if (window.console) {\n            window.console.error(`Error on fetching url ${url}: `, error);\n        }\n\n        this.remove();\n    }\n\n    // Helper methods.\n\n    setObserver() {\n        if (!this.status || !this.status.url) {\n            return;\n        }\n\n        this.status.observer = new window.IntersectionObserver(this.handleIntersection.bind(this), { rootMargin: '500px' });\n        this.status.observer.observe(this);\n    }\n}\n\nmodule.exports = {\n    name: ELEMENT_NAME,\n    component: StaffstartLazyLoader\n};\n","'use strict';\n\n/**\n * Log message to browser console.\n * @param {string} method - Can be log, warn, error.\n * @param {...Object} args - Messages to be logged.\n */\nfunction logMessage(method, ...args) {\n    if (!window.console) {\n        return;\n    }\n\n    let logAll = false;\n\n    try {\n        logAll = window.localStorage && window.localStorage.getItem('staffStartLogging') === 'true';\n    } catch (e) { /* empty */ }\n\n    const logItem = logAll || method === 'error';\n\n    if (logItem) {\n        const messages = ['StaffStart', ...args];\n        window.console[method].apply(window.console, messages);\n    }\n}\n\nmodule.exports = {\n    logMessage\n};\n","'use strict';\n\nconst { isOpeningNewTab, updateUrl } = require('./staffstartUtils');\nconst { StaffstartFetcher } = require('./staffstartFetcher');\nconst { getSearchParams } = require('../util/url');\nconst { safeJSONParse } = require('../util/safeParse');\nconst cache = require('./staffstartCache');\n\nconst ELEMENT_NAME = 'staffstart-main';\n\nconst ELEMENTS = {\n    refineBarContainerMobile: '.staffstart-refinebar-container-mobile',\n    modalBackground: '.staffstart-modal-background',\n    grid: '.staffstart-grid',\n    pagination: 'staffstart-pagination',\n    refineBar: { multiple: true, selector: 'staffstart-refinebar' },\n    totalItems: { multiple: true, selector: '[data-total-items-count]' },\n    sorting: { multiple: true, selector: 'staffstart-sorting' },\n    listContainer: '[data-list-container]',\n    detailContainer: '[data-detail-container]'\n};\n\nconst ATTRIBUTES = {\n    dataParameters: 'data-parameters',\n    dataFilters: 'data-filters',\n    dataPagination: 'data-pagination',\n    dataSortOrder: 'data-sort-order',\n    dataTotalItems: 'data-total-items',\n    dataSelectedFilters: 'data-selected-filters',\n    dataIsSpa: 'data-is-spa',\n    dataIsDetailActive: 'data-is-detail-active',\n    dataDetailId: 'data-detail-id',\n    dataHandleDetailClicks: 'data-handle-detail-clicks'\n};\n\nconst EVENT_TYPES = {\n    pagination: 'pagination',\n    sorting: 'sorting',\n    filterNarrow: 'filter-narrow',\n    filterRelax: 'filter-relax',\n    filterRelaxAll: 'filter-relax-all',\n    popState: 'pop-state'\n};\n\nclass StaffstartMain extends StaffstartFetcher {\n    // Lifecycle methods.\n\n    constructor() {\n        super();\n\n        this.elements = null;\n        this.popStateTimer = null;\n        this.isDetailActive = false;\n\n        this.resizeHandler = this.handleResize.bind(this);\n        this.clickHandler = this.handleClick.bind(this);\n        this.popStateHandler = this.handlePopState.bind(this);\n        this.changeHandler = this.handleChange.bind(this);\n    }\n\n    connectedCallback() {\n        this.isDetailActive = this.getAttribute(ATTRIBUTES.dataIsDetailActive) === 'true';\n        this.elements = this.getElements();\n        this.setListeners(true);\n        this.setInitCache();\n    }\n\n    disconnectedCallback() {\n        this.setListeners(false);\n    }\n\n    // Event handling.\n\n    handleResize() {\n        if (this.elements.refineBarContainerMobile.classList.contains('open')) {\n            this.setFiltersOpenState(false);\n        }\n    }\n\n    handleClick(event) {\n        const clickElement = event.target.closest('[data-click-type]');\n        const clickType = clickElement ? clickElement.getAttribute('data-click-type') : null;\n\n        if (!clickType) {\n            return;\n        }\n\n        // eslint-disable-next-line default-case\n        switch (clickType) {\n            case 'open-filters':\n                this.setFiltersOpenState(true);\n                break;\n            case 'close-filters':\n                this.setFiltersOpenState(false);\n                break;\n            case 'go-to-detail':\n                this.goToDetail(event, clickElement);\n                break;\n            case 'go-to-list':\n                this.goToList(event);\n                break;\n        }\n    }\n\n    handlePopState() {\n        clearTimeout(this.popStateTimer);\n\n        if (this.handlePopStateDetail()) {\n            return;\n        }\n\n        const url = window.location.pathname + window.location.search;\n        this.popStateTimer = setTimeout(this.initPopStateRequest.bind(this, url), 100);\n    }\n\n    handlePopStateDetail() {\n        const searchParams = getSearchParams(window.location.href);\n\n        if (this.isDetailActive && !searchParams.detail) {\n            this.setDetailActive(false, '');\n            return true;\n        }\n\n        if (!this.isDetailActive && searchParams.detail) {\n            this.setDetailActive(true, searchParams.detail);\n            return true;\n        }\n\n        return false;\n    }\n\n    handleChange(event) {\n        const detail = event.detail || {};\n        const changedParams = this.getChangedParams(detail);\n\n        if (!changedParams) {\n            return;\n        }\n\n        const urls = this.createUrls(changedParams);\n\n        if (!urls) {\n            return;\n        }\n\n        this.fetchData(\n            { ajaxUrl: urls.ajaxUrl, pageUrl: urls.pageUrl },\n            this.handleDataReady.bind(this, detail, urls),\n            { showSpinner: true }\n        );\n    }\n\n    handleDataReady(detail, urls, data) {\n        const properties = this.extractProperties(data);\n\n        if (!properties) {\n            return;\n        }\n\n        const elements = this.elements;\n\n        // Only update filters when one or more filters changed.\n        const filterRelevantEvents = [\n            EVENT_TYPES.filterNarrow,\n            EVENT_TYPES.filterRelax,\n            EVENT_TYPES.filterRelaxAll,\n            EVENT_TYPES.popState\n        ];\n\n        if (filterRelevantEvents.includes(detail.type)) {\n            for (let i = 0; i < elements.refineBar.length; i += 1) {\n                elements.refineBar[i].setSelectedFilters(properties.selectedFilters);\n            }\n        }\n\n        // Only update sort order when sort order changed.\n        const sortRelevantEvents = [\n            EVENT_TYPES.sorting,\n            EVENT_TYPES.popState\n        ];\n\n        if (sortRelevantEvents.includes(detail.type)) {\n            for (let i = 0; i < elements.sorting.length; i += 1) {\n                elements.sorting[i].setSortOrder(properties.sortOrder);\n            }\n        }\n\n        // Update total items counts.\n        for (let i = 0; i < elements.totalItems.length; i += 1) {\n            elements.totalItems[i].textContent = String(properties.totalItems);\n        }\n\n        // Update pagination.\n        elements.pagination.setPagination(properties.pagination);\n\n        // Update grid.\n        elements.grid.innerHTML = properties.gridHTML;\n\n        // Update URL and scroll to top.\n        if (detail.type !== EVENT_TYPES.popState) {\n            window.scrollTo(0, 0);\n            updateUrl(urls.pageUrl, { isListUrl: true });\n        }\n\n        // Preload next page.\n        this.preloadNextPage(properties.pagination);\n    }\n\n    // SPA related methods.\n\n    goToList(event) {\n        if (this.getAttribute(ATTRIBUTES.dataIsSpa) !== 'true') {\n            return;\n        }\n\n        if (isOpeningNewTab(event)) {\n            return;\n        }\n\n        event.preventDefault();\n\n        const currentUrl = new URL(window.location.href);\n        currentUrl.searchParams.delete('detail');\n\n        window.scrollTo(0, 0);\n        updateUrl(currentUrl.toString(), { isListUrl: true });\n        this.setDetailActive(false, '');\n    }\n\n    goToDetail(event, clickElement) {\n        if (this.getAttribute(ATTRIBUTES.dataIsSpa) !== 'true') {\n            return;\n        }\n\n        if (isOpeningNewTab(event)) {\n            return;\n        }\n\n        const detailId = clickElement.getAttribute(ATTRIBUTES.dataDetailId);\n\n        if (!detailId) {\n            return;\n        }\n\n        const handleDetailClicks = Boolean(clickElement.closest(`[${ATTRIBUTES.dataHandleDetailClicks}]`));\n\n        if (!handleDetailClicks) {\n            return;\n        }\n\n        // Prevent following link.\n        event.preventDefault();\n\n        // Update URL.\n        const spaUrl = new URL(window.location.href);\n        spaUrl.searchParams.set('detail', detailId);\n        updateUrl(spaUrl, { isDetailUrl: true });\n\n        // Activate detail view.\n        this.setDetailActive(true, detailId);\n\n        // Scrolling with small timeout.\n        // Needed because of Firefox behavior.\n        setTimeout(() => {\n            window.scrollTo(0, 0);\n        }, 5);\n    }\n\n    // Assistant methods.\n\n    setDetailActive(activate, detailId) {\n        const { detailContainer, listContainer } = this.elements;\n\n        this.isDetailActive = activate;\n\n        if (activate) {\n            detailContainer.classList.remove('d-none');\n            listContainer.classList.add('d-none');\n        } else {\n            detailContainer.classList.add('d-none');\n            listContainer.classList.remove('d-none');\n        }\n\n        detailContainer.setDetailId(detailId);\n    }\n\n    preloadNextPage(pagination) {\n        const nextPage = pagination.currentPageNumber + 1;\n        const lastPage = pagination.lastPageNumber;\n\n        if (!nextPage || nextPage > lastPage) {\n            return;\n        }\n\n        const urls = this.createUrls({ page: nextPage });\n\n        if (!urls) {\n            return;\n        }\n\n        this.fetchData(\n            { ajaxUrl: urls.ajaxUrl, pageUrl: urls.pageUrl },\n            null,\n            { showSpinner: false }\n        );\n    }\n\n    initPopStateRequest(location) {\n        const pageUrl = location;\n        const ajaxUrl = pageUrl + (pageUrl.includes('?') ? '&' : '?') + 'ajax=true';\n\n        const urls = {\n            pageUrl,\n            ajaxUrl\n        };\n\n        const detail = {\n            type: EVENT_TYPES.popState\n        };\n\n        this.fetchData(\n            { ajaxUrl: urls.ajaxUrl, pageUrl: urls.pageUrl },\n            this.handleDataReady.bind(this, detail, urls),\n            { showSpinner: true }\n        );\n    }\n\n    setFiltersOpenState(setOpen) {\n        const elements = this.elements;\n\n        document.body.classList[setOpen ? 'add' : 'remove']('modal-open');\n        elements.modalBackground.classList[setOpen ? 'add' : 'remove']('open');\n        elements.refineBarContainerMobile.classList[setOpen ? 'add' : 'remove']('open');\n    }\n\n    // eslint-disable-next-line class-methods-use-this\n    getChangedParams(detail) {\n        switch (detail.type) {\n            case EVENT_TYPES.pagination:\n                return { page: detail.page || '' };\n            case EVENT_TYPES.sorting:\n                return { sort: detail.sortOrder || '', page: '' };\n            case EVENT_TYPES.filterNarrow:\n            case EVENT_TYPES.filterRelax:\n                return { [detail.filterType]: detail.filterValue, page: '' };\n            case EVENT_TYPES.filterRelaxAll:\n                return (this.getParameters(ATTRIBUTES.dataFilters) || []).reduce((result, item) => {\n                    return {\n                        ...result,\n                        [item]: ''\n                    };\n                }, { page: '' });\n            default:\n                return null;\n        }\n    }\n\n    createUrls(changedParams) {\n        const urlKeys = this.getParameters(ATTRIBUTES.dataParameters);\n\n        if (!urlKeys) {\n            return null;\n        }\n\n        const currentParams = getSearchParams(window.location.href);\n        const adjustedParams = Object.assign({}, currentParams, changedParams);\n        const queryParameters = [];\n\n        for (let i = 0; i < urlKeys.length; i += 1) {\n            const key = urlKeys[i];\n            const value = key in adjustedParams && adjustedParams[key] ? adjustedParams[key] : '';\n\n            if (value) {\n                queryParameters.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`);\n            }\n        }\n\n        const ajaxParameters = [...queryParameters, 'ajax=true'];\n\n        const ajaxUrl = window.location.pathname + '?' + ajaxParameters.join('&');\n        const pageUrl = window.location.pathname + (queryParameters.length ? '?' + queryParameters.join('&') : '');\n\n        return {\n            ajaxUrl,\n            pageUrl\n        };\n    }\n\n    getParameters(attribute) {\n        try {\n            const value = JSON.parse(this.getAttribute(attribute));\n            return value && Array.isArray(value) ? value : null;\n        } catch (e) {\n            return null;\n        }\n    }\n\n    getElements() {\n        const result = {};\n\n        // eslint-disable-next-line no-restricted-syntax\n        for (const [key, value] of Object.entries(ELEMENTS)) {\n            if (typeof value === 'string') {\n                result[key] = this.querySelector(value);\n            } else {\n                result[key] = this.querySelectorAll(value.selector);\n            }\n        }\n\n        return result;\n    }\n\n    setInitCache() {\n        const { grid } = this.elements;\n\n        if (!grid) {\n            return;\n        }\n\n        const html = grid.outerHTML;\n        const properties = this.extractProperties(html);\n\n        if (!properties) {\n            return;\n        }\n\n        const pageUrl = window.location.pathname + window.location.search;\n        const ajaxUrl = pageUrl + (pageUrl.includes('?') ? '&' : '?') + 'ajax=true';\n        cache.setEntry(ajaxUrl, html);\n\n        // Preload next page.\n        this.preloadNextPage(properties.pagination);\n    }\n\n    // eslint-disable-next-line class-methods-use-this\n    extractProperties(data) {\n        // Fill temporary container with received data.\n        const div = document.createElement('div');\n        div.innerHTML = data;\n\n        const sourceContainer = div.querySelector(ELEMENTS.grid);\n\n        if (!sourceContainer) {\n            return null;\n        }\n\n        const paginationValue = sourceContainer.getAttribute(ATTRIBUTES.dataPagination);\n        const pagination = paginationValue ? safeJSONParse(paginationValue) : null;\n\n        if (!pagination.result) {\n            return null;\n        }\n\n        const selectedFiltersValue = sourceContainer.getAttribute(ATTRIBUTES.dataSelectedFilters);\n        const selectedFilters = selectedFiltersValue ? safeJSONParse(selectedFiltersValue) : null;\n\n        if (!selectedFilters.result) {\n            return null;\n        }\n\n        const totalItemsValue = sourceContainer.getAttribute(ATTRIBUTES.dataTotalItems);\n        const totalItems = totalItemsValue ? parseInt(totalItemsValue, 10) : NaN;\n\n        if (window.isNaN(totalItems)) {\n            return null;\n        }\n\n        const sortOrder = sourceContainer.getAttribute(ATTRIBUTES.dataSortOrder) || '';\n\n        return {\n            totalItems,\n            sortOrder,\n            pagination: pagination.result,\n            selectedFilters: selectedFilters.result,\n            gridHTML: sourceContainer.innerHTML\n        };\n    }\n\n    setListeners(activate) {\n        const method = activate ? 'addEventListener' : 'removeEventListener';\n\n        // Global events.\n        window[method]('resize', this.resizeHandler, false);\n        window[method]('popstate', this.popStateHandler, false);\n\n        // Handle clicks.\n        this[method]('click', this.clickHandler, false);\n\n        // Triggered by refine bar, sorting and pagination.\n        this[method]('staffstart:change', this.changeHandler, false);\n    }\n\n    showSpinnerWhenCached() {\n        const { refineBarContainerMobile } = this.elements;\n\n        // Give a loading hint when the filters overlay is open on mobile.\n        // Otherwise the user may think nothing is happening.\n        // ¯\\_(ツ)_/¯\n        return refineBarContainerMobile.classList.contains('open');\n    }\n}\n\nmodule.exports = {\n    name: ELEMENT_NAME,\n    component: StaffstartMain\n};\n","'use strict';\n\nconst debounce = require('../util/debounce');\nconst ELEMENT_NAME = 'staffstart-maincarousel';\n\nconst ELEMENTS = {\n    mainContainer: '.staffstart-carousel-main',\n    mainItems: { multiple: true, selector: '.staffstart-carousel-main-item' },\n    thumbsContainer: '.staffstart-carousel-thumbs',\n    thumbs: { multiple: true, selector: '.staffstart-carousel-thumbs-item' },\n    indicatorsContainer: '.staffstart-carousel-indicators',\n    indicators: { multiple: true, selector: '.staffstart-carousel-indicators li' }\n};\n\nconst ATTRIBUTES = {\n    dataAction: 'data-carousel-action',\n    dataItemIndex: 'data-carousel-item-index'\n};\n\nconst SCROLL_TYPES = {\n    manual: 'manual', // User scrolls by swiping or using trackpad.\n    control: 'control' // User scrolls by clicking thumb or indicator.\n};\n\nclass StaffstartMainImageCarousel extends HTMLElement {\n    // Lifecycle methods.\n\n    constructor() {\n        super();\n\n        this.elements = null;\n        this.scrollType = SCROLL_TYPES.manual;\n        this.windowWidth = null;\n\n        this.clickHandler = this.handleClick.bind(this);\n        this.scrollHandler = this.handleScroll.bind(this);\n        this.scrollEndHandler = debounce(this.handleScrollEnd.bind(this), 200);\n        this.resizeHandler = this.handleResize.bind(this);\n    }\n\n    connectedCallback() {\n        this.elements = this.getElements();\n        this.windowWidth = window.innerWidth;\n        this.setListeners(true);\n    }\n\n    disconnectedCallback() {\n        this.setListeners(false);\n    }\n\n    // Event handling.\n\n    handleClick(event) {\n        const clickElement = event.target.closest(`[${ATTRIBUTES.dataAction}]`);\n        const clickAction = clickElement ? clickElement.getAttribute(ATTRIBUTES.dataAction) : null;\n\n        if (clickAction === 'selectSlide') {\n            this.goToSlide(clickElement);\n        }\n    }\n\n    handleScroll() {\n        const activeItem = this.findViewPortSlide();\n        const activeIndex = activeItem ? activeItem.index : -1;\n        const { thumbs, indicators } = this.elements;\n\n        // Set active thumb and indicator.\n        this.setActiveIndicator(activeIndex, thumbs);\n        this.setActiveIndicator(activeIndex, indicators);\n    }\n\n    handleScrollEnd() {\n        const { mainContainer, thumbs, indicators } = this.elements;\n\n        // Reset scroll type.\n        this.scrollType = SCROLL_TYPES.manual;\n\n        // Determine active index.\n        const activeIndex = Math.round(mainContainer.scrollLeft / mainContainer.getBoundingClientRect().width);\n\n        // Set active thumb and indicator.\n        this.setActiveIndicator(activeIndex, thumbs);\n        this.setActiveIndicator(activeIndex, indicators);\n    }\n\n    handleResize() { // Reset to start on resize.\n        const newWindowWidth = window.innerWidth;\n\n        // Ignore y-axis only resizes.\n        if (newWindowWidth === this.windowWidth) {\n            return;\n        }\n\n        // Set window width property.\n        this.windowWidth = newWindowWidth;\n\n        // Set scroll.\n        const { mainContainer, thumbs, indicators } = this.elements;\n        mainContainer.scrollLeft = 0;\n\n        // Set active thumb and indicator.\n        this.setActiveIndicator(0, thumbs);\n        this.setActiveIndicator(0, indicators);\n    }\n\n    // Assistant methods.\n\n    // eslint-disable-next-line class-methods-use-this\n    setActiveIndicator(index, elements) {\n        const activeClass = 'active';\n\n        for (let i = 0; i < elements.length; i += 1) {\n            const element = elements[i];\n            if (i === index) {\n                element.classList.add(activeClass);\n            } else {\n                element.classList.remove(activeClass);\n            }\n        }\n    }\n\n    goToSlide(element) {\n        const index = parseInt(element.getAttribute(ATTRIBUTES.dataItemIndex), 10);\n\n        if (window.isNaN(index)) {\n            return;\n        }\n\n        const { mainContainer, mainItems } = this.elements;\n        const mainItem = mainItems[index];\n\n        if (!mainItem) {\n            return;\n        }\n\n        this.scrollType = SCROLL_TYPES.control;\n        mainContainer.scrollLeft = index * mainContainer.getBoundingClientRect().width;\n    }\n\n    findViewPortSlide() {\n        const { mainContainer, mainItems } = this.elements;\n\n        const mainRect = mainContainer.getBoundingClientRect();\n        const mainLeft = mainRect.left;\n        const mainWidth = mainRect.width;\n        const mainMiddle = mainWidth / 2; // Middle relative to container left.\n\n        for (let i = 0; i < mainItems.length; i += 1) {\n            const item = mainItems[i];\n\n            const itemRect = item.getBoundingClientRect();\n            const itemLeft = itemRect.left - mainLeft; // Left position relative to container.\n\n            // True when more than half of the image is inside the viewport.\n            // If this is true for item 1 it will also be true for following items, therefore we return early.\n            if (itemLeft + mainWidth > mainMiddle) {\n                return {\n                    index: i,\n                    element: item\n                };\n            }\n        }\n\n        return null;\n    }\n\n    getElements() {\n        const result = {};\n\n        for (let i = 0, keys = Object.keys(ELEMENTS); i < keys.length; i += 1) {\n            const key = keys[i];\n            const value = ELEMENTS[key];\n\n            if (typeof value === 'string') {\n                result[key] = this.querySelector(value);\n            } else {\n                result[key] = this.querySelectorAll(value.selector);\n            }\n        }\n\n        return result;\n    }\n\n    setListeners(activate) {\n        const method = activate ? 'addEventListener' : 'removeEventListener';\n\n        this[method]('click', this.clickHandler, false);\n        this.elements.mainContainer[method]('scroll', this.scrollHandler, false);\n        this.elements.mainContainer[method]('scroll', this.scrollEndHandler, false);\n        window[method]('resize', this.resizeHandler, false);\n    }\n}\n\nmodule.exports = {\n    name: ELEMENT_NAME,\n    component: StaffstartMainImageCarousel\n};\n","'use strict';\n\nconst ELEMENT_NAME = 'staffstart-pagination';\n\nconst ATTRIBUTES = {\n    dataPage: 'data-page'\n};\n\nclass StaffstartPagination extends HTMLElement {\n    // Lifecycle methods.\n\n    constructor() {\n        super();\n\n        this.clickHandler = this.handleClick.bind(this);\n    }\n\n    connectedCallback() {\n        this.addEventListener('click', this.clickHandler, false);\n    }\n\n    disconnectedCallback() {\n        this.removeEventListener('click', this.clickHandler, false);\n    }\n\n    // Public.\n\n    setPagination(pagination) {\n        while (this.hasChildNodes()) {\n            this.removeChild(this.firstChild);\n        }\n\n        const buttonClass = 'staffstart-pagination-button';\n        const prevLabel = this.getAttribute('prev-label') || '';\n        const nextLabel = this.getAttribute('next-label') || '';\n\n        if (pagination.previousPageNumber) {\n            this.appendChild(this.createButton({\n                className: buttonClass,\n                content: '<',\n                label: prevLabel,\n                page: pagination.previousPageNumber\n            }));\n        }\n\n        for (let i = 0, pages = pagination.pages || []; i < pages.length; i += 1) {\n            const page = pages[i];\n            const pageNumber = page.page;\n\n            this.appendChild(this.createButton({\n                className: buttonClass + (page.active ? ' active' : ''),\n                content: String(pageNumber),\n                label: String(pageNumber),\n                page: String(pageNumber)\n            }));\n        }\n\n        if (pagination.nextPageNumber) {\n            this.appendChild(this.createButton({\n                className: buttonClass,\n                content: '>',\n                label: nextLabel,\n                page: pagination.nextPageNumber\n            }));\n        }\n    }\n\n    // Event handling.\n\n    handleClick(event) {\n        const pageElement = event.target.closest(`[${ATTRIBUTES.dataPage}]`);\n        const page = pageElement ? parseInt(pageElement.getAttribute(ATTRIBUTES.dataPage), 10) : NaN;\n\n        if (!page) {\n            return;\n        }\n\n        const passedEventType = (this.getAttribute('event-type') || '').trim();\n        const eventType = passedEventType || 'staffstart:change';\n\n        this.dispatchEvent(new CustomEvent(eventType, {\n            bubbles: true,\n            detail: {\n                type: 'pagination',\n                page: page\n            }\n        }));\n    }\n\n    // Assistants.\n\n    // eslint-disable-next-line class-methods-use-this\n    createButton({\n        className, content, label, page\n    }) {\n        const button = document.createElement('button');\n        button.setAttribute('type', 'button');\n        button.setAttribute('aria-label', (label || ''));\n        button.setAttribute('title', (label || ''));\n        button.setAttribute('data-page', page);\n        button.className = className;\n        button.textContent = content;\n\n        return button;\n    }\n}\n\nmodule.exports = {\n    name: ELEMENT_NAME,\n    component: StaffstartPagination\n};\n","'use strict';\n\nconst { logMessage } = require('./staffstartLog');\nconst ELEMENT_NAME = 'staffstart-productdetail';\n\nclass StaffstartProductDetail extends HTMLElement {\n    // Lifecycle methods.\n\n    constructor() {\n        super();\n\n        this.baseUrl = null;\n        this.productCode = null;\n\n        this.attributeSelectHandler = this.handleAttributeSelect.bind(this);\n    }\n\n    connectedCallback() {\n        this.baseUrl = this.getAttribute('base-url');\n        this.productCode = this.getAttribute('productcode');\n\n        this.clearContent();\n        this.setListeners(true);\n\n        setTimeout(this.fetchData.bind(this, this.productCode), 3000);\n    }\n\n    disconnectedCallback() {\n        this.setListeners(false);\n    }\n\n    // Event handling.\n\n    handleAttributeSelect(event, response) {\n        const data = response ? response.data || {} : {};\n        let productCode = this.getProductCode(data.product);\n\n        // Ignore if we already had this product code.\n        if (productCode === this.productCode) {\n            logMessage('log', `product code same as before (${productCode})`);\n            return;\n        }\n\n        this.productCode = productCode;\n        this.fetchData(productCode);\n    }\n\n    // Fetching data.\n\n    fetchData(productCode) {\n        // Exit early when we have incomplete input.\n        if (!this.baseUrl || !productCode) {\n            logMessage('log', 'received falsy product code or base url');\n            this.clearContent();\n            return;\n        }\n\n        // This can be the case for the initial call via a timeout.\n        if (productCode !== this.productCode) {\n            return;\n        }\n\n        this.clearContent();\n\n        logMessage('log', `fetching data for ${productCode}`);\n\n        const url = this.baseUrl\n            + (this.baseUrl.indexOf('?') > -1 ? '&' : '?')\n            + 'base_product_code=' + encodeURIComponent(productCode);\n\n        const promise = window.fetch(url, {\n            method: 'GET',\n            credentials: 'include'\n        });\n\n        promise\n            .then((response) => {\n                if (response.status !== 200) {\n                    throw Error(`Status ${response.status} on response`);\n                } else {\n                    return response.text();\n                }\n            })\n            .then(this.handleData.bind(this, productCode))\n            .catch(this.handleDataError.bind(this));\n    }\n\n    handleData(productCode, data) {\n        if (productCode !== this.productCode) {\n            return;\n        }\n\n        this.innerHTML = data;\n\n        if (this.children.length === 0) {\n            this.clearContent();\n        }\n    }\n\n    handleDataError(error) {\n        logMessage('error', 'error response on recommendations', error);\n        this.clearContent();\n    }\n\n    // Helper methods.\n\n    // eslint-disable-next-line class-methods-use-this\n    getProductCode(product) {\n        if (!product) {\n            return '';\n        }\n\n        const variationAttributes = Array.isArray(product.variationAttributes) ? product.variationAttributes : [];\n        const styleAttribute = variationAttributes.filter(function (attribute) {\n            return attribute.attributeId === 'style';\n        })[0] || null;\n\n        if (!styleAttribute || !Array.isArray(styleAttribute.values)) {\n            return '';\n        }\n\n        const selectedStyle = styleAttribute.values.filter(function (value) {\n            return value.selected === true;\n        })[0] || null;\n\n        if (!selectedStyle || typeof selectedStyle.styleID !== 'string') {\n            return '';\n        }\n\n        let styleId = selectedStyle.styleID;\n        const styleIdAdapted = styleId.replace(/(\\d+)([A-Z]+)$/, (fullMatch, numbers, letters) => {\n            return numbers + '-' + letters;\n        });\n\n        // See also getProductCode() in staffStartTemplateHooks.js file.\n        return styleIdAdapted === styleId ? styleId : styleId + ',' + styleIdAdapted;\n    }\n\n    clearContent() {\n        while (this.hasChildNodes()) {\n            this.removeChild(this.firstChild);\n        }\n    }\n\n    setListeners(activate) {\n        // The product:afterAttributeSelect is triggered in such a way that we need JQuery to listen to it.\n        const method = activate ? 'on' : 'off';\n\n        if (window.$) {\n            $('body')[method]('product:afterAttributeSelect', this.attributeSelectHandler);\n        }\n    }\n}\n\nmodule.exports = {\n    name: ELEMENT_NAME,\n    component: StaffstartProductDetail\n};\n","'use strict';\n\nconst ELEMENT_NAME = 'staffstart-refinebar';\n\nconst ATTRIBUTES = {\n    dataClickType: 'data-click-type',\n    dataFilterType: 'data-filter-type',\n    dataFilterAlias: 'data-filter-container-alias',\n    dataFilterValue: 'data-filter-value',\n    dataFilterLabel: 'data-filter-label',\n    dataFilterContainerType: 'data-filter-container-type',\n    dataSelectedFiltersMainContainer: 'data-selected-filters-main-container',\n    dataSelectedFiltersContainer: 'data-selected-filters-container',\n    dataSelectedFilterButtonTemplate: 'data-selected-filters-template'\n};\n\nconst EVENT_TYPES = {\n    openClose: 'filter-open-close',\n    filterNarrow: 'filter-narrow',\n    filterRelax: 'filter-relax',\n    filterRelaxAll: 'filter-relax-all'\n};\n\nclass StaffstartRefineBar extends HTMLElement {\n    // Lifecycle methods.\n\n    constructor() {\n        super();\n\n        this.clickHandler = this.handleClick.bind(this);\n        this.elements = null;\n    }\n\n    connectedCallback() {\n        this.elements = this.getElements();\n        this.setListeners(true);\n    }\n\n    disconnectedCallback() {\n        this.setListeners(false);\n    }\n\n    // Public.\n\n    setSelectedFilters(selectedFilters) {\n        const { items } = selectedFilters;\n        const elements = this.elements;\n\n        for (let i = 0, entries = Object.entries(elements.filterContainers); i < entries.length; i += 1) {\n            const [type, container] = entries[i];\n            const alias = container.getAttribute(ATTRIBUTES.dataFilterAlias);\n            const useType = alias || type;\n            const selectedFiltersOfType = items.filter(item => item.type === useType);\n\n            this.setSelectedFiltersOfType(container, selectedFiltersOfType);\n        }\n\n        this.setSelectedFilterButtons(items);\n    }\n\n    // Event handling.\n\n    handleClick(event) {\n        const clickTypeElement = event.target.closest(`[${ATTRIBUTES.dataClickType}]`);\n        const clickType = clickTypeElement ? clickTypeElement.getAttribute(ATTRIBUTES.dataClickType) : null;\n\n        if (!clickType) {\n            return;\n        }\n\n        // eslint-disable-next-line default-case\n        switch (clickType) {\n            case EVENT_TYPES.openClose:\n                this.handleFilterOpenCloseClick(event, clickTypeElement);\n                break;\n            case EVENT_TYPES.filterNarrow:\n                this.handleFilterClick(event);\n                break;\n            case EVENT_TYPES.filterRelax:\n                this.handleRelaxClick(event);\n                break;\n            case EVENT_TYPES.filterRelaxAll:\n                this.handleRelaxAllClick();\n                break;\n        }\n    }\n\n    // eslint-disable-next-line class-methods-use-this\n    handleFilterOpenCloseClick(event, button) {\n        const container = event.target.closest(`[${ATTRIBUTES.dataFilterContainerType}]`);\n\n        if (!container) {\n            return;\n        }\n\n        const isOpen = container.classList.contains('open');\n        container.classList[isOpen ? 'remove' : 'add']('open');\n        button.setAttribute('aria-expanded', !isOpen);\n    }\n\n    handleFilterClick(event) {\n        const clickInfo = this.getClickInfo(event);\n\n        if (!clickInfo) {\n            return;\n        }\n\n        const isActive = clickInfo.element.classList.contains('active');\n\n        const detail = {\n            type: isActive ? EVENT_TYPES.filterRelax : EVENT_TYPES.filterNarrow,\n            filterType: clickInfo.type,\n            filterValue: isActive ? '' : clickInfo.value\n        };\n\n        this.dispatchChangeEvent(detail);\n    }\n\n    handleRelaxClick(event) {\n        const clickInfo = this.getClickInfo(event);\n\n        if (clickInfo) {\n            this.dispatchChangeEvent({\n                type: EVENT_TYPES.filterRelax,\n                filterType: clickInfo.type,\n                filterValue: ''\n            });\n        }\n    }\n\n    handleRelaxAllClick() {\n        this.dispatchChangeEvent({\n            type: EVENT_TYPES.filterRelaxAll\n        });\n    }\n\n    // Assistant methods.\n\n    // eslint-disable-next-line class-methods-use-this\n    setSelectedFiltersOfType(container, selectedFiltersOfType) {\n        const buttonsContainer = container.querySelector('.staffstart-filter-buttons');\n        const buttons = buttonsContainer.querySelectorAll('button');\n\n        for (let i = 0; i < buttons.length; i += 1) {\n            const button = buttons[i];\n            const value = button.getAttribute(ATTRIBUTES.dataFilterValue);\n            const isActive = selectedFiltersOfType.some(item => item.value === value);\n\n            if (isActive) {\n                button.classList.add('active');\n            } else {\n                button.classList.remove('active');\n            }\n        }\n    }\n\n    setSelectedFilterButtons(selectedItems) {\n        const container = this.elements.selectedFiltersContainer;\n\n        while (container.hasChildNodes()) {\n            container.removeChild(container.firstChild);\n        }\n\n        for (let i = 0; i < selectedItems.length; i += 1) {\n            const selectedFilter = selectedItems[i];\n            const button = this.elements.buttonTemplate.content.cloneNode(true).firstElementChild;\n\n            button.setAttribute(ATTRIBUTES.dataFilterType, selectedFilter.type);\n            button.setAttribute(ATTRIBUTES.dataFilterValue, selectedFilter.value);\n            button.setAttribute(ATTRIBUTES.dataFilterLabel, selectedFilter.label);\n\n            button.textContent = selectedFilter.label;\n\n            this.elements.selectedFiltersContainer.appendChild(button);\n        }\n\n        this.elements.selectedFiltersMainContainer.classList[selectedItems.length > 0 ? 'remove' : 'add']('d-none');\n    }\n\n    dispatchChangeEvent(detail) {\n        this.dispatchEvent(new CustomEvent('staffstart:change', {\n            bubbles: true,\n            detail\n        }));\n    }\n\n    // eslint-disable-next-line class-methods-use-this\n    getClickInfo(event) {\n        const element = event.target.closest(`[${ATTRIBUTES.dataFilterType}]`);\n\n        if (!element) {\n            return null;\n        }\n\n        const type = element.getAttribute(ATTRIBUTES.dataFilterType);\n        const value = element.getAttribute(ATTRIBUTES.dataFilterValue);\n        const label = element.getAttribute(ATTRIBUTES.dataFilterLabel);\n\n        if (!type || !value || !label) {\n            return null;\n        }\n\n        return {\n            element,\n            type,\n            value,\n            label\n        };\n    }\n\n    getElements() {\n        const selectedFiltersMainContainer = this.querySelector(`[${ATTRIBUTES.dataSelectedFiltersMainContainer}]`);\n        const selectedFiltersContainer = this.querySelector(`[${ATTRIBUTES.dataSelectedFiltersContainer}]`);\n        const buttonTemplate = this.querySelector(`[${ATTRIBUTES.dataSelectedFilterButtonTemplate}]`);\n\n        const filterContainerElements = this.querySelectorAll(`[${ATTRIBUTES.dataFilterContainerType}]`);\n        const filterContainers = {};\n\n        for (let i = 0; i < filterContainerElements.length; i += 1) {\n            const container = filterContainerElements[i];\n            const type = container.getAttribute(ATTRIBUTES.dataFilterContainerType);\n\n            if (container.hasAttribute('data-no-filter')) {\n                // eslint-disable-next-line no-continue\n                continue;\n            }\n\n            filterContainers[type] = container;\n        }\n\n        return {\n            selectedFiltersMainContainer,\n            selectedFiltersContainer,\n            buttonTemplate,\n            filterContainers\n        };\n    }\n\n    setListeners(activate) {\n        const method = activate ? 'addEventListener' : 'removeEventListener';\n\n        this[method]('click', this.clickHandler, false);\n    }\n}\n\nmodule.exports = {\n    name: ELEMENT_NAME,\n    component: StaffstartRefineBar\n};\n","'use strict';\n\nconst ELEMENT_NAME = 'staffstart-sorting';\n\nconst ATTRIBUTES = {\n    dataSortOrder: 'data-sort-order'\n};\n\nclass StaffstartSorting extends HTMLElement {\n    // Lifecycle methods.\n\n    constructor() {\n        super();\n\n        this.elements = {};\n        this.clickHandler = this.handleClick.bind(this);\n    }\n\n    connectedCallback() {\n        this.elements = this.getElements();\n        this.setListeners(true);\n    }\n\n    disconnectedCallback() {\n        this.setListeners(false);\n    }\n\n    // Public.\n\n    setSortOrder(sortOrder) {\n        const { buttons } = this.elements;\n\n        for (let i = 0; i < buttons.length; i += 1) {\n            const button = buttons[i];\n            const buttonSortOrder = button.getAttribute(ATTRIBUTES.dataSortOrder);\n\n            button.classList[sortOrder === buttonSortOrder ? 'add' : 'remove']('active');\n        }\n    }\n\n    // Event handling.\n\n    handleClick(event) {\n        const sortOrderButton = event.target.closest(`[${ATTRIBUTES.dataSortOrder}]`);\n        const sortOrder = sortOrderButton ? sortOrderButton.getAttribute(ATTRIBUTES.dataSortOrder) : null;\n\n        if (!sortOrder) {\n            return;\n        }\n\n        this.dispatchEvent(new CustomEvent('staffstart:change', {\n            bubbles: true,\n            detail: {\n                type: 'sorting',\n                sortOrder\n            }\n        }));\n    }\n\n    // Assistants.\n\n    getElements() {\n        return {\n            buttons: this.querySelectorAll(`[${ATTRIBUTES.dataSortOrder}]`)\n        };\n    }\n\n    setListeners(activate) {\n        const method = activate ? 'addEventListener' : 'removeEventListener';\n\n        this[method]('click', this.clickHandler, false);\n    }\n}\n\nmodule.exports = {\n    name: ELEMENT_NAME,\n    component: StaffstartSorting\n};\n","'use strict';\n\nconst { StaffstartFetcher } = require('./staffstartFetcher');\nconst ELEMENT_NAME = 'staffstart-tabs';\n\nconst ATTRIBUTES = {\n    dataClickAction: 'data-tab-click-action',\n    dataType: 'data-type',\n    dataFilled: 'data-filled',\n    dataUrl: 'data-url',\n    dataTabContent: 'data-tab-content'\n};\n\nclass StaffstartTabs extends StaffstartFetcher {\n    // Lifecycle methods.\n\n    constructor() {\n        super();\n\n        this.elements = { tabs: [], contentContainers: [] };\n\n        this.clickHandler = this.handleClick.bind(this);\n        this.changeHandler = this.handleChange.bind(this);\n    }\n\n    connectedCallback() {\n        this.elements = this.getElements();\n        this.setListeners(true);\n    }\n\n    disconnectedCallback() {\n        this.setListeners(false);\n    }\n\n    // Event handling.\n\n    handleChange(event) {\n        const detail = event.detail || {};\n\n        if (detail.type !== 'pagination' || typeof detail.page !== 'number') {\n            return;\n        }\n\n        const container = event.target.closest(`[${ATTRIBUTES.dataTabContent}]`);\n        const baseUrl = container ? container.getAttribute(ATTRIBUTES.dataUrl) : null;\n\n        if (!baseUrl) {\n            return;\n        }\n\n        const parameterPrefix = baseUrl.indexOf('?') > -1 ? '&' : '?';\n        const parameter = detail.page === 1 ? '' : parameterPrefix + 'page=' + detail.page;\n        const url = baseUrl + parameter;\n\n        const callback = (data) => {\n            const offsetTop = this.getOffset() - 100;\n\n            this.fillContainer(container, data);\n\n            // Small timeout seems to fix inconsistent scrolling in Safari Mobile.\n            setTimeout(() => {\n                window.scrollTo(0, offsetTop);\n            }, 5);\n        };\n\n        this.fetchData(\n            { ajaxUrl: url, pageUrl: url },\n            callback,\n            { showSpinner: true }\n        );\n    }\n\n    handleClick(event) {\n        const clickElement = event.target.closest(`[${ATTRIBUTES.dataClickAction}]`);\n        const clickAction = clickElement ? clickElement.getAttribute(ATTRIBUTES.dataClickAction) : null;\n\n        if (clickAction === 'selectTab') {\n            this.selectTab(clickElement);\n        }\n    }\n\n    // Assistants.\n\n    getOffset() {\n        let element = this;\n        let offset = 0;\n\n        while (element.offsetParent) {\n            offset += element.offsetTop;\n            element = element.offsetParent;\n        }\n\n        return offset;\n    }\n\n    selectTab(clickElement) {\n        const typeElement = clickElement.closest(`[${ATTRIBUTES.dataType}]`);\n        const activeType = typeElement ? typeElement.getAttribute(ATTRIBUTES.dataType) : null;\n\n        if (!activeType) {\n            return;\n        }\n\n        const activeIndex = this.getTabIndex(activeType);\n        const elements = this.elements;\n        const activeClass = 'active';\n        const separatorClass = 'separator';\n\n        let activeContentContainer;\n\n        for (let i = 0; i < elements.tabs.length; i += 1) {\n            const tab = elements.tabs[i];\n            const contentContainer = elements.contentContainers[i];\n\n            const activeTab = i === activeIndex;\n            const nextActiveTab = i + 1 === activeIndex;\n            const lastTab = i === elements.tabs.length - 1;\n\n            const method = activeTab ? 'add' : 'remove';\n            tab.classList[method](activeClass);\n            contentContainer.classList[method](activeClass);\n\n            if (activeTab || nextActiveTab || lastTab) {\n                tab.classList.remove(separatorClass);\n            } else {\n                tab.classList.add(separatorClass);\n            }\n\n            if (activeTab) {\n                activeContentContainer = contentContainer;\n            }\n        }\n\n        this.fetchContainerData(activeContentContainer);\n    }\n\n    fetchContainerData(contentContainer) {\n        if (!contentContainer) {\n            return;\n        }\n\n        const isFilled = contentContainer.getAttribute(ATTRIBUTES.dataFilled) === 'true';\n\n        if (isFilled) {\n            return;\n        }\n\n        const url = contentContainer.getAttribute(ATTRIBUTES.dataUrl);\n\n        if (!url) {\n            return;\n        }\n\n        this.fetchData(\n            { ajaxUrl: url, pageUrl: url },\n            this.fillContainer.bind(this, contentContainer),\n            { showSpinner: true }\n        );\n    }\n\n    // eslint-disable-next-line class-methods-use-this\n    fillContainer(contentContainer, data) {\n        const container = contentContainer;\n\n        container.setAttribute(ATTRIBUTES.dataFilled, 'true');\n        container.innerHTML = data;\n    }\n\n    getTabIndex(type) {\n        const tabs = this.elements.tabs;\n\n        for (let i = 0; i < tabs.length; i += 1) {\n            const tab = tabs[i];\n            const tabType = tab.getAttribute(ATTRIBUTES.dataType);\n\n            if (tabType === type) {\n                return i;\n            }\n        }\n\n        return -1;\n    }\n\n    getElements() {\n        return {\n            tabs: Array.from(this.querySelectorAll('.staffstart-tab')),\n            contentContainers: Array.from(this.querySelectorAll('.staffstart-tab-content'))\n        };\n    }\n\n    setListeners(activate) {\n        const method = activate ? 'addEventListener' : 'removeEventListener';\n\n        this[method]('click', this.clickHandler, false);\n        this[method]('staffstart:subchange', this.changeHandler, false);\n    }\n}\n\nmodule.exports = {\n    name: ELEMENT_NAME,\n    component: StaffstartTabs\n};\n","'use strict';\n\n/**\n * Set URL.\n * @param {string} url - New URL.\n * @param {Object?} state - URL State.\n */\nfunction updateUrl(url, state = { urlSet: true }) {\n    try {\n        window.history.pushState(state, document.title, url);\n    } catch (e) {\n        if (window.console) {\n            window.console.error(`Error on setting page url to ${url}`);\n        }\n    }\n}\n\n/**\n * Check if user clicks with the intent of opening a new tab.\n * @param {Event} event - Click event.\n * @returns {boolean} - Yes or no.\n */\nfunction isOpeningNewTab(event) {\n    const isCtrlPressed = event.ctrlKey;\n    const isMetaKeyPressed = event.metaKey;\n\n    return Boolean(isCtrlPressed || isMetaKeyPressed);\n}\n\nmodule.exports = {\n    updateUrl,\n    isOpeningNewTab\n};\n","'use strict';\n\nmodule.exports = function debounce(fn, delay) {\n    var timeoutID = null;\n    return function () {\n        clearTimeout(timeoutID);\n        var args = arguments;\n        var that = this;\n        timeoutID = setTimeout(function () {\n            fn.apply(that, args);\n        }, delay);\n    };\n};\n","'use strict';\n\n/**\n * Parse JSON string safely.\n * @param {string} data - Data to parse.\n * @returns {Object} - Data and error.\n */\nfunction safeJSONParse(data) {\n    const output = {\n        result: null,\n        error: null\n    };\n\n    try {\n        output.result = JSON.parse(data);\n    } catch (e) {\n        output.error = e;\n    }\n\n    return output;\n}\n\nmodule.exports = {\n    safeJSONParse\n};\n","'use strict';\n\n/**\n * Decode a URI component in a safe way.\n * @param  {string} value - value\n * @returns {string} - Decoded value.\n */\nfunction safeDecodeUriComponent(value) {\n    try {\n        return decodeURIComponent(value);\n    } catch (e) {\n        return '';\n    }\n}\n\n/**\n * Get search params from url.\n * @param {string} url - URL.\n * @returns {Object} - URL paarams.\n */\nfunction getSearchParams(url) {\n    if (typeof url !== 'string') {\n        return {};\n    }\n\n    const queryMatch = url.match(/\\?([^#]+)/);\n\n    if (!queryMatch) {\n        return {};\n    }\n\n    return queryMatch[1].split('&').reduce(function (result, part) {\n        const keyValue = part.split('=');\n        const key = safeDecodeUriComponent(keyValue[0]);\n        const value = safeDecodeUriComponent(keyValue[1] || '');\n\n        if (key) {\n            // eslint-disable-next-line no-param-reassign\n            result[key] = value || '';\n        }\n\n        return result;\n    }, {});\n}\n\nmodule.exports = {\n    getSearchParams: getSearchParams,\n    safeDecodeUriComponent: safeDecodeUriComponent\n};\n"],"sourceRoot":""}