{"version":3,"file":"app.js","mappings":"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","sources":["webpack://cabanaboiler/webpack/runtime/chunk loaded","webpack://cabanaboiler/./src/modules/tabel/table-csv/jQueryCSV.js","webpack://cabanaboiler/./src/modules/carousels/carousel__cards/carousel__cards.js","webpack://cabanaboiler/./src/modules/search-bars/suggestions/autosuggestions.js","webpack://cabanaboiler/./src/modules/progressbar/progress.js","webpack://cabanaboiler/./src/modules/carousels/swiper/swiper.js","webpack://cabanaboiler/./src/modules/tabel/tabel.js","webpack://cabanaboiler/./src/modules/third-party/instagram-feed/instagram-feed.js","webpack://cabanaboiler/./src/modules/headers/header__transparent-menu/scripts/ratioCheckerPrefersWhite.js","webpack://cabanaboiler/./src/modules/headers/header__transparent-menu/scripts/header.js","webpack://cabanaboiler/./src/modules/headers/header__transparent-menu/scripts/moveNavItems.js","webpack://cabanaboiler/./src/modules/creative/parallax/parallax.js","webpack://cabanaboiler/./src/modules/table-hours/checkHolidays.js","webpack://cabanaboiler/./src/modules/headers/header__double-logo/doubleLogoMenu.js","webpack://cabanaboiler/./src/modules/headers/header__megamenu-left-aligned/leftAlignedMegamenu.js","webpack://cabanaboiler/./src/modules/tabel/table-csv/tableCsv.js","webpack://cabanaboiler/./src/modules/dropdowns/dropdown-settings/dropdownSettings.js","webpack://cabanaboiler/./src/scripts/app.js","webpack://cabanaboiler/./src/modules/fact-box/collapseBox.js","webpack://cabanaboiler/./src/modules/cards/card__comment/card__comment.js","webpack://cabanaboiler/./src/modules/headers/header--tagged/headerTagged.js","webpack://cabanaboiler/./src/modules/headers/header__megamenu-left-aligned/headerLeftAligned.js","webpack://cabanaboiler/./src/modules/fact-box/onShowMore.js","webpack://cabanaboiler/./src/modules/accordions/accordion.js","webpack://cabanaboiler/./src/scripts/components/objectFitImages.js","webpack://cabanaboiler/./src/modules/headers/header__megamenu-extended/header__megamenu-extended.js","webpack://cabanaboiler/./src/modules/headers/header__megamenu-extended/tab-order-mobile.js","webpack://cabanaboiler/./src/modules/headers/header__megamenu-extended/focus-trap.js","webpack://cabanaboiler/./src/scripts/components/pageLogin.js","webpack://cabanaboiler/./src/modules/intranet/header__intranet/header__intranet.js","webpack://cabanaboiler/./src/modules/heros/hero__multi-box/hero__multi-box.js","webpack://cabanaboiler/./src/modules/footers/footers.js","webpack://cabanaboiler/./src/modules/watermark/watermark.js","webpack://cabanaboiler/./src/scripts/components/smooth-scroll.js","webpack://cabanaboiler/./src/scripts/components/block-media-download.js","webpack://cabanaboiler/./src/modules/modals/modal-subscription/modal-subscription.js","webpack://cabanaboiler/./src/modules/pagination/pagination.js","webpack://cabanaboiler/./src/modules/anchor-links/article-anchor-menu/article-anchor-menu.js","webpack://cabanaboiler/./src/modules/accordions/accordion--mobile/accordion--mobile.js","webpack://cabanaboiler/./src/modules/accordions/accordion--desktop-down/accordion--desktop-down.js","webpack://cabanaboiler/./src/modules/info-boxes/info-box__links__icon/info-box__links__icon.js","webpack://cabanaboiler/./src/modules/carousels/three-column-carousel/three-column-carousel.js","webpack://cabanaboiler/./src/modules/videos/video.js","webpack://cabanaboiler/./src/modules/videos/video-dreambroker.js","webpack://cabanaboiler/./src/modules/videos/video-youtube.js","webpack://cabanaboiler/./src/modules/videos/video-html.js","webpack://cabanaboiler/./src/modules/third-party/borgerDk/borgerDk.js","webpack://cabanaboiler/./src/modules/third-party/sbsys/sbsysaccordion.js","webpack://cabanaboiler/./src/scripts/components/tooltips.js","webpack://cabanaboiler/./src/scripts/components/intext-arrow-link.js","webpack://cabanaboiler/./src/modules/service-menu/service-menu.js","webpack://cabanaboiler/./src/modules/service-menu/service-menu__shareByEmail.js","webpack://cabanaboiler/./src/scripts/components/form-elements.js","webpack://cabanaboiler/./src/modules/side-menu/side-menu.js","webpack://cabanaboiler/./src/modules/side-boxes/side-boxes__counter/side-boxes__counter.js","webpack://cabanaboiler/./src/modules/modals/modal-popup/modal-popup.js","webpack://cabanaboiler/./src/modules/intranet/tab-list--scrollable/tab-list--scrollable.js","webpack://cabanaboiler/./src/scripts/components/video-backgrounds.js","webpack://cabanaboiler/./src/modules/third-party/cludo-search/cludo-search.js","webpack://cabanaboiler/./src/modules/image/image-gallery/image-gallery.js","webpack://cabanaboiler/./src/modules/intranet/chat/chat.js","webpack://cabanaboiler/./src/modules/cards/card__comment/onShowMoreCard.js","webpack://cabanaboiler/./src/modules/third-party/kultunaut/kultunaut-card/kultunaut-card.js","webpack://cabanaboiler/./src/modules/side-boxes/side-boxes__most-popular/side-boxes__most-popular.js","webpack://cabanaboiler/./src/modules/dropdowns/dropdown--md-down/dropdown--md-down.js","webpack://cabanaboiler/./src/modules/banners/banner__hours/bannerHours.js","webpack://cabanaboiler/./src/modules/breadcrumbs/breadcrumb/breadcrumb.js","webpack://cabanaboiler/./src/scripts/components/unsaveButton.js","webpack://cabanaboiler/./src/modules/table-hours/table-hours.js","webpack://cabanaboiler/./src/modules/tab-panels/tabpanel--reworked.js","webpack://cabanaboiler/./src/scripts/components/init-grayscale.js","webpack://cabanaboiler/./src/scripts/components/dark-mode.js","webpack://cabanaboiler/webpack/bootstrap","webpack://cabanaboiler/webpack/runtime/compat get default export","webpack://cabanaboiler/webpack/runtime/define property getters","webpack://cabanaboiler/webpack/runtime/global","webpack://cabanaboiler/webpack/runtime/hasOwnProperty shorthand","webpack://cabanaboiler/webpack/runtime/make namespace object","webpack://cabanaboiler/webpack/runtime/node module decorator","webpack://cabanaboiler/webpack/runtime/runtimeId","webpack://cabanaboiler/webpack/runtime/jsonp chunk loading","webpack://cabanaboiler/webpack/runtime/nonce","webpack://cabanaboiler/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","/* eslint no-prototype-builtins: 0 */\r\n/**\r\n * jQuery-csv (jQuery Plugin)\r\n *\r\n * This document is licensed as free software under the terms of the\r\n * MIT License: http://www.opensource.org/licenses/mit-license.php\r\n *\r\n * Acknowledgements:\r\n * The original design and influence to implement this library as a jquery\r\n * plugin is influenced by jquery-json (http://code.google.com/p/jquery-json/).\r\n * If you're looking to use native JSON.Stringify but want additional backwards\r\n * compatibility for browsers that don't support it, I highly recommend you\r\n * check it out.\r\n *\r\n * A special thanks goes out to rwk@acm.org for providing a lot of valuable\r\n * feedback to the project including the core for the new FSM\r\n * (Finite State Machine) parsers. If you're looking for a stable TSV parser\r\n * be sure to take a look at jquery-tsv (http://code.google.com/p/jquery-tsv/).\r\n\r\n * For legal purposes I'll include the \"NO WARRANTY EXPRESSED OR IMPLIED.\r\n * USE AT YOUR OWN RISK.\". Which, in 'layman's terms' means, by using this\r\n * library you are accepting responsibility if it breaks your code.\r\n *\r\n * Legal jargon aside, I will do my best to provide a useful and stable core\r\n * that can effectively be built on.\r\n *\r\n * Copyrighted 2012 by Evan Plaice.\r\n */\r\n\r\nRegExp.escape = function (s) {\r\n return s.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&')\r\n };\r\n \r\n (function () {\r\n 'use strict'\r\n \r\n let $\r\n \r\n // to keep backwards compatibility\r\n if (typeof jQuery !== 'undefined' && jQuery) {\r\n $ = jQuery\r\n } else {\r\n $ = {}\r\n }\r\n \r\n /**\r\n * jQuery.csv.defaults\r\n * Encapsulates the method paramater defaults for the CSV plugin module.\r\n */\r\n \r\n $.csv = {\r\n defaults: {\r\n separator: ',',\r\n delimiter: '\"',\r\n headers: true\r\n },\r\n \r\n hooks: {\r\n castToScalar: function (value, state) {\r\n const hasDot = /\\./\r\n if (isNaN(value)) {\r\n return value\r\n } else {\r\n if (hasDot.test(value)) {\r\n return parseFloat(value)\r\n } else {\r\n const integer = parseInt(value)\r\n if (isNaN(integer)) {\r\n return null\r\n } else {\r\n return integer\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \r\n parsers: {\r\n parse: function (csv, options) {\r\n // cache settings\r\n const separator = options.separator\r\n const delimiter = options.delimiter\r\n \r\n // set initial state if it's missing\r\n if (!options.state.rowNum) {\r\n options.state.rowNum = 1\r\n }\r\n if (!options.state.colNum) {\r\n options.state.colNum = 1\r\n }\r\n \r\n // clear initial state\r\n const data = []\r\n let entry = []\r\n let state = 0\r\n let value = ''\r\n let exit = false\r\n \r\n function endOfEntry () {\r\n // reset the state\r\n state = 0\r\n value = ''\r\n \r\n // if 'start' hasn't been met, don't output\r\n if (options.start && options.state.rowNum < options.start) {\r\n // update global state\r\n entry = []\r\n options.state.rowNum++\r\n options.state.colNum = 1\r\n return\r\n }\r\n \r\n if (options.onParseEntry === undefined) {\r\n // onParseEntry hook not set\r\n data.push(entry)\r\n } else {\r\n const hookVal = options.onParseEntry(entry, options.state) // onParseEntry Hook\r\n // false skips the row, configurable through a hook\r\n if (hookVal !== false) {\r\n data.push(hookVal)\r\n }\r\n }\r\n // console.log('entry:' + entry);\r\n \r\n // cleanup\r\n entry = []\r\n \r\n // if 'end' is met, stop parsing\r\n if (options.end && options.state.rowNum >= options.end) {\r\n exit = true\r\n }\r\n \r\n // update global state\r\n options.state.rowNum++\r\n options.state.colNum = 1\r\n }\r\n \r\n function endOfValue () {\r\n if (options.onParseValue === undefined) {\r\n // onParseValue hook not set\r\n entry.push(value)\r\n } else if (options.headers && options.state.rowNum === 1) {\r\n // don't onParseValue object headers\r\n entry.push(value)\r\n } else {\r\n const hook = options.onParseValue(value, options.state) // onParseValue Hook\r\n // false skips the row, configurable through a hook\r\n if (hook !== false) {\r\n entry.push(hook)\r\n }\r\n }\r\n // console.log('value:' + value);\r\n // reset the state\r\n value = ''\r\n state = 0\r\n // update global state\r\n options.state.colNum++\r\n }\r\n \r\n // escape regex-specific control chars\r\n const escSeparator = RegExp.escape(separator)\r\n const escDelimiter = RegExp.escape(delimiter)\r\n \r\n // compile the regEx str using the custom delimiter/separator\r\n let match = /(D|S|\\r\\n|\\n|\\r|[^DS\\r\\n]+)/\r\n let matchSrc = match.source\r\n matchSrc = matchSrc.replace(/S/g, escSeparator)\r\n matchSrc = matchSrc.replace(/D/g, escDelimiter)\r\n match = new RegExp(matchSrc, 'gm')\r\n \r\n // put on your fancy pants...\r\n // process control chars individually, use look-ahead on non-control chars\r\n csv.replace(match, function (m0) {\r\n if (exit) {\r\n return\r\n }\r\n switch (state) {\r\n // the start of a value\r\n case 0:\r\n // null last value\r\n if (m0 === separator) {\r\n value += ''\r\n endOfValue()\r\n break\r\n }\r\n // opening delimiter\r\n if (m0 === delimiter) {\r\n state = 1\r\n break\r\n }\r\n // null last value\r\n if (/^(\\r\\n|\\n|\\r)$/.test(m0)) {\r\n endOfValue()\r\n endOfEntry()\r\n break\r\n }\r\n // un-delimited value\r\n value += m0\r\n state = 3\r\n break\r\n \r\n // delimited input\r\n case 1:\r\n // second delimiter? check further\r\n if (m0 === delimiter) {\r\n state = 2\r\n break\r\n }\r\n // delimited data\r\n value += m0\r\n state = 1\r\n break\r\n \r\n // delimiter found in delimited input\r\n case 2:\r\n // escaped delimiter?\r\n if (m0 === delimiter) {\r\n value += m0\r\n state = 1\r\n break\r\n }\r\n // null value\r\n if (m0 === separator) {\r\n endOfValue()\r\n break\r\n }\r\n // end of entry\r\n if (/^(\\r\\n|\\n|\\r)$/.test(m0)) {\r\n endOfValue()\r\n endOfEntry()\r\n break\r\n }\r\n // broken paser?\r\n throw Error('CSVDataError: Illegal State [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']')\r\n \r\n // un-delimited input\r\n case 3:\r\n // null last value\r\n if (m0 === separator) {\r\n endOfValue()\r\n break\r\n }\r\n // end of entry\r\n if (/^(\\r\\n|\\n|\\r)$/.test(m0)) {\r\n endOfValue()\r\n endOfEntry()\r\n break\r\n }\r\n if (m0 === delimiter) {\r\n // non-compliant data\r\n throw Error('CSVDataError: Illegal Quote [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']')\r\n }\r\n // broken parser?\r\n throw Error('CSVDataError: Illegal Data [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']')\r\n default:\r\n // shenanigans\r\n throw Error('CSVDataError: Unknown State [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']')\r\n }\r\n // console.log('val:' + m0 + ' state:' + state);\r\n })\r\n \r\n // submit the last entry\r\n // ignore null last line\r\n if (entry.length !== 0) {\r\n endOfValue()\r\n endOfEntry()\r\n }\r\n \r\n return data\r\n },\r\n \r\n // a csv-specific line splitter\r\n splitLines: function (csv, options) {\r\n if (!csv) {\r\n return undefined\r\n }\r\n \r\n options = options || {}\r\n \r\n // cache settings\r\n const separator = options.separator || $.csv.defaults.separator\r\n const delimiter = options.delimiter || $.csv.defaults.delimiter\r\n \r\n // set initial state if it's missing\r\n options.state = options.state || {}\r\n if (!options.state.rowNum) {\r\n options.state.rowNum = 1\r\n }\r\n \r\n // clear initial state\r\n const entries = []\r\n let state = 0\r\n let entry = ''\r\n let exit = false\r\n \r\n function endOfLine () {\r\n // reset the state\r\n state = 0\r\n \r\n // if 'start' hasn't been met, don't output\r\n if (options.start && options.state.rowNum < options.start) {\r\n // update global state\r\n entry = ''\r\n options.state.rowNum++\r\n return\r\n }\r\n \r\n if (options.onParseEntry === undefined) {\r\n // onParseEntry hook not set\r\n entries.push(entry)\r\n } else {\r\n const hookVal = options.onParseEntry(entry, options.state) // onParseEntry Hook\r\n // false skips the row, configurable through a hook\r\n if (hookVal !== false) {\r\n entries.push(hookVal)\r\n }\r\n }\r\n \r\n // cleanup\r\n entry = ''\r\n \r\n // if 'end' is met, stop parsing\r\n if (options.end && options.state.rowNum >= options.end) {\r\n exit = true\r\n }\r\n \r\n // update global state\r\n options.state.rowNum++\r\n }\r\n \r\n // escape regex-specific control chars\r\n const escSeparator = RegExp.escape(separator)\r\n const escDelimiter = RegExp.escape(delimiter)\r\n \r\n // compile the regEx str using the custom delimiter/separator\r\n let match = /(D|S|\\n|\\r|[^DS\\r\\n]+)/\r\n let matchSrc = match.source\r\n matchSrc = matchSrc.replace(/S/g, escSeparator)\r\n matchSrc = matchSrc.replace(/D/g, escDelimiter)\r\n match = new RegExp(matchSrc, 'gm')\r\n \r\n // put on your fancy pants...\r\n // process control chars individually, use look-ahead on non-control chars\r\n csv.replace(match, function (m0) {\r\n if (exit) {\r\n return\r\n }\r\n switch (state) {\r\n // the start of a value/entry\r\n case 0:\r\n // null value\r\n if (m0 === separator) {\r\n entry += m0\r\n state = 0\r\n break\r\n }\r\n // opening delimiter\r\n if (m0 === delimiter) {\r\n entry += m0\r\n state = 1\r\n break\r\n }\r\n // end of line\r\n if (m0 === '\\n') {\r\n endOfLine()\r\n break\r\n }\r\n // phantom carriage return\r\n if (/^\\r$/.test(m0)) {\r\n break\r\n }\r\n // un-delimit value\r\n entry += m0\r\n state = 3\r\n break\r\n \r\n // delimited input\r\n case 1:\r\n // second delimiter? check further\r\n if (m0 === delimiter) {\r\n entry += m0\r\n state = 2\r\n break\r\n }\r\n // delimited data\r\n entry += m0\r\n state = 1\r\n break\r\n \r\n // delimiter found in delimited input\r\n case 2: {\r\n // escaped delimiter?\r\n const prevChar = entry.substr(entry.length - 1)\r\n if (m0 === delimiter && prevChar === delimiter) {\r\n entry += m0\r\n state = 1\r\n break\r\n }\r\n // end of value\r\n if (m0 === separator) {\r\n entry += m0\r\n state = 0\r\n break\r\n }\r\n // end of line\r\n if (m0 === '\\n') {\r\n endOfLine()\r\n break\r\n }\r\n // phantom carriage return\r\n if (m0 === '\\r') {\r\n break\r\n }\r\n // broken paser?\r\n throw Error('CSVDataError: Illegal state [Row:' + options.state.rowNum + ']')\r\n }\r\n // un-delimited input\r\n case 3:\r\n // null value\r\n if (m0 === separator) {\r\n entry += m0\r\n state = 0\r\n break\r\n }\r\n // end of line\r\n if (m0 === '\\n') {\r\n endOfLine()\r\n break\r\n }\r\n // phantom carriage return\r\n if (m0 === '\\r') {\r\n break\r\n }\r\n // non-compliant data\r\n if (m0 === delimiter) {\r\n throw Error('CSVDataError: Illegal quote [Row:' + options.state.rowNum + ']')\r\n }\r\n // broken parser?\r\n throw Error('CSVDataError: Illegal state [Row:' + options.state.rowNum + ']')\r\n default:\r\n // shenanigans\r\n throw Error('CSVDataError: Unknown state [Row:' + options.state.rowNum + ']')\r\n }\r\n // console.log('val:' + m0 + ' state:' + state);\r\n })\r\n \r\n // submit the last entry\r\n // ignore null last line\r\n if (entry !== '') {\r\n endOfLine()\r\n }\r\n \r\n return entries\r\n },\r\n \r\n // a csv entry parser\r\n parseEntry: function (csv, options) {\r\n // cache settings\r\n const separator = options.separator\r\n const delimiter = options.delimiter\r\n \r\n // set initial state if it's missing\r\n if (!options.state.rowNum) {\r\n options.state.rowNum = 1\r\n }\r\n if (!options.state.colNum) {\r\n options.state.colNum = 1\r\n }\r\n \r\n // clear initial state\r\n const entry = []\r\n let state = 0\r\n let value = ''\r\n \r\n function endOfValue () {\r\n if (options.onParseValue === undefined) {\r\n // onParseValue hook not set\r\n entry.push(value)\r\n } else {\r\n const hook = options.onParseValue(value, options.state) // onParseValue Hook\r\n // false skips the value, configurable through a hook\r\n if (hook !== false) {\r\n entry.push(hook)\r\n }\r\n }\r\n // reset the state\r\n value = ''\r\n state = 0\r\n // update global state\r\n options.state.colNum++\r\n }\r\n \r\n // checked for a cached regEx first\r\n if (!options.match) {\r\n // escape regex-specific control chars\r\n const escSeparator = RegExp.escape(separator)\r\n const escDelimiter = RegExp.escape(delimiter)\r\n \r\n // compile the regEx str using the custom delimiter/separator\r\n const match = /(D|S|\\n|\\r|[^DS\\r\\n]+)/\r\n let matchSrc = match.source\r\n matchSrc = matchSrc.replace(/S/g, escSeparator)\r\n matchSrc = matchSrc.replace(/D/g, escDelimiter)\r\n options.match = new RegExp(matchSrc, 'gm')\r\n }\r\n \r\n // put on your fancy pants...\r\n // process control chars individually, use look-ahead on non-control chars\r\n csv.replace(options.match, function (m0) {\r\n switch (state) {\r\n // the start of a value\r\n case 0:\r\n // null last value\r\n if (m0 === separator) {\r\n value += ''\r\n endOfValue()\r\n break\r\n }\r\n // opening delimiter\r\n if (m0 === delimiter) {\r\n state = 1\r\n break\r\n }\r\n // skip un-delimited new-lines\r\n if (m0 === '\\n' || m0 === '\\r') {\r\n break\r\n }\r\n // un-delimited value\r\n value += m0\r\n state = 3\r\n break\r\n \r\n // delimited input\r\n case 1:\r\n // second delimiter? check further\r\n if (m0 === delimiter) {\r\n state = 2\r\n break\r\n }\r\n // delimited data\r\n value += m0\r\n state = 1\r\n break\r\n \r\n // delimiter found in delimited input\r\n case 2:\r\n // escaped delimiter?\r\n if (m0 === delimiter) {\r\n value += m0\r\n state = 1\r\n break\r\n }\r\n // null value\r\n if (m0 === separator) {\r\n endOfValue()\r\n break\r\n }\r\n // skip un-delimited new-lines\r\n if (m0 === '\\n' || m0 === '\\r') {\r\n break\r\n }\r\n // broken paser?\r\n throw Error('CSVDataError: Illegal State [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']')\r\n \r\n // un-delimited input\r\n case 3:\r\n // null last value\r\n if (m0 === separator) {\r\n endOfValue()\r\n break\r\n }\r\n // skip un-delimited new-lines\r\n if (m0 === '\\n' || m0 === '\\r') {\r\n break\r\n }\r\n // non-compliant data\r\n if (m0 === delimiter) {\r\n throw Error('CSVDataError: Illegal Quote [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']')\r\n }\r\n // broken parser?\r\n throw Error('CSVDataError: Illegal Data [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']')\r\n default:\r\n // shenanigans\r\n throw Error('CSVDataError: Unknown State [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']')\r\n }\r\n // console.log('val:' + m0 + ' state:' + state);\r\n })\r\n \r\n // submit the last value\r\n endOfValue()\r\n \r\n return entry\r\n }\r\n },\r\n \r\n helpers: {\r\n \r\n /**\r\n * $.csv.helpers.collectPropertyNames(objectsArray)\r\n * Collects all unique property names from all passed objects.\r\n *\r\n * @param {Array} objects Objects to collect properties from.\r\n *\r\n * Returns an array of property names (array will be empty,\r\n * if objects have no own properties).\r\n */\r\n collectPropertyNames: function (objects) {\r\n let o = []\r\n let propName = []\r\n const props = []\r\n for (o in objects) {\r\n for (propName in objects[o]) {\r\n if ((objects[o].hasOwnProperty(propName)) &&\r\n (props.indexOf(propName) < 0) &&\r\n (typeof objects[o][propName] !== 'function')) {\r\n props.push(propName)\r\n }\r\n }\r\n }\r\n return props\r\n }\r\n },\r\n \r\n /**\r\n * $.csv.toArray(csv)\r\n * Converts a CSV entry string to a javascript array.\r\n *\r\n * @param {Array} csv The string containing the CSV data.\r\n * @param {Object} [options] An object containing user-defined options.\r\n * @param {Character} [separator] An override for the separator character. Defaults to a comma(,).\r\n * @param {Character} [delimiter] An override for the delimiter character. Defaults to a double-quote(\").\r\n *\r\n * This method deals with simple CSV strings only. It's useful if you only\r\n * need to parse a single entry. If you need to parse more than one line,\r\n * use $.csv2Array instead.\r\n */\r\n toArray: function (csv, options, callback) {\r\n // if callback was passed to options swap callback with options\r\n if (options !== undefined && typeof (options) === 'function') {\r\n if (callback !== undefined) {\r\n return console.error('You cannot 3 arguments with the 2nd argument being a function')\r\n }\r\n callback = options\r\n options = {}\r\n }\r\n \r\n options = (options !== undefined ? options : {})\r\n const config = {}\r\n config.callback = ((callback !== undefined && typeof (callback) === 'function') ? callback : false)\r\n config.separator = 'separator' in options ? options.separator : $.csv.defaults.separator\r\n config.delimiter = 'delimiter' in options ? options.delimiter : $.csv.defaults.delimiter\r\n const state = (options.state !== undefined ? options.state : {})\r\n \r\n // setup\r\n options = {\r\n delimiter: config.delimiter,\r\n separator: config.separator,\r\n onParseEntry: options.onParseEntry,\r\n onParseValue: options.onParseValue,\r\n state: state\r\n }\r\n \r\n const entry = $.csv.parsers.parseEntry(csv, options)\r\n \r\n // push the value to a callback if one is defined\r\n if (!config.callback) {\r\n return entry\r\n } else {\r\n config.callback('', entry)\r\n }\r\n },\r\n \r\n /**\r\n * $.csv.toArrays(csv)\r\n * Converts a CSV string to a javascript array.\r\n *\r\n * @param {String} csv The string containing the raw CSV data.\r\n * @param {Object} [options] An object containing user-defined options.\r\n * @param {Character} [separator] An override for the separator character. Defaults to a comma(,).\r\n * @param {Character} [delimiter] An override for the delimiter character. Defaults to a double-quote(\").\r\n *\r\n * This method deals with multi-line CSV. The breakdown is simple. The first\r\n * dimension of the array represents the line (or entry/row) while the second\r\n * dimension contains the values (or values/columns).\r\n */\r\n toArrays: function (csv, options, callback) {\r\n // if callback was passed to options swap callback with options\r\n if (options !== undefined && typeof (options) === 'function') {\r\n if (callback !== undefined) {\r\n return console.error('You cannot 3 arguments with the 2nd argument being a function')\r\n }\r\n callback = options\r\n options = {}\r\n }\r\n \r\n options = (options !== undefined ? options : {})\r\n const config = {}\r\n config.callback = ((callback !== undefined && typeof (callback) === 'function') ? callback : false)\r\n config.separator = 'separator' in options ? options.separator : $.csv.defaults.separator\r\n config.delimiter = 'delimiter' in options ? options.delimiter : $.csv.defaults.delimiter\r\n \r\n // setup\r\n let data = []\r\n options = {\r\n delimiter: config.delimiter,\r\n separator: config.separator,\r\n onPreParse: options.onPreParse,\r\n onParseEntry: options.onParseEntry,\r\n onParseValue: options.onParseValue,\r\n onPostParse: options.onPostParse,\r\n start: options.start,\r\n end: options.end,\r\n state: {\r\n rowNum: 1,\r\n colNum: 1\r\n }\r\n }\r\n \r\n // onPreParse hook\r\n if (options.onPreParse !== undefined) {\r\n csv = options.onPreParse(csv, options.state)\r\n }\r\n \r\n // parse the data\r\n data = $.csv.parsers.parse(csv, options)\r\n \r\n // onPostParse hook\r\n if (options.onPostParse !== undefined) {\r\n data = options.onPostParse(data, options.state)\r\n }\r\n \r\n // push the value to a callback if one is defined\r\n if (!config.callback) {\r\n return data\r\n } else {\r\n config.callback('', data)\r\n }\r\n },\r\n \r\n /**\r\n * $.csv.toObjects(csv)\r\n * Converts a CSV string to a javascript object.\r\n * @param {String} csv The string containing the raw CSV data.\r\n * @param {Object} [options] An object containing user-defined options.\r\n * @param {Character} [separator] An override for the separator character. Defaults to a comma(,).\r\n * @param {Character} [delimiter] An override for the delimiter character. Defaults to a double-quote(\").\r\n * @param {Boolean} [headers] Indicates whether the data contains a header line. Defaults to true.\r\n *\r\n * This method deals with multi-line CSV strings. Where the headers line is\r\n * used as the key for each value per entry.\r\n */\r\n toObjects: function (csv, options, callback) {\r\n // if callback was passed to options swap callback with options\r\n if (options !== undefined && typeof (options) === 'function') {\r\n if (callback !== undefined) {\r\n return console.error('You cannot 3 arguments with the 2nd argument being a function')\r\n }\r\n callback = options\r\n options = {}\r\n }\r\n \r\n options = (options !== undefined ? options : {})\r\n const config = {}\r\n config.callback = ((callback !== undefined && typeof (callback) === 'function') ? callback : false)\r\n config.separator = 'separator' in options ? options.separator : $.csv.defaults.separator\r\n config.delimiter = 'delimiter' in options ? options.delimiter : $.csv.defaults.delimiter\r\n config.headers = 'headers' in options ? options.headers : $.csv.defaults.headers\r\n options.start = 'start' in options ? options.start : 1\r\n \r\n // account for headers\r\n if (config.headers) {\r\n options.start++\r\n }\r\n if (options.end && config.headers) {\r\n options.end++\r\n }\r\n \r\n // setup\r\n let lines = []\r\n let data = []\r\n \r\n options = {\r\n delimiter: config.delimiter,\r\n separator: config.separator,\r\n onPreParse: options.onPreParse,\r\n onParseEntry: options.onParseEntry,\r\n onParseValue: options.onParseValue,\r\n onPostParse: options.onPostParse,\r\n start: options.start,\r\n end: options.end,\r\n state: {\r\n rowNum: 1,\r\n colNum: 1\r\n },\r\n match: false,\r\n transform: options.transform\r\n }\r\n \r\n // fetch the headers\r\n const headerOptions = {\r\n delimiter: config.delimiter,\r\n separator: config.separator,\r\n start: 1,\r\n end: 1,\r\n state: {\r\n rowNum: 1,\r\n colNum: 1\r\n },\r\n headers: true\r\n }\r\n \r\n // onPreParse hook\r\n if (options.onPreParse !== undefined) {\r\n csv = options.onPreParse(csv, options.state)\r\n }\r\n \r\n // parse the csv\r\n const headerLine = $.csv.parsers.splitLines(csv, headerOptions)\r\n const headers = $.csv.toArray(headerLine[0], headerOptions)\r\n \r\n // fetch the data\r\n lines = $.csv.parsers.splitLines(csv, options)\r\n \r\n // reset the state for re-use\r\n options.state.colNum = 1\r\n if (headers) {\r\n options.state.rowNum = 2\r\n } else {\r\n options.state.rowNum = 1\r\n }\r\n \r\n // convert data to objects\r\n for (let i = 0, len = lines.length; i < len; i++) {\r\n const entry = $.csv.toArray(lines[i], options)\r\n const object = {}\r\n for (let j = 0; j < headers.length; j++) {\r\n object[headers[j]] = entry[j]\r\n }\r\n if (options.transform !== undefined) {\r\n data.push(options.transform.call(undefined, object))\r\n } else {\r\n data.push(object)\r\n }\r\n \r\n // update row state\r\n options.state.rowNum++\r\n }\r\n \r\n // onPostParse hook\r\n if (options.onPostParse !== undefined) {\r\n data = options.onPostParse(data, options.state)\r\n }\r\n \r\n // push the value to a callback if one is defined\r\n if (!config.callback) {\r\n return data\r\n } else {\r\n config.callback('', data)\r\n }\r\n },\r\n \r\n /**\r\n * $.csv.fromArrays(arrays)\r\n * Converts a javascript array to a CSV String.\r\n *\r\n * @param {Array} arrays An array containing an array of CSV entries.\r\n * @param {Object} [options] An object containing user-defined options.\r\n * @param {Character} [separator] An override for the separator character. Defaults to a comma(,).\r\n * @param {Character} [delimiter] An override for the delimiter character. Defaults to a double-quote(\").\r\n *\r\n * This method generates a CSV file from an array of arrays (representing entries).\r\n */\r\n fromArrays: function (arrays, options, callback) {\r\n // if callback was passed to options swap callback with options\r\n if (options !== undefined && typeof (options) === 'function') {\r\n if (callback !== undefined) {\r\n return console.error('You cannot 3 arguments with the 2nd argument being a function')\r\n }\r\n callback = options\r\n options = {}\r\n }\r\n \r\n options = (options !== undefined ? options : {})\r\n const config = {}\r\n config.callback = ((callback !== undefined && typeof (callback) === 'function') ? callback : false)\r\n config.separator = 'separator' in options ? options.separator : $.csv.defaults.separator\r\n config.delimiter = 'delimiter' in options ? options.delimiter : $.csv.defaults.delimiter\r\n \r\n let output = ''\r\n \r\n for (let i = 0; i < arrays.length; i++) {\r\n const line = arrays[i]\r\n const lineValues = []\r\n for (let j = 0; j < line.length; j++) {\r\n let strValue = (line[j] === undefined || line[j] === null) ? '' : line[j].toString()\r\n if (strValue.indexOf(config.delimiter) > -1) {\r\n strValue = strValue.replace(new RegExp(config.delimiter, 'g'), config.delimiter + config.delimiter)\r\n }\r\n \r\n let escMatcher = '\\n|\\r|S|D'\r\n escMatcher = escMatcher.replace('S', config.separator)\r\n escMatcher = escMatcher.replace('D', config.delimiter)\r\n \r\n if (strValue.search(escMatcher) > -1) {\r\n strValue = config.delimiter + strValue + config.delimiter\r\n }\r\n lineValues.push(strValue)\r\n }\r\n output += lineValues.join(config.separator) + '\\n'\r\n }\r\n \r\n // push the value to a callback if one is defined\r\n if (!config.callback) {\r\n return output\r\n } else {\r\n config.callback('', output)\r\n }\r\n },\r\n \r\n /**\r\n * $.csv.fromObjects(objects)\r\n * Converts a javascript dictionary to a CSV string.\r\n *\r\n * @param {Object} objects An array of objects containing the data.\r\n * @param {Object} [options] An object containing user-defined options.\r\n * @param {Character} [separator] An override for the separator character. Defaults to a comma(,).\r\n * @param {Character} [delimiter] An override for the delimiter character. Defaults to a double-quote(\").\r\n * @param {Character} [sortOrder] Sort order of columns (named after\r\n * object properties). Use 'alpha' for alphabetic. Default is 'declare',\r\n * which means, that properties will _probably_ appear in order they were\r\n * declared for the object. But without any guarantee.\r\n * @param {Character or Array} [manualOrder] Manually order columns. May be\r\n * a strin in a same csv format as an output or an array of header names\r\n * (array items won't be parsed). All the properties, not present in\r\n * `manualOrder` will be appended to the end in accordance with `sortOrder`\r\n * option. So the `manualOrder` always takes preference, if present.\r\n *\r\n * This method generates a CSV file from an array of objects (name:value pairs).\r\n * It starts by detecting the headers and adding them as the first line of\r\n * the CSV file, followed by a structured dump of the data.\r\n */\r\n fromObjects: function (objects, options, callback) {\r\n // if callback was passed to options swap callback with options\r\n if (options !== undefined && typeof (options) === 'function') {\r\n if (callback !== undefined) {\r\n return console.error('You cannot 3 arguments with the 2nd argument being a function')\r\n }\r\n callback = options\r\n options = {}\r\n }\r\n \r\n options = (options !== undefined ? options : {})\r\n const config = {}\r\n config.callback = ((callback !== undefined && typeof (callback) === 'function') ? callback : false)\r\n config.separator = 'separator' in options ? options.separator : $.csv.defaults.separator\r\n config.delimiter = 'delimiter' in options ? options.delimiter : $.csv.defaults.delimiter\r\n config.headers = 'headers' in options ? options.headers : $.csv.defaults.headers\r\n config.sortOrder = 'sortOrder' in options ? options.sortOrder : 'declare'\r\n config.manualOrder = 'manualOrder' in options ? options.manualOrder : []\r\n config.transform = options.transform\r\n \r\n if (typeof config.manualOrder === 'string') {\r\n config.manualOrder = $.csv.toArray(config.manualOrder, config)\r\n }\r\n \r\n if (config.transform !== undefined) {\r\n const origObjects = objects\r\n objects = []\r\n \r\n for (let i = 0; i < origObjects.length; i++) {\r\n objects.push(config.transform.call(undefined, origObjects[i]))\r\n }\r\n }\r\n \r\n let props = $.csv.helpers.collectPropertyNames(objects)\r\n \r\n if (config.sortOrder === 'alpha') {\r\n props.sort()\r\n }\r\n \r\n if (config.manualOrder.length > 0) {\r\n const propsManual = [].concat(config.manualOrder)\r\n \r\n for (let p = 0; p < props.length; p++) {\r\n if (propsManual.indexOf(props[p]) < 0) {\r\n propsManual.push(props[p])\r\n }\r\n }\r\n props = propsManual\r\n }\r\n \r\n let line\r\n const output = []\r\n let propName\r\n if (config.headers) {\r\n output.push(props)\r\n }\r\n \r\n for (let o = 0; o < objects.length; o++) {\r\n line = []\r\n for (let p = 0; p < props.length; p++) {\r\n propName = props[p]\r\n if (propName in objects[o] && typeof objects[o][propName] !== 'function') {\r\n line.push(objects[o][propName])\r\n } else {\r\n line.push('')\r\n }\r\n }\r\n output.push(line)\r\n }\r\n \r\n // push the value to a callback if one is defined\r\n return $.csv.fromArrays(output, options, config.callback)\r\n }\r\n }\r\n \r\n // Maintenance code to maintain backward-compatibility\r\n // Will be removed in release 1.0\r\n $.csvEntry2Array = $.csv.toArray\r\n $.csv2Array = $.csv.toArrays\r\n $.csv2Dictionary = $.csv.toObjects\r\n \r\n // CommonJS module is defined\r\n if (typeof module !== 'undefined' && module.exports) {\r\n module.exports = $.csv\r\n }\r\n }).call(this)","/**\r\n * Card portrait - no image carousel\r\n * https://owlcarousel2.github.io/\r\n */\r\n\r\n// eslint-disable-next-line no-unused-vars\r\nimport owl from '../../../../node_modules/owl.carousel/dist/owl.carousel.min'\r\n\r\nexport function carouselCards() {\r\n\r\n jQuery(function () {\r\n if (jQuery(\".owl-card-carousel\").length < 1) {\r\n return;\r\n }\r\n\r\n jQuery(\".owl-card-carousel\").each(function () {\r\n var overThreeItems = false;\r\n var $thisCardCarousel = jQuery(this);\r\n // var $dataStagepadding = jQuery(\".owl-card-carousel\").data(\"stagepadding\");\r\n\r\n if ($thisCardCarousel.children('.item').length >= 3 && jQuery(window).width() <= 991 || $thisCardCarousel.children('.item').length >= 3) {\r\n overThreeItems = true;\r\n }\r\n\r\n $thisCardCarousel.owlCarousel({\r\n\t\t\t\tstagePadding: 0,\r\n\t\t\t\titems: 3,\r\n\t\t\t\tnav: false,\r\n\t\t\t\tdots: overThreeItems,\r\n\t\t\t\tloop: overThreeItems,\r\n\t\t\t\tmargin: 25,\r\n\t\t\t\tpullDrag: true,\r\n\t\t\t\ttouchDrag: true,\r\n\t\t\t\tmouseDrag: true,\r\n\t\t\t\tresponsiveClass: true,\r\n\r\n responsive: {\r\n 0: {\r\n items: 1,\r\n stagePadding: 40\r\n },\r\n 600: {\r\n items: 2,\r\n stagePadding: 40 * 2\r\n },\r\n 991: {\r\n items: 3\r\n }\r\n }\r\n });\r\n\r\n\t\t\tjQuery('.owl-card-carousel').find('.owl-dot').each(function(index) {\r\n\t\t\t\tjQuery(this).removeAttr('role');\r\n\t\t\t\tjQuery(this).attr('aria-label', 'slide-' + index);\r\n\t\t\t});\r\n });\r\n });\r\n\r\n}\r\n\r\nexport default carouselCards;\r\n","export function autosuggestions() {\r\n\tconst suggestionsElements = document.querySelectorAll(\".js-auto-suggestions\");\r\n\tconst htmlElement = document.querySelector(\"html\");\r\n\tif (suggestionsElements.length) {\r\n\t\tconst testSuggestions = [\r\n\t\t\t\"Apple\",\r\n\t\t\t\"Banana\",\r\n\t\t\t\"Cherry\",\r\n\t\t\t\"Date\",\r\n\t\t\t\"Elderberry\",\r\n\t\t\t\"Fig\",\r\n\t\t\t\"Grape\",\r\n\t\t];\r\n\t\tconst useTestData = false; // Set to `true` in the test environment, always set to false before committing\r\n\r\n\t\tsuggestionsElements.forEach((suggestionsElement) => {\r\n\t\t\tsuggestionsElement.addEventListener(\"input\", () => {\r\n\t\t\t\tconst inputValue = suggestionsElement.value;\r\n\t\t\t\tif (inputValue.length > 1) {\r\n\t\t\t\t\tif (useTestData) {\r\n\t\t\t\t\t\t// Use the test array instead of fetching from the API\r\n\t\t\t\t\t\tconst suggestionsMarkup = generateSuggestionsMarkup(\r\n\t\t\t\t\t\t\ttestSuggestions,\r\n\t\t\t\t\t\t\tinputValue,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\taddSuggestionsMarkup(suggestionsElement, suggestionsMarkup);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tconst pageId =\r\n\t\t\t\t\t\t\tsuggestionsElement.getAttribute(\"data-search-pageid\");\r\n\t\t\t\t\t\tconst useraffle = suggestionsElement.getAttribute(\"data-useraffle\");\r\n\t\t\t\t\t\tconst lang = htmlElement.getAttribute(\"lang\");\r\n\t\t\t\t\t\t// Define the API URL\r\n\t\t\t\t\t\tconst apiUrl =\r\n\t\t\t\t\t\t\t\"/umbraco/api/search/GetTypeAhead?searchTerm=\" +\r\n\t\t\t\t\t\t\tinputValue +\r\n\t\t\t\t\t\t\t\"&pageId=\" +\r\n\t\t\t\t\t\t\tpageId +\r\n\t\t\t\t\t\t\t\"&lang=\" +\r\n\t\t\t\t\t\t\tlang +\r\n\t\t\t\t\t\t\t\"&useRaffle=\" +\r\n\t\t\t\t\t\t\tuseraffle;\r\n\t\t\t\t\t\tfetch(apiUrl, {\r\n\t\t\t\t\t\t\tmethod: \"GET\",\r\n\t\t\t\t\t\t\theaders: {\r\n\t\t\t\t\t\t\t\t\"Content-Type\": \"application/json\",\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t.then((response) => response.json())\r\n\t\t\t\t\t\t\t.then((data) => {\r\n\t\t\t\t\t\t\t\t// Handle the response data\r\n\t\t\t\t\t\t\t\tif (Array.isArray(data)) {\r\n\t\t\t\t\t\t\t\t\tif (data.length) {\r\n\t\t\t\t\t\t\t\t\t\tconst suggestionsMarkup = generateSuggestionsMarkup(\r\n\t\t\t\t\t\t\t\t\t\t\tdata,\r\n\t\t\t\t\t\t\t\t\t\t\tinputValue,\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\taddSuggestionsMarkup(suggestionsElement, suggestionsMarkup);\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\tremoveSuggestions(suggestionsElement);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tremoveSuggestions(suggestionsElement);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t.catch((error) => {\r\n\t\t\t\t\t\t\t\t// Handle any errors\r\n\t\t\t\t\t\t\t\tconsole.error(\"Error:\", error);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (inputValue.length == 0) {\r\n\t\t\t\t\tremoveSuggestions(suggestionsElement);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tsuggestionsElement.addEventListener(\"click\", (event) => {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t});\r\n\t\t\t// Add focus event to show top questions when input is focused\r\n\t\t\tsuggestionsElement.addEventListener(\"focus\", () => {\r\n\t\t\t\tif (suggestionsElement.value.length === 0) {\r\n\t\t\t\t\tAddTopSuggestions(suggestionsElement);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t// UNFOCUS EVENT NOT ON .suggestions--autocomplete\r\n\t\t\tsuggestionsElement.addEventListener(\"blur\", () => {\r\n\t\t\t\t// Forsinket fjernelse for at give tid til klik på forslag\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tremoveSuggestions(suggestionsElement);\r\n\t\t\t\t}, 200);\r\n\t\t\t});\r\n\r\n\t\t\tsuggestionsElement.addEventListener(\"keydown\", (event) => {\r\n\t\t\t\tconst closestForm = suggestionsElement.closest(\"form\");\r\n\t\t\t\tconst suggestionsContainer = closestForm.querySelector(\r\n\t\t\t\t\t\".suggestions--autocomplete ul\",\r\n\t\t\t\t);\r\n\t\t\t\tif (suggestionsContainer) {\r\n\t\t\t\t\tconst items = suggestionsContainer.querySelectorAll(\"li\");\r\n\t\t\t\t\tlet currentIndex = Array.from(items).findIndex((item) =>\r\n\t\t\t\t\t\titem.classList.contains(\"highlighted\"),\r\n\t\t\t\t\t);\r\n\t\t\t\t\tif (event.key === \"ArrowDown\") {\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\tif (currentIndex < items.length - 1) {\r\n\t\t\t\t\t\t\tcurrentIndex++;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tcurrentIndex = 0;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\thighlightItem(items, currentIndex);\r\n\t\t\t\t\t} else if (event.key === \"ArrowUp\") {\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\tif (currentIndex > 0) {\r\n\t\t\t\t\t\t\tcurrentIndex--;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tcurrentIndex = items.length - 1;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\thighlightItem(items, currentIndex);\r\n\t\t\t\t\t} else if (event.key === \"Enter\") {\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\tif (currentIndex > -1) {\r\n\t\t\t\t\t\t\tif (items[currentIndex].querySelector(\"button\").dataset.query) {\r\n\t\t\t\t\t\t\t\tsuggestionsElement.value =\r\n\t\t\t\t\t\t\t\t\titems[currentIndex].querySelector(\"button\").dataset.query;\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tsuggestionsElement.value =\r\n\t\t\t\t\t\t\t\t\titems[currentIndex].querySelector(\"button\").innerText;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tremoveSuggestions(suggestionsElement);\r\n\r\n\t\t\t\t\t\t\tif (closestForm) {\r\n\t\t\t\t\t\t\t\tclosestForm.submit();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tif (closestForm) {\r\n\t\t\t\t\t\t\t\tclosestForm.submit();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tfunction generateSuggestionsMarkup(suggestions, searchTerm) {\r\n\t\tlet markup = '
\";\r\n\t\treturn markup;\r\n\t}\r\n\r\n\tfunction addSuggestionsMarkup(inputElement, markup) {\r\n\t\tconst formElement = inputElement.closest(\"form\");\r\n\t\tif (formElement) {\r\n\t\t\t// Remove existing suggestions if present\r\n\t\t\tconst existingSuggestions = formElement.querySelector(\r\n\t\t\t\t\".suggestions--autocomplete\",\r\n\t\t\t);\r\n\t\t\tif (existingSuggestions) {\r\n\t\t\t\texistingSuggestions.remove();\r\n\t\t\t}\r\n\r\n\t\t\t// Insert the new suggestions\r\n\t\t\tformElement.insertAdjacentHTML(\"beforeend\", markup);\r\n\r\n\t\t\t// Add click event listener to each suggestion\r\n\t\t\tconst suggestionButtons = formElement.querySelectorAll(\r\n\t\t\t\t\".suggestions--autocomplete button\",\r\n\t\t\t);\r\n\t\t\tsuggestionButtons.forEach((button) => {\r\n\t\t\t\tbutton.addEventListener(\"click\", (event) => {\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\tconsole.log(\"Clicked suggestion:\", button.innerText);\r\n\t\t\t\t\tif (button.dataset.query) {\r\n\t\t\t\t\t\tinputElement.value = button.dataset.query;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tinputElement.value = button.innerText;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tremoveSuggestions(inputElement);\r\n\t\t\t\t\tconst closestForm = inputElement.closest(\"form\");\r\n\t\t\t\t\tif (closestForm) {\r\n\t\t\t\t\t\tclosestForm.submit();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\tfunction removeSuggestions(inputElement) {\r\n\t\tconst formElement = inputElement.closest(\"form\");\r\n\t\tif (formElement) {\r\n\t\t\tconst existingSuggestions = formElement.querySelector(\r\n\t\t\t\t\".suggestions--autocomplete\",\r\n\t\t\t);\r\n\t\t\tif (existingSuggestions) {\r\n\t\t\t\texistingSuggestions.remove();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tfunction highlightItem(items, index) {\r\n\t\titems.forEach((item, idx) => {\r\n\t\t\tif (idx === index) {\r\n\t\t\t\titem.classList.add(\"highlighted\");\r\n\t\t\t\titem.scrollIntoView({ block: \"nearest\" });\r\n\t\t\t} else {\r\n\t\t\t\titem.classList.remove(\"highlighted\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tfunction generateTopquestionsMarkup(topQuestions) {\r\n\t\tconsole.log(topQuestions);\r\n\t\tlet markup = '
';\r\n\t\tmarkup += `

${topQuestions.title}

`;\r\n\t\tmarkup += \"
\";\r\n\t\treturn markup;\r\n\t}\r\n\tfunction AddTopSuggestions(topQuestionElement) {\r\n\t\tconst pageId = topQuestionElement.getAttribute(\"data-search-pageid\");\r\n\t\tconst useraffle = topQuestionElement.getAttribute(\"data-useraffle\");\r\n\t\tconst lang = htmlElement.getAttribute(\"lang\");\r\n\t\tconst apiUrl =\r\n\t\t\t\"/umbraco/api/search/GetTopQuestions?pageId=\" +\r\n\t\t\tpageId +\r\n\t\t\t\"&lang=\" +\r\n\t\t\tlang +\r\n\t\t\t\"&useRaffle=\" +\r\n\t\t\tuseraffle;\r\n\t\tfetch(apiUrl, {\r\n\t\t\tmethod: \"GET\",\r\n\t\t})\r\n\t\t\t.then((response) => response.json())\r\n\t\t\t.then((data) => {\r\n\t\t\t\tconst topQuestionsMarkup = generateTopquestionsMarkup(data);\r\n\t\t\t\taddSuggestionsMarkup(topQuestionElement, topQuestionsMarkup);\r\n\t\t\t})\r\n\t\t\t.catch((error) => {\r\n\t\t\t\tconsole.error(\"Error:\", error);\r\n\t\t\t});\r\n\t}\r\n}\r\n\r\nexport default autosuggestions;\r\n","import { unset } from \"lodash\";\r\n\r\nexport function progress() {\r\n\tvar progress = jQuery('progress:not(.progressbar__value)');\r\n\tif (progress.length > 0) {\r\n\t\tvar\tarticleHeight = jQuery('.article-wrapper').height(),\r\n\t\t\tprogressBar = jQuery('progress:not(.progressbar__value)'),\r\n\t\t\tmenuHeight = jQuery('header').height(),\r\n\t\t\tmax, value;\r\n\r\n\t\t/* Set the max scrollable area */\r\n\t\tmax = articleHeight + 200;\r\n\t\tprogressBar.attr('max', max);\r\n\t\tjQuery(document).on('scroll', function () {\r\n\t\t\tvalue = jQuery(window).scrollTop() - menuHeight;\r\n\t\t\tprogressBar.attr('value', value);\r\n\t\t});\r\n\r\n\t}\r\n\twindow.addEventListener('resize', () => {\r\n\t\tif(progress.length > 0 ){\r\n\t\t\tif($(window).width() < 769) {\r\n\t\t\t\tprogress[0].style.top = 0;\r\n\t\t\t}\r\n\t\t}\r\n\t})\r\n\r\n\r\n}\r\n\r\nexport default progress;\r\n","/**\r\n * Swiper carousel\r\n * https://swiperjs.com/\r\n */\r\n\r\n// import Swiper and modules styles\r\nimport Swiper from 'swiper';\r\nimport { Navigation, Pagination, Keyboard, A11y, EffectFade } from 'swiper/modules';\r\nimport 'swiper/css'\r\nimport 'swiper/css/effect-fade'\r\nimport 'swiper/css/pagination'\r\nimport 'swiper/css/navigation'\r\nimport 'swiper/css/keyboard'\r\nimport 'swiper/css/a11y';\r\n\r\nexport function swiper() {\r\n if (jQuery(\".swiper\").length === 0) {\r\n return;\r\n }\r\n\r\n function initSwipers(defaults = {}, selector = \".swiper\") {\r\n let swipers = document.querySelectorAll(selector);\r\n \r\n swipers.forEach((swiperContainer, index) => {\r\n // Create a unique class name for the swiper container\r\n let swiperClass = 'swiper-' + index;\r\n \r\n // Add the unique class to the swiper container if not already added\r\n if (!swiperContainer.classList.contains(swiperClass)) {\r\n swiperContainer.classList.add(swiperClass);\r\n \r\n // Get options\r\n let optionsData = swiperContainer.dataset.swiper\r\n ? JSON.parse(swiperContainer.dataset.swiper)\r\n : {};\r\n\r\n // Get dottext from data attribute\r\n let dottext = swiperContainer.getAttribute('data-dottext') || 'Gå til slide #';\r\n\r\n // Check if the swiper should be active only on mobile\r\n let shouldEnableSwiper = optionsData.mobileOnly && window.innerWidth <= 768;\r\n\r\n // Combine defaults and custom options\r\n let options = {\r\n ...defaults,\r\n ...optionsData,\r\n navigation: {\r\n nextEl: swiperContainer.querySelector('.swiper-button-next'),\r\n prevEl: swiperContainer.querySelector('.swiper-button-prev'),\r\n }, // Set navigation options specific to this swiper\r\n pagination: {\r\n ...defaults.pagination,\r\n el: swiperContainer.querySelector('.swiper-pagination'),\r\n renderBullet: function (index, className) {\r\n let ariaLabel = dottext.replace('#', index + 1);\r\n return `
  • \r\n \r\n
  • `;\r\n },\r\n },\r\n };\r\n \r\n // Initialize Swiper only if it should be active on the current device\r\n if (!optionsData.mobileOnly || shouldEnableSwiper) {\r\n\r\n // Initialize Swiper\r\n let swiperInstance = new Swiper(swiperContainer, options);\r\n \r\n // Check if navigation elements exist within the swiper container\r\n let navigation = swiperContainer.querySelector('.swiper-button-prev, .swiper-button-next');\r\n if (navigation) {\r\n \r\n navigation.addEventListener('click', function (event) {\r\n event.preventDefault();\r\n \r\n if (event.target.classList.contains('swiper-button-prev')) {\r\n swiperInstance.slidePrev();\r\n } else if (event.target.classList.contains('swiper-button-next')) {\r\n swiperInstance.slideNext();\r\n }\r\n });\r\n }\r\n }\r\n }\r\n });\r\n } \r\n\r\n // Basic options for all sliders\r\n let defaults = {\r\n modules: [Navigation, Pagination, Keyboard, A11y, EffectFade],\r\n slidesPerView: 1,\r\n spaceBetween: 30,\r\n autoHeight: false,\r\n effect: \"fade\",\r\n loop: true,\r\n lazy: true,\r\n pagination: {\r\n el: '.swiper-pagination',\r\n clickable: true,\r\n },\r\n keyboard: {\r\n enabled: true,\r\n },\r\n A11y: {\r\n enabled: true\r\n },\r\n };\r\n \r\n // Call the init function\r\n initSwipers(defaults);\r\n\r\n}\r\n\r\nexport default swiper;\r\n","export function dataTabel() {\r\n // Check if any table exists\r\n if (jQuery('.table').length > 0) {\r\n\t\tvar lang_da_mod = {\r\n\t\t\t\"sProcessing\": \"Henter...\",\r\n\t\t\t\"sLengthMenu\": \"Vis _MENU_ linjer\",\r\n\t\t\t\"sZeroRecords\": \"Ingen linjer matcher søgningen\",\r\n\t\t\t\"sInfo\": \"Viser _START_ til _END_ af _TOTAL_ linjer\",\r\n\t\t\t\"sInfoEmpty\": \"Viser 0 til 0 af 0 linjer\",\r\n\t\t\t\"sInfoFiltered\": \"(filtreret fra _MAX_ linjer)\",\r\n\t\t\t\"sSearch\": \"Søg:\",\r\n\t\t\t\"sUrl\": \"\",\r\n\t\t\t\"oPaginate\": {\r\n\t\t\t\t\"sFirst\": false,\r\n\t\t\t\t\"sPrevious\": \"Forrige\",\r\n\t\t\t\t\"sNext\": \"Næste\",\r\n\t\t\t\t\"sLast\": false\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Iterate through each table\r\n\t\tjQuery('.table').each(function () {\r\n\t\t\tvar table = jQuery(this);\r\n\t\t\tvar id = table.attr(\"id\"); // Ensure the table has an ID\r\n\t\t\tif (!id) {\r\n\t\t\t\tconsole.warn('Table is missing an ID and will not be initialized.');\r\n\t\t\t\treturn; // Skip this table if no ID is found\r\n\t\t\t}\r\n\r\n\t\t\tvar search = table.data('search');\r\n\t\t\tvar searchfield = table.data('searchfield');\r\n\t\t\t// Configuration for tables with 'table--collapse' class\r\n\t\t\tif (table.hasClass('table--collapse')) {\r\n\t\t\t\tvar entries = table.data('entries');\r\n\t\t\t\tvar all = table.data('all');\r\n\t\t\t\tvar lenghMenu = table.data('lengthmenu');\r\n\t\t\t\tvar pagination = table.data('pagination');\r\n\t\t\t\tvar info = table.data('info');\r\n\r\n\t\t\t\tlang_da_mod.sLengthMenu = '';\r\n\t\t\t\tlang_da_mod.searchPlaceholder = \"\";\r\n\t\t\t\tlang_da_mod.sSearch = search;\r\n\t\t\t\tlang_da_mod.oPaginate.sNext = \"\";\r\n\t\t\t\tlang_da_mod.oPaginate.sPrevious = \"\";\r\n\t\t\t\tlang_da_mod.searchfield = searchfield;\r\n\t\t\t\t// Set pagination based on the table data attribute\r\n\t\t\t\tlang_da_mod.sPaginationType = pagination ? \"full_numbers\" : \"simple\";\r\n\r\n\t\t\t\t// Initialize the collapsed table\r\n\t\t\t\taddTable(id, lang_da_mod, pagination); // Pass pagination flag to the addTable function\r\n\t\t\t} else {\r\n\t\t\t\t// Configuration for other tables\r\n\t\t\t\tentries = table.data('entries');\r\n\t\t\t\tlenghMenu = table.data('lengthmenu');\r\n\t\t\t\tpagination = table.data('pagination');\r\n\t\t\t\tinfo = table.data('info');\r\n\r\n\t\t\t\tlang_da_mod.sLengthMenu = lenghMenu;\r\n\t\t\t\tlang_da_mod.pagination = pagination;\r\n\t\t\t\tlang_da_mod.searchfield = searchfield;\r\n\t\t\t\tlang_da_mod.searchPlaceholder = \"\";\r\n\t\t\t\tlang_da_mod.sSearch = search;\r\n\t\t\t\tlang_da_mod.info = entries;\r\n\t\t\t\tlang_da_mod.oPaginate.sNext = \"\";\r\n\t\t\t\tlang_da_mod.oPaginate.sPrevious = \"\";\r\n\r\n\t\t\t\t// Initialize the scrollable table\r\n\t\t\t\taddTableScrollable(id, lang_da_mod); // Call the addTableScrollable function for non-collapsed tables\r\n\t\t\t}\r\n\t\t});\r\n }\r\n}\r\n\r\n// Initialize DataTable for regular tables\r\nfunction addTable(id, lang_da_mod, pagination) {\r\n jQuery('#' + id).DataTable({\r\n\t\tordering: true,\r\n\t\tretrieve: true,\r\n\t\t\"info\": Boolean(lang_da_mod.info), // Explicitly cast to boolean\r\n\t\tsearching: lang_da_mod.searchfield,\r\n\t\t// searching: lang_da_mod.searchfield,\r\n\t\t\"bLengthChange\": lang_da_mod.lenghMenu,\r\n\t\t\"bPaginate\": pagination, // Use the pagination flag passed from the data attributes\r\n\t\t\"sPaginationType\": lang_da_mod.sPaginationType || \"simple\", // Use custom pagination type\r\n\t\tresponsive: {\r\n\t\t\tdetails: {\r\n\t\t\t\ttype: 'column'\r\n\t\t\t}\r\n\t\t},\r\n\t\tcolumnDefs: [{\r\n\t\t\tclassName: 'control',\r\n\t\t\torderable: false,\r\n\t\t\ttargets: 0\r\n\t\t}],\r\n\t\t\"language\": lang_da_mod\r\n });\r\n removeTabIndexFromHiddenTables();\r\n\r\n setTimeout(function () {\r\n\t\tjQuery('.table').css('opacity', 1);\r\n\t\tjQuery('.dataTables_wrapper').css('opacity', 1);\r\n\t\tjQuery('.dataTables_wrapper input').prop('required', true);\r\n\t\tjQuery('.dataTables_wrapper input').parent('label').attr('aria-label', 'Søg i tabel');\r\n }, 100);\r\n}\r\n\r\n// Initialize DataTable for scrollable tables (with fixed columns)\r\nfunction addTableScrollable(id, lang_da_mod) {\r\n let resizeTimeout;\r\n jQuery(window).on(\"load resize\", function () { // Mobile responsiveness\r\n\t\tvar table = jQuery('#' + id); // Ensure we're using the correct table ID\r\n\r\n\t\tif (table.length === 0) {\r\n\t\t\tconsole.error('Table with id ' + id + ' not found.');\r\n\t\t\treturn; // Skip if table doesn't exist\r\n\t\t}\r\n \t// Ensure the table is wrapped inside a div with class 'table--scrollable-container'\r\n \tif (!table.parent().hasClass('table--scrollable-container')) {\r\n\t\t\ttable.wrap('
    ');\r\n\t \t}\r\n\r\n // // Find the inside the div with class 'dataTables_scrollHead'\r\n // var tableElement = document.querySelector('.dataTables_scrollHead table');\r\n\r\n // // Check if the
    element exists and has an 'id' attribute\r\n // if (tableElement && tableElement.hasAttribute('id')) {\r\n // tableElement.removeAttribute('id');\r\n // }\r\n\r\n\t\t// if (this.matchMedia(\"(max-width: 767px)\").matches) {\r\n\t\t// \t// var tableScrollableTh = table.find('th');\r\n\r\n\t\t// \t// if (tableScrollableTh.length <= 3) {\r\n\t\t// \t// \tjQuery('.table-icon-scroll').css(\"display\", \"none\");\r\n\t\t// \t// }\r\n\r\n\t\t// \t// Debounced resize event\r\n\t\t// \tclearTimeout(resizeTimeout);\r\n\t\t// \t// resizeTimeout = setTimeout(function () {\r\n\t\t// \t// \tjQuery(window).scroll(function () {\r\n\t\t// \t// \t\tvar tableOffset = table.offset();\r\n\t\t// \t// \t\tif (!tableOffset) {\r\n\t\t// \t// \t\t\tconsole.error('Table offset is undefined.');\r\n\t\t// \t// \t\t\treturn; // Skip if offset is not available\r\n\t\t// \t// \t\t}\r\n\r\n\t\t// \t// \t\t// var top_of_element = tableOffset.top;\r\n\t\t// \t// \t\t// var bottom_of_element = top_of_element + table.outerHeight();\r\n\t\t// \t// \t\t// var bottom_of_screen = jQuery(window).scrollTop() + jQuery(window).innerHeight();\r\n\t\t// \t// \t\t// var top_of_screen = jQuery(window).scrollTop();\r\n\r\n\t\t// \t// \t\t// if ((bottom_of_screen > top_of_element) && (top_of_screen < bottom_of_element)) {\r\n\t\t// \t// \t\t// \tjQuery('.table-icon-scroll').css(\"opacity\", 1);\r\n\t\t// \t// \t\t// } else {\r\n\t\t// \t// \t\t// \tjQuery('.table-icon-scroll').css(\"opacity\", 0);\r\n\t\t// \t// \t\t// }\r\n\r\n\t\t// \t// \t\t// if ((bottom_of_screen > bottom_of_element) && (top_of_screen < bottom_of_element)) {\r\n\t\t// \t// \t\t// \tjQuery('.table-icon-scroll').css(\"opacity\", 0);\r\n\t\t// \t// \t\t// }\r\n\t\t// \t// \t});\r\n\t\t// \t// }, 150); // Adjust debounce time as needed\r\n\t\t// }\r\n });\r\n\r\n jQuery('#' + id).DataTable({\r\n\t\tordering: true,\r\n\t\tretrieve: true,\r\n\t\t\"info\": lang_da_mod.info,\r\n\t\tsearching: lang_da_mod.searchfield,\r\n\t\t\"bLengthChange\": lang_da_mod.lenghMenu,\r\n\t\t\"bPaginate\": lang_da_mod.pagination,\r\n\t\tcolumnDefs: [{\r\n\t\t\tclassName: 'control',\r\n\t\t\torderable: false,\r\n\t\t\ttargets: 0\r\n\t\t}],\r\n\t\tfixedColumns: true,\r\n\t\t\"language\": lang_da_mod,\r\n/* \t\tscrollX: true, */\r\n\t\tscrollCollapse: true,\r\n\t\tinitComplete: function () {\r\n\t\t\t// Add ARIA attributes for accessibility\r\n\t\t\tconst tableId = '#' + id;\r\n\t\t\tconst headTable = jQuery(tableId).closest('.dataTables_scroll').find('.dataTables_scrollHead table');\r\n\t\t\tconst bodyTable = jQuery(tableId).closest('.dataTables_scroll').find('.dataTables_scrollBody table');\r\n\r\n\t\t\t// Associate header table with body table\r\n\t\t\theadTable.attr('aria-hidden', true); // Indicate that it's not a separate table\r\n // headTable.attr('tabindex', -1);\r\n\t\t\t// bodyTable.attr('aria-labelledby', `${id}-header`);\r\n\t\t\t// headTable.attr('id', `${id}-header`);\r\n\r\n\t\t\t// Remove roles from `thead`, `tbody`, and `tfoot` (if added by DataTables)\r\n\t\t\theadTable.find('thead, tbody, tfoot').removeAttr('role');\r\n\t\t\tbodyTable.find('thead, tbody, tfoot').removeAttr('role');\r\n\r\n\t\t\theadTable.removeAttr('role');\r\n\t\t\tbodyTable.removeAttr('role');\r\n\r\n\t\t\t// Remove roles from rows (`role=\"row\"`) and cells (`role=\"cell\"`)\r\n\t\t\tbodyTable.find('tr, td, th').removeAttr('role');\r\n\t\t\theadTable.find('tr, td, th').removeAttr('role');\r\n\r\n\r\n // Adjust tabindex for non-interactive elements inside scrollable body\r\n bodyTable.find('td').each(function () {\r\n // If there's no interactive element (link, button, input), set tabindex=\"-1\"\r\n jQuery(this).removeAttr('tabindex');\r\n // if (!jQuery(this).find('a, button, input').length) {\r\n // jQuery(this).attr('tabindex', '-1');\r\n // }\r\n });\r\n\t\t}\r\n });\r\n removeTabIndexFromHiddenTables();\r\n\r\n setTimeout(function () {\r\n\t\tjQuery('.table').css('opacity', 1);\r\n\t\tjQuery('.dataTables_wrapper').css('opacity', 1);\r\n\t\tjQuery('.dataTables_wrapper input').prop('required', true);\r\n\t\tjQuery('.dataTables_wrapper input').parent('label').attr('aria-label', 'Søg i tabel');\r\n\r\n }, 100);\r\n}\r\n\r\nfunction removeTabIndexFromHiddenTables() {\r\n jQuery('table[aria-hidden=\"true\"]').each(function () {\r\n jQuery(this).find('[tabindex]').removeAttr('tabindex');\r\n });\r\n}\r\n\r\n\r\n\r\nexport default dataTabel;\r\n","/**\r\n * Instagram feed\r\n */\r\n\"use strict\";\r\nexport function instagramFeed() {\r\n if (jQuery(\".instagram-feed__container\").length == 0) {\r\n return;\r\n }\r\n (function(a){function b(a){return a.replace(/[&<>\"'`=\\/]/g,function(a){return f[a]})}function c(a,b){return\"undefined\"!=typeof a.node.edge_media_to_caption.edges[0]&&\"undefined\"!=typeof a.node.edge_media_to_caption.edges[0].node&&\"undefined\"!=typeof a.node.edge_media_to_caption.edges[0].node.text&&null!==a.node.edge_media_to_caption.edges[0].node.text?a.node.edge_media_to_caption.edges[0].node.text:\"undefined\"!=typeof a.node.title&&null!==a.node.title&&0!=a.node.title.length?a.node.title:\"undefined\"!=typeof a.node.accessibility_caption&&null!==a.node.accessibility_caption&&0!=a.node.accessibility_caption.length?a.node.accessibility_caption:(this.is_tag?b.name:b.username)+\" image \"}var d={host:\"https://www.instagram.com/\",username:\"\",tag:\"\",container:\"\",display_profile:!0,display_biography:!0,display_gallery:!0,display_captions:!1,display_igtv:!1,callback:null,styling:!0,items:8,items_per_row:4,margin:.5,image_size:640,lazy_load:!1,cache_time:360,on_error:console.error},e={150:0,240:1,320:2,480:3,640:4},f={\"&\":\"&\",\"<\":\"<\",\">\":\">\",'\"':\""\",\"'\":\"'\",\"/\":\"/\",\"`\":\"`\",\"=\":\"=\"};a.instagramFeed=function(f){function g(d){if(\"string\"==typeof d){try{d=d.split(\"window._sharedData = \")[1].split(\"\")[0]}catch(a){return void h.on_error(\"Instagram Feed: It looks like the profile you are trying to fetch is age restricted. See https://github.com/jsanahuja/InstagramFeed/issues/26\",3)}d=JSON.parse(d.substr(0,d.length-1)),d=d.entry_data.ProfilePage||d.entry_data.TagPage;var f=!1;if(\"undefined\"==typeof d){var g=localStorage.getItem(m);if(null!==g&&(d=JSON.parse(g),f=!0),h.on_error(\"Instagram Feed: Your network has been temporary banned by Instagram because of too many requests. Consider increasing your 'cache_time'. See https://github.com/jsanahuja/jquery.instagramFeed/issues/25 and https://github.com/jsanahuja/jquery.instagramFeed/issues/101\",4),!d)return}!f&&0 a[data-caption]:hover::after { content: attr(data-caption); text-align: center; font-size: 0.8rem; color: black; position: absolute; left: 0; right: 0; bottom: 0; padding: 1%; max-height: 100%; overflow-y: auto; overflow-x: hidden; background-color: hsla(0, 100%, 100%, 0.8); } \")}else k={profile_container:\"\",profile_image:\"\",profile_name:\"\",profile_biography:\"\",gallery_image:\"\",gallery_image_link:\"\"};h.display_profile&&(l+=\"
    \",l+=\"\\\"\"+(j?d.name+\"\",l+=j?\"

    #\"+h.tag+\"

    \":\"

    @\"+d.full_name+\" (@\"+h.username+\")

    \",!j&&h.display_biography&&(l+=\"

    \"+d.biography+\"

    \"),l+=\"
    \");var p=\"undefined\"==typeof e[h.image_size]?e[640]:e[h.image_size];if(h.display_gallery)if(\"undefined\"!=typeof d.is_private&&!0===d.is_private)l+=\"

    This profile is private

    \";else{var q=(d.edge_owner_to_timeline_media||d.edge_hashtag_to_media).edges;x=q.length>h.items?h.items:q.length,l+=\"\"}if(h.display_igtv&&\"undefined\"!=typeof d.edge_felix_video_timeline){var w=d.edge_felix_video_timeline.edges,x=w.length>h.items?h.items:w.length;if(0\";for(var r=0;r\",l+=\"\",l+=\"\"}l+=\"\"}}a(h.container).html(l)}null!=h.callback&&h.callback(d)}var h=a.fn.extend({},d,f);if(\"\"==h.username&&\"\"==h.tag)return h.on_error(\"Instagram Feed: Error, no username nor tag defined.\",1),!1;if(\"undefined\"!=typeof h.get_data&&console.warn(\"Instagram Feed: options.get_data is deprecated, options.callback is always called if defined\"),null==h.callback&&\"\"==h.container)return h.on_error(\"Instagram Feed: Error, neither container found nor callback defined.\",2),!1;var j=\"\"==h.username,k=j?h.host+\"explore/tags/\"+h.tag+\"/\":h.host+h.username+\"/\",l=null,m=\"instagramFeed_\"+(j?\"t_\"+h.tag:\"u_\"+h.username),n=m+\"_cached\";if(0new Date().getTime()){var p=localStorage.getItem(m);null!==p&&(l=JSON.parse(p))}}return null===l?a.get(k,g).fail(function(a){h.on_error(\"Instagram Feed: Unable to fetch the given user/tag. Instagram responded with the status code: \"+a.status,5)}):g(l),!0}})(jQuery);\r\n\r\n (function ($) {\r\n\r\n var amount = jQuery(\".instagram-feed__container\").data(\"amount\");\r\n jQuery(window).on('load', function () {\r\n var userid = jQuery(\".instagram-feed__container\").data(\"userid\");\r\n $.instagramFeed({\r\n 'username': userid,\r\n // 'container': \".instagram-feed__container\",\r\n 'display_profile': false,\r\n 'display_biography': false,\r\n 'display_gallery': true,\r\n 'display_captions': false,\r\n 'callback': null,\r\n 'cache_time': 120,\r\n 'styling': false,\r\n 'items': amount,\r\n 'items_per_row': 4,\r\n 'image_size': 480,\r\n 'margin': 1,\r\n 'lazy_load': true,\r\n 'callback': function (data) {\r\n addInstagramImages(data.edge_owner_to_timeline_media.edges.slice(0, amount))\r\n },\r\n 'on_error': console.error\r\n });\r\n });\r\n function addInstagramImages(data) {\r\n for (var i = 0; i < amount; i++) {\r\n if(data[i] != undefined) {\r\n jQuery(\".instagram-feed__container\").append(\r\n `\r\n \r\n \"`+data[i].node.edge_media_to_caption.edges[0].node.text+`\"\r\n
    \r\n \r\n Se mere på Instagram\r\n
    \r\n
    \r\n
    \r\n `\r\n );\r\n\r\n }\r\n };\r\n jQuery(\".instagram-feed\").fadeIn();\r\n }\r\n })(jQuery);\r\n\r\n}\r\n\r\nexport default instagramFeed;\r\n","export function ratioCheckerPrefersWhite(background) {\r\n\tlet TextIsBlack;\r\n\tconst textColorWhiteHex = '#ffffff';\r\n\tconst textColorBlackHex = '#000000';\r\n\r\n\t// Splits rgb() color to a js object\r\n\tconst rgbToObj = (color) => {\r\n\t\tlet colorRgb = ['r', 'g', 'b'];\r\n\r\n\t\tlet colorValuesArr = color\r\n\t\t\t.slice(background.indexOf('(') + 1, background.indexOf(')'))\r\n\t\t\t.split(', ');\r\n\r\n\t\tlet colorObject = {};\r\n\r\n\t\tcolorValuesArr.forEach((value, i) => {\r\n\t\t\tcolorObject[colorRgb[i]] = value;\r\n\t\t});\r\n\r\n\t\treturn colorObject;\r\n\t};\r\n\r\n\t// Accepts a hex-code and extract r, g, b color.\r\n\tconst hexToRgb = (hex) => {\r\n\t\tlet shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\r\n\t\thex = hex.replace(shorthandRegex, function (m, r, g, b) {\r\n\t\t\treturn r + r + g + g + b + b;\r\n\t\t});\r\n\r\n\t\tlet result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n\t\treturn result\r\n\t\t\t? {\r\n\t\t\t\t\tr: parseInt(result[1], 16),\r\n\t\t\t\t\tg: parseInt(result[2], 16),\r\n\t\t\t\t\tb: parseInt(result[3], 16),\r\n\t\t\t }\r\n\t\t\t: null;\r\n\t};\r\n\r\n\tconst textColorBlackRgb = hexToRgb(textColorBlackHex);\r\n\tconst textColorWhiteRgb = hexToRgb(textColorWhiteHex);\r\n\t// js getComputedStyles returns a rgb\r\n\tlet bgc = rgbToObj(background);\r\n\r\n\t// calculate luminance of color\r\n\tfunction luminance(r, g, b) {\r\n\t\tlet a = [r, g, b].map(function (v) {\r\n\t\t\tv /= 255;\r\n\t\t\t``;\r\n\t\t\treturn v <= 0.03928 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\r\n\t\t});\r\n\t\treturn a[0] * 0.2126 + a[1] * 0.7152 + a[2] * 0.0722;\r\n\t}\r\n\r\n\tconst luminanceBgc = luminance(bgc.r, bgc.g, bgc.b);\r\n\r\n\tconst luminanceTextWhite = luminance(\r\n\t\ttextColorWhiteRgb.r,\r\n\t\ttextColorWhiteRgb.g,\r\n\t\ttextColorWhiteRgb.b\r\n\t);\r\n\r\n\tconst luminanceTextBlack = luminance(\r\n\t\ttextColorBlackRgb.r,\r\n\t\ttextColorBlackRgb.g,\r\n\t\ttextColorBlackRgb.b\r\n\t);\r\n\r\n\tconst ratioBlackText =\r\n\t\tluminanceBgc > luminanceTextBlack\r\n\t\t\t? (luminanceTextBlack + 0.05) / (luminanceBgc + 0.05)\r\n\t\t\t: (luminanceBgc + 0.05) / (luminanceTextBlack + 0.05);\r\n\r\n\t// Calculate ratio between white and bg-color.\r\n\tconst ratioWhiteText =\r\n\t\tluminanceBgc > luminanceTextWhite\r\n\t\t\t? (luminanceTextWhite + 0.05) / (luminanceBgc + 0.05)\r\n\t\t\t: (luminanceBgc + 0.05) / (luminanceTextWhite + 0.05);\r\n\r\n\t// Calculate ratio between black and bg-color.\r\n\r\n\r\n\treturn ratioBlackText > ratioWhiteText\r\n\r\n\tconst setColorVarableTrue = () => {\r\n\t\tif (TextIsBlack) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tTextIsBlack = true;\r\n\t};\r\n\r\n\tconst setColorVarableFalse = () => {\r\n\t\tif (!TextIsBlack) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tTextIsBlack = false;\r\n\t};\r\n\r\n\t// the smallest ratio becomes the text-color\r\n\tratioBlackText > ratioWhiteText\r\n\t\t? setColorVarableFalse()\r\n\t\t: setColorVarableTrue();\r\n\r\n\t// add color-class to element with adaptive text-color\r\n\tif (!TextIsBlack) {\r\n\t\tdocument.documentElement.style.setProperty(\r\n\t\t\t'--changing-text-color',\r\n\t\t\t'white'\r\n\t\t);\r\n\r\n\t\tdocument.getElementById('logo-id').style.display = 'none'\r\n\t\tdocument.getElementById('inverse-logo-id').style.display = 'block'\r\n\t} else {\r\n\t\tdocument.documentElement.style.setProperty(\r\n\t\t\t'--changing-text-color',\r\n\t\t\t'black'\r\n\t\t);\r\n\t\tdocument.getElementById('logo-id').style.display = 'block'\r\n\t\tdocument.getElementById('inverse-logo-id').style.display = 'none'\r\n\t}\r\n}\r\n\r\nexport default ratioCheckerPrefersWhite;\r\n","import ratioCheckerPrefersWhite from \"./ratioCheckerPrefersWhite\";\r\nimport { throttle } from \"lodash-es\";\r\n\r\nexport function header() {\r\n\r\n\tconst headerIsFixed = document.getElementsByClassName(\"fixed\");\r\n\tconst isTransparentHeader = document.getElementsByClassName(\r\n\t\t\"header--transparent\"\r\n\t);\r\n\tconst backgroundColorProperty = \"background-color\";\r\n\tconst noBackgroundColor = \"rgba(0, 0, 0, 0)\";\r\n\r\n\tconst getElementStyle = (element, styleProperty) => {\r\n\t\treturn window\r\n\t\t\t.getComputedStyle(element)\r\n\t\t\t.getPropertyValue(styleProperty)\r\n\t\t\t.toString();\r\n\t};\r\n\r\n\tconst setDocumentColor = (target, color) => {\r\n\t\troot.style.setProperty(target, color);\r\n\t};\r\n\r\n\tconst setTextColorWhite = () => {\r\n\t\tsetDocumentColor(\"--changing-text-color\", \"white\");\r\n\t\tsetDocumentColor(\"--cta-changing-text-color\", \"black\");\r\n\t\tdocument.getElementById(\"inverse-logo-id\").style.display = \"block\";\r\n\t\tdocument.getElementById(\"logo-id\").style.display = \"none\";\r\n\t};\r\n\t\r\n\tconst setTextColorBlack = () => {\r\n\t\tsetDocumentColor(\"--changing-text-color\", \"black\");\r\n\t\tsetDocumentColor(\"--cta-changing-text-color\", \"white\");\r\n\t\tdocument.getElementById(\"inverse-logo-id\").style.display = \"none\";\r\n\t\tdocument.getElementById(\"logo-id\").style.display = \"block\";\r\n\t};\r\n\r\n\tlet root = document.documentElement;\r\n\r\n\tconst initialSettings = (\r\n\t\tsections,\r\n\t\tnavbarListItems,\r\n\t\tnavbarBackground,\r\n\t\theaderImage,\r\n\t\tbodyBackgroundColor,\r\n\t\theaderBackgroundColor\r\n\t) => {\r\n\t\tconst main = document.getElementsByTagName(\"main\")[0];\r\n\t\tconst firstSection = sections[0] || null;\r\n\t\t/*\r\n\t\t * First section scenarios:\r\n\t\t * - No first section\r\n\t\t * - Create article hero displaced \t\r\n\t\t * - Hero and banners with image\r\n\t\t * - Banner\r\n\t\t * - Section with no background color\r\n\t\t * - Section with background color\r\n\t\t * - Article pages (white body)\r\n\t\t * */\r\n\t\tif (firstSection === null) {\r\n\t\t\t// Fallback behavior when there's no first section\r\n\t\t\tdocument.getElementById(\"inverse-logo-id\").style.display = \"block\"; // Ensure the logo is displayed\r\n\t\t\tnavbarBackground.style.backgroundColor = bodyBackgroundColor; // Fallback navbar color\r\n\t\t\theaderBackgroundColor.style.display = \"block\"; // Display header background color\r\n\t\t\tsetDocumentColor(\"--navbar-bg-color\", bodyBackgroundColor);\r\n\t\t\tratioCheckerPrefersWhite(bodyBackgroundColor)\r\n\t\t\t\t? setTextColorWhite()\r\n\t\t\t\t: setTextColorBlack();\r\n\t\t\treturn; // Exit after applying fallback settings\r\n\t\t}\r\n\r\n\r\n\t\t/* Creative article hero */\r\n\t\telse if(firstSection.querySelector(\".hero__article__displaced\")){\r\n\t\t\tconst hero = firstSection.querySelector(\".hero__article__media\")\r\n\t\t\tconst body = document.querySelector(\"body\");\r\n\t\t\tconst heroBgColor = hero ? getElementStyle(hero, backgroundColorProperty): getElementStyle(body, backgroundColorProperty);\r\n\r\n\t\t\tratioCheckerPrefersWhite(heroBgColor) ? setTextColorWhite() : setTextColorBlack();\r\n\t\t\tconst elementToUse = hero ? hero : body;\r\n\t\t\theaderBackgroundColor.style.backgroundColor = getElementStyle(\r\n\t\t\t\telementToUse,\r\n\t\t\t\tbackgroundColorProperty\r\n\t\t\t\t)\r\n\t\t\theaderBackgroundColor.style.display = \"none\";\r\n\t\t\tif(hero){\r\n\t\t\t}\r\n\t\t\tfirstSection.classList.add(\"hero--transparent-header\");\t\t\t\t\t\r\n\r\n\t\t}\t\t\r\n\r\n\t\telse if (\r\n\t\t\t(firstSection.querySelector(\"[class^='hero']\") && !Array.from(firstSection.querySelector(\"[class^='hero']\").classList).some(className => className.startsWith('bg-'))) ||\r\n\t\t\tfirstSection.querySelector(\".banner__image\") ||\r\n\t\t\tfirstSection.querySelector(\".media-box--full-width\") ||\r\n\t\t\tfirstSection.querySelector(\".image\")\r\n\t\t) {\r\n\t\t\theaderBackgroundColor.style.display = \"none\";\r\n\t\t\tfirstSection.classList.add(\"hero--transparent-header\");\r\n\r\n\t\t\t// Set the right colors\r\n\t\t\tsetDocumentColor(\"--changing-text-color\", \"white\");\r\n\t\t\tsetDocumentColor(\"--cta-changing-text-color\", \"black\");\r\n\t\t\tsetDocumentColor(\"--navbar-bg-color\", noBackgroundColor);\r\n\t\t\tdocument.getElementById(\"inverse-logo-id\").style.display = \"block\";\r\n\r\n\t\t\t/*increase height on small heros\r\n\t\t\t * to ensure that the navigation\r\n\t\t\t * bar does not conflict with\r\n\t\t\t * hero content.\r\n\t\t\t * If banner is absolute, no height is set */\r\n\r\n\t\t\tconst hasBannerAbsolute = [...firstSection.classList].some(cls => cls.includes(\"banner--absolute\"));\r\n\t\t\tif (\r\n\t\t\t\t((headerImage && headerImage.clientHeight < 500) && !hasBannerAbsolute) &&\r\n\t\t\t\twindow.matchMedia(\"(min-width: 768px)\").matches\r\n\t\t\t) {\r\n\t\t\t\theaderImage.style.height = \"500px\";\r\n\t\t\t}\r\n\r\n\r\n\t\t\t/*Remove Hero section from sections array\r\n\t\t\t * to avoid activating scroll event before\r\n\t\t\t * reaching the second section\r\n\t\t\tsections.shift();\r\n\r\n\t\t\treturn;\r\n\r\n\t\t\t/* if first section is hero with background color */\r\n\t\t} else if (firstSection?.querySelector(\"[class^='hero']\") && Array.from(firstSection.querySelector(\"[class^='hero']\").classList).some(className => className.startsWith('bg-'))){\r\n\t\t\tconst hero = firstSection.querySelector(\"[class^='hero']\")\r\n\r\n\t\t\theaderBackgroundColor.style.backgroundColor = getElementStyle(\r\n\t\t\t\thero,\r\n\t\t\t\tbackgroundColorProperty\r\n\t\t\t\t)\r\n\t\t\theaderBackgroundColor.style.display = \"none\";\r\n\t\t\tfirstSection.classList.add(\"hero--transparent-header\");\r\n\t\t\tif (\r\n\t\t\t\t(headerImage && headerImage.clientHeight < 500) &&\r\n\t\t\t\twindow.matchMedia(\"(min-width: 768px)\").matches\r\n\t\t\t) {\r\n\t\t\t\theaderImage.style.height = \"500px\";\r\n\t\t\t}\r\n\t\t} else if (firstSection.querySelector(\"[class^='banner']\")) {\r\n\r\n\t\t\t/* We need to handle 'banner' differently because\r\n\t\t\t * the background color is not set on the section */\r\n\t\t\tconst banner = firstSection.querySelector(\"[class^='banner']\");\r\n\t\t\theaderBackgroundColor.style.backgroundColor = getElementStyle(\r\n\t\t\t\tbanner,\r\n\t\t\t\tbackgroundColorProperty\r\n\t\t\t);\r\n\t\t\theaderBackgroundColor.style.display = \"block\";\r\n\r\n\t\t} else if (main && main.classList.contains(\"bg-main--white\")) {\r\n\t\t\tsetDocumentColor(\"--navbar-bg-color\", \"#fff\");\r\n\t\t\theaderBackgroundColor.style.backgroundColor = \"#fff\";\r\n\t\t\theaderBackgroundColor.style.display = \"block\";\r\n\t\t} else {\r\n\t\t\tlet hasNoBackgroundColor =\r\n\t\t\t\tgetElementStyle(firstSection, backgroundColorProperty) ===\r\n\t\t\t\tnoBackgroundColor;\r\n\r\n\t\t\tif (hasNoBackgroundColor) {\r\n\t\t\t\tsetDocumentColor(\"--navbar-bg-color\", bodyBackgroundColor);\r\n\t\t\t\theaderBackgroundColor.style.backgroundColor = bodyBackgroundColor;\r\n\t\t\t} else {\r\n\t\t\t\tsetDocumentColor(\r\n\t\t\t\t\t\"--navbar-bg-color\",\r\n\t\t\t\t\tgetElementStyle(firstSection, backgroundColorProperty)\r\n\t\t\t\t);\r\n\t\t\t\theaderBackgroundColor.style.backgroundColor = getElementStyle(\r\n\t\t\t\t\tfirstSection,\r\n\t\t\t\t\tbackgroundColorProperty\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\theaderBackgroundColor.style.display = \"block\";\r\n\t\t}\r\n\r\n\t\t/* Display header background color\r\n\t\tto save space for the menu\r\n\t\tat the top of the page */\r\n\t\tratioCheckerPrefersWhite(\r\n\t\t\tgetElementStyle(headerBackgroundColor, backgroundColorProperty)\r\n\t\t)\r\n\t\t\t? setTextColorWhite()\r\n\t\t\t: setTextColorBlack();\r\n\t};\r\n\r\n\tconst handleScrollEvents = (\r\n\t\theaderImage,\r\n\t\tnavbarListItems,\r\n\t\tnavbarBackground,\r\n\t\theaderImageHeight,\r\n\t\tsections,\r\n\t\tbodyBackgroundColor,\r\n\t\theaderBackgroundColor,\r\n\t\tnavbar\r\n\t) => {\r\n\t\tconst mediaBox =\r\n\t\t\theaderImage && headerImage.querySelectorAll(\".container\")[0];\r\n\r\n\t\tconst mediaBoxInnerColor =\r\n\t\t\tmediaBox && mediaBox.querySelector(\".hero-inner\");\r\n\t\tconst mediaBoxOverlayColor =\r\n\t\t\tmediaBox && mediaBox.querySelector(\".hero__multi-boxes__box__overlay\");\r\n\r\n\t\twindow.onscroll = throttle(() => {\r\n\t\t\tif (document.documentElement.scrollTop === 0) {\r\n\t\t\t\tconsole.log(\"scroll top 0\");\r\n\t\t\t\tsetDocumentColor(\r\n\t\t\t\t\t\"--navbar-bg-color\",\r\n\t\t\t\t\tgetElementStyle(headerBackgroundColor, backgroundColorProperty)\r\n\t\t\t\t);\r\n\t\t\t\tratioCheckerPrefersWhite(\r\n\t\t\t\t\tgetElementStyle(headerBackgroundColor, backgroundColorProperty)\r\n\t\t\t\t)\r\n\t\t\t\t\t? setTextColorWhite()\r\n\t\t\t\t\t: setTextColorBlack();\r\n\t\t\t}\r\n\r\n\t\t\tresizeHeader(navbar);\r\n\r\n\t\t\tmediaBox &&\r\n\t\t\t\tonMultiBox(\r\n\t\t\t\t\tmediaBox,\r\n\t\t\t\t\tnavbarListItems,\r\n\t\t\t\t\tmediaBoxInnerColor,\r\n\t\t\t\t\tmediaBoxOverlayColor\r\n\t\t\t\t);\r\n\t\t\theaderImage &&\r\n\t\t\t\tonHeaderImage(\r\n\t\t\t\t\tnavbarBackground,\r\n\t\t\t\t\tnavbarListItems,\r\n\t\t\t\t\theaderImageHeight,\r\n\t\t\t\t\tsections,\r\n\t\t\t\t\tbodyBackgroundColor\r\n\t\t\t\t);\r\n\t\t\thandleOnSections(\r\n\t\t\t\tsections,\r\n\t\t\t\tnavbarListItems,\r\n\t\t\t\tbodyBackgroundColor,\r\n\t\t\t\tnavbarBackground\r\n\t\t\t);\r\n\t\t}, 100);\r\n\t};\r\n\t\r\n\t//Burger toggle function\r\n\tif(isTransparentHeader[0] && isTransparentHeader[0].querySelector('.burger-button')){\r\n\t\tconst openBurgerButton = isTransparentHeader[0].querySelector('.burger-button');\r\n\t\tconst closeBurgerButton = isTransparentHeader[0].querySelector('.sidemenu__close');\r\n\t\tconst sidemenu = isTransparentHeader[0].querySelector('.sidemenu');\r\n\r\n\t\topenBurgerButton.addEventListener('click', () => {\r\n\t\t\tsidemenu.classList.toggle('inactive');\r\n\t\t\tsidemenu.classList.toggle('active');\r\n\t\t})\r\n\t\tcloseBurgerButton.addEventListener('click', () => {\r\n\t\t\tsidemenu.classList.toggle('inactive');\r\n\t\t\tsidemenu.classList.toggle('active');\r\n\t\t})\r\n\t}\r\n\r\n\t// Resizes header when it leaves the top\r\n\tfunction resizeHeader(navbar) {\r\n\t\tif (document.documentElement.scrollTop >= 50) {\r\n\t\t\tnavbar && navbar.classList.add(\"scroll\");\r\n\t\t} else {\r\n\t\t\tnavbar && navbar.classList.remove(\"scroll\");\r\n\t\t}\r\n\t}\r\n\r\n\t// Disable generic color on the hero Image.\r\n\tfunction onHeaderImage(navbarBackground, navbarListItems, imageHeight) {\r\n\t\tif (document.documentElement.scrollTop <= imageHeight) {\r\n\t\t\tconsole.log('onHeaderImage')\r\n\t\t\tsetDocumentColor(\"--changing-text-color\", \"white\");\r\n\t\t\tsetDocumentColor(\"--cta-changing-text-color\", \"black\");\r\n\t\t\tsetDocumentColor(\"--navbar-bg-color\", noBackgroundColor);\r\n\t\t\tdocument.getElementById(\"inverse-logo-id\").style.display = \"block\";\r\n\t\t\tdocument.getElementById(\"logo-id\").style.display = \"none\";\r\n\t\t}\r\n\t}\r\n\r\n\t/* on multiboxes when they stack under image on mobile view\r\n\t * multiboxes has bg-color in two variations: overlay and bg-color. */\r\n\tfunction onMultiBox(multiBox, navbarListItems, inner, overlay) {\r\n\t\tif (\r\n\t\t\tdocument.documentElement.scrollTop >= multiBox.offsetTop &&\r\n\t\t\tdocument.documentElement.scrollTop <=\r\n\t\t\tmultiBox.offsetTop + multiBox.clientHeight\r\n\t\t) {\r\n\t\t\tconsole.log('onMultiBox');\r\n\t\t\tif (window.matchMedia(\"(max-width: 767px)\").matches) {\r\n\t\t\t\tif (inner) {\r\n\t\t\t\t\tsetDocumentColor(\r\n\t\t\t\t\t\t\"--navbar-bg-color\",\r\n\t\t\t\t\t\tgetElementStyle(inner, backgroundColorProperty)\r\n\t\t\t\t\t);\r\n\t\t\t\t\tratioCheckerPrefersWhite(\r\n\t\t\t\t\t\tgetElementStyle(inner, backgroundColorProperty)\r\n\t\t\t\t\t)\r\n\t\t\t\t\t\t? setTextColorWhite()\r\n\t\t\t\t\t\t: setTextColorBlack();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (overlay) {\r\n\t\t\t\t\tsetDocumentColor(\r\n\t\t\t\t\t\t\"--navbar-bg-color\",\r\n\t\t\t\t\t\tgetElementStyle(overlay, backgroundColorProperty)\r\n\t\t\t\t\t);\r\n\t\t\t\t\tratioCheckerPrefersWhite(\r\n\t\t\t\t\t\tgetElementStyle(overlay, backgroundColorProperty)\r\n\t\t\t\t\t)\r\n\t\t\t\t\t\t? setTextColorWhite()\r\n\t\t\t\t\t\t: setTextColorBlack();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction handleOnSections(sections, navbarListItems, bodyBackgroundColor) {\r\n\t\tfor (let i = 0; i < sections.length; i++) {\r\n\t\t\tif (\r\n\t\t\t\tdocument.documentElement.scrollTop + 55 >= sections[i].offsetTop &&\r\n\t\t\t\tdocument.documentElement.scrollTop <=\r\n\t\t\t\t\tsections[i].offsetTop + sections[i].offsetHeight\r\n\t\t\t) {\r\n\t\t\t\tlet sectionBgc = getElementStyle(sections[i], backgroundColorProperty);\r\n\t\t\t\tlet main = document.getElementsByTagName(\"main\")[0];\r\n\r\n\t\t\t\tif (main.classList.contains(\"bg-main--white\")) {\r\n\t\t\t\t\tsetDocumentColor(\"--navbar-bg-color\", \"rgb(255,255,255)\");\r\n\t\t\t\t\tratioCheckerPrefersWhite(\"rgb(255,255,255)\")\r\n\t\t\t\t\t\t? setTextColorWhite()\r\n\t\t\t\t\t\t: setTextColorBlack();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (sections[i].querySelector(\"[class^='banner']\") !== null) {\r\n\t\t\t\t\tlet banner = sections[i].querySelector(\"[class^='banner']\");\r\n\t\t\t\t\tlet bannerBacgroundColor = getElementStyle(\r\n\t\t\t\t\t\tbanner,\r\n\t\t\t\t\t\tbackgroundColorProperty\r\n\t\t\t\t\t);\r\n\t\t\t\t\tsetDocumentColor(\"--navbar-bg-color\", bannerBacgroundColor);\r\n\t\t\t\t\tratioCheckerPrefersWhite(bannerBacgroundColor)\r\n\t\t\t\t\t\t? setTextColorWhite()\r\n\t\t\t\t\t\t: setTextColorBlack();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else if (sectionBgc === noBackgroundColor) {\r\n\t\t\t\t\tsetDocumentColor(\"--navbar-bg-color\", bodyBackgroundColor);\r\n\t\t\t\t\tratioCheckerPrefersWhite(bodyBackgroundColor)\r\n\t\t\t\t\t\t? setTextColorWhite()\r\n\t\t\t\t\t\t: setTextColorBlack();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tsetDocumentColor(\"--navbar-bg-color\", sectionBgc);\r\n\t\t\t\t\tratioCheckerPrefersWhite(sectionBgc)\r\n\t\t\t\t\t\t? setTextColorWhite()\r\n\t\t\t\t\t\t: setTextColorBlack();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tconst onMount = () => {\r\n\t\tconst main = document.getElementsByTagName(\"main\")[0];\r\n\t\tconst sectionsHTMLcollection = main.getElementsByTagName(\"section\") ? main.getElementsByTagName(\"section\") : [];\r\n\t\t// array of all sections on page\r\n\t\tlet sections = [].slice.call(sectionsHTMLcollection);\r\n\t\tconst navbarBackground = document.querySelector(\".nav--transparent\");\r\n\t\tconst navbarListItems = document.querySelector(\".header-items\");\r\n\t\tconst body = document.getElementsByTagName(\"body\")[0];\r\n\t\tconst bodyBackgroundColor = getElementStyle(body, backgroundColorProperty);\r\n\t\tconst headerImage = sections[0]?.querySelector(\"[data-fullwidthimage = true]\") || null;\r\n\t\tconst headerBackgroundColor = document.querySelector(\r\n\t\t\t\".header__background-color\"\r\n\t\t);\r\n\t\tconst navbar = document.querySelector(\".nav--transparent\");\r\n\r\n\t\tinitialSettings(\r\n\t\t\tsections,\r\n\t\t\tnavbarListItems,\r\n\t\t\tnavbarBackground,\r\n\t\t\theaderImage,\r\n\t\t\tbodyBackgroundColor,\r\n\t\t\theaderBackgroundColor\r\n\t\t);\r\n\r\n\t\t// select image height after initial settings.\r\n\t\t// const headerImageHeight =\r\n\t\t// \theaderImage &&\r\n\t\t// \theaderImage.querySelector(\".media__container\").clientHeight;\r\n // console.log(headerImageHeight);\r\n\r\n // select image height after initial settings.\r\n\tlet headerImageHeight;\r\n\tif(headerImage && headerImage.querySelector(\".media__container\")){\r\n\t\theaderImageHeight = headerImage ? headerImage.querySelector(\".media__container\").clientHeight : 0;\r\n\t}\r\n\r\n\t\t// only run scroll events if menu is fixed\r\n\t\tif (headerIsFixed.length > 0) {\r\n\t\t\thandleScrollEvents(\r\n\t\t\t\theaderImage,\r\n\t\t\t\tnavbarListItems,\r\n\t\t\t\tnavbarBackground,\r\n\t\t\t\theaderImageHeight,\r\n\t\t\t\tsections,\r\n\t\t\t\tbodyBackgroundColor,\r\n\t\t\t\theaderBackgroundColor,\r\n\t\t\t\tnavbar\r\n\t\t\t);\r\n\t\t}\r\n\t};\r\n\r\n\tisTransparentHeader.length > 0 ? onMount() : \"\";\r\n}\r\n\r\nexport default header;\r\n","export function moveNavItems() {\r\n\tconst header = document.querySelector(\".header--transparent\");\r\n\r\n\tconst onMount = () => {\r\n\t\tlet topNavBar = jQuery(\".header-items__top-nav__list\")[0];\r\n\t\tconst navbarLogo = jQuery(\".navbar-brand\")[0];\r\n\t\tconst BurgerButton = jQuery(\".burger-button\");\r\n\r\n\t\t// used to calculate the width between logo and burger\r\n\t\tlet navbarRight = jQuery(navbarLogo).offset().left + jQuery(navbarLogo).outerWidth();\r\n\t\tjQuery(BurgerButton).css(\"width\", `${jQuery(navbarLogo).outerWidth()}px`);\r\n\t\tlet burgerButtonLeft = jQuery(BurgerButton).offset().left;\r\n\t\tjQuery(navbarLogo).css(\"min-width\", `${jQuery(navbarLogo).outerWidth()}px`);\r\n\r\n\t\t// allocated space for the navbar\r\n\t\tlet width;\r\n\r\n\t\twidth = Math.round(burgerButtonLeft - navbarRight - 400);\r\n\r\n\t\tlet root = document.documentElement;\r\n\r\n\t\troot.style.setProperty(\"--mid-width\", width + \"px\");\r\n\r\n\t\tif (jQuery(\".sidemenu__primary__list li\").length === 0) {\r\n\t\t\tjQuery(\".sidemenu__primary__list\").remove();\r\n\t\t}\r\n\r\n\t\tfunction checkOverflow(el) {\r\n\t\t\treturn el && el.clientWidth < el.scrollWidth;\r\n\t\t}\r\n\r\n\t\t// moves the last list item when navbar overflows the allocated width\r\n\t\tfunction moveLastItem(el) {\r\n\t\t\twhile (checkOverflow(el)) {\r\n\t\t\t\tif (jQuery(\".sidemenu__primary__list\").length === 0) {\r\n\t\t\t\t\tjQuery(\".sidemenu__primary\").prepend(\r\n\t\t\t\t\t\t'
      '\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t\tBurgerButton && jQuery(BurgerButton).addClass(\"active\");\r\n\t\t\t\tjQuery(\"#my-list li:last-child\").addClass(\"sidemenu__primary__list-item\");\r\n\t\t\t\tjQuery(\".sidemenu__primary__list\").prepend(jQuery(\"#my-list li:last-child\"));\r\n\t\t\t\tcheckOverflow(el);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Hide the burger when the side menu is empty\r\n\t\tfunction hideBurgerIcon() {\r\n\t\t\tconst sideMenuList = document.getElementById(\"sidemenu\");\r\n\r\n\t\t\tif (\r\n\t\t\t\tsideMenuList &&\r\n\t\t\t\tsideMenuList.getElementsByTagName(\"li\").length === 0\r\n\t\t\t) {\r\n\t\t\t\tjQuery(BurgerButton).removeClass(\"active\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Move all navbar list items into the side menu on small screens\r\n\t\tconst moveAll = () => {\r\n\t\t\tif (jQuery(\".sidemenu__primary__list\").length === 0) {\r\n\t\t\t\tjQuery(\".sidemenu__primary\").prepend(\r\n\t\t\t\t\t'
        '\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tjQuery(BurgerButton).addClass(\"active\");\r\n\t\t\tjQuery(\".sidemenu__primary__list\").prepend(jQuery(\".top-nav__list-item\"));\r\n\t\t\tjQuery(\".top-nav__list-item\").addClass(\"sidemenu__primary__list-item\");\r\n\t\t\tjQuery(\".header-items__top-nav\").remove();\r\n\t\t\tjQuery(\".search-form--transparent\").addClass(\"not-showing\");\r\n\t\t};\r\n\r\n\t\t//\r\n\t\tconst responsiveMenu = () => {\r\n\t\t\tjQuery(window).on(\"resize\", function () {\r\n\t\t\t\tconst win = jQuery(this);\r\n\r\n\t\t\t\tif (jQuery(\".sidemenu__primary__list li\").length === 0) {\r\n\t\t\t\t\tjQuery(\".sidemenu__primary__list\").remove();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tnavbarRight = jQuery(navbarLogo).offset().left + jQuery(navbarLogo).outerWidth();\r\n\t\t\t\tburgerButtonLeft = jQuery(BurgerButton).offset().left;\r\n\t\t\t\twidth = Math.round(burgerButtonLeft - navbarRight - 400);\r\n\r\n\t\t\t\troot.style.setProperty(\"--mid-width\", width + \"px\");\r\n\r\n\t\t\t\tif (win.width() <= 768) {\r\n\t\t\t\t\tmoveAll();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tjQuery(\".search-form--transparent\").removeClass(\"not-showing\");\r\n\t\t\t\t\tlet elementExist = !!document.querySelector(\".header-items__top-nav\");\r\n\r\n\t\t\t\t\tif (!elementExist) {\r\n\t\t\t\t\t\tjQuery(\r\n\t\t\t\t\t\t\t`
          `\r\n\t\t\t\t\t\t).insertAfter(\".navbar-brand\");\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ttopNavBar = jQuery(\".header-items__top-nav__list\")[0];\r\n\t\t\t\t\tjQuery(\".header-items__top-nav__list\").prepend(jQuery(\".top-nav__list-item\"));\r\n\t\t\t\t\tjQuery(\".top-nav__list-item\").removeClass(\"sidemenu__primary__list-item\");\r\n\t\t\t\t\tmoveLastItem(topNavBar);\r\n\r\n\t\t\t\t\thideBurgerIcon();\r\n\r\n\t\t\t\t\t//Removed 16/12 2024 - Can be deleted if no issues arise (MT)\r\n\t\t\t\t\t// move all if it only shows two list items\r\n/* \t\t\t\t\tif (\r\n\t\t\t\t\t\tdocument.getElementById(\"my-list\") &&\r\n\t\t\t\t\t\tdocument.getElementById(\"my-list\").getElementsByTagName(\"li\")\r\n\t\t\t\t\t\t\t.length <= 2\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tmoveAll();\r\n\t\t\t\t\t} */\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\tconst onRender = () => {\r\n\t\t\tconst win = jQuery(window);\r\n\r\n\t\t\t//Removed 16/12 2024 - Can be deleted if no issues arise (MT)\r\n/* \t\t\tif (\r\n\t\t\t\tdocument.getElementById(\"my-list\") &&\r\n\t\t\t\tdocument.getElementById(\"my-list\").getElementsByTagName(\"li\").length < 3\r\n\t\t\t) {\r\n\t\t\t\tmoveAll();\r\n\t\t\t} */\r\n\t\t\tif (win.width() <= 768) {\r\n\t\t\t\tmoveAll();\r\n\t\t\t}\r\n\t\t\tresponsiveMenu();\r\n\t\t\thideBurgerIcon();\r\n\t\t\tmoveLastItem(topNavBar);\r\n\t\t};\r\n\r\n\t\tonRender();\r\n\t};\r\n\r\n\theader && onMount();\r\n}\r\n\r\nexport default moveNavItems();\r\n","export function parallax() {\r\n // console.log(\"1\")\r\n\r\n // jQuery(window).on(\"scroll\", function() {\r\n // console.log(\"scroll\")\r\n // var parallax = jQuery(\".parallax\")\r\n // var x = jQuery(this).scrollTop();\r\n // jQuery(parallax).css('background-position','center '+parseInt(-x/5)+'px');\r\n // // you can change the 0% to center ^\r\n // });\r\n}\r\n\r\nexport default parallax;\r\n","export function checkHolidays(date){\r\n/**\r\n* Calculates Easter in the Gregorian/Western (Catholic and Protestant) calendar \r\n* based on the algorithm by Oudin (1940) from http://www.tondering.dk/claus/cal/easter.php\r\n* \r\n*/\r\n const year = date.getFullYear()\r\n let leapYear = false;\r\n\r\n if ((year % 4 == 0) && ((year % 100 != 0)) || (year % 400 == 0)) {\r\n leapYear = true;\r\n };\r\n \r\n //uderegner påskedag, month og day\r\n\tvar f = Math.floor,\r\n\t\t// Golden Number - 1\r\n\t\tG = year % 19,\r\n\t\tC = f(year / 100),\r\n\t\t// related to Epact\r\n\t\tH = (C - f(C / 4) - f((8 * C + 13)/25) + 19 * G + 15) % 30,\r\n\t\t// number of days from 21 March to the Paschal full moon\r\n\t\tI = H - f(H/28) * (1 - f(29/(H + 1)) * f((21-G)/11)),\r\n\t\t// weekday for the Paschal full moon\r\n\t\tJ = (year + f(year / 4) + I + 2 - C + f(C / 4)) % 7,\r\n\t\t// number of days from 21 March to the Sunday on or before the Paschal full moon\r\n\t\tL = I - J,\r\n\t\tmonth = 3 + f((L + 40)/44),\r\n\t\tday = L + 28 - 31 * f(month / 4);\r\n\r\n //variabel til at finde ud af hvilken nummer dag på året, påskedag er\r\n let easterSunday;\r\n\r\n //finder ud af om påskesøndag er i marts eller april, sætter dagsnummer derefter\r\n easterSunday = month == 3 ? 59 : 90;\r\n\r\n //lægger dage til.\r\n easterSunday = easterSunday + day;\r\n if(leapYear){ easterSunday += 1 }\r\n\r\n //dynamiske helligdage der lægger fast ift. easterSunday\r\n let skaerTorsdag = easterSunday - 3;\r\n let langFredag = easterSunday - 2;\r\n let andenPaaskedag = easterSunday + 1;\r\n let kristiHimmelfart = easterSunday + 39;\r\n let andenPinsedag = easterSunday + 50;\r\n \r\n //statiske helligdage\r\n let nytaarsdag = 1;\r\n let juledag = leapYear ? 360 : 359;\r\n let andenJuledag = leapYear ? 361 : 360;\r\n \r\n //andre (hellig)dage, ikke implementeret, men kan tilføjes til arrayet, hvis de også skal være lukkedage\r\n let storeBededag = easterSunday + 26; // removed 2023\r\n let foersteMaj = leapYear ? 122 : 121;\r\n let grundlovsdag = leapYear ? 157 : 156;\r\n let juleaftensdag = leapYear ? 359 : 358;\r\n let nytaarsaftensdag = leapYear ? 366 : 365;\r\n\r\n const holidays = [skaerTorsdag, langFredag, andenPaaskedag, kristiHimmelfart, andenPinsedag, nytaarsdag, juledag, andenJuledag];\r\n\r\n //get the current date number\r\n let currentDateNumber = 0;\r\n\r\n let currentMonth = date.getMonth(); \r\n let currentDay = date.getDate(); \r\n let monthLength = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\r\n\r\n // If it's a leap year, changes 28 to 29\r\n if (leapYear) { monthLength[1] = 29; }\r\n\r\n for ( let i=0; i < currentMonth; i++ ) { \r\n currentDateNumber = currentDateNumber + monthLength[i];\r\n }\r\n currentDateNumber = currentDateNumber + currentDay; // Done!\r\n\r\n let yearLength = 365;\r\n if(leapYear){ yearLength++ }\r\n let mandag = currentDateNumber - date.getDay() + 1\r\n\r\n let tirsdag = mandag + 1 <= yearLength ? mandag + 1 : 1;\r\n let onsdag = tirsdag + 1 <= yearLength ? tirsdag + 1 : 1;\r\n let torsdag = onsdag + 1 <= yearLength ? onsdag + 1 : 1;\r\n let fredag = torsdag + 1 <= yearLength ? torsdag + 1 : 1;\r\n let lørdag = fredag + 1 <= yearLength ? fredag + 1 : 1;\r\n let søndag = lørdag + 1 <= yearLength ? lørdag + 1 : 1;\r\n\r\n let næsteUgeMandag = søndag + 1 <= yearLength ? søndag + 1 : 1;\r\n let næsteUgeTirsdag = næsteUgeMandag + 1 <= yearLength ? næsteUgeMandag + 1 : 1;\r\n\r\n let days = [\r\n holidays.includes(mandag),\r\n holidays.includes(tirsdag),\r\n holidays.includes(onsdag),\r\n holidays.includes(torsdag),\r\n holidays.includes(fredag),\r\n holidays.includes(lørdag),\r\n holidays.includes(søndag)\r\n ]\r\n let holidaysNextWeek = [\r\n false,\r\n !holidays.includes(næsteUgeMandag),\r\n !holidays.includes(næsteUgeTirsdag),\r\n true\r\n ]\r\n\r\n //return\r\n return {\r\n isHoliday: holidays.includes(currentDateNumber),\r\n holidaysInCurrentWeek: days,\r\n holidaysNextWeek\r\n }\r\n}\r\n\r\nexport default checkHolidays","\r\nexport function doubleLogoMenu() {\r\n\r\n // if megamenu\r\n if(document.querySelector('#headerDoubleLogo') && document.querySelector('.list-item-left-aligned-toggle')){\r\n\r\n const toggleElements = [...document.querySelectorAll('.list-item-left-aligned-toggle')];\r\n\r\n toggleElements.forEach(item => {\r\n\r\n //toggle function for desktop\r\n if(window.innerWidth > 768){\r\n\r\n item.addEventListener('click', event => {\r\n\r\n if(true){\r\n event.preventDefault()\r\n let isVisible = item.nextElementSibling.classList.contains('visible');\r\n \r\n let activeMenus = item.closest('ul').querySelectorAll('.visible')\r\n if(activeMenus[0] != undefined){\r\n activeMenus.forEach(item => {\r\n item.classList.remove('visible')\r\n item.previousElementSibling.setAttribute('aria-expanded', 'false')\r\n item.previousElementSibling.classList.remove('active')\r\n })\r\n }\r\n if(isVisible){\r\n item.nextElementSibling.classList.remove('visible');\r\n item.setAttribute('aria-expanded', 'false')\r\n item.classList.remove('active')\r\n } else if (!isVisible) {\r\n item.nextElementSibling.classList.add('visible');\r\n item.setAttribute('aria-expanded', true) \r\n item.classList.add('active')\r\n }\r\n } else {\r\n return\r\n }\r\n \r\n\r\n })\r\n\r\n //toggle function for mobile\r\n } else if (window.innerWidth < 769) {\r\n\r\n item.addEventListener('click', () => {\r\n item.nextElementSibling.classList.toggle('visible');\r\n\r\n if(item.getAttribute('aria-expanded') == 'false'){\r\n item.setAttribute('aria-expanded', true)\r\n item.querySelector('.list-item-megamenu-toggle-icon').style.transform = 'translateY(0%) rotate(315deg)'\r\n } else {\r\n item.setAttribute('aria-expanded', 'false')\r\n item.querySelector('.list-item-megamenu-toggle-icon').style.transform = 'translateY(-50%) rotate(135deg)'\r\n }\r\n })\r\n }\r\n })\r\n\r\n //hover intent for desktop\r\n if(window.innerWidth > 768){\r\n // Store a reference to the timeout\r\n let hoverIntentTimeout;\r\n\r\n // Function to be executed when hover intent is triggered\r\n function handleHoverIntent(element) {\r\n listElements.forEach(element => {\r\n element.classList.remove('visible')\r\n })\r\n element.classList.add(\"visible\");\r\n }\r\n\r\n // Function to be executed when hover intent is not triggered\r\n function handleHoverOut(element) {\r\n hoverIntentTimeout = setTimeout(() => {\r\n listElements.forEach(element => {\r\n element.classList.remove('visible')\r\n })\r\n //element.classList.remove(\"visible\");\r\n }, 300); // Delay removal in milliseconds\r\n }\r\n\r\n // Add event listeners to all list elements\r\n const listElements = document.querySelectorAll(\".sidemenu-list-item\");\r\n listElements.forEach(element => {\r\n element.addEventListener(\"mouseenter\", () => {\r\n // Clear previous timeout (if any)\r\n clearTimeout(hoverIntentTimeout);\r\n\r\n // Set a new timeout to trigger hover intent after a delay\r\n hoverIntentTimeout = setTimeout(() => {\r\n handleHoverIntent(element);\r\n }, 300); // Delay in milliseconds\r\n });\r\n\r\n element.addEventListener(\"mouseleave\", () => {\r\n // Clear the timeout when leaving the element\r\n clearTimeout(hoverIntentTimeout);\r\n\r\n // Handle hover out\r\n handleHoverOut(element);\r\n });\r\n });\r\n }\r\n }\r\n if(document.querySelector('#headerDoubleLogo')){\r\n //variables that need to be declared in global scope\r\n const menuElement = document.querySelector('#headerDoubleLogo')\r\n let oldScrollHeight;\r\n let height;\r\n \r\n //set variables whether collapsed menu or not (should refire on resize)\r\n function setScrollValues(){\r\n //reference variable\r\n oldScrollHeight = window.scrollY;\r\n height = menuElement.offsetHeight;\r\n if(window.innerWidth > 768){\r\n document.querySelector('main').style.paddingTop = 0;\r\n }\r\n }\r\n setScrollValues();\r\n window.addEventListener('resize', () => setScrollValues())\r\n \r\n //window.onscroll function. Should be one function for both desktop and mobile\r\n \r\n window.addEventListener('scroll', () => {\r\n\r\n //if desktop menu\r\n if(window.innerWidth > 768){\r\n\r\n \r\n let newScrollHeight = window.scrollY;\r\n //if scrolling up, menu appears\r\n if(newScrollHeight < oldScrollHeight && newScrollHeight > height){\r\n\r\n menuElement.parentElement.style.position = 'sticky';\r\n menuElement.parentElement.style.top = '0px';\r\n \r\n //if scrolling down and scrollheight is higher than menu height, menu disappears\r\n } else if (newScrollHeight > oldScrollHeight && newScrollHeight > height){\r\n menuElement.parentElement.style.top = '-' + height + 'px'\r\n setTimeout(() => menuElement.parentElement.style.position = 'relative', 200)\r\n \r\n //if scroll height is less than height of menu, fix it to the top\r\n } else if (newScrollHeight < height){\r\n menuElement.parentElement.style.top = '0px';\r\n }\r\n \r\n //set reference variable to current scroll height\r\n oldScrollHeight = newScrollHeight;\r\n \r\n \r\n \r\n //if mobile (collapsed) menu\r\n } else if(window.innerWidth < 769){\r\n //const menuElement = document.querySelector('#headerDoubleLogo')\r\n let newScrollHeight = window.scrollY;\r\n const headerDoubleLogoTopBar = document.querySelector('.header--double-logo-top-bar');\r\n \r\n document.querySelector('main').style.paddingTop = menuElement.offsetHeight + 'px'\r\n menuElement.parentElement.style.position = 'fixed';\r\n menuElement.parentElement.style.top = '0'\r\n // ---- Scroll hide menu function ---- //\r\n \r\n if (headerDoubleLogoTopBar) { \r\n //reference variable\r\n let height = document.querySelector('.header--double-logo-top-bar').offsetHeight;\r\n\r\n //if scrolling up but not at top\r\n if(newScrollHeight < oldScrollHeight && newScrollHeight > height){\r\n menuElement.parentElement.style.position = 'fixed';\r\n menuElement.parentElement.style.top = '-' + (height + 1) + 'px';\r\n \r\n //if scrolling down and scrollheight is higher than menu height, menu disappears\r\n } else if (newScrollHeight > oldScrollHeight && newScrollHeight > height){\r\n // console.log('scrolling down')\r\n menuElement.parentElement.style.top = '-' + (height + 1) + 'px'\r\n menuElement.parentElement.style.position = 'fixed'\r\n \r\n //if scroll height is less than height of menu, fix it to the top\r\n } else if (newScrollHeight < height){\r\n menuElement.parentElement.style.top = '0px';\r\n }\r\n \r\n //set reference variable to current scroll height\r\n oldScrollHeight = newScrollHeight;\r\n \r\n }\r\n \r\n }\r\n }\r\n )\r\n }\r\n\r\n // ---- Scroll hide menu function ---- //\r\n/* if(document.querySelector('#headerDoubleLogo') && window.innerWidth > 769){\r\n\r\n console.log(document.querySelector('.collapsed-menu'))\r\n\r\n\r\n window.onscroll = function(){\r\n\r\n }\r\n\r\n } else if (document.querySelector('#headerDoubleLogo') && window.innerWidth < 769){\r\n\r\n\r\n } */\r\n}\r\n\r\nexport default doubleLogoMenu;","export function leftAlignedMegamenu() {\r\n // if megamenu\r\n if(document.querySelector('#headerLeftAligned') && document.querySelector('.list-item-left-aligned-toggle')){\r\n\r\n\t\tconst toggleElements = [...document.querySelectorAll('.list-item-left-aligned-toggle')];\r\n\r\n\r\n\t\t\tconst isCollapsed = document.querySelector('.collapsed-menu');\r\n\t\r\n\t\t\ttoggleElements.forEach(item => {\r\n\t\r\n\t\t\t//toggle function for desktop\r\n\t\t\tif(window.innerWidth > 768 && !isCollapsed){\r\n\t\t\t\titem.addEventListener('click', event => {\r\n\t\t\t\t\tif(true){\r\n\t\t\t\t\t\tevent.preventDefault()\r\n\t\t\t\t\t\tlet isVisible = item.nextElementSibling.classList.contains('visible');\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tlet activeMenus = item.closest('ul').querySelectorAll('.visible')\r\n\t\t\t\t\t\tif(activeMenus[0] != undefined){\r\n\t\t\t\t\t\t\tactiveMenus.forEach(item => {\r\n\t\t\t\t\t\t\t\titem.classList.remove('visible')\r\n\t\t\t\t\t\t\t\titem.previousElementSibling.setAttribute('aria-expanded', 'false')\r\n\t\t\t\t\t\t\t\titem.previousElementSibling.classList.remove('active')\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(isVisible){\r\n\t\t\t\t\t\t\titem.nextElementSibling.classList.remove('visible');\r\n\t\t\t\t\t\t\titem.setAttribute('aria-expanded', 'false')\r\n\t\t\t\t\t\t\titem.classList.remove('active')\r\n\t\t\t\t\t\t} else if (!isVisible) {\r\n\t\t\t\t\t\t\titem.nextElementSibling.classList.add('visible');\r\n\t\t\t\t\t\t\titem.setAttribute('aria-expanded', true) \r\n\t\t\t\t\t\t\titem.classList.add('active')\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\r\n\t\t\t\t//toggle function for mobile\r\n\t\t\t\t} else if (window.innerWidth < 769 || isCollapsed){\r\n\t\t\t\t\titem.addEventListener('click', () => {\r\n\t\t\t\t\t\titem.nextElementSibling.classList.toggle('visible')\r\n\t\t\t\t\t\tif(item.getAttribute('aria-expanded') == 'false'){\r\n\t\t\t\t\t\t\titem.setAttribute('aria-expanded', true)\r\n\t\t\t\t\t\t\titem.querySelector('.list-item-megamenu-toggle-icon').style.transform = 'translateY(0%) rotate(315deg)'\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\titem.setAttribute('aria-expanded', 'false')\r\n\t\t\t\t\t\t\titem.querySelector('.list-item-megamenu-toggle-icon').style.transform = 'translateY(-50%) rotate(135deg)'\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\r\n\t\t\t//hover intent for desktop\r\n\t\t\tif(window.innerWidth > 768 && !isCollapsed){\r\n\t\t\t\t// Store a reference to the timeout\r\n\t\t\t\tlet hoverIntentTimeout;\r\n\t\r\n\t\t\t\t// Function to be executed when hover intent is triggered\r\n\t\t\t\tfunction handleHoverIntent(element) {\r\n\t\t\t\t\tlistElements.forEach(element => {\r\n\t\t\t\t\t\telement.classList.remove('visible')\r\n\t\t\t\t\t})\r\n\t\t\t\t\telement.classList.add(\"visible\");\r\n\t\t\t\t}\r\n\t\r\n\t\t\t\t// Function to be executed when hover intent is not triggered\r\n\t\t\t\tfunction handleHoverOut(element) {\r\n\t\t\t\t\thoverIntentTimeout = setTimeout(() => {\r\n\t\t\t\t\t\tlistElements.forEach(element => {\r\n\t\t\t\t\t\t\telement.classList.remove('visible')\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t\t//element.classList.remove(\"visible\");\r\n\t\t\t\t\t}, 300); // Delay removal in milliseconds\r\n\t\t\t\t}\r\n\t\r\n\t\t\t\t// Add event listeners to all list elements\r\n\t\t\t\tconst listElements = document.querySelectorAll(\".sidemenu-list-item\");\r\n\r\n\t\t\t\t\r\n\r\n\t\t\t\tlistElements.forEach(element => {\r\n\t\t\t\t\telement.addEventListener(\"mouseenter\", () => {\r\n\t\t\t\t\t\t//Only hover if not collapsed menu\r\n\t\t\t\t\t\tif(!document.querySelector('.collapsed-menu')){\r\n\t\t\t\t\t\t\t// Clear previous timeout (if any)\r\n\t\t\t\t\t\t\tclearTimeout(hoverIntentTimeout);\r\n\t\t\r\n\t\t\t\t\t\t\t// Set a new timeout to trigger hover intent after a delay\r\n\t\t\t\t\t\t\thoverIntentTimeout = setTimeout(() => {\r\n\t\t\t\t\t\t\t\thandleHoverIntent(element);\r\n\t\t\t\t\t\t\t}, 300); // Delay in milliseconds\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\r\n\t\t\t\t\telement.addEventListener(\"mouseleave\", () => {\r\n\t\t\t\t\t\t//Only hover effect if no collapsed menu\r\n\t\t\t\t\t\tif(!document.querySelector('.collapsed-menu')){\r\n\t\t\t\t\t\t\t// Clear the timeout when leaving the element\r\n\t\t\t\t\t\t\tclearTimeout(hoverIntentTimeout);\r\n\t\t\r\n\t\t\t\t\t\t\t// Handle hover out\r\n\t\t\t\t\t\t\thandleHoverOut(element);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t \r\n\t\r\n\t\t\t\r\n\t\t}\r\n\tif(document.querySelector('#headerLeftAligned')){\r\n\t\t// ---- Scroll hide menu function ---- //\r\n\t\tconst menuElement = document.querySelector('.header--left-aligned-container')\r\n\r\n\t\t//reference variable\r\n\t\tlet oldScrollHeight;\r\n\t\tlet height;\r\n\r\n\t\tfunction setVariables(){\r\n\t\t\tif(document.querySelector('.collapsed-menu')){\r\n\t\t\t\theight = menuElement.querySelector('.header--left-aligned-top-bar').offsetHeight\r\n\t\t\t} else {\r\n\t\t\t\theight = document.querySelector('.header--left-aligned-container').offsetHeight;\t\r\n\t\t\t}\r\n\t\t\toldScrollHeight = window.scrollY;\r\n\t\t}\r\n\t\tsetVariables();\r\n\r\n\t\twindow.addEventListener('resize', () => {\r\n\t\t\tsetVariables()\r\n\t\t})\r\n\r\n\t\twindow.addEventListener('scroll', () => {\r\n\t\t\tif(document.querySelector('#headerLeftAligned') && window.innerWidth > 768){\r\n\t\t\tlet newScrollHeight = window.scrollY;\r\n\t\t\t//if scrolling up, menu appears\r\n\t\t\tif(newScrollHeight < oldScrollHeight && newScrollHeight > height){\r\n\t\t\t\tif(menuElement.classList.contains('suggestions-hidden')){\r\n\t\t\t\t\tmenuElement.classList.remove('suggestions-hidden')\r\n\t\t\t\t}\r\n\t\t\t\tmenuElement.style.position = 'fixed';\r\n\t\t\t\tmenuElement.style.top = '0px';\r\n\t\t\r\n\t\t\t//if scrolling down and scrollheight is higher than menu height, menu disappears\r\n\t\t\t} else if (newScrollHeight > oldScrollHeight && newScrollHeight > height){\r\n\t\t\t\tif(!menuElement.classList.contains('suggestions-hidden')){\r\n\t\t\t\t\tmenuElement.classList.add('suggestions-hidden')\r\n\t\t\t\t}\r\n\t\t\t\tmenuElement.style.top = '-' + height + 'px'\r\n\t\t\t\t//setTimeout(() => menuElement.style.position = 'fixed', 200)\r\n\t\t\t//if scroll height is less than height of menu, fix it to the top\r\n\t\t\t} else if (newScrollHeight == 0){\r\n\t\t\t\tif(menuElement.classList.contains('suggestions-hidden')){\r\n\t\t\t\t\tmenuElement.classList.remove('suggestions-hidden')\r\n\t\t\t\t}\r\n\t\t\t\tmenuElement.style.top = '0px';\r\n\t\t\t\tmenuElement.style.position = 'relative'\r\n\r\n\t\t\t\t//document.querySelector('main').style.paddingTop = document.querySelector('.header--left-aligned-top-bar').offsetHeight + 'px'\r\n\t\t\t}\r\n\t\t\r\n\t\t\t//set reference variable to current scroll height\r\n\t\t\toldScrollHeight = newScrollHeight;\r\n\t\t\t \r\n\t\t\t} else if (document.querySelector('#headerLeftAligned') && window.innerWidth < 769){\r\n\t\t\t\tif(menuElement.classList.contains('suggestions-hidden')){\r\n\t\t\t\t\tmenuElement.classList.remove('suggestions-hidden')\r\n\t\t\t\t}\r\n\t\t\t const menuElement = document.querySelector('.header--left-aligned-container')\r\n\t\t\t document.querySelector('main').style.paddingTop = document.querySelector('.header--left-aligned-top-bar').offsetHeight + 'px'\r\n\t\t\t menuElement.style.position = 'fixed'\r\n\t\t\t menuElement.style.top = 0\r\n\t\t\t}\r\n\r\n\t\t})\r\n\r\n\r\n\t\t//if resizing from mobile to desktop, but menu is still collapsed, reset padding\r\n\t\twindow.addEventListener('resize', () => {\r\n\t\t\tif(document.querySelector('#headerLeftAligned') && document.querySelector('#headerLeftAligned').classList.contains('collapsed-menu')){\r\n\t\t\t\t//if mobile\r\n\t\t\t\tif(window.innerWidth < 769){\r\n\t\t\t\t\tconst menuElement = document.querySelector('.header--left-aligned')\r\n\t\t\t\t\tmenuElement.style.position = 'relative'\r\n\t\t\t\t\tdocument.querySelector('main').style.paddingTop = 0\r\n\t\t\t\t}\r\n\t\t\t\t//if desktop\r\n\t\t\t\telse if (window.innerWidth > 769){\r\n\t\t\t\t\tconst menuElement = document.querySelector('.header--left-aligned')\r\n\t\t\t\t\tmenuElement.style.position = 'relative'\r\n\t\t\t\t\tdocument.querySelector('main').style.paddingTop = 0\r\n\t\t\t\t\t//document.querySelector('main').style.paddingTop = 0\r\n\t\t\t\t}\r\n\t\t\t} \r\n\t\t})\r\n\t}\r\n\t\t\r\n}\r\n\r\nexport default leftAlignedMegamenu;\r\n","import './jQueryCSV'\r\n\r\nexport function tableCSV(){\r\n\r\n if(document.querySelector('.js-table-csv')){\r\n var CsvToHtmlTable = CsvToHtmlTable || {};\r\n CsvToHtmlTable = {\r\n init: function (options) {\r\n options = options || {};\r\n var csv_path = options.csv_path || \"\";\r\n var el = options.element || \"table-container\";\r\n var allow_download = options.allow_download || false;\r\n var csv_options = options.csv_options || {};\r\n var datatables_options = options.datatables_options || {};\r\n var custom_formatting = options.custom_formatting || [];\r\n var customTemplates = {};\r\n\r\n $.each(custom_formatting, function (i, v) {\r\n var colIdx = v[0];\r\n var func = v[1];\r\n customTemplates[colIdx] = func;\r\n });\r\n \r\n var $table = $(\"
          \");\r\n var $containerElement = $(\"#\" + el);\r\n $containerElement.empty().append($table);\r\n \r\n $.when($.get(csv_path)).then(\r\n function (data) {\r\n\r\n var csvData = $.csv.toArrays(data, csv_options);\r\n var $tableHead = $(\"\");\r\n var csvHeaderRow = csvData[0];\r\n var $tableHeadRow = $(\"\");\r\n\r\n // Add a default header for the first column (expand button or similar)\r\n $tableHeadRow.append($(\"\").text(\"\"));\r\n\r\n for (var headerIdx = 0; headerIdx < csvHeaderRow.length; headerIdx++) {\r\n $tableHeadRow.append($(\"\").text(csvHeaderRow[headerIdx]));\r\n }\r\n $tableHead.append($tableHeadRow);\r\n \r\n $table.append($tableHead);\r\n var $tableBody = $(\"\");\r\n \r\n for (var rowIdx = 1; rowIdx < csvData.length; rowIdx++) {\r\n var $tableBodyRow = $(\"\");\r\n var $tableBodyRowTd = $(\"\");\r\n $tableBodyRow.append($tableBodyRowTd);\r\n\r\n for (var colIdx = 0; colIdx < csvData[rowIdx].length; colIdx++) {\r\n var $tableBodyRowTd = $(\"\");\r\n var $paragraph = $(\"

          \")\r\n var cellTemplateFunc = customTemplates[colIdx];\r\n if (cellTemplateFunc) {\r\n $paragraph.html(cellTemplateFunc(csvData[rowIdx][colIdx]));\r\n } else {\r\n $paragraph.text(csvData[rowIdx][colIdx]);\r\n }\r\n $tableBodyRowTd.append($paragraph)\r\n $tableBodyRow.append($tableBodyRowTd);\r\n $tableBody.append($tableBodyRow);\r\n }\r\n }\r\n $table.append($tableBody);\r\n \r\n $table.DataTable(datatables_options);\r\n\r\n if (allow_download) {\r\n $containerElement.append(\"Download som CSV\");\r\n }\r\n });\r\n }\r\n };\r\n\r\n const tables = document.querySelectorAll('.js-table-csv')\r\n tables.forEach(table => {\r\n\r\n CsvToHtmlTable.init({\r\n csv_path: table.getAttribute('data-source'),\r\n element: table.id,\r\n allow_download: false,\r\n csv_options: {\r\n separator: \",\",\r\n delimiter: '\"'\r\n },\r\n datatables_options: {\r\n paging: table.getAttribute('data-pagination') === 'true',\r\n searching: table.getAttribute('data-searching') === 'true',\r\n responsive: table.getAttribute('data-responsive') === 'true' ? {\r\n details: {\r\n type: 'column'\r\n }\r\n } : false,\r\n scrollX: table.getAttribute('data-responsive') !== 'true',\r\n info: table.getAttribute('data-info') === 'true',\r\n lengthChange: false,\r\n columnDefs: table.getAttribute('data-responsive') === 'true' ? [\r\n {\r\n className: 'control',\r\n orderable: false,\r\n target: 0,\r\n visible: true\r\n }\r\n ] : [\r\n {\r\n className: 'control',\r\n orderable: false,\r\n target: 0,\r\n visible: false\r\n }\r\n ],\r\n order: [],\r\n \"language\": {\r\n \"paginate\": {\r\n \"first\": \"\",\r\n \"last\": \"\",\r\n \"next\": \"\",\r\n \"previous\": \"\"\r\n },\r\n \"lengthMenu\": \"Vis _MENU_ linjer\",\r\n \"info\": \"Viser _START_ til _END_ af _TOTAL_ linjer\",\r\n \"infoFiltered\": \"(filtreret fra _MAX_ linjer)\",\r\n \"search\": \"Søg\",\r\n \"searchPlaceholder\": \"Søg\",\r\n \"searchBuilder\": {\r\n \"value\": \"Søg\",\r\n },\r\n \"layout\": {\r\n \"top1\": \"searchBuilder\"\r\n } \r\n }\r\n }/* ,\r\n custom_formatting: [\r\n [4, format_link]\r\n ] */\r\n });\r\n table.querySelectorAll('table').forEach(el => {\r\n el.setAttribute('summary', table.getAttribute('data-summary'))\r\n })\r\n })\r\n\r\n }\r\n}\r\n\r\nexport default tableCSV","export function dropdownSettings() {\r\n if (document.querySelector('.dropdownSettingsJs')) {\r\n const buttons = document.querySelectorAll('.dropdown-settings__toggle');\r\n\r\n const handleClick = (button) => {\r\n const dropdown = button.parentNode.querySelector('.dropdown-settings__container');\r\n dropdown.classList.toggle('hidden');\r\n button.classList.toggle('active');\r\n\r\n // Adjust dropdown position to prevent overflow\r\n adjustDropdownPosition(dropdown, button);\r\n };\r\n\r\n const adjustDropdownPosition = (dropdown, button) => {\r\n const rect = dropdown.getBoundingClientRect();\r\n\r\n // Check if dropdown is overflowing the bottom of the page\r\n if (rect.bottom > window.innerHeight) {\r\n dropdown.style.top = 'auto';\r\n dropdown.style.bottom = `${button.offsetHeight}px`;\r\n } else {\r\n dropdown.style.top = `${button.offsetHeight}px`;\r\n dropdown.style.bottom = 'auto';\r\n }\r\n };\r\n\r\n const closeAllDropdowns = (exceptionButton = null) => {\r\n const openDropdowns = document.querySelectorAll('.dropdown-settings__container:not(.hidden)');\r\n openDropdowns.forEach(dropdown => {\r\n const associatedButton = dropdown.parentNode.querySelector('.dropdown-settings__toggle');\r\n if (associatedButton !== exceptionButton) {\r\n dropdown.classList.add('hidden');\r\n associatedButton.classList.remove('active');\r\n }\r\n });\r\n };\r\n\r\n buttons.forEach(button => {\r\n button.addEventListener('click', (event) => {\r\n event.stopPropagation();\r\n const isActive = button.classList.contains('active');\r\n closeAllDropdowns(isActive ? button : null); // If the button is already active, don't close its dropdown\r\n handleClick(button);\r\n });\r\n });\r\n\r\n // Close dropdown when clicking outside\r\n document.addEventListener('click', (event) => {\r\n if (!event.target.closest('.dropdown-settings')) {\r\n closeAllDropdowns();\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default dropdownSettings;","/*\r\n * @title App\r\n * @description Application entry point\r\n */\r\n\r\n// Modules\r\nimport Alpine from 'alpinejs';\r\nimport intersect from '@alpinejs/intersect'\r\nimport focus from '@alpinejs/focus'\r\nimport headerMegamenuExtended from '../modules/headers/header__megamenu-extended/header__megamenu-extended';\r\nimport headerMegamenuTabOrderMobile from '../modules/headers/header__megamenu-extended/tab-order-mobile';\r\nimport '../../node_modules/lazysizes/plugins/parent-fit/ls.parent-fit';\r\nimport login from './components/pageLogin';\r\nimport objectFitImages from './components/objectFitImages';\r\nimport blockMediaDownload from './components/block-media-download';\r\nimport headerIntranet from '../modules/intranet/header__intranet/header__intranet';\r\nimport footers from '../modules/footers/footers';\r\nimport watermark from '../modules/watermark/watermark';\r\nimport subscriptionModal from '../modules/modals/modal-subscription/modal-subscription';\r\nimport pagination from '../modules/pagination/pagination';\r\nimport carouselCards from '../modules/carousels/carousel__cards/carousel__cards';\r\nimport articleAnchorMenu from '../modules/anchor-links/article-anchor-menu/article-anchor-menu';\r\nimport accordion from '../modules/accordions/accordion';\r\nimport autosuggestions from '../modules/search-bars/suggestions/autosuggestions.js';\r\nimport accordionMobile from '../modules/accordions/accordion--mobile/accordion--mobile';\r\nimport accordionDesktopDown from '../modules/accordions/accordion--desktop-down/accordion--desktop-down';\r\nimport infoboxLinksIcon from '../modules/info-boxes/info-box__links__icon/info-box__links__icon';\r\nimport threeColumnCarousel from '../modules/carousels/three-column-carousel/three-column-carousel';\r\nimport progress from '../modules/progressbar/progress';\r\nimport swiper from '../modules/carousels/swiper/swiper';\r\nimport heroMultiBox from '../modules/heros/hero__multi-box/hero__multi-box';\r\nimport video from '../modules/videos/video';\r\nimport videoDreambroker from '../modules/videos/video-dreambroker';\r\nimport videoYoutube from '../modules/videos/video-youtube';\r\nimport BorgerDk from '../modules/third-party/borgerDk/borgerDk';\r\nimport SBSYS from '../modules/third-party/sbsys/sbsysaccordion.js';\r\nimport smoothScroll from './components/smooth-scroll.js';\r\nimport pageLoader from './components/page-loader.js';\r\nimport cssVars from 'css-vars-ponyfill';\r\nimport tooltips from './components/tooltips';\r\nimport intextArrowLink from './components/intext-arrow-link';\r\nimport serviceMenu from '../modules/service-menu/service-menu';\r\nimport serviceMenuShareByEmail from '../modules/service-menu/service-menu__shareByEmail';\r\nimport dataTabel from '../modules/tabel/tabel';\r\nimport dataTabelScrollable from '../modules/tabel/tabel';\r\nimport formElements from './components/form-elements';\r\nimport sideMenu from '../modules/side-menu/side-menu';\r\nimport instagramFeed from '../modules/third-party/instagram-feed/instagram-feed';\r\nimport counterAnimation from '../modules/side-boxes/side-boxes__counter/side-boxes__counter';\r\nimport kultunaut from '../modules/third-party/kultunaut/kultunaut-card/kultunaut-card';\r\nimport kultunautPopularEvent from '../modules/side-boxes/side-boxes__most-popular/side-boxes__most-popular';\r\nimport modalPopup from '../modules/modals/modal-popup/modal-popup';\r\nimport tabListScrollable from '../modules/intranet/tab-list--scrollable/tab-list--scrollable';\r\nimport videoBackground from './components/video-backgrounds';\r\nimport cludoSearch from '../modules/third-party/cludo-search/cludo-search';\r\nimport imageGallery from '../modules/image/image-gallery/image-gallery';\r\nimport chat from '../modules/intranet/chat/chat';\r\nimport onShowMore from '../modules/fact-box/onShowMore';\r\nimport collapseBox from '../modules/fact-box/collapseBox';\r\nimport onShowMoreCard from '../modules/cards/card__comment/onShowMoreCard';\r\nimport card__comment from '../modules/cards/card__comment/card__comment';\r\nimport header from '../modules/headers/header__transparent-menu/scripts/header';\r\nimport { moveNavItems } from '../modules/headers/header__transparent-menu/scripts/moveNavItems';\r\nimport parallax from '../modules/creative/parallax/parallax';\r\nimport dropdownMdDown from '../modules/dropdowns/dropdown--md-down/dropdown--md-down';\r\nimport bannerHours from '../modules/banners/banner__hours/bannerHours';\r\nimport videoHTML from '../modules/videos/video-html';\r\nimport breadcrumb from '../modules/breadcrumbs/breadcrumb/breadcrumb';\r\nimport headerTagged from \"../modules/headers/header--tagged/headerTagged\";\r\n//import tabpanel from \"../modules/tab-panels/tabpanel\";\r\nimport headerLeftAligned from '../modules/headers/header__megamenu-left-aligned/headerLeftAligned';\r\nimport doubleLogoMenu from '../modules/headers/header__double-logo/doubleLogoMenu';\r\nimport collapse from '@alpinejs/collapse';\r\nimport leftAlignedMegamenu from '../modules/headers/header__megamenu-left-aligned/leftAlignedMegamenu';\r\nimport unsaveButton from './components/unsaveButton';\r\nimport tableCSV from '../modules/tabel/table-csv/tableCsv.js';\r\nimport dropdownSettings from '../modules/dropdowns/dropdown-settings/dropdownSettings';\r\nimport tableHours from '../modules/table-hours/table-hours.js';\r\nimport tabpanelReworked from '../modules/tab-panels/tabpanel--reworked.js';\r\n\r\nimport greyScale from './components/grayscale';\r\nimport greyScaleInit from './components/init-grayscale';\r\nimport darkmodeScale from './components/dark-mode.js';\r\nimport headerMegamenuFocusTrap from '../modules/headers/header__megamenu-extended/focus-trap.js';\r\n//import tabPanelPreload from '../modules/tab-panel/tabpanel--preload.js';\r\n\r\nwindow.Alpine = Alpine;\r\n\r\nAlpine.plugin(collapse);\r\nAlpine.plugin(focus)\r\nAlpine.plugin(intersect)\r\nAlpine.data('collapseBox', collapseBox);\r\nAlpine.data('card__comment', card__comment);\r\nAlpine.data('headerTagged', headerTagged);\r\nAlpine.data('headerLeftAligned', headerLeftAligned);\r\n//Alpine.data('tabpanel', tabpanel);\r\nAlpine.start();\r\n\r\ndocument.addEventListener('DOMContentLoaded', function () {\r\n\theaderMegamenuExtended();\r\n headerMegamenuTabOrderMobile();\r\n headerMegamenuFocusTrap();\r\n\tleftAlignedMegamenu()\r\n\tdoubleLogoMenu();\r\n\tlogin();\r\n\theaderIntranet();\r\n\theroMultiBox();\r\n\tfooters();\r\n\t// watermark();\r\n watermark('.footer');\r\n\tpageLoader();\r\n\tsmoothScroll();\r\n\tblockMediaDownload();\r\n\tobjectFitImages();\r\n\tsubscriptionModal();\r\n\tpagination();\r\n\tcarouselCards();\r\n swiper();\r\n\tarticleAnchorMenu();\r\n\taccordion();\r\n\taccordionMobile();\r\n accordionDesktopDown();\r\n\tinfoboxLinksIcon();\r\n\tthreeColumnCarousel();\r\n\tprogress();\r\n\tvideo();\r\n\tvideoDreambroker();\r\n\tvideoYoutube();\r\n\tvideoHTML();\r\n\tBorgerDk();\r\n\tSBSYS();\r\n\ttooltips();\r\n\tintextArrowLink();\r\n\tserviceMenu();\r\n serviceMenuShareByEmail();\r\n\tdataTabel();\r\n\tdataTabelScrollable();\r\n\tformElements();\r\n\tsideMenu();\r\n\tinstagramFeed();\r\n\tcounterAnimation();\r\n\tmodalPopup();\r\n\ttabListScrollable();\r\n\tvideoBackground();\r\n\tcludoSearch();\r\n\timageGallery();\r\n\tchat();\r\n\tonShowMore();\r\n onShowMoreCard();\r\n\theader();\r\n\tkultunaut();\r\n\tkultunautPopularEvent();\r\n\tmoveNavItems();\r\n\tparallax();\r\n\tdropdownMdDown();\r\n\tbannerHours();\r\n\tbreadcrumb();\r\n\tdropdownSettings();\r\n\tunsaveButton();\r\n\ttableCSV();\r\n\tautosuggestions();\r\n\ttableHours();\r\n\t//tabPanelPreload();\r\n\ttabpanelReworked();\r\n\r\n\tgreyScale();\r\n\tgreyScaleInit();\r\n\tdarkmodeScale();\r\n\tcssVars({\r\n\t\trootElement: document, // default\r\n\t});\r\n});\r\n","import { throttle } from 'lodash-es';\r\n\r\nexport default () => ({\r\n\topen: false,\r\n\tdesktop: false,\r\n\r\n\tinit() {\r\n\t\tconst collapseOn = this.$el.getAttribute('data-collapse-on') ? this.$el.getAttribute('data-collapse-on') : false;\r\n\r\n\t\t//check if fact box should collapse on all screen sizes\r\n\t\tif(collapseOn == 'all'){\r\n\t\t\tthis.open == false;\r\n\t\t}\r\n\t\t//else, collapse depending on screen size\r\n\t\telse {\r\n\t\t\tthis.desktop = window.matchMedia('(min-width: 767px)').matches;\r\n\t\t\tthis.open = this.desktop;\r\n\t\t\tif(window.matchMedia('(min-width: 767px)').matches){\r\n\t\t\t\tthis.$el.classList.add('fact-box--no-collapse-desktop')\r\n\t\t\t}\r\n\t\t}\r\n \r\n\t\twindow.addEventListener(\r\n\t\t\t'resize',\r\n\t\t\tthrottle(() => {\r\n\t\t\t\t//only change visibility of fact box if collapse is NOT \"all\"\r\n\t\t\t\tif(collapseOn !== 'all') {\r\n\t\t\t\t\tthis.desktop = window.matchMedia('(min-width: 767px)').matches;\r\n\t\t\t\t\tthis.open = this.desktop;\r\n\t\t\t\t\tif(this.$el.classList.contains('fact-box--no-collapse-desktop') && window.matchMedia('(max-width: 766px)').matches){\r\n\t\t\t\t\t\tthis.$el.classList.remove('fact-box--no-collapse-desktop')\r\n\t\t\t\t\t} else if (!this.$el.classList.contains('fact-box--no-collapse-desktop') && window.matchMedia('(min-width: 767px)').matches) {\r\n\t\t\t\t\t\tthis.$el.classList.add('fact-box--no-collapse-desktop')\t\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t\r\n\t\t\t}, 200)\r\n\t\t);\r\n\t},\r\n});\r\n","export default () => ({\r\n\topen: false,\r\n\tshouldHideButton: false, // Initially assume the button should be shown\r\n\r\n\tinit() {\r\n\t\tthis.updateButtonVisibility();\r\n\t\tthis.updateAriaLabel(); // Initialize the aria-label\r\n\t},\r\n\r\n\tupdateButtonVisibility() {\r\n\t\tconst content = this.$refs.commentContent;\r\n\r\n\t\tif (content.clientHeight < 130) {\r\n\t\t\tthis.shouldHideButton = true;\r\n\t\t\tthis.open = true; // Ensure that content is open if button is hidden\r\n\t\t} else {\r\n\t\t\tthis.shouldHideButton = false;\r\n\t\t\tthis.open = false; // Ensure that content is closed if button is visible\r\n\t\t}\r\n\t\tthis.updateAriaLabel(); // Update the aria-label after visibility is set\r\n\t},\r\n\r\n\ttoggleContent() {\r\n\t\tif (!this.shouldHideButton) {\r\n\t\t\tthis.open = !this.open;\r\n\t\t\tthis.updateAriaLabel(); // Update the aria-label on toggle\r\n\t\t}\r\n\t},\r\n\r\n\tupdateAriaLabel() {\r\n\t\tconst button = this.$refs.btnToggle;\r\n\t\tconst ariaOpen = button.getAttribute('data-aria-open');\r\n\t\tconst ariaClose = button.getAttribute('data-aria-close');\r\n\r\n\t\t// Update the aria-label based on the state of `open`\r\n\t\tbutton.setAttribute('aria-label', this.open ? `${ariaClose}` : `${ariaOpen}`);\r\n\t}\r\n});\r\n","export default () => ({\r\n mobileSearch: false,\r\n mobileSideMenu: false,\r\n focusTrap: true,\r\n desktopSearch: false,\r\n mobileInputFocused: false,\r\n mobileInputValue: \"\",\r\n\r\n init() {\r\n const updateWindowProperties = () => {\r\n if (!window.matchMedia(\"(max-width: 991px)\").matches) { \r\n this.mobileSideMenu = true;\r\n this.focusTrap = false;\r\n } else {\r\n this.mobileSideMenu = false;\r\n this.focusTrap = true;\r\n }\r\n };\r\n\r\n // Initial update\r\n updateWindowProperties();\r\n\r\n // Add window resize event listener\r\n window.addEventListener(\"resize\", updateWindowProperties);\r\n },\r\n\r\n toggleMobileMenu() {\r\n this.mobileSideMenu = !this.mobileSideMenu;\r\n this.mobileSearch = false;\r\n }\r\n});","export default () => ({\r\n\tmobileSearch: false,\r\n\tmobileSideMenu: false,\r\n\tfocusTrap: true,\r\n\tdesktopSearch: false,\r\n\tmobileInputFocused: false,\r\n\tmobileInputValue: \"\",\r\n\tisMobile: true,\r\n\r\n\tinit() {\r\n\t\tlet isMenuTooWide = false;\r\n\t\tlet doubleLogoMenuElement = false;\r\n\t\tlet leftAlignedMenuElement = false;\r\n\t\t\r\n\t\tlet doubleLogoMaxWidth;\r\n\t\tlet headerLeftAlignedMaxWidth;\r\n\r\n\t\tconst updateWindowProperties = () => {\r\n\t\t\t//if load is on tablet or mobile, keep as is for all subsequent resizes\r\n\t\t\tif(doubleLogoMaxWidth === 0 ){\r\n\t\t\t\tthis.mobileSideMenu = false;\r\n\t\t\t\tthis.focusTrap = true;\r\n\t\t\t\tthis.isMobile = true;\r\n\t\t\t} else if (headerLeftAlignedMaxWidth === 0) {\r\n\t\t\t\tthis.mobileSideMenu = false;\r\n\t\t\t\tthis.focusTrap = true;\r\n\t\t\t\tthis.isMobile = true;\r\n\r\n\t\t\t} else if (isMenuTooWide && doubleLogoMenuElement) {\r\n\t\t\t\tthis.mobileSideMenu = false;\r\n\t\t\t\tthis.focusTrap = false;\r\n\t\t\t\tthis.isMobile = true;\r\n\t\t\t} else if (isMenuTooWide && leftAlignedMenuElement){\r\n\t\t\t\tthis.mobileSearch = false;\r\n\t\t\t\tthis.mobileSideMenu = false;\r\n\t\t\t\tthis.focusTrap = true;\r\n\t\t\t\tthis.isMobile = true;\r\n\t\t\t} else if (!window.matchMedia(\"(max-width: 991px)\").matches) {\r\n\t\t\t\tthis.mobileSearch = false;\r\n\t\t\t\tthis.mobileSideMenu = true;\r\n\t\t\t\tthis.focusTrap = false;\r\n\t\t\t\tthis.isMobile = false;\r\n\t\t\t} else {\r\n\t\t\t\tthis.mobileSearch = false;\r\n\t\t\t\tthis.mobileSideMenu = false;\r\n\t\t\t\tthis.focusTrap = true;\r\n\t\t\t\tthis.isMobile = true;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Initial update\r\n\t\tupdateWindowProperties();\r\n\r\n\t\t// Add window resize event listener\r\n\t\twindow.addEventListener(\"resize\", () => checkMenuWidth());\r\n\r\n\t\t// function to check if menus are too long to fit on screen (on desktop)\r\n\t\tconst checkMenuWidth = () => {\r\n\t\t\tdoubleLogoMenuElement = document.querySelector('#headerDoubleLogo') ? document.querySelector('#headerDoubleLogo') : false;\r\n\t\t\tleftAlignedMenuElement = document.querySelector('.header--left-aligned-container') ? document.querySelector('.header--left-aligned-container') : false;\r\n\r\n\t\t\t//check double logo menu\r\n\t\t\tif(doubleLogoMenuElement && !window.matchMedia(\"(max-width: 991px)\").matches){\r\n\r\n\t\t\t\tconst width = doubleLogoMenuElement.querySelector('.header--double-logo-sidemenu').clientWidth - 40 - 40;\r\n\t\t\t\tconst sidemenu = document.querySelector('.header--double-logo-sidemenu');\r\n\t\t\t\tconst logoWidth = sidemenu.querySelector('.nav-brand').clientWidth;\r\n\r\n\t\t\t\tconst searchbarWidth = 400;\t\t\r\n\t\t\t\tconst combinedWidth = doubleLogoMaxWidth + searchbarWidth + logoWidth;\r\n\r\n\t\t\t\t//if sidemenu width is 0 (page was loaded on tablet for example), keep tablet menu\r\n\t\t\t\tif(doubleLogoMaxWidth == 0){\r\n\t\t\t\t\tisMenuTooWide = true;\r\n\t\t\t\t\r\n\t\t\t\t//collapse if width too large to fit\r\n\t\t\t \t} else if(combinedWidth > width){\r\n\t\t\t\t\tisMenuTooWide = true;\r\n\t\t\t\t\tupdateWindowProperties();\t\t\t\r\n\t\t\t\t\tdocument.querySelector('.mobile-actions-burger-btn').addEventListener('click', () => {\r\n\t\t\t\t\t\tdocument.querySelector('html').style.overflow = 'visible'\r\n\t\t\t\t\t})\r\n\t\t\t\t//expand if there is space for the menu\r\n\t\t\t\t} else {\r\n\t\t\t\t\tisMenuTooWide = false;\r\n\t\t\t\t\tif(doubleLogoMenuElement.classList.contains('header__collapsed')) {doubleLogoMenuElement.classList.remove('header__collapsed')}\r\n\t\t\t\t\tupdateWindowProperties();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//check left aligned menu\r\n\t\t\tif(leftAlignedMenuElement && !window.matchMedia(\"(max-width: 991px)\").matches){\r\n\r\n\t\t\t\t//const sidemenuWidth = leftAlignedMenuElement.querySelector('.header--left-aligned-sidemenu-list').scrollWidth;\r\n\t\t\t\tconst width = leftAlignedMenuElement.clientWidth - 40 - 40;\r\n\t\t\t\tconst searchBar = leftAlignedMenuElement.querySelector('.header--left-aligned-sidemenu').querySelector('.desktop-searchbar') ? true : false;\r\n\t\t\t\tconst searhbarWidth = searchBar ? 300 : 0;\r\n\t\t\t\tconst combinedWidth = headerLeftAlignedMaxWidth + searhbarWidth;\r\n\t\t\t\t// console.log('width:' + width)\r\n\t\t\t\t// console.log('max width: ' + headerLeftAlignedMaxWidth)\r\n\r\n\t\t\t\t//is width is 0 (loaded on tablet for example), keep collapsed menu\r\n\t\t\t\tif(headerLeftAlignedMaxWidth === 0 ){\r\n\t\t\t\t\tisMenuTooWide = true;\r\n\t\t\t\t\t// if menu items are too wide, collapse\r\n\t\t\t\t} else if(combinedWidth > width){\r\n\t\t\t\t\tisMenuTooWide = true;\r\n\t\t\t\t\tupdateWindowProperties();\r\n\t\t\t\t\t\r\n\t\t\t\t\tdocument.querySelector('.mobile-actions-burger-btn').addEventListener('click', () => {\r\n\t\t\t\t\t\tdocument.querySelector('html').style.overflow = 'visible'\r\n\t\t\t\t\t})\r\n\r\n\t\t\t\t//if menu is not too wide, keep as is\r\n\t\t\t\t} else {\r\n\t\t\t\t\tisMenuTooWide = false;\r\n\t\t\t\t\tif(leftAlignedMenuElement.classList.contains('header__collapsed')) {leftAlignedMenuElement.classList.remove('header__collapsed')}\r\n\t\t\t\t\tupdateWindowProperties();\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tupdateWindowProperties();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Check if menu is too large to contain all items\r\n\t\tdocument.addEventListener('DOMContentLoaded', () => {\r\n\t\t\tdoubleLogoMaxWidth = document.querySelector('.header--double-logo-sidemenu-list') ? document.querySelector('.header--double-logo-sidemenu-list').scrollWidth : false;\r\n\t\t\theaderLeftAlignedMaxWidth = document.querySelector('.header--left-aligned-sidemenu-list') ? document.querySelector('.header--left-aligned-sidemenu-list').clientWidth : false;\r\n\t\t\tcheckMenuWidth();\r\n\t\t})\r\n\t},\r\n});\r\n","export default function onShowMore() {\r\n\tconst factBox = document.querySelectorAll('.fact-box--collapsible');\r\n\r\n\tconst disableFocusable = (element) => {\r\n\t\telement.setAttribute('tabindex', '-1');\r\n\t};\r\n\r\n\tconst enableFocusable = (element) => {\r\n\t\telement.removeAttribute('tabindex');\r\n\t};\r\n\r\n\tconst handleFocusables = (focusables, richText) => {\r\n\t\tlet isCollapsed = richText.classList.contains('closed');\r\n\r\n\t\tfocusables.forEach((focusable) => {\r\n\t\t\tisCollapsed ? disableFocusable(focusable) : enableFocusable(focusable);\r\n\t\t});\r\n\t};\r\n\r\n\tfactBox.forEach((box) => {\r\n\t\tconst elementButton = box.querySelector('.read-more-button');\r\n\t\tconst richText = box.querySelector('.js_fact-box');\r\n\t\tconst focusables = Array.from(box.getElementsByTagName('a'));\r\n\r\n\t\thandleFocusables(focusables, richText);\r\n\r\n\t\telementButton.addEventListener('click', () => {\r\n\t\t\thandleFocusables(focusables, richText);\r\n\t\t});\r\n\r\n\t});\r\n}\r\n","import dataTabel from '../../modules/tabel/tabel.js';\r\n\r\nexport function accordion() {\r\n\tvar accordion = jQuery(\".js-accordion\");\r\n\r\n\tif (accordion.length > 0) {\r\n\t\taccordion = (function () {\r\n\t\t\t// default settings\r\n\t\t\tvar settings = {\r\n\t\t\t\tspeed: 400,\r\n\t\t\t\toneOpen: false,\r\n\t\t\t};\r\n\r\n\t\t\t// Site improve disable all accordions\r\n\t\t\tfunction isSiteImproveAccordionDisabled() {\r\n\t\t\t\tconst disableValue = localStorage.getItem(\"siteImproveAccordionDisable\");\r\n\t\t\t\treturn disableValue === null || disableValue.toLowerCase() !== \"false\";\r\n\t\t\t}\r\n\r\n\t\t\tif (!isSiteImproveAccordionDisabled()) {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tinit: function () {\r\n\t\t\t\t\t\tjQuery(\".js-accordion-body\").css(\"display\", \"block\");\r\n\t\t\t\t\t},\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\treturn {\r\n\t\t\t\tinit: function ($settings) {\r\n\t\t\t\t\tjQuery(document).on(\"click\", \".js-accordion-header\", function (e) {\r\n\t\t\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\t\t\tif (jQuery(this).attr(\"aria-expanded\") == \"false\") {\r\n\t\t\t\t\t\t\tvar iframes = jQuery(this)\r\n\t\t\t\t\t\t\t\t.siblings(\".accordion-body\")\r\n\t\t\t\t\t\t\t\t.find(\"iframe\");\r\n\t\t\t\t\t\t\tiframes.each(function (index, element) {\r\n\t\t\t\t\t\t\t\telement.style.maxHeight = \"\";\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\taccordion.toggle(jQuery(this));\r\n\r\n\t\t\t\t\t\tvar queryString = window.location.search;\r\n\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\tjQuery(this).parent().hasClass(\"active\") &&\r\n\t\t\t\t\t\t\tjQuery(this).parent().attr(\"id\") != undefined\r\n\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\twindow.history.replaceState(\r\n\t\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t\t\"\",\r\n\t\t\t\t\t\t\t\twindow.location.pathname + queryString + \"#\" + jQuery(this).parent().attr(\"id\")\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\twindow.history.replaceState({}, \"\", window.location.pathname + queryString);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tjQuery(document).on(\"click\", \".js-accordion-toggle-all\", function () {\r\n\t\t\t\t\t\tvar $this = jQuery(this).parents(\".accordion\");\r\n\t\t\t\t\t\tvar $accordionToggleBtn = $this.find(\".js-accordion-toggle-all\");\r\n\t\t\t\t\t\tvar $textOpen = $accordionToggleBtn.attr(\"data-textOpen\");\r\n\t\t\t\t\t\tvar $textClose = $accordionToggleBtn.attr(\"data-textClose\");\r\n\r\n\t\t\t\t\t\tif ($accordionToggleBtn.hasClass(\"active\")) {\r\n\t\t\t\t\t\t\t$accordionToggleBtn.attr(\"aria-expanded\", \"false\");\r\n\t\t\t\t\t\t\t$accordionToggleBtn.find(\"span\").html($textOpen);\r\n\t\t\t\t\t\t\t$accordionToggleBtn.removeClass(\"active\");\r\n\t\t\t\t\t\t\t$this.find(\".js-accordion-header\").attr(\"aria-expanded\", \"false\");\r\n\t\t\t\t\t\t\t$this.find(\".js-accordion-item\").removeClass(\"active\");\r\n\t\t\t\t\t\t\t$this.find(\".js-accordion-body\").stop().slideUp(400);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t$accordionToggleBtn.attr(\"aria-expanded\", \"true\");\r\n\t\t\t\t\t\t\t$accordionToggleBtn.find(\"span\").html($textClose);\r\n\t\t\t\t\t\t\t$accordionToggleBtn.addClass(\"active\");\r\n\t\t\t\t\t\t\t$this.find(\".js-accordion-item\").addClass(\"active\");\r\n\t\t\t\t\t\t\t$this.find(\".js-accordion-header\").attr(\"aria-expanded\", \"true\");\r\n\t\t\t\t\t\t\t$this.find(\".js-accordion-body\").stop().slideDown(400);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t$.extend(settings, $settings);\r\n\r\n\t\t\t\t\tjQuery(\".js-accordion-item.active\")\r\n\t\t\t\t\t\t.find(\"> .js-accordion-body\")\r\n\t\t\t\t\t\t.show();\r\n\t\t\t\t},\r\n\r\n\t\t\t\ttoggle: function ($this) {\r\n\t\t\t\t\t$this.attr(\"aria-expanded\", \"false\");\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tsettings.oneOpen &&\r\n\t\t\t\t\t\t$this[0] !=\r\n\t\t\t\t\t\t\t$this.closest(\".js-accordion\")\r\n\t\t\t\t\t\t\t\t.find(\"> .js-accordion-item.active > .js-accordion-header\")[0]\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\t$this.closest(\".js-accordion\")\r\n\t\t\t\t\t\t\t.find(\"> .js-accordion-item\")\r\n\t\t\t\t\t\t\t.find(\".js-accordion-body\");\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t$this.closest(\".js-accordion-item\").toggleClass(\"active\");\r\n\t\t\t\t\t$this.next().stop().slideToggle(settings.speed);\r\n\r\n\t\t\t\t\tif ($this.closest(\".js-accordion-item\").hasClass(\"active\")) {\r\n\t\t\t\t\t\t$this.attr(\"aria-expanded\", \"true\");\r\n\r\n\t\t\t\t\t\t// Initialize DataTable when the accordion item is opened\r\n\t\t\t\t\t\tvar table = $this.closest(\".js-accordion-item\").find(\".dataTable\");\r\n\t\t\t\t\t\tif (table.length) {\r\n\t\t\t\t\t\t\t// Ensure the table is only initialized once\r\n\t\t\t\t\t\t\tif (!$.fn.dataTable.isDataTable(table)) {\r\n\t\t\t\t\t\t\t\ttable.DataTable({\r\n\t\t\t\t\t\t\t\t\tresponsive: true,\r\n\t\t\t\t\t\t\t\t\tpageLength: 10,\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t// Trigger a resize of the DataTable columns\r\n\t\t\t\t\t\t\t\ttable.DataTable().columns.adjust().draw();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t};\r\n\t\t})();\r\n\r\n\t\tjQuery(document).ready(function () {\r\n\t\t\taccordion.init({ speed: 300, oneOpen: true });\r\n\t\t});\r\n\r\n\t\t// Function to open accordion item and scroll to it\r\n\t\tfunction openAccordionAndScroll(accordionItem) {\r\n\t\t\taccordionItem\r\n\t\t\t\t.addClass(\"active\")\r\n\t\t\t\t.find(\".js-accordion-body\")\r\n\t\t\t\t.addClass(\"active\")\r\n\t\t\t\t.show();\r\n\t\t\tvar accordionContainer = accordionItem.closest(\".js-accordion\");\r\n\t\t\tif (accordionContainer.length > 0) {\r\n\t\t\t\taccordionContainer.addClass(\"active\");\r\n\t\t\t\taccordionContainer.find(\"iframe\").css({ maxHeight: \"none\" });\r\n\t\t\t}\r\n\t\t\tjQuery(\"html, body\").animate(\r\n\t\t\t\t{\r\n\t\t\t\t\tscrollTop: accordionItem.offset().top,\r\n\t\t\t\t},\r\n\t\t\t\t700\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t// Open accordion based on URL fragment\r\n\t\tjQuery(window).on(\"load\", function () {\r\n\t\t\tvar urlHash = window.location.hash.substring(1);\r\n\r\n\t\t\tif (urlHash) {\r\n\t\t\t\tvar targetAccordionItem = jQuery(\".js-accordion-item#\" + urlHash).not(\".js-accordion-item-agenda\");\r\n\t\t\t\tif (targetAccordionItem.length > 0) {\r\n\t\t\t\t\topenAccordionAndScroll(targetAccordionItem);\r\n\t\t\t\t\t// Trigger DataTable resize after opening accordion\r\n\t\t\t\t\tvar table = targetAccordionItem.find(\".dataTable\");\r\n\t\t\t\t\tif (table.length && $.fn.dataTable.isDataTable(table)) {\r\n\t\t\t\t\t\ttable.DataTable().columns.adjust().draw();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Handle anchor links that link to sections within the accordion\r\n\t\tjQuery('.article-anchor-menu a[href^=\"#\"]').on(\"click\", function (e) {\r\n\t\t\te.preventDefault();\r\n\t\t\tvar targetId = jQuery(this).attr(\"href\").substring(1);\r\n\t\t\tvar accordionSection = findAccordionSection(targetId);\r\n\r\n\t\t\tif (accordionSection) {\r\n\t\t\t\t// Open the accordion if found\r\n\t\t\t\taccordionSection.addClass(\"active\");\r\n\t\t\t\taccordionSection.find(\".js-accordion-body\").addClass(\"active\").show();\r\n\t\t\t\t// Scroll to the accordion\r\n\t\t\t\tjQuery(\"html,body\").animate(\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tscrollTop: accordionSection.offset().top,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t700\r\n\t\t\t\t);\r\n\r\n\t\t\t\t// Trigger DataTable resize after opening the accordion\r\n\t\t\t\tvar table = accordionSection.find(\".dataTable\");\r\n\t\t\t\tif (table.length && $.fn.dataTable.isDataTable(table)) {\r\n\t\t\t\t\ttable.DataTable().columns.adjust().draw();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}\r\n\r\nfunction findAccordionSection(anchorId) {\r\n\tvar accordionSection = null;\r\n\tjQuery(\".js-accordion-item\").each(function () {\r\n\t\tif (jQuery(this).find(\"#\" + anchorId).length > 0) {\r\n\t\t\taccordionSection = jQuery(this);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t});\r\n\treturn accordionSection;\r\n}\r\n\r\nexport default accordion;\r\n","/*\r\n** Polyfill for browsers that don't support object-fit\r\n** https://www.npmjs.com/package/object-fit-images\r\n**\r\n** Usage: img {font-family: $font-object-fit-cover;}\r\n*/\r\n\r\nexport function objectFitImages() {\r\n\r\n var objectFitImages = require('object-fit-images');\r\n jQuery(document).ready(function () {\r\n objectFitImages();\r\n });\r\n}\r\n\r\nexport default objectFitImages;\r\n","import hoverIntent from \"../../../../node_modules/superfish/dist/js/hoverintent\";\r\nimport Headroom from \"headroom.js\";\r\nimport superfish from \"../../../../node_modules/superfish/dist/js/superfish.min\";\r\nimport { set } from \"lodash-es\";\r\n\r\n// Navbar\r\nexport function headerMegamenuExtended() {\r\n if (jQuery(\".header__megamenu-extended\").length < 0) {\r\n return;\r\n }\r\n\r\n if (jQuery(\"header\").hasClass(\"header__megamenu-extended\")) {\r\n // Variables\r\n const $body = jQuery(\"body\");\r\n const $navbar = jQuery(\".header__megamenu-extended\");\r\n const $dropdown = jQuery(\".header__megamenu-extended .nav-item.dropdown\");\r\n const $dropdownSubmenu = jQuery(\".header__megamenu-extended .dropdown-submenu__ul\");\r\n const $navLink = jQuery(\".header__megamenu-extended .nav-link\");\r\n const $dropdownToggle = jQuery(\".header__megamenu-extended .dropdown-toggle\");\r\n const $dropdownMenu = jQuery(\".header__megamenu-extended .dropdown-menu\");\r\n const $searchbar = jQuery(\".header__megamenu-extended__search-bar\");\r\n const $searchbarToggle = jQuery(\".navbar__search-toggle\");\r\n const $navBackLink = jQuery(\".header__megamenu-extended .nav-back-link\");\r\n const showClass = \"sfHover\";\r\n const header = jQuery(\".header__megamenu-extended\");\r\n const $dropdownToggleTab = jQuery(\".header__megamenu-extended .dropdown-toggle__tab\");\r\n const $submenuDropdownToggle = jQuery(\".header__megamenu-extended .dropdown-submenu__button\");\r\n let $textOpen = $searchbarToggle.attr(\"data-textOpen\");\r\n let $textClose = $searchbarToggle.attr(\"data-textClose\");\r\n let isMenuOpen = false;\r\n let ignoreScroll = false;\r\n\r\n const bodyScrollLock = require(\"body-scroll-lock\");\r\n const { disableBodyScroll, enableBodyScroll } = bodyScrollLock;\r\n\r\n // sets the top padding to the height of the header. Not in use right now\r\n const setPaddingMain = () => {\r\n const headerHeight = header.outerHeight();\r\n document.documentElement.style.setProperty(\"--header-height-lg\", `${headerHeight}px`);\r\n header[0].style.position = \"fixed\";\r\n };\r\n\r\n const handleHoverIntent = (element) => {\r\n const listElements = document.querySelectorAll(\".nav-item\");\r\n listElements.forEach((el) => el.classList.remove(\"visible\"));\r\n element.classList.add(\"visible\");\r\n };\r\n\r\n const handleHoverOut = (element) => {\r\n element.classList.remove(\"visible\");\r\n };\r\n\r\n const onScroll = () => {\r\n\r\n if(ignoreScroll) return\r\n const isMobile = jQuery(window).width() < 991;\r\n const headerElement = document.querySelector(\".header__megamenu-extended\");\r\n const height = headerElement.offsetHeight;\r\n const newScrollHeight = window.scrollY;\r\n\r\n if (newScrollHeight > height) {\r\n headerElement.style.position = \"sticky\";\r\n headerElement.style.top = \"0px\";\r\n } else {\r\n headerElement.style.position = \"relative\";\r\n }\r\n\r\n // Update position based on scroll direction (scroll up or down)\r\n if (newScrollHeight < window.oldScrollHeight && newScrollHeight > height) {\r\n // Scrolling up\r\n headerElement.style.position = \"sticky\";\r\n headerElement.style.top = \"0px\";\r\n } else if (newScrollHeight > window.oldScrollHeight && newScrollHeight > height && !isMenuOpen) {\r\n // Scrolling down\r\n headerElement.style.position = \"sticky\";\r\n headerElement.style.top = `-${height}px`;\r\n } else if (newScrollHeight < height) {\r\n headerElement.style.position = \"sticky\";\r\n headerElement.style.top = \"0px\";\r\n }\r\n\r\n window.oldScrollHeight = newScrollHeight;\r\n };\r\n\r\n const onLoad = () => {\r\n //Reset all menus on load and resize\r\n $navbar.removeClass(\"show-mobile-menu\");\r\n $('.navbar-collapse').removeClass('show');\r\n $('.navbar-toggler-icon ').removeClass('open');\r\n $('.navbar-toggler').attr('aria-expanded', 'false');\r\n \r\n const resetDropdowns = () => {\r\n jQuery(\".header__megamenu-extended .dropdown-menu__megamenu, .header__megamenu-extended .dropdown-submenu__button\").removeClass(\"show\");\r\n jQuery(\".header__megamenu-extended .dropdown-menu__megamenu, .header__megamenu-extended .dropdown-submenu__ul\").removeClass(\"show\");\r\n jQuery(\".dropdown-submenu__ul\").slideUp();\r\n };\r\n //Hide dropdowns on load\r\n $dropdownMenu.removeClass(\"show\"); \r\n\r\n jQuery(\".header__megamenu-extended .dropdown-menu__megamenu\").removeClass('show');\r\n //resetDropdowns();\r\n // Position sticky if scrolled down page, otheerwise relative\r\n jQuery(\"main\").css(\"padding-top\", 0);\r\n const headerElement = document.querySelector(\".header__megamenu-extended\");\r\n const height = headerElement.offsetHeight;\r\n const scrollHeight = window.scrollY;\r\n if(scrollHeight > height){\r\n headerElement.style.position = 'sticky';\r\n headerElement.style.top = '0px';\r\n } else {\r\n headerElement.style.position = 'relative';\r\n }\r\n\r\n // Show submenu dropdowns for desktop view\r\n jQuery(\".header__megamenu-extended .dropdown-submenu .dropdown-menu\").show();\r\n jQuery(\"nav\").removeClass(\"show-mobile-menu\");\r\n\r\n $navBackLink.off(\"click\").on(\"click\", function () {\r\n const $this = jQuery(this);\r\n const $dropdown = $this.closest(\".dropdown\");\r\n $dropdown.find('.dropdown-toggle__tab').attr(\"aria-expanded\", \"false\");\r\n \r\n setTimeout(() => {$dropdown.find('.dropdown-toggle__tab').get(0).focus();}, 10);\r\n console.log($dropdown.find('.dropdown-toggle__tab').get(0));\r\n\r\n });\r\n\r\n $dropdownToggleTab.off('click').on(\"click\", function () {\r\n //Toggle current dropdown\r\n const $this = jQuery(this);\r\n $this.closest($dropdown).toggleClass(\"show\");\r\n $this.attr(\"aria-expanded\", $this.closest($dropdown).hasClass(\"show\"));\r\n $this.closest($dropdown).find($dropdownMenu).toggleClass(\"show\");\r\n });\r\n\r\n $submenuDropdownToggle.off('click').on(\"click\", function () {\r\n const $this = jQuery(this);\r\n $this.toggleClass(\"show\");\r\n $this.attr(\"aria-expanded\", $this.hasClass(\"show\"));\r\n $this.closest('.dropdown-submenu').find('.dropdown-submenu__ul').toggleClass(\"show\");\r\n })\r\n \r\n $dropdownToggle.off('focus').on('focus', function() {\r\n const $this = jQuery(this);\r\n $this.closest($dropdown).removeClass(\"sfHover\");\r\n })\r\n\r\n $dropdownMenu.off('focusout').on('focusout', function(event){\r\n\r\n // Only on desktop\r\n if((jQuery(window).width() > 990)){\r\n const $this = jQuery(this);\r\n const $navItem = $this.closest(\".nav-item.dropdown\");\r\n \r\n // Check if the newly focused element is outside the dropdown menu\r\n if (!$this.is(event.relatedTarget) && !$this.has(event.relatedTarget).length) {\r\n $this.removeClass(\"show\");\r\n $navItem.removeClass(\"show\");\r\n // Update the aria-expanded attributes\r\n $navItem.find(\".dropdown-toggle\").attr(\"aria-expanded\", \"false\");\r\n $navItem.find(\".dropdown-toggle__tab\").attr(\"aria-expanded\", \"false\");\r\n }\r\n }\r\n })\r\n\r\n // Mobile-specific behavior\r\n if (jQuery(window).width() < 991) {\r\n // Destroy Superfish on mobile to prevent hover issues\r\n jQuery(\".header__megamenu-extended ul.navbar-nav__primary\").superfish(\"destroy\");\r\n\r\n jQuery(\".navbar-toggler\").off(\"click\").on(\"click\", function () {\r\n $body.toggleClass(\"burger-open\").toggleClass(\"burger-closed\");\r\n jQuery(\"nav\").toggleClass(\"show-mobile-menu\");\r\n jQuery(\".navbar-toggler-icon\").toggleClass(\"open\");\r\n\r\n // Close search bar if it's open when burger menu is clicked\r\n $searchbar.slideUp();\r\n $searchbarToggle.attr(\"aria-expanded\", \"false\").attr(\"aria-label\", $textOpen);\r\n\r\n //Reset dropdowns\r\n if(!jQuery(\".navbar-toggler-icon\").hasClass(\"open\")){\r\n resetDropdowns();\r\n }\r\n });\r\n\r\n // Ensure the search toggle works properly on initial load for mobile\r\n $searchbarToggle.off(\"click\").on(\"click\", function () {\r\n ignoreScroll = true;\r\n const $this = jQuery(this);\r\n const isOpen = $this.attr(\"aria-expanded\") === \"true\";\r\n $searchbar.slideToggle();\r\n $this.attr(\"aria-expanded\", !isOpen).attr(\"aria-label\", isOpen ? $textOpen : $textClose);\r\n setTimeout(() => ignoreScroll = false, 800);\r\n });\r\n\r\n\r\n jQuery(document).off(\"click\", \".nav-back-link\").on(\"click\", \".nav-back-link\", function () {\r\n resetDropdowns();\r\n });\r\n } else {\r\n // Initialize Superfish on Desktop\r\n jQuery(\".header__megamenu-extended ul.navbar-nav__primary\").superfish({\r\n popUpSelector: \"ul, .dropdown-menu__megamenu\",\r\n speed: 200,\r\n delay: 300,\r\n disableHI: false,\r\n onInit: function() {\r\n jQuery(this).find(\"ul\").removeAttr(\"style\"); // Remove all inline styles after init\r\n },\r\n onBeforeShow: function() {\r\n jQuery(this).removeAttr(\"style\"); // Ensure inline styles are not re-added when showing\r\n },\r\n onHide: function() {\r\n jQuery(this).removeAttr(\"style\"); // Ensure inline styles are not re-added when hiding\r\n }\r\n });\r\n\r\n // Store a reference to the timeout\r\n let hoverIntentTimeout;\r\n\r\n // Function to be executed when hover intent is triggered\r\n function handleHoverIntent(element) {\r\n listElements.forEach(element => {\r\n element.classList.remove('visible')\r\n })\r\n element.classList.add(\"visible\");\r\n }\r\n\r\n // Function to be executed when hover intent is not triggered\r\n function handleHoverOut(element) {\r\n hoverIntentTimeout = setTimeout(() => {\r\n listElements.forEach(element => {\r\n element.classList.remove('visible')\r\n })\r\n //element.classList.remove(\"visible\");\r\n }, 300); // Delay removal in milliseconds\r\n }\r\n\r\n // Add event listeners to all list elements\r\n const listElements = document.querySelectorAll(\".nav-item\");\r\n listElements.forEach(element => {\r\n element.addEventListener(\"mouseenter\", () => {\r\n // Clear previous timeout (if any)\r\n clearTimeout(hoverIntentTimeout);\r\n\r\n // Set a new timeout to trigger hover intent after a delay\r\n hoverIntentTimeout = setTimeout(() => {\r\n handleHoverIntent(element);\r\n }, 300); // Delay in milliseconds\r\n });\r\n\r\n element.addEventListener(\"mouseleave\", () => {\r\n // Clear the timeout when leaving the element\r\n clearTimeout(hoverIntentTimeout);\r\n\r\n // Handle hover out\r\n handleHoverOut(element);\r\n });\r\n });\r\n \r\n // Desktop-specific behavior: Initialize aria-expanded properly\r\n if ($searchbarToggle.length) {\r\n // Ensure aria-expanded is set correctly on desktop initial load\r\n const isSearchbarVisible = $searchbar.is(\":visible\");\r\n $searchbarToggle.attr(\"aria-expanded\", isSearchbarVisible ? \"true\" : \"false\");\r\n }\r\n\r\n // Handle the click for opening/closing the search bar on desktop\r\n $searchbarToggle.off(\"click\").on(\"click\", function () {\r\n ignoreScroll = true; //prevent menu from disappearing when opening search bar\r\n const $this = jQuery(this);\r\n const isOpen = $this.attr(\"aria-expanded\") === \"true\"; // Check if it was already opened\r\n $searchbar.slideToggle(); // Toggle the visibility of the search bar\r\n $this.attr(\"aria-expanded\", !isOpen); // Update the aria-expanded state\r\n $this.attr(\"aria-label\", isOpen ? $textOpen : $textClose); // Update the aria-label\r\n setTimeout(() => ignoreScroll = false, 800); //reinstate scroll after opening search bar\r\n });\r\n }\r\n };\r\n\r\n // Trigger the onLoad function on initial load and on resize\r\n jQuery(window).on(\"load resize\", onLoad);\r\n\r\n // Bind scroll event to update header position\r\n window.addEventListener(\"scroll\", onScroll);\r\n }\r\n}\r\n\r\nexport default headerMegamenuExtended;\r\n","export function headerMegamenuTabOrderMobile() {\r\n const megamenu = document.querySelector('.header__megamenu-extended');\r\n\r\n if (!megamenu) {\r\n return;\r\n }\r\n\r\n function reorderNav() {\r\n const navbarCollapse = document.querySelector('.navbar-collapse');\r\n const primaryContainer = document.querySelector('.navbar-nav__primary-container');\r\n const secondaryContainer = document.querySelector('.navbar-nav__secondary-container');\r\n\r\n // Check if both containers exist\r\n const containersExist = primaryContainer && secondaryContainer;\r\n\r\n // Check if viewport is mobile\r\n const isMobile = window.matchMedia('(max-width: 991px)').matches;\r\n\r\n if (isMobile) {\r\n // Ensure primary is first\r\n if (containersExist && secondaryContainer.nextElementSibling == primaryContainer) {\r\n navbarCollapse.insertBefore(primaryContainer, secondaryContainer);\r\n }\r\n } else {\r\n // Restore original order on desktop\r\n if (containersExist && primaryContainer.nextElementSibling == secondaryContainer) {\r\n navbarCollapse.insertBefore(secondaryContainer, primaryContainer);\r\n }\r\n }\r\n }\r\n\r\n // Run on page load and on window resize\r\n window.addEventListener('DOMContentLoaded', reorderNav);\r\n window.addEventListener('resize', reorderNav);\r\n\r\n}\r\n\r\nexport default headerMegamenuTabOrderMobile;","export function headerMegamenuFocusTrap() {\r\n if(document.querySelector('.header__megamenu-extended')) {\r\n const navbarToggler = document.querySelector('.navbar-toggler');\r\n const navbarCollapse = document.querySelector('.navbar-collapse');\r\n const dropdownMegamenu = document.querySelectorAll('.dropdown-menu__megamenu') ? document.querySelectorAll('.dropdown-menu__megamenu') : false;\r\n\r\n if(navbarCollapse){\r\n navbarCollapse.addEventListener('focusout', (e) => {\r\n if(!navbarCollapse.contains(e.relatedTarget)){\r\n navbarToggler.focus();\r\n }\r\n }) \r\n }\r\n if(dropdownMegamenu){\r\n dropdownMegamenu.forEach(element => {\r\n element.addEventListener('focusout', (e) => {\r\n if(!element.contains(e.relatedTarget)){\r\n element.querySelector('.nav-back-link').focus();\r\n }\r\n }) \r\n });\r\n }\r\n }\r\n}\r\n\r\nexport default headerMegamenuFocusTrap;","/*\r\n** Usage: Login if page are locked\r\n*/\r\n\r\nexport function Login() {\r\n\r\n if (jQuery('.page-login').length == 0) {\r\n\t\treturn;\r\n }\r\n\r\n}\r\n\r\nexport default Login;\r\n","import jquery from 'jquery';\r\nimport hoverIntent from '../../../../node_modules/superfish/dist/js/hoverintent'\r\nimport superfish from '../../../../node_modules/superfish/dist/js/superfish.min'\r\nimport Headroom from 'headroom.js';\r\n\r\n// Navbar\r\nexport function headerIntranet() {\r\n\tvar navigationHandler = {\r\n\t\tnavbarDesktop: function () {\r\n\t\t\treturn jQuery('.navbar-collapse .navbar-nav')[0]\r\n\t\t},\r\n\t\tnavbarDesktopItems: function () {\r\n\t\t\treturn jQuery('.navbar-nav__desktop .nav-item:not(.nav-back-link)')\r\n\t\t},\r\n\t\tnavbarMobileMenu: function () {\r\n\t\t\treturn jQuery('.navbar-collapse .navbar-nav')\r\n\t\t},\r\n\t\tsearchBar: function () {\r\n\t\t\treturn jQuery('.nav-item__search-input')\r\n\t\t},\r\n\t\tnavbarProfile: function () {\r\n\t\t\treturn jQuery('.profile-info')[0]\r\n\t\t},\r\n\t\tensureMobileMenu: function () {\r\n\t\t\tvar navbarDesktopItems = this.navbarDesktopItems();\r\n\t\t\tvar navbarMobileMenu = this.navbarMobileMenu();\r\n\t\t\tvar searchBar = this.searchBar();\r\n\t\t\tnavbarMobileMenu.append(navbarDesktopItems);\r\n\t\t\tnavbarMobileMenu.append(searchBar);\r\n\r\n\t\t\t//remove desktop UL for accessability\r\n\t\t\tjQuery('.navbar-nav__desktop').remove();\r\n\t\t},\r\n\t\tensureDesktopMenu: function () {\r\n\t\t\t//add desktop UL for accessability\r\n\t\t\tif (jQuery('.navbar-collapse--desktop').find('.navbar-nav__desktop').length === 0) {\r\n\t\t\t\tjQuery('.navbar-collapse--desktop').append('');\r\n\t\t\t}\r\n\r\n\t\t\tif (!this.navbarDesktop().children[this.navbarDesktop().children.length - 1].classList.contains('nav-item-profile')) {\r\n\t\t\t\tthis.navbarDesktop().append(this.navbarProfile());\r\n\t\t\t}\r\n\t\t},\r\n\t\tcheckItemsInBurger: function () {\r\n\t\t\t// eslint-disable-next-line no-inner-declarations\r\n\t\t\tif (jQuery('.navbar-nav__desktop li.nav-item').length >= 1) {\r\n\t\t\t\tjQuery('.header__intranet').addClass('has-burger-desktop')\r\n\t\t\t} else {\r\n\t\t\t\tjQuery('.header__intranet').removeClass('has-burger-desktop')\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\tcheckForSpace: function (space, index, navItems, navItemBurgerList, burgerNavItems, burgerNavLastItem, navbarBrandWidth) {\r\n\t\t\t// eslint-disable-next-line no-inner-declarations\r\n\t\t\tif (space <= 0) {\r\n\t\t\t\tnavItems = jQuery('.navbar-nav li.nav-item');\r\n\t\t\t\tnavItemBurgerList.append(navItems[navItems.length - 1]);\r\n\t\t\t\tspace = jQuery('.header__intranet').outerWidth(true) - jQuery('.navbar-nav').outerWidth(true) - jQuery('.navbar-brand').outerWidth(true);\r\n\r\n\t\t\t\tthis.checkItemsInBurger();\r\n\r\n\t\t\t} else if (space > burgerNavLastItem.data(\"nav-item-width\")) {\r\n\t\t\t\tburgerNavItems = jQuery('.navbar-nav__desktop li.nav-item');\r\n\t\t\t\tjQuery('.navbar-nav li.nav-item:last').after(burgerNavItems[burgerNavItems.length - 1]);\r\n\t\t\t\tspace = jQuery('.header__intranet').outerWidth(true) - jQuery('.navbar-nav').outerWidth(true) - navbarBrandWidth;\r\n\r\n\t\t\t\tthis.checkItemsInBurger();\r\n\t\t\t} else {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (index > 5) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tindex++\r\n\t\t\tthis.checkForSpace(space, index, navItems, navItemBurgerList, burgerNavItems, burgerNavLastItem, navbarBrandWidth);\r\n\t\t}\r\n\t}\r\n\r\n\tif (jQuery(\".header__intranet\").length < 0) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tif (jQuery(\"header\").hasClass(\"header__intranet\")) {\r\n\t\t// Variables\r\n\t\tconst $dropdown = jQuery(\".header__intranet .nav-item.dropdown\");\r\n\t\tconst $navLink = jQuery(\".header__intranet .nav-link\");\r\n\t\tconst $dropdownToggle = jQuery(\".header__intranet .dropdown-toggle\");\r\n\t\tconst $dropdownMenu = jQuery(\".header__intranet .dropdown-menu\");\r\n\t\tconst showClass = \"sfHover\";\r\n\t\tconst header = jQuery(\".header__intranet\");\r\n\r\n \t\t// sets the top padding to the height of the header.\r\n\t\tconst setPaddingMain = () => {\r\n\t\t\tlet headerHeight = header.outerHeight();\r\n\t\t\tjQuery(\"main\").css(\"padding-top\", headerHeight);\r\n\r\n document.documentElement.style.setProperty('--header-height-lg', headerHeight + 'px');\r\n\t\t}\r\n\r\n setPaddingMain()\r\n\r\n jQuery(window).on(\"resize\", function () {\r\n var $window = jQuery(this);\r\n setPaddingMain()\r\n\r\n if ($window.width() >= 991) {\r\n setPaddingMain()\r\n }\r\n });\r\n\r\n\t\t// Profile menu\r\n\t\tjQuery(document).off('click', '.dropdown-toggle__profile');\r\n\t\tjQuery(document).on('click', '.dropdown-toggle__profile', function () {\r\n\t\t\tjQuery(this).attr(\"aria-expanded\", \"false\");\r\n\t\t\tjQuery(this).siblings('.dropdown-menu').toggleClass('show');\r\n\r\n\t\t\tif (jQuery(this).siblings('.dropdown-menu').hasClass(\"show\")) {\r\n\t\t\t\tjQuery(this).attr(\"aria-expanded\", \"true\");\r\n\r\n\t\t\t\tjQuery('body').on('click', function (e) {\r\n\t\t\t\t\tif (!jQuery('.dropdown-toggle__profile').is(e.target) && jQuery('.dropdown-toggle__profile').has(e.target).length === 0 && jQuery('.show').has(e.target).length === 0) {\r\n\t\t\t\t\t\tjQuery('.dropdown-toggle__profile').siblings('.dropdown-menu').removeClass(\"show\");\r\n\t\t\t\t\t\tjQuery('.dropdown-toggle__profile').attr(\"aria-expanded\", \"false\");\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Hide Profile menu on scroll\r\n\t\tjQuery(window).scroll(function () {\r\n\t\t\tif (jQuery('.navbar-profile .dropdown-menu').hasClass('show')) {\r\n\t\t\t\tjQuery('.navbar-profile .dropdown-menu').removeClass(\"show\");\r\n\t\t\t\tjQuery('.navbar-profile .dropdown-toggle__profile').attr(\"aria-expanded\", \"false\");\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Start - with burger desktop\r\n\t\tjQuery(document).on('click', '.navbar-toggler--desktop', function (e) {\r\n\t\t\tvar $sidemenu = jQuery(\".header__intranet .side-menu\");\r\n\t\t\tvar $sidemenuToggle = jQuery(\".header__intranet .side-menu .side-menu__toggle-mobile\");\r\n\r\n\t\t\t// If sidemenu is open\r\n\t\t\tif ($sidemenu.hasClass('show')) {\r\n\t\t\t\t$sidemenu.removeClass('show');\r\n\t\t\t\t$sidemenuToggle.removeClass('show');\r\n\t\t\t\tjQuery(\"body\").removeClass(\"position-fixed\");\r\n\r\n\t\t\t\tif ($sidemenuToggle.hasClass('show')) {\r\n\t\t\t\t\t$sidemenuToggle.attr(\"aria-expanded\", \"true\");\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$sidemenuToggle.attr(\"aria-expanded\", \"false\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tjQuery('nav').toggleClass(\"show-burger-desktop\");\r\n\t\t\tjQuery('.navbar-toggler-icon').toggleClass('open');\r\n\t\t\tjQuery('.navbar-collapse--desktop').toggleClass('show');\r\n\t\t\tjQuery('body').toggleClass('burger-open');\r\n\t\t\tjQuery(\".header__megamenu-extended__search-bar\").slideUp();\r\n\t\t\te.preventDefault();\r\n\r\n\t\t\tif (jQuery('.navbar-toggler-icon').hasClass('open')) {\r\n\t\t\t\tjQuery('.navbar__search-toggle').hide();\r\n\t\t\t\t// disableBodyScroll(navbar);\r\n\t\t\t} else {\r\n\t\t\t\tjQuery('.navbar__search-toggle').show();\r\n\t\t\t\t// enableBodyScroll(navbar);\r\n\t\t\t}\r\n\r\n\t\t\t// Return dropdown menu to original state\r\n\t\t\tjQuery('.header__intranet .navbar-collapse--desktop .dropdown-menu__megamenu').removeClass('show');\r\n\t\t\tjQuery('.header__intranet .navbar-collapse--desktop .dropdown-submenu').removeClass('show');\r\n\t\t\tjQuery('.header__intranet .navbar-collapse--desktop .dropdown-submenu').children('.nav-link').removeClass('show');\r\n\t\t\tjQuery('.header__intranet .navbar-collapse--desktop .dropdown-submenu').children('.dropdown-menu').slideUp('show');\r\n\t\t});\r\n\r\n\t\t// Return to first level menu\r\n\t\tjQuery(document).on('click', '.nav-back-link', function () {\r\n\r\n\t\t\tsetTimeout(function () {\r\n\t\t\t\tsetTimeout(function () {\r\n\t\t\t\t\tcloseAccordions()\r\n\t\t\t\t}, 200)\r\n\t\t\t\tgoBack()\r\n\t\t\t}, 200)\r\n\r\n\t\t\t// Go back function\r\n\t\t\tfunction goBack() {\r\n\t\t\t\tjQuery('.nav-back-link').closest('.dropdown-menu__megamenu').removeClass('show');\r\n\t\t\t}\r\n\r\n\t\t\t// Mobile 2nd level dropdowns\r\n\t\t\tjQuery(document).off('click', '.header__intranet .navbar-collapse--desktop .dropdown-submenu .nav-link');\r\n\t\t\tjQuery(document).on('click', '.header__intranet .navbar-collapse--desktop .dropdown-submenu .nav-link', function () {\r\n\t\t\t\tjQuery(this).toggleClass('show');\r\n\t\t\t\tjQuery(this).parents('.header__intranet .navbar-collapse--desktop .dropdown-submenu').toggleClass('show');\r\n\t\t\t\tjQuery(this).siblings('.header__intranet .navbar-collapse--desktop .dropdown-menu').slideToggle('show');\r\n\t\t\t});\r\n\r\n\t\t\t// Close all accordions when returing to 1st level menu - to keep height of menu\r\n\t\t\tfunction closeAccordions() {\r\n\t\t\t\tjQuery('.header__intranet .dropdown-submenu').removeClass('show');\r\n\t\t\t\tjQuery('.header__intranet .dropdown-submenu').children('.nav-link').removeClass('show');\r\n\t\t\t\tjQuery('.header__intranet .dropdown-submenu').children('.dropdown-menu').slideUp('show');\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t//Mobile Menu toggler\r\n\t\tjQuery(document).on('click', '.navbar-toggler', function (e) {\r\n\t\t\tvar $sidemenu = jQuery(\".header__intranet .side-menu\");\r\n\t\t\tvar $sidemenuToggle = jQuery(\".header__intranet .side-menu .side-menu__toggle-mobile\");\r\n\r\n\t\t\t// If sidemenu is open\r\n\t\t\tif ($sidemenu.hasClass('show')) {\r\n\t\t\t\t$sidemenu.removeClass('show');\r\n\t\t\t\t$sidemenuToggle.removeClass('show');\r\n\t\t\t\tjQuery(\"body\").removeClass(\"position-fixed\");\r\n\r\n\t\t\t\tif ($sidemenuToggle.hasClass('show')) {\r\n\t\t\t\t\t$sidemenuToggle.attr(\"aria-expanded\", \"true\");\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$sidemenuToggle.attr(\"aria-expanded\", \"false\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tjQuery('nav').toggleClass(\"show-mobile-menu\");\r\n\t\t\tjQuery('.navbar-toggler-icon').toggleClass('open');\r\n\t\t\tjQuery('body').toggleClass('burger-open');\r\n\t\t\tjQuery(\".header__megamenu-extended__search-bar\").slideUp();\r\n\t\t\te.preventDefault();\r\n\r\n\t\t\tif (jQuery('.navbar-toggler-icon').hasClass('open')) {\r\n\t\t\t\tjQuery('.navbar__search-toggle').hide();\r\n\t\t\t\t// disableBodyScroll(navbar);\r\n\t\t\t} else {\r\n\t\t\t\tjQuery('.navbar__search-toggle').show();\r\n\t\t\t\t// enableBodyScroll(navbar);\r\n\t\t\t}\r\n\r\n\t\t\t// Return dropdown menu to original state\r\n\t\t\tjQuery('.header__intranet .navbar-collapse .dropdown-menu__megamenu').removeClass('show');\r\n\t\t\tjQuery('.header__intranet .navbar-collapse .dropdown-submenu').removeClass('show');\r\n\t\t\tjQuery('.header__intranet .navbar-collapse .dropdown-submenu').children('.nav-link').removeClass('show');\r\n\t\t\tjQuery('.header__intranet .navbar-collapse .dropdown-submenu').children('.dropdown-menu').slideUp('show');\r\n\t\t});\r\n\r\n\t\tfunction handleLoadResize(windowObj){\r\n\t\t\t// Desktop menu\r\n\t\t\tif (windowObj.matchMedia(\"(min-width: 991px)\").matches) {\r\n\r\n\t\t\t\tnavigationHandler.ensureDesktopMenu();\r\n\t\t\t\tvar headerWidth = jQuery('.header__intranet').outerWidth(true);\r\n\t\t\t\tvar navbarWidth = jQuery('.navbar-nav').outerWidth(true);\r\n\t\t\t\tvar navbarBrandWidth = jQuery('.navbar-brand').outerWidth(true);\r\n\t\t\t\tvar emptyspace = headerWidth - navbarWidth - navbarBrandWidth;\r\n\r\n\t\t\t\tvar navItems = jQuery('.navbar-nav li.nav-item');\r\n\t\t\t\tvar navItemBurgerList = jQuery('.navbar-nav__desktop')\r\n\t\t\t\tvar burgerNavItems = jQuery('.navbar-collapse--desktop li.nav-item');\r\n\t\t\t\tvar burgerNavLastItem = jQuery('.navbar-collapse--desktop li.nav-item:last');\r\n\t\t\t\tvar index = 0;\r\n\r\n\t\t\t\tjQuery(navItems).each(function (i, item) {\r\n\t\t\t\t\tvar itemWidth = parseInt(jQuery(this).width());\r\n\t\t\t\t\tjQuery(item).attr('data-nav-item-width', itemWidth);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tjQuery(\".dropdown-toggle__mobile\").click(function () {\r\n\t\t\t\t\tjQuery(this).siblings('.nav-link.dropdown-toggle').removeAttr('data-toggle', 'dropdown');\r\n\t\t\t\t\tjQuery(this).parent().siblings('.dropdown-menu__megamenu').addClass('show');\r\n\t\t\t\t\tjQuery('.navbar__megamenu-extended.show-mobile-menu').scrollTop(0);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tnavigationHandler.checkForSpace(emptyspace, index, navItems, navItemBurgerList, burgerNavItems, burgerNavLastItem, navbarBrandWidth);\r\n\r\n\t\t\t\t// End - with burger desktop\r\n\r\n\t\t\t\t// Sicky menu - Headroom\r\n\t\t\t\tvar headerHeadroom = document.querySelector(\".header__intranet\");\r\n\r\n\t\t\t\tvar options = {\r\n\t\t\t\t\t// vertical offset in px before element is first unpinned\r\n\t\t\t\t\toffset: 100,\r\n\t\t\t\t\t// callback when pinned, `this` is headroom object\r\n\t\t\t\t\tonPin: function () {\r\n\t\t\t\t\t\tvar currentHeaderHeight = jQuery(header).outerHeight();\r\n\t\t\t\t\t\tjQuery('progress:not(.progressbar__value)').css('margin-top', currentHeaderHeight);\r\n\t\t\t\t\t},\r\n\t\t\t\t\t// callback when unpinned, `this` is headroom object\r\n\t\t\t\t\tonUnpin: function () {\r\n\t\t\t\t\t\tjQuery('progress:not(.progressbar__value)').css('margin-top', '0');\r\n\t\t\t\t\t\tjQuery('.nav-item.dropdown').removeClass('sfHover');\r\n\t\t\t\t\t},\r\n\t\t\t\t};\r\n\r\n\t\t\t\t// construct an instance of Headroom, passing the element\r\n\t\t\t\tvar headroom = new Headroom(headerHeadroom, options);\r\n\t\t\t\t// initialise\r\n\t\t\t\theadroom.init();\r\n\r\n\t\t\t\t// Hover aim - SuperFish\r\n\t\t\t\tjQuery('.header__intranet ul.navbar-nav__primary').superfish({\r\n\t\t\t\t\tpopUpSelector: 'ul, .dropdown-menu__megamenu',\r\n\t\t\t\t\t// delay: 500, // mouseout delay, ms\r\n\t\t\t\t\tspeed: 200, // ms, cref jquery animate()\r\n\t\t\t\t\t//disableHI: true, // disabled because it only works properly if the megamenu is a ul\r\n\t\t\t\t});\r\n\r\n\t\t\t\tjQuery('.header__intranet .dropdown-submenu .dropdown-menu').show();\r\n\t\t\t\tjQuery('nav').removeClass(\"show-mobile-menu\");\r\n\r\n\t\t\t\t// Remove focus on all menu items\r\n\t\t\t\t$navLink.focus(\r\n\t\t\t\t\tfunction () {\r\n\t\t\t\t\t\t$navLink.closest($dropdown).removeClass(showClass);\r\n\t\t\t\t\t\t$navLink.find($dropdownToggle).attr(\"aria-expanded\", \"false\");\r\n\t\t\t\t\t\t$navLink.closest($dropdown).find($dropdownMenu).removeClass(showClass);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\r\n\t\t\t\t// Focus on menu items - for web accessibility\r\n\t\t\t\t$dropdownToggle.focus(\r\n\t\t\t\t\tfunction () {\r\n\t\t\t\t\t\tconst $this = jQuery(this);\r\n\t\t\t\t\t\t$this.closest($dropdown).addClass(showClass);\r\n\t\t\t\t\t\t$this.attr(\"aria-expanded\", \"true\");\r\n\t\t\t\t\t\t$this.closest($dropdown).find($dropdownMenu).addClass(showClass);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\t// Mobile menu\r\n\t\t\tif (windowObj.matchMedia(\"(max-width: 991px)\").matches) {\r\n\t\t\t\tnavigationHandler.ensureMobileMenu();\r\n\r\n\t\t\t\t// Mobile 2nd level dropdowns\r\n\t\t\t\tjQuery(document).off('click', '.header__intranet .navbar-collapse .dropdown-submenu .nav-link');\r\n\t\t\t\tjQuery(document).on('click', '.header__intranet .navbar-collapse .dropdown-submenu .nav-link', function () {\r\n\t\t\t\t\tjQuery(this).toggleClass('show');\r\n\t\t\t\t\tjQuery(this).parents('.header__intranet .navbar-collapse .dropdown-submenu').toggleClass('show');\r\n\t\t\t\t\tjQuery(this).siblings('.header__intranet .navbar-collapse .dropdown-menu').slideToggle('show');\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// Return to first level menu\r\n\t\t\t\tjQuery(document).on('click', '.nav-back-link', function () {\r\n\r\n\t\t\t\t\tsetTimeout(function () {\r\n\t\t\t\t\t\tsetTimeout(function () {\r\n\t\t\t\t\t\t\tcloseAccordions()\r\n\t\t\t\t\t\t}, 200)\r\n\t\t\t\t\t\tgoBack()\r\n\t\t\t\t\t}, 200)\r\n\r\n\t\t\t\t\t// Go back function\r\n\t\t\t\t\tfunction goBack() {\r\n\t\t\t\t\t\tjQuery('.nav-back-link').closest('.dropdown-menu__megamenu').removeClass('show');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Close all accordions when returing to 1st level menu - to keep height of menu\r\n\t\t\t\t\tfunction closeAccordions() {\r\n\t\t\t\t\t\tjQuery('.header__intranet .dropdown-submenu').removeClass('show');\r\n\t\t\t\t\t\tjQuery('.header__intranet .dropdown-submenu').children('.nav-link').removeClass('show');\r\n\t\t\t\t\t\tjQuery('.header__intranet .dropdown-submenu').children('.dropdown-menu').slideUp('show');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// Disable bootstrap dropdown functionality\r\n\t\t\t\tjQuery(\".dropdown-toggle__mobile\").click(function () {\r\n\t\t\t\t\tjQuery(this).siblings('.nav-link.dropdown-toggle').removeAttr('data-toggle', 'dropdown');\r\n\t\t\t\t\tjQuery(this).parent().siblings('.dropdown-menu__megamenu').addClass('show');\r\n\t\t\t\t\tjQuery('.navbar__megamenu-extended.show-mobile-menu').scrollTop(0);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t// setTimeout(function () {\r\n\t\t\t// \tvar headerHeight = jQuery('header').outerHeight();\r\n\t\t\t// \tjQuery('main').css(\"padding-top\", headerHeight);\r\n\t\t\t// }, 200)\r\n\t\t}\r\n\r\n\t\tjQuery(window).on(\"load resize\", function () {\r\n\t\t\thandleLoadResize(this)\r\n\t\t});\r\n\r\n\t\t// Set up MutationObserver to track changes in .profile-name text content\r\n\t\tconst profileNameElement = jQuery('.profile-name')[0]; // Ensure it selects the correct element\r\n\r\n\t\tif (profileNameElement) {\r\n\t\t\tconst observer = new MutationObserver(function(mutations) {\r\n\t\t\tmutations.forEach(function(mutation) {\r\n\t\t\t\tif (mutation.type === 'childList') {\r\n\t\t\t\t// Trigger the same actions when the content of the

          changes\r\n\r\n\t\t\t\thandleLoadResize(window)\r\n\t\t\t\t// Here you can trigger the same code as the load/resize event\r\n\t\t\t\t// Example: Triggering the menu update or other actions\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t});\r\n\r\n\t\t\t// Observer configuration: Watch for child changes in the profile-name element\r\n\t\t\tconst config = { childList: true, subtree: true };\r\n\t\t\tobserver.observe(profileNameElement, config);\r\n\t\t}\r\n\r\n\r\n\t}\r\n\r\n}\r\n\r\nexport default headerIntranet;\r\n","/**\r\n * Hero Multi Box\r\n *\r\n */\r\n\r\nexport function heroMultiBox() {\r\n if (jQuery('.hero__multi-boxes').length < 1) {\r\n return;\r\n }\r\n\r\n jQuery(function() {\r\n jQuery(window).on('load', function() {\r\n if (jQuery(window).width() > 768) {\r\n masonryGrid();\r\n }\r\n });\r\n\r\n // if (jQuery(window).width() > 768) {\r\n // masonryGrid();\r\n // }\r\n\r\n jQuery(window).on(\"resize\", function () {\r\n if (jQuery(window).width() > 768) {\r\n masonryGrid();\r\n }\r\n });\r\n });\r\n\r\n function masonryGrid() {\r\n jQuery('.hero__multi-boxes__grid.hero__multi-boxes__grid--vertical.hero__multi-boxes__grid__two').masonry({\r\n itemSelector: '.hero__multi-boxes__box',\r\n columnWidth: '.grid-column-one',\r\n percentPosition: true,\r\n originTop: false\r\n });\r\n\r\n jQuery('.hero__multi-boxes__grid.hero__multi-boxes__grid--horizontal.hero__multi-boxes__grid__two').masonry({\r\n itemSelector: '.hero__multi-boxes__box',\r\n columnWidth: '.grid-column-two',\r\n percentPosition: true,\r\n originTop: false\r\n });\r\n\r\n jQuery('.hero__multi-boxes__grid.hero__multi-boxes__grid--vertical').masonry({\r\n itemSelector: '.hero__multi-boxes__box',\r\n columnWidth: '.grid-column-two',\r\n percentPosition: true,\r\n originTop: false\r\n });\r\n\r\n jQuery('.hero__multi-boxes__grid.hero__multi-boxes__grid--horizontal').masonry({\r\n itemSelector: '.hero__multi-boxes__box',\r\n columnWidth: '.grid-column-two',\r\n horizontalOrder: true,\r\n percentPosition: true,\r\n });\r\n }\r\n}\r\n\r\nexport default heroMultiBox;\r\n","export function footers() {\r\n\r\n\tif (jQuery(\".footer\").length < 0) {\r\n\t\treturn;\r\n }\r\n\r\n jQuery(window).on(\"load resize\", function () {\r\n var $dropdownToggle = jQuery(\".footer__content .dropdown-toggle\");\r\n var $dropdownMenu = jQuery('.footer__content .dropdown-menu');\r\n\r\n // Mobile menu (Tablet down)\r\n if (this.matchMedia(\"(max-width: 767px)\").matches) {\r\n $dropdownToggle.removeAttr(\"disabled\");\r\n $dropdownToggle.removeAttr(\"role\");\r\n $dropdownToggle.removeClass(\"show\");\r\n $dropdownToggle.removeAttr(\"aria-level\");\r\n $dropdownToggle.attr(\"aria-expanded\", \"false\");\r\n\r\n // Mobile 2nd level dropdowns\r\n jQuery(document).off('click', '.footer__content .dropdown-toggle');\r\n jQuery(document).on('click', '.footer__content .dropdown-toggle', function () {\r\n jQuery(this).attr(\"aria-expanded\", \"true\");\r\n jQuery(this).toggleClass('show');\r\n jQuery(this).parents('.footer__content').toggleClass('show');\r\n jQuery(this).siblings('.dropdown-menu').slideToggle('show');\r\n });\r\n\r\n // Mobile: if submenu menu item is open and it is clicked --> close it\r\n jQuery(document).off('click', '.footer__content .show');\r\n jQuery(document).on('click', '.footer__content .show', function () {\r\n jQuery(this).attr(\"aria-expanded\", \"false\");\r\n jQuery(this).removeClass('show');\r\n jQuery(this).children('.dropdown-toggle').removeClass('show');\r\n jQuery(this).children('.dropdown-menu').removeClass('show');\r\n });\r\n } else {\r\n $dropdownToggle.attr(\"disabled\");\r\n\r\n // Mobile 2nd level dropdowns\r\n jQuery(document).off('click', '.footer__content .dropdown-toggle');\r\n\r\n // Mobile: if submenu menu item is open and it is clicked --> close it\r\n jQuery(document).off('click', '.footer__content .show');\r\n }\r\n\r\n if (this.matchMedia(\"(min-width: 768px)\").matches) {\r\n $dropdownToggle.attr(\"disabled\", \"disabled\");\r\n $dropdownToggle.attr(\"aria-level\", \"2\");\r\n $dropdownToggle.attr(\"role\", \"heading\");\r\n $dropdownToggle.removeAttr(\"aria-expanded\");\r\n $dropdownMenu.css(\"display\", \"\");\r\n\r\n if (jQuery('.footer__content').hasClass('.show')) {\r\n $dropdownToggle.removeClass('show');\r\n $dropdownMenu.removeClass('show');\r\n }\r\n }\r\n });\r\n\r\n}\r\n\r\nexport default footers;\r\n","import cssVars from \"css-vars-ponyfill\";\r\n\r\nexport function watermark(selector) {\r\n // Check if the provided selector has any matching elements\r\n if (jQuery(selector).length === 0) {\r\n return;\r\n }\r\n\r\n // Select all watermark images within the specified selector\r\n const watermarks = jQuery(`${selector} .watermark img`);\r\n\r\n // Function to set the appropriate watermark based on the viewport size\r\n function updateWatermark(item) {\r\n const watermarkmobile = item.getAttribute(\"data-watermarkmobile\");\r\n const watermarkdesktop = item.getAttribute(\"data-watermarkdesktop\");\r\n\r\n // Only proceed if the mobile watermark exists\r\n if (watermarkmobile) {\r\n // Determine the current viewport size\r\n const isMobile = window.matchMedia(\"(max-width: 991px)\").matches;\r\n\r\n // Set the watermark based on the viewport size\r\n if (isMobile && watermarkmobile) {\r\n item.setAttribute(\"src\", watermarkmobile);\r\n item.setAttribute(\"data-src\", watermarkmobile);\r\n } else if (watermarkdesktop) {\r\n item.setAttribute(\"src\", watermarkdesktop);\r\n item.setAttribute(\"data-src\", watermarkdesktop);\r\n }\r\n }\r\n }\r\n\r\n // Update watermarks on load and resize events\r\n jQuery(window).on(\"load resize\", function () {\r\n watermarks.each(function (i, item) {\r\n updateWatermark(item);\r\n });\r\n });\r\n\r\n // Initial call to set watermarks correctly on page load\r\n watermarks.each(function (i, item) {\r\n updateWatermark(item);\r\n });\r\n}\r\n\r\nexport default watermark;\r\n\r\n// export function footer__watermark() {\r\n\r\n// \tif (jQuery(\".footer\").length < 0) {\r\n// \t\treturn;\r\n// }\r\n\r\n// const watermark = jQuery(\".footer .watermark img\");\r\n\r\n// jQuery(watermark).each(function (i, item) {\r\n// var watermarkmobile = item.getAttribute(\"data-watermarkmobile\");\r\n// var watermarkdesktop = item.getAttribute(\"data-watermarkdesktop\");\r\n\r\n// // If has watermark mobile\r\n// if(item.hasAttribute(\"data-watermarkmobile\")) {\r\n// jQuery(window).on(\"load resize\", function () {\r\n\r\n// if ((typeof watermarkmobile !== 'undefined' && watermarkmobile !== false) && (typeof watermarkmobile !== 'undefined' && watermarkmobile !== false) || (typeof watermarkmobile !== 'undefined' && watermarkmobile !== false)) {\r\n// // Mobile (Tablet down)\r\n// if (window.matchMedia(\"(max-width: 991px)\").matches) {\r\n// function setMobileWatermark() {\r\n// item.setAttribute(\"data-src\", watermarkmobile);\r\n// item.setAttribute(\"src\", watermarkmobile);\r\n// }\r\n// setMobileWatermark();\r\n// }\r\n\r\n// // Desktop (Tablet up)\r\n// if (window.matchMedia(\"(min-width: 991px)\").matches) {\r\n// function setDesktopWatermark() {\r\n// item.setAttribute(\"data-src\", watermarkdesktop);\r\n// item.setAttribute(\"src\", watermarkdesktop);\r\n// }\r\n// setDesktopWatermark();\r\n// }\r\n// } else {\r\n// return;\r\n// }\r\n\r\n// });\r\n\r\n// } else {\r\n// return;\r\n// }\r\n\r\n// });\r\n\r\n// }\r\n\r\n// export default footer__watermark;\r\n","/*\r\n** Smooth scroll\r\n*/\r\n\r\nexport function smoothScroll() {\r\n\tjQuery(document).on(\"click\", \"a[href^='#']:not(a[href^='#!']):not(a[href^='#tab'])\", function (e) {\r\n e.preventDefault();\r\n\t\tvar position = jQuery(jQuery(this).attr(\"href\")).offset().top - 50;\r\n\t\tjQuery(\"body, html\").animate({\r\n scrollTop: position\r\n\t\t}, 800);\r\n window.location.hash = jQuery(this).attr(\"href\");\r\n // console.log(window.location)\r\n var id = jQuery(this).attr(\"href\");\r\n if (jQuery(id).hasClass(\"js-accordion-item\")) {\r\n jQuery(id).addClass('active')\r\n jQuery('.js-accordion-item.active').find('> .js-accordion-body').show();\r\n }\r\n\t});\r\n\r\n jQuery(window).on(\"load\", function () {\r\n var urlHash = window.location.hash.substr(1);\r\n if(/^[a-zA-Z0-9- ]*$/.test(urlHash) == true) {\r\n if (urlHash != \"\" && urlHash != undefined && jQuery('#' + urlHash).length > 0) {\r\n jQuery('html,body').animate({\r\n scrollTop: jQuery('#' + urlHash).offset().top - 50\r\n }, 700);\r\n }\r\n }\r\n });\r\n}\r\n\r\nexport default smoothScroll;\r\n","/*\r\n** Block media download elements\r\n** Optional data-attribute\r\n*/\r\n\r\nexport function blockMediaDownload() {\r\n\r\n if (jQuery('body[data-block-media-download]').length) {\r\n jQuery('img').each(function() {\r\n // Check if the image is NOT inside a div with the class 'image-gallery'\r\n if (!jQuery(this).closest('.image-gallery').length) {\r\n \r\n // Add the class to block media download\r\n jQuery(this).addClass(\"pointer-events-none\");\r\n }\r\n });\r\n } else {\r\n return;\r\n }\r\n\r\n}\r\n\r\nexport default blockMediaDownload;\r\n","/**\r\n * Subscription modal\r\n */\r\n\r\nexport function subscriptionModal() {\r\n\tif (jQuery(\"#subscribForm\").length == 0) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tjQuery('#subscribForm').validator();\r\n\r\n\t// - Prevent pop-up if form is invalid\r\n\tjQuery(\".btn__modal\").on(\"click\", function (e) {\r\n\t\te.preventDefault();\r\n\t\tjQuery('#subscriptionModal').modal(\"show\");\r\n\t});\r\n\r\n\tjQuery(document).on('input', '#signupEmail', function () {\r\n\t\tvar email = jQuery('#signupEmail').val();\r\n\t\tjQuery('.btn__submit').prop('disabled', true);\r\n\t\tif (isValidEmail(email)) {\r\n\t\t\t//enable the submit button\r\n\t\t\tjQuery('.btn__submit').prop('disabled', false);\r\n\t\t} else {\r\n\t\t\t//disable the submit button\r\n\t\t\tjQuery('.btn__submit').prop('disabled', true);\r\n\t\t}\r\n\t}),\r\n\t\t// - Change modal view when send btn is clicked\r\n\t\tjQuery(document).on(\"click\", \"#submitSubscription\", function (e) {\r\n\r\n\t\t\te.preventDefault()\r\n\t\t\tvar form = jQuery(\"#subscribForm\");\r\n\t\t\tvar topics = jQuery(\"#subscribForm\")[0].querySelectorAll('input[name=\"topic\"]:checked');\r\n\t\t\tvar areaKey = jQuery(\"#subscribForm\")[0].querySelector('input[name=\"area\"]:checked');\r\n\r\n\t\t\t//get the titles of the checked topics\r\n\t\t\tvar topicsTitles = topics != null ? Array.prototype.map.call(topics, function (checkbox) {\r\n\t\t\t\treturn checkbox.getAttribute(\"data-title\");\r\n\t\t\t}) : [];\r\n\t\t\t//get the titles of the checked areas\r\n\t\t\tvar areasTitles = areaKey != null ? areaKey.getAttribute(\"data-title\") : [];\r\n\r\n\t\t\tvar onestring = [];\r\n\t\t\tif (topicsTitles.length > 0) {\r\n\t\t\t\t//append the topics and areas to the same array\r\n\t\t\t\tonestring = topicsTitles.concat(areasTitles);\r\n\t\t\t} else if (areasTitles != null) {\r\n\t\t\t\t//add the area to the array\r\n\t\t\t\tonestring.push(areasTitles);\r\n\t\t\t}\r\n\r\n\t\t\tvar topicsKeys = topics != null ? Array.prototype.map.call(topics, function (checkbox) {\r\n\t\t\t\treturn checkbox.value;\r\n\t\t\t}) : [];\r\n\t\t\t$.ajax({\r\n\t\t\t\turl: \"/umbraco/api/Subscribe/SubscribeToPage\",\r\n\t\t\t\tcontentType: \"application/json\",\r\n\t\t\t\ttype: 'GET',\r\n\t\t\t\tdataType: 'json',\r\n\t\t\t\tdata: {\r\n\t\t\t\t\tareaKey: areaKey != null ? areaKey.value : \"\",\r\n\t\t\t\t\ttopicKeys: topicsKeys.join(\",\"),\r\n\t\t\t\t\tmemberPageId: form.data(\"memberpageid\"),\r\n\t\t\t\t\temail: jQuery(\"#signupEmail\").val(),\r\n\t\t\t\t\tlang: document.documentElement.getAttribute('lang')\r\n\r\n\t\t\t\t},\r\n\t\t\t\terror: function (data) { // eslint-disable-next-line no-console\r\n\t\t\t\t\tconsole.log(\"Error: \", data)\r\n\t\t\t\t\tshowMessage(false)\r\n\t\t\t\t},\r\n\t\t\t\tsuccess: function (data) {\r\n\t\t\t\t\tshowMessage(data, onestring)\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\t);\r\n\r\n\t//TODO UMB9 Success with small s !!\r\n\tfunction showMessage(response, areas) { // - If success\r\n\t\tvar form = jQuery(\"#subscribForm\").parent().parent();\r\n\t\tif ((response.success && response.isNew) || (response.success && !response.isApproved)) {\r\n\r\n\t\t\tform.find(\".message-body__conformation\").find(\"#area-list-conformation\").html(areas.join(\", \"));\r\n\t\t\tform.find(\".message-body__error\").hide();\r\n\t\t\tform.find(\".message-body__isMember\").hide();\r\n\t\t\tform.find(\".message-body__conformation\").show();\r\n\t\t} else if (response.success && response.isApproved) {\r\n\r\n\t\t\tform.find(\".message-body__isMember\").find(\"#area-list-ismember\").html(areas.join(\", \"));\r\n\t\t\tform.find(\".message-body__error\").hide();\r\n\t\t\tform.find(\".message-body__conformation\").hide();\r\n\t\t\tform.find(\".message-body__isMember\").show();\r\n\t\t} else {\r\n\t\t\tform.find(\".message-body__isMember\").hide();\r\n\t\t\tform.find(\".message-body__conformation\").hide();\r\n\t\t\tform.find(\".message-body__error\").show();\r\n\t\t\t// - Run animate function\r\n\t\t}\r\n\t\tanimate();\r\n\t}\r\n\r\n\t// - Animate modal slide\r\n\tfunction animate() {\r\n\t\tjQuery('.modal-content').animate({\r\n\t\t\theight: jQuery('.modal-content').outerHeight()\r\n\t\t}, 600);\r\n\r\n\t\tjQuery('.message-body').removeClass(\"modal-body__hidden\");\r\n\r\n\t\tjQuery('.subscription-body').animate({\r\n\t\t\t\"margin-top\": \"-\" + jQuery('.subscription-body').outerHeight() + \"px\"\r\n\t\t}, 600, function () {\r\n\t\t\tjQuery('.subscription-body').addClass(\"modal-body__hidden\")\r\n\t\t});\r\n\t}\r\n\r\n\t// Close modal when close btns are clicked\r\n\tjQuery(\"button.close\").on(\"click\", function () {\r\n\t\tsetTimeout(function () {\r\n\t\t\tjQuery('.subscription-body').css(\"margin-top\", \"0px\");\r\n\t\t\tjQuery('.subscription-body').removeClass(\"modal-body__hidden\");\r\n\t\t\tjQuery('.message-body').addClass(\"modal-body__hidden\")\r\n\t\t}, 1000);\r\n\t});\r\n\r\n\t// Return to previous modal when error btn is clicked\r\n\tjQuery(\".message-body__error button\").on(\"click\", function () {\r\n\t\tjQuery('.modal-content').animate({\r\n\t\t\theight: jQuery('.modal-content').outerHeight()\r\n\t\t}, 600);\r\n\r\n\t\tjQuery('.subscription-body').removeClass(\"modal-body__hidden\");\r\n\r\n\t\tjQuery('.subscription-body').animate({\r\n\t\t\t\"margin-top\": \"0px\"\r\n\t\t}, 600, function () {\r\n\t\t\tjQuery('.message-body.error').addClass(\"modal-body__hidden\")\r\n\t\t});\r\n\t});\r\n\r\n\tjQuery(document).on('input', '#emailInput', function () {\r\n\r\n\t\tvalidateForm();\r\n\t})\r\n\tfunction validateForm() {\r\n\t\tvar email = jQuery('#emailInput').val();\r\n\t\tjQuery('.btn__submit').prop('disabled', true);\r\n\t\tif (isValidEmail(email) && jQuery('#consent').is(':checked')) {\r\n\t\t\t//enable the submit button\r\n\t\t\tjQuery('.btn__submit').prop('disabled', false);\r\n\t\t} else {\r\n\t\t\t//disable the submit button\r\n\t\t\tjQuery('.btn__submit').prop('disabled', true);\r\n\t\t\t//turn off hover effects\r\n\t\t}\r\n\t}\r\n\tfunction isValidEmail(email) {\r\n\t\tconst emailRegex = /^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}$/;\r\n\t\treturn emailRegex.test(email);\r\n\t}\r\n}\r\n\r\nexport default subscriptionModal;\r\n","/**\r\n * Pagination\r\n * https://codepen.io/robertcooper_rc/pen/XeabLa\r\n */\r\n\r\nexport function pagination() {\r\n\r\n window.onload = function(){\r\n var paginationPage = parseInt(jQuery('.pagination').attr('actpage'), 10);\r\n jQuery(document).on(\"click\",\".pagination__item button\",function() {\r\n var go = jQuery(this).attr('data-button');\r\n\r\n if (go === '+1') {\r\n paginationPage++;\r\n } else if (go === '-1') {\r\n paginationPage--;\r\n } else {\r\n paginationPage = parseInt(go, 10);\r\n }\r\n jQuery('.pagination').attr('actpage', paginationPage);\r\n jQuery('.arrow-next').attr(\"data-page\", paginationPage+1);\r\n jQuery('.arrow-prev').attr(\"data-page\", paginationPage-1);\r\n\r\n });\r\n };\r\n}\r\n\r\nexport default pagination;\r\n","export function articleAnchorMenu() {\r\n\r\n\t// If headlines have an .article-anchor, create anchor menu\r\n\tif (jQuery('.rich-text').length > 0) {\r\n\t\tvar links = jQuery('.rich-text a[id]');\r\n\r\n\t\tif(links.length > 0) {\r\n\t\t\taddSection(links);\r\n\t\t\tjQuery('.article-anchor-menu').show();\r\n\t\t} else {\r\n\t\t\tjQuery('.article-anchor-menu').remove();\r\n\t\t}\r\n\t} else {\r\n\t\tjQuery('.article-anchor-menu').remove();\r\n\t}\r\n\r\n\t// add id to link en headline\r\n\tfunction addSection(links) {\r\n\t\tlinks.each(function () {\r\n\t\t\tvar name = jQuery(this).parent().text();\r\n\t\t\tvar anchor = cleanText(jQuery(this).attr(\"id\").toLocaleLowerCase());\r\n\t\t\tjQuery(this).attr('id', anchor);\r\n\t\t\tjQuery(\".article-anchor-menu ol\").append(\"

        • \"+ name +\"
        • \");\r\n\t\t});\r\n\t}\r\n\r\n\tfunction cleanText(text) {\r\n\t\tvar cleanText = text.replace('æ', 'ae').replace('ø', 'oe').replace('å', 'aa').replace(/[^a-z0-9\\s]/gi, '').replace(/[_\\s]/g, '-').toLowerCase();\r\n\t\treturn cleanText;\r\n\t}\r\n function addSpaceToText(text) {\r\n\t\tvar fixedText = text.toLowerCase().replace(/_/g, \" \").replace('aa', 'å').replace('oe', 'ø').replace('ae', 'æ');\r\n\t\treturn fixedText;\r\n\t}\r\n}\r\n\r\nexport default articleAnchorMenu;\r\n","export function accordionMobile() {\r\n var accordion = jQuery('.accordion--mobile');\r\n\r\n if (accordion.length > 0) {\r\n var accordionInstance = (function() {\r\n var settings = {\r\n speed: 400,\r\n oneOpen: false\r\n };\r\n\r\n return {\r\n init: function($settings) {\r\n jQuery(document).on(\"click\", \".accordion--mobile__toggle\", function(e) {\r\n e.preventDefault();\r\n accordionInstance.toggle(jQuery(this));\r\n });\r\n\r\n $.extend(settings, $settings);\r\n\r\n jQuery('.accordion--mobile.active').find('> .accordion--mobile__body').show();\r\n },\r\n toggle: function($this) {\r\n $this.attr(\"aria-expanded\", function(_, attr) {\r\n return attr === \"true\" ? \"false\" : \"true\";\r\n });\r\n\r\n if (settings.oneOpen) {\r\n var activeAccordion = $this.closest('.accordion--mobile.active');\r\n if (activeAccordion.length && !$this.closest('.accordion--mobile').hasClass('active')) {\r\n activeAccordion.removeClass('active').find('.accordion--mobile__body').slideUp(settings.speed);\r\n }\r\n }\r\n\r\n $this.closest('.accordion--mobile').toggleClass('active').find('.accordion--mobile__body').stop().slideToggle(settings.speed);\r\n },\r\n destroy: function() {\r\n // Remove event listeners\r\n // jQuery(document).off(\"click\", \".accordion--mobile__toggle\");\r\n jQuery('.accordion--mobile').find('.accordion--mobile__toggle').removeAttr('aria-expanded');\r\n // Reset accordion state\r\n jQuery('.accordion--mobile').removeClass('active').find('.accordion--mobile__body').removeAttr('style');\r\n }\r\n };\r\n })();\r\n\r\n // Initialize accordion\r\n accordionInstance.init({ speed: 300, oneOpen: true });\r\n\r\n // Function to handle accordion destruction and reinitialization on window resize\r\n function handleAccordionState() {\r\n if (window.matchMedia(\"(min-width: 768px)\").matches) {\r\n // Disable toggle button\r\n jQuery('.accordion--mobile__toggle').prop('disabled', true);\r\n // Check if accordion is initialized\r\n if (accordionInstance && !accordion.hasClass('active')) {\r\n accordionInstance.destroy();\r\n }\r\n } else {\r\n // Enable toggle button\r\n jQuery('.accordion--mobile__toggle').prop('disabled', false);\r\n // Check if accordion is not initialized\r\n if (!accordionInstance) {\r\n // Initialize accordion\r\n accordionInstance.init({ speed: 300, oneOpen: true });\r\n } else {\r\n // Remove inline style attribute from accordion body\r\n // jQuery('.accordion--mobile__body').removeAttr('style');\r\n // Set aria-expanded attribute based on accordion state\r\n jQuery('.accordion--mobile__toggle').attr('aria-expanded', function() {\r\n return jQuery(this).closest('.accordion--mobile').hasClass('active') ? 'true' : 'false';\r\n });\r\n }\r\n }\r\n }\r\n\r\n // Handle accordion state on window resize\r\n jQuery(window).on('load resize', handleAccordionState);\r\n }\r\n}\r\n\r\nexport default accordionMobile;","export function accordionDesktopDown() {\r\n var accordion = jQuery('.accordion--desktop-down');\r\n\r\n if (accordion.length > 0) {\r\n var accordionInstance = (function() {\r\n var settings = {\r\n speed: 400,\r\n oneOpen: false\r\n };\r\n\r\n return {\r\n init: function($settings) {\r\n jQuery(document).on(\"click\", \".accordion--desktop-down__toggle\", function(e) {\r\n e.preventDefault();\r\n accordionInstance.toggle(jQuery(this));\r\n });\r\n\r\n $.extend(settings, $settings);\r\n\r\n jQuery('.accordion--desktop-down.active').find('> .accordion--desktop-down__body').show();\r\n },\r\n toggle: function($this) {\r\n $this.attr(\"aria-expanded\", function(_, attr) {\r\n return attr === \"true\" ? \"false\" : \"true\";\r\n });\r\n\r\n if (settings.oneOpen) {\r\n var activeAccordion = $this.closest('.accordion--desktop-down.active');\r\n if (activeAccordion.length && !$this.closest('.accordion--desktop-down').hasClass('active')) {\r\n activeAccordion.removeClass('active').find('.accordion--desktop-down__body').slideUp(settings.speed);\r\n }\r\n }\r\n\r\n $this.closest('.accordion--desktop-down').toggleClass('active').find('.accordion--desktop-down__body').stop().slideToggle(settings.speed);\r\n },\r\n destroy: function() {\r\n jQuery('.accordion--desktop-down').find('.accordion--desktop-down__toggle').removeAttr('aria-expanded');\r\n jQuery('.accordion--desktop-down').removeClass('active').find('.accordion--desktop-down__body').removeAttr('style');\r\n }\r\n };\r\n })();\r\n\r\n // Initialize accordion\r\n accordionInstance.init({ speed: 300, oneOpen: true });\r\n\r\n // Function to handle accordion destruction and reinitialization on window resize\r\n function handleAccordionState() {\r\n // if (window.matchMedia(\"(min-width: 768px)\").matches) {\r\n // jQuery('.accordion--desktop-down__toggle').prop('disabled', true);\r\n\r\n // if (accordionInstance && !accordion.hasClass('active')) {\r\n // accordionInstance.destroy();\r\n // }\r\n // } else {\r\n jQuery('.accordion--desktop-down__toggle').prop('disabled', false);\r\n\r\n if (!accordionInstance) {\r\n accordionInstance.init({ speed: 300, oneOpen: true });\r\n } else {\r\n jQuery('.accordion--desktop-down__toggle').attr('aria-expanded', function() {\r\n return jQuery(this).closest('.accordion--desktop-down').hasClass('active') ? 'true' : 'false';\r\n });\r\n }\r\n // }\r\n }\r\n\r\n jQuery(window).on('load resize', handleAccordionState);\r\n }\r\n}\r\n\r\nexport default accordionDesktopDown;","export function infoboxLinksIcon() {\r\n var accordion = jQuery('.info-box__links__icon');\r\n\r\n if (accordion.length > 0) {\r\n accordion = (function () {\r\n var $accordion = jQuery('.js-info-box__links__icon');\r\n var $accordion_item = $accordion.find('.js-info-box__links__icon__item');\r\n var $accordion_toggle = $accordion.find('.js-toggle');\r\n var $accordion_body = $accordion.find('.js-info-box__links__icon__item__body');\r\n\r\n // default settings\r\n var settings = {\r\n speed: 400,\r\n oneOpen: false\r\n };\r\n\r\n return {\r\n init: function ($settings) {\r\n // Enable the buttons\r\n $accordion_toggle.attr('disabled', false);\r\n\r\n // Remove existing click event and add a new one\r\n $accordion_toggle.off('click').on('click', function (e) {\r\n e.preventDefault();\r\n\r\n // Pass the toggle button to the toggle function\r\n accordion.toggle(jQuery(this));\r\n });\r\n\r\n // Extend default settings with any provided settings\r\n $.extend(settings, $settings);\r\n\r\n // Show active accordion bodies by default\r\n jQuery('.js-info-box__links__icon__item.active')\r\n .find('> .js-info-box__links__icon__item__body')\r\n .show();\r\n },\r\n\r\n toggle: function ($toggleBtn) {\r\n // Toggle aria-expanded attribute for accessibility\r\n var currentAriaExpanded = $toggleBtn.attr(\"aria-expanded\");\r\n var newAriaExpanded = currentAriaExpanded === \"true\" ? \"false\" : \"true\";\r\n $toggleBtn.attr(\"aria-expanded\", newAriaExpanded);\r\n\r\n // Find the corresponding accordion item and toggle its 'active' class\r\n var $accordionItem = $toggleBtn.closest($accordion_item);\r\n $accordionItem.toggleClass('active');\r\n\r\n // Slide toggle the body associated with this item\r\n var $body = $accordionItem.find('> .js-info-box__links__icon__item__body');\r\n $body.stop().slideToggle(settings.speed);\r\n\r\n // If only one item should be open at a time, close others\r\n if (settings.oneOpen) {\r\n $accordion_item.not($accordionItem).removeClass('active');\r\n $accordion_item.not($accordionItem)\r\n .find('> .js-info-box__links__icon__item__body')\r\n .stop()\r\n .slideUp(settings.speed);\r\n }\r\n },\r\n\r\n destroy: function () {\r\n // Disable the buttons on larger screens\r\n $accordion_toggle.off('click').attr('disabled', true); // Disable the buttons\r\n\r\n // Reset the accordion items\r\n $accordion_item.find('> .js-info-box__links__icon__item__body').hide();\r\n $accordion_item.removeClass('active');\r\n $accordion_item.find('> .js-info-box__links__icon__item__body').css({ height: \"auto\", display: \"\" });\r\n $accordion_item.find('> .js-info-box__links__icon__item__body').show();\r\n }\r\n };\r\n })();\r\n\r\n jQuery(window).on(\"load resize\", function () {\r\n if (this.matchMedia(\"(max-width: 991px)\").matches) {\r\n accordion.init({\r\n speed: 300,\r\n oneOpen: true\r\n });\r\n }\r\n\r\n if (this.matchMedia(\"(min-width: 991px)\").matches) {\r\n accordion.destroy();\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default infoboxLinksIcon;\r\n","/**\r\n * Three column carousel - carousel on tablet down\r\n * https://owlcarousel2.github.io/\r\n */\r\n\r\nimport jquery from \"jquery\";\r\n\r\n// eslint-disable-next-line no-unused-vars\r\n// import owl from '../../../../node_modules/owl.carousel/dist/owl.carousel.min'\r\n\r\nexport function threeColumnCarousel() {\r\n jQuery(function () {\r\n var carousels = jQuery('.three-column-carousel');\r\n\r\n if (carousels.length < 1) {\r\n return;\r\n }\r\n\r\n jQuery(document).ready(function () {\r\n if (jQuery(window).width() <= 991) {\r\n carousels.each(function() {\r\n startCarousel(jQuery(this));\r\n });\r\n } else {\r\n carousels.each(function() {\r\n jQuery(this).addClass('off');\r\n });\r\n }\r\n });\r\n\r\n let resizeTimeout;\r\n\r\n jQuery(window).resize(function () {\r\n clearTimeout(resizeTimeout);\r\n resizeTimeout = setTimeout(function () {\r\n if (jQuery(window).width() <= 991) {\r\n carousels.each(function() {\r\n startCarousel(jQuery(this));\r\n });\r\n } else {\r\n carousels.each(function() {\r\n stopCarousel(jQuery(this));\r\n });\r\n }\r\n }, 500); // Adjust the delay as needed\r\n });\r\n\r\n function startCarousel(carousel) {\r\n if (carousel.hasClass('owl-loaded')) return; // Check if already initialized\r\n\r\n\r\n carousel.owlCarousel({\r\n stagePadding: 40,\r\n items: 3,\r\n nav: false,\r\n dots: true,\r\n pullDrag: true,\r\n touchDrag: true,\r\n mouseDrag: true,\r\n responsiveClass: true,\r\n center: true,\r\n responsive: {\r\n 0: {\r\n items: 1,\r\n dots: true,\r\n stagePadding: 40\r\n },\r\n 600: {\r\n items: 2,\r\n dots: true,\r\n stagePadding: 40 * 2\r\n },\r\n 991: {\r\n items: 2\r\n }\r\n }\r\n });\r\n\r\n carousel.find('.owl-dots').each(function () {\r\n var $this = jQuery(this);\r\n var $ul = jQuery('');\r\n $this.children().each(function(index) {\r\n var $dot = jQuery(this);\r\n var $li = jQuery('
        • ');\r\n var $button = jQuery('');\r\n \r\n if ($dot.hasClass('active')) {\r\n $button.addClass('active');\r\n }\r\n\r\n $button.on('click', function() {\r\n carousel.trigger('to.owl.carousel', [index, 300]);\r\n });\r\n\r\n $button.append('');\r\n $li.append($button);\r\n $ul.append($li);\r\n });\r\n $this.replaceWith($ul);\r\n });\r\n\r\n carousel.on('changed.owl.carousel', function(event) {\r\n var index = event.item.index;\r\n carousel.find('.owl-dot').removeClass('active');\r\n carousel.find('.owl-dot').eq(index).addClass('active');\r\n });\r\n\r\n carousel.find('.owl-item').on('focusin', function () {\r\n var desiredItem = jQuery(this);\r\n var desiredItemIndex = carousel.find('.owl-item').index(desiredItem);\r\n carousel.trigger('to.owl.carousel', [desiredItemIndex, 300, true]);\r\n });\r\n }\r\n\r\n function stopCarousel(carousel) {\r\n carousel.trigger('destroy.owl.carousel');\r\n carousel.addClass('off');\r\n }\r\n\r\n });\r\n}\r\n\r\nexport default threeColumnCarousel;\r\n","// Video\r\nexport function video() {\r\n\r\n if (jQuery(\".video\").length === 0) {\r\n return;\r\n }\r\n\r\n jQuery( \".video\" ).each(function() {\r\n jQuery(this).find(\".video__overlay__button\").click(function() {\r\n jQuery(this).parent('.video__overlay').addClass(\"hide\");\r\n let video = jQuery(this).closest(\".video\").find('video').get(0);\r\n\r\n if (!video) {\r\n console.error(\"Video element not found\");\r\n return;\r\n }\r\n\r\n video.style.visibility = \"visible\";\r\n\r\n if (video.paused) {\r\n video.play();\r\n } else {\r\n video.pause();\r\n }\r\n\t\t})\r\n });\r\n}\r\n\r\nexport default video;\r\n","export function videoDreambroker() {\r\n if (jQuery(\".video__dreambroker\").length === 0) {\r\n return;\r\n }\r\n\r\n jQuery(\".video__dreambroker\").each(function(index, element) {\r\n let video = document.createElement(\"video\");\r\n let src = jQuery(element).data(\"embed\");\r\n\r\n try {\r\n // Parse the Dreambroker video URL\r\n const parsedUrl = new URL(src);\r\n const searchParams = parsedUrl.searchParams;\r\n\r\n const loop = searchParams.get(\"loop\");\r\n const quality = searchParams.get(\"quality\");\r\n const autoplay = searchParams.get(\"autoplay\");\r\n const lang = searchParams.get(\"lang\") || 'da'; // Default to 'da' if no lang parameter is present\r\n const baseUrl = `${parsedUrl.origin}${parsedUrl.pathname}`;\r\n\r\n // Set video attributes\r\n video.setAttribute(\"tabindex\", \"0\");\r\n video.setAttribute(\"aria-roledescription\", \"video\");\r\n\r\n // Ensure controls are available\r\n video.setAttribute(\"controls\", \"\"); // Ensure the controls appear\r\n if (autoplay === \"true\") {\r\n video.setAttribute('autoplay', \"\");\r\n }\r\n\r\n video.setAttribute('loop', loop === \"true\" ? 'true' : 'false');\r\n video.setAttribute('preload', 'none'); // As per the iframe example\r\n\r\n // Set the video poster (thumbnail image)\r\n video.poster = `${baseUrl}/get/poster?etag=1716383491000`;\r\n\r\n // Set the video sources\r\n video.src = `${baseUrl}/get/normal.mp4?lang=${lang}`;\r\n \r\n // Add additional sources for different quality levels (fullhd, hd, etc.)\r\n const sourceFullHd = document.createElement('source');\r\n sourceFullHd.setAttribute('src', `${baseUrl}/get/fullhd.mp4`);\r\n sourceFullHd.setAttribute('type', 'video/mp4');\r\n sourceFullHd.setAttribute('data-fullhd', `${baseUrl}/get/fullhd.mp4`);\r\n video.appendChild(sourceFullHd);\r\n\r\n const sourceHd = document.createElement('source');\r\n sourceHd.setAttribute('src', `${baseUrl}/get/hd.mp4`);\r\n sourceHd.setAttribute('type', 'video/mp4');\r\n sourceHd.setAttribute('data-hd', `${baseUrl}/get/hd.mp4`);\r\n video.appendChild(sourceHd);\r\n\r\n const sourceNormal = document.createElement('source');\r\n sourceNormal.setAttribute('src', `${baseUrl}/get/normal.mp4`);\r\n sourceNormal.setAttribute('type', 'video/mp4');\r\n sourceNormal.setAttribute('data-normal', `${baseUrl}/get/normal.mp4`);\r\n video.appendChild(sourceNormal);\r\n\r\n const sourceMobile = document.createElement('source');\r\n sourceMobile.setAttribute('src', `${baseUrl}/get/mobile.mp4`);\r\n sourceMobile.setAttribute('type', 'video/mp4');\r\n sourceMobile.setAttribute('data-mobile', `${baseUrl}/get/mobile.mp4`);\r\n video.appendChild(sourceMobile);\r\n\r\n // Create and add the subtitle track element\r\n const track = document.createElement('track');\r\n track.setAttribute('kind', 'subtitles');\r\n track.setAttribute('label', 'Dansk'); // Set the label as 'Dansk' (or based on lang)\r\n track.setAttribute('src', `${baseUrl}/subtitle/get/${lang}.vtt`); // Dynamic subtitle URL\r\n track.setAttribute('srclang', lang); // Language code (e.g., 'da' for Danish)\r\n track.setAttribute('default', 'true'); // Make this subtitle track the default\r\n video.appendChild(track); \r\n\r\n // Append the video element to the container without removing the overlay\r\n jQuery(element).append(video);\r\n\r\n } catch (e) {\r\n console.error(\"Error parsing Dreambroker URL: \", e);\r\n }\r\n });\r\n}\r\n\r\nexport default videoDreambroker;\r\n","export function videoYoutube() {\r\n\r\n if ( jQuery( \".video-youtube\" ).length < 0 ) {\r\n return;\r\n }\r\n\r\n jQuery('.video__youtube').click(function() {\r\n var embedId = jQuery(this).data(\"embed\");\r\n embedId += \"?autoplay=1&rel=0\";\r\n var iframe = document.createElement( \"iframe\" );\r\n iframe.setAttribute( \"class\", \"video__youtube__iframe\" );\r\n iframe.setAttribute( \"frameborder\", \"0\" );\r\n iframe.setAttribute( \"allowfullscreen\", \"\" );\r\n iframe.setAttribute( \"src\", \"https://www.youtube.com/embed/\" + embedId);\r\n iframe.setAttribute(\"allow\", \"autoplay; encrypted-media\");\r\n jQuery(iframe).appendTo(jQuery(this));\r\n });\r\n\r\n}\r\n\r\nexport default videoYoutube;\r\n","export function videoHTML(){\r\n\r\n\tif(document.querySelector('.video__html')){\r\n\t\tconst videos = document.querySelectorAll('.video__html')\r\n\r\n\t\tvideos.forEach(element => {\r\n\t\t\tlet video = element.querySelector('video')\r\n\t\t\tlet playButton = element.querySelector('.video__overlay__button')\r\n\r\n\t\t\tplayButton.addEventListener('click', () => {\r\n\t\t\t\tvideo.setAttribute('controls', true)\r\n\t\t\t\t// console.log(video.paused)\r\n\t\t\t\t// if(video.paused){\r\n\t\t\t\t// \tvideo.play()\r\n\t\t\t\t// } else if(!video.paused) {\r\n\t\t\t\t// \tvideo.pause()\r\n\t\t\t\t// }\r\n\t\t\t})\r\n\t\t})\r\n\t}\r\n}\r\n\r\nexport default videoHTML;\r\n","export function borgerDk() {\r\n if (jQuery(\".js-borgerdk-accordion\").length > 0) {\r\n CheckArticle();\r\n }\r\n if(jQuery(\".borgerdk--accordion\").length > 0){\r\n updateLinks();\r\n }\r\n}\r\n\r\nfunction CheckArticle(){\r\n var accordion = jQuery(\".js-borgerdk-accordion\");\r\n var pageId = accordion.data(\"pageid\");\r\n var articleId = accordion.data(\"articleid\");\r\n var lastupdated = accordion.data(\"lastupdated\");\r\n var url = \"/umbraco/api/BorgerDkArticle/CheckForUpdates?articleId=\" + articleId + \"&date=\" + lastupdated + \"&pageId=\" + pageId + \"&municipalityCode=147\";\r\n\r\n $.ajax({\r\n url: url,\r\n contentType: \"application/json\",\r\n type: 'GET',\r\n dataType: 'json',\r\n data: {\r\n },\r\n error: function (data) {\r\n // eslint-disable-next-line no-console\r\n console.log(\"Error: \", data)\r\n },\r\n success: function (data) {\r\n }\r\n });\r\n}\r\n\r\nfunction updateLinks() {\r\n jQuery(\".borgerdk--accordion\").find(\"a\").each(function () {\r\n var href = jQuery(this).attr(\"href\");\r\n if (href.indexOf(\"borger.dk\") > -1) {\r\n jQuery(this).attr(\"target\", \"_blank\");\r\n }\r\n });\r\n}\r\nexport default borgerDk;\r\n","export function sbsysaccordion() {\r\n\tif (jQuery(\".js-accordion-item-agenda\").length == 0) {\r\n\t\treturn;\r\n\t}\r\n\tjQuery(document).on(\"click\", \".js-accordion-item-agenda\", function (e) {\r\n\t\tvar folderId = jQuery(this).data(\"listid\");\r\n\t\tvar pageUrl = jQuery(this).data(\"pageurl\");\r\n\t\tvar elementId = jQuery(this).data(\"elementid\");\r\n\t\tvar accordionBodyContents = jQuery(this)\r\n\t\t\t.closest(\".js-accordion-item\")\r\n\t\t\t.find(\".accordion-body__contents\");\r\n\t\tvar hasList = accordionBodyContents.find(\".list__links\");\r\n\t\tif (hasList.length) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tvar loadingSpinner = accordionBodyContents.find(\".lds-default\");\r\n\t\tif (loadingSpinner) {\r\n\t\t\tloadingSpinner.css(\"display\", \"inline-block\");\r\n\t\t}\r\n\t\tvar requestData = {\r\n\t\t\tfolderId: folderId,\r\n\t\t\tpageUrl: pageUrl,\r\n\t\t\telementId: elementId,\r\n\t\t};\r\n\t\tconsole.log(requestData);\r\n\t\tfetch(\r\n\t\t\t\"/umbraco/surface/AgendaSurface/GetAgendaList?\" +\r\n\t\t\t\tnew URLSearchParams(requestData),\r\n\t\t)\r\n\t\t\t.then(function (response) {\r\n\t\t\t\tif (!response.ok) {\r\n\t\t\t\t\tthrow new Error(\"Network response was not ok\");\r\n\t\t\t\t}\r\n\t\t\t\treturn response.text();\r\n\t\t\t})\r\n\t\t\t.then(function (data) {\r\n\t\t\t\tvar newData = data.trim();\r\n\t\t\t\tif (loadingSpinner) {\r\n\t\t\t\t\tloadingSpinner.css(\"display\", \"none\");\r\n\t\t\t\t}\r\n\t\t\t\tconsole.log(\"data:\", newData);\r\n\t\t\t\taccordionBodyContents.html(newData);\r\n\t\t\t\taccordionBodyContents.css(\"display\", \"block\");\r\n\t\t\t})\r\n\t\t\t.catch(function () {\r\n\t\t\t\tconsole.log(\"Error in loaded comments\");\r\n\t\t\t\tif (loadingSpinner) {\r\n\t\t\t\t\tloadingSpinner.css(\"display\", \"none\");\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t});\r\n}\r\nexport default sbsysaccordion;\r\n","/*\r\n** Tooltips\r\n*/\r\nimport tippy from 'tippy.js';\r\nimport 'tippy.js/dist/tippy.css';\r\n\r\nexport function tooltips() {\r\n\r\n if (jQuery('.intext-tooltip').length == 0) {\r\n return;\r\n }\r\n tippy('.intext-tooltip', {\r\n theme: 'custom',\r\n arrow: true,\r\n maxWidth: 385,\r\n placement: 'auto',\r\n delay: 5,\r\n hideOnClick: false,\r\n onShow(instance) {\r\n var content = instance.reference.attributes[\"data-tippy-content\"].value;\r\n instance.setContent(content);\r\n }\r\n });\r\n\r\n}\r\n\r\nexport default tooltips;\r\n","/*\r\n** In text arrow link\r\n**\r\n** .arrow can be added to a p tag, to hightlight the p text.\r\n** When link is present inside p tag, the arrow moves on link hover.\r\n*/\r\n\r\n\r\nexport function intextArrowLink() {\r\n\r\n if (jQuery('.intext-arrow-link').length < 0) {\r\n\t\treturn;\r\n }\r\n\r\n // In .rich-text component\r\n jQuery(\".intext-arrow-link a\").on({mouseenter: function () {\r\n jQuery(this).parent('.intext-arrow-link').addClass('onHoverJS');\r\n },\r\n mouseleave: function () {\r\n jQuery(this).parent('.intext-arrow-link').removeClass('onHoverJS');\r\n }\r\n });\r\n\r\n // In .intext-arrow-link component\r\n jQuery(\".intext-arrow-link p a\").on({mouseenter: function () {\r\n var parent = jQuery(this).parents('p');\r\n jQuery(parent).parent('.intext-arrow-link').addClass('onHoverJS');\r\n },\r\n mouseleave: function () {\r\n var parent = jQuery(this).parents('p');\r\n jQuery(parent).parent('.intext-arrow-link').removeClass('onHoverJS');\r\n }\r\n });\r\n\r\n}\r\n\r\nexport default intextArrowLink;\r\n","/**\r\n * Service menu\r\n */\r\n\r\nimport 'js-cookie';\r\nimport Cookies from 'js-cookie'\r\n\r\nexport function serviceMenu() {\r\n if (jQuery(\".service-menu\").length === 0) {\r\n return;\r\n }\r\n\r\n if (jQuery(\".service-menu .dropdown-toggle__enlarge-text\").length > 0) {\r\n var $fontsizeParent = jQuery(\".service-menu .dropdown-toggle__enlarge-text\").parents('.service-menu__item');\r\n var $fontsizeTextContainer = $fontsizeParent.find('.service-menu__item__text');\r\n var $fontsizeText = $fontsizeTextContainer.text();\r\n var selectedProcentage = jQuery('.dropdown-menu .fontsize li.selected-size').text();\r\n jQuery('button.dropdown-toggle__enlarge-text').attr(\"aria-label\", $fontsizeText+ \" er sat til \" +selectedProcentage+ \". Du kan ændre procenten her.\");\r\n }\r\n\r\n jQuery('.dropdown-menu .fontsize li').on('click',function(){\r\n jQuery('.dropdown-menu .fontsize li').removeClass('selected-size');\r\n jQuery('.dropdown-menu .fontsize button').attr(\"aria-pressed\", \"false\");\r\n jQuery(this).addClass('selected-size');\r\n jQuery(this).find('button').attr('aria-pressed', 'true');\r\n var selectedSize = parseInt(jQuery(this).text().replace('%',''))/100;\r\n var selectedProcentage = jQuery(this).text();\r\n jQuery('.article-wrapper').css({'font-size': selectedSize+'em','line-height': selectedSize+'em'});\r\n jQuery('button.dropdown-toggle__enlarge-text').attr(\"aria-label\", $fontsizeText+ \" er sat til \" +selectedProcentage+ \". Du kan ændre procenten her.\");\r\n });\r\n\r\n jQuery(document).off('click', '.dropdown-toggle__share');\r\n jQuery(document).on('click', '.dropdown-toggle__share', function () {\r\n jQuery('.btn-tooltip').removeClass(\"show\");\r\n jQuery(this).attr(\"aria-expanded\", \"false\");\r\n jQuery(this).siblings('.dropdown-menu').toggleClass('show');\r\n\r\n if (jQuery(this).siblings('.dropdown-menu').hasClass(\"show\")) {\r\n jQuery(this).attr(\"aria-expanded\", \"true\");\r\n\r\n jQuery('body').on('click', function (e) {\r\n if (!jQuery('.dropdown-toggle__share').is(e.target) && jQuery('.dropdown-toggle__share').has(e.target).length === 0 && jQuery('.show').has(e.target).length === 0) {\r\n jQuery('.dropdown-toggle__share').siblings('.dropdown-menu').removeClass(\"show\");\r\n jQuery('.dropdown-toggle__share').attr(\"aria-expanded\", \"false\");\r\n }\r\n });\r\n }\r\n });\r\n\r\n jQuery(document).off('click', '.shareLinkJs');\r\n jQuery(document).on('click', '.shareLinkJs', function () {\r\n copyText();\r\n });\r\n\r\n function copyText() {\r\n /* Get the text field */\r\n var copyText = jQuery(\"#copiedText\").val();\r\n copyTextToClipboard(copyText)\r\n jQuery('.btn-tooltip').addClass(\"show\");\r\n }\r\n\r\n function fallbackCopyTextToClipboard(text) {\r\n var textArea = document.createElement(\"textarea\");\r\n textArea.value = text;\r\n\r\n // Avoid scrolling to bottom\r\n textArea.style.top = \"0\";\r\n textArea.style.left = \"0\";\r\n textArea.style.position = \"fixed\";\r\n\r\n document.body.appendChild(textArea);\r\n textArea.focus();\r\n textArea.select();\r\n\r\n try {\r\n // var successful = document.execCommand('copy');\r\n // var msg = successful ? 'successful' : 'unsuccessful';\r\n } catch (err) {\r\n console.error('Fallback: Oops, unable to copy', err);\r\n }\r\n\r\n document.body.removeChild(textArea);\r\n }\r\n\r\n function copyTextToClipboard(text) {\r\n if (!navigator.clipboard) {\r\n fallbackCopyTextToClipboard(text);\r\n return;\r\n }\r\n navigator.clipboard.writeText(text).then(function() {\r\n console.log('Async: Copying to clipboard was successful!');\r\n }, function(err) {\r\n console.error('Async: Could not copy text: ', err);\r\n });\r\n }\r\n\r\n //removed 5/1 2023. If it works after deploy, this can be deleted\r\n/* // Adgang med tegn\r\n if(document.querySelector('#adgangMedTegn')){\r\n //remove existing Cookie\r\n let url = window.location.pathname;\r\n let path = url.substring(0, url.lastIndexOf('/'));\r\n Cookies.remove('SignIsActive', { path: path})\r\n } */\r\n\r\n //Save function\r\n if(document.querySelector('.js-save-button')){\r\n let savedPages = localStorage.getItem('savedPages') ? JSON.parse(localStorage.getItem('savedPages')) : [];\r\n const saveButtons = document.querySelectorAll('.js-save-button')\r\n\r\n //set buttons as active if page is already saved\r\n if(savedPages.includes(saveButtons[0].getAttribute('data-page-id'))){\r\n saveButtons.forEach(button => button.classList.remove('inactive'))\r\n }\r\n\r\n //add click event to save button\r\n saveButtons.forEach(button => {\r\n button.addEventListener('click', () => {\r\n\r\n let pageId = button.getAttribute('data-page-id')\r\n\r\n //delete page from saved pages if already saved / unsave\r\n if(savedPages.includes(pageId)){\r\n savedPages.splice(savedPages.indexOf(pageId), 1)\r\n localStorage.setItem('savedPages', JSON.stringify(savedPages))\r\n button.classList.toggle('inactive')\r\n }\r\n\r\n //save page to saved pages if not already saved / save\r\n else {\r\n savedPages.push(pageId)\r\n localStorage.setItem('savedPages', JSON.stringify(savedPages))\r\n button.classList.toggle('inactive')\r\n }\r\n\r\n })\r\n })\r\n }\r\n\r\n}\r\n\r\nexport default serviceMenu;\r\n","/**\r\n * Service menu\r\n * Share by email\r\n */\r\n\r\nexport function serviceMenuShareByEmail() {\r\n // Check if the service menu exists before proceeding\r\n if (jQuery(\".service-menu\").length === 0) {\r\n return;\r\n }\r\n\r\n // Handle email share by link (mailto link)\r\n const emailShareButtons = document.querySelectorAll('.email-share-btn');\r\n\r\n if (emailShareButtons.length > 0) {\r\n emailShareButtons.forEach(button => {\r\n button.addEventListener(\"click\", () => {\r\n // Access the data attributes\r\n const subject = button.dataset.emailSubject || \"\"; // No default subject\r\n const linkText = button.dataset.emailLinkText || \"\"; // No default link text\r\n const body = button.dataset.emailBody || \"\"; // No default body text\r\n\r\n const pageUrl = window.location.href;\r\n\r\n // Construct the email body\r\n const fullBody = `${body}${body ? \"\\n\\n\" : \"\"}${linkText ? `${linkText} ` : \"\"}${pageUrl}`;\r\n\r\n // Open the default email client with subject and body pre-filled\r\n window.location.href = `mailto:?subject=${encodeURIComponent(subject)}&body=${encodeURIComponent(fullBody)}`;\r\n });\r\n });\r\n }\r\n}\r\n\r\nexport default serviceMenuShareByEmail;\r\n","/*\r\n ** Form elements\r\n ** JS help for custom form elements\r\n */\r\n\r\nexport function formElements() {\r\n\r\n\t// Select-checkboxes\r\n jQuery(document).on('click', '.select-checkboxes.dropdown .dropdown-toggle', function () {\r\n console.log('click dropdown-toggle');\r\n var $dropdown = jQuery(this).parent('.dropdown');\r\n var $menu = jQuery(this).siblings('.dropdown-menu');\r\n var isExpanded = jQuery(this).attr('aria-expanded') === 'true';\r\n\r\n // Toggle dropdown visibility\r\n if (isExpanded) {\r\n jQuery(this).attr('aria-expanded', 'false');\r\n $dropdown.removeClass('show');\r\n $menu.removeClass('show');\r\n } else {\r\n jQuery(this).attr('aria-expanded', 'true');\r\n $dropdown.addClass('show');\r\n $menu.addClass('show');\r\n \r\n // Check if dropdown needs to open downward on desktop\r\n if (!isMobileView()) {\r\n // Adjust position if it's too close to the top\r\n var menuOffset = $menu.offset().top;\r\n var viewportHeight = jQuery(window).height();\r\n var dropdownHeight = $menu.outerHeight();\r\n if (menuOffset + dropdownHeight > viewportHeight) {\r\n // $menu.css('top', 'auto'); // Reset top positioning\r\n // $menu.css('bottom', '0'); // Align the dropdown at the bottom\r\n } else {\r\n // $menu.css('bottom', ''); // Reset bottom positioning if enough space\r\n }\r\n }\r\n }\r\n\r\n // Prevent the event from bubbling\r\n event.stopPropagation();\r\n });\r\n\r\n // Close dropdown when clicking outside\r\n jQuery(document).on('click', function (event) {\r\n if (!jQuery(event.target).closest('.select-checkboxes.dropdown').length) {\r\n jQuery('.select-checkboxes.dropdown').each(function () {\r\n jQuery(this).removeClass('show');\r\n jQuery(this).find('.dropdown-menu').removeClass('show');\r\n jQuery(this).find('.dropdown-toggle').attr('aria-expanded', 'false');\r\n });\r\n }\r\n });\r\n\r\n // Mobile view check function\r\n function isMobileView() {\r\n return window.innerWidth <= 768; // You can adjust the breakpoint as needed\r\n }\r\n\r\n\tjQuery('.textarea.with-counterJS textarea').on('input', function () {\r\n\t\tvar maxlength = jQuery(this).attr('maxlength');\r\n\t\tvar currentLength = jQuery(this).val().length;\r\n\t\tlet minLength = jQuery(this).attr('minlength');\r\n\r\n\t\t// disable button and show warning for min length\r\nif (minLength !== undefined) {\r\n\tif (currentLength >= minLength) {\r\n\t\tjQuery(this).parent('.textarea.with-counterJS').find(jQuery('.invalid-feedback')).css('visibility', 'hidden');\r\n\t\tjQuery(this).parents('.feedback-banner__message').find(jQuery('.send-response')).removeAttr('disabled')\r\n\t} else {\r\n\t\tjQuery(this).parent('.textarea.with-counterJS').find(jQuery('.invalid-feedback')).css('visibility', 'visible');\r\n\t\tjQuery(this).parents('.feedback-banner__message').find(jQuery('.send-response')).attr('disabled', 'true')\r\n\t}\r\n}\r\n\r\n\r\n\t\tif (currentLength >= maxlength) {\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\tvar textareaContainer = jQuery(this).parent('.textarea.with-counterJS');\r\n\t\tvar currentLenghtContainer = textareaContainer.find(\r\n\t\t\t'.textarea-counter__currentlength p'\r\n\t\t);\r\n\t\tcurrentLenghtContainer.text(currentLength);\r\n\t});\r\n}\r\n\r\nexport default formElements;\r\n","/**\r\n * Service menu\r\n */\r\n\r\nexport function sideMenu() {\r\n if (jQuery('.side-menu').length < 0) {\r\n return;\r\n }\r\n\r\n //clone sidemenu into header - removed\r\n/* jQuery(window).on(\"load\", function () {\r\n if (this.matchMedia(\"(max-width: 991px)\").matches) {\r\n //const header = jQuery(\".header__megamenu-extended\");\r\n\r\n // Side menu is cloned into the header on mobile\r\n //jQuery(\".side-menu\").clone().insertAfter(\"header .navbar__megamenu-extended\");\r\n\r\n // Main padding same size as header - This overrides the padding set in the header.js file\r\n //var headerHeight = header.outerHeight();\r\n //jQuery('main').css(\"padding-top\", headerHeight);\r\n }\r\n }); */\r\n\r\n jQuery(document).off('click', '.sidemenu__dropdown .dropdown__togglers .dropdown-toggle');\r\n jQuery(document).on('click', '.sidemenu__dropdown .dropdown__togglers .dropdown-toggle', function (e) {\r\n\r\n var $this = jQuery(this);\r\n var $thisDropdown = $this.parent('.dropdown__togglers').parent('.dropdown__list-item');\r\n\r\n if($this.hasClass('show')) {\r\n\r\n $this.removeClass(\"show\");\r\n // $this.attr(\"aria-expanded\", \"false\");\r\n\r\n $thisDropdown.removeClass('show');\r\n $this.siblings('.side-menu__toggle').removeClass('show');\r\n\r\n // $thisDropdown.children('.dropdown-menu').stop().slideUp('show');\r\n $thisDropdown.children('.dropdown-menu').removeClass('show');\r\n } else {\r\n\r\n $this.addClass(\"show\");\r\n // $this.attr(\"aria-expanded\", \"true\");\r\n\r\n $thisDropdown.addClass('show');\r\n $this.siblings('.side-menu__toggle').addClass('show');\r\n\r\n // $thisDropdown.children('.dropdown-menu').stop().slideDown('show');\r\n $thisDropdown.children('.dropdown-menu').addClass('show');\r\n\r\n }\r\n });\r\n\r\n function toggleMobileMenu(e) {\r\n e.preventDefault();\r\n\r\n jQuery('.header__megamenu-extended__search-bar').slideUp();\r\n jQuery('.side-menu').toggleClass('show');\r\n jQuery(this).toggleClass('show');\r\n // jQuery(\"body\").toggleClass(\"position-fixed\");\r\n\r\n if (jQuery(this).hasClass('show')) {\r\n jQuery(this).attr(\"aria-expanded\", \"true\");\r\n } else {\r\n jQuery(this).attr(\"aria-expanded\", \"false\");\r\n }\r\n }\r\n\r\n jQuery(window).on(\"load\", function () {\r\n // Mobile\r\n if (window.matchMedia(\"(max-width: 991px)\").matches) {\r\n jQuery('.side-menu__toggle-mobile').on('click', toggleMobileMenu);\r\n }\r\n });\r\n\r\n jQuery(window).on(\"resize\", function () {\r\n // Mobile\r\n if (window.matchMedia(\"(max-width: 991px)\").matches) {\r\n jQuery('.side-menu__toggle-mobile').off('click', toggleMobileMenu);\r\n jQuery('.side-menu__toggle-mobile').on('click', toggleMobileMenu);\r\n } else {\r\n // If not in mobile mode, remove the event listener\r\n jQuery('.side-menu__toggle-mobile').off('click', toggleMobileMenu);\r\n }\r\n });\r\n}\r\n\r\nexport default sideMenu;\r\n","/**\r\n * Side box counter animation\r\n */\r\n\r\nexport function counterAnimation() {\r\n if (jQuery('.side-boxes__counter').length < 0) {\r\n return;\r\n }\r\n\r\n //each, prop, animate, math, text\r\n\r\n// .animate( properties [, duration ] [, easing ] [, callback ] )\r\n// \"swing\" - moves slower at the beginning/end, but faster in the middle\r\n// \"linear\" - moves in a constant speed\r\n// step : A function to be called after each step of the animation. step takes: now and fx.\r\n// jQuery(selector).prop(name,value)\r\n\r\n // jQuery('.count').each(function() {\r\n\r\n // jQuery(this).prop('counter', -1).animate({\r\n\r\n // counter: jQuery(this).text()\r\n\r\n // }, {\r\n\r\n // duration: 2500,\r\n\r\n // easing: 'swing',\r\n\r\n // step: function(now) {\r\n\r\n // jQuery(this).text(Math.ceil(now));\r\n // }\r\n // });\r\n // });\r\n\r\n\r\n}\r\n\r\nexport default counterAnimation;\r\n","/**\r\n * Modal edit\r\n */\r\n\r\nexport function modalPopup() {\r\n if (jQuery(\".modal-popup\").length == 0) {\r\n\t\treturn;\r\n }\r\n\r\n jQuery('#editLinksForm').validator();\r\n\r\n jQuery(\".btn__modal-popup\").on(\"click\", function (e) {\r\n e.preventDefault();\r\n var $dataId = jQuery(this).attr(\"data-id\");\r\n\r\n jQuery('.modal-popup').each(function (i, item) {\r\n var $id = jQuery(item).attr(\"id\");\r\n\r\n if ($dataId === $id) {\r\n jQuery('#' + $dataId).modal(\"show\");\r\n }\r\n })\r\n\t});\r\n\r\n // Close modal when close btns are clicked\r\n // jQuery(\"button.close\").on(\"click\", function () {\r\n // setTimeout(function () {\r\n\t// \t\tjQuery('.subscription-body').css(\"margin-top\", \"0px\");\r\n\t// \t\tjQuery('.subscription-body').removeClass(\"modal-body__hidden\");\r\n\t// \t\tjQuery('.message-body').addClass(\"modal-body__hidden\")\r\n // }, 1000);\r\n // });\r\n\r\n}\r\n\r\nexport default modalPopup;\r\n","/**\r\n * Tab list scrollable\r\n */\r\n\r\nexport function tabListScrollable() {\r\n if (jQuery('.tab-list--scrollable').length < 0) {\r\n return;\r\n }\r\n\r\n // Web accessibility\r\n jQuery(document).off('click', '.tab-list--scrollable .js-tabs a');\r\n jQuery(document).on('click', '.tab-list--scrollable .js-tabs a', function (e) {\r\n jQuery('.tab-list--scrollable .js-tabs a').attr(\"aria-expanded\", \"false\");\r\n\r\n if (jQuery(this).hasClass(\"active\")) {\r\n jQuery(this).attr(\"aria-expanded\", \"true\");\r\n }\r\n });\r\n\r\n}\r\n\r\nexport default tabListScrollable;\r\n","/*\r\n** Video background\r\n*/\r\n\r\nexport function videoBackground() {\r\n // jQuery(\".background-video video\").controls = false;\r\n\r\n jQuery(\".background-video video, button.background-video__btn\").click(function () {\r\n\r\n if (!jQuery(this).hasClass('background-video__btn')) {\r\n var video = this;\r\n var playBtn = jQuery(this).siblings('button.background-video__btn');\r\n\r\n if (video.paused) {\r\n video.play();\r\n playBtn.removeClass('paused');\r\n playBtn.attr('aria-label', 'Stop afspilning af decorativ video');\r\n } else {\r\n video.pause();\r\n playBtn.addClass('paused');\r\n playBtn.attr('aria-label', 'Start afspilning af decorativ video');\r\n }\r\n } else {\r\n video = jQuery(this).siblings('video');\r\n jQuery(this).addClass('paused');\r\n\r\n if (video[0].paused) {\r\n video[0].play();\r\n jQuery(this).removeClass('paused');\r\n playBtn.attr('aria-label', 'Stop afspilning af decorativ video');\r\n } else {\r\n video[0].pause();\r\n jQuery(this).addClass('paused');\r\n playBtn.attr('aria-label', 'Start afspilning af decorativ video');\r\n }\r\n }\r\n });\r\n\r\n}\r\n\r\nexport default videoBackground;\r\n","export function cludoSearch() {\r\n var accordion = jQuery('.cludo__filter-list');\r\n\r\n // Mobile only\r\n if (window.matchMedia(\"(max-width: 991px)\").matches) {\r\n\r\n if (accordion.length > 0) {\r\n accordion = (function () {\r\n // var $accordion = jQuery('.js-info-box__links__icon');\r\n var $accordion_item = jQuery('.cludo__filter-list');\r\n var $accordion_header = jQuery('.cludo__filter-list__title__toggle');\r\n var $accordion_body = jQuery('.cludo__filter-list__content');\r\n\r\n // default settings\r\n var settings = {\r\n // animation speed\r\n speed: 400,\r\n // close all other accordion items if true\r\n oneOpen: false\r\n };\r\n\r\n return {\r\n // pass configurable object literal\r\n init: function ($settings) {\r\n $accordion_header.off('click');\r\n $accordion_header.on('click', function (e) {\r\n e.preventDefault();\r\n accordion.toggle(jQuery(this));\r\n });\r\n\r\n $.extend(settings, $settings);\r\n\r\n // reveal the active accordion bodies\r\n jQuery('.cludo__filter-list.active').find('> .cludo__filter-list__content').show();\r\n },\r\n\r\n toggle: function ($this) {\r\n // show/hide the clicked accordion item\r\n $this.attr(\"aria-expanded\", \"false\");\r\n $this.closest($accordion_item).toggleClass('active');\r\n $this.closest($accordion_item).find($accordion_body).stop().slideToggle(settings.speed);\r\n\r\n if ($this.closest($accordion_item).hasClass('active')) {\r\n $this.attr(\"aria-expanded\", \"true\");\r\n }\r\n },\r\n\r\n destroy: function () {\r\n $accordion_header.off('click');\r\n\r\n // styling\r\n $accordion_item.find('> .cludo__filter-list__content').hide();\r\n $accordion_item.removeClass('active');\r\n $accordion_item.find('> .cludo__filter-list__content').css(\"height\", \"auto\");\r\n $accordion_item.find('> .cludo__filter-list__content').show();\r\n }\r\n }\r\n })();\r\n\r\n var viewportWidth = jQuery(window).width();\r\n\r\n jQuery(window).on(\"load resize\", function () {\r\n\r\n if (this.matchMedia(\"(max-width: 991px)\").matches) {\r\n accordion.init({\r\n speed: 300,\r\n oneOpen: true\r\n });\r\n }\r\n\r\n if (this.matchMedia(\"(min-width: 991px)\").matches) {\r\n accordion.destroy();\r\n }\r\n\r\n });\r\n\r\n }\r\n }\r\n\r\n}\r\n\r\nexport default cludoSearch;\r\n","/**\r\n * Three column carousel - carousel on tablet down\r\n * https://owlcarousel2.github.io/\r\n */\r\n\r\nimport 'imagesloaded';\r\nimport 'masonry-layout/masonry.js';\r\nimport 'viewerjs/dist/viewer.css';\r\nimport Viewer from 'viewerjs';\r\n\r\nexport function imageGallery() {\r\n\r\n if (jQuery(\".image-gallery\").length == 0) {\r\n\t\treturn;\r\n }\r\n\r\n jQuery('.image-gallery').imagesLoaded(function(){\r\n jQuery('.image-gallery').masonry({\r\n itemSelector: '.image-gallery__item',\r\n horizontalOrder: true,\r\n percentPosition: true\r\n });\r\n });\r\n\r\n var imageGallery = jQuery(\".image-gallery\");\r\n imageGallery.each(function(index, element) {\r\n\r\n new Viewer(element, {\r\n backdrop: true,\r\n button:true,\r\n inheritedAttributes: ['data-caption'],\r\n title: function(image) {\r\n var imgCaption = image.getAttribute('data-caption')\r\n return imgCaption;\r\n },\r\n url: function(image){\r\n return image.getAttribute('data-src-viewer');\r\n },\r\n toolbar: {\r\n zoomIn: 0,\r\n zoomOut: 0,\r\n oneToOne: 0,\r\n reset: 0,\r\n prev: 1,\r\n play: {\r\n show: 0,\r\n },\r\n next: 1,\r\n rotateLeft: 0,\r\n rotateRight: 0,\r\n flipHorizontal: 0,\r\n flipVertical: 0,\r\n },\r\n transition: false\r\n })\r\n });\r\n}\r\n\r\nexport default imageGallery;\r\n","/**\r\n * Chat\r\n */\r\n\r\nexport function chat() {\r\n\tif(document.querySelector('.chat')) {\r\n\t\t// const maxHeightContainer = jQuery(\".chat-wall--max-height-container\");\r\n\t\t// const windowInnerHeight = window.innerHeight;\r\n\t\t// const header = jQuery(\".header__megamenu-extended\");\r\n\t\t// const headerHeight = header.outerHeight();\r\n\r\n\t\t// //Toggle comments\r\n\t\t// //Comment button\r\n\t\t// const commentBtnElements = document.querySelectorAll('.js-button-comment');\r\n\t\t// commentBtnElements.forEach((btn) => {\r\n\t\t// \tconst commentsContainer = btn.parentNode.parentNode.querySelector('.chat__feed__item__comments');\r\n\r\n\t\t// \tbtn.addEventListener('click', () => {\r\n\t\t// \t\tif(commentsContainer.classList.contains('collapsed')){\r\n\t\t// \t\t\tcommentsContainer.classList.remove('collapsed')\r\n\t\t// \t\t\tcommentsContainer.querySelectorAll('input')[Array.length - 1].focus();\r\n\t\t// \t\t} else {\r\n\t\t// \t\t\tcommentsContainer.classList.add('collapsed')\r\n\t\t// \t\t}\r\n\r\n\t\t// \t})\r\n\t\t// })\r\n\r\n\t\t// // Get the content editable

          element\r\n\t\t// const editorContainer = document.querySelector('#editor-container');\r\n\t\t// const chatPostContainer = document.querySelector('.chat__post__form--container')\r\n\r\n\t\t// // Add a focus event listener to the

          element\r\n\t\t// editorContainer.addEventListener('focusin', function() {\r\n\t\t// \tchatPostContainer.classList.remove('collapsed')\r\n\t\t// \tsetTimeout(function(){\r\n\t\t// \t\tchatPostContainer.style.overflow = 'visible'\r\n\t\t// \t}, 200)\r\n\r\n\t\t// });\r\n\r\n\t\t// //add close functionality to button\r\n\t\t// const closeBtnEelement = document.querySelector('.chat__post__form--close-btn')\r\n\t\t// // console.log(closeBtnEelement)\r\n\t\t// if(closeBtnEelement != undefined) {\r\n\t\t// \tcloseBtnEelement.addEventListener('click', function(){\r\n\t\t// \t\tchatPostContainer.classList.add('collapsed')\r\n\t\t// \t\tchatPostContainer.style.overflow = 'hidden'\r\n\t\t// \t})\r\n\t\t// }\r\n\r\n\t\t// jQuery(document).ready(function () {\r\n\t\t// \tjQuery('button.chat-dropdown-toggle').on('click', function () {\r\n\t\t// \t\tjQuery(this).toggleClass('show');\r\n\t\t// \t\tjQuery(this).siblings(' .chat-dropdown-menu').toggleClass('show');\r\n\t\t// \t});\r\n\r\n\t\t// \t// Close filter selection on click outside toggle selection\r\n\t\t// \tjQuery(document).mouseup(function(e) {\r\n\t\t// \t\tvar container = jQuery(\".chat-dropdown\");\r\n\r\n\t\t// \t\t// if the target of the click isn't the container\r\n\t\t// \t\tif (!container.is(e.target) && container.has(e.target).length === 0) {\r\n\t\t// \t\t\tif(jQuery('.chat-dropdown .chat-dropdown-toggle').hasClass('show')) {\r\n\t\t// \t\t\t\tjQuery('.chat-dropdown .chat-dropdown-toggle').removeClass('show');\r\n\t\t// \t\t\t\tjQuery('.chat-dropdown .chat-dropdown-menu').removeClass('show');\r\n\t\t// \t\t\t\tjQuery('.chat-dropdown .chat-dropdown-toggle').attr(\"aria-expanded\", \"false\");\r\n\t\t// \t\t\t}\r\n\t\t// \t\t}\r\n\t\t// \t});\r\n\r\n\t\t// \t// Chat-wall measure height for 'max-height-container'\r\n\t\t// \tif (window.matchMedia('(min-width: 1200px)').matches) {\r\n\t\t// \t\tsetMaxHeightContainer();\r\n\t\t// \t}\r\n\r\n\t\t// \tfunction setMaxHeightContainer() {\r\n\t\t// \t\tif(maxHeightContainer.length > 0) {\r\n\t\t// \t\t\tjQuery(window).on( 'scroll', function(){\r\n\t\t// \t\t\t\tif (jQuery(window).scrollTop() < 800){\r\n\t\t// \t\t\t\t\tvar scrollTop = jQuery(window).scrollTop(),\r\n\t\t// \t\t\t\t\t\t\telementOffset = maxHeightContainer.offset().top,\r\n\t\t// \t\t\t\t\t\t\tdistance = (elementOffset - scrollTop);\r\n\r\n\t\t// \t\t\t\t\tmaxHeightContainer.css({\"maxHeight\": windowInnerHeight - distance - 30+\"px\"});\r\n\t\t// \t\t\t\t}\r\n\t\t// \t\t\t});\r\n\t\t// \t\t}\r\n\t\t// \t}\r\n\t\t// });\r\n\t}\r\n}\r\n\r\nexport default chat;\r\n","export default function onShowMoreCard() {\r\n\tconst cardComment = document.querySelectorAll('.js-card__comment');\r\n\r\n\tconst disableFocusable = (element) => {\r\n\t\telement.setAttribute('tabindex', '-1');\r\n\t};\r\n\r\n\tconst enableFocusable = (element) => {\r\n\t\telement.removeAttribute('tabindex');\r\n\t};\r\n\r\n\tconst handleFocusables = (focusables, content) => {\r\n\t\tlet isCollapsed = content.classList.contains('closed');\r\n\r\n\t\tfocusables.forEach((focusable) => {\r\n\t\t\tisCollapsed ? disableFocusable(focusable) : enableFocusable(focusable);\r\n\t\t});\r\n\t};\r\n\r\n\tcardComment.forEach((card) => {\r\n\t\tconst elementButton = card.querySelector('.btn-toggle');\r\n\t\tconst content = card.querySelector('.js-card__comment__content');\r\n\t\tconst focusables = Array.from(card.getElementsByTagName('a'));\r\n\r\n\t\thandleFocusables(focusables, content);\r\n\r\n\t\telementButton.addEventListener('click', () => {\r\n\t\t\thandleFocusables(focusables, content);\r\n\t\t});\r\n\r\n\t});\r\n}\r\n","// var moment = require('moment'); // require\r\nexport function kultunaut() {\r\n if (jQuery(\".kultur-detailedevents\").length > 0) {\r\n getdetailedevents();\r\n }\r\n\r\n if (jQuery(\".kultur-events\").length > 0) {\r\n getevents();\r\n }\r\n}\r\n\r\nfunction getevents() {\r\n var feedList = jQuery(\".kultur-events\");\r\n\r\n feedList.each(function (index) {\r\n var current = jQuery(this).data(\"eventlist\");\r\n var requestData = {\r\n \"feed\": jQuery(this).data(\"feed\"),\r\n \"amount\": jQuery(this).data(\"amount\")\r\n }\r\n\r\n $.get('/umbraco/surface/Kultunaut/GetEvents', requestData, function (data) {\r\n var newData = data.trim();\r\n jQuery(\".kultur-events[data-eventlist='\" + current + \"']\").prepend(newData).hide().fadeIn(600);\r\n\r\n }).fail(function () {\r\n console.log(\"Error in loaded comments\")\r\n });\r\n });\r\n}\r\n\r\nfunction getdetailedevents() {\r\n var feedList = jQuery(\".kultur-detailedevents\");\r\n feedList.each(function (index) {\r\n var current = jQuery(this).data(\"eventlist\");\r\n var requestData = {\r\n \"feed\": jQuery(this).data(\"feed\"),\r\n \"amount\": jQuery(this).data(\"amount\")\r\n }\r\n \r\n $.get('/umbraco/surface/Kultunaut/GetDetailedEvents', requestData, function (data) {\r\n var newData = data.trim();\r\n jQuery(\".kultur-detailedevents[data-eventlist='\" + current + \"']\").prepend(newData).hide().fadeIn(600);\r\n\r\n }).fail(function () {\r\n console.log(\"Error in loaded comments\")\r\n });\r\n });\r\n}\r\n\r\nexport default kultunaut;\r\n","export function kultunautMostPopular() {\r\n\tif (jQuery(\".kultur-popularevents\").length > 0) {\r\n\t\tgetPopularEvents();\r\n\t}\r\n}\r\n\r\nfunction getPopularEvents() {\r\n\tvar feedList = jQuery(\".kultur-popularevents\");\r\n\tfeedList.each(function (index) {\r\n\t\tvar current = jQuery(this).data(\"eventlist\");\r\n\t\tvar requestData = {\r\n\t\t\t\"feed\": jQuery(this).data(\"feed\"),\r\n\t\t}\r\n\t\t$.get('/umbraco/surface/Kultunaut/GetTopEvent', requestData, function (data) {\r\n\t\t\tvar newData = data.trim();\r\n\t\t\tjQuery(\".kultur-popularevents[data-eventlist='\" + current + \"']\").html(newData).hide().fadeIn(600);\r\n\t\t}).fail(function () {\r\n\t\t\tconsole.log(\"Error in loaded events\")\r\n\t\t});\r\n\t});\r\n\r\n}\r\n\r\n\r\nexport default kultunautMostPopular;\r\n","export function dropdownMdDown() {\r\n\r\n\tif (jQuery(\".dropdown--md-down\").length < 0) {\r\n\t\treturn;\r\n }\r\n\r\n jQuery(window).on(\"load resize\", function () {\r\n var $dropdownToggle = jQuery(\".dropdown--md-down .dropdown--md-down-toggle\");\r\n var $dropdownMenu = jQuery('.dropdown--md-down .dropdown--md-down-menu');\r\n\r\n // Tablet down\r\n if (this.matchMedia(\"(max-width: 991.98px)\").matches) {\r\n $dropdownToggle.removeAttr(\"disabled\");\r\n $dropdownToggle.attr(\"aria-expanded\", \"false\");\r\n\r\n // Tablet dropdowns - show\r\n jQuery(document).off('click', '.dropdown--md-down .dropdown--md-down-toggle');\r\n jQuery(document).on('click', '.dropdown--md-down .dropdown--md-down-toggle', function () {\r\n jQuery(this).attr(\"aria-expanded\", \"true\");\r\n jQuery(this).toggleClass('show');\r\n jQuery(this).parents('.dropdown--md-down').toggleClass('show');\r\n jQuery(this).siblings('.dropdown--md-down-menu').slideToggle('show');\r\n // jQuery('body').toggleClass('dropdown--md-down--open');\r\n });\r\n\r\n // Tablet dropdowns - close\r\n jQuery(document).off('click', '.dropdown--md-down .show');\r\n jQuery(document).on('click', '.dropdown--md-down .show', function () {\r\n jQuery(this).attr(\"aria-expanded\", \"false\");\r\n jQuery(this).removeClass('show');\r\n jQuery(this).children('.dropdown--md-down-toggle').removeClass('show');\r\n jQuery(this).children('.dropdown--md-down-menu').removeClass('show');\r\n // jQuery('body').removeClass('dropdown--md-down--open');\r\n });\r\n\r\n // Tablet down - disable dropdowns on click outside\r\n // document.addEventListener(\r\n // \"click\",\r\n // (event) => {\r\n // let target = event.target;\r\n // // diable button, ready to open input on click.\r\n // if (!target.closest(\".dropdown--md-down\")) {\r\n // $dropdownToggle.removeClass('show');\r\n // $dropdownMenu.removeClass('show');\r\n // $dropdownToggle.removeAttr(\"aria-expanded\");\r\n // $dropdownMenu.css(\"display\", \"\");\r\n // // jQuery('body').removeClass('dropdown--md-down--open');\r\n // }\r\n // },\r\n // false\r\n // );\r\n } else {\r\n $dropdownToggle.attr(\"disabled\");\r\n jQuery(document).off('click', '.dropdown--md-down .dropdown--md-down-toggle');\r\n jQuery(document).off('click', '.dropdown--md-down .show');\r\n }\r\n\r\n if (this.matchMedia(\"(min-width: 991.98px)\").matches) {\r\n // Tablet up - disable dropdowns\r\n $dropdownToggle.attr(\"disabled\", \"disabled\");\r\n $dropdownToggle.removeAttr(\"aria-expanded\");\r\n $dropdownMenu.css(\"display\", \"\");\r\n $dropdownToggle.removeClass('show');\r\n\r\n if (jQuery('.dropdown--md-down').hasClass('.show')) {\r\n $dropdownToggle.removeClass('show');\r\n $dropdownMenu.removeClass('show');\r\n // jQuery('body').removeClass('dropdown--md-down--open');\r\n }\r\n }\r\n });\r\n\r\n}\r\n\r\nexport default dropdownMdDown;\r\n","import checkHolidays from \"../../table-hours/checkHolidays\";\r\n\r\nexport function bannerHours(){\r\n var currentday = new Date();//\"2022-12-25 12:00:00\"\r\n if(document.querySelector('.banner__hours')){\r\n let dayCols = document.querySelectorAll('.js-banner__hours__days')\r\n const date = new Date(currentday);\r\n const dayNumber = date.getDay();\r\n const holidays = checkHolidays(date)\r\n\r\n //function that returns true or false to whether current day is within the custom closing period. Takes two dates as argument in format YYYY-MM-DD\r\n function checkCustomCloseDays(start, end){\r\n let startDay = new Date(`${start}T00:00:01`)\r\n let endDay = new Date(`${end}T23:59:59`)\r\n let today = new Date();\r\n let startTimestamp = startDay.getTime()\r\n let endTimestamp = endDay.getTime()\r\n let currentTimestamp = today.getTime()\r\n if (currentTimestamp >= startTimestamp && currentTimestamp <= endTimestamp){ return true\r\n } else { return false }\r\n }\r\n\r\n //function that sets the strings for custom closed days\r\n function customCloseDays(day, start, end, indicator){\r\n let months = [' jan.', ' feb.', ' mar.', ' apr.', ' maj', ' jun.', ' jul.', ' aug.', ' sep.', ' okt.', ' nov.', ' dec.'];\r\n let endDate = new Date(end);\r\n let startDate = new Date(start);\r\n let spans = day.children;\r\n\r\n let endDateFormatted = `${endDate.getDate()}. ${months[endDate.getMonth()]} ${endDate.getFullYear()}`\r\n let startDateFormatted = `${startDate.getDate()}. ${months[startDate.getMonth()]} ${startDate.getFullYear()}`\r\n\r\n spans[0].textContent = 'Lukket'\r\n spans[0].classList.add('closed');\r\n if(spans[1]){\r\n for(let i = 1; i < spans.length; i++){\r\n spans[i].classList.add('hidden')\r\n }\r\n }\r\n indicator.classList.add('hidden')\r\n day.parentElement.querySelector('.js-info-close-dates').classList.remove('hidden');\r\n //check if only closed on one day\r\n if(start == end || !end){\r\n let spans = day.parentElement.querySelector('.js-info-close-dates').children\r\n spans[1].classList.add('hidden')\r\n spans[2].classList.add('hidden')\r\n }\r\n day.parentElement.querySelector('.js-close-start').textContent = startDateFormatted\r\n day.parentElement.querySelector('.js-close-end').textContent = endDateFormatted\r\n }\r\n\r\n //function that returns next open day and time as a string. Returns false if next open day is a custom closed day\r\n function FindNextOpenDay(day, dayNumber, closedDay){\r\n let weekdays = ['Søndag','Mandag', 'Tirsdag', 'Onsdag', 'Torsdag', 'Fredag', 'Lørdag']\r\n let nextOpenDay;\r\n let nextOpenDayNumber;\r\n let i = dayNumber;\r\n let tomorrowStatus;\r\n let counter = 0\r\n let nextOpenDayDate = false\r\n let today = new Date(currentday)\r\n\r\n //finds next open day\r\n i++\r\n if(i > 6){i = 0}\r\n //run loop while day is holiday or day contains 'closed' class (and counter is less than 7, to prevent infinite loop)\r\n while((checkHolidays(today).isHoliday || day.parentNode.querySelector(`.js-day-${i}`).getElementsByTagName('span')[0].classList.contains('closed')) && counter <= 7){\r\n today.setDate(today.getDate() + 1);\r\n i++;\r\n counter++;\r\n if(i > 6){\r\n i = 0\r\n }\r\n }\r\n\r\n //check if next open day is custom close day\r\n if(counter == 0){\r\n today.setDate(today.getDate() + 1);\r\n nextOpenDayDate = today.toISOString().substring(0, 10);\r\n } else {\r\n nextOpenDayDate = today.toISOString().substring(0, 10);\r\n }\r\n let isClosedDay = nextOpenDayDate == closedDay\r\n\r\n \r\n //construct strings with default next open day and time\r\n\r\n nextOpenDay = day.parentNode.querySelector(`.js-day-${i}`)\r\n nextOpenDayNumber = parseInt(nextOpenDay.classList[1].replace('js-day-', ''))\r\n\r\n //if no open times are set, return blank string (prevent infinite loop)\r\n if(counter > 6){ return ' '}\r\n\r\n //if next open day is a custom closed day\r\n if(isClosedDay){\r\n return false\r\n }\r\n\r\n //default, return next open day and time\r\n return `${weekdays[nextOpenDayNumber]} kl. ${nextOpenDay.getElementsByTagName('span')[0].textContent}`\r\n }\r\n \r\n dayCols.forEach((col) => {\r\n let days = col.querySelectorAll('.info-time');\r\n \r\n days.forEach(day => {\r\n if(day.classList.contains(`js-day-${dayNumber}`)){\r\n day.classList.remove('hidden')\r\n \r\n if(day.getElementsByTagName('span')[0].classList){\r\n \r\n let statusIndicatorText = day.parentElement.querySelector('.info-status')\r\n let statusIndicator = day.parentElement.querySelector('.info-status-indicator')\r\n \r\n let currentDayOpenTime = day.querySelector('.open') ? parseFloat(day.querySelector('.open').textContent.replace(\":\",\".\")) : false;\r\n let currentDayClosingTime = day.querySelector('.close') ? parseFloat(day.querySelector('.close').textContent.replace(\":\",\".\")) : false;\r\n let currentDayOpenTimeTwo = day.querySelector('.openTwo') ? parseFloat(day.querySelector('.openTwo').textContent.replace(\":\",\".\")) : false;\r\n let currentDayClosingTimeTwo = day.querySelector('.closeTwo') ? parseFloat(day.querySelector('.closeTwo').textContent.replace(\":\",\".\")) : false;\r\n let busyTimeStart = day.querySelector('.js-busy-start') ? parseFloat(day.querySelector('.js-busy-start').textContent.replace(\":\",\".\")) : false;\r\n let busyTimeEnd = day.querySelector('.js-busy-end') ? parseFloat(day.querySelector('.js-busy-end').textContent.replace(\":\",\".\")) : false;\r\n \r\n let closedDayStart = day.parentElement.querySelector('.js-close-start') ? day.parentElement.querySelector('.js-close-start').textContent.replace(\":\",\".\") : false\r\n let closedDayEnd = day.parentElement.querySelector('.js-close-end') ? day.parentElement.querySelector('.js-close-end').textContent.replace(\":\",\".\") : false\r\n \r\n let currentTime = parseFloat(`${date.getHours()}.${date.getMinutes()}`)\r\n\r\n //check if within custom close days\r\n if(closedDayStart && checkCustomCloseDays(closedDayStart, closedDayEnd)){\r\n customCloseDays(day, closedDayStart, closedDayEnd, statusIndicatorText)\r\n }\r\n \r\n //check if closed\r\n else if(day.getElementsByTagName('span')[0].classList.contains('closed')){\r\n var NextOpenDay = FindNextOpenDay(day, dayNumber, closedDayStart)\r\n statusIndicator.classList.add('hidden')\r\n if(!NextOpenDay){ customCloseDays(day, closedDayStart, closedDayEnd, statusIndicatorText) }\r\n else {\r\n statusIndicatorText.textContent = NextOpenDay;\r\n }\r\n if(NextOpenDay == \" \") {\r\n statusIndicatorText.classList.add('hidden')\r\n busyTimeEnd.classList.add('hidden')\r\n }\r\n } \r\n //check if holiday\r\n else if(holidays.isHoliday){\r\n let spans = day.children;\r\n spans[1].classList.add('closed');\r\n spans[1].textContent = 'Lukket pga. helligdag, åbner igen'\r\n \r\n if(spans[1]){\r\n spans[0].classList.add('hidden')\r\n spans[2].classList.add('hidden')\r\n }\r\n if(currentDayOpenTimeTwo){\r\n spans[3].classList.add('hidden')\r\n spans[4].classList.add('hidden')\r\n spans[5].classList.add('hidden')\r\n spans[6].classList.add('hidden')\r\n }\r\n\r\n statusIndicator.classList.add('hidden')\r\n if(FindNextOpenDay(day, dayNumber, closedDayStart)){\r\n statusIndicatorText.textContent = FindNextOpenDay(day, dayNumber, closedDayStart)\r\n } else { FindNextOpenDay(day, dayNumber, closedDayStart) } \r\n } \r\n \r\n //check if current time is within first opening hours\r\n else if(currentDayOpenTime && (currentTime > currentDayOpenTime && currentTime < currentDayClosingTime)){\r\n \r\n //check if within busy time\r\n if(busyTimeStart && (currentTime > busyTimeStart && currentTime < busyTimeEnd)){\r\n statusIndicator.classList.add('busy')\r\n statusIndicatorText.classList.add('busy')\r\n day.parentElement.querySelector('.info-status-text').textContent = 'Åbent,'\r\n day.parentElement.querySelector('.info-status-busy').textContent = ` men travlt indtil kl. ${busyTimeEnd}`\r\n } else {\r\n\r\n //if open, outside busy time\r\n if(busyTimeStart){\r\n day.parentElement.querySelector('.info-status-busy').classList.add('hidden')\r\n //day.parentElement.querySelector('.js-busy-end').classList.add('hidden')\r\n statusIndicator.classList.add('open')\r\n\r\n //if no busy time set\r\n } else {\r\n day.parentElement.querySelector('.info-status-busy').classList.add('hidden')\r\n }\r\n statusIndicator.classList.add('open')\r\n statusIndicatorText.classList.add('open')\r\n }\r\n } \r\n\r\n // check if current time is within second opening hours \r\n else if(currentDayOpenTimeTwo && (currentTime > currentDayOpenTimeTwo && currentTime < currentDayClosingTimeTwo)){\r\n //check if within busy time\r\n if(busyTimeStart && (currentTime > busyTimeStart && currentTime < busyTimeEnd)){\r\n statusIndicator.classList.add('busy')\r\n statusIndicatorText.classList.add('busy')\r\n day.parentElement.querySelector('.info-status-text').textContent = 'Åbent,'\r\n day.parentElement.querySelector('.info-status-busy').textContent = ` men travlt indtil kl. ${busyTimeEnd}`\r\n } else {\r\n\r\n //if open, outside busy time\r\n if(busyTimeStart){\r\n day.parentElement.querySelector('.info-status-busy').classList.add('hidden')\r\n //day.parentElement.querySelector('.js-busy-end').classList.add('hidden')\r\n statusIndicator.classList.add('open')\r\n\r\n //if no busy time set\r\n } else {\r\n day.parentElement.querySelector('.info-status-busy').classList.add('hidden')\r\n }\r\n statusIndicator.classList.add('open')\r\n statusIndicatorText.classList.add('open')\r\n }\r\n }\r\n \r\n //check if before opening hours (opens later today)\r\n else if (currentDayOpenTime && (currentTime < currentDayOpenTime)) {\r\n statusIndicator.classList.add('closed')\r\n day.parentElement.querySelector('.info-status-text').textContent = `Lukket `\r\n day.parentElement.querySelector('.info-status-busy').textContent = `| Åbner kl. ${day.querySelector('.open').textContent}`\r\n day.parentElement.querySelector('.info-status-text').classList.add('closed')\r\n day.parentElement.querySelector('.info-status-busy').classList.add('closed')\r\n //day.parentElement.querySelector('.js-busy-end').classList.add('hidden')\r\n }\r\n //check if before second opening hours (opens later today)\r\n else if (currentDayOpenTimeTwo && (currentTime < currentDayOpenTimeTwo)) {\r\n statusIndicator.classList.add('closed')\r\n day.parentElement.querySelector('.info-status-text').textContent = `Lukket `\r\n day.parentElement.querySelector('.info-status-busy').textContent = `| Åbner kl. ${day.querySelector('.openTwo').textContent}`\r\n day.parentElement.querySelector('.info-status-text').classList.add('closed')\r\n day.parentElement.querySelector('.info-status-busy').classList.add('closed')\r\n //day.parentElement.querySelector('.js-busy-end').classList.add('hidden')\r\n }\r\n // else, closed\r\n else {\r\n\r\n let spans = day.children;\r\n let nextOpenDay = FindNextOpenDay(day, dayNumber, closedDayStart)\r\n if(nextOpenDay){\r\n spans[1].classList.add('closed');\r\n spans[1].textContent = 'Lukket, åbner igen'\r\n statusIndicatorText.textContent = nextOpenDay;\r\n if(spans[1]){\r\n spans[0].classList.add('hidden')\r\n spans[2].classList.add('hidden')\r\n }\r\n if(currentDayOpenTimeTwo){\r\n spans[3].classList.add('hidden')\r\n spans[4].classList.add('hidden')\r\n spans[5].classList.add('hidden')\r\n spans[6].classList.add('hidden')\r\n }\r\n } else {\r\n customCloseDays(day, closedDayStart, closedDayEnd, statusIndicatorText)\r\n }\r\n\r\n }\r\n\r\n }\r\n }\r\n })\r\n\r\n })\r\n\r\n }\r\n}\r\n\r\nexport default bannerHours\r\n","function breadcrumb() {\r\n\r\n\tif (jQuery('.dynamic-service-menu').length === 0) {\r\n\t\treturn\r\n\t}\r\n\r\n\tconst breadcrumbContainer = jQuery('.breadcrumb-container');\r\n\tconst articleWrapper = jQuery('.article-wrapper');\r\n\tconst serviceMenuElement = '

          ';\r\n\tlet noArticleServiceMenu;\r\n\tlet noBreadcrumbServiceMenu;\r\n\tlet breadcrumbServiceMenu = jQuery(breadcrumbContainer).find('.service-menu')[0];\r\n\tlet articleServiceMenu = jQuery(articleWrapper).find('.service-menu')[0];\r\n\r\n\tconst initialBreadcrumbServiceMenuItems = jQuery(breadcrumbServiceMenu).find(\r\n\t\t'.service-menu__item'\r\n\t);\r\n\tconst initialArticleServiceMenuItems = jQuery(articleServiceMenu).find(\r\n\t\t'.service-menu__item'\r\n\t);\r\n\r\n\t// used to insert a DOM element in relation to another element\r\n\tconst insertElement = (position, relationalElement, element) => {\r\n\t\tswitch (position) {\r\n\t\t\tcase 'before':\r\n\t\t\t\tjQuery(element).insertBefore(jQuery(relationalElement));\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'after':\r\n\t\t\t\tjQuery(element).insertAfter(jQuery(relationalElement));\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'append':\r\n\t\t\t\tjQuery(relationalElement).append(element);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'prepend':\r\n\t\t\t\tjQuery(relationalElement).prepend(element);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t};\r\n\r\n\r\n\t// Creates a breadcrumb service menu if it does not exist\r\n\tconst createBreadcumbServiceMenu = () => {\r\n\t\tnoBreadcrumbServiceMenu =\r\n\t\t\tjQuery(breadcrumbContainer).find('.service-menu')[0] === undefined;\r\n\r\n\t\tif (noBreadcrumbServiceMenu) {\r\n\t\t\tinsertElement('append', '.breadcrumb-container', serviceMenuElement);\r\n\r\n\t\t\t// Change variable to newly added element\r\n\t\t\tbreadcrumbServiceMenu = jQuery(breadcrumbContainer).find('.service-menu')[0];\r\n\t\t}\r\n\t};\r\n\r\n\t// Creates an article service menu if it does not exist\r\n\tconst createArticleServiceMenu = () => {\r\n\t\tnoArticleServiceMenu =\r\n\t\t\tjQuery(articleWrapper).find('.service-menu')[0] === undefined;\r\n\r\n\t\tif (noArticleServiceMenu) {\r\n\t\t\tinsertElement('append', '.service-menu-container', serviceMenuElement);\r\n\r\n\t\t\t// Change variable to newly added element\r\n\t\t\tarticleServiceMenu = jQuery(articleWrapper).find('.service-menu')[0];\r\n\t\t}\r\n\t};\r\n\r\n\tconst moveBreadCrumb = () => {\r\n\t\t//if tablet or mobile\r\n\t\tif (window.matchMedia('(max-width: 767px)').matches) {\r\n\t\t\tcreateArticleServiceMenu();\r\n\r\n\t\t\t// Gets the new service menu items of the article\r\n\t\t\tconst currentArticleServiceMenuItem = jQuery(articleServiceMenu).find(\r\n\t\t\t\t'.service-menu__item'\r\n\t\t\t);\r\n\r\n\t\t\t// If the service menu items length is unchanged, add the initial\r\n\t\t\t// breadcrumb items and remove the empty list\r\n\t\t\tif (\r\n\t\t\t\tcurrentArticleServiceMenuItem.length ===\r\n\t\t\t\tinitialArticleServiceMenuItems.length\r\n\t\t\t) {\r\n\t\t\t\tjQuery(articleServiceMenu).append(jQuery(initialBreadcrumbServiceMenuItems));\r\n\t\t\t\tjQuery(breadcrumbServiceMenu).remove();\r\n\t\t\t}\r\n\t\t//if desktop\r\n\t\t} else {\r\n\t\t\tcreateBreadcumbServiceMenu();\r\n\r\n\t\t\t// Gets the new service menu items of the breadcrumb\r\n\t\t\tconst currentBreadcrumbServiceMenuItem = jQuery(breadcrumbServiceMenu).find(\r\n\t\t\t\t'.service-menu__item'\r\n\t\t\t);\r\n\r\n\t\t\t// If the service menu list is empty, add the initial breadcrumb items\r\n\t\t\t// and remove service menu list, if it was initial empty\r\n\t\t\tif (currentBreadcrumbServiceMenuItem.length === 0) {\r\n\t\t\t\t//remove breadcrumb if init breadcrumb length is 0\r\n\t\t\t\tif(jQuery(initialBreadcrumbServiceMenuItems.length === 0)){\r\n\t\t\t\t\tjQuery(breadcrumbServiceMenu).remove()\r\n\t\t\t\t} else {\r\n\t\t\t\t\tjQuery(breadcrumbServiceMenu).append(jQuery(initialBreadcrumbServiceMenuItems));\r\n\t\t\t\t}\r\n\t\t\t\t//jQuery(breadcrumbServiceMenu).append(jQuery(initialBreadcrumbServiceMenuItems));\r\n\r\n\t\t\t\tif (initialArticleServiceMenuItems.length === 0) {\r\n\t\t\t\t\tjQuery(articleServiceMenu).remove();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tmoveBreadCrumb();\r\n\r\n\tjQuery(window).resize(function () {\r\n\t\tmoveBreadCrumb();\r\n\t});\r\n}\r\n\r\nexport default breadcrumb;\r\n","export function unsaveButton(){\r\n if(document.querySelector(\".js-unsave-button\")){\r\n\r\n const unsaveButtonElements = document.querySelectorAll('.js-unsave-button');\r\n\r\n unsaveButtonElements.forEach(button => {\r\n button.addEventListener('click', () => {\r\n //remove page from local storage array\r\n let savedPages = JSON.parse(localStorage.getItem('savedPages'));\r\n let pageId = button.getAttribute('data-page-id');\r\n savedPages.splice(savedPages.indexOf(pageId), 1)\r\n localStorage.setItem('savedPages', JSON.stringify(savedPages))\r\n\r\n //remove card from page\r\n let card = button.closest('.card__list--title-link');\r\n card.parentNode.removeChild(card);\r\n })\r\n })\r\n }\r\n}\r\n\r\nexport default unsaveButton;\r\n","import checkHolidays from \"./checkHolidays\";\r\n\r\nexport function tableHours() {\r\n if(document.querySelector('.js-table-hours')){\r\n \r\n const tablesNodelist = document.querySelectorAll('.js-table-hours')\r\n\t\tconst date = new Date();\r\n\t\tconst dayNumber = date.getDay();\r\n let counter = 0;\r\n const holidays = checkHolidays(date)\r\n\r\n //function that returns true or false to whether current day is within the custom closing period. Takes two dates as argument in format YYYY-MM-DD\r\n function checkCustomCloseDays(start, end){\r\n let startDay = new Date(`${start}T00:00:01`)\r\n let endDay = new Date(`${end}T23:59:59`)\r\n let today = new Date();\r\n let startTimestamp = startDay.getTime()\r\n let endTimestamp = endDay.getTime()\r\n let currentTimestamp = today.getTime()\r\n if (currentTimestamp >= startTimestamp && currentTimestamp <= endTimestamp){ return true\r\n } else { return false }\r\n }\r\n\r\n //function that sets the strings for custom closed days\r\n function customCloseDays(day, start, end, indicator){\r\n let months = [' jan.', ' feb.', ' mar.', ' apr.', ' maj', ' jun.', ' jul.', ' aug.', ' sep.', ' okt.', ' nov.', ' dec.'];\r\n let endDate = new Date(end);\r\n let startDate = new Date(start);\r\n\r\n let endDateFormatted = `${endDate.getDate()}. ${months[endDate.getMonth()]} ${endDate.getFullYear()}`\r\n let startDateFormatted = `${startDate.getDate()}. ${months[startDate.getMonth()]} ${startDate.getFullYear()}`\r\n\r\n //hides normal status message and displays closed status message\r\n day.parentNode.querySelector('.status').classList.add('hidden')\r\n indicator.classList.remove('hidden')\r\n\r\n day.parentElement.querySelector('.js-close-start').textContent = startDateFormatted\r\n day.parentElement.querySelector('.js-close-end').textContent = endDateFormatted\r\n\r\n //check if only closed on one day\r\n if(start == end || !end){\r\n let spans = day.parentElement.querySelector('.js-info-close-dates').children\r\n spans[3].classList.add('hidden')\r\n spans[4].classList.add('hidden')\r\n day.parentElement.querySelector('.js-close-start').textContent = `den ${startDateFormatted}`\r\n }\r\n }\r\n\r\n //Find next open day function, returns a string with day and opening time\r\n function FindNextOpenDay(day, dayNumber, closedDay){\r\n\r\n let weekdays = ['mandag', 'tirsdag', 'onsdag', 'torsdag', 'fredag', 'lørdag', 'søndag']\r\n let nextOpenDay;\r\n let nextOpenDayNumber;\r\n let i = dayNumber;\r\n let tomorrowStatus;\r\n let counter = 0;\r\n let nextOpenDayDate\r\n \r\n // get next open day\r\n const today = new Date()\r\n today.setDate(today.getDate() + 1)\r\n i++\r\n if(i > 6){i = 0}\r\n \r\n while((checkHolidays(today).isHoliday || day.parentNode.parentNode.querySelector(`.js-day-${i}`).parentNode.classList.contains('inactive')) && counter < 7){\r\n today.setDate(today.getDate() + 1);\r\n i++;\r\n counter++;\r\n if(i > 6){\r\n i = 0\r\n }\r\n } \r\n //check if next open day is custom close day\r\n nextOpenDayDate = today.toISOString().substring(0, 10);\r\n let isClosedDay = nextOpenDayDate == closedDay\r\n \r\n //if no holidays, find next open day\r\n/* else {\r\n do {\r\n i++;\r\n if(i >= 6){\r\n i = 1\r\n }\r\n counter++;\r\n tomorrowStatus = day.parentNode.parentNode.querySelector(`.js-day-${i}`).parentNode.classList\r\n }\r\n while(tomorrowStatus[0].includes('inactive') && counter < 7) \r\n } */\r\n \r\n nextOpenDay = day.parentNode.parentNode.querySelector(`.js-day-${i}`)\r\n nextOpenDayNumber = parseInt(nextOpenDay.classList[1].replace('js-day-', ''))\r\n if(nextOpenDayNumber == 0){ nextOpenDayNumber = 7 }\r\n if(counter > 6){ return ' ' }\r\n if(isClosedDay) { return false }\r\n return `Åbner ${weekdays[nextOpenDayNumber - 1]} kl. ${nextOpenDay.parentNode.querySelector('.open').textContent}`\r\n }\r\n\r\n // An array of each table with opening hours (corresponds to each week-overview/card)\r\n\r\n let tables = Array.prototype.slice.call(tablesNodelist,0)\r\n //loop over each table\r\n tables.forEach(table => {\r\n let tableDays = table.querySelectorAll('.day')\r\n //update table if there are holidays in the week (and day is not otherwise a closed day)\r\n if(holidays.holidaysInCurrentWeek.includes(true)){\r\n holidays.holidaysInCurrentWeek.forEach((item, index) => {\r\n if(item && tableDays[index].parentNode.classList.contains('active')){\r\n tableDays[index].parentElement.classList.add('inactive')\r\n tableDays[index].parentElement.classList.remove('active')\r\n tableDays[index].parentElement.querySelector('td').textContent = 'Helligdag'\r\n }\r\n })\r\n }\r\n \r\n //find which day is current day and set status message depending on time and parameters\r\n tableDays.forEach(day => {\r\n\r\n if(day.classList.contains(`js-day-${dayNumber}`) && table.parentNode.querySelector('.status')){\r\n //Time variables\r\n let currentDayOpenTime = day.parentNode.querySelector('.open') ? parseFloat(day.parentNode.querySelector('.open').textContent.replace(\":\", \".\")) : false;\r\n let currentDayClosingTime = day.parentNode.querySelector('.close') ? parseFloat(day.parentNode.querySelector('.close').textContent.replace(\":\", \".\")) : false;\r\n let currentDayOpenTimeTwo = day.parentNode.querySelector('.openTwo') ? parseFloat(day.parentNode.querySelector('.openTwo').textContent.replace(\":\", \".\")) : false;\r\n let currentDayClosingTimeTwo = day.parentNode.querySelector('.closeTwo') ? parseFloat(day.parentNode.querySelector('.closeTwo').textContent.replace(\":\", \".\")) : false;\r\n let busyTimeStart = day.parentNode.querySelector('.js-busy-start')? parseFloat(day.parentNode.querySelector('.js-busy-start').textContent.replace(\":\", \".\")) : false;\r\n let busyTimeEnd = day.parentNode.querySelector('.js-busy-end') ? parseFloat(day.parentNode.querySelector('.js-busy-end').textContent.replace(\":\", \".\")) : false;\r\n let currentTime = parseFloat(`${date.getHours()}.${date.getMinutes()}`)\r\n\r\n //Element variables\r\n let statusIndicatorElement = table.parentNode.querySelector('.status-indicator')\r\n let statusTextElement = table.parentNode.querySelector('.status-text')\r\n let statusClosedElement = table.parentNode.querySelector('.status-indicator-closed')\r\n let statusOpenElement = table.parentNode.querySelector('.status-indicator-open')\r\n //let busyTimeEndElement = table.parentNode.querySelector('.js-busy-end')\r\n\r\n //Custom closed day variables\r\n let closedDayIndicator = table.parentElement.querySelector('.js-info-close-dates') ? table.parentElement.querySelector('.js-info-close-dates') : false;\r\n let closedDayStart = table.parentElement.querySelector('.js-close-start') ? table.parentElement.querySelector('.js-close-start').textContent : false\r\n let closedDayEnd = table.parentElement.querySelector('.js-close-end') ? table.parentElement.querySelector('.js-close-end').textContent : false\r\n\r\n //Formatted start date\r\n let months = [' jan.', ' feb.', ' mar.', ' apr.', ' maj', ' jun.', ' jul.', ' aug.', ' sep.', ' okt.', ' nov.', ' dec.'];\r\n let startDate = new Date(closedDayStart);\r\n let startDateFormatted = `den ${startDate.getDate()}. ${months[startDate.getMonth()]} ${startDate.getFullYear()}`\r\n\r\n //check if custom closed day\r\n if(closedDayStart && checkCustomCloseDays(closedDayStart, closedDayEnd)){\r\n customCloseDays(table, closedDayStart, closedDayEnd, closedDayIndicator)\r\n }\r\n\r\n //check if closed today\r\n else if(day.parentNode.classList[0].includes('inactive')){\r\n\r\n if(FindNextOpenDay(day, dayNumber, closedDayStart)){\r\n statusTextElement.textContent = FindNextOpenDay(day, dayNumber, closedDayStart)\r\n statusTextElement.classList.remove('hidden')\r\n } else {\r\n statusTextElement.textContent = startDateFormatted\r\n }\r\n statusIndicatorElement.classList.add('closed-fill')\r\n statusOpenElement.classList.add('hidden')\r\n if(FindNextOpenDay(day, dayNumber, closedDayStart) == \" \"){\r\n statusTextElement.classList.add('hidden')\r\n }\r\n } \r\n\r\n //check if holiday\r\n else if(holidays.isHoliday){\r\n statusIndicatorElement.classList.add('closed-fill')\r\n if(FindNextOpenDay(day, dayNumber, closedDayStart)){\r\n statusTextElement.textContent= `Helligdag. Åbner ${FindNextOpenDay(day, dayNumber, closedDayStart)}`\r\n statusTextElement.classList.remove('hidden')\r\n statusOpenElement.classList.add('hidden')\r\n } else {\r\n statusTextElement.textContent= startDateFormatted\r\n }\r\n } \r\n\r\n //check if open (current time is within opening hours)\r\n else if(currentDayOpenTime && (currentTime >= currentDayOpenTime && currentTime < currentDayClosingTime)){\r\n \r\n //check if within busy time\r\n if(busyTimeStart && (currentTime >= busyTimeStart && currentTime < busyTimeEnd)){\r\n statusIndicatorElement.classList.add('busy-fill')\r\n statusClosedElement.classList.add('hidden')\r\n statusOpenElement.classList.add('busy')\r\n statusOpenElement.classList.remove('opened')\r\n statusTextElement.textContent = `Travlt indtil kl. ${busyTimeEnd}`\r\n } else {\r\n //if open and outside busy time\r\n statusIndicatorElement.classList.add('open-fill')\r\n statusClosedElement.classList.add('hidden')\r\n statusTextElement.textContent = `Lukker kl. ${day.parentNode.querySelector('.close').textContent}`\r\n }\r\n } \r\n\r\n //check if open in second open period (current time is within second opening hours)\r\n else if(currentDayOpenTimeTwo && (currentTime >= currentDayOpenTimeTwo && currentTime < currentDayClosingTimeTwo)){\r\n //check if within busy time\r\n if(busyTimeStart && (currentTime >= busyTimeStart && currentTime < busyTimeEnd)){\r\n statusIndicatorElement.classList.add('busy-fill')\r\n statusClosedElement.classList.add('hidden')\r\n statusOpenElement.classList.add('busy')\r\n statusOpenElement.classList.remove('opened')\r\n statusTextElement.textContent = `Travlt indtil kl. ${busyTimeEnd}`\r\n } else {\r\n //if open and outside busy time\r\n statusIndicatorElement.classList.add('open-fill')\r\n statusClosedElement.classList.add('hidden')\r\n statusTextElement.textContent = `Lukker kl. ${day.parentNode.querySelector('.closeTwo').textContent}`\r\n }\r\n } \r\n\r\n\r\n //check if before opening hours (opens later today)\r\n else if (currentDayOpenTime && (currentTime < currentDayOpenTime)) {\r\n statusIndicatorElement.classList.add('closed-fill')\r\n statusOpenElement.classList.add('hidden')\r\n statusTextElement.textContent = `Åbner kl. ${day.parentNode.querySelector('.open').textContent}`\r\n }\r\n //check if between opening hours (opens again later today)\r\n else if (currentDayOpenTimeTwo && (currentTime < currentDayOpenTimeTwo)) {\r\n statusIndicatorElement.classList.add('closed-fill')\r\n statusOpenElement.classList.add('hidden')\r\n statusTextElement.textContent = `Åbner kl. ${day.parentNode.querySelector('.openTwo').textContent}`\r\n }\r\n //else, closed\r\n else {\r\n statusIndicatorElement.classList.add('closed-fill')\r\n if(FindNextOpenDay(day, dayNumber, closedDayStart)){\r\n statusTextElement.textContent = `${FindNextOpenDay(day, dayNumber, closedDayStart)}`\r\n } else {\r\n statusTextElement.textContent = startDateFormatted\r\n }\r\n statusOpenElement.classList.add('hidden')\r\n }\r\n }\r\n })\r\n })\r\n }\r\n}\r\n\r\nexport default tableHours;","import { debounce } from 'lodash-es';\r\n\r\nexport function tabpanelReworked() {\r\n const ACTIVE_CLASS = \"active\";\r\n const IS_OPEN_CLASS = \"is-open\"; // New class for the container\r\n const TAB_PANEL_SELECTOR = \".tab-panel--container\";\r\n const TAB_CONTROL_SELECTOR = \".tab-control\";\r\n const DESKTOP_PANEL_SELECTOR = \".tab-panel--desktop\";\r\n const MOBILE_PANEL_SELECTOR = \".tab-panel--mobile\";\r\n\r\n if (!document.querySelector(TAB_PANEL_SELECTOR)) return;\r\n\r\n // Helper: Get Active Tab from URL\r\n function getActiveTabFromUrl(id) {\r\n const url = new URL(window.location.href);\r\n const fragment = url.hash.slice(1).split(\"?\")[0]; // Extract fragment before '?'\r\n const queryParams = new URLSearchParams(url.search);\r\n\r\n if (fragment === id) {\r\n const activeTab = queryParams.get(\"activeTab\");\r\n return activeTab !== null ? parseInt(activeTab, 10) : null;\r\n }\r\n return null;\r\n }\r\n\r\n // Helper: Set Active State for Tabs\r\n function setActiveTab(tabPanel, index, isDesktop, allowToggle = true) {\r\n const controls = tabPanel.querySelectorAll(TAB_CONTROL_SELECTOR);\r\n const desktopPanels = tabPanel.querySelectorAll(DESKTOP_PANEL_SELECTOR);\r\n const mobilePanels = tabPanel.querySelectorAll(MOBILE_PANEL_SELECTOR);\r\n\r\n const isAlreadyActive = controls[index]?.classList.contains(ACTIVE_CLASS);\r\n\r\n // Allow toggling if the tab is already active\r\n if (allowToggle && isAlreadyActive) {\r\n controls[index].classList.remove(ACTIVE_CLASS);\r\n controls[index].setAttribute(\"aria-expanded\", \"false\");\r\n if (isDesktop) {\r\n desktopPanels[index]?.classList.remove(ACTIVE_CLASS);\r\n } else {\r\n mobilePanels[index]?.classList.remove(ACTIVE_CLASS);\r\n }\r\n\r\n // Check if no tabs are active and remove the `is-open` class from the container\r\n // const hasActiveTabs = Array.from(controls).some((control) => control.classList.contains(ACTIVE_CLASS));\r\n // tabPanel.classList.toggle(IS_OPEN_CLASS, hasActiveTabs);\r\n\r\n return;\r\n }\r\n\r\n // Loop through all tabs to apply the active class\r\n controls.forEach((control, idx) => {\r\n const isActive = idx === index && (!allowToggle || !isAlreadyActive);\r\n control.classList.toggle(ACTIVE_CLASS, isActive);\r\n control.setAttribute(\"aria-expanded\", isActive ? \"true\" : \"false\");\r\n });\r\n\r\n // Update the panels based on whether it's desktop or mobile\r\n if (isDesktop) {\r\n desktopPanels.forEach((panel, idx) => panel.classList.toggle(ACTIVE_CLASS, idx === index && (!allowToggle || !isAlreadyActive)));\r\n } else {\r\n mobilePanels.forEach((panel, idx) => panel.classList.toggle(ACTIVE_CLASS, idx === index && (!allowToggle || !isAlreadyActive)));\r\n }\r\n\r\n // Check if at least one tab is active and add/remove the `is-open` class\r\n // const hasActiveTabs = Array.from(controls).some((control) => control.classList.contains(ACTIVE_CLASS));\r\n // tabPanel.classList.toggle(IS_OPEN_CLASS, hasActiveTabs);\r\n }\r\n\r\n // Initialize Tabs\r\n document.querySelectorAll(TAB_PANEL_SELECTOR).forEach((tabPanel) => {\r\n const id = tabPanel.id;\r\n const activeTabFromUrl = getActiveTabFromUrl(id); // Get activeTab from URL\r\n const controls = Array.from(tabPanel.querySelectorAll(TAB_CONTROL_SELECTOR));\r\n const isDesktop = window.innerWidth >= 992;\r\n\r\n let initialActiveTab = null;\r\n\r\n // If there's an activeTab in the URL, use that as the initial active tab\r\n if (activeTabFromUrl !== null && activeTabFromUrl < controls.length) {\r\n initialActiveTab = activeTabFromUrl;\r\n } else {\r\n // If no activeTab in the URL, check for the active class in the HTML\r\n const htmlActiveIndex = controls.findIndex((tab) => tab.classList.contains(ACTIVE_CLASS));\r\n\r\n // If the active class is found in the HTML, use that index\r\n if (htmlActiveIndex !== -1) {\r\n initialActiveTab = htmlActiveIndex;\r\n }\r\n }\r\n\r\n // If there's no activeTab defined in the URL or HTML, don't set any tab as active.\r\n if (initialActiveTab !== null) {\r\n setActiveTab(tabPanel, initialActiveTab, isDesktop, false);\r\n }\r\n\r\n // Add event listeners for tab changes\r\n controls.forEach((tab, index) => {\r\n tab.addEventListener(\"click\", () => {\r\n const isDesktop = window.innerWidth >= 992;\r\n setActiveTab(tabPanel, index, isDesktop);\r\n\r\n if (id) {\r\n // Update the URL to reflect the active tab if a tab is active\r\n const url = new URL(window.location.href);\r\n const isTabActive = controls[index].classList.contains(ACTIVE_CLASS);\r\n\r\n if (isTabActive) {\r\n url.hash = `${id}`; // Add the hash fragment to the URL\r\n url.searchParams.set(\"idTab\", `${id}`); // Update the activeTab query parameter\r\n url.searchParams.set(\"activeTab\", index); // Update the activeTab query parameter\r\n } else {\r\n url.hash = \"\"; // Clear the hash fragment\r\n url.searchParams.delete(\"idTab\"); // Update the activeTab query parameter\r\n url.searchParams.delete(\"activeTab\"); // Remove the activeTab query parameter\r\n }\r\n\r\n window.history.replaceState(null, \"\", url.toString()); // Replace history without reload\r\n }\r\n });\r\n });\r\n });\r\n\r\n // Handle Resize Events\r\n let windowSize = window.innerWidth;\r\n window.addEventListener(\r\n \"resize\",\r\n debounce(() => {\r\n const isDesktop = window.innerWidth >= 992;\r\n if ((isDesktop && windowSize < 992) || (!isDesktop && windowSize >= 992)) {\r\n document.querySelectorAll(TAB_PANEL_SELECTOR).forEach((tabPanel) => {\r\n const activeIndex = Array.from(\r\n tabPanel.querySelectorAll(TAB_CONTROL_SELECTOR)\r\n ).findIndex((tab) => tab.classList.contains(ACTIVE_CLASS));\r\n setActiveTab(tabPanel, activeIndex >= 0 ? activeIndex : null, isDesktop, false);\r\n });\r\n windowSize = window.innerWidth;\r\n }\r\n }, 200)\r\n );\r\n}\r\n\r\nexport default tabpanelReworked;\r\n","// Grayscale Script\r\n\r\nexport function greyScaleInit() {\r\n\tconst grayscaleBtnElements = document.querySelectorAll(\".jsGrayscaleToggle\");\r\n\tif (grayscaleBtnElements.length === 0) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tconst grayscaleClass = \"grayscale\";\r\n\tconst grayscaleOnClass = \"grayscale--on\";\r\n\tconst grayscaleFilterClass = \"js-grayscale--filter\";\r\n\tconst grayscaleStorageKey = \"colorThemeGrayscale\"; // Unique storage key for grayscale\r\n\r\n\tconst getSelectedGrayscaleTheme = () =>\r\n\t\tlocalStorage.getItem(grayscaleStorageKey);\r\n\r\n\tconst setGrayscaleTheme = (theme) =>\r\n\t\tlocalStorage.setItem(grayscaleStorageKey, theme);\r\n\r\n\t// Target specific elements for the JS functionality\r\n\tconst targetElements = [document.querySelector('header'), document.querySelector('main'), document.querySelector('footer')];\r\n\r\n\tconst updateGrayscaleState = (isGrayscaleActive) => {\r\n\t\t// Apply or remove the filter class from header, main, and footer\r\n\t\ttargetElements.forEach(element => {\r\n\t\t\tif (element) {\r\n\t\t\t\tif (isGrayscaleActive) {\r\n\t\t\t\t\telement.classList.add(grayscaleFilterClass);\r\n\t\t\t\t} else {\r\n\t\t\t\t\telement.classList.remove(grayscaleFilterClass);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Update all buttons to reflect the current state\r\n\t\tgrayscaleBtnElements.forEach((item) => {\r\n\t\t\tif (isGrayscaleActive) {\r\n\t\t\t\titem.classList.add(grayscaleOnClass);\r\n\t\t\t\titem.classList.add(\"active\");\r\n\t\t\t} else {\r\n\t\t\t\titem.classList.remove(grayscaleOnClass);\r\n\t\t\t\titem.classList.remove(\"active\");\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Update the theme in local storage\r\n\t\tsetGrayscaleTheme(isGrayscaleActive ? grayscaleClass : \"regular\");\r\n\t};\r\n\r\n\tconst grayscaleInitState = () => {\r\n\t\tconst isGrayscaleActive = getSelectedGrayscaleTheme() === grayscaleClass;\r\n\t\tdocument.body.classList.toggle(grayscaleOnClass, isGrayscaleActive);\r\n\t\tupdateGrayscaleState(isGrayscaleActive);\r\n\t};\r\n\r\n\tgrayscaleInitState();\r\n\r\n\t// Ensure only one event listener is added per button\r\n\tconst handleClick = (event) => {\r\n\t\t// console.log('Button clicked:', event.currentTarget);\r\n\t\t// Determine if grayscale is currently active\r\n\t\tconst isGrayscaleActive = !document.body.classList.contains(grayscaleOnClass);\r\n\r\n\t\t// Toggle the grayscale state\r\n\t\tdocument.body.classList.toggle(grayscaleOnClass, isGrayscaleActive);\r\n\t\tupdateGrayscaleState(isGrayscaleActive);\r\n\t};\r\n\r\n\t// Remove any existing event listeners to prevent duplication\r\n\tgrayscaleBtnElements.forEach((button) => {\r\n\t\tbutton.removeEventListener(\"click\", handleClick); // Ensure previous listeners are removed\r\n\t\tbutton.addEventListener(\"click\", handleClick);\r\n\t});\r\n}\r\n\r\nexport default greyScaleInit;","export function darkmodeScale() {\r\n\t\t// Constants\r\n\t\tconst themeSelectors = document.querySelectorAll(\".jsDarkmodeToggle\");\r\n\t\tif (themeSelectors.length == 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst storageKey = \"colorThemeDarkMode\";\r\n\t\tconst lightThemeClass = \"light-theme\";\r\n\t\tconst darkThemeClass = \"dark-theme\";\r\n\t\tconst isDarkSystemTheme =\r\n\t\t\twindow.matchMedia &&\r\n\t\t\twindow.matchMedia(\"(prefers-color-scheme: dark)\").matches;\r\n\r\n\t\tconst navbrandImg = jQuery(\r\n\t\t\t\".header__megamenu-extended .navbar__megamenu-extended .navbar__megamenu__header .navbar-brand img\",\r\n\t\t);\r\n\t\tconst footerbrandImg = jQuery(\"footer .logo img\");\r\n\t\tconst footerSubbrandImg = jQuery(\"footer .logo img[data-defaultSubLogo]\");\r\n\t\tconst favicon = jQuery(\"link[rel='icon']\");\r\n\t\t// Get the theme preference (dark-theme, light-theme, or null)\r\n\t\tconst getSelectedTheme = () => localStorage.getItem(storageKey);\r\n\r\n\t\t// Set theme helper\r\n\t\tconst setSelectedTheme = (theme) => localStorage.setItem(storageKey, theme);\r\n\r\n\t\t// Functions to add/remove dark/light theme classes\r\n\t\tconst applyDarkModeClasses = () => {\r\n\t\t\tdocument.documentElement.classList.add(darkThemeClass);\r\n\t\t\tdocument.documentElement.classList.remove(lightThemeClass);\r\n\t\t\tsetDarkmodeLogo();\r\n\t\t};\r\n\r\n\t\tconst applyLightModeClasses = () => {\r\n\t\t\tdocument.documentElement.classList.add(lightThemeClass);\r\n\t\t\tdocument.documentElement.classList.remove(darkThemeClass);\r\n\t\t\tsetDefaultLogo();\r\n\t\t};\r\n\r\n\t\t// Handle theme toggle\r\n\t\tconst handleThemeToggle = () => {\r\n\t\t\tconst isDarkModeActive = document.documentElement.classList.toggle(darkThemeClass);\r\n\r\n\t\t\tif (isDarkModeActive) {\r\n\t\t\t\tapplyDarkModeClasses();\r\n\t\t\t\tsetSelectedTheme(darkThemeClass);\r\n\t\t\t} else {\r\n\t\t\t\tapplyLightModeClasses();\r\n\t\t\t\tsetSelectedTheme(lightThemeClass);\r\n\t\t\t}\r\n\r\n\t\t\tthemeSelectors.forEach((item) =>\r\n\t\t\t\titem.classList.toggle(\"active\", isDarkModeActive),\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\t// Initialize the theme on mount\r\n\t\tconst initializeTheme = () => {\r\n\t\t\tconst selectedTheme = getSelectedTheme();\r\n\t\t\tif (selectedTheme === darkThemeClass) {\r\n\t\t\t\tapplyDarkModeClasses();\r\n\t\t\t\tthemeSelectors.forEach((item) => item.classList.add(\"active\"));\r\n\t\t\t} else {\r\n\t\t\t\tapplyLightModeClasses();\r\n\t\t\t}\r\n\r\n\t\t\t// Set favicon based on system dark mode preference\r\n\t\t\tsetFaviconBasedOnSystemTheme();\r\n\t\t};\r\n\r\n\t\t// Set logos and favicon for dark mode\r\n\t\tfunction setDarkmodeLogo() {\r\n\t\t\tconst darkmodeNavLogo = navbrandImg.attr(\"data-darkmodeLogo\");\r\n\t\t\tnavbrandImg.attr(\"src\", darkmodeNavLogo);\r\n\r\n\t\t\tconst darkmodeFooterLogo = footerbrandImg.attr(\"data-darkmodeLogo\");\r\n\t\t\tfooterbrandImg.attr(\"src\", darkmodeFooterLogo);\r\n\r\n\t\t\tconst darkmodeSubFooterLogo = footerSubbrandImg.attr(\r\n\t\t\t\t\"data-darkmodeSubLogo\",\r\n\t\t\t);\r\n\t\t\tfooterSubbrandImg.attr(\"src\", darkmodeSubFooterLogo);\r\n\t\t}\r\n\r\n\t\t// Set logos and favicon for light mode (default)\r\n\t\tfunction setDefaultLogo() {\r\n\t\t\tconst defaultNavLogo = navbrandImg.attr(\"data-defaultLogo\");\r\n\t\t\tnavbrandImg.attr(\"src\", defaultNavLogo);\r\n\r\n\t\t\tconst defaultFooterLogo = footerbrandImg.attr(\"data-defaultLogo\");\r\n\t\t\tfooterbrandImg.attr(\"src\", defaultFooterLogo);\r\n\r\n\t\t\tconst subFooterLogo = footerSubbrandImg.attr(\"data-defaultSubLogo\");\r\n\t\t\tfooterSubbrandImg.attr(\"src\", subFooterLogo);\r\n\t\t}\r\n\r\n\t\t// Set favicon based on system theme preference\r\n\t\tfunction setFaviconBasedOnSystemTheme() {\r\n\t\t\tif (isDarkSystemTheme) {\r\n\t\t\t\tconst darkmodeFavicon = favicon.attr(\"data-darkmode\");\r\n\t\t\t\tfavicon.attr(\"href\", darkmodeFavicon);\r\n\t\t\t} else {\r\n\t\t\t\tconst defaultFavicon = favicon.attr(\"data-default\");\r\n\t\t\t\tfavicon.attr(\"href\", defaultFavicon);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Event listener setup\r\n\t\tthemeSelectors.forEach((button) => {\r\n\t\t\tbutton.addEventListener(\"click\", handleThemeToggle);\r\n\t\t});\r\n\r\n\t\tinitializeTheme();\r\n\t// Initialize on page load\r\n}\r\n\r\nexport default darkmodeScale;\r\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 524;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t524: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkcabanaboiler\"] = self[\"webpackChunkcabanaboiler\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [121], function() { return __webpack_require__(8424); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","RegExp","escape","s","replace","$","jQuery","csv","defaults","separator","delimiter","headers","hooks","castToScalar","value","state","isNaN","test","parseFloat","integer","parseInt","parsers","parse","options","rowNum","colNum","data","entry","exit","endOfEntry","start","undefined","onParseEntry","push","hookVal","end","endOfValue","onParseValue","hook","escSeparator","escDelimiter","match","matchSrc","source","m0","Error","length","splitLines","entries","endOfLine","prevChar","substr","parseEntry","helpers","collectPropertyNames","objects","o","propName","props","hasOwnProperty","indexOf","toArray","callback","console","error","config","toArrays","onPreParse","onPostParse","toObjects","lines","transform","headerOptions","headerLine","i","len","object","j","call","fromArrays","arrays","output","line","lineValues","strValue","toString","escMatcher","search","join","fromObjects","sortOrder","manualOrder","origObjects","sort","propsManual","concat","p","csvEntry2Array","csv2Array","csv2Dictionary","module","exports","this","suggestionsElements","document","querySelectorAll","htmlElement","querySelector","addSuggestionsMarkup","inputElement","markup","formElement","closest","existingSuggestions","remove","insertAdjacentHTML","forEach","button","addEventListener","event","preventDefault","log","innerText","dataset","query","removeSuggestions","closestForm","submit","highlightItem","items","index","item","idx","classList","add","scrollIntoView","block","suggestionsElement","inputValue","pageId","getAttribute","useraffle","lang","fetch","method","then","response","json","Array","isArray","suggestionsMarkup","suggestions","searchTermRegex","suggestion","highlightedSuggestion","catch","topQuestionElement","topQuestionsMarkup","topQuestions","title","questions","text","generateTopquestionsMarkup","setTimeout","suggestionsContainer","currentIndex","from","findIndex","contains","key","removeTabIndexFromHiddenTables","each","find","removeAttr","lang_da_mod","table","id","attr","searchfield","hasClass","all","lenghMenu","pagination","sLengthMenu","searchPlaceholder","sSearch","oPaginate","sNext","sPrevious","sPaginationType","DataTable","ordering","retrieve","Boolean","info","searching","responsive","details","type","columnDefs","className","orderable","targets","css","prop","parent","addTable","window","on","wrap","fixedColumns","scrollCollapse","initComplete","tableId","headTable","bodyTable","addTableScrollable","warn","_typeof","Symbol","iterator","constructor","prototype","_defineProperty","e","r","t","toPrimitive","TypeError","String","_toPrimitive","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","background","colorRgb","colorValuesArr","colorObject","hexToRgb","hex","m","g","b","result","exec","textColorBlackRgb","textColorWhiteRgb","bgc","slice","split","luminance","a","map","v","Math","pow","luminanceBgc","luminanceTextWhite","luminanceTextBlack","_sections$","headerImageHeight","main","sectionsHTMLcollection","sections","navbarBackground","body","bodyBackgroundColor","headerImage","headerBackgroundColor","navbar","headerIsFixed","getElementsByClassName","isTransparentHeader","backgroundColorProperty","noBackgroundColor","getElementStyle","element","styleProperty","getComputedStyle","getPropertyValue","setDocumentColor","target","color","root","style","setProperty","setTextColorWhite","getElementById","display","setTextColorBlack","documentElement","openBurgerButton","closeBurgerButton","sidemenu","toggle","getElementsByTagName","navbarListItems","firstSection","backgroundColor","ratioCheckerPrefersWhite","hero","heroBgColor","elementToUse","some","startsWith","hasBannerAbsolute","cls","includes","clientHeight","matchMedia","matches","height","banner","initialSettings","mediaBox","mediaBoxInnerColor","mediaBoxOverlayColor","onscroll","throttle","multiBox","inner","overlay","imageHeight","scrollTop","resizeHeader","offsetTop","offsetHeight","sectionBgc","bannerBacgroundColor","handleOnSections","handleScrollEvents","moveNavItems","topNavBar","navbarLogo","BurgerButton","navbarRight","offset","left","outerWidth","width","burgerButtonLeft","round","checkOverflow","el","clientWidth","scrollWidth","moveLastItem","prepend","addClass","hideBurgerIcon","sideMenuList","removeClass","moveAll","win","insertAfter","onMount","date","year","getFullYear","leapYear","easterSunday","f","floor","G","C","H","I","L","month","holidays","currentDateNumber","currentMonth","getMonth","currentDay","getDate","monthLength","yearLength","mandag","getDay","tirsdag","onsdag","torsdag","fredag","lørdag","søndag","næsteUgeMandag","næsteUgeTirsdag","days","holidaysNextWeek","isHoliday","holidaysInCurrentWeek","innerWidth","isVisible","nextElementSibling","activeMenus","previousElementSibling","setAttribute","hoverIntentTimeout","listElements","clearTimeout","handleHoverIntent","oldScrollHeight","setScrollValues","scrollY","menuElement","paddingTop","newScrollHeight","parentElement","position","top","headerDoubleLogoTopBar","toggleElements","isCollapsed","setVariables","buttons","closeAllDropdowns","exceptionButton","arguments","dropdown","associatedButton","parentNode","stopPropagation","isActive","getBoundingClientRect","bottom","innerHeight","adjustDropdownPosition","handleClick","Alpine","plugin","collapse","focus","intersect","open","desktop","init","_this","collapseOn","$el","shouldHideButton","updateButtonVisibility","updateAriaLabel","$refs","commentContent","toggleContent","btnToggle","ariaOpen","ariaClose","mobileSearch","mobileSideMenu","focusTrap","desktopSearch","mobileInputFocused","mobileInputValue","updateWindowProperties","toggleMobileMenu","isMobile","doubleLogoMaxWidth","headerLeftAlignedMaxWidth","isMenuTooWide","doubleLogoMenuElement","leftAlignedMenuElement","checkMenuWidth","logoWidth","overflow","searchBar","factBox","handleFocusables","disableValue","settings","accordion","objectFitImages","$body","$navbar","$dropdown","$dropdownToggle","$dropdownMenu","$searchbar","$searchbarToggle","$navBackLink","$dropdownToggleTab","$submenuDropdownToggle","$textOpen","$textClose","ignoreScroll","bodyScrollLock","require","disableBodyScroll","enableBodyScroll","resetDropdowns","slideUp","headerElement","show","off","get","$this","toggleClass","$navItem","is","relatedTarget","has","superfish","isOpen","slideToggle","popUpSelector","speed","delay","disableHI","onInit","onBeforeShow","onHide","isSearchbarVisible","headerMegamenuExtended","reorderNav","navbarCollapse","primaryContainer","secondaryContainer","containersExist","insertBefore","headerMegamenuTabOrderMobile","navbarToggler","dropdownMegamenu","headerMegamenuFocusTrap","leftAlignedMegamenu","doubleLogoMenu","navigationHandler","navbarDesktop","navbarDesktopItems","navbarMobileMenu","navbarProfile","ensureMobileMenu","append","ensureDesktopMenu","children","checkItemsInBurger","checkForSpace","space","navItems","navItemBurgerList","burgerNavItems","burgerNavLastItem","navbarBrandWidth","after","handleLoadResize","windowObj","headerWidth","navbarWidth","emptyspace","itemWidth","click","siblings","headerHeadroom","onPin","currentHeaderHeight","header","outerHeight","onUnpin","Headroom","$navLink","showClass","parents","setPaddingMain","headerHeight","$window","scroll","$sidemenu","$sidemenuToggle","hide","profileNameElement","MutationObserver","mutations","mutation","observe","childList","subtree","headerIntranet","masonryGrid","masonry","itemSelector","columnWidth","percentPosition","originTop","horizontalOrder","heroMultiBox","selector","watermarks","updateWatermark","watermarkmobile","watermarkdesktop","watermark","animate","location","hash","urlHash","ready","showMessage","areas","form","success","isNew","isApproved","html","isValidEmail","email","validator","modal","val","topics","areaKey","topicsTitles","checkbox","areasTitles","onestring","topicsKeys","ajax","url","contentType","dataType","topicKeys","memberPageId","subscriptionModal","onload","paginationPage","go","overThreeItems","$thisCardCarousel","owlCarousel","stagePadding","nav","dots","loop","margin","pullDrag","touchDrag","mouseDrag","responsiveClass","swiperContainer","swiperClass","optionsData","swiper","JSON","dottext","shouldEnableSwiper","mobileOnly","_objectSpread","navigation","nextEl","prevEl","renderBullet","ariaLabel","swiperInstance","Swiper","slidePrev","slideNext","initSwipers","modules","Navigation","Pagination","Keyboard","A11y","EffectFade","slidesPerView","spaceBetween","autoHeight","effect","lazy","clickable","keyboard","enabled","links","name","anchor","toLocaleLowerCase","toLowerCase","addSection","articleAnchorMenu","oneOpen","localStorage","getItem","$settings","maxHeight","queryString","history","replaceState","pathname","$accordionToggleBtn","stop","slideDown","extend","next","fn","dataTable","isDataTable","columns","adjust","draw","pageLength","substring","targetAccordionItem","not","accordionItem","accordionContainer","openAccordionAndScroll","accordionSection","anchorId","findAccordionSection","accordionInstance","_","activeAccordion","destroy","accordionMobile","accordionDesktopDown","$accordion","$accordion_item","$accordion_toggle","$toggleBtn","newAriaExpanded","$accordionItem","infoboxLinksIcon","resizeTimeout","carousels","startCarousel","carousel","center","$ul","$dot","$li","$button","trigger","replaceWith","eq","desiredItem","desiredItemIndex","resize","progress","max","articleHeight","progressBar","menuHeight","video","visibility","paused","play","pause","createElement","src","parsedUrl","URL","searchParams","autoplay","baseUrl","origin","poster","sourceFullHd","appendChild","sourceHd","sourceNormal","sourceMobile","track","embedId","iframe","appendTo","BorgerDk","folderId","pageUrl","elementId","accordionBodyContents","loadingSpinner","requestData","URLSearchParams","ok","newData","trim","tippy","theme","arrow","maxWidth","placement","hideOnClick","onShow","instance","content","reference","attributes","setContent","mouseenter","mouseleave","$fontsizeText","selectedProcentage","selectedSize","navigator","clipboard","writeText","err","textArea","select","removeChild","fallbackCopyTextToClipboard","savedPages","saveButtons","splice","setItem","stringify","serviceMenu","emailShareButtons","subject","emailSubject","linkText","emailLinkText","emailBody","href","fullBody","encodeURIComponent","serviceMenuShareByEmail","dataTabel","dataTabelScrollable","$menu","maxlength","currentLength","minLength","$thisDropdown","sideMenu","c","node","edge_media_to_caption","edges","accessibility_caption","is_tag","username","d","host","tag","container","display_profile","display_biography","display_gallery","display_captions","display_igtv","styling","items_per_row","image_size","lazy_load","cache_time","on_error","instagramFeed","h","entry_data","ProfilePage","TagPage","n","Date","getTime","graphql","user","hashtag","k","l","profile_container","profile_image","profile_name","profile_biography","gallery_image","gallery_image_link","profile_pic_url","full_name","biography","is_private","q","edge_owner_to_timeline_media","edge_hashtag_to_media","x","u","shortcode","__typename","thumbnail_resources","thumbnail_src","edge_felix_video_timeline","w","get_data","fail","status","amount","userid","fadeIn","addInstagramImages","$dataId","$id","playBtn","$accordion_header","$accordion_body","cludoSearch","imagesLoaded","Viewer","backdrop","inheritedAttributes","image","toolbar","zoomIn","zoomOut","oneToOne","reset","prev","rotateLeft","rotateRight","flipHorizontal","flipVertical","transition","focusables","richText","focusable","removeAttribute","box","elementButton","cardComment","card","onShowMoreCard","current","currentday","customCloseDays","day","indicator","months","endDate","startDate","spans","endDateFormatted","startDateFormatted","textContent","FindNextOpenDay","dayNumber","closedDay","nextOpenDay","nextOpenDayNumber","counter","nextOpenDayDate","today","checkHolidays","setDate","toISOString","isClosedDay","dayCols","col","statusIndicatorText","statusIndicator","currentDayOpenTime","currentDayClosingTime","currentDayOpenTimeTwo","currentDayClosingTimeTwo","busyTimeStart","busyTimeEnd","closedDayStart","closedDayEnd","currentTime","getHours","getMinutes","startDay","endDay","startTimestamp","endTimestamp","currentTimestamp","NextOpenDay","bannerHours","breadcrumbContainer","articleWrapper","serviceMenuElement","breadcrumbServiceMenu","articleServiceMenu","initialBreadcrumbServiceMenuItems","initialArticleServiceMenuItems","insertElement","relationalElement","moveBreadCrumb","breadcrumb","dropdownSettings","CsvToHtmlTable","csv_path","allow_download","csv_options","datatables_options","custom_formatting","customTemplates","colIdx","func","$table","$containerElement","empty","when","csvData","$tableHead","csvHeaderRow","$tableHeadRow","headerIdx","$tableBody","rowIdx","$tableBodyRow","$tableBodyRowTd","$paragraph","cellTemplateFunc","paging","scrollX","lengthChange","visible","order","tableCSV","autosuggestions","tablesNodelist","tableDays","statusIndicatorElement","statusTextElement","statusClosedElement","statusOpenElement","closedDayIndicator","tableHours","ACTIVE_CLASS","TAB_PANEL_SELECTOR","TAB_CONTROL_SELECTOR","tabPanel","activeTabFromUrl","fragment","queryParams","activeTab","getActiveTabFromUrl","controls","isDesktop","initialActiveTab","htmlActiveIndex","tab","setActiveTab","set","delete","windowSize","debounce","activeIndex","_controls$index","_desktopPanels$index","_mobilePanels$index","allowToggle","desktopPanels","mobilePanels","isAlreadyActive","control","panel","tabpanelReworked","grayscaleBtnElements","isGrayscaleActive","grayscaleClass","grayscaleOnClass","grayscaleFilterClass","grayscaleStorageKey","targetElements","updateGrayscaleState","removeEventListener","greyScaleInit","themeSelectors","storageKey","lightThemeClass","darkThemeClass","isDarkSystemTheme","navbrandImg","footerbrandImg","footerSubbrandImg","favicon","setSelectedTheme","applyDarkModeClasses","darkmodeNavLogo","darkmodeFooterLogo","darkmodeSubFooterLogo","setDarkmodeLogo","applyLightModeClasses","defaultNavLogo","defaultFooterLogo","subFooterLogo","setDefaultLogo","handleThemeToggle","isDarkModeActive","darkmodeFavicon","defaultFavicon","setFaviconBasedOnSystemTheme","darkmodeScale","cssVars","rootElement","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","loaded","__webpack_modules__","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","keys","every","getter","__esModule","definition","globalThis","Function","obj","toStringTag","nmd","paths","baseURI","self","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","bind","nc","__webpack_exports__"],"sourceRoot":""}