{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./js/vendor/polyfills/polyfill-nodelist-foreach.js","webpack:///./js/vendor/polyfills/polyfill-remove.js","webpack:///./js/vendor/polyfills/polyfill-custom-event.js","webpack:///./js/vendor/polyfills/polyfill-form-data.js","webpack:///./js/utilities/extend/u-extend.js","webpack:///./js/core/component.js","webpack:///./js/utilities/serialize/u-serialize.js","webpack:///./js/utilities/ajax/u-ajax.js","webpack:///./components/spinner/c-spinner.js","webpack:///./components/filter/c-filter.js","webpack:///./js/utilities/random-id/u-random-id.js","webpack:///./js/utilities/is-iterable/u-is-iterable.js","webpack:///./components/tabs/c-tabs.js","webpack:///./components/search/c-search.js","webpack:///./js/utilities/translate/u-translate.js","webpack:///./components/icon/c-icon.js","webpack:///./js/utilities/collapse/u-collapse.js","webpack:///./components/accordion/c-accordion.js","webpack:///./components/quick-search/c-quick-search.js","webpack:///./js/utilities/throttle/u-throttle.js","webpack:///./components/responsive-table/c-responsive-table.js","webpack:///./main.js","webpack:///./components/expand-area/c-expand-area.js","webpack:///./components/form-elements/amount/c-amount.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","window","NodeList","forEach","callback","thisArg","this","length","Element","CharacterData","DocumentType","item","configurable","writable","parentNode","removeChild","CustomEvent","event","params","bubbles","cancelable","detail","undefined","evt","document","createEvent","initCustomEvent","Event","FormData","keys","global","self","_FormData","_send","XMLHttpRequest","send","_fetch","Request","fetch","stringTag","map","WeakMap","wm","arrayFrom","Array","from","obj","slice","Blob","File","a","b","blob","lastModified","Date","defineProperties","lastModifiedDate","toString","normalizeValue","filename","type","stringify","arguments","TypeError","normalizeArgs","FormDataPolyfill","form","set","elm","elements","disabled","file","files","append","opt","options","selected","checked","push","fd","boundary","Math","random","chunks","iterator","entries","arr","orig","apply","data","setRequestHeader","input","init","body","extend","args","extended","deep","merge","prop","settings","_defaultSettings","_init","debug","message","console","log","serialize","prefix","str","formData","pair","k","v","encodeURIComponent","join","method","url","dataType","headers","onSuccess","onError","onComplete","Promise","resolve","reject","_request","Error","request","addHeader","open","_setHeaders","onreadystatechange","readyState","status","_onLoad","_onError","header","error","statusText","response","_formatResponse","_formatJSON","responseText","JSON","parse","e","defaults","className","style","text","spinnerGraphics","visuallyHiddenClassName","hideSpinnerText","doneClassName","doneText","spinnerElement","createElement","setAttribute","classList","add","innerHTML","trim","textElement","textContent","appendChild","_createDoneElement","documentElement","spinnerInstance","_doneElement","_updateDoneElement","element","filterItemsType","formSelector","submitSelector","targetAttribute","updateTargetSelector","target","querySelector","getAttribute","updateTarget","filters","querySelectorAll","submit","_prerequisitesMet","_log","filter","addEventListener","_submitFilter","display","hasAttribute","spinner","displaySpinner","setTimeout","clearTimeout","remove","newContent","dispatchEvent","context","overwrite","el","id","replace","hideTitle","updateURL","enabledTabsClass","loadOnDemandClass","tabpanelSelector","tabpanelTitleSelector","tabpanelContentClass","activeTabpanelSelector","tabListClass","tabListClassVariant","tabListItemClass","tabListTriggerClass","contains","matches","msMatchesSelector","tabpanelElements","tabpanel","loadOnDemand","extraClass","linkList","_create","_initSelectTab","tabPanelToDisplay","hash","location","tabpanels","tablist","tabpanelElement","index","tab","trigger","linkContent","href","_tabClickEvent","_tabKeydownEvent","titleElement","insertBefore","firstChild","displayTabpanel","path","substring","indexOf","pathname","triggers","prevTrigger","click","query","URLSearchParams","search","history","replaceState","tabpanelContent","ajaxUrlSuffix","outerHTML","pushState","tabTrigger","previous","previousElementSibling","lastChild","next","nextElementSibling","preventDefault","_getFirstTab","_getLastTab","focus","tabParam","setFocus","removeAttribute","category","searchForm","searchHiddenInput","tabs","found","translations","lostInTranslation","warn","parts","split","placeholderRegExp","placeholderMatch","placeholderCount","missingVariableCount","exec","placeholderIndex","variables","icon","size","extra_class","wrapper","isArray","then","catch","expanded","icons","selectors","content","classNames","collapsed","button","strings","show","hide","structuralStrings","structuralClass","on","beforeInit","beforeToggle","beforeExpand","beforeCollapse","toggle","expand","collapse","prepareCssAnimation","headerElement","cssAnimationIsPrepared","height","buttonAction","isExpanded","_initIcon","_updateIcon","iconURL","state","_getIcon","isCollapsed","sectionHeight","scrollHeight","elementTransition","transition","requestAnimationFrame","_prepareCssAnimationExpand","_prepareCssAnimationCollapse","accordions","accordion","dataset","initiated","iconExtraClass","quickSearch","destination","inputSearch","inputSearchForm","motionQuery","matchMedia","timer","closeButton","closeButtonIcon","slideOut","removeResults","hits","hitsText","searchPageLink","searchPageLinkWrapper","firstInit","errorMsg","fn","th","scope","threshhold","last","deferTimer","now","_responsiveTables","classNamePrefix","table","breakWidth","nodeName","toLowerCase","mq","_updateTable","rows","tr","cell","rowspan","parseInt","nextRow","newCell","cloneNode","columnHeaders","cells","columnOffset","fakeHeader","clientWidth","_addRoles","_cloneHeaderCells","_insertFakeHeaders","_removeRoles","_restoreHeaderCells","_removeFakeHeaders","expandAreas","expandArea","areaClass","areaCollapsedClass","areaExpandedClass","buttonClasses","buttonExpandText","buttonCollapseText","area","areaId","buttonClass","createButton","change","direction","buttonIcon","amounts","amount","decreaseBtn","increaseBtn"],"mappings":"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","file":"main.min.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 = 4);\n","/* from:https://developer.mozilla.org/en-US/docs/Web/API/NodeList/forEach#Polyfill */\nif (window.NodeList && !NodeList.prototype.forEach) {\n\tNodeList.prototype.forEach = function (callback, thisArg) {\n\t\tthisArg = thisArg || window;\n\t\tfor (var i = 0; i < this.length; i++) {\n\t\t\tcallback.call(thisArg, this[i], i, this);\n\t\t}\n\t};\n}","/* from:https://developer.mozilla.org/en-US/docs/Web/API/ChildNode/remove#Polyfill */\n(function (arr) {\n\tarr.forEach(function (item) {\n\t\tif (item.hasOwnProperty('remove')) {\n\t\t\treturn;\n\t\t}\n\t\tObject.defineProperty(item, 'remove', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: true,\n\t\t\twritable: true,\n\t\t\tvalue: function remove() {\n\t\t\t\tif (this.parentNode !== null)\n\t\t\t\t\tthis.parentNode.removeChild(this);\n\t\t\t}\n\t\t});\n\t});\n})([Element.prototype, CharacterData.prototype, DocumentType.prototype]);","/* from:https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent#Polyfill */\n(function () {\n\n\tif ( typeof window.CustomEvent === \"function\" ) return false;\n\n\tfunction CustomEvent ( event, params ) {\n\t\tparams = params || { bubbles: false, cancelable: false, detail: undefined };\n\t\tvar evt = document.createEvent( 'CustomEvent' );\n\t\tevt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail );\n\t\treturn evt;\n\t }\n\n\tCustomEvent.prototype = window.Event.prototype;\n\n\twindow.CustomEvent = CustomEvent;\n})();","/* from:https://github.com/jimmywarting/FormData */\nif (typeof FormData === 'undefined' || !FormData.prototype.keys) {\n const global = typeof window === 'object'\n ? window : typeof self === 'object'\n ? self : this\n\n // keep a reference to native implementation\n const _FormData = global.FormData\n\n // To be monkey patched\n const _send = global.XMLHttpRequest && global.XMLHttpRequest.prototype.send\n const _fetch = global.Request && global.fetch\n\n // Unable to patch Request constructor correctly\n // const _Request = global.Request\n // only way is to use ES6 class extend\n // https://github.com/babel/babel/issues/1966\n\n const stringTag = global.Symbol && Symbol.toStringTag\n const map = new WeakMap\n const wm = o => map.get(o)\n const arrayFrom = Array.from || (obj => [].slice.call(obj))\n\n // Add missing stringTags to blob and files\n if (stringTag) {\n if (!Blob.prototype[stringTag]) {\n Blob.prototype[stringTag] = 'Blob'\n }\n\n if ('File' in global && !File.prototype[stringTag]) {\n File.prototype[stringTag] = 'File'\n }\n }\n\n // Fix so you can construct your own File\n try {\n new File([], '')\n } catch (a) {\n global.File = function(b, d, c) {\n const blob = new Blob(b, c)\n const t = c && void 0 !== c.lastModified ? new Date(c.lastModified) : new Date\n\n Object.defineProperties(blob, {\n name: {\n value: d\n },\n lastModifiedDate: {\n value: t\n },\n lastModified: {\n value: +t\n },\n toString: {\n value() {\n return '[object File]'\n }\n }\n })\n\n if (stringTag) {\n Object.defineProperty(blob, stringTag, {\n value: 'File'\n })\n }\n\n return blob\n }\n }\n\n function normalizeValue([value, filename]) {\n if (value instanceof Blob)\n // Should always returns a new File instance\n // console.assert(fd.get(x) !== fd.get(x))\n value = new File([value], filename, {\n type: value.type,\n lastModified: value.lastModified\n })\n\n return value\n }\n\n function stringify(name) {\n if (!arguments.length)\n throw new TypeError('1 argument required, but only 0 present.')\n\n return [name + '']\n }\n\n function normalizeArgs(name, value, filename) {\n if (arguments.length < 2)\n throw new TypeError(\n `2 arguments required, but only ${arguments.length} present.`\n )\n\n return value instanceof Blob\n // normalize name and filename if adding an attachment\n ? [name + '', value, filename !== undefined\n ? filename + '' // Cast filename to string if 3th arg isn't undefined\n : typeof value.name === 'string' // if name prop exist\n ? value.name // Use File.name\n : 'blob'] // otherwise fallback to Blob\n\n // If no attachment, just cast the args to strings\n : [name + '', value + '']\n }\n\n /**\n * @implements {Iterable}\n */\n class FormDataPolyfill {\n\n /**\n * FormData class\n *\n * @param {HTMLElement=} form\n */\n constructor(form) {\n map.set(this, Object.create(null))\n\n if (!form)\n return this\n\n for (let elm of arrayFrom(form.elements)) {\n if (!elm.name || elm.disabled) continue\n\n if (elm.type === 'file')\n for (let file of elm.files)\n this.append(elm.name, file)\n else if (elm.type === 'select-multiple' || elm.type === 'select-one')\n for (let opt of arrayFrom(elm.options))\n !opt.disabled && opt.selected && this.append(elm.name, opt.value)\n else if (elm.type === 'checkbox' || elm.type === 'radio') {\n if (elm.checked) this.append(elm.name, elm.value)\n } else\n this.append(elm.name, elm.value)\n }\n }\n\n\n /**\n * Append a field\n *\n * @param {String} name field name\n * @param {String|Blob|File} value string / blob / file\n * @param {String=} filename filename to use with blob\n * @return {Undefined}\n */\n append(name, value, filename) {\n const map = wm(this)\n\n if (!map[name])\n map[name] = []\n\n map[name].push([value, filename])\n }\n\n\n /**\n * Delete all fields values given name\n *\n * @param {String} name Field name\n * @return {Undefined}\n */\n delete(name) {\n delete wm(this)[name]\n }\n\n\n /**\n * Iterate over all fields as [name, value]\n *\n * @return {Iterator}\n */\n *entries() {\n const map = wm(this)\n\n for (let name in map)\n for (let value of map[name])\n yield [name, normalizeValue(value)]\n }\n\n /**\n * Iterate over all fields\n *\n * @param {Function} callback Executed for each item with parameters (value, name, thisArg)\n * @param {Object=} thisArg `this` context for callback function\n * @return {Undefined}\n */\n forEach(callback, thisArg) {\n for (let [name, value] of this)\n callback.call(thisArg, value, name, this)\n }\n\n\n /**\n * Return first field value given name\n * or null if non existen\n *\n * @param {String} name Field name\n * @return {String|File|null} value Fields value\n */\n get(name) {\n const map = wm(this)\n return map[name] ? normalizeValue(map[name][0]) : null\n }\n\n\n /**\n * Return all fields values given name\n *\n * @param {String} name Fields name\n * @return {Array} [{String|File}]\n */\n getAll(name) {\n return (wm(this)[name] || []).map(normalizeValue)\n }\n\n\n /**\n * Check for field name existence\n *\n * @param {String} name Field name\n * @return {boolean}\n */\n has(name) {\n return name in wm(this)\n }\n\n\n /**\n * Iterate over all fields name\n *\n * @return {Iterator}\n */\n *keys() {\n for (let [name] of this)\n yield name\n }\n\n\n /**\n * Overwrite all values given name\n *\n * @param {String} name Filed name\n * @param {String} value Field value\n * @param {String=} filename Filename (optional)\n * @return {Undefined}\n */\n set(name, value, filename) {\n wm(this)[name] = [[value, filename]]\n }\n\n\n /**\n * Iterate over all fields\n *\n * @return {Iterator}\n */\n *values() {\n for (let [name, value] of this)\n yield value\n }\n\n\n /**\n * Return a native (perhaps degraded) FormData with only a `append` method\n * Can throw if it's not supported\n *\n * @return {FormData}\n */\n ['_asNative']() {\n const fd = new _FormData\n\n for (let [name, value] of this)\n fd.append(name, value)\n\n return fd\n }\n\n\n /**\n * [_blob description]\n *\n * @return {Blob} [description]\n */\n ['_blob']() {\n const boundary = '----formdata-polyfill-' + Math.random()\n const chunks = []\n\n for (let [name, value] of this) {\n chunks.push(`--${boundary}\\r\\n`)\n\n if (value instanceof Blob) {\n chunks.push(\n `Content-Disposition: form-data; name=\"${name}\"; filename=\"${value.name}\"\\r\\n`,\n `Content-Type: ${value.type || 'application/octet-stream'}\\r\\n\\r\\n`,\n value,\n '\\r\\n'\n )\n } else {\n chunks.push(\n `Content-Disposition: form-data; name=\"${name}\"\\r\\n\\r\\n${value}\\r\\n`\n )\n }\n }\n\n chunks.push(`--${boundary}--`)\n\n return new Blob(chunks, {type: 'multipart/form-data; boundary=' + boundary})\n }\n\n\n /**\n * The class itself is iterable\n * alias for formdata.entries()\n *\n * @return {Iterator}\n */\n [Symbol.iterator]() {\n return this.entries()\n }\n\n\n /**\n * Create the default string description.\n *\n * @return {String} [object FormData]\n */\n toString() {\n return '[object FormData]'\n }\n }\n\n\n if (stringTag) {\n /**\n * Create the default string description.\n * It is accessed internally by the Object.prototype.toString().\n *\n * @return {String} FormData\n */\n FormDataPolyfill.prototype[stringTag] = 'FormData'\n }\n\n const decorations = [\n ['append', normalizeArgs],\n ['delete', stringify],\n ['get', stringify],\n ['getAll', stringify],\n ['has', stringify],\n ['set', normalizeArgs]\n ]\n\n decorations.forEach(arr => {\n const orig = FormDataPolyfill.prototype[arr[0]]\n FormDataPolyfill.prototype[arr[0]] = function() {\n return orig.apply(this, arr[1].apply(this, arrayFrom(arguments)))\n }\n })\n\n // Patch xhr's send method to call _blob transparently\n if (_send) {\n XMLHttpRequest.prototype.send = function(data) {\n // I would check if Content-Type isn't already set\n // But xhr lacks getRequestHeaders functionallity\n // https://github.com/jimmywarting/FormData/issues/44\n if (data instanceof FormDataPolyfill) {\n const blob = data['_blob']()\n this.setRequestHeader('Content-Type', blob.type)\n _send.call(this, blob)\n } else {\n _send.call(this, data)\n }\n }\n }\n\n // Patch fetch's function to call _blob transparently\n if (_fetch) {\n const _fetch = global.fetch\n\n global.fetch = function(input, init) {\n if (init && init.body && init.body instanceof FormDataPolyfill) {\n init.body = init.body['_blob']()\n }\n\n return _fetch(input, init)\n }\n }\n\n global['FormData'] = FormDataPolyfill\n}\n","/**\n * ES6 JS-module translation of https://gomakethings.com/vanilla-javascript-version-of-jquery-extend/\n *\n * Merge objects together\n * @param {mixed} args\n * @return {Object} merged object\n */\nconst extend = function (...args) {\n\n\t// Variables\n\tlet extended = {};\n\tlet deep \t = false;\n\tlet i \t\t = 0;\n\tconst length = args.length;\n\n\t// Check if a deep merge\n\tif (Object.prototype.toString.call(args[0]) === '[object Boolean]') {\n\t\tdeep = args[0];\n\t\ti++;\n\t}\n\n\t/**\n\t * Merge the object into the extended object\n\t * @param {Object} obj\n\t */\n\tconst merge = function (obj) {\n\t\tfor (let prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\t// If deep merge and property is an object, merge properties\n\t\t\t\tif (deep && Object.prototype.toString.call(obj[prop]) === '[object Object]') {\n\t\t\t\t\textended[prop] = extend(true, extended[prop], obj[prop]);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\textended[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Loop through each object and conduct a merge\n\tfor (; i < length; i++) {\n\t\tlet obj = args[i];\n\t\tmerge(obj);\n\t}\n\n\treturn extended;\n\n};\n\nexport default extend;","import extend from '../utilities/extend/u-extend.js';\n\nexport default class Component {\n\tconstructor (settings = {}) {\n\t\tthis.settings = extend(true, this._defaultSettings(), settings);\n\n\t\tthis._init();\n\t}\n\t_defaultSettings () {\n\t\treturn {\n\t\t\tdebug: false\n\t\t};\n\t}\n\t_init () {}\n\t_log (message = '') {\n\t\tif (!this.settings.debug) {\n\t\t\treturn;\n\t\t}\n\t\tconsole.log(message);\n\t}\n}","/* Serialize label/value-object or FormData-object to querystring */\n\nimport '../../vendor/polyfills/polyfill-form-data.js';\n\n/**\n * Serialize label/value-object or FormData-object to querystring\n * @param {Object} obj label/value-object or FormData-object\n * @param {String} prefix Prefix\n * @return {String} Serialized querystring\n */\nconst serialize = (obj, prefix) => {\n\tlet str = [];\n\tlet p;\n\n\t// If the object is a FormData instance, then convert it into a label/value object\n\tif (obj instanceof FormData) {\n\t\tlet formData = obj;\n\t\tobj = {};\n\t\tfor (var pair of formData.entries()) {\n\t\t\tobj[pair[0]] = pair[1];\n\t\t}\n\t}\n\n\tfor (p in obj) {\n\t\tif (Object.prototype.hasOwnProperty.call(obj, p)) {\n\t\t\tlet k = prefix ? prefix + '[' + p + ']' : p;\n\t\t\tlet v = obj[p];\n\t\t\tstr.push((v !== null && typeof v === 'object') ?\n\t\t\t\tserialize(v, k) :\n\t\t\t\tencodeURIComponent(k) + '=' + encodeURIComponent(v));\n\t\t}\n\t}\n\treturn str.join('&');\n};\n\nexport default serialize;\n","import extend from '../extend/u-extend.js';\nimport serialize from '../serialize/u-serialize.js';\n\nclass Ajax {\n\t/**\n\t * [constructor description]\n\t * @param {Object} settings Usersettings\n\t */\n\tconstructor (settings = {}) {\n\t\t// Default settings\n\t\tlet defaults = {\n\t\t\tmethod: 'GET',\n\t\t\turl: false,\n\t\t\tdataType: 'raw',\n\t\t\theaders: {\n\t\t\t\t'X-Requested-With': 'XMLHttpRequest'\n\t\t\t},\n\t\t\tdata: null,\n\t\t\tonSuccess: () => {},\n\t\t\tonError: () => {},\n\t\t\tonComplete: () => {}\n\t\t};\n\n\t\t// Merge user settings onto default settings\n\t\tthis.settings = extend(true, defaults, settings);\n\t}\n\n\t/**\n\t * Add header to XHR-request\n\t * @param {String} key Header key\n\t * @param {String} value Header value\n\t */\n\taddHeader (key, value = false) {\n\t\tthis.settings.headers[key] = value;\n\t}\n\n\t/**\n\t * Remove header from XHR-request\n\t * @param {[type]} key Header key to remove\n\t */\n\tremoveHeader (key) {\n\t\tdelete this.settings.headers[key];\n\t}\n\n\t/**\n\t * Start request and return Promise\n\t * @return {Promise}\n\t */\n\tsend () {\n\t\t// Return error if no URL is set\n\t\tif (!this.settings.url) {\n\t\t\treturn new Error('No URL is specified');\n\t\t}\n\n\t\t// Start XHR request\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis._request(resolve, reject);\n\t\t});\n\t}\n\n\t/**\n\t * Make the XHR-reqyest\n\t * @param {Object} resolve Promise resolve\n\t * @param {Object} reject Promise reject\n\t */\n\t_request (resolve, reject) {\n\t\t// Create XHR instance\n\t\tthis.request = new XMLHttpRequest();\n\n\t\tlet url = this.settings.url;\n\t\tlet data = null;\n\n\t\t// Parse data and setting headers\n\t\tif (this.settings.data) {\n\t\t\tswitch (this.settings.method) {\n\t\t\t\tcase 'POST':\n\t\t\t\t\tthis.addHeader('Content-Type', 'application/x-www-form-urlencoded');\n\t\t\t\t\tdata = serialize(this.settings.data);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\turl = url + '?' + serialize(this.settings.data);\n\t\t\t}\n\t\t}\n\n\t\t// Open XHR request\n\t\tthis.request.open(this.settings.method, url, true);\n\n\t\t// Set request headers\n\t\tthis._setHeaders();\n\n\t\tthis.request.onreadystatechange = () => {\n\t\t\tif (this.request.readyState === 4) {\n\t\t\t\tif (this.request.status === 200) {\n\t\t\t\t\tthis._onLoad(resolve, reject);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis._onError(reject);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// Send XHR request\n\t\tthis.request.send(data);\n\t}\n\n\t/**\n\t * Set added request headers to XHR instance\n\t */\n\t_setHeaders () {\n\t\tfor (let header in this.settings.headers) {\n\t\t\tif (header && this.settings.headers[header]) {\n\t\t\t\tthis.request.setRequestHeader(header, this.settings.headers[header]);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Handle XHR-response\n\t * @param {Object} resolve Promise resolve\n\t * @param {Object} reject Promise reject\n\t */\n\t_onLoad (resolve, reject) {\n\t\t// Reject Promise with error if statuscode isn't 200\n\t\tif (this.request.status !== 200) {\n\t\t\t// Create a error\n\t\t\tthis.error = new Error(`${this.request.status} ${this.request.statusText}`);\n\n\t\t\t// Call on error callback\n\t\t\tif (typeof this.settings.onComplete === 'function') {\n\t\t\t\tthis.settings.onError(this.error, this);\n\t\t\t}\n\n\t\t\t// Call on complete callback\n\t\t\tif (typeof this.settings.onComplete === 'function') {\n\t\t\t\tthis.settings.onComplete(this.error, this);\n\t\t\t}\n\n\t\t\t// Reject Promise\n\t\t\treject(this.error);\n\t\t}\n\n\t\t// Format response\n\t\tlet response = this._formatResponse();\n\n\t\t// Call on success callback\n\t\tif (typeof this.settings.onSuccess === 'function') {\n\t\t\tthis.settings.onSuccess(response, this);\n\t\t}\n\n\t\t// Call on complete callback\n\t\tif (typeof this.settings.onComplete === 'function') {\n\t\t\tthis.settings.onComplete(response, this);\n\t\t}\n\n\t\t// Resolve Promies with formated response\n\t\tresolve(response);\n\t}\n\n\t/**\n\t * Handle XHR-error\n\t * @param {Object} reject Promise reject\n\t */\n\t_onError (reject) {\n\t\t// Create a error\n\t\tthis.error = new Error(`${this.request.status} ${this.request.statusText}`);\n\n\t\t// Call on error callback\n\t\tif (typeof this.settings.onError === 'function') {\n\t\t\tthis.settings.onError(this.error, this);\n\t\t}\n\n\t\t// Call on complete callback\n\t\tif (typeof this.settings.onComplete === 'function') {\n\t\t\tthis.settings.onComplete(this.error, this);\n\t\t}\n\n\t\t// Reject Promise on XHR error\n\t\treject(this.error);\n\t}\n\n\t/**\n\t * Format the XHR response\n\t * @return {Mixed} Formated response\n\t */\n\t_formatResponse () {\n\t\t// Return format depending on dataType\n\t\tswitch (this.settings.dataType) {\n\t\t\tcase 'json':\n\t\t\t\treturn this._formatJSON(this.request.responseText);\n\t\t}\n\t\treturn this.request.responseText;\n\t}\n\n\t/**\n\t * [_formatJSON description]\n\t * @param {String} data JSON string\n\t * @return {Mixed}\n\t */\n\t_formatJSON (data) {\n\t\ttry {\n\t\t\treturn JSON.parse(data);\n\t\t}\n\t\tcatch (e) {\n\t\t\treturn new Error('JSON parse error');\n\t\t}\n\t}\n}\n\nexport default function (settings = {}) {\n\tlet request = new Ajax(settings);\n\n\treturn request.send();\n}","/**\n * Spinner module.\n * @module\n */\n// Import dependencies\nimport extend from '../../js/utilities/extend/u-extend.js';\n\n/**\n * Class that creates a spinner.\n */\nclass Spinner {\n\n\t/**\n\t * Constructor, merges settings and creates spinner markup.\n\t * @param {object} [settings] Configuration object.\n\t * @param {string} [settings.className=c-spinner] - The class name used for the generated element.\n\t * @param {string} [settings.style=double-bounce] - A selector matching the top level items in the menu.\n\t * @param {!string} [settings.text=Please wait] - A selector matching the link in a top level item. Must not be set to a falsy value.\n\t * @param {string} [settings.spinnerGraphics] - An HTML string that will represent any visual graphics. The default is `\n
\n\t
\n\t
\n
`. This can be changed to any HTML string you like, or set to the empty string if you don’t need it.\n\t * @param {string} [settings.visuallyHiddenClassName=t-visually-hidden] - A class name added to the element containing the text if {@link hideSpinnerText} is set to true.\n\t * @param {boolean} [settings.hideSpinnerText=false] - If true will visually hide the spinner text.\n\t * @param {string} [settings.doneClassName=t-visually-hidden] - A class name added to the done element, if one is inserted.\n\t * @param {string} [settings.doneText=Done] - The text used in the done element. Set to a falsy value if a done element isn’t needed.\n\t */\n\tconstructor (settings = {}) {\n\t\t// Default settings\n\t\tthis.defaults = {\n\t\t\tclassName: 'c-spinner',\n\t\t\tstyle: 'double-bounce',\n\t\t\ttext: 'Please wait',\n\t\t\tspinnerGraphics: `\n
\n\t
\n\t
\n
`,\n\t\t\tvisuallyHiddenClassName: 't-visually-hidden',\n\t\t\thideSpinnerText: false,\n\t\t\tdoneClassName: 't-visually-hidden',\n\t\t\tdoneText: 'Done'\n\t\t};\n\n\t\t// Merge settings\n\t\tthis.settings = extend(this.defaults, settings);\n\n\t\t// Create the spinner container element\n\t\tthis.spinnerElement = document.createElement('div');\n\t\tthis.spinnerElement.setAttribute('role', 'alert');\n\t\tthis.spinnerElement.classList.add(this.settings.className);\n\t\tif (this.settings.style) {\n\t\t\tthis.spinnerElement.classList.add(`${this.settings.className}--${this.settings.style}`);\n\t\t}\n\n\t\t// Insert the graphics markup\n\t\tthis.spinnerElement.innerHTML = this.settings.spinnerGraphics;\n\n\t\t// Insert the text\n\t\tif (!this.settings.text || this.settings.text.trim() === '') {\n\t\t\tthrow new Error(`The value of the text parameter must be a non-empty string. The default value is “${this.defaults.text}” and you set it to “${this.settings.text}”.`);\n\t\t}\n\t\tthis.textElement = document.createElement('div');\n\t\tthis.textElement.classList.add(`${this.settings.className}__text`);\n\t\tthis.textElement.textContent = this.settings.text;\n\t\tif (this.settings.hideSpinnerText) {\n\t\t\tthis.textElement.classList.add(this.settings.visuallyHiddenClassName);\n\t\t}\n\t\tthis.spinnerElement.appendChild(this.textElement);\n\t\tSpinner._createDoneElement(this);\n\t}\n\n\t/**\n\t * Get the Spinner DOM structure.\n\t * @return {Node} Spinner DOM structure.\n\t */\n\tget spinner () {\n\t\treturn this.spinnerElement;\n\t}\n\n\t/**\n\t * Append the spinner element to the body element.\n\t */\n\tinsert () {\n\t\tdocument.documentElement.appendChild(this.spinnerElement);\n\t}\n\n\t/**\n\t * Create a visually hidden element that can be used to notify screen\n\t * reader users when the spinner is removed.\n\t * This method is static since we only want one of these elements to\n\t * exist at any time.\n\t * @private\n\t */\n\tstatic _createDoneElement (spinnerInstance) {\n\t\t// Remove the element if it exists\n\t\tif (this._doneElement) {\n\t\t\tthis._doneElement.parentNode.removeChild(this._doneElement);\n\t\t\tdelete this._doneElement;\n\t\t}\n\n\t\t// Only create the element if the instance supplies text for “done”\n\t\tif (spinnerInstance.settings.doneText) {\n\t\t\tthis._doneElement = document.createElement('div');\n\t\t\tthis._doneElement.classList.add(spinnerInstance.settings.visuallyHiddenClassName);\n\t\t\tthis._doneElement.setAttribute('aria-live', 'polite');\n\t\t\tdocument.documentElement.appendChild(this._doneElement);\n\t\t}\n\t}\n\n\t/**\n\t * Update the text of _doneElement.\n\t * This method is static since we only want one of these elements to\n\t * exist at any time.\n\t * @private\n\t */\n\tstatic _updateDoneElement (spinnerInstance) {\n\t\tif (this._doneElement && spinnerInstance.settings.doneText) {\n\t\t\tthis._doneElement.textContent = spinnerInstance.settings.doneText;\n\t\t}\n\t}\n\n\t/**\n\t * Remove the spinner element from the DOM.\n\t */\n\tremove () {\n\t\t// Check that this.spinnerElement is actually in the DOM first\n\t\tif (this.spinnerElement.parentNode) {\n\t\t\tthis.spinnerElement.parentNode.removeChild(this.spinnerElement);\n\t\t}\n\t\tSpinner._updateDoneElement(this);\n\t}\n}\n\nexport default Spinner;\n","// Import dependencies\nimport Component from '../../js/core/component.js';\nimport extend from '../../js/utilities/extend/u-extend.js';\nimport '../../js/vendor/polyfills/polyfill-nodelist-foreach.js';\nimport ajax from '../../js/utilities/ajax/u-ajax.js';\nimport Spinner from '../spinner/c-spinner.js';\n\n/**\n * Class that […]\n * @extends Component\n */\nclass Filter extends Component {\n\t/**\n\t * Default settings\n\t * @return {object} Default settings\n\t */\n\t_defaultSettings () {\n\t\treturn {\n\t\t\telement: null,\n\t\t\tfilterItemsType: 'checkbox',\n\t\t\tformSelector: '.c-filter__form',\n\t\t\tsubmitSelector: '.c-filter__submit',\n\t\t\ttargetAttribute: 'data-filter-target',\n\t\t\tupdateTargetSelector: '.c-search-result__container'\n\t\t};\n\t}\n\n\t_prerequisitesMet () {\n\n\t\tthis.element = this.settings.element;\n\n\t\tthis.target = document.querySelector('#' + this.element.getAttribute(this.settings.targetAttribute));\n\n\t\tthis.updateTarget = this.target.querySelector(this.settings.updateTargetSelector);\n\n\t\tif (!this.updateTarget) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.filters = this.element.querySelectorAll('input[type=\"' + this.settings.filterItemsType + '\"]');\n\n\t\tif (!this.filters.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.form = this.element.querySelector(this.settings.formSelector);\n\n\t\tif (!this.form) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.submit = this.element.querySelector(this.settings.submitSelector);\n\n\t\tif (!this.submit) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Initialize the component\n\t */\n\t_init () {\n\t\tif(!this._prerequisitesMet()) {\n\t\t\treturn false;\n\t\t}\n\t\tthis._log('_init()');\n\n\t\tthis.filters.forEach((filter) => {\n\t\t\tfilter.addEventListener('change', this._submitFilter.bind(this));\n\t\t});\n\n\t\t// Hide the filter submit button\n\t\tthis.submit.style.display = 'none';\n\n\t}\n\n\t_submitFilter() {\n\n\t\t// Set aria-live to the target element\n\t\tif(!this.updateTarget.hasAttribute('aria-live')) {\n\t\t\tthis.updateTarget.setAttribute('aria-live', 'polite');\n\t\t}\n\n\t\tlet formData = new FormData(this.form);\n\n\t\t// Insert a spinner if loading the content takes more than 500 ms\n\t\tconst spinner = new Spinner();\n\t\tconst displaySpinner = setTimeout(() => {\n\t\t\tthis.target.appendChild(spinner.spinner);\n\t\t}, 500);\n\n\t\tajax({\n\t\t\turl: this.form.getAttribute('action'),\n\t\t\tmethod: 'GET',\n\t\t\tdata: formData,\n\t\t\tonComplete: () => {\n\t\t\t\t// Remove the spinner if it exists\n\t\t\t\tclearTimeout(displaySpinner);\n\t\t\t\tif (this.target.querySelector('.c-spinner')) {\n\t\t\t\t\tspinner.remove();\n\t\t\t\t}\n\t\t\t},\n\t\t\tonSuccess: (response) => {\n\t\t\t\t// Update with new content\n\t\t\t\tconst newContent = document.createElement('div');\n\t\t\t\tnewContent.innerHTML = response;\n\t\t\t\tthis.updateTarget.innerHTML = newContent.querySelector(this.settings.updateTargetSelector).innerHTML;\n\n\t\t\t\t// Init scripts for tabpanel content\n\t\t\t\tdocument.dispatchEvent(new CustomEvent('newcontent', {\n\t\t\t\t\tdetail: {\n\t\t\t\t\t\tcontext: this.target\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t}\n\t\t});\n\t}\n\n}\n\n/**\n * Initialisation function for the component\n * @param {NodeList|String} elements [Either a NodeList or a selector string]\n * @param {Object} settings [User settings]\n */\nconst initFilters = function (elements, settings = {}) {\n\tif (typeof elements === 'string') {\n\t\telements = document.querySelectorAll(elements);\n\t}\n\tfor (let filters of elements) {\n\t\tif (typeof filters.filters === 'undefined') {\n\t\t\tfilters.filters = new Filter(extend({element: filters}, settings));\n\t\t}\n\t}\n};\n\nexport {Filter};\nexport default initFilters;\n","// Import a polyfill for nodeList.forEach, eg. document.querySelectorAll('.foo').forEach()\nimport '../../vendor/polyfills/polyfill-nodelist-foreach.js';\n\nimport isIterable from '../is-iterable/u-is-iterable.js';\n\n/**\nGenerate a random id for the element(s)\n@param {Array} [elements] List of dom-elements to apply random ids on\n@param {Boolean} [overwrite] Whether to overwrite an exisiting id\n*/\nconst randomId = function (elements, overwrite = false, prefix = 'id') {\n\tif (!isIterable(elements)) {\n\t\telements = [elements];\n\t}\n\tprefix = typeof prefix === 'string' ? prefix : '';\n\telements.forEach(function (el) {\n\t\tlet id;\n\t\tif (overwrite || !el.getAttribute('id')) {\n\t\t\t// Loop just to be sure the id doesn't already exist in the DOM\n\t\t\tdo {\n\t\t\t\tid = prefix + Math.random().toString().replace(/\\D/, '');\n\t\t\t} while (document.querySelectorAll('#' + id).length);\n\t\t\tel.setAttribute('id', id);\n\t\t}\n\t});\n\n\treturn elements;\n};\n\nexport default randomId;","/**\n * Check if an object is iterable\n * @param {object} obj The object to check\n * @return {bool}\n */\nexport default function (obj) {\n\tif (obj === null) {\n\t\treturn false;\n\t}\n\treturn typeof obj[Symbol.iterator] === 'function';\n}","import Component from '../../js/core/component.js';\nimport extend from '../../js/utilities/extend/u-extend.js';\nimport generateRandomId from '../../js/utilities/random-id/u-random-id.js';\nimport ajax from '../../js/utilities/ajax/u-ajax.js';\nimport Spinner from '../spinner/c-spinner.js';\nimport searchCategory from '../search/c-search.js';\n\n// Import a polyfill for nodeList.forEach, eg. document.querySelectorAll('.foo').forEach()\nimport '../../js/vendor/polyfills/polyfill-nodelist-foreach.js';\n\n// Import a polyfill for ChildNode.remove()\nimport '../../js/vendor/polyfills/polyfill-remove.js';\n\n/**\n * Tabs Class\n */\nclass Tabs extends Component {\n\n\t/**\n\t * Default settings for this component\n\t * @return {object} Default settings\n\t */\n\t_defaultSettings () {\n\t\treturn {\n\t\t\telement: null, // The element that contains the elements that will be turned into tabpanels\n\t\t\thideTitle: 'structural', // True / false or 'structural'. By default the element containing the title of each tabpanel is hidden\n\t\t\tupdateURL: true, // If true, switching tabs will update the URL\n\t\t\tenabledTabsClass: 'c-tabs--enabled', // A class name added to enabled tabs components\n\t\t\tloadOnDemandClass: 'c-tabs--load-on-demand', // A class name that enables loading of tabpanel content via xhr as they are displayed\n\t\t\ttabpanelSelector: '.c-tabs__tabpanel', // Selector for a tabpanel\n\t\t\ttabpanelTitleSelector: '.c-tabs__tabpanel-title', // Selector for the heading inside a tabpanel\n\t\t\ttabpanelContentClass: 'c-tabs__tabpanel-content', // Class name used for the content-wrapping element inside a tabpanel. Required when load-on-demand is enabled, optional otherwise.\n\t\t\tactiveTabpanelSelector: '.c-tabs__tabpanel--is-displayed', // Selector for the initially displayed tabpanel. If no tabpanel matches this, the first tabpanel will be displayed.\n\t\t\ttabListClass: 'c-tabs__tablist', // A class name added to the tablist\n\t\t\ttabListClassVariant: 'c-tabs__tablist--carousel', // A class name added to the tablist\n\t\t\ttabListItemClass: 'c-tabs__tablist-item', // A class name added to each tablist item\n\t\t\ttabListTriggerClass: 'c-tabs__tablist-trigger' // A class name added to the triggering element in each tablist item\n\t\t};\n\t}\n\n\t/**\n\t * Check if we should actually create the tabs\n\t */\n\t_prerequisitesMet () {\n\n\t\t// Don't run script for this element\n\t\tif (this.element.classList.contains('.c-tabs--no-js')) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// This element already has tabs\n\t\tif ((this.element.matches || this.element.msMatchesSelector).call(this.element, '.' + this.settings.enabledTabsClass)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Find and store the tabpanel elements\n\t\tthis.tabpanelElements = this.element.querySelectorAll(this.settings.tabpanelSelector);\n\n\t\t// This element has no tabpanels\n\t\tif (!this.tabpanelElements) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Check that each panel has a title\n\t\tthis.tabpanelElements.forEach(tabpanel => {\n\t\t\tif (!tabpanel.querySelector(this.settings.tabpanelTitleSelector)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\n\t\t// If load-on-demand is enabled, a link list is required\n\t\tif ((this.element.matches || this.element.msMatchesSelector).call(this.element, '.' + this.settings.loadOnDemandClass)) {\n\t\t\tif (!this.element.querySelector('.' + this.settings.tabListClass)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.loadOnDemand = true;\n\t\t}\n\n\t\t// All checks passed\n\t\treturn true;\n\t}\n\n\t/**\n\t * Initialize Tabs\n\t */\n\t_init () {\n\t\tthis.element = this.settings.element;\n\t\tif (this._prerequisitesMet()) {\n\t\t\tvar extraClass;\n\t\t\t// Find and store the link list if there is one\n\t\t\tthis.linkList = this.element.querySelector('.' + this.settings.tabListClass);\n\n\t\t\tif (this.element.getAttribute('data-carousel')) {\n\t\t\t\textraClass = this.settings.tabListClassVariant;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (this.linkList) {\n\t\t\t\t\tif (this.linkList.classList.contains('c-tabs__tablist--carousel')) {\n\t\t\t\t\t\textraClass = this.settings.tabListClassVariant;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\textraClass = 'c-tabs__tablist--normal';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\textraClass = 'c-tabs__tablist--normal';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// All good–go ahead and create the tabs\n\t\t\tthis._create(extraClass);\n\n\t\t\t// Select tab based on URL param\n\t\t\tthis._initSelectTab();\n\t\t}\n\t}\n\n\t/**\n\t * Modify the DOM and set up events\n\t */\n\t_create (extraClass) {\n\t\tlet hash = document.location.hash.replace('#', '');\n\t\tlet tabPanelToDisplay;\n\n\t\tthis.tabpanels = [];\n\n\t\tthis.tablist = document.createElement('ul');\n\t\tthis.tablist.classList.add(this.settings.tabListClass);\n\t\tthis.tablist.classList.add(extraClass);\n\t\tthis.tablist.setAttribute('role', 'tablist');\n\n\t\tthis.tabpanelElements.forEach((tabpanelElement, index) => {\n\t\t\tgenerateRandomId(tabpanelElement, false, 'tabpanel-');\n\n\t\t\t// Create an item object\n\t\t\tlet tabpanel = {\n\t\t\t\ttabpanelElement: tabpanelElement,\n\t\t\t\tid: tabpanelElement.getAttribute('id')\n\t\t\t};\n\n\t\t\t// Should this be the default selected item?\n\t\t\tif ((hash.length && tabpanel.id === hash) || (!hash.length && (tabpanel.tabpanelElement.matches || tabpanel.tabpanelElement.msMatchesSelector).call(tabpanel.tabpanelElement, this.settings.activeTabpanelSelector)) || index === 0) {\n\t\t\t\ttabPanelToDisplay = tabpanel;\n\t\t\t}\n\n\t\t\t// Create a tab that is associated with this tabpanel\n\t\t\ttabpanel.tab = document.createElement('li');\n\t\t\ttabpanel.tab.setAttribute('class', this.settings.tabListItemClass);\n\t\t\ttabpanel.tab.setAttribute('role', 'presentation');\n\n\t\t\t// Create the element that will display this panel when activated\n\t\t\ttabpanel.trigger = document.createElement('button');\n\t\t\ttabpanel.trigger.setAttribute('type', 'button');\n\t\t\ttabpanel.trigger.setAttribute('class', this.settings.tabListTriggerClass);\n\t\t\ttabpanel.trigger.setAttribute('role', 'tab');\n\t\t\ttabpanel.trigger.setAttribute('aria-controls', tabpanel.id);\n\t\t\ttabpanel.trigger.setAttribute('tabindex', '-1');\n\t\t\tgenerateRandomId(tabpanel.trigger, true, 'tabpanel-trigger-');\n\n\t\t\t// Create temporary link content container element\n\t\t\tlet linkContent = document.createElement('div');\n\t\t\tif (this.linkList) {\n\t\t\t\t// If there is a link that refers to this tabpanel via a data-tabpanel attribute, use that\n\t\t\t\tif (this.linkList.querySelector('a[data-tabpanel=\"' + tabpanel.id + '\"]')) {\n\t\t\t\t\tlinkContent.innerHTML = this.linkList.querySelector('a[data-tabpanel=\"' + tabpanel.id + '\"]').innerHTML;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Otherwise assume that the link will contain a fragment identifier with this tabpanel’s id\n\t\t\t\t\tlinkContent.innerHTML = this.linkList.querySelector('a[href$=\"#' + tabpanel.id + '\"]').innerHTML;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlinkContent.innerHTML = tabpanel.tabpanelElement.querySelector(this.settings.tabpanelTitleSelector).innerHTML;\n\t\t\t}\n\t\t\ttabpanel.trigger.innerHTML = linkContent.innerHTML;\n\n\t\t\tif (this.loadOnDemand) {\n\t\t\t\tlet href = this.linkList.querySelector('a[data-tabpanel=\"' + tabpanel.id + '\"]').getAttribute('href');\n\t\t\t\t// href = href.indexOf('&') > 0 ? href.substring(0, href.indexOf('&')) : href;\n\t\t\t\ttabpanel.trigger.setAttribute('data-href', href);\n\t\t\t}\n\n\t\t\t// Switch tabpanels when a tab is clicked\n\t\t\ttabpanel.trigger.addEventListener('click', this._tabClickEvent.bind(this, tabpanel));\n\n\t\t\t// Handle keyboard events\n\t\t\ttabpanel.trigger.addEventListener('keydown', this._tabKeydownEvent.bind(this, tabpanel));\n\n\t\t\t// Insert the created elements\n\t\t\ttabpanel.tab.appendChild(tabpanel.trigger);\n\t\t\tthis.tablist.appendChild(tabpanel.tab);\n\n\t\t\t// Set up the tabpanel\n\t\t\ttabpanel.tabpanelElement.setAttribute('role', 'tabpanel');\n\t\t\ttabpanel.tabpanelElement.setAttribute('tabindex', '-1');\n\t\t\ttabpanel.tabpanelElement.setAttribute('aria-labelledby', tabpanel.trigger.id);\n\t\t\tlet titleElement = tabpanelElement.querySelector(this.settings.tabpanelTitleSelector);\n\t\t\tif (titleElement && this.settings.hideTitle) {\n\t\t\t\tthis.settings.hideTitle === 'structural' ? titleElement.classList.add('t-visually-hidden') : titleElement.remove();\n\t\t\t}\n\n\t\t\tthis.tabpanels.push(tabpanel);\n\t\t});\n\n\t\t// Remove the link list if there is one and add the created tablist to the DOM\n\t\tif (this.linkList) {\n\t\t\tthis.linkList.remove();\n\t\t}\n\t\tthis.element.insertBefore(this.tablist, this.element.firstChild);\n\n\t\t/* Give the enabled tabs element a class to\n\t\t * 1. Allow styling depending on whether it is enabled or not (JS off, script errors, whatever)\n\t\t * 2. Check if this element already has tabs enabled\n\t\t */\n\t\tthis.element.classList.add(this.settings.enabledTabsClass);\n\n\t\tif (tabPanelToDisplay) {\n\t\t\t// Display a tabpanel but don't set focus to the active tab, e.g. when the page loads\n\t\t\tthis.displayTabpanel(tabPanelToDisplay, false);\n\t\t}\n\n\t\t// Switch tabs when going back or forth in browser history\n\t\tif (this.settings.updateURL) {\n\t\t\twindow.addEventListener('popstate', () => {\n\t\t\t\tlet path = window.location.href;\n\t\t\t\tpath = path.substring(path.indexOf(window.location.pathname));\n\t\t\t\tpath = path.indexOf('&') > 0 ? path.substring(0, path.indexOf('&')) : path;\n\t\t\t\tlet triggers = this.tablist.querySelectorAll('[data-href]');\n\n\t\t\t\ttriggers = Array.from(triggers);\n\t\t\t\tlet prevTrigger = triggers.filter((trigger) => {\n\t\t\t\t\tlet href = trigger.getAttribute('data-href');\n\t\t\t\t\thref = href.indexOf('&') > 0 ? href.substring(0, href.indexOf('&')) : href;\n\t\t\t\t\tif (path === href) {\n\t\t\t\t\t\treturn trigger;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (prevTrigger[0]) {\n\t\t\t\t\tprevTrigger[0].click();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t/*\n\t * Handle Tab click event\n\t */\n\t_tabClickEvent (tabpanel) {\n\t\t// Display the tabpanel\n\t\tthis.displayTabpanel(tabpanel, true);\n\n\t\t// Replace URL when switching between tabs\n\t\tif (this.settings.updateURL && !this.loadOnDemand) {\n\t\t\tconst query = new URLSearchParams(window.location.search);\n\t\t\tif (tabpanel.tabpanelElement.getAttribute('id')) {\n\t\t\t\tquery.set('tab', tabpanel.tabpanelElement.getAttribute('id'));\n\t\t\t\thistory.replaceState(null, null, window.location.pathname + '?' + query.toString());\n\t\t\t}\n\t\t}\n\n\t\t// If load-on-demand is active, check if the tabpanel has content. If it doesn’t, load the content via xhr.\n\t\tif (this.loadOnDemand && !tabpanel.tabpanelElement.querySelector(`.${this.settings.tabpanelContentClass}`)) {\n\t\t\t// Create the content-wrapping element and insert it\n\t\t\tconst tabpanelContent = document.createElement('div');\n\t\t\ttabpanelContent.classList.add(this.settings.tabpanelContentClass);\n\t\t\ttabpanel.tabpanelElement.appendChild(tabpanelContent);\n\n\t\t\t// Insert a spinner if loading the content takes more than 500 ms\n\t\t\tconst spinner = new Spinner();\n\t\t\tconst displaySpinner = setTimeout(() => {\n\t\t\t\ttabpanelContent.appendChild(spinner.spinner);\n\t\t\t}, 500);\n\n\t\t\t// Chrome caches the most recent request even if it is just a partial.\n\t\t\t// Adding 'ajax=true' to make sure the AJAX requests uses a different URL from the full HTML document\n\t\t\tlet ajaxUrlSuffix;\n\t\t\tif (tabpanel.trigger.getAttribute('data-href').indexOf('?') === -1) {\n\t\t\t\tajaxUrlSuffix = '?ajax=true';\n\t\t\t}\n\t\t\telse {\n\t\t\t\tajaxUrlSuffix = '&ajax=true';\n\t\t\t}\n\n\t\t\t// Load the content\n\t\t\tajax({\n\t\t\t\turl: tabpanel.trigger.getAttribute('data-href') + ajaxUrlSuffix,\n\t\t\t\theaders: {\n\t\t\t\t\t'X-Requested-With': 'XMLHttpRequest',\n\t\t\t\t\t'Vary': 'Accept'\n\t\t\t\t},\n\t\t\t\tonComplete: () => {\n\t\t\t\t\tclearTimeout(displaySpinner);\n\t\t\t\t},\n\t\t\t\tonSuccess: (response) => {\n\t\t\t\t\t// Remove the spinner if it exists\n\t\t\t\t\tif (tabpanelContent.querySelector('.c-spinner')) {\n\t\t\t\t\t\tspinner.remove();\n\t\t\t\t\t}\n\t\t\t\t\t// Inject the HTML from the response\n\t\t\t\t\ttabpanelContent.outerHTML = response;\n\n\t\t\t\t\t// Init scripts for tabpanel content\n\t\t\t\t\tdocument.dispatchEvent(new CustomEvent('newcontent', {\n\t\t\t\t\t\tdetail: {\n\t\t\t\t\t\t\tcontext: tabpanel.tabpanelElement\n\t\t\t\t\t\t}\n\t\t\t\t\t}));\n\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// Update the URL if appropriate\n\t\tif (this.settings.updateURL && this.loadOnDemand) {\n\t\t\tlet path = window.location.href;\n\t\t\tpath = path.substring(path.indexOf(window.location.pathname));\n\t\t\t// let param = path.indexOf('&') > 0 ? path.substring(path.indexOf('&')) : '';\n\t\t\t// path = path.indexOf('&') > 0 ? path.substring(0, path.indexOf('&')) : path;\n\t\t\tif (tabpanel.trigger.getAttribute('data-href') !== path) {\n\t\t\t\thistory.pushState(null, null, tabpanel.trigger.getAttribute('data-href'));\n\t\t\t}\n\t\t}\n\t}\n\n\t/*\n\t * Handle Tab keyboard events\n\t */\n\t_tabKeydownEvent (tabpanel, e) {\n\t\tconst tabTrigger = e.target;\n\t\tconst previous = tabTrigger.parentNode.previousElementSibling || this.tablist.lastChild;\n\t\tconst next = tabTrigger.parentNode.nextElementSibling || this.tablist.firstChild;\n\t\tswitch (e.key) {\n\t\t\tcase 'Left': // IE and older versions Edge\n\t\t\tcase 'ArrowLeft': // Standard\n\t\t\t\t// Move to the previous or last tab\n\t\t\t\tprevious.querySelector('.' + this.settings.tabListTriggerClass).click();\n\t\t\t\tbreak;\n\t\t\tcase 'Right': // IE and older versions Edge\n\t\t\tcase 'ArrowRight': // Standard\n\t\t\t\t// Move to the next or first tab\n\t\t\t\tnext.querySelector('.' + this.settings.tabListTriggerClass).click();\n\t\t\t\tbreak;\n\t\t\tcase 'Home':\n\t\t\t\te.preventDefault();\n\t\t\t\t// Move to the first tab\n\t\t\t\tthis._getFirstTab().click();\n\t\t\t\tbreak;\n\t\t\tcase 'End':\n\t\t\t\te.preventDefault();\n\t\t\t\t// Move to the last tab\n\t\t\t\tthis._getLastTab().click();\n\t\t\t\tbreak;\n\t\t\tcase 'Down': // IE and older versions Edge\n\t\t\tcase 'ArrowDown': // Standard\n\t\t\t\t// Move focus to the displayed tabpanel\n\t\t\t\te.preventDefault();\n\t\t\t\ttabpanel.tabpanelElement.focus();\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t_getFirstTab () {\n\t\treturn this.tablist.firstChild.querySelector('.' + this.settings.tabListTriggerClass);\n\t}\n\n\t_getLastTab () {\n\t\treturn this.tablist.lastChild.querySelector('.' + this.settings.tabListTriggerClass);\n\t}\n\n\t// Trigger tab on init based on 'tab'-param in URL\n\t_initSelectTab () {\n\t\tif (this.settings.updateURL && !this.loadOnDemand) {\n\t\t\tconst query = new URLSearchParams(window.location.search);\n\t\t\tconst tabParam = query.get('tab');\n\t\t\tconst tab = this.tablist.querySelector('[aria-controls=\"' + tabParam + '\"]');\n\t\t\tif (tab) {\n\t\t\t\ttab.click();\n\t\t\t}\n\t\t}\n\t}\n\n\t/* =============================================================================\n\t * Public methods\n\t============================================================================= */\n\n\t/**\n\t * Display a tabpanel and hide all others\n\t */\n\tdisplayTabpanel (tabPanelToDisplay, setFocus = false) {\n\t\tthis.tabpanels.forEach(tabpanel => {\n\t\t\tif (tabPanelToDisplay === tabpanel) {\n\t\t\t\ttabpanel.trigger.setAttribute('aria-selected', 'true');\n\t\t\t\ttabpanel.trigger.setAttribute('tabindex', '0');\n\t\t\t\tif (setFocus) {\n\t\t\t\t\ttabpanel.trigger.focus();\n\t\t\t\t}\n\t\t\t\ttabpanel.tabpanelElement.removeAttribute('hidden');\n\t\t\t\t// Update search field category\n\t\t\t\tsearchCategory(tabpanel.tabpanelElement.getAttribute('data-search-category'));\n\t\t\t}\n\t\t\telse {\n\t\t\t\ttabpanel.trigger.setAttribute('aria-selected', 'false');\n\t\t\t\ttabpanel.trigger.setAttribute('tabindex', '-1');\n\t\t\t\ttabpanel.tabpanelElement.setAttribute('hidden', '');\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Initialisation function for the component\n * @param {NodeList|String} elements [Either a NodeList or a selector string]\n * @param {Object} settings [User settings]\n */\nconst initTabs = function (elements, settings = {}) {\n\tif (typeof elements === 'string') {\n\t\telements = document.querySelectorAll(elements);\n\t}\n\tfor (let tabs of elements) {\n\t\tif (typeof tabs.tabs === 'undefined') {\n\t\t\ttabs.tabs = new Tabs(extend({element: tabs}, settings));\n\t\t}\n\t}\n};\n\nexport {Tabs};\nexport default initTabs;\n","export default function (category) {\n\n\tif (!document.querySelector('.c-search') || !category) {\n\t\treturn false;\n\t}\n\n\tconst searchForm = document.querySelector('.c-search__form');\n\tconst searchHiddenInput = searchForm.querySelector('input[type=\"hidden\"][name=\"content\"]');\n\n\tif(!searchForm || !searchHiddenInput) {\n\t\treturn;\n\t}\n\n\tsearchHiddenInput.value = category;\n\n}\n","/* global translations */\n\n/**\n * Get the translation for a string\n *\n * @param {String} path The path used to locate the translation in the translations object\n * @param {Array} variables An array of variables that will replace placeholders with the matching zero-based index in the translation string, eg. 'This string {0} two {1}'\n * @returns {String} The translated string if found, or else the supplied path as a fallback\n */\nexport default function (path, variables = []) {\n\tlet found = typeof translations === 'undefined' ? {} : translations;\n\n\tfunction lostInTranslation () {\n\t\tfound = '[' + path + ']';\n\t\tlet message = `Missing translation for: [${path}]`;\n\t\tif (typeof translations === 'undefined') {\n\t\t\tmessage = message + '. The translations object is undefined.';\n\t\t}\n\t\tconsole.warn(message);\n\t}\n\n\ttry {\n\t\tconst parts = path.split('.');\n\t\tlet i = 0;\n\n\t\t// Find the translation\n\t\twhile (parts[i]) {\n\t\t\tfound = found[parts[i]];\n\t\t\ti++;\n\t\t}\n\n\t\tconst placeholderRegExp = /\\{(\\d+)\\}/g;\n\t\tlet placeholderCount = 0;\n\t\tlet missingVariableCount = 0;\n\t\tlet placeholderMatch;\n\n\t\t// Iterate over captures while replacing placeholders with variables, keeping track of\n\t\t// any missing variables, and finding out how many placeholders the string contains.\n\t\t// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec\n\t\twhile ((placeholderMatch = placeholderRegExp.exec(found)) !== null) {\n\t\t\tplaceholderCount++;\n\t\t\tlet placeholderIndex = placeholderMatch[1];\n\n\t\t\tif (variables[placeholderIndex]) {\n\t\t\t\tfound = found.replace(`{${placeholderIndex}}`, variables[placeholderIndex]);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tmissingVariableCount++;\n\t\t\t}\n\t\t}\n\n\t\t// Warn if variable placeholders don’t match the supplied variables\n\t\tif (missingVariableCount || placeholderCount !== variables.length) {\n\t\t\tconsole.warn(`The number and/or index of the variable placeholders in ${path} don’t match the number of supplied variables`);\n\t\t}\n\t}\n\tcatch (e) {\n\t\tlostInTranslation();\n\t}\n\n\tif (!found) {\n\t\tlostInTranslation();\n\t}\n\n\treturn found;\n}\n","import extend from '../../js/utilities/extend/u-extend.js';\nimport ajax from '../../js/utilities/ajax/u-ajax.js';\n\n/**\n * Fetch markup from svg-file\n * @param {[Object]} settings [User settings]\n * @return {[Object]} [SVG wrapper element]\n */\nexport default function (settings) {\n\n\t// Default settings\n\tconst defaults = {\n\t\ticon: false,\n\t\tsize: false,\n\t\textra_class: false // Space-separated string or array\n\t};\n\n\t// Merge settings\n\tsettings = extend(defaults, settings);\n\n\t// Create wrapper element\n\tconst wrapper = document.createElement('span');\n\n\t// Add main class to wrapper\n\twrapper.classList.add('c-icon');\n\n\t// Add size modifier\n\tif (settings.size) {\n\t\twrapper.classList.add(`c-icon--${settings.size}`);\n\t}\n\n\t// Add extra class(es) - note that classList.add wants a comma-separated list\n\t// If the given extra class is a string, trim it, replace multiple spaces, then split on space\n\tif (typeof settings.extra_class === 'string') {\n\t\tsettings.extra_class = settings.extra_class.trim().replace(/\\s+/g, ' ').split(' ');\n\t}\n\t// Make sure that we’re now dealing with an array, then spread it\n\tif (Array.isArray(settings.extra_class)) {\n\t\twrapper.classList.add(...settings.extra_class);\n\t}\n\n\t// Set accessibility attributs\n\twrapper.setAttribute('aria-hidden', true);\n\n\t// Set up Ajax-request to get the svg\n\tconst request = ajax({\n\t\turl: settings.icon\n\t});\n\n\t// Send Ajax-request\n\trequest.then((response) => {\n\t\t// Insert SVG to wrapper element and add role-attribute\n\t\twrapper.innerHTML = response;\n\t}).catch(() => {\n\t\t// Console warn on error\n\t\tconsole.warn(`${settings.icon} was not found...`);\n\t});\n\n\t// Return wrapper element\n\treturn wrapper;\n}","// Import a polyfill for node.remove() (IE)\nimport '../../vendor/polyfills/polyfill-remove.js';\n\nimport Component from '../../core/component.js';\nimport generateRandomId from '../random-id/u-random-id.js';\nimport icon from '../../../components/icon/c-icon.js';\n\nclass Collapse extends Component {\n\t/**\n\t * Default settings for this component\n\t * @return {object} Default settings\n\t */\n\t_defaultSettings () {\n\t\treturn {\n\t\t\tdebug: false,\n\t\t\telement: null,\n\t\t\texpanded: false,\n\t\t\ticons: null, // URLstring or {collapsed: URLstring, expanded: URLstring}\n\t\t\tselectors: {\n\t\t\t\theader: '> h3',\n\t\t\t\tcontent: '> div'\n\t\t\t},\n\t\t\tclassNames: {\n\t\t\t\texpanded: 'is-expanded',\n\t\t\t\tcollapsed: 'is-collapsed',\n\t\t\t\tbutton: ''\n\t\t\t},\n\t\t\tstrings: {\n\t\t\t\tshow: 'Show content',\n\t\t\t\thide: 'Hide content'\n\t\t\t},\n\t\t\tstructuralStrings: false,\n\t\t\tstructuralClass: 't-visually-hidden',\n\t\t\ton: {\n\t\t\t\tbeforeInit: () => {},\n\t\t\t\tbeforeToggle: () => {},\n\t\t\t\tbeforeExpand: () => {},\n\t\t\t\tbeforeCollapse: () => {},\n\t\t\t\tinit: () => {},\n\t\t\t\ttoggle: () => {},\n\t\t\t\texpand: () => {},\n\t\t\t\tcollapse: () => {}\n\t\t\t},\n\t\t\tprepareCssAnimation: false\n\t\t};\n\t}\n\n\t/**\n\t * Initialize Collapse\n\t */\n\t_init () {\n\t\t// Run beforeInit hook\n\t\tthis.settings.on.beforeInit();\n\n\t\t// Assign main element\n\t\tthis.element = this.settings.element;\n\n\t\t// Generate element ID if no ID is set\n\t\tif (!this.element.id) {\n\t\t\tgenerateRandomId(this.element, false, 'collapse-');\n\t\t}\n\n\t\t// Fetch header element from the DOM if any\n\t\tif (document.querySelector(`#${this.element.id} ${this.settings.selectors.header}`)) {\n\t\t\tthis.header = document.querySelector(`#${this.element.id} ${this.settings.selectors.header}`);\n\t\t\tthis.headerElement = true;\n\t\t}\n\t\telse {\n\t\t\tthis.header = document.createElement('div');\n\t\t\tthis.headerElement = false;\n\t\t}\n\t\t// Fetch content element from the DOM\n\t\tthis.content = document.querySelector(`#${this.element.id} ${this.settings.selectors.content}`);\n\n\t\t// Set element ID for content element if no ID is set\n\t\tif (!this.content.id) {\n\t\t\tthis.content.id = `${this.element.id}-content`;\n\t\t}\n\n\t\t// Create toggle button\n\t\tthis.button = document.createElement('button');\n\t\tthis.button.className = this.settings.classNames.button;\n\t\tthis.button.setAttribute('type', 'button');\n\t\tthis.button.setAttribute('aria-expanded', true);\n\t\tthis.button.setAttribute('aria-controls', this.content.id);\n\t\tthis.button.innerHTML = this.header.innerHTML;\n\n\t\t// Add on click event to toggle button\n\t\tthis.button.addEventListener('click', this.toggle.bind(this));\n\n\t\t// Set css animation prepared to false as default\n\t\tthis.cssAnimationIsPrepared = false;\n\n\t\t// Set class and aria expanded as collapsed if the content is collapsed as default\n\t\tif (this.settings.expanded === false) {\n\t\t\tthis.element.classList.add(this.settings.classNames.collapsed);\n\t\t\tthis.button.setAttribute('aria-expanded', false);\n\n\t\t\t// COMMENT\n\t\t\tif (this.settings.prepareCssAnimation) {\n\t\t\t\tthis.content.style.height = '0px';\n\t\t\t}\n\t\t}\n\t\t// Set class as expanded\n\t\telse {\n\t\t\tthis.element.classList.add(this.settings.classNames.expanded);\n\t\t}\n\n\t\tif (this.settings.strings.hide && this.settings.strings.show) {\n\t\t\t// Add hidden show/hide text for the toggle button\n\t\t\tthis.buttonAction = document.createElement('span');\n\n\t\t\tif (this.settings.structuralStrings && this.settings.structuralClass) {\n\t\t\t\tthis.buttonAction.classList.add(this.settings.structuralClass);\n\t\t\t}\n\n\t\t\t// Add show/hide text to toggle button\n\t\t\tthis.buttonAction.innerHTML = (this.isExpanded()) ? this.settings.strings.hide : this.settings.strings.show;\n\t\t\tthis.button.appendChild(this.buttonAction);\n\t\t}\n\n\t\t// Replace header with the new toggle button\n\t\tthis.header.innerHTML = '';\n\t\tif (this.headerElement) {\n\t\t\tthis.header.appendChild(this.button);\n\t\t}\n\t\telse {\n\t\t\tthis.element.insertBefore(this.button, this.element.firstChild);\n\t\t}\n\n\t\t// Init button icon\n\t\tthis._initIcon();\n\t\tthis._updateIcon();\n\n\t\t// Run init hook\n\t\tthis.settings.on.init(this);\n\t}\n\n\t/**\n\t * Initialize icon URL\n\t */\n\t_initIcon () {\n\t\t// If icons setting is a string, then use the string\n\t\tif (typeof this.settings.icons === 'string') {\n\t\t\tthis.iconURL = this.settings.icons;\n\t\t}\n\t\t// Else if the icons setting properties collapsed/expanded is set, then use them\n\t\telse if (this.settings.icons.collapsed && this.settings.icons.expanded) {\n\t\t\tthis.iconURL = {\n\t\t\t\tcollapsed: this.settings.icons.collapsed,\n\t\t\t\texpanded: this.settings.icons.expanded\n\t\t\t};\n\t\t}\n\t\t// Otherwise set the icon URL to false\n\t\telse {\n\t\t\tthis.iconURL = false;\n\t\t}\n\t}\n\n\t/**\n\t * Get button icon\n\t * @return {mixed} [Icon element]\n\t */\n\t_getIcon () {\n\t\t// Return false if we don't want icons\n\t\tif (!this.iconURL) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Get current state\n\t\tlet state = (this.isExpanded()) ? 'expanded' : 'collapsed';\n\n\t\t// If we allways use the same icon\n\t\tif (typeof this.iconURL === 'string') {\n\t\t\t// Return icon element\n\t\t\treturn icon({\n\t\t\t\ticon: this.iconURL\n\t\t\t});\n\t\t}\n\t\t// If we want different icons depending on the state\n\t\telse if (this.iconURL[state]) {\n\t\t\t// Return icon element for current state\n\t\t\treturn icon({\n\t\t\t\ticon: this.iconURL[state]\n\t\t\t});\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t_updateIcon () {\n\t\t// Check if we need to update the icon, if not exit\n\t\tif (!this.iconURL || (this.icon && typeof this.iconURL === 'string')) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there is a icon, remove it\n\t\tif (this.icon) {\n\t\t\tthis.icon.remove();\n\t\t}\n\n\t\t// Get the new icon\n\t\tthis.icon = this._getIcon();\n\n\t\t// Append the icon to toggle button\n\t\tif (this.icon) {\n\t\t\tthis.button.appendChild(this.icon);\n\t\t}\n\t}\n\n\t/**\n\t * Prepare content for CSS animations\n\t */\n\t_prepareCssAnimationCollapse () {\n\t\t// Exit if the content is already collapsed\n\t\tif (this.isCollapsed()) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Get the content height\n\t\tconst sectionHeight = this.content.scrollHeight;\n\n\t\t// Temporarily disable CSS animations\n\t\tlet elementTransition = this.content.style.transition;\n\t\tthis.content.style.transition = '';\n\n\t\t/* On the next frame (as soon as the previous style change has taken effect),\n\t\t * explicitly set the element's height to its current pixel height, so we\n\t\t * aren't transitioning out of 'auto' */\n\t\trequestAnimationFrame(() => {\n\t\t\tthis.content.style.height = sectionHeight + 'px';\n\t\t\tthis.content.style.transition = elementTransition;\n\n\t\t\t/* On the next frame (as soon as the previous style change has taken effect),\n\t\t\t * have the element transition to height: 0 */\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\tthis.content.style.height = 0 + 'px';\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Prepare content for CSS animations\n\t */\n\t_prepareCssAnimationExpand () {\n\t\t// Exit if the content is already expanded\n\t\tif (this.isExpanded()) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet self = this;\n\n\t\t// Get the content height\n\t\tconst sectionHeight = this.content.scrollHeight;\n\n\t\t// Set content to it's full height to let CSS animate the height\n\t\tthis.content.style.height = sectionHeight + 'px';\n\n\t\t// If we already have prepared css animation, then exit\n\t\tif (this.cssAnimationIsPrepared) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Set css animtaion to prepared\n\t\tthis.cssAnimationIsPrepared = true;\n\n\t\t// Reset style.height when the animation is completed\n\t\tthis.content.addEventListener('transitionend', function () {\n\t\t\t// Make sure we only do this then the content is expanded\n\t\t\tif (self.isExpanded()) {\n\t\t\t\tthis.style.height = null;\n\t\t\t}\n\t\t});\n\t}\n\n\t/* =============================================================================\n\t * Public methods\n\t============================================================================= */\n\n\t/**\n\t * Toggle content\n\t */\n\ttoggle () {\n\t\t// Run beforeToggle hook\n\t\tthis.settings.on.beforeToggle(this);\n\n\t\t// If the content is expanded, then collpase the content\n\t\tif (this.button.getAttribute('aria-expanded') === 'true') {\n\t\t\tthis.collapse();\n\t\t}\n\t\t// Otherwise expand the content\n\t\telse {\n\t\t\tthis.expand();\n\t\t}\n\n\t\t// Run toggle hook\n\t\tthis.settings.on.toggle(this);\n\t}\n\n\t/**\n\t * Expand content\n\t */\n\texpand () {\n\t\t// Run beforeExpand hook\n\t\tthis.settings.on.beforeExpand(this);\n\n\t\t// If we want to prepare CSS animation of the content height\n\t\tif (this.settings.prepareCssAnimation) {\n\t\t\tthis._prepareCssAnimationExpand();\n\t\t}\n\n\t\t// Set aria-expanded to true\n\t\tthis.button.setAttribute('aria-expanded', true);\n\n\t\t// Toggle collapse/expanded classes\n\t\tthis.element.classList.remove(this.settings.classNames.collapsed);\n\t\tthis.element.classList.add(this.settings.classNames.expanded);\n\n\t\t// Uppdate toggle button hidden text\n\t\tthis.buttonAction.innerHTML = this.settings.strings.hide;\n\n\t\t// Update toggle button icon\n\t\tthis._updateIcon();\n\n\t\t// Run expand hook\n\t\tthis.settings.on.expand(this);\n\t}\n\n\t/**\n\t * Collapse content\n\t */\n\tcollapse () {\n\t\t// Run beforeCollapse hook\n\t\tthis.settings.on.beforeCollapse(this);\n\n\t\t// If we want to prepare CSS animation of the content height\n\t\tif (this.settings.prepareCssAnimation) {\n\t\t\tthis._prepareCssAnimationCollapse();\n\t\t}\n\n\t\t// Set aria-expanded to false\n\t\tthis.button.setAttribute('aria-expanded', false);\n\n\t\t// Toggle collapse/expanded classes\n\t\tthis.element.classList.add(this.settings.classNames.collapsed);\n\t\tthis.element.classList.remove(this.settings.classNames.expanded);\n\n\t\t// Uppdate toggle button hidden text\n\t\tthis.buttonAction.innerHTML = this.settings.strings.show;\n\n\t\t// Update toggle button icon\n\t\tthis._updateIcon();\n\n\t\t// Run collapse hook\n\t\tthis.settings.on.collapse(this);\n\t}\n\n\t/**\n\t * Checkes if content is expanded\n\t * @return {Boolean}\n\t */\n\tisExpanded () {\n\t\treturn this.button.getAttribute('aria-expanded') === 'true';\n\t}\n\n\t/**\n\t * Checkes if content is collapsed\n\t * @return {Boolean}\n\t */\n\tisCollapsed () {\n\t\treturn this.button.getAttribute('aria-expanded') !== 'true';\n\t}\n}\n\nexport default Collapse;\n","import Collapse from '../../js/utilities/collapse/u-collapse.js';\nimport extend from '../../js/utilities/extend/u-extend.js';\nimport '../../js/vendor/polyfills/polyfill-nodelist-foreach.js';\n\nexport default function (accordions) {\n\taccordions.forEach((accordion) => {\n\n\t\tif (accordion.dataset.initiated === 'true') {\n\t\t\treturn;\n\t\t}\n\n\t\taccordion.dataset.initiated = 'true';\n\n\t\tlet settings = {\n\t\t\telement: accordion,\n\t\t\texpanded: accordion.dataset.expanded === 'true',\n\t\t\tselectors: {\n\t\t\t\theader: '.c-accordion__trigger',\n\t\t\t\tcontent: '.c-accordion__content'\n\t\t\t},\n\t\t\tclassNames: {\n\t\t\t\texpanded: 'c-accordion--is-expanded',\n\t\t\t\tcollapsed: 'c-accordion--is-collapsed',\n\t\t\t\tbutton: 'c-accordion__button o-click-area',\n\t\t\t\ticonExtraClass: 'c-accordion__icon'\n\t\t\t},\n\t\t\tstrings: {\n\t\t\t\tshow: 'View details',\n\t\t\t\thide: 'Hide details'\n\t\t\t},\n\t\t\tstructuralStrings: false,\n\t\t\ticons: {\n\t\t\t\tcollapsed: '/gui/project/images/icons/caret-down.svg',\n\t\t\t\texpanded: '/gui/project/images/icons/caret-up.svg'\n\t\t\t}\n\t\t};\n\n\t\tif (accordion.getAttribute('data-js-accordion-settings')) {\n\t\t\tsettings = extend(settings, JSON.parse(accordion.getAttribute('data-js-accordion-settings')));\n\t\t}\n\n\t\tnew Collapse(settings);\n\n\t});\n}\n","import '../../js/vendor/polyfills/polyfill-form-data.js';\nimport '../../js/vendor/polyfills/polyfill-custom-event.js';\nimport ajax from '../../js/utilities/ajax/u-ajax.js';\nimport serialize from '../../js/utilities/serialize/u-serialize.js';\nimport translate from '../../js/utilities/translate/u-translate.js';\nimport icon from '../icon/c-icon.js';\nimport Spinner from '../spinner/c-spinner.js';\nimport accordion from '../accordion/c-accordion.js';\n\nexport default function (quickSearch = document.querySelector('.c-quick-search')) {\n\n\tif(!quickSearch) {\n\t\treturn;\n\t}\n\n\tif(!document.querySelector('#' + quickSearch.getAttribute('data-search-id'))) {\n\t\treturn;\n\t}\n\n\tconst destination = quickSearch.querySelector('.c-quick-search__destination');\n\tconst inputSearch = document.querySelector('#' + quickSearch.getAttribute('data-search-id'));\n\tconst inputSearchForm = inputSearch.parentNode;\n\tconst showResultsDelay = 500;\n\n\t// Get users motion preferences\n\tconst motionQuery = matchMedia('(prefers-reduced-motion)');\n\n\tlet timer;\n\n\tdestination.setAttribute('aria-live', 'polite');\n\n\tconst closeButton = document.createElement('button');\n\tcloseButton.setAttribute('type', 'button');\n\tcloseButton.classList.add('c-quick-search__close');\n\tcloseButton.classList.add('o-click-area');\n\tcloseButton.innerHTML = '' + translate('search.close') + '';\n\tconst closeButtonIcon = icon({\n\t\ticon: '/gui/project/images/icons/close.svg',\n\t\tsize: 's'\n\t});\n\tcloseButton.appendChild(closeButtonIcon);\n\tcloseButton.addEventListener('click', slideOut);\n\n\tinputSearch.addEventListener('input', inputUpdate);\n\n\tfunction inputUpdate () {\n\t\tclearTimeout(timer);\n\t\ttimer = setTimeout(() => {\n\t\t\tif(inputSearch.value.length >= 3) {\n\t\t\t\tsearch();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tslideOut();\n\t\t\t}\n\t\t}, showResultsDelay);\n\t}\n\n\tfunction search() {\n\n\t\tconst formData = new FormData(inputSearchForm);\n\n\t\tformData.append('quick-search', 'true');\n\n\t\t// Insert a spinner if loading the content takes more than 500 ms\n\t\tconst spinner = new Spinner();\n\t\tconst displaySpinner = setTimeout(() => {\n\t\t\tdestination.appendChild(spinner.spinner);\n\t\t}, 500);\n\n\t\tajax({\n\t\t\turl: inputSearchForm.getAttribute('action'),\n\t\t\tmethod: 'GET',\n\t\t\tdata: formData,\n\t\t\tonComplete: () => {\n\t\t\t\t// Remove the spinner if it exists\n\t\t\t\tclearTimeout(displaySpinner);\n\t\t\t\tif (destination.querySelector('.c-spinner')) {\n\t\t\t\t\tspinner.remove();\n\t\t\t\t}\n\t\t\t},\n\t\t\tonSuccess: (response) => {\n\n\t\t\t\t// Get new content\n\t\t\t\tlet newContent = document.createElement('div');\n\t\t\t\tnewContent.classList.add('c-quick-search__new-content');\n\t\t\t\tnewContent.innerHTML = response;\n\n\t\t\t\t// Get number of hits\n\t\t\t\tconst hits = newContent.querySelector('[data-number-of-hits]') ? newContent.querySelector('[data-number-of-hits]').getAttribute('data-number-of-hits') : '0';\n\n\t\t\t\t// Create search hits text\n\t\t\t\tconst hitsText = document.createElement('p');\n\t\t\t\thitsText.classList.add('c-quick-search__hits');\n\t\t\t\thitsText.classList.add('h3');\n\t\t\t\thitsText.classList.add('t-text-align-center');\n\t\t\t\thitsText.innerHTML = translate('search.hits', [hits, formData.get('q')]);\n\t\t\t\tnewContent.insertBefore(hitsText, newContent.firstChild);\n\n\t\t\t\t// Create 'View all results' link\n\t\t\t\tconst searchPageLink = document.createElement('a');\n\t\t\t\tsearchPageLink.setAttribute('href', inputSearchForm.getAttribute('action') + '?' + serialize(formData));\n\t\t\t\tsearchPageLink.classList.add('c-button');\n\t\t\t\tif (hits > 0) {\n\t\t\t\t\tsearchPageLink.innerHTML = translate('search.viewAll', [hits]);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tsearchPageLink.innerHTML = translate('search.allCategories');\n\t\t\t\t}\n\n\t\t\t\tconst searchPageLinkWrapper = document.createElement('p');\n\t\t\t\tsearchPageLinkWrapper.appendChild(searchPageLink);\n\t\t\t\tsearchPageLinkWrapper.classList.add('c-quick-search__view-all');\n\n\t\t\t\tnewContent.appendChild(searchPageLinkWrapper);\n\n\t\t\t\t// Check if any content is already showing (used for animations)\n\t\t\t\tconst firstInit = destination.querySelector('.c-quick-search__new-content') ? false : true;\n\n\t\t\t\t// Show the new content\n\t\t\t\tdestination.innerHTML = newContent.outerHTML;\n\t\t\t\tnewContent = destination.querySelector('.c-quick-search__new-content');\n\n\t\t\t\tnewContent.insertBefore(closeButton, newContent.firstChild);\n\n\t\t\t\t// Init scripts for new content\n\t\t\t\tdocument.dispatchEvent(new CustomEvent('newcontent', {\n\t\t\t\t\tdetail: {\n\t\t\t\t\t\tcontext: newContent\n\t\t\t\t\t}\n\t\t\t\t}));\n\n\t\t\t\t// Init accordion\n\t\t\t\taccordion(document.querySelectorAll('[data-module=\"accordion\"]'));\n\n\t\t\t\t// Animations\n\t\t\t\tif (firstInit) {\n\t\t\t\t\t// First init: slide in\n\t\t\t\t\tnewContent.classList.add('b-animation-slide-in');\n\t\t\t\t\tnewContent.addEventListener('webkitAnimationEnd', (e) => {\n\t\t\t\t\t\te.target.classList.remove('b-animation-slide-in');\n\t\t\t\t\t});\n\t\t\t\t\tnewContent.addEventListener('animationend', (e) => {\n\t\t\t\t\t\te.target.classList.remove('b-animation-slide-in');\n\t\t\t\t\t});\n\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Content is updated: fade in\n\t\t\t\t\tnewContent.classList.add('b-animation-fade-in');\n\t\t\t\t\tnewContent.addEventListener('webkitAnimationEnd', (e) => {\n\t\t\t\t\t\te.target.classList.remove('b-animation-fade-in');\n\t\t\t\t\t});\n\t\t\t\t\tnewContent.addEventListener('animationend', (e) => {\n\t\t\t\t\t\te.target.classList.remove('b-animation-fade-in');\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t},\n\t\t\tonError: (error) => {\n\t\t\t\tconst errorMsg= document.createElement('p');\n\t\t\t\terrorMsg.classList.add('t-text-align-center');\n\t\t\t\terrorMsg.innerHTML = translate('search.error') + ' (' + error + ')';\n\t\t\t\tdestination.appendChild(errorMsg);\n\t\t\t}\n\t\t});\n\t}\n\n\tfunction slideOut() {\n\t\tif (!motionQuery.matches && destination.firstChild) {\n\t\t\tdestination.firstChild.classList.add('b-animation-slide-out');\n\t\t\tdestination.firstChild.addEventListener('webkitAnimationEnd', removeResults);\n\t\t\tdestination.firstChild.addEventListener('animationend', removeResults);\n\t\t}\n\t\telse {\n\t\t\tremoveResults();\n\t\t}\n\t}\n\n\tfunction removeResults() {\n\t\tif(document.querySelector('.c-quick-search__new-content')) {\n\t\t\tdocument.querySelector('.c-quick-search__new-content').remove();\n\t\t\tinputSearch.focus();\n\t\t}\n\t}\n\n}\n","const throttle = function (fn, th, scope) {\n\tconst threshhold = th || 250;\n\tlet last;\n\tlet deferTimer;\n\n\treturn function () {\n\t\tconst context = scope || this;\n\t\tconst now = +new Date();\n\t\tconst args = arguments;\n\n\t\tif (last && now < last + threshhold) {\n\t\t\t// hold on to it\n\t\t\tclearTimeout(deferTimer);\n\t\t\tdeferTimer = setTimeout(function () {\n\t\t\t\tlast = now;\n\t\t\t\tfn.apply(context, args);\n\t\t\t}, threshhold);\n\t\t}\n\t\telse {\n\t\t\tlast = now;\n\t\t\tfn.apply(context, args);\n\t\t}\n\t};\n};\n\nexport default throttle;\n","// Import polyfills (remove if all JS-supported browsers have native support)\nimport '../../js/vendor/polyfills/polyfill-nodelist-foreach.js';\nimport '../../js/vendor/polyfills/polyfill-remove.js';\n\n// Import dependencies\nimport extend from '../../js/utilities/extend/u-extend.js';\nimport throttle from '../../js/utilities/throttle/u-throttle.js';\n\n// An array to store all responsive tables so we can check if they have been\n// initialised already. Once browser support is there this should be a static\n// property of the class.\nconst _responsiveTables = [];\n\n/**\n * Class that makes a table responsive by transforming it when necessary.\n * @requires throttle\n */\nclass ResponsiveTable {\n\n\t/**\n\t * Constructor, merges settings and sets up event handlers.\n\t * @param {object} [settings] Configuration object.\n\t * @param {Node} element - A DOM node representing the table element that will be made responsive.\n\t * @param {string} [settings.classNamePrefix=c-responsive-table] - A prefix used for inserted class names.\n\t */\n\tconstructor(settings = {}) {\n\t\t// Default settings\n\t\tthis.defaults = {\n\t\t\telement: null,\n\t\t\tclassNamePrefix: 'c-responsive-table'\n\t\t};\n\n\t\t// Merge settings\n\t\tthis.settings = extend(this.defaults, settings);\n\n\t\t// Create a shortcut to the table element\n\t\tthis.table = this.settings.element;\n\n\t\t// A property to save the table’s width before it was transformed in\n\t\tthis.breakWidth = null;\n\n\t\t// If this.table exists, is a table element, and hasn’t already been\n\t\t// initialised, add the table element to the storage array, save the\n\t\t// value of its `data-breakpoint` attribute, if any, and add event\n\t\t// handlers to trigger transformation. Note the arrow function in the\n\t\t// call to `throttle()` to scope `this`.\n\t\tif (this.table && this.table.nodeName.toLowerCase() === 'table' && _responsiveTables.indexOf(this.table) === -1) {\n\t\t\t_responsiveTables.push(this.table);\n\t\t\tthis.mq = this.table.getAttribute('data-breakpoint');\n\t\t\t['newcontent', 'load', 'resize', 'orientationchange'].forEach(e => {\n\t\t\t\twindow.addEventListener(e, throttle(() => this._updateTable(), 300));\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Add roles to the table element to preserve semantics removed by changing\n\t * display properties via CSS.\n\t * @private\n\t */\n\t_addRoles() {\n\t\tthis.table.setAttribute('role', 'table');\n\t\tthis.table.querySelectorAll('thead, tbody, tfoot').forEach(element => element.setAttribute('role', 'rowgroup'));\n\t\tthis.table.querySelectorAll('tr').forEach(element => element.setAttribute('role', 'row'));\n\t\tthis.table.querySelectorAll('td').forEach(element => element.setAttribute('role', 'cell'));\n\t\tthis.table.querySelectorAll('th').forEach(element => element.setAttribute('role', 'columnheader'));\n\t\tthis.table.querySelectorAll('th[scope=\"row\"]').forEach(element => element.setAttribute('role', 'rowheader'));\n\t}\n\n\t/**\n\t * Remove roles added by _addRoles.\n\t * @private\n\t */\n\t_removeRoles() {\n\t\tthis.table.removeAttribute('role');\n\t\tthis.table.querySelectorAll('thead, tbody, tfoot, tr, th, td').forEach(element => element.removeAttribute('role'));\n\t}\n\n\t/**\n\t * Clone header cells that span multiple rows to give each row a header.\n\t * For simplicity this only looks at the first header cell in each row.\n\t * The value of the `rowspan` attribute of the original header cell is\n\t * temporarily stored in a `data-rowspan` attribute so we can restore it.\n\t * @private\n\t */\n\t_cloneHeaderCells() {\n\t\tconst rows = this.table.querySelectorAll('tbody tr');\n\t\trows.forEach((tr, index) => {\n\t\t\tconst rowspans = tr.querySelectorAll('th[rowspan]:first-child');\n\t\t\trowspans.forEach(cell => {\n\t\t\t\tconst rowspan = parseInt(cell.getAttribute('rowspan'), 10);\n\t\t\t\tif (rowspan > 1) {\n\t\t\t\t\tfor (let i = 1; i < rowspan; i++) {\n\t\t\t\t\t\tconst nextRow = rows[index + i];\n\t\t\t\t\t\tif (nextRow) {\n\t\t\t\t\t\t\tconst newCell = cell.cloneNode(true);\n\t\t\t\t\t\t\tnewCell.removeAttribute('rowspan');\n\t\t\t\t\t\t\tnewCell.classList.add(`${this.settings.classNamePrefix}__cloned-cell`);\n\t\t\t\t\t\t\tnextRow.insertBefore(newCell, nextRow.firstChild);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcell.setAttribute('data-rowspan', cell.getAttribute('rowspan'));\n\t\t\t\t\tcell.removeAttribute('rowspan');\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Remove cloned header cells and restore rowspan attributes on the\n\t * original header cells.\n\t * @private\n\t */\n\t_restoreHeaderCells() {\n\t\tthis.table.querySelectorAll(`.${this.settings.classNamePrefix}__cloned-cell`).forEach(cell => cell.remove());\n\t\tthis.table.querySelectorAll('[data-rowspan]').forEach(cell => {\n\t\t\tcell.setAttribute('rowspan', cell.getAttribute('data-rowspan'));\n\t\t\tcell.removeAttribute('data-rowspan');\n\t\t});\n\t}\n\n\t/**\n\t * Insert elements that clone the contents of the column headers.\n\t * The default behaviour is to use `innerHTML` to copy the entire contents\n\t * of each column header cell. If this causes problems, you can use a\n\t * `data-header` attribute on the column headers to specify a string to use\n\t * instead.\n\t * This function takes `colspan` attributes on data cells into account,\n\t * i.e. data cells can span multiple columns.\n\t * @private\n\t */\n\t_insertFakeHeaders() {\n\t\tconst columnHeaders = this.table.querySelectorAll('thead tr:first-child th');\n\t\tthis.table.querySelectorAll('tbody tr').forEach(tr => {\n\t\t\tconst cells = tr.querySelectorAll('th, td');\n\t\t\tlet columnOffset = 0;\n\t\t\tcells.forEach(cell => {\n\t\t\t\tconst header = columnHeaders[Array.prototype.indexOf.call(cells, cell) + columnOffset];\n\t\t\t\tconst fakeHeader = document.createElement('span');\n\t\t\t\tfakeHeader.classList.add(`${this.settings.classNamePrefix}__fake-header`);\n\t\t\t\tfakeHeader.innerHTML = header.getAttribute('data-header') ? header.getAttribute('data-header') : header.innerHTML;\n\t\t\t\tcell.insertBefore(fakeHeader, cell.firstChild);\n\t\t\t\tcolumnOffset += cell.getAttribute('colspan') ? parseInt(cell.getAttribute('colspan'), 10) - 1 : 0;\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Remove elements inserted by _insertFakeHeaders.\n\t * @private\n\t */\n\t_removeFakeHeaders() {\n\t\tthis.table.querySelectorAll(`.${this.settings.classNamePrefix}__fake-header`).forEach(element => element.remove());\n\t}\n\n\t/**\n\t * Check widths and transform or restore the table.\n\t * The default is to check if the table is wider than its parent. The\n\t * clientWidth of the table at the time it becomes wider than its parent\n\t * is saved so we can compare it to the parent’s width. If we don’t, the\n\t * transformed table’s width will be used instead, which we don’t want.\n\t *\n\t * Other breakpoints can be specified via a `data-breakpoint` attribute on\n\t * the table element. The value of this, if present, is passed to\n\t * window.matchMedia(query). If the media query matches, the table is\n\t * transformed. If it doesn’t, the table is restored.\n\t * @private\n\t */\n\t_updateTable() {\n\t\tconst breakWidth = this.breakWidth ? this.breakWidth : this.table.clientWidth;\n\t\tif (this.mq && window.matchMedia(this.mq).matches || !this.mq && breakWidth > this.table.parentNode.clientWidth) {\n\t\t\tif (!this.table.classList.contains(`${this.settings.classNamePrefix}--transformed`)) {\n\t\t\t\tthis.breakWidth = this.table.clientWidth; // Save the table’s width when the breakpoint was met\n\t\t\t\tthis._addRoles();\n\t\t\t\tthis._cloneHeaderCells();\n\t\t\t\tthis._insertFakeHeaders();\n\t\t\t\tthis.table.classList.add(`${this.settings.classNamePrefix}--transformed`);\n\t\t\t}\n\t\t}\n\t\telse if (this.table.classList.contains(`${this.settings.classNamePrefix}--transformed`)) {\n\t\t\tthis.breakWidth = null;\n\t\t\tthis._removeRoles();\n\t\t\tthis._restoreHeaderCells();\n\t\t\tthis._removeFakeHeaders();\n\t\t\tthis.table.classList.remove(`${this.settings.classNamePrefix}--transformed`);\n\t\t}\n\n\t}\n\n}\n\nexport default ResponsiveTable;\n","/**\n * @file This is the main project file where all other scripts should be initiated.\n */\n\n// Import dependencies\nimport './js/vendor/polyfills/polyfill-custom-event.js';\nimport initFilters from './components/filter/c-filter.js';\nimport initTabs from './components/tabs/c-tabs.js';\nimport amount from './components/form-elements/amount/c-amount.js';\nimport quickSearch from './components/quick-search/c-quick-search.js';\nimport accordion from './components/accordion/c-accordion.js';\nimport ResponsiveTable from './components/responsive-table/c-responsive-table.js';\nimport expandArea from './components/expand-area/c-expand-area.js';\n\n// Initialise scripts when the DOM is ready\ndocument.addEventListener('DOMContentLoaded', () => {\n\n\t// Init tabs\n\tinitTabs(document.querySelectorAll('.c-tabs'));\n\n\t// Init Quick search\n\tquickSearch();\n\n\t// Init accordions\n\taccordion(document.querySelectorAll('[data-module=\"accordion\"]'));\n\n\t// Init resposive tables\n\tdocument.querySelectorAll('.c-responsive-table').forEach(table => new ResponsiveTable({\n\t\telement: table\n\t}));\n\n\t// Init expand-areas\n\texpandArea(document.querySelectorAll('.c-expand-area'));\n\n\t// Init scripts for dynamic created content\n\tdocument.addEventListener('newcontent', (e) => {\n\t\tlet context = e.detail != null ? e.detail.context : e.target;\n\n\t\t// Init filters\n\t\tinitFilters(context.querySelectorAll('.c-filter'));\n\n\t\t// Init amount\n\t\tamount(context.querySelectorAll('.c-amount'));\n\t});\n\n\tdocument.dispatchEvent(new CustomEvent('newcontent'));\n\n});\n","import extend from '../../js/utilities/extend/u-extend.js';\nimport '../../js/vendor/polyfills/polyfill-nodelist-foreach.js';\n\nexport default function (expandAreas) {\n\n\tif(!expandAreas) {\n\t\treturn;\n\t}\n\n\texpandAreas.forEach((expandArea) => {\n\n\t\tlet settings = {\n\t\t\telement: expandArea,\n\t\t\tareaClass: 'c-expand-area__area',\n\t\t\tareaCollapsedClass: 'c-expand-area__area--collapsed',\n\t\t\tareaExpandedClass: 'c-expand-area__area--expanded',\n\t\t\tbuttonClasses: 'c-expand-area__expand c-button',\n\t\t\tbuttonExpandText: 'Expand section',\n\t\t\tbuttonCollapseText: 'Collapse section',\n\t\t};\n\n\t\tif (expandArea.getAttribute('data-js-expand-area-settings')) {\n\t\t\tsettings = extend(settings, JSON.parse(expandArea.getAttribute('data-js-expand-area-settings')));\n\t\t}\n\n\t\t// Area\n\t\tconst area = expandArea.querySelector('.' + settings.areaClass);\n\t\tconst areaId = 'expand-area-' + Date.now();\n\t\tarea.classList.add(settings.areaCollapsedClass);\n\n\t\t// Button\n\t\tconst button = document.createElement('button');\n\t\tbutton.setAttribute('type', 'button');\n\t\tbutton.setAttribute('aria-controls', areaId);\n\t\tbutton.setAttribute('aria-expanded', false);\n\t\tbutton.innerHTML = settings.buttonExpandText;\n\n\t\t// Button classes\n\t\tconst buttonClasses = settings.buttonClasses.split(' ');\n\t\tbuttonClasses.forEach((buttonClass) => {\n\t\t\tbutton.classList.add(buttonClass);\n\t\t});\n\n\t\t// Button click\n\t\tbutton.addEventListener('click', () => {\n\t\t\t// If collapsed\n\t\t\tif (area.classList.contains(settings.areaCollapsedClass)) {\n\t\t\t\tarea.classList.add(settings.areaExpandedClass);\n\t\t\t\tarea.classList.remove(settings.areaCollapsedClass);\n\t\t\t\tbutton.setAttribute('aria-expanded', true);\n\t\t\t\tbutton.innerHTML = settings.buttonCollapseText;\n\t\t\t}\n\t\t\t// If expanded\n\t\t\telse {\n\t\t\t\tarea.classList.add(settings.areaCollapsedClass);\n\t\t\t\tarea.classList.remove(settings.areaExpandedClass);\n\t\t\t\tbutton.setAttribute('aria-expanded', false);\n\t\t\t\tbutton.innerHTML = settings.buttonExpandText;\n\t\t\t}\n\t\t});\n\n\t\t// Insert button\n\t\tarea.insertBefore(button, area.firstChild);\n\n\t});\n\n}\n","import '../../../js/vendor/polyfills/polyfill-nodelist-foreach.js';\nimport translate from '../../../js/utilities/translate/u-translate.js';\nimport icon from '../../icon/c-icon.js';\n\nexport default function (amounts = document.querySelectorAll('.c-amount')) {\n\n\tif(!amounts.length) {\n\t\treturn;\n\t}\n\n\tfunction createButton(change, direction) {\n\n\t\tvar button = document.createElement('button');\n\t\tbutton.setAttribute('type', 'button');\n\t\tbutton.classList.add('c-amount__button');\n\n\t\tbutton.innerHTML = '' + translate('amount.' + change) + '';\n\n\t\tconst buttonIcon = icon({\n\t\t\ticon: '/gui/project/images/icons/caret-' + direction + '.svg'\n\t\t});\n\t\tbutton.appendChild(buttonIcon);\n\n\t\treturn button;\n\t}\n\n\tamounts.forEach((amount) => {\n\n\t\tamount.classList.add('c-amount--enabled');\n\n\t\tconst input = amount.querySelector('.c-amount__input');\n\n\t\tconst decreaseBtn = createButton('decrease', 'left');\n\t\tconst increaseBtn = createButton('increase', 'right');\n\n\t\tdecreaseBtn.addEventListener('click', () => {\n\t\t\tif(input.value > input.getAttribute('min')) {\n\t\t\t\tinput.value = parseInt(input.value) - 1;\n\t\t\t}\n\t\t\tif(!amount.hasAttribute('aria-live')) {\n\t\t\t\tamount.setAttribute('aria-live', 'polite');\n\t\t\t}\n\t\t});\n\n\t\tincreaseBtn.addEventListener('click', () => {\n\t\t\tinput.value = parseInt(input.value) + 1;\n\t\t\tif(!amount.hasAttribute('aria-live')) {\n\t\t\t\tamount.setAttribute('aria-live', 'polite');\n\t\t\t}\n\t\t});\n\n\t\tamount.insertBefore(decreaseBtn, amount.firstChild);\n\t\tamount.appendChild(increaseBtn);\n\n\t});\n}\n"],"sourceRoot":""}