{"version":3,"file":"app-b09e2300.js","sources":["../../../src/js/global/stickyHeader.js","../../../src/js/global/headerAlertPanel.js","../../../src/js/utillity/debounce.js","../../../src/js/constants.js","../../../src/js/utillity/viewportHelper.js","../../../src/js/utillity/generateRandomString.js","../../../src/js/global/navigationAndSearch.js","../../../src/js/global/sidebarNavigation.js","../../../src/js/global/pagination.js","../../../src/js/global/leaveSite.js","../../../src/js/global/embedVideo.js","../../../src/js/blocks/coverBlock.js","../../../src/js/blocks/faqBlock.js","../../../src/js/global/pageHero.js","../../../src/js/templates/findShelter.js","../../../src/js/main.js"],"sourcesContent":["export default function stickyHeader() {\n const className = 'bodyScrolled';\n const page = document.querySelector('.page');\n\n // Use the existing bodyScrollObserver div\n const headerScrollObserver = document.getElementById('bodyScrollObserver');\n\n var observer = new IntersectionObserver(function(entries) {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n if (page.classList.contains(className)) {\n page.classList.remove(className);\n }\n } else {\n if (!page.classList.contains(className)) {\n page.classList.add(className);\n }\n }\n });\n });\n\n observer.observe(headerScrollObserver);\n}","function headerAlertModal() {\n window.onload = function () {\n const alertModal = document.getElementById(\"alertModal\");\n\n // Check if we have a modal first:\n if (alertModal === null) {\n return;\n }\n\n if (sessionStorage.getItem(\"isAlertActive\") === \"false\") {\n alertModal.setAttribute(\"active\", \"false\");\n }\n\n const alertToggleButton = document.querySelector(\".alertToggle\");\n alertToggleButton.addEventListener(\"click\", function () {\n if (alertModal.getAttribute(\"active\") === \"true\") {\n // Add animate class\n alertModal.classList.add(\"animate\");\n // Remove animate class after 400ms, then set active to false\n setTimeout(function () {\n alertModal.classList.remove(\"animate\");\n alertModal.setAttribute(\"active\", \"false\");\n sessionStorage.setItem(\"isAlertActive\", \"false\");\n }, 400);\n }\n });\n };\n}\n\nexport default headerAlertModal;\n","// Utillity function for heavy event listeners.\n\nexport default function debounce(func, wait) {\n let timeout;\n return function() {\n clearTimeout(timeout);\n timeout = setTimeout(() => func.apply(this, arguments), wait);\n };\n}\n","// Constants used throughout the app\n\nexport const MOBILE_BREAKPOINT = 1231;","import debounce from './debounce';\nimport { MOBILE_BREAKPOINT } from './../constants';\n\nlet isMobile = window.innerWidth <= MOBILE_BREAKPOINT;\n/* console.log('isMobile', isMobile); */\n\nfunction updateIsMobileView() {\n const wasMobile = isMobile;\n isMobile = window.innerWidth <= MOBILE_BREAKPOINT;\n/* console.log('isMobile', isMobile); */\n\n if (wasMobile !== isMobile) {\n // Emit a custom event when the viewport changes from mobile to desktop or vice versa.\n const event = new CustomEvent('viewportChange', {\n detail: {\n wasMobile: wasMobile,\n isMobile: isMobile\n }\n });\n window.dispatchEvent(event);\n }\n}\n\nwindow.addEventListener('resize', debounce(updateIsMobileView, 10));\n\n\nexport default function isMobileView() {\n return isMobile;\n}","// Generarte a random string of the specified length\n// Use like: generateRandomString(10, { includeUppercase: true, includeSymbols: true });\n\nexport default function generateRandomString(length, options = {}) {\n\n // Define the default set of characters to be used\n const defaultCharacters = 'abcdefghijklmnopqrstuvwxyz0123456789';\n \n // Override the default options with the user-specified options\n let {\n characters = defaultCharacters,\n includeUppercase = false,\n includeSymbols = false,\n } = options;\n \n // Add uppercase letters and symbols if requested\n if (includeUppercase) {\n characters += 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n }\n if (includeSymbols) {\n characters += '!@#$%^&*()_-+={}[]\\\\|;:\\'\",.<>/?';\n }\n \n // Check that the characters string is not empty or null\n if (!characters) {\n throw new Error('Characters string cannot be empty or null');\n }\n \n // Define the variable to store the random string\n let randomString = '';\n \n // Generate a random string of the specified length\n const randomValues = new Uint8Array(length);\n crypto.getRandomValues(randomValues);\n for (let i = 0; i < length; i++) {\n const index = randomValues[i] % characters.length;\n randomString += characters.charAt(index);\n }\n \n return randomString;\n}","import isMobileView from \"../utillity/viewportHelper.js\";\nimport generateRandomString from \"../utillity/generateRandomString.js\";\n\nexport default function navigationAndSearch() {\n const page = document.querySelector(\".page\");\n const menuButtons = document.querySelectorAll(\n \".menuButtonItem .menuButtonToggle\"\n );\n\n const submenuMap = new Map();\n let menuToggle;\n let searchToggle;\n let svgUseElement;\n\n async function handleViewportChange(event) {\n const { wasMobile, isMobile } = event.detail;\n\n if (wasMobile !== isMobile) {\n await closeAllSubmenus(true); // Use the forceClose flag\n closeSearch();\n closeMobileMenu();\n\n // Do any specific logic for transitioning between views here\n /* if(isMobile) {} else {} */\n }\n }\n\n async function closeAllSubmenus(forceClose = false) {\n const closePromises = Array.from(menuButtons).map((button) =>\n closeMenu(button, forceClose)\n );\n await Promise.all(closePromises);\n }\n\n function closeMenu(button, forceClose = false) {\n return new Promise((resolve, reject) => {\n const submenu = submenuMap.get(button);\n\n if (!submenu) {\n resolve();\n return;\n }\n\n if (forceClose) {\n submenu.classList.remove(\"active\", \"closing\");\n button.setAttribute(\"aria-expanded\", \"false\");\n page.classList.remove(\"mainNavigationActive\");\n resolve();\n return;\n }\n\n if (submenu.classList.contains(\"active\")) {\n submenu.addEventListener(\"transitionend\", function handler(event) {\n if (event.propertyName !== \"opacity\") return;\n submenu.classList.remove(\"active\", \"closing\");\n submenu.removeEventListener(\"transitionend\", handler);\n resolve();\n page.classList.remove(\"mainNavigationActive\");\n });\n\n submenu.classList.add(\"closing\");\n button.setAttribute(\"aria-expanded\", \"false\");\n } else {\n resolve();\n }\n });\n }\n\n function openMenu(button) {\n const submenu = submenuMap.get(button);\n submenu.classList.add(\"active\");\n button.setAttribute(\"aria-expanded\", \"true\");\n\n // Add the class to the page when the submenu is opened\n page.classList.add(\"mainNavigationActive\");\n }\n\n async function toggleMenu(event) {\n event.stopPropagation();\n const button = event.target.closest(\".menuButtonToggle\");\n const parentItem = button.closest(\".menuButtonItem\");\n const submenu = parentItem.querySelector(\".menuSubmenuItem\");\n\n if (submenu) {\n if (submenu.classList.contains(\"active\")) {\n await closeMenu(button);\n } else {\n if (!isMobileView()) {\n // Check if not in mobile view\n await closeAllSubmenus();\n }\n openMenu(button);\n }\n }\n }\n\n function initializeMenuButtons() {\n menuButtons.forEach((button) => {\n const parentItem = button.closest(\".menuButtonItem\");\n const submenu = parentItem.querySelector(\".menuSubmenuItem\");\n\n if (submenu) {\n // Generate random ID for each button and enhance the menu with aria-controls and aria-expanded attributes\n const submenuID = `submenu-${generateRandomString(5, {\n includeUppercase: true,\n })}`;\n submenu.setAttribute(\"id\", submenuID);\n\n // Set up aria-controls on the button\n button.setAttribute(\"aria-controls\", submenuID);\n // Set up aria-expanded on the button\n button.setAttribute(\"aria-expanded\", \"false\");\n\n // Save submenu in the map for later use\n submenuMap.set(button, submenu);\n }\n });\n }\n\n function setupMenuEventListeners() {\n menuButtons.forEach((button) => {\n button.addEventListener(\"click\", toggleMenu);\n });\n\n document.addEventListener(\"click\", (event) => {\n if (!isMobileView()) {\n const isClickInsideMenu = Array.from(menuButtons).some((button) =>\n button.contains(event.target)\n );\n if (!isClickInsideMenu) {\n closeAllSubmenus();\n }\n }\n });\n\n document.addEventListener(\"keydown\", (event) => {\n if (event.key === \"Escape\") {\n closeAllSubmenus();\n }\n });\n }\n\n // Handle Search\n function openSearch() {\n searchToggle.setAttribute(\"aria-expanded\", \"true\");\n\n const newLabel = searchToggle.getAttribute(\"data-close-label\");\n searchToggle.setAttribute(\"aria-label\", newLabel);\n\n svgUseElement.setAttribute(\"xlink:href\", \"#iconClose\");\n\n document.body.classList.add(\"searchActive\");\n\n const spanElement = searchToggle.querySelector(\"span\");\n spanElement.textContent = \"Stäng\";\n\n // Get the search input field and set focus on it after a brief delay\n setTimeout(() => {\n const searchInput = document.querySelector(\"#desktopSearchBar\");\n if (searchInput) {\n searchInput.focus();\n }\n }, 200); // Adjust the delay as needed\n }\n\n function closeSearch() {\n searchToggle.setAttribute(\"aria-expanded\", \"false\");\n\n const newLabel = searchToggle.getAttribute(\"data-open-label\");\n searchToggle.setAttribute(\"aria-label\", newLabel);\n\n svgUseElement.setAttribute(\"xlink:href\", \"#iconSearch\");\n\n document.body.classList.remove(\"searchActive\");\n\n const spanElement = searchToggle.querySelector(\"span\");\n spanElement.textContent = \"Sök\";\n }\n\n function toggleSearch(event) {\n if (event) event.stopPropagation();\n\n const isExpanded = searchToggle.getAttribute(\"aria-expanded\") === \"true\";\n\n if (isExpanded) {\n closeSearch();\n } else {\n closeAllSubmenus();\n openSearch();\n }\n }\n\n function setupSearchEventListeners() {\n searchToggle = document.querySelector(\".searchToggle\");\n\n if (searchToggle) {\n svgUseElement = searchToggle.querySelector(\".icon use\");\n const desktopSearch = document.querySelector(\"#desktopSearch-cP4zJ\");\n\n if (!searchToggle || !desktopSearch || !svgUseElement) {\n return;\n }\n\n searchToggle.addEventListener(\"click\", toggleSearch);\n\n document.addEventListener(\"click\", (event) => {\n const isClickInside =\n desktopSearch.contains(event.target) ||\n searchToggle.contains(event.target);\n\n if (\n !isClickInside &&\n searchToggle.getAttribute(\"aria-expanded\") === \"true\"\n ) {\n closeSearch();\n }\n });\n }\n }\n\n // Handle Mobile menu\n function openMobileMenu() {\n menuToggle.setAttribute(\"aria-expanded\", \"true\");\n document.querySelector('.headerButtons .mobileTopButtons').classList.add('hidden');\n\n const svgUseElement = menuToggle.querySelector(\".icon use\");\n if (svgUseElement) {\n svgUseElement.setAttribute(\"xlink:href\", \"#iconClose\");\n }\n\n document.body.classList.add(\"mainMenuActive\");\n }\n\n function closeMobileMenu() {\n menuToggle.setAttribute(\"aria-expanded\", \"false\");\n document.querySelector('.headerButtons .mobileTopButtons').classList.remove('hidden');\n\n const svgUseElement = menuToggle.querySelector(\".icon use\");\n if (svgUseElement) {\n svgUseElement.setAttribute(\"xlink:href\", \"#iconNav\");\n }\n\n document.body.classList.remove(\"mainMenuActive\");\n }\n\n function toggleMobileMenu(event) {\n const isExpanded = menuToggle.getAttribute(\"aria-expanded\") === \"true\";\n\n if (isExpanded) {\n closeMobileMenu();\n } else {\n openMobileMenu();\n }\n }\n\n function setupMobileMenuEventListeners() {\n menuToggle = document.querySelector(\".menuToggle\");\n if (menuToggle) {\n menuToggle.addEventListener(\"click\", toggleMobileMenu);\n }\n }\n\n window.addEventListener(\"viewportChange\", handleViewportChange);\n\n // Initialize the menu buttons\n initializeMenuButtons();\n setupMenuEventListeners();\n setupSearchEventListeners();\n setupMobileMenuEventListeners();\n}\n","export default function sidebarNavigation() {\n const sidebar = document.querySelector(\"#sidebar\");\n\n if (sidebar) {\n const openLabel = sidebar.dataset.openLabel;\n const closeLabel = sidebar.dataset.closeLabel;\n\n const dropdownToggles = sidebar.querySelectorAll(\".dropdownToggle\");\n\n function toggleSubmenu(toggleButton) {\n const submenuContainer = toggleButton.nextElementSibling;\n const isExpanded =\n submenuContainer.getAttribute(\"data-expanded\") === \"true\";\n\n // Update data-expanded attribute\n submenuContainer.setAttribute(\"data-expanded\", !isExpanded);\n\n // Update aria-expanded and aria-label attributes\n toggleButton.setAttribute(\"aria-expanded\", !isExpanded);\n toggleButton.setAttribute(\n \"aria-label\",\n !isExpanded ? closeLabel : openLabel\n );\n }\n\n // Attach event listeners\n dropdownToggles.forEach((toggle) => {\n toggle.addEventListener(\"click\", () => toggleSubmenu(toggle));\n });\n\n // Function to expand all ancestor submenuContainers\n function expandAncestors(element) {\n let parentLi = element.closest('li.hasSubmenu');\n while (parentLi) {\n const submenuContainer = parentLi.querySelector('.submenuContainer');\n if (submenuContainer) {\n submenuContainer.setAttribute('data-expanded', 'true');\n const toggleButton = parentLi.querySelector('.dropdownToggle');\n if (toggleButton) {\n toggleButton.setAttribute('aria-expanded', 'true');\n toggleButton.setAttribute('aria-label', closeLabel);\n }\n }\n parentLi = parentLi.parentElement.closest('li.hasSubmenu');\n }\n }\n\n // Find all tags with aria-current=\"page\" inside elements with class hasSubmenu\n const currentLinks = sidebar.querySelectorAll('.hasSubmenu a[aria-current=\"page\"]');\n currentLinks.forEach((link) => {\n expandAncestors(link);\n });\n }\n}\n","export default function pagination() {\n const paginationButtons = document.querySelectorAll('.pagination-btn');\n\n paginationButtons.forEach(button => {\n button.addEventListener('click', () => {\n const url = button.getAttribute('data-url');\n window.location.href = url;\n });\n });\n}","// Function to handle button click event\nexport default function leaveSite() {\n // Get all elements with the class \"leaveButton\"\n const leaveButtons = document.querySelectorAll('.leaveButton');\n \n // Loop through each link and attach the click event listener\n leaveButtons.forEach(function(link) {\n link.addEventListener('click', function(event) {\n event.preventDefault(); // Prevent the default behavior of the anchor tag\n\n // Replace the current entry in the browser's history stack\n window.history.replaceState(null, null, '');\n\n // Redirect the user to another website\n window.location.href = 'https://google.com';\n });\n });\n}\n","export default function embedVideo() {\n document.addEventListener('DOMContentLoaded', function (event) {\n // Find all oembed elements with a 'url' attribute\n const oembedElements = document.querySelectorAll('oembed[url]');\n console.log(oembedElements);\n\n oembedElements.forEach(function (element) {\n const url = element.getAttribute('url');\n let videoId = null; // Initialize videoId as null\n\n if (!url) return; // Exit if no URL is found\n videoId = extractYouTubeId(url) || extractVimeoId(url); // Extract IDs for both platforms\n\n if (videoId) {\n let iframe = document.createElement('iframe');\n // Determine the correct src based on the platform\n if (url.includes('youtube.com') || url.includes('youtu.be')) {\n // Create the iframe element for the YouTube video\n iframe.setAttribute('src', `https://www.youtube.com/embed/${videoId}`);\n iframe.title = \"YouTube video player\";\n } else if (url.includes('vimeo.com')) {\n // Create the iframe element for the Vimeo video\n iframe.setAttribute('src', `https://player.vimeo.com/video/${videoId}`);\n iframe.title = \"Vimeo video player\";\n }\n\n // Set common attributes for the iframe\n iframe.setAttribute('width', '560'); // Set width\n iframe.setAttribute('height', '315'); // Set height\n iframe.setAttribute('frameborder', '0');\n iframe.setAttribute('allow', 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture');\n iframe.setAttribute('allowfullscreen', 'true');\n iframe.loading = \"lazy\";\n iframe.style.aspectRatio = \"16/9\"; // Maintain aspect ratio\n iframe.style.width = \"100%\"; // Responsive width\n iframe.style.display = \"block\";\n iframe.style.height = \"auto\";\n iframe.style.margin = \"1.5rem auto\"; // Center the iframe\n\n // Replace the oembed element with the iframe\n if (element.parentNode) {\n element.parentNode.replaceChild(iframe, element);\n }\n }\n });\n\n // Function to extract the YouTube video ID from various URL formats\n function extractYouTubeId(url) {\n const regex = /(?:https?:\\/\\/)?(?:www\\.)?(?:youtube\\.com\\/(?:[^\\/\\n\\s]+\\/\\S+\\/|(?:v|e(?:mbed)?)\\/|\\S*?[?&]v=)|youtu\\.be\\/)([a-zA-Z0-9_-]{11})/;\n const matches = url.match(regex);\n return matches ? matches[1] : null; // Return the extracted ID or null\n }\n\n // Function to extract the Vimeo video ID from various URL formats\n function extractVimeoId(url) {\n const regex = /(?:https?:\\/\\/)?(?:www\\.)?(?:vimeo\\.com\\/)([0-9]+)/;\n const matches = url.match(regex);\n return matches ? matches[1] : null; // Return the extracted ID or null\n }\n });\n}\n","import generateRandomString from \"../utillity/generateRandomString.js\";\n\nconst coverBlocks = document.querySelectorAll(\".coverBlock\");\n\nif (coverBlocks.length > 0) {\n /**\n * This is a MediaQueryList object representing the results of the specified media query string,\n * which checks whether the user has requested the system minimize the amount of animation or motion it uses.\n */\n const reducedMotionQuery = window.matchMedia(\n \"(prefers-reduced-motion: reduce)\"\n );\n\n /**\n * These are SVG path strings for the play and pause icons.\n */\n const playPath = 'M19.634 12.15a1 1 0 0 1 0 1.7L1.528 25.106A1 1 0 0 1 0 24.257V1.743a1 1 0 0 1 1.528-.85l18.106 11.259Z';\n const pausePath = 'M0 1a1 1 0 0 1 1-1h5a1 1 0 0 1 1 1v24a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1V1Z M13 1a1 1 0 0 1 1-1h5a1 1 0 0 1 1 1v24a1 1 0 0 1-1 1h-5a1 1 0 0 1-1-1V1Z';\n\n /**\n * Creates a SVG element and returns it after setting its attributes.\n * @returns {SVGElement} SVG element\n */\n function createSvg() {\n let svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n svg.setAttribute(\"aria-hidden\", \"true\");\n svg.setAttribute(\"fill\", \"currentColor\");\n svg.setAttribute(\"viewBox\", \"0 0 21 26\");\n return svg;\n }\n\n /**\n * Creates a SVG path and returns it after appending it to the passed SVG element.\n * @param {SVGElement} svg - The SVG element to which the path is appended.\n * @returns {SVGPathElement} SVG path element\n */\n function createSvgPath(svg) {\n let path = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n svg.appendChild(path);\n return path;\n }\n\n /**\n * Creates a video control button with SVG icon and returns them.\n * @returns {{button: HTMLButtonElement, path: SVGPathElement}} An object containing the created button and SVG path elements.\n */\n function createVideoControl() {\n let button = document.createElement(\"button\");\n button.type = \"button\";\n button.className = \"videoToggle\";\n button.setAttribute(\"aria-label\", \"Toggle video\");\n\n let svg = createSvg();\n let path = createSvgPath(svg);\n\n button.appendChild(svg);\n return { button, path };\n }\n\n /**\n * Iterates over each 'coverBlock' and implements the control behavior.\n */\n coverBlocks.forEach((coverBlock) => {\n const heroTitle = coverBlock.querySelector(\".title\");\n const heroTitleID = `heroTitle-${generateRandomString(5, {\n includeUppercase: true,\n })}`;\n heroTitle.setAttribute(\"id\", heroTitleID);\n coverBlock.setAttribute(\"aria-labelledby\", heroTitleID);\n\n const videoElement = coverBlock.querySelector(\".videoBackground\");\n\n /** \n * Check if videoElement exists.\n */\n if (videoElement) {\n /**\n * Check if the video element is present and if it can play a valid format.\n */\n if (\n videoElement.canPlayType(\"video/mp4\") ||\n videoElement.canPlayType(\"video/webm\") ||\n videoElement.canPlayType(\"video/ogg\")\n ) {\n videoElement.removeAttribute(\"controls\");\n }\n\n const { button: videoControlButton, path: videoControlPath } =\n createVideoControl();\n\n const heroControls = document.createElement(\"div\");\n heroControls.className = \"heroControls\";\n heroControls.appendChild(videoControlButton);\n coverBlock.prepend(heroControls);\n\n const videoID = `video-${generateRandomString(5, {\n includeUppercase: true,\n })}`;\n videoElement.setAttribute(\"id\", videoID);\n videoControlButton.setAttribute(\"aria-controls\", videoID);\n\n /**\n * Checks for the 'reduced motion' setting and updates the video state and the button icon accordingly.\n */\n const checkReducedMotion = () => {\n if (reducedMotionQuery.matches) {\n videoElement.pause();\n videoControlPath.setAttribute(\"d\", playPath);\n } else {\n if (videoElement.paused) {\n videoElement.play();\n }\n videoControlPath.setAttribute(\"d\", pausePath);\n }\n };\n\n /**\n * Toggles the playing state of the video and updates the button icon.\n */\n const togglePlayPause = () => {\n if (videoElement.paused) {\n videoElement.play();\n videoControlPath.setAttribute(\"d\", pausePath);\n } else {\n videoElement.pause();\n videoControlPath.setAttribute(\"d\", playPath);\n }\n };\n\n /**\n * Add event listeners for the 'change' event on 'reducedMotionQuery' and the 'click' event on 'videoControlButton'.\n */\n reducedMotionQuery.addEventListener(\"change\", checkReducedMotion);\n videoControlButton.addEventListener(\"click\", togglePlayPause);\n checkReducedMotion();\n }\n });\n}\n","import generateRandomString from '../utillity/generateRandomString.js';\n\nconst dropdownAccordions = document.querySelectorAll('.accordion');\n\nif (dropdownAccordions.length > 0) {\n const accordionArray = Array.from(dropdownAccordions);\n\n accordionArray.forEach((accordion) => {\n const accordionTriggerTitles = accordion.querySelectorAll('.accordionTitle');\n const accordionTriggerTitlesArray = Array.from(accordionTriggerTitles);\n\n accordionTriggerTitlesArray.forEach((accordionTriggerTitle) => {\n const accordionToggle = accordionTriggerTitle.querySelector('button');\n const accordionToggleText = accordionTriggerTitle.querySelector('span');\n const accordionPanel = accordionTriggerTitle.nextElementSibling;\n accordionPanel.style.opacity = 1;\n\n const accordionToggleIcon = accordionToggle.querySelector('svg');\n if (accordionToggleIcon) {\n accordionToggleIcon.setAttribute('aria-hidden', 'true');\n }\n\n // Generate random ID for each accordion's Title text & Panel and enhance the accessibility of the accordion progressively\n const accordionToggleTextID = `accordionToggleText-${generateRandomString(5, { includeUppercase: true })}`;\n accordionToggleText.setAttribute('id', accordionToggleTextID);\n\n const accordionPanelID = `accordionPanel-${generateRandomString(5, { includeUppercase: true })}`;\n accordionPanel.setAttribute('id', accordionPanelID);\n\n // Set the accordion toggle aria-controls attribute to the ID of the accordion panel and set the button to role button.\n accordionToggle.setAttribute('aria-controls', accordionPanelID);\n accordionToggle.setAttribute('aria-expanded', 'false');\n accordionToggle.setAttribute('type', 'button');\n\n // Set the accordion panel aria-labelledby attribute to the ID of the accordion toggle text and set the panel to role region.\n accordionPanel.setAttribute('aria-labelledby', accordionToggleTextID);\n accordionPanel.setAttribute('aria-hidden', 'true');\n accordionPanel.setAttribute('role', 'region');\n accordionPanel.classList.add('collapsed');\n\n accordionToggle.addEventListener('click', () => {\n // If the accordion is not expanded, expand it\n if (accordionToggle.getAttribute('aria-expanded') === 'false') {\n openPanel();\n } else {\n closePanel();\n }\n\n // function for opening the panel:\n function openPanel() {\n accordionToggle.setAttribute('aria-expanded', 'true');\n accordionPanel.setAttribute('aria-hidden', 'false');\n accordionPanel.classList.remove('collapsed');\n accordionPanel.classList.add('expanded');\n }\n\n // function for closing the panel:\n function closePanel() {\n accordionToggle.setAttribute('aria-expanded', 'false');\n accordionPanel.classList.add('animating');\n\n // Give the animation time to run before removing the expanded class:\n setTimeout(() => {\n accordionPanel.classList.remove('animating');\n accordionPanel.classList.remove('expanded');\n accordionPanel.classList.add('collapsed');\n accordionPanel.setAttribute('aria-hidden', 'true');\n }, 400); // 400ms is the duration of the animation + delay\n }\n });\n });\n\n // on window load set timeout to allow the accordion to animate in\n window.addEventListener('load', () => {\n accordion.classList.add('fade-in');\n\n setTimeout(() => {\n accordion.style.opacity = 1;\n accordion.classList.remove('fade-in');\n }, 400);\n\n // After accordion wrapper has faded in:\n // Stagger animate each accordionToggle by setting them to opacity 1 and add class fade in with a delay,\n // After each panel has animated in, remove fade-in class and set opacity to 1\n\n setTimeout(() => {\n accordionTriggerTitlesArray.forEach((accordionTriggerTitle) => {\n const accordionToggle = accordionTriggerTitle.querySelector('button');\n accordionToggle.style.opacity = 1;\n accordionToggle.classList.add('fade-in');\n });\n }, 400);\n });\n });\n}\n","import generateRandomString from '../utillity/generateRandomString.js';\n\nconst pageHero = document.getElementsByClassName('pageHero')[0];\n\nif (pageHero) {\n\n /**\n * This is a MediaQueryList object representing the results of the specified media query string,\n * which checks whether the user has requested the system minimize the amount of animation or motion it uses.\n */\n const reducedMotionQuery = window.matchMedia('(prefers-reduced-motion: reduce)');\n\n /**\n * These are SVG path strings for the play and pause icons.\n */\n const playPath = 'M19.634 12.15a1 1 0 0 1 0 1.7L1.528 25.106A1 1 0 0 1 0 24.257V1.743a1 1 0 0 1 1.528-.85l18.106 11.259Z';\n const pausePath = 'M0 1a1 1 0 0 1 1-1h5a1 1 0 0 1 1 1v24a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1V1Z M13 1a1 1 0 0 1 1-1h5a1 1 0 0 1 1 1v24a1 1 0 0 1-1 1h-5a1 1 0 0 1-1-1V1Z';\n\n /**\n * Creates a SVG element and returns it after setting its attributes.\n * @returns {SVGElement} SVG element\n */\n function createSvg() {\n let svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttribute('aria-hidden', 'true');\n svg.setAttribute('fill', 'currentColor');\n svg.setAttribute('viewBox', '0 0 21 26');\n return svg;\n }\n\n /**\n * Creates a SVG path and returns it after appending it to the passed SVG element.\n * @param {SVGElement} svg - The SVG element to which the path is appended.\n * @returns {SVGPathElement} SVG path element\n */\n function createSvgPath(svg) {\n let path = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n svg.appendChild(path);\n return path;\n }\n\n /**\n * Creates a video control button with SVG icon and returns them.\n * @returns {{button: HTMLButtonElement, path: SVGPathElement}} An object containing the created button and SVG path elements.\n */\n function createVideoControl() {\n let button = document.createElement('button');\n button.type = 'button';\n button.className = 'videoToggle';\n button.setAttribute('aria-label', 'Toggle video');\n\n let svg = createSvg();\n let path = createSvgPath(svg);\n\n button.appendChild(svg);\n return {button, path};\n }\n\n const videoElement = pageHero.querySelector('.pageHeroVideo');\n\n if (videoElement && videoElement.canPlayType('video/mp4')) {\n videoElement.removeAttribute('controls');\n\n const {button: videoControlButton, path: videoControlPath} = createVideoControl();\n\n const heroControls = document.createElement('div');\n heroControls.className = 'heroControls';\n heroControls.appendChild(videoControlButton);\n pageHero.prepend(heroControls);\n\n const videoID = `video-${generateRandomString(5, { includeUppercase: true })}`;\n videoElement.setAttribute('id', videoID);\n videoControlButton.setAttribute('aria-controls', videoID);\n\n const checkReducedMotion = () => {\n if (reducedMotionQuery.matches) {\n videoElement.pause();\n videoControlPath.setAttribute('d', playPath);\n } else {\n videoElement.play();\n setTimeout(() => {\n if(videoElement.paused) {\n videoControlPath.setAttribute('d', playPath);\n } else {\n videoControlPath.setAttribute('d', pausePath);\n }\n }, 1000); // Check after 1 second\n }\n };\n\n const togglePlayPause = () => {\n if (videoElement.paused) {\n videoElement.play();\n videoControlPath.setAttribute('d', pausePath);\n } else {\n videoElement.pause();\n videoControlPath.setAttribute('d', playPath);\n }\n };\n\n reducedMotionQuery.addEventListener('change', checkReducedMotion);\n videoControlButton.addEventListener('click', togglePlayPause);\n checkReducedMotion();\n }\n}\n","\n// Select all elements with the class 'showAll' that are within elements with the class 'openingHours'\nconst showAllBtns = document.querySelectorAll('.openingHours .showAll');\n\n// Iterate over each 'showAll' button\nif (showAllBtns) {\n showAllBtns.forEach(button => {\n button.addEventListener('click', () => {\n button.classList.toggle('show');\n const parentElement = button.parentElement;\n const schedules = parentElement.querySelectorAll('.dateItem');\n \n // Iterate over each 'schedule' element\n schedules.forEach(schedule => {\n schedule.classList.toggle('show');\n });\n });\n });\n}\n\n// Move the input search label on click\nconst searchField = document.querySelector('.searchField');\n\nif (searchField) {\n searchField.addEventListener('click', () => {\n searchField.classList.add('moveLabel');\n });\n\n // Function to handle clicks outside searchField\n const handleClickOutside = (event) => {\n if (!searchField.contains(event.target)) {\n searchField.classList.remove('moveLabel');\n }\n };\n\n document.addEventListener('click', handleClickOutside);\n}\n\n// Open/close search filters in mobile\nconst filterToggle = document.querySelectorAll('.filterBox h3');\n\nif (filterToggle) {\n filterToggle.forEach(btn => {\n btn.addEventListener('click', () => {\n const parentElement = btn.parentElement;\n parentElement.classList.toggle('show');\n });\n });\n}","// First order of buisness -> Remove no-js class from html element\ndocument.documentElement.classList.remove(\"no-js\");\n\n// Global components\nimport stickyHeader from \"./global/stickyHeader.js\";\nstickyHeader();\n\nimport headerAlertPanel from \"./global/headerAlertPanel.js\";\nheaderAlertPanel();\n\nimport navigationAndSearch from \"./global/navigationAndSearch.js\";\nnavigationAndSearch();\n\nimport sidebarNavigation from \"./global/sidebarNavigation.js\";\nsidebarNavigation();\n\nimport pagination from \"./global/pagination.js\";\npagination();\n\nimport leaveSite from \"./global/leaveSite.js\";\nleaveSite();\n\nimport embedVideo from \"./global/embedVideo.js\";\nembedVideo();\n\n// Blocks\nimport \"./blocks/coverBlock.js\";\n\nimport \"./blocks/faqBlock.js\";\n\nimport \"./global/pageHero.js\";\n\nimport \"./templates/findShelter.js\";\n"],"names":["stickyHeader","className","page","headerScrollObserver","observer","entries","entry","headerAlertModal","alertModal","debounce","func","wait","timeout","MOBILE_BREAKPOINT","isMobile","updateIsMobileView","wasMobile","event","isMobileView","generateRandomString","length","options","defaultCharacters","characters","includeUppercase","includeSymbols","randomString","randomValues","i","index","navigationAndSearch","menuButtons","submenuMap","menuToggle","searchToggle","svgUseElement","handleViewportChange","closeAllSubmenus","closeSearch","closeMobileMenu","forceClose","closePromises","button","closeMenu","resolve","reject","submenu","handler","openMenu","toggleMenu","initializeMenuButtons","submenuID","setupMenuEventListeners","openSearch","newLabel","spanElement","searchInput","toggleSearch","setupSearchEventListeners","desktopSearch","openMobileMenu","toggleMobileMenu","setupMobileMenuEventListeners","sidebarNavigation","sidebar","toggleSubmenu","toggleButton","submenuContainer","isExpanded","openLabel","closeLabel","expandAncestors","element","parentLi","toggle","link","pagination","url","leaveSite","embedVideo","oembedElements","videoId","extractYouTubeId","extractVimeoId","iframe","regex","matches","coverBlocks","createSvg","svg","createSvgPath","path","createVideoControl","reducedMotionQuery","playPath","pausePath","coverBlock","heroTitle","heroTitleID","videoElement","videoControlButton","videoControlPath","heroControls","videoID","checkReducedMotion","togglePlayPause","dropdownAccordions","accordion","accordionTriggerTitles","accordionTriggerTitlesArray","accordionTriggerTitle","accordionToggle","accordionToggleText","accordionPanel","accordionToggleIcon","accordionToggleTextID","accordionPanelID","openPanel","closePanel","pageHero","showAllBtns","schedule","searchField","handleClickOutside","filterToggle","btn","headerAlertPanel"],"mappings":"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"}