{"version":3,"sources":["calendar.js","card-slider.js","header.js","instagram-slider.js","scroll.js","search.js"],"names":["document","addEventListener","getElementById","Vue","el","data","heading","events","selectedEvent","skip","take","allEventsLoaded","modalOpen","created","this","fetchEvents","methods","initialLoad","fetch","then","response","json","catch","error","console","loadMore","openModal","event","$refs","modal","showModal","closeModal","$self","setTimeout","close","window","querySelectorAll","forEach","e","slider","Splide","id","perPage","gap","padding","right","arrows","breakpoints","992","760","mount","querySelector","go","selectedDropdownId","mobileNavOpen","accessibilityMode","toggleDropdown","linkId","dropdownId","dropdown","button","closeDropdown","setAttribute","$nextTick","focus","replace","toggleMobileNav","toggleAccessibilityMode","cookie","htmlElement","classList","add","remove","$el","contains","target","focusable","focusedIndex","Array","from","indexOf","activeElement","key","shiftKey","preventDefault","length","cookieValue","split","find","row","startsWith","images","splideOptions","type","perMove","autoplay","left","autoHeight","pagination","2000","1200","mounted","splide","header","scrollY","searchApps","searchApp","query","submittedQuery","results","resultsCount","isLoading","initialQuery","URLSearchParams","location","search","get","decodeURIComponent","performSearch","trim","encodedQuery","encodeURIComponent","await","ok","resultCount","updateUrlParameter","baseUrl","origin","pathname","existingParams","size","set","newUrl","toString","history","pushState"],"mappings":"AAAAA,SAAAC,iBAAA,mBAAA,WACAD,SAAAE,eAAA,cAAA,GACA,IAAAC,IAAA,CACAC,GAAA,gBACAC,KAAA,CACAC,QAAA,oBACAC,OAAA,GACAC,cAAA,KACAC,KAAA,EACAC,KAAA,EACAC,gBAAA,CAAA,EACAC,UAAA,CAAA,CACA,EACAC,UACAC,KAAAC,YAAA,CAAA,CAAA,CACA,EACAC,QAAA,CACAD,YAAAE,GACAC,mCAAAJ,KAAAL,aAAAK,KAAAJ,IAAA,EACAS,KAAAC,GAAAA,EAAAC,KAAA,CAAA,EACAF,KAAAd,IAEAY,IACAH,KAAAH,gBAAA,CAAA,GAEAG,KAAAP,OAAA,CAAA,GAAAO,KAAAP,OAAA,GAAAF,GACAS,KAAAJ,KAAA,CACA,CAAA,EACAY,MAAAC,GAAAC,QAAAD,MAAA,yBAAAA,CAAA,CAAA,CACA,EACAE,WACAX,KAAAL,MAAA,EACAK,KAAAC,YAAA,CACA,EACAW,UAAAC,GACAb,KAAAN,cAAAmB,EACAb,KAAAc,MAAAC,MAAAC,UAAA,EACAhB,KAAAF,UAAA,CAAA,CACA,EACAmB,aACAjB,KAAAF,UAAA,CAAA,EACA,IAAAoB,EAAAlB,KACAmB,WAAA,KACAD,EAAAJ,MAAAC,MAAAK,MAAA,CACA,EAAA,GAAA,CACA,CACA,CACA,CAAA,CAEA,CAAA,ECjDAC,OAAAlC,iBAAA,mBAAA,WACAD,SAAAoC,iBAAA,cAAA,EACAC,QAAA,SAAAC,GACA,IAAAC,EAAA,IAAAC,OAAA,IAAAF,EAAAG,GAAA,CACAC,QAAA,EACAC,IAAA,OACAC,QAAA,CAAAC,MAAA,KAAA,EACAC,OAAA,CAAA,EACAC,YAAA,CACAC,IAAA,CACAN,QAAA,CACA,EACAO,IAAA,CACAP,QAAA,CACA,CACA,CACA,CAAA,EAAAQ,MAAA,EAEAZ,EAAAa,cAAA,iBAAA,IACAb,EAAAa,cAAA,aAAA,EAAAlD,iBAAA,QAAA,WACAsC,EAAAa,GAAA,GAAA,CACA,CAAA,EAEAd,EAAAa,cAAA,aAAA,EAAAlD,iBAAA,QAAA,WACAsC,EAAAa,GAAA,GAAA,CACA,CAAA,EAEA,CAAA,CACA,CAAA,EC5BApD,SAAAC,iBAAA,mBAAA,WACA,IAAAE,IAAA,CACAC,GAAA,gBACAC,KAAA,CACAgD,mBAAA,KACAC,cAAA,CAAA,EACAC,kBAAA,CAAA,CACA,EACAvC,QAAA,CACAwC,eAAAC,GACA,GAAAA,EAAA,CAKA,IAAAC,EAAAD,EAAA,YACA,IAAAE,EAAA3D,SAAAE,eAAAwD,CAAA,EACA,IAAAE,EAAA5D,SAAAE,eAAAuD,CAAA,EAEAE,GAAAC,EAKAF,IAAA5C,KAAAuC,oBAEAvC,KAAA+C,cAAA,EAGA/C,KAAAuC,mBAAAK,EACAC,EAAAG,aAAA,cAAA,OAAA,EACAF,EAAAE,aAAA,gBAAA,MAAA,EAGAhD,KAAAiD,UAAA,KACAJ,EAAAR,cAAA,SAAA,EACAlB,WAAA,WACA0B,EAAAK,MAAA,CACA,EAAA,GAAA,CAOA,CAAA,IAGAlD,KAAA+C,cAAA,EACA7D,SAAAE,eAAAuD,CAAA,EAAAO,MAAA,GA7BAxC,QAAAD,2CAAAmC,aAAAD,CAAA,CAPA,MAFA3C,KAAA+C,cAAA,CAwCA,EACAA,gBACA,IACAF,EACAC,EAFA9C,KAAAuC,qBACAM,EAAA3D,SAAAE,eAAAY,KAAAuC,kBAAA,EACAO,EAAA5D,SAAAmD,iCAAArC,KAAAuC,sBAAA,EAEAM,IACAA,EAAAG,aAAA,cAAA,MAAA,EACA9D,SAAAE,eAAAY,KAAAuC,mBAAAY,QAAA,YAAA,EAAA,CAAA,EAAAD,MAAA,GAEAJ,KACAA,EAAAE,aAAA,gBAAA,OAAA,EACAF,EAAAI,MAAA,GAGAlD,KAAAuC,mBAAA,IACA,EACAa,kBACApD,KAAAwC,cAAA,CAAAxC,KAAAwC,cACAxC,KAAA+C,cAAA,CACA,EACAM,0BACArD,KAAAyC,kBAAA,CAAAzC,KAAAyC,kBAGAvD,SAAAoE,OAAA,sBAAAtD,KAAAyC,kBAAA,OAAA,SAAA,YACA,IAAAc,EAAArE,SAAAmD,cAAA,MAAA,EAEAkB,IACAvD,KAAAyC,kBACAc,EAAAC,UAAAC,IAAA,oBAAA,EAEAF,EAAAC,UAAAE,OAAA,oBAAA,EAGA,CACA,EACA3D,UAEAsB,OAAAlC,iBAAA,QAAA,IACAa,KAAA2D,IAAAC,SAAApC,EAAAqC,MAAA,GACA7D,KAAA+C,cAAA,CAEA,CAAA,EAGA1B,OAAAlC,iBAAA,UAAA,IACA,IAKA2E,EACAC,EANA/D,KAAAuC,qBAEAM,EAAA3D,SAAAE,eAAAY,KAAAuC,kBAAA,KAIAwB,GADAD,EAAAE,MAAAC,KAAApB,EAAAvB,iBAAA,2BAAA,CAAA,GACA4C,QAAAhF,SAAAiF,aAAA,EAEA,QAAA3C,EAAA4C,IACA5C,EAAA6C,UAAA,IAAAN,GACAvC,EAAA8C,eAAA,EACAR,EAAAA,EAAAS,OAAA,GAAArB,MAAA,GACA1B,EAAA6C,UAAAN,IAAAD,EAAAS,OAAA,IACA/C,EAAA8C,eAAA,EACAR,EAAA,GAAAZ,MAAA,GAEA,WAAA1B,EAAA4C,KACApE,KAAA+C,cAAA,EAEA,CAAA,EAGA,IAAAyB,EAAAtF,SAAAoE,OAAAmB,MAAA,IAAA,EAAAC,KAAAC,GAAAA,EAAAC,WAAA,oBAAA,CAAA,EACAJ,IACAxE,KAAAyC,kBAAA,SAAA+B,EAAAC,MAAA,GAAA,EAAA,GAEA,CACA,CAAA,CACA,CAAA,EC9HAvF,SAAAC,iBAAA,mBAAA,WACA,IAAAE,IAAA,CACAC,GAAA,oBACAC,OACA,MAAA,CACAsF,OAAA,GACAC,cAAA,CACAC,KAAA,OACAnD,QAAA,EACAoD,QAAA,EACAC,SAAA,CAAA,EACApD,IAAA,OACAC,QAAA,CAAAC,MAAA,KAAAmD,KAAA,IAAA,EACAC,WAAA,CAAA,EACAC,WAAA,CAAA,EACApD,OAAA,CAAA,EACAC,YAAA,CACAoD,IAAA,CACAzD,QAAA,CACA,EACA0D,KAAA,CACA1D,QAAA,CACA,EACAM,IAAA,CACAN,QAAA,CACA,EACAO,IAAA,CACAP,QAAA,CACA,CACA,CACA,CACA,CACA,EACA2D,UACAnF,MAAA,mCAAA,EACAC,KAAAC,GAAAA,EAAAC,KAAA,CAAA,EACAF,KAAAd,IACAS,KAAA6E,OAAAtF,EACAS,KAAAiD,UAAA,KACA,IAAAvB,OAAA1B,KAAAc,MAAA0E,OAAAxF,KAAA8E,aAAA,EAAA1C,MAAA,CACA,CAAA,CACA,CAAA,EACA5B,MAAAC,IACAC,QAAAD,MAAA,yBAAAA,CAAA,CACA,CAAA,CACA,CACA,CAAA,CACA,CAAA,EC/CAY,OAAAlC,iBAAA,SAAA,WACA,IAAAsG,EAAAvG,SAAAmD,cAAA,eAAA,EACA,IAAAhB,OAAAqE,QACAD,EAAAjC,UAAAC,IAAA,UAAA,EAEAgC,EAAAjC,UAAAE,OAAA,UAAA,CAEA,CAAA,ECPAxE,SAAAC,iBAAA,mBAAA,KACA,IAAAwG,EAAAzG,SAAAoC,iBAAA,aAAA,EACAqE,GACAA,EAAApE,QAAA,IACA,IAAAlC,IAAA,CACAC,GAAA,IAAAsG,EAAAjE,GACApC,KAAA,CACAsG,MAAA,GACAC,eAAA,GACAC,QAAA,GACAC,aAAA,KACAC,UAAA,CAAA,EACAxF,MAAA,IACA,EACAV,UAEA,IACAmG,EADA,IAAAC,gBAAA9E,OAAA+E,SAAAC,MAAA,EACAC,IAAA,GAAA,EACAJ,IACAlG,KAAA6F,MAAAU,mBAAAL,CAAA,EACAlG,KAAAwG,cAAA,EAEA,EACAtG,QAAA,CACAsG,sBACA,GAAAxG,KAAA6F,MAAAY,KAAA,EAAA,CAEAzG,KAAAiG,UAAA,CAAA,EACAjG,KAAAS,MAAA,KAEA,IACA,IAWAlB,EAXAmH,EAAAC,mBAAA3G,KAAA6F,KAAA,EAEAvF,EAAAsG,MAAAxG,MACA,4BAAAsG,CACA,EACApG,EAAAuG,IAMAtH,EAAAqH,MAAAtG,EAAAC,KAAA,EAEAP,KAAA8F,eAAA9F,KAAA6F,MACA7F,KAAA+F,QAAAxG,EAAAwG,SAAA,GACA/F,KAAAgG,aAAAzG,EAAAuH,aAAA,EACA9G,KAAA+G,mBAAA,GAVA/G,KAAAS,MACA,8DAeA,CALA,MAAAe,GACAxB,KAAAS,MACA,8CACA,CAAA,QACAT,KAAAiG,UAAA,CAAA,CACA,CA5BA,CA6BA,EACAc,qBAEA,IAAAC,EAAA3F,OAAA+E,SAAAa,OAAA5F,OAAA+E,SAAAc,SAGAC,EAAA,IAAAhB,gBAAA9E,OAAA+E,SAAAC,MAAA,EAGA,EAAAc,EAAAC,MACAD,EAAAE,IAAA,IAAAV,mBAAA3G,KAAA6F,KAAA,CAAA,EACAyB,EAAAN,EAAA,IAAAG,EAAAI,SAAA,EACAlG,OAAAmG,QAAAC,UAAA,GAAA,KAAAH,CAAA,IAGAA,EAAAN,EAAA,MAAAL,mBAAA3G,KAAA6F,KAAA,EACAxE,OAAAmG,QAAAC,UAAA,GAAA,KAAAH,CAAA,EAEA,CACA,CACA,CAAA,CACA,CAAA,CAEA,CAAA","file":"script.js","sourcesContent":["document.addEventListener('DOMContentLoaded', function () {\r\n if (document.getElementById(\"calendar-app\")) {\r\n new Vue({\r\n el: '#calendar-app',\r\n data: {\r\n heading: 'Your Heading Here',\r\n events: [],\r\n selectedEvent: null,\r\n skip: 0,\r\n take: 3,\r\n allEventsLoaded: false,\r\n modalOpen: false\r\n },\r\n created() {\r\n this.fetchEvents(true);\r\n },\r\n methods: {\r\n fetchEvents(initialLoad) {\r\n fetch(`/api/calendar/events?skip=${this.skip}&take=${this.take}`)\r\n .then(response => response.json())\r\n .then(data => {\r\n //console.log(data)\r\n if (!initialLoad) {\r\n this.allEventsLoaded = true;\r\n }\r\n this.events = [...this.events, ...data];\r\n this.take = 0;\r\n })\r\n .catch(error => console.error('Error fetching events:', error));\r\n },\r\n loadMore() {\r\n this.skip += 3;\r\n this.fetchEvents();\r\n },\r\n openModal(event) {\r\n this.selectedEvent = event;\r\n this.$refs.modal.showModal();\r\n this.modalOpen = true;\r\n },\r\n closeModal() {\r\n this.modalOpen = false;\r\n var $self = this;\r\n setTimeout(() => {\r\n $self.$refs.modal.close();\r\n }, 500)\r\n },\r\n },\r\n });\r\n }\r\n});\r\n","window.addEventListener(\"DOMContentLoaded\", function () {\r\n var cardSliders = document.querySelectorAll(\".card-slider\");\r\n cardSliders.forEach(function (e) {\r\n var slider = new Splide('#' + e.id, {\r\n perPage: 3,\r\n gap: '1rem',\r\n padding: { right: '15%' },\r\n arrows: false,\r\n breakpoints: {\r\n 992: {\r\n perPage: 2,\r\n },\r\n 760: {\r\n perPage: 1,\r\n },\r\n }\r\n }).mount();\r\n\r\n if (e.querySelector('.splide__arrows')) {\r\n e.querySelector('.prev-arrow').addEventListener('click', function () {\r\n slider.go('<');\r\n });\r\n\r\n e.querySelector('.next-arrow').addEventListener('click', function () {\r\n slider.go('>');\r\n });\r\n }\r\n });\r\n})","document.addEventListener('DOMContentLoaded', function () {\r\n new Vue({\r\n el: '.header-inner',\r\n data: {\r\n selectedDropdownId: null,\r\n mobileNavOpen: false,\r\n accessibilityMode: false, // Initialisering af data\r\n },\r\n methods: {\r\n toggleDropdown(linkId) {\r\n if (!linkId) {\r\n this.closeDropdown();\r\n return;\r\n }\r\n\r\n const dropdownId = linkId + \"-dropdown\";\r\n const dropdown = document.getElementById(dropdownId);\r\n const button = document.getElementById(linkId);\r\n\r\n if (!dropdown || !button) {\r\n console.error(`Elementer ikke fundet: dropdownId=${dropdownId}, linkId=${linkId}`);\r\n return;\r\n }\r\n\r\n if (dropdownId !== this.selectedDropdownId) {\r\n // Luk tidligere dropdown\r\n this.closeDropdown();\r\n\r\n // Åbn ny dropdown\r\n this.selectedDropdownId = dropdownId;\r\n dropdown.setAttribute(\"aria-hidden\", \"false\");\r\n button.setAttribute(\"aria-expanded\", \"true\");\r\n\r\n // Flyt fokus til det første element i dropdownen\r\n this.$nextTick(() => {\r\n const firstFocusable = dropdown.querySelector('ul li a');\r\n setTimeout(function () {\r\n dropdown.focus();\r\n }, 500)\r\n //if (firstFocusable) {\r\n // console.log(\"Flyt fokus\", firstFocusable)\r\n // setTimeout(function () {\r\n // firstFocusable.focus();\r\n // }, 1000);\r\n //}\r\n });\r\n } else {\r\n // Luk dropdown\r\n this.closeDropdown();\r\n document.getElementById(linkId).focus();\r\n }\r\n },\r\n closeDropdown() {\r\n if (this.selectedDropdownId) {\r\n const dropdown = document.getElementById(this.selectedDropdownId);\r\n const button = document.querySelector(`[aria-controls=\"${this.selectedDropdownId}\"]`);\r\n\r\n if (dropdown) {\r\n dropdown.setAttribute(\"aria-hidden\", \"true\");\r\n document.getElementById(this.selectedDropdownId.replace(\"-dropdown\", \"\")).focus();\r\n }\r\n if (button) {\r\n button.setAttribute(\"aria-expanded\", \"false\");\r\n button.focus(); // Returner fokus til knappen\r\n }\r\n }\r\n this.selectedDropdownId = null;\r\n },\r\n toggleMobileNav() {\r\n this.mobileNavOpen = !this.mobileNavOpen;\r\n this.closeDropdown(); // Luk dropdowns, når mobilenavigation åbnes/lukkes\r\n },\r\n toggleAccessibilityMode() {\r\n this.accessibilityMode = !this.accessibilityMode;\r\n\r\n // Sæt en cookie til tilgængelighedstilstand\r\n document.cookie = \"accessibilityMode=\" + (this.accessibilityMode ? \"true\" : \"false\") + \"; path=/;\";\r\n const htmlElement = document.querySelector(\"html\");\r\n\r\n if (htmlElement) {\r\n if (this.accessibilityMode) {\r\n htmlElement.classList.add(\"accessibility-mode\");\r\n } else {\r\n htmlElement.classList.remove(\"accessibility-mode\");\r\n }\r\n }\r\n },\r\n },\r\n created() {\r\n // Luk dropdown, hvis brugeren klikker udenfor\r\n window.addEventListener(\"click\", (e) => {\r\n if (!this.$el.contains(e.target)) {\r\n this.closeDropdown();\r\n }\r\n });\r\n\r\n // Tastatur-håndtering\r\n window.addEventListener(\"keydown\", (e) => {\r\n if (!this.selectedDropdownId) return;\r\n\r\n const dropdown = document.getElementById(this.selectedDropdownId);\r\n if (!dropdown) return;\r\n\r\n const focusable = Array.from(dropdown.querySelectorAll('[tabindex=\"0\"], a, button'));\r\n const focusedIndex = focusable.indexOf(document.activeElement);\r\n\r\n if (e.key === \"Tab\") {\r\n if (e.shiftKey && focusedIndex === 0) {\r\n e.preventDefault();\r\n focusable[focusable.length - 1].focus();\r\n } else if (!e.shiftKey && focusedIndex === focusable.length - 1) {\r\n e.preventDefault();\r\n focusable[0].focus();\r\n }\r\n } else if (e.key === \"Escape\") {\r\n this.closeDropdown();\r\n }\r\n });\r\n\r\n // Indstil tilgængelighedstilstand fra cookie\r\n const cookieValue = document.cookie.split('; ').find(row => row.startsWith('accessibilityMode='));\r\n if (cookieValue) {\r\n this.accessibilityMode = cookieValue.split('=')[1] === 'true';\r\n }\r\n },\r\n });\r\n});\r\n","document.addEventListener('DOMContentLoaded', function () {\r\n new Vue({\r\n el: '#instagram-slider',\r\n data() {\r\n return {\r\n images: [],\r\n splideOptions: {\r\n type: 'loop',\r\n perPage: 5,\r\n perMove: 1,\r\n autoplay: false,\r\n gap: '1rem',\r\n padding: { right: '8%', left: \"8%\" },\r\n autoHeight: true,\r\n pagination: false,\r\n arrows: false,\r\n breakpoints: {\r\n 2000: {\r\n perPage: 4,\r\n },\r\n 1200: {\r\n perPage: 3,\r\n },\r\n 992: {\r\n perPage: 2,\r\n },\r\n 760: {\r\n perPage: 1,\r\n },\r\n }\r\n },\r\n };\r\n },\r\n mounted() {\r\n fetch('/api/instagram/get-images?take=10')\r\n .then(response => response.json())\r\n .then(data => {\r\n this.images = data;\r\n this.$nextTick(() => {\r\n new Splide(this.$refs.splide, this.splideOptions).mount();\r\n });\r\n })\r\n .catch(error => {\r\n console.error('Error fetching images:', error);\r\n });\r\n },\r\n });\r\n});\r\n","window.addEventListener('scroll', function () {\r\n const header = document.querySelector('.header-inner');\r\n if (window.scrollY > 100) {\r\n header.classList.add('scrolled');\r\n } else {\r\n header.classList.remove('scrolled');\r\n }\r\n});\r\n","document.addEventListener(\"DOMContentLoaded\", () => {\r\n var searchApps = document.querySelectorAll(\".search-app\");\r\n if (searchApps) {\r\n searchApps.forEach((searchApp) => {\r\n new Vue({\r\n el: \"#\" + searchApp.id,\r\n data: {\r\n query: '',\r\n submittedQuery: '',\r\n results: [],\r\n resultsCount: null,\r\n isLoading: false,\r\n error: null\r\n },\r\n created() {\r\n // Check for initial query in URL\r\n const urlParams = new URLSearchParams(window.location.search);\r\n const initialQuery = urlParams.get('q');\r\n if (initialQuery) {\r\n this.query = decodeURIComponent(initialQuery);\r\n this.performSearch(); // Trigger initial search if query exists in URL\r\n }\r\n },\r\n methods: {\r\n async performSearch() {\r\n if (!this.query.trim()) return;\r\n\r\n this.isLoading = true;\r\n this.error = null;\r\n\r\n try {\r\n const encodedQuery = encodeURIComponent(this.query);\r\n\r\n const response = await fetch(\r\n `/api/search/search?query=${encodedQuery}`\r\n );\r\n if (!response.ok) {\r\n this.error =\r\n \"There was an error processing your search. Please try again.\";\r\n return;\r\n }\r\n\r\n const data = await response.json();\r\n //console.log(\"DATA\", data);\r\n this.submittedQuery = this.query;\r\n this.results = data.results || [];\r\n this.resultsCount = data.resultCount || 0;\r\n this.updateUrlParameter();\r\n } catch (e) {\r\n this.error =\r\n \"Der skete en uventet fejl. Prøv igen senere.\";\r\n } finally {\r\n this.isLoading = false;\r\n }\r\n },\r\n updateUrlParameter() {\r\n // Get the current URL without parameters\r\n const baseUrl = window.location.origin + window.location.pathname;\r\n\r\n // Check if there are any existing parameters\r\n const existingParams = new URLSearchParams(window.location.search);\r\n\r\n // If there are existing parameters, append the query parameter using '&'\r\n if (existingParams.size > 0) {\r\n existingParams.set('q', encodeURIComponent(this.query));\r\n const newUrl = baseUrl + '?' + existingParams.toString();\r\n window.history.pushState({}, null, newUrl);\r\n } else {\r\n // If there are no existing parameters, add the query parameter using '?'\r\n const newUrl = baseUrl + '?q=' + encodeURIComponent(this.query);\r\n window.history.pushState({}, null, newUrl);\r\n }\r\n }\r\n }\r\n });\r\n });\r\n }\r\n});\r\n"]}