{"version":3,"sources":["helpers/accessibility.js","helpers/utility.helper.js","01-atoms/information/information.js","01-atoms/metro-play-icon/metro-play-icon.js","02-molecules/count-down/count-down.js","02-molecules/metro-accordion-links/metro-accordion-links.js","02-molecules/metro-capacity-guide/metro-capacity-guide.js","02-molecules/metro-departure-table/departure-table.js","02-molecules/metro-departures/metro-departures.js","02-molecules/metro-full-width-image/metro-full-width-image.js","02-molecules/metro-left-navigation/metro-left-navigation-col.js","02-molecules/metro-left-navigation/metro-left-navigation-sub-navigation.js","02-molecules/metro-left-navigation/metro-left-navigation-toggle.js","02-molecules/metro-left-navigation/metro-left-navigation.js","02-molecules/metro-media/metro-media.js","02-molecules/metro-page-header/metro-page-header.js","02-molecules/metro-quick-access/metro-quick-access.js","02-molecules/metro-operation-data/metro-operation-data.js","02-molecules/metro-search-field/metro-search-field.js","02-molecules/metro-site-navigation/site-logo-filter.js","02-molecules/metro-station-map/metro-station-map.js","03-organisms/metro-news-list-page/metro-news-list-page.js","03-organisms/metro-newslist/metro-newslist.js","03-organisms/metro-operational-changes/metro-operational-changes.js","03-organisms/mobile-tickets/mobile-tickets.js","03-organisms/metro-signup/metro-signup.js","03-organisms/notification/notification.js","03-organisms/search-result-page/search-result-page.js","03-organisms/timeline/timeline.js","03-organisms/vacancies/vacancies.js","03-organisms/pageheaders/pageheader-video/pageheader-video--youtube.js","master.js"],"names":["novicell","accessibility","this","init","document","body","addEventListener","classList","remove","add","event","keyCode","helper","outerHeight","el","height","offsetHeight","style","getComputedStyle","parseInt","marginTop","marginBottom","information","querySelectorAll","forEach","buttons","box","querySelector","active","button","transform","webkitTransform","window","setTimeout","playIcon","playIcons","setupVideoPlayers","e","elem","whiteLine","redCirclePulse","triangle","anime","targets","strokeDashoffset","setDashoffset","duration","easing","opacity","scale","playIconAnimationReverse","createVideoPlayer","ft","preventDefault","overlay","create","videoId","getAttribute","type","class","autoplay","disableTracking","onLoaded","focusTrap","createFocusTrap","activate","matchMedia","matches","getElementById","iframe","requestFullscreen","onDestroy","deactivate","length","i","countDown","timer","lang","documentElement","endDate","setInterval","now","Date","getTime","end","parentElement","display","distance","days","Math","floor","hours","minutes","seconds","innerText","updateTimer","accordionLinks","accordionLinksElements","itemOpenClass","addOpenClickEvent","element","accordionLinksElement","clickedItem","currentTarget","parentNode","contains","subList","items","closeAll","toggle","currentItem","icon","accordionTrigger","capacityGuide","dayjs","locale","imagePath","location","origin","loadTexts","1","2","3","4","5","sortQuarters","quarters","map","quarter","string","split","totalMinutes","data","minuteCount","sort","a","b","createLoad","capacityTable","time","calculatedLoad","loads","find","load","format","offset","loadValue","value","url","text","remainingMinutes","remainingQuarters","round","startOf","daysList","Array","from","item","day","name","charAt","toUpperCase","slice","quarterMultiplier","Vue","components","VueSlider","stations","step","departure","departureString","destination","destinationString","dayString","timeString","capacityLoad","loading","mounted","_this","axios","get","then","response","methods","setStep","postTravel","_this2","oneDestinationLine","oneDepartureLine","requestBody","startStation","toLowerCase","destinationStation","line","lines","dayOfWeek","post","catch","error","console","flipDirection","currentDepartureString","currentDestinationString","reset","computed","filteredDestinations","_this3","filter","station","isNotdeparture","matchesLine","some","includes","formInvalid","hasDeparture","hasDestination","rangeQuarters","sortedQuarters","watch","_this4","newDeparture","selectedDestination","_this5","newDestination","_this6","_this7","template","departureTable","$table","$select","$valueFields","ref","target","$field","dataset","departures","stopIds","useBus","useTrain","departuresParams","ids","operationDataParams","installations","metroDepartures","busDepartures","trainDepartures","loaded","activetab","sTrainDepartures","getDepartures","getInstallations","setPositionOfOperationData","params","filterType","finally","arr","innerWidth","getOpDataSection","getMainSection","getHeight","clientHeight","paddingTop","fullwidthimage","images","currentImage","controller","ScrollMagic","Controller","Scene","triggerElement","triggerHook","setClassToggle","reverse","addTo","leftNavigationCol","cols","colOpenClass","colCloseClass","colSlideClass","clickedColumn","currentCol","closeCol","closeAllButClicked","shadowTitle","unpauseAnimations","openCol","pauseAnimations","resetAllCols","leftNavigationSubNavigation","subLists","toggleSubNavigation","currentSubList","listItem","setAttribute","setTabindexes","collapsedList","list","link","_loop","v","_ret","_typeof","leftNavigationToggle","leftNavigation","toggleCircle","toggleCircleCloseLabel","toggleCircleOpenLabel","toggleCircleOpenClass","circleEnterClass","circleLeaveClass","openClass","bodyNoScrollClass","bodyLeftNavOpenClass","searchField","openNavbarLogo","openNavbarLogoParent","isOpen","searchForm","focusTrapInstance","handleCircleEnterAndLeave","enterCircle","leaveCircle","blur","handleEsc","close","removeEventListener","open","mediaLightbox","lightboxes","closeLightbox","lightbox","ftDeactivate","arguments","undefined","lb","id","onDeactivate","mediaCarousel","slideshows","setCurrentSlide","slideshow","flkty","innerHTML","selectedIndex","index","prev","next","Flickity","contain","pageDots","prevNextButtons","wrapAround","cellAlign","cellSelector","previous","on","pageHeader","pageHeaderSlideshow","scrollY","whiteBox","quickAccess","operationData","activeMessages","groupedInstallations","activeWarning","styleObject","animationDuration","operationDataLinesOpened","operationDataElevatorsOpened","plannedChangesHeight","plannedChanges","plannedAffectedLines","nodeId","rowsOpen","isCollapsed","isAnimating","getOperationData","getPlannedChanges","isScrolled","startDate","dateFormat","start","endFormat","date","mappedData","x","headline","title","description","metrobus","push","longestMessageLength","max","getRow","row","toggleElement","elementId","parentId","root","parent","elementHeight","scrollHeight","parentHeight","toggleOperationData","isMobile","visibility","toggleCurrentChangeAnimation","ticker","words","currentIndex","activeWordClass","changeWord","searchInput","term","action","submit","siteLogoFilter","logo","svgElement","stationMap","visibibleLines","openPopup","activeStation","activeDialog","isMetroMapPage","localStorage","getItem","bg","hasAttribute","bounds","getBBox","y","width","showLines","closePopup","setItem","openDialog","dialog","show","resize","closeDialog","toggleModal","toggleStationMapModal","modal","otherModal","isCloned","isActive","popup","clone","cloneNode","append","closeModalButton","closePopupButtpn","newsListPage","filteredNewsListPage","siteNodeId","sitenodeid","isFilteredNewsList","d","getDate","getMonth","getFullYear","imageUrl","currentPage","itemsPerPage","pageSize","totalItems","itemsShowing","getNews","newItems","updatedItems","concat","image","changeImage","loadMore","newsList","newsLists","currentNewsList","groupCells","operationalChanges","delay","t","Promise","resolve","isDanish","apiUrl","calendar","shortDays","selectedDate","view","dateRange","daysAfter","email","notificationLines","filters","availableLines","lineDescriptions","JSON","parse","showSignUpSuccessResponse","showErrorResponse","showValidationErrorResponse","signUpNotificationTimeout","mappedFilter","join","weeks","getCalendar","getDays","scrollArea","leftShadow","rightShadow","scrollWidth","scrollLeft","sum","getBoundingClientRect","passive","lineId","_calendar","splice","apply","_toConsumableArray","firstDate","lastDate","formatDate","fetchDays","groupBy","toggleCalendarView","objectArray","property","reduce","acc","obj","key","selectDate","change","scrollToElement","checkbox","checked","scrollIntoView","behavior","onSignup","form","notificationIcon","notification","test","clearTimeout","tags","status","bind","internalError","showSignupContent","isDayDisabled","l","dayName","newFilters","oldFilters","skip","allSelected","indexOfAll","indexOf","delimiters","mobileTickets","current","arrowShape","x0","x1","y1","x2","y2","x3","signup","mailingListId","showSuccessResponse","onSubmit","notificationElement","closeButton","searchResultPage","queryTerm","URLSearchParams","search","getResults","URL","searchParams","set","toString","submitForm","clear","$refs","input","focus","timeline","timelines","vacancies","vacanciesElement","loadMoreBth","pageheaderVideoYoutube","youtubeVideoWrapper","vidRescale","tvScreen","w","h","innerHeight","left","projectName"],"mappings":"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","file":"master.min.js","sourcesContent":["'use strict';\r\n\r\nvar novicell = novicell || {};\r\n\r\nnovicell.accessibility = novicell.accessibility || new function () {\r\n this.init = () => {\r\n\r\n document.body.addEventListener('mousedown', function () {\r\n document.body.classList.remove('using-tab');\r\n document.body.classList.add('using-mouse');\r\n });\r\n\r\n document.body.addEventListener('keydown', function (event) {\r\n if (event.keyCode === 9) {\r\n document.body.classList.add('using-tab');\r\n document.body.classList.remove('using-mouse');\r\n }\r\n });\r\n\r\n }\r\n}\r\n","'use strict';\r\n\r\nvar novicell = novicell || {};\r\n\r\nnovicell.helper = novicell.helper || new function () {\r\n\r\n this.outerHeight = function (el) {\r\n var height = el.offsetHeight;\r\n var style = getComputedStyle(el);\r\n\r\n height += parseInt(style.marginTop) + parseInt(style.marginBottom);\r\n return height;\r\n };\r\n\r\n};\r\n","\"use strict\";\r\n\r\nvar novicell = novicell || {};\r\nnovicell.information =\r\n novicell.information ||\r\n new (function () {\r\n this.init = function () {\r\n const informations = document.querySelectorAll(\".information\");\r\n\r\n informations.forEach(information => {\r\n const buttons = information.querySelectorAll(\".information__button\");\r\n const box = information.querySelector(\".information__box\")\r\n var active = false;\r\n\r\n buttons.forEach((button) => {\r\n button.addEventListener('click', function () {\r\n if (active) {\r\n active = false;\r\n box.style.transform = \"translate(0 100%)\";\r\n box.style.webkitTransform = \"translate(0 100%)\";\r\n window.setTimeout(() => {\r\n box.classList.remove(\"active\");\r\n }, 300)\r\n }\r\n else {\r\n active = true;\r\n box.style.transform = \"translate(0 0)\";\r\n box.style.webkitTransform = \"translate(0 0)\";\r\n box.classList.add(\"active\");\r\n }\r\n })\r\n })\r\n });\r\n };\r\n })();","\"use strict\";\r\nvar novicell = novicell || {};\r\nnovicell.playIcon =\r\n novicell.playIcon ||\r\n new (function () {\r\n const playIcons = document.querySelectorAll(\".js-play-icon\");\r\n\r\n this.init = function () {\r\n if (playIcons == null || playIcons.length <= 0) {\r\n return;\r\n }\r\n\r\n for (let i = 0; i < playIcons.length; i++) {\r\n let currentPlayIcon = playIcons[i];\r\n\r\n setupVideoPlayers(currentPlayIcon);\r\n }\r\n };\r\n\r\n function setupVideoPlayers(playIcon) {\r\n /* Animation for play-icon */\r\n playIcon.addEventListener(\"mouseenter\", function (e) {\r\n playIconAnimation(playIcon);\r\n });\r\n\r\n playIcon.addEventListener(\"mouseleave\", function (e) {\r\n playIconAnimationReverse(playIcon);\r\n });\r\n\r\n playIcon.addEventListener(\"click\", (e) => createVideoPlayer(playIcon, e));\r\n\r\n playIcon.addEventListener(\"keydown\", (e) => {\r\n if (e.keyCode === 13) {\r\n createVideoPlayer(playIcon, e);\r\n }\r\n });\r\n }\r\n\r\n function createVideoPlayer(playIcon, e) {\r\n e.preventDefault();\r\n var ft;\r\n\r\n novicell.overlay.create({\r\n videoId: playIcon.getAttribute(\"data-video-url\"),\r\n type: playIcon.getAttribute(\"data-type\"),\r\n class: \"js-video-overlay\",\r\n autoplay: 1,\r\n disableTracking: 1,\r\n onLoaded() {\r\n ft = window.focusTrap.createFocusTrap(\"#js-novi-backdrop\");\r\n ft.activate();\r\n const isMobile = window.matchMedia('(max-width: 991px)').matches;\r\n if (isMobile) {\r\n const overlay = document.getElementById('js-novi-overlay');\r\n const iframe = overlay ? overlay.querySelector('iframe') : null;\r\n if (iframe) {\r\n iframe.requestFullscreen();\r\n }\r\n }\r\n },\r\n onDestroy() {\r\n ft.deactivate();\r\n },\r\n });\r\n }\r\n\r\n function playIconAnimation(elem) {\r\n const whiteLine = elem.querySelector(\".js-play-icon-white-line\");\r\n const redCirclePulse = elem.querySelector(\r\n \".js-play-icon-red-circle-pulse\"\r\n );\r\n const triangle = elem.querySelector(\".js-play-icon-triangle\");\r\n\r\n anime({\r\n targets: whiteLine,\r\n strokeDashoffset: [0, anime.setDashoffset],\r\n duration: 1000,\r\n easing: \"easeOutExpo\",\r\n });\r\n\r\n anime({\r\n targets: triangle,\r\n strokeDashoffset: [0, anime.setDashoffset],\r\n duration: 1000,\r\n easing: \"easeOutExpo\",\r\n });\r\n\r\n setTimeout(function () {\r\n anime({\r\n targets: triangle,\r\n strokeDashoffset: [anime.setDashoffset, 0],\r\n duration: 1000,\r\n easing: \"easeOutExpo\",\r\n });\r\n }, 600);\r\n\r\n anime({\r\n targets: redCirclePulse,\r\n opacity: 0,\r\n scale: 1.3,\r\n duration: 2500,\r\n easing: \"easeOutExpo\",\r\n });\r\n }\r\n\r\n function playIconAnimationReverse(elem) {\r\n const whiteLine = elem.querySelector(\".js-play-icon-white-line\");\r\n const redCirclePulse = elem.querySelector(\r\n \".js-play-icon-red-circle-pulse\"\r\n );\r\n const triangle = elem.querySelector(\".js-play-icon-triangle\");\r\n\r\n anime({\r\n targets: whiteLine,\r\n strokeDashoffset: [anime.setDashoffset, 0],\r\n duration: 1000,\r\n easing: \"easeOutExpo\",\r\n });\r\n anime({\r\n targets: redCirclePulse,\r\n opacity: 1,\r\n scale: 1,\r\n duration: 2500,\r\n easing: \"easeOutExpo\",\r\n });\r\n }\r\n })();\r\n","'use strict';\r\nvar novicell = novicell || {};\r\nnovicell.countDown =\r\n novicell.countDown ||\r\n new function () {\r\n const timer = document.getElementById('js-count-down-timer');\r\n const lang = document.documentElement.getAttribute('lang');\r\n\r\n this.init = function () {\r\n if (timer) {\r\n const endDate = timer.getAttribute('data-end-date');\r\n setInterval(function () {\r\n updateTimer(endDate);\r\n }, 1000);\r\n }\r\n };\r\n\r\n function updateTimer(endDate) {\r\n var now = new Date().getTime();\r\n var end = new Date(endDate);\r\n\r\n if (now > end) {\r\n timer.parentElement.style.display = 'none';\r\n }\r\n\r\n var distance = end.getTime() - now;\r\n\r\n // Time calculations for days, hours, minutes and seconds\r\n var days = Math.floor(distance / (1000 * 60 * 60 * 24));\r\n var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));\r\n var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));\r\n var seconds = Math.floor((distance % (1000 * 60)) / 1000);\r\n\r\n timer.innerText = (days > 0 ? days + \"d \" : \"\") + (hours > 0 ? hours + (lang == \"da\" ? \"t \" : \"h \") : \"\") + (minutes > 0 ? minutes + \"m \" : \"\") + seconds + \"s \";\r\n }\r\n }();\r\n","\"use strict\";\r\nvar novicell = novicell || {};\r\nnovicell.accordionLinks =\r\n novicell.accordionLinks ||\r\n new (function() {\r\n const accordionLinksElements = document.querySelectorAll(\r\n \".js-accordion-links\"\r\n );\r\n const itemOpenClass = \"accordion-links__container--open\";\r\n\r\n this.init = function() {\r\n if (\r\n accordionLinksElements == null ||\r\n accordionLinksElements.length <= 0\r\n ) {\r\n return;\r\n }\r\n\r\n for (let i = 0; i < accordionLinksElements.length; i++) {\r\n let accordionLinksElement = accordionLinksElements[i];\r\n let items = accordionLinksElement.querySelectorAll(\r\n \".js-accordion-links-container\"\r\n );\r\n\r\n if (items == null || items.length <= 0) {\r\n return;\r\n }\r\n for (let i = 0; i < items.length; i++) {\r\n let currentItem = items[i];\r\n\r\n if (\r\n currentItem.classList.contains(\r\n \"accordion-links__container--no-inner-links\"\r\n )\r\n ) {\r\n continue;\r\n }\r\n\r\n let icon = currentItem.querySelector(\".accordion-links__icon\");\r\n\r\n let accordionTrigger = currentItem.querySelector(\r\n \".js-open-accordion\"\r\n );\r\n\r\n addOpenClickEvent(icon, accordionLinksElement);\r\n addOpenClickEvent(accordionTrigger, accordionLinksElement);\r\n }\r\n }\r\n };\r\n\r\n function addOpenClickEvent(element, accordionLinksElement) {\r\n if (element && element !== null) {\r\n element.addEventListener(\"click\", function(e) {\r\n e.preventDefault();\r\n let clickedItem = e.currentTarget.parentNode;\r\n\r\n if (clickedItem.classList.contains(itemOpenClass)) {\r\n clickedItem.classList.remove(itemOpenClass);\r\n } else {\r\n closeAll(accordionLinksElement);\r\n clickedItem.classList.toggle(itemOpenClass);\r\n }\r\n });\r\n }\r\n }\r\n\r\n function closeAll(subList) {\r\n let items = subList.querySelectorAll(\".js-accordion-links-container\");\r\n for (let i = 0; i < items.length; i++) {\r\n items[i].classList.remove(itemOpenClass);\r\n }\r\n }\r\n })();\r\n","\"use strict\";\r\n\r\nvar novicell = novicell || {};\r\nnovicell.capacityGuide =\r\n novicell.capacityGuide ||\r\n new (function () {\r\n const capacityGuide = document.getElementById(\"js-capacity-guide\");\r\n\r\n this.init = function () {\r\n if (capacityGuide) {\r\n dayjs.locale(\"da\");\r\n\r\n const imagePath =\r\n window.location.origin === \"http://localhost:3000\"\r\n ? \"/dist/images/capacity_guide\"\r\n : \"/dist/images\";\r\n const loadTexts = {\r\n 1: \"Der er få med metroen.\",\r\n 2: \"Der er god plads til at holde afstand.\",\r\n 3: \"Der er flere med metroen på en del af din rejse, men det er stadig muligt at holde afstand.\",\r\n 4: \"Der er mange med metroen på en del af din rejse. Følg anvisningerne for ophold i tog og på perroner.\",\r\n 5: \"Metroen vil være fyldt på en del af din rejse. Følg anvisningerne for ophold i tog og på perroner.\",\r\n };\r\n\r\n const sortQuarters = (quarters) => {\r\n return quarters\r\n .map((quarter) => {\r\n const hours = parseInt(quarter.string.split(\":\")[0]);\r\n const minutes = parseInt(quarter.string.split(\":\")[1]);\r\n const totalMinutes = minutes + hours * 60;\r\n return {\r\n string: quarter.string,\r\n data: quarter.data,\r\n minuteCount: totalMinutes,\r\n };\r\n })\r\n .sort((a, b) => a.minuteCount - b.minuteCount);\r\n };\r\n\r\n const getLine = (departure, destination) => {\r\n let line = \"\";\r\n const oneDestinationLine = destination.lines.length === 1;\r\n const oneDepartureLine = departure.lines.length === 1;\r\n if (oneDestinationLine) {\r\n line = destination.lines[0];\r\n } else if (oneDepartureLine) {\r\n line = departure.lines[0];\r\n } else {\r\n line = \"m1m2\";\r\n }\r\n return line;\r\n };\r\n\r\n const createLoad = (capacityTable, time) => {\r\n const timeLoad = capacityTable.loads.find(\r\n (load) => load.time === time.data.format(\"HH\")\r\n ).load;\r\n const calculatedLoad = timeLoad - capacityTable.offset;\r\n const loadValue = calculatedLoad < 1 ? 1 : calculatedLoad;\r\n return {\r\n value: loadValue,\r\n url: `${imagePath}/capacity_${loadValue}.svg`,\r\n text: loadTexts[loadValue],\r\n };\r\n };\r\n\r\n const remainingMinutes = parseInt(dayjs().format(\"mm\"));\r\n const remainingQuarters = Math.round(remainingMinutes / 15);\r\n const now = dayjs()\r\n .startOf(\"hour\")\r\n .add(remainingQuarters * 15, \"minute\");\r\n const daysList = Array.from({ length: 7 }, (item, i) => {\r\n const day = now.add(i, \"day\").format(\"dddd\");\r\n return {\r\n name: day.charAt(0).toUpperCase() + day.slice(1),\r\n data: day,\r\n };\r\n });\r\n\r\n const numberOfQuarters = 24 * 4;\r\n const quarters = Array.from({ length: numberOfQuarters }, (item, i) => {\r\n const quarterMultiplier = i * 15;\r\n const quarter = now.add(quarterMultiplier, \"minute\");\r\n return {\r\n string: quarter.format(\"H:mm\"),\r\n data: quarter,\r\n };\r\n });\r\n\r\n const vm = new Vue({\r\n el: \"#js-capacity-guide\",\r\n components: {\r\n VueSlider: window[\"vue-slider-component\"],\r\n },\r\n\r\n data: () => ({\r\n stations: [],\r\n days: daysList,\r\n quarters: quarters,\r\n step: 1,\r\n departure: null,\r\n departureString: \"\",\r\n destination: null,\r\n destinationString: \"\",\r\n day: daysList[0],\r\n dayString: daysList[0].name,\r\n time: quarters[0],\r\n timeString: quarters[0].string,\r\n capacityTable: null,\r\n capacityLoad: null,\r\n loading: false,\r\n }),\r\n\r\n mounted() {\r\n axios.get(\"/umbraco/api/tripload/Stations\").then((response) => {\r\n this.stations = response.data;\r\n });\r\n },\r\n\r\n methods: {\r\n setStep: function (step) {\r\n this.step = step;\r\n },\r\n postTravel: function () {\r\n this.loading = true;\r\n const requestBody = {\r\n startStation: this.departureString.toLowerCase(),\r\n destinationStation: this.destinationString.toLowerCase(),\r\n line: getLine(this.destination, this.departure),\r\n dayOfWeek: this.dayString.toLowerCase(),\r\n };\r\n axios\r\n .post(\"/umbraco/api/tripload/TripLoadInfo\", requestBody)\r\n .then((response) => {\r\n this.loading = false;\r\n this.capacityTable = response.data;\r\n this.capacityLoad = createLoad(this.capacityTable, this.time);\r\n this.step = 2;\r\n })\r\n .catch((error) => {\r\n console.error(error);\r\n });\r\n },\r\n flipDirection: function () {\r\n const currentDepartureString = this.departureString;\r\n const currentDestinationString = this.destinationString;\r\n this.departureString = currentDestinationString;\r\n this.destinationString = currentDepartureString;\r\n this.postTravel();\r\n },\r\n reset: function () {\r\n this.step = 1;\r\n this.departure = null;\r\n this.departureString = \"\";\r\n this.destination = null;\r\n this.destinationString = \"\";\r\n this.day = daysList[0];\r\n this.dayString = daysList[0].name;\r\n this.time = quarters[0];\r\n this.timeString = quarters[0].string;\r\n this.capacityTable = null;\r\n this.capacityLoad = null;\r\n },\r\n },\r\n\r\n computed: {\r\n filteredDestinations: function () {\r\n if (this.departure) {\r\n const destinations = this.stations.filter((station) => {\r\n const isNotdeparture = this.departure.name !== station.name;\r\n const matchesLine = this.departure.lines.some((line) =>\r\n station.lines.includes(line)\r\n );\r\n return isNotdeparture && matchesLine;\r\n });\r\n return destinations;\r\n } else return [];\r\n },\r\n formInvalid: function () {\r\n const hasDeparture = this.departureString.length > 0;\r\n const hasDestination = this.destinationString.length > 0;\r\n const invalid =\r\n hasDeparture === false || hasDestination === false;\r\n return invalid;\r\n },\r\n rangeQuarters: () =>\r\n sortQuarters(quarters).map((item) => item.string),\r\n sortedQuarters: () => sortQuarters(quarters),\r\n },\r\n\r\n watch: {\r\n departureString: function () {\r\n const newDeparture = this.stations.find((station) => {\r\n return station.name === this.departureString;\r\n });\r\n if (this.destinationString.length > 0) {\r\n const selectedDestination = this.stations.find(\r\n (station) => station.name === this.destinationString\r\n );\r\n const lineMatch = newDeparture.lines.some((line) =>\r\n selectedDestination.lines.includes(line)\r\n );\r\n if (lineMatch === false) {\r\n this.destinationString = \"\";\r\n }\r\n }\r\n this.departure = newDeparture;\r\n },\r\n destinationString: function () {\r\n const newDestination = this.stations.find((station) => {\r\n return station.name === this.destinationString;\r\n });\r\n this.destination = newDestination;\r\n },\r\n dayString: function () {\r\n this.day = this.days.find((day) => day.name === this.dayString);\r\n },\r\n timeString: function () {\r\n this.time = this.quarters.find(\r\n (quarters) => quarters.string === this.timeString\r\n );\r\n if (this.capacityTable) {\r\n this.capacityLoad = createLoad(this.capacityTable, this.time);\r\n }\r\n },\r\n },\r\n\r\n // install vscode extension \"es6-string-html\" to enable syntax highlighting of below template literal.\r\n template: /* html */ `\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n\r\n

Find den bedste tid –

\r\n

Se hvornår på dagen du bedst kan holde afstand

\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\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\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\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\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n

{{ dayString }}

\r\n

{{ departureString }} – {{ destinationString }}

\r\n \r\n
\r\n\r\n
\r\n \r\n

{{ capacityLoad.text }}

\r\n
\r\n\r\n
\r\n \r\n
{{ rangeQuarters[0] }}
\r\n
{{ rangeQuarters[rangeQuarters.length - 1] }}
\r\n
\r\n\r\n
\r\n

Slide for at se om du kan holde afstand på andre tidspunkter end valgte

\r\n
\r\n\r\n \r\n
\r\n\r\n

Resultatet er baseret på den normale passagermængde i det pågældende tidsrum – ikke den konkrete rejse, hvor der vil kunne være udsving i passagermængden

\r\n\r\n
\r\n `,\r\n });\r\n }\r\n };\r\n })();\r\n","\"use strict\";\r\n\r\nvar novicell = novicell || {};\r\n\r\nnovicell.departureTable =\r\n novicell.departureTable ||\r\n new (function () {\r\n this.init = function () {\r\n const $tables = document.querySelectorAll(\".js-departure-table\");\r\n\r\n $tables.forEach(($table) => {\r\n const $select = $table.querySelector(\"select\");\r\n if($select) {\r\n const $valueFields = $table.querySelectorAll(\".departure-table__val\");\r\n\r\n $select.addEventListener(\"change\", function (e) {\r\n var ref = e.target.value;\r\n $valueFields.forEach(($field) => {\r\n $field.classList.toggle(\r\n \"departure-table__val--show\",\r\n $field.dataset.ref === ref\r\n );\r\n });\r\n });\r\n }\r\n });\r\n };\r\n })();\r\n","'use strict';\r\nvar novicell = novicell || {};\r\nnovicell.departures =\r\n novicell.departures ||\r\n new function () {\r\n const departures = document.getElementById('js-departures');\r\n const stopIds = departures ? departures.getAttribute('data-stop-ids') : null;\r\n const station = departures ? departures.getAttribute('data-station') : null;\r\n const useBus = departures ? departures.getAttribute('data-use-bus') : false;\r\n const useTrain = departures ? departures.getAttribute('data-use-train') : false;\r\n\r\n this.init = function () {\r\n if (departures == null || stopIds == null) {\r\n return;\r\n }\r\n\r\n new Vue({\r\n el: departures,\r\n data: {\r\n departuresParams: {\r\n ids: stopIds,\r\n useBus: useBus,\r\n useTrain: useTrain\r\n },\r\n operationDataParams: {\r\n station: station\r\n },\r\n installations: [],\r\n metroDepartures: [],\r\n busDepartures: [],\r\n trainDepartures: [],\r\n loaded: false,\r\n activetab: 1,\r\n sTrainDepartures: []\r\n },\r\n mounted() {\r\n //gets departures every 10 seconds\r\n this.getDepartures();\r\n\r\n //gets operationData every 60 seconds\r\n this.getInstallations();\r\n\r\n this.setPositionOfOperationData();\r\n\r\n },\r\n methods: {\r\n getDepartures() {\r\n axios\r\n .get(\r\n '/umbraco/metro/journeyApi/Departures', {\r\n params: this.departuresParams\r\n }\r\n )\r\n .catch(error => {\r\n console.error('Error: ' + error);\r\n })\r\n .then(response => {\r\n if (response) {\r\n var data = response.data;\r\n\r\n var metroDepartures = this.filterType(data, \"M\");\r\n this.metroDepartures = metroDepartures[0] != null ? metroDepartures[0].departures : [];\r\n\r\n var busDepartures = this.filterType(data, \"B\");\r\n this.busDepartures = busDepartures[0] != null ? busDepartures[0].departures : [];\r\n\r\n var sTrainDepartures = this.filterType(data, \"S\");\r\n this.sTrainDepartures = sTrainDepartures[0] != null ? sTrainDepartures[0].departures : [];\r\n\r\n var trainDepartures = this.filterType(data, \"T\");\r\n this.trainDepartures = trainDepartures[0] != null ? trainDepartures[0].departures : [];\r\n\r\n if (!this.loaded) {\r\n this.loaded = true;\r\n }\r\n this.setPositionOfOperationData();\r\n }\r\n }).finally(() => {\r\n setTimeout(this.getDepartures, 10000);\r\n });\r\n },\r\n getInstallations() {\r\n axios\r\n .get(\r\n '/umbraco/api/operationDataApi/GetInstallationsByStation', {\r\n params: this.operationDataParams\r\n }\r\n )\r\n .catch(error => {\r\n console.error('Error: ' + error);\r\n })\r\n .then(response => {\r\n if (response) {\r\n this.installations = response.data;\r\n }\r\n }).finally(() => {\r\n setTimeout(this.getInstallations, 30000);\r\n });\r\n },\r\n filterType(arr, type) {\r\n return arr.filter(function (el) {\r\n return el.type === type;\r\n });\r\n },\r\n setPositionOfOperationData() {\r\n const getHeaderElement = document.querySelector('header.page-header--station');\r\n\r\n if (getHeaderElement && window.innerWidth < 768) {\r\n setTimeout(() => {\r\n const getOpDataSection = document.querySelector('#js-departures');\r\n const getMainSection = document.querySelector('main');\r\n const getHeight = getOpDataSection.clientHeight;\r\n getMainSection.style.paddingTop = (getHeight / 2) + 'px';\r\n }, 200);\r\n }\r\n }\r\n }\r\n });\r\n };\r\n }();\r\n","'use strict';\r\nvar novicell = novicell || {};\r\n\r\nnovicell.fullwidthimage =\r\n novicell.fullwidthimage ||\r\n new function () {\r\n this.init = function () {\r\n const images = document.querySelectorAll('.fw-image');\r\n const imageZoom = 'fw-image--zoom';\r\n\r\n if (images == null || images.length <= 0) {\r\n return;\r\n }\r\n\r\n for (let i = 0; i < images.length; i++) {\r\n let currentImage = images[i];\r\n const controller = new ScrollMagic.Controller();\r\n\r\n // create a scene\r\n new ScrollMagic.Scene({\r\n triggerElement: currentImage,\r\n triggerHook: '.4'\r\n })\r\n .setClassToggle(currentImage, imageZoom)\r\n .reverse(false)\r\n .addTo(controller);\r\n }\r\n };\r\n }();\r\n","'use strict';\r\nvar novicell = novicell || {};\r\nnovicell.leftNavigationCol =\r\n novicell.leftNavigationCol ||\r\n new function () {\r\n const cols = document.querySelectorAll('.js-left-navigation-col');\r\n const colOpenClass = 'left-navigation-col--open';\r\n const colCloseClass = 'left-navigation-col--closed';\r\n const colSlideClass = 'left-navigation-col--slide-in';\r\n\r\n this.init = function () {\r\n if (cols == null || cols.length <= 0) {\r\n return;\r\n }\r\n\r\n for (let i = 0; i < cols.length; i++) {\r\n let currentCol = cols[i];\r\n let shadowTitle = currentCol.querySelector('.js-left-navigation-col-shadow-title > svg');\r\n shadowTitle.pauseAnimations();\r\n\r\n currentCol.addEventListener('click', function (event) {\r\n const clickedCol = event.currentTarget;\r\n\r\n clickedColumn(clickedCol);\r\n });\r\n }\r\n };\r\n\r\n this.resetAllCols = function () {\r\n for (let i = 0; i < cols.length; i++) {\r\n let currentCol = cols[i];\r\n\r\n currentCol.classList.remove(colSlideClass);\r\n currentCol.classList.remove(colOpenClass);\r\n currentCol.classList.remove(colCloseClass);\r\n currentCol.classList.add(colSlideClass);\r\n }\r\n };\r\n\r\n function closeAllButClicked(elem) {\r\n for (let i = 0; i < cols.length; i++) {\r\n let currentCol = cols[i];\r\n\r\n if (currentCol != elem) {\r\n closeCol(currentCol);\r\n }\r\n }\r\n }\r\n\r\n function clickedColumn(elem) {\r\n if (!elem.classList.contains(colOpenClass)) {\r\n closeAllButClicked(elem);\r\n openCol(elem);\r\n }\r\n }\r\n\r\n function openCol(elem) {\r\n elem.classList.remove(colCloseClass);\r\n elem.classList.add(colOpenClass);\r\n\r\n let shadowTitle = elem.querySelector('.js-left-navigation-col-shadow-title > svg');\r\n setTimeout(function () {\r\n shadowTitle.unpauseAnimations();\r\n }, 1000);\r\n }\r\n\r\n function closeCol(elem) {\r\n elem.classList.remove(colSlideClass);\r\n elem.classList.remove(colOpenClass);\r\n elem.classList.add(colCloseClass);\r\n }\r\n\r\n }();\r\n","\"use strict\";\r\nvar novicell = novicell || {};\r\nnovicell.leftNavigationSubNavigation =\r\n novicell.leftNavigationSubNavigation ||\r\n new (function () {\r\n const subLists = document.querySelectorAll(\r\n \".js-left-navigation-col-sub-list\"\r\n );\r\n const itemOpenClass = \"left-navigation-sub-navigation__item--open\";\r\n\r\n this.init = function () {\r\n setTabindexes();\r\n if (subLists == null || subLists.length <= 0) {\r\n return;\r\n }\r\n\r\n for (let i = 0; i < subLists.length; i++) {\r\n let currentSubList = subLists[i];\r\n let items = currentSubList.querySelectorAll(\r\n \".js-left-navigation-sub-navigation-item\"\r\n );\r\n closeAll(currentSubList);\r\n\r\n if (items == null || items.length <= 0) {\r\n return;\r\n }\r\n for (let i = 0; i < items.length; i++) {\r\n let currentItem = items[i];\r\n\r\n if (\r\n currentItem.classList.contains(\r\n \"left-navigation-sub-navigation__item--no-sub-items\"\r\n )\r\n ) {\r\n continue;\r\n }\r\n\r\n let icon = currentItem.querySelector(\r\n \".left-navigation-sub-navigation__icon\"\r\n );\r\n\r\n //Open first item in sublist\r\n /* items[0].classList.add(itemOpenClass); */\r\n\r\n icon.addEventListener(\"click\", (e) =>\r\n toggleSubNavigation(e, currentSubList)\r\n );\r\n icon.addEventListener(\"keydown\", function (e) {\r\n if (event.keyCode === 13) {\r\n toggleSubNavigation(e, currentSubList);\r\n }\r\n });\r\n }\r\n }\r\n };\r\n\r\n function toggleSubNavigation(e, currentSubList) {\r\n e.preventDefault();\r\n let clickedItem = e.currentTarget.parentNode;\r\n let listItem = clickedItem.querySelector(\r\n \".left-navigation-sub-navigation__list\"\r\n );\r\n\r\n if (clickedItem.classList.contains(itemOpenClass)) {\r\n clickedItem.classList.remove(itemOpenClass);\r\n listItem.setAttribute(\"aria-expanded\", false);\r\n const linkList = currentSubList.querySelector;\r\n setTabindexes();\r\n } else {\r\n closeAll(currentSubList);\r\n const collapsedList = clickedItem.querySelector(\r\n \".left-navigation-sub-navigation__list\"\r\n );\r\n setTabindexes(false);\r\n setTabindexes(collapsedList);\r\n\r\n clickedItem.classList.toggle(itemOpenClass);\r\n listItem.setAttribute(\r\n \"aria-expanded\",\r\n listItem.getAttribute(\"aria-expanded\") === \"false\"\r\n );\r\n }\r\n }\r\n\r\n function closeAll(subList) {\r\n let items = subList.querySelectorAll(\r\n \".js-left-navigation-sub-navigation-item\"\r\n );\r\n for (let i = 0; i < items.length; i++) {\r\n items[i].classList.remove(itemOpenClass);\r\n }\r\n }\r\n\r\n function setTabindexes(list) {\r\n const hiddenLinks =\r\n (list && list.querySelectorAll(\"a\")) ||\r\n document.querySelectorAll(\".left-navigation-sub-navigation__list a\");\r\n hiddenLinks.forEach((link) => {\r\n link.setAttribute(\"tabindex\", list ? \"0\" : \"-1\");\r\n });\r\n }\r\n })();\r\n","'use strict';\r\nvar novicell = novicell || {};\r\nnovicell.leftNavigationToggle =\r\n novicell.leftNavigationToggle ||\r\n new function () {\r\n\r\n this.init = function () {\r\n const toggle = document.getElementById('js-left-navigation-toggle');\r\n\r\n if (toggle == null) {\r\n return;\r\n }\r\n };\r\n\r\n }();\r\n","\"use strict\";\r\nvar novicell = novicell || {};\r\nnovicell.leftNavigation =\r\n novicell.leftNavigation ||\r\n new (function () {\r\n const leftNavigation = document.getElementById(\"js-left-navigation\");\r\n const toggle = document.getElementById(\"js-left-navigation-toggle\");\r\n const toggleCircle = document.getElementById(\r\n \"js-left-navigation-toggle-circle\"\r\n );\r\n\r\n const toggleCircleCloseLabel =\r\n toggleCircle !== null\r\n ? toggleCircle.querySelector(\".left-navigation-toggle__label--closed\")\r\n : null;\r\n const toggleCircleOpenLabel =\r\n toggleCircle !== null\r\n ? toggleCircle.querySelector(\".left-navigation-toggle__label--open\")\r\n : null;\r\n const toggleCircleOpenClass = \"left-navigation-toggle__circle--open\";\r\n const circleEnterClass = \"left-navigation-toggle--enter\";\r\n const circleLeaveClass = \"left-navigation-toggle--leave\";\r\n const openClass = \"left-navigation--open\";\r\n const body = document.body;\r\n const bodyNoScrollClass = \"no-scroll\";\r\n const bodyLeftNavOpenClass = \"left-navigation-is-open\";\r\n const searchField = document.getElementById(\"js-search-field\");\r\n const openNavbarLogo = document.querySelector(\".left-navigation-bar__logo\");\r\n const openNavbarLogoParent =\r\n openNavbarLogo !== null ? openNavbarLogo.parentElement : null;\r\n let isOpen = false;\r\n const searchForm = document.getElementById(\"js-search-field\");\r\n const focusTrapInstance =\r\n searchForm !== null && leftNavigation !== null\r\n ? window.focusTrap.createFocusTrap([searchForm, leftNavigation])\r\n : null;\r\n\r\n this.init = function () {\r\n if (\r\n leftNavigation == null ||\r\n toggleCircle == null ||\r\n openNavbarLogoParent == null\r\n ) {\r\n return;\r\n }\r\n\r\n handleCircleEnterAndLeave();\r\n\r\n toggle.addEventListener(\"click\", function () {\r\n if (isOpen) {\r\n close();\r\n } else {\r\n open();\r\n }\r\n });\r\n };\r\n\r\n function handleCircleEnterAndLeave() {\r\n toggleCircle.addEventListener(\"mouseenter\", enterCircle);\r\n leftNavigation.addEventListener(\"mouseleave\", leaveCircle);\r\n }\r\n\r\n function enterCircle() {\r\n toggle.classList.add(circleEnterClass);\r\n toggle.classList.remove(circleLeaveClass);\r\n }\r\n\r\n function leaveCircle() {\r\n toggle.classList.add(circleLeaveClass);\r\n toggle.classList.remove(circleEnterClass);\r\n\r\n toggle.blur();\r\n }\r\n\r\n function open() {\r\n if (focusTrapInstance) {\r\n focusTrapInstance.activate();\r\n }\r\n openNavbarLogoParent.setAttribute(\"tabindex\", \"0\");\r\n leftNavigation.classList.add(openClass);\r\n toggleCircle.classList.add(toggleCircleOpenClass);\r\n body.classList.add(bodyNoScrollClass);\r\n body.classList.add(bodyLeftNavOpenClass);\r\n toggleCircleOpenLabel.setAttribute(\"aria-hidden\", false);\r\n toggleCircleCloseLabel.setAttribute(\"aria-hidden\", true);\r\n\r\n document.addEventListener(\"keydown\", handleEsc, true);\r\n\r\n toggleCircle.removeEventListener(\"mouseenter\", enterCircle);\r\n leftNavigation.removeEventListener(\"mouseleave\", leaveCircle);\r\n\r\n if (searchField && window.innerWidth < 992) {\r\n searchField.classList.add(\"search-field--light-background\");\r\n }\r\n\r\n isOpen = true;\r\n }\r\n\r\n function handleEsc(e) {\r\n if (e.keyCode === 27) {\r\n close();\r\n }\r\n }\r\n\r\n function close() {\r\n if (focusTrapInstance) {\r\n focusTrapInstance.deactivate();\r\n }\r\n openNavbarLogoParent.setAttribute(\"tabindex\", \"-1\");\r\n novicell.leftNavigationCol.resetAllCols();\r\n leftNavigation.classList.remove(openClass);\r\n toggleCircle.classList.remove(toggleCircleOpenClass);\r\n body.classList.remove(bodyNoScrollClass);\r\n body.classList.remove(bodyLeftNavOpenClass);\r\n toggleCircleOpenLabel.setAttribute(\"aria-hidden\", true);\r\n toggleCircleCloseLabel.setAttribute(\"aria-hidden\", false);\r\n handleCircleEnterAndLeave();\r\n if (searchField) {\r\n searchField.classList.remove(\"search-field--light-background\");\r\n }\r\n\r\n isOpen = false;\r\n }\r\n })();\r\n","\"use strict\";\r\nvar novicell = novicell || {};\r\n\r\nnovicell.mediaLightbox =\r\n novicell.mediaLightbox ||\r\n new (function () {\r\n const lightboxes = document.querySelectorAll(\".js-media-lightbox\");\r\n let ft;\r\n\r\n this.init = function () {\r\n if (lightboxes == null) {\r\n return;\r\n }\r\n\r\n lightboxes.forEach((lb) => {\r\n lb.addEventListener(\"click\", (e) => {\r\n const id = e.currentTarget.dataset.lightbox;\r\n const lightbox = document.getElementById(id);\r\n openLightbox(lightbox);\r\n });\r\n });\r\n };\r\n\r\n function openLightbox(lightbox) {\r\n document.documentElement.classList.add(\"no-scroll\");\r\n lightbox.style.display = \"block\";\r\n ft = window.focusTrap.createFocusTrap(lightbox, {\r\n onDeactivate: () => closeLightbox(lightbox, false),\r\n });\r\n ft.activate();\r\n\r\n var close = lightbox.querySelector(\".lightbox__close\");\r\n close.addEventListener(\"click\", () => closeLightbox(lightbox));\r\n }\r\n\r\n function closeLightbox(lightbox, ftDeactivate = true) {\r\n lightbox.style.display = \"none\";\r\n document.documentElement.classList.remove(\"no-scroll\");\r\n if (ftDeactivate) {\r\n ft.deactivate();\r\n }\r\n }\r\n })();\r\n\r\nnovicell.mediaCarousel =\r\n novicell.mediaCarousel ||\r\n new (function () {\r\n const slideshows = document.querySelectorAll(\".js-media-slideshow\");\r\n\r\n this.init = function () {\r\n if (slideshows == null) {\r\n return;\r\n }\r\n\r\n if (slideshows) {\r\n for (let index = 0; index < slideshows.length; index++) {\r\n const slideshow = slideshows[index];\r\n const flkty = new Flickity(slideshow, {\r\n // options\r\n contain: true,\r\n pageDots: false,\r\n prevNextButtons: false,\r\n wrapAround: true,\r\n cellAlign: \"left\",\r\n cellSelector: \".media-slideshow-slide\",\r\n });\r\n\r\n setupPrevNext(slideshow, flkty);\r\n\r\n setCurrentSlide(slideshow, flkty);\r\n\r\n flkty.on(\"change\", function (index) {\r\n setCurrentSlide(slideshow, flkty);\r\n });\r\n }\r\n }\r\n };\r\n\r\n function setupPrevNext(slideshow, flkty) {\r\n const prev = slideshow.querySelector(\"#js-page-header-prev-slide\");\r\n const next = slideshow.querySelector(\"#js-page-header-next-slide\");\r\n\r\n prev.addEventListener(\"click\", function (e) {\r\n e.preventDefault();\r\n flkty.previous();\r\n setCurrentSlide(flkty);\r\n });\r\n\r\n next.addEventListener(\"click\", function (e) {\r\n e.preventDefault();\r\n flkty.next();\r\n setCurrentSlide(flkty);\r\n });\r\n }\r\n\r\n function setCurrentSlide(slideshow, flkty) {\r\n const currentSlide = slideshow.querySelector(\r\n \"#js-page-header-current-slide\"\r\n );\r\n\r\n currentSlide.innerHTML = flkty.selectedIndex + 1;\r\n }\r\n })();\r\n","'use strict';\r\nvar novicell = novicell || {};\r\nnovicell.pageHeader =\r\n novicell.pageHeader ||\r\n new function () {\r\n const pageHeader = document.querySelector('#js-page-header');\r\n const pageHeaderSlideshow = document.querySelector('#js-page-header.page-header--slideshow');\r\n\r\n this.init = function () {\r\n if (pageHeader == null) {\r\n return;\r\n }\r\n\r\n if (window.scrollY > 0) {\r\n pageHeader.classList.remove('page-header--animate-height');\r\n }\r\n\r\n if (pageHeaderSlideshow) {\r\n\r\n const flkty = new Flickity(pageHeader, {\r\n // options\r\n contain: true,\r\n pageDots: false,\r\n prevNextButtons: false,\r\n wrapAround: true,\r\n cellAlign: 'left',\r\n cellSelector: '.page-header__slide'\r\n });\r\n\r\n setupPrevNext(flkty);\r\n\r\n setCurrentSlide(flkty);\r\n\r\n flkty.on('change', function (index) {\r\n setCurrentSlide(flkty);\r\n });\r\n }\r\n\r\n if (pageHeader.classList.contains('page-header--white-box')) {\r\n const whiteBox = pageHeader.querySelector('.js-page-header-content');\r\n const pageHeaderMargin = whiteBox.offsetHeight / 2;\r\n pageHeader.style.marginBottom = (whiteBox.offsetHeight / 2) + 'px';\r\n }\r\n };\r\n\r\n function setupPrevNext(flkty) {\r\n const prev = pageHeader.querySelector('#js-page-header-prev-slide');\r\n const next = pageHeader.querySelector('#js-page-header-next-slide');\r\n\r\n prev.addEventListener('click', function (e) {\r\n e.preventDefault();\r\n flkty.previous();\r\n setCurrentSlide(flkty);\r\n });\r\n\r\n next.addEventListener('click', function (e) {\r\n e.preventDefault();\r\n flkty.next();\r\n setCurrentSlide(flkty);\r\n });\r\n }\r\n\r\n function setCurrentSlide(flkty) {\r\n const currentSlide = pageHeader.querySelector('#js-page-header-current-slide');\r\n\r\n currentSlide.innerHTML = flkty.selectedIndex + 1;\r\n }\r\n }();\r\n","'use strict';\r\nvar novicell = novicell || {};\r\nnovicell.quickAccess =\r\n novicell.quickAccess ||\r\n new function () {\r\n const quickAccess = document.querySelectorAll('.js-quick-access');\r\n const pageHeader = document.querySelector('#js-page-header');\r\n\r\n this.init = function () {\r\n if (quickAccess == null || quickAccess.length <= 0) {\r\n return;\r\n }\r\n\r\n if (pageHeader != null && !pageHeader.classList.contains('page-header--animate-height')) {\r\n for (let i = 0; i < quickAccess.length; i++) {\r\n quickAccess[i].classList.add('quick-access--no-animation');\r\n }\r\n }\r\n };\r\n }();\r\n","\"use strict\";\r\n\r\nvar novicell = novicell || {};\r\nnovicell.operationData =\r\n novicell.operationData ||\r\n new (function () {\r\n const operationData = document.getElementById(\"js-operation-data\");\r\n const lang = document.documentElement.lang;\r\n dayjs.locale(lang);\r\n\r\n this.init = function () {\r\n if (operationData == null) {\r\n return;\r\n }\r\n\r\n var vm = new Vue({\r\n el: operationData,\r\n data: {\r\n activeMessages: [],\r\n groupedInstallations: [],\r\n loaded: false,\r\n activeWarning: false,\r\n styleObject: {\r\n animationDuration: \"6s\",\r\n },\r\n operationDataLinesOpened: false,\r\n operationDataElevatorsOpened: true,\r\n plannedChangesHeight: 0,\r\n plannedChanges: [],\r\n plannedAffectedLines: [],\r\n nodeId: operationData.getAttribute(\"data-node-id\"),\r\n rowsOpen: 0,\r\n isCollapsed: false,\r\n isAnimating: false,\r\n },\r\n mounted() {\r\n //gets data every 30 seconds\r\n this.getOperationData();\r\n this.getPlannedChanges();\r\n\r\n window.setTimeout(() => {\r\n window.addEventListener(\r\n \"scroll\",\r\n (e) => {\r\n if (e.target.id === \"operation-data\") return;\r\n\r\n if (window.innerWidth < 992) return;\r\n\r\n const scrollPos = window.scrollY;\r\n const isScrolled = scrollPos > 0;\r\n\r\n if (this.isCollapsed && isScrolled) return;\r\n\r\n this.isCollapsed = isScrolled;\r\n\r\n this.isAnimating = true;\r\n window.setTimeout(() => {\r\n this.isAnimating = false;\r\n }, 400);\r\n },\r\n true\r\n );\r\n }, 2000);\r\n },\r\n methods: {\r\n time(startDate, endDate) {\r\n const dateFormat = \"D. MMM HH.mm\";\r\n const timeFormat = \"HH.mm\";\r\n\r\n const start = dayjs(new Date(startDate));\r\n let end = dayjs(new Date(endDate));\r\n const endFormat =\r\n start.date() === end.date()\r\n ? `-${timeFormat}`\r\n : ` - ${dateFormat}`;\r\n return `${start.format(dateFormat)}${end.format(endFormat)}`;\r\n },\r\n getPlannedChanges() {\r\n const lang = document.documentElement.lang;\r\n axios\r\n .get(\r\n `/umbraco/api/ocapi/get24HoursOfChanges?nodeId=${this.nodeId}&lang=${lang}`\r\n )\r\n .then((response) => {\r\n const data = response.data;\r\n if (data) {\r\n const mappedData = data.map((x) => ({\r\n headline: x.title,\r\n description: x.description,\r\n time: this.time(x.startDate, x.endDate),\r\n metrobus: x.metrobus,\r\n line: x.lines,\r\n }));\r\n this.plannedChanges = mappedData;\r\n var plannedAffectedLines = [];\r\n mappedData.map((x) => {\r\n if (!plannedAffectedLines.includes(x.line))\r\n plannedAffectedLines.push(x.line);\r\n });\r\n this.plannedAffectedLines = plannedAffectedLines;\r\n }\r\n })\r\n .finally(() => {\r\n setTimeout(this.getPlannedChanges, 30000);\r\n });\r\n },\r\n getOperationData() {\r\n axios\r\n .get(\"/umbraco/api/operationDataApi/GetOperationData\")\r\n .catch((error) => {\r\n console.error(\"Error: \" + error);\r\n })\r\n .then((response) => {\r\n if (response) {\r\n let data = response.data;\r\n this.activeMessages = data.activeMessages;\r\n this.groupedInstallations = data.installations;\r\n this.activeWarning = data.activeWarning;\r\n //calculate animation duration\r\n if (\r\n this.activeMessages !== null &&\r\n this.activeMessages[0] != null\r\n ) {\r\n let longestMessageLength =\r\n this.activeMessages[0].name.length;\r\n if (\r\n this.activeMessages[1] != null &&\r\n this.activeMessages[1].name.length > longestMessageLength\r\n ) {\r\n longestMessageLength = this.activeMessages[1].name.length;\r\n }\r\n this.styleObject.animationDuration =\r\n Math.max(6, Math.round(longestMessageLength / 6.25)) +\r\n \"s\";\r\n }\r\n }\r\n })\r\n .finally(() => {\r\n if (!this.loaded) {\r\n this.loaded = true;\r\n }\r\n setTimeout(this.getOperationData, 30000);\r\n });\r\n },\r\n getRow(element) {\r\n let row = element;\r\n while (row && !row.classList.contains(\"operation-data__row\")) {\r\n row = row.parentElement;\r\n }\r\n return row;\r\n },\r\n toggleElement(event, elementId, parentId) {\r\n const root = document.querySelector(\".operation-data\");\r\n const element = root.querySelector(`#${elementId}`);\r\n const parent = root.querySelector(`#${parentId}`);\r\n const target = event.target;\r\n const row = this.getRow(element);\r\n\r\n const open = element.classList.contains(\"open\");\r\n const elementHeight = element.scrollHeight;\r\n const parentHeight = parent !== null ? parent.scrollHeight : 0;\r\n\r\n if (open) {\r\n if (!parent) {\r\n this.rowsOpen--;\r\n }\r\n if (this.rowsOpen === 0) {\r\n root.classList.remove(\"open\");\r\n }\r\n if (row) {\r\n row.style.height = `auto`;\r\n }\r\n if (row && !parent) {\r\n row.classList.remove(\"open\");\r\n }\r\n target.classList.remove(\"open\");\r\n element.style.height = 0;\r\n window.setTimeout(() => {\r\n element.classList.remove(\"open\");\r\n row.style.height = `${row.scrollHeight}px`;\r\n }, 300);\r\n if (parent !== null) {\r\n parent.style.height = `${parentHeight - elementHeight}px`;\r\n }\r\n } else {\r\n if (!parent) {\r\n this.rowsOpen++;\r\n }\r\n if (row) {\r\n row.style.height = `auto`;\r\n\r\n window.setTimeout(() => {\r\n row.style.height = `${row.scrollHeight}px`;\r\n }, 300);\r\n }\r\n if (row && !parent) {\r\n row.classList.add(\"open\");\r\n }\r\n root.classList.add(\"open\");\r\n target.classList.add(\"open\");\r\n element.classList.add(\"open\");\r\n element.style.height = elementHeight + \"px\";\r\n if (parent !== null) {\r\n parent.style.height = `${parentHeight + elementHeight}px`;\r\n }\r\n }\r\n },\r\n toggleOperationData(isMobile) {\r\n const element = document.querySelector(\".operation-data\");\r\n if (!element) return;\r\n\r\n if (isMobile) {\r\n const visible = element.classList.contains(\"show\");\r\n if (visible) {\r\n element.classList.remove(\"show\");\r\n window.setTimeout(() => {\r\n element.style.visibility = \"hidden\";\r\n }, 300);\r\n } else {\r\n element.style.visibility = \"visible\";\r\n element.classList.add(\"show\");\r\n }\r\n } else {\r\n this.isCollapsed = !this.isCollapsed;\r\n if (this.isCollapsed) {\r\n element.classList.remove(\"collapsed\");\r\n } else {\r\n element.classList.add(\"collapsed\");\r\n }\r\n\r\n this.isAnimating = true;\r\n element.classList.add(\"animating\");\r\n window.setTimeout(() => {\r\n this.isAnimating = false;\r\n element.classList.remove(\"animating\");\r\n }, 400);\r\n }\r\n },\r\n toggleCurrentChangeAnimation(event) {\r\n let target = event.target;\r\n let element = target;\r\n while (\r\n element &&\r\n !element.classList.contains(\"operation-data__current-changes\")\r\n ) {\r\n element = element.parentElement;\r\n }\r\n if (!element) return;\r\n\r\n const ticker = element.querySelector(\".operation-data__ticker\");\r\n if (!ticker) return;\r\n\r\n ticker.classList.toggle(\"animation-disabled\");\r\n target.classList.toggle(\"open\");\r\n element.classList.toggle(\"open\");\r\n element.style.height = `${element.scrollHeight}px`;\r\n },\r\n },\r\n });\r\n };\r\n })();\r\n","'use strict';\r\nvar novicell = novicell || {};\r\nnovicell.searchField =\r\n novicell.searchField ||\r\n new function () {\r\n const searchField = document.getElementById('js-search-field');\r\n let words = [];\r\n let currentIndex = 0;\r\n const activeWordClass = 'search-field__suggestion--active';\r\n\r\n this.init = function () {\r\n if (searchField == null) {\r\n return;\r\n }\r\n\r\n const searchInput = searchField.querySelector('input');\r\n\r\n searchField.addEventListener('submit', function (e) {\r\n e.preventDefault();\r\n submitForm(searchInput.value);\r\n });\r\n\r\n words = searchField.querySelectorAll('.js-search-field-suggestion');\r\n\r\n setInterval(changeWord, 7000);\r\n };\r\n\r\n function submitForm(term) {\r\n searchField.action += term;\r\n\r\n setTimeout(function () {\r\n searchField.submit();\r\n });\r\n }\r\n\r\n function changeWord() {\r\n if (!words[currentIndex]) return;\r\n\r\n words[currentIndex].classList.remove(activeWordClass);\r\n\r\n currentIndex++;\r\n\r\n if ((currentIndex) == words.length) {\r\n currentIndex = 0;\r\n }\r\n\r\n words[currentIndex].classList.add(activeWordClass);\r\n }\r\n }();\r\n","'use strict';\r\nvar novicell = novicell || {};\r\nnovicell.siteLogoFilter =\r\n novicell.siteLogoFilter ||\r\n new function () {\r\n const logo = document.querySelector('.site-navigation__logo');\r\n const svgElement = document.querySelector('.site-navigation__logo svg');\r\n const addId = \"filter-active\";\r\n\r\n this.init = function () {\r\n if (logo && svgElement) {\r\n logo.addEventListener('mouseenter', function () {\r\n svgElement.setAttribute('id', addId);\r\n });\r\n logo.addEventListener('mouseleave', function () {\r\n svgElement.setAttribute('id', \"\");\r\n });\r\n }\r\n };\r\n }();\r\n","\"use strict\";\r\nvar novicell = novicell || {};\r\nnovicell.stationMap =\r\n novicell.stationMap ||\r\n new (function () {\r\n var stationMap = document.querySelector(\".js-station-map\");\r\n\r\n this.init = function () {\r\n if (stationMap == null) {\r\n return;\r\n }\r\n\r\n new Vue({\r\n el: stationMap,\r\n data() {\r\n return {\r\n visibibleLines: \"m1-m2\",\r\n openPopup: false,\r\n activeStation: null,\r\n activeDialog: null,\r\n };\r\n },\r\n mounted() {\r\n if (\r\n !window.isMetroMapPage &&\r\n localStorage.getItem(\"linesPopupHidden\") !== \"true\"\r\n ) {\r\n this.openPopup = true;\r\n }\r\n\r\n const slideshows = document.querySelectorAll(\r\n \".js-metro-modal-slideshow\"\r\n );\r\n slideshows.forEach((slideshow) => {\r\n const flickity = new Flickity(slideshow, {\r\n contain: true,\r\n pageDots: false,\r\n prevNextButtons: false,\r\n cellAlign: \"left\",\r\n cellSelector: \".metro-modal__slideshow-slide\",\r\n });\r\n });\r\n\r\n stationMap = document.querySelector(\".js-station-map\");\r\n const stations = stationMap.querySelectorAll(\r\n \".station-map-desktop__link\"\r\n );\r\n stations.forEach(function (station) {\r\n const elem = station.querySelector(\"text\");\r\n\r\n station.addEventListener(\"mouseover\", function () {\r\n var bg = station.querySelector(\"rect\");\r\n if (bg.hasAttribute(\"transform\")) return;\r\n\r\n var bounds = elem.getBBox();\r\n bg.setAttribute(\"x\", Math.round(bounds.x - 6));\r\n bg.setAttribute(\"y\", Math.round(bounds.y - 3));\r\n bg.setAttribute(\"width\", Math.round(bounds.width + 12));\r\n bg.setAttribute(\"height\", Math.round(bounds.height + 7));\r\n bg.setAttribute(\"fill\", \"#14143c\");\r\n bg.setAttribute(\"rx\", \"5\");\r\n bg.setAttribute(\"transform\", elem.getAttribute(\"transform\"));\r\n });\r\n });\r\n },\r\n methods: {\r\n showLines(name) {\r\n this.visibibleLines = name;\r\n },\r\n closePopup() {\r\n this.openPopup = false;\r\n localStorage.setItem(\"linesPopupHidden\", \"true\");\r\n },\r\n openDialog(dialog) {\r\n dialog.show();\r\n dialog.classList.remove(\"hide\");\r\n dialog.classList.add(\"show\");\r\n\r\n //The flickity element exists in a dialog, so in order to initialize it, we need to call the resize method\r\n const flkty = Flickity.data(\r\n dialog.querySelector(\".js-metro-modal-slideshow\")\r\n );\r\n if (flkty) flkty.resize();\r\n },\r\n closeDialog(dialog) {\r\n dialog.classList.remove(\"show\");\r\n dialog.classList.add(\"hide\");\r\n window.setTimeout(function () {\r\n dialog.classList.remove(\"hide\");\r\n dialog.close();\r\n }, 300);\r\n this.activeStation = null;\r\n this.activeDialog = null;\r\n },\r\n toggleModal(station) {\r\n if (this.activeDialog && station !== this.activeStation) {\r\n this.closeDialog(this.activeDialog);\r\n }\r\n\r\n const dialog = document.querySelector(\r\n `[data-station=\"${station}\"]`\r\n );\r\n if (!dialog) return;\r\n\r\n if (this.activeStation === station) {\r\n this.closeDialog(dialog);\r\n } else {\r\n this.openDialog(dialog);\r\n this.activeDialog = dialog;\r\n this.activeStation = station;\r\n }\r\n },\r\n toggleStationMapModal() {\r\n const modal = document.querySelector(\".station-map__modal\");\r\n const otherModal = document.querySelector(\".metro-map-modal\");\r\n\r\n if (!modal || !otherModal) return;\r\n\r\n const isCloned = otherModal.classList.contains(\"cloned\");\r\n const isActive = otherModal.classList.contains(\"active\");\r\n\r\n if (isCloned && !isActive) {\r\n const popup = otherModal.querySelector(\".station-map__popup\");\r\n otherModal.style.opacity = \"1\";\r\n otherModal.classList.add(\"active\");\r\n document.body.classList.add(\"no-scroll\");\r\n if (\r\n popup &&\r\n localStorage.getItem(\"mobilePopupHidden\") !== \"true\"\r\n ) {\r\n window.setTimeout(function () {\r\n popup.classList.add(\"station-map__popup--open\");\r\n }, 300);\r\n }\r\n } else if (!isCloned) {\r\n const clone = modal.cloneNode(true);\r\n\r\n otherModal.append(clone);\r\n\r\n const closeModalButton = otherModal.querySelector(\r\n \".station-map__modal-close-button\"\r\n );\r\n\r\n const popup = otherModal.querySelector(\".station-map__popup\");\r\n\r\n otherModal.style.opacity = \"1\";\r\n otherModal.classList.add(\"cloned\");\r\n otherModal.classList.add(\"active\");\r\n document.body.classList.add(\"no-scroll\");\r\n if (\r\n popup &&\r\n localStorage.getItem(\"mobilePopupHidden\") !== \"true\"\r\n ) {\r\n window.setTimeout(function () {\r\n popup.classList.add(\"station-map__popup--open\");\r\n }, 300);\r\n\r\n const closePopupButtpn = popup.querySelector(\r\n \".station-map__popup-button\"\r\n );\r\n\r\n if (closePopupButtpn) {\r\n closePopupButtpn.addEventListener(\"click\", function (e) {\r\n e.preventDefault();\r\n localStorage.setItem(\"mobilePopupHidden\", \"true\");\r\n popup.classList.remove(\"station-map__popup--open\");\r\n });\r\n }\r\n }\r\n\r\n if (closeModalButton) {\r\n closeModalButton.addEventListener(\"click\", function () {\r\n otherModal.style.opacity = \"0\";\r\n document.body.classList.remove(\"no-scroll\");\r\n\r\n window.setTimeout(function () {\r\n otherModal.classList.remove(\"active\");\r\n }, 300);\r\n });\r\n }\r\n }\r\n },\r\n },\r\n });\r\n };\r\n })();\r\n","'use strict';\r\nvar novicell = novicell || {};\r\nnovicell.newsListPage =\r\n novicell.newsListPage ||\r\n new function () {\r\n const newsListPage = document.getElementById('js-news-list-page');\r\n const filteredNewsListPage = document.getElementById('js-filtered-news-list-page');\r\n\r\n const siteNodeId = document.body.dataset.sitenodeid;\r\n let isFilteredNewsList = false;\r\n\r\n Vue.filter('formatDate', function (date) {\r\n const monthNames = [\r\n 'Januar',\r\n 'Februar',\r\n 'Marts',\r\n 'April',\r\n 'Maj',\r\n 'Juni',\r\n 'Juli',\r\n 'August',\r\n 'September',\r\n 'Oktober',\r\n 'November',\r\n 'December'\r\n ];\r\n var d = new Date(date);\r\n\r\n return (\r\n d.getDate() +\r\n '. ' +\r\n monthNames[parseInt(d.getMonth())] +\r\n ' ' +\r\n d.getFullYear()\r\n );\r\n });\r\n\r\n this.init = function () {\r\n if (newsListPage == null && filteredNewsListPage == null) {\r\n return;\r\n }\r\n\r\n if (filteredNewsListPage !== null) {\r\n isFilteredNewsList = true;\r\n }\r\n\r\n new Vue({\r\n el: isFilteredNewsList ? filteredNewsListPage : newsListPage,\r\n data() {\r\n return {\r\n items: [],\r\n height: '',\r\n imageUrl: '',\r\n currentPage: 1,\r\n itemsPerPage: 10,\r\n pageSize: 10,\r\n totalItems: 0,\r\n itemsShowing: 0\r\n };\r\n },\r\n mounted() {\r\n if (!isFilteredNewsList) {\r\n // this.setHeight();\r\n this.getNews();\r\n }\r\n },\r\n methods: {\r\n // setHeight() {\r\n // const siteNavigation = document.getElementById(\r\n // 'js-site-navigation'\r\n // );\r\n\r\n // if (siteNavigation == null) {\r\n // return;\r\n // }\r\n\r\n // const minusHeight =\r\n // novicell.helper.outerHeight(siteNavigation);\r\n\r\n // this.height =\r\n // 'height: calc(100vh - ' + minusHeight + 'px);';\r\n // },\r\n getNews() {\r\n axios\r\n .get(\r\n '/umbraco/api/newsApi/getnews?siteNodeId=' + siteNodeId + '¤tPage=' + this.currentPage + '&itemsPerPage=' +\r\n this.itemsPerPage\r\n )\r\n .catch(error => {\r\n console.error('Error: ' + error);\r\n })\r\n .then(response => {\r\n let items = this.items;\r\n let newItems = response.data.items;\r\n let updatedItems = items.concat(newItems);\r\n\r\n this.items = updatedItems;\r\n\r\n /* Total items */\r\n this.totalItems = response.data.totalItems;\r\n if (this.totalItems < this.itemsPerPage) {\r\n this.itemsPerPage = this.totalItems;\r\n }\r\n\r\n /* Items showing */\r\n this.itemsShowing = this.itemsPerPage * this.currentPage;\r\n if (this.itemsShowing > this.totalItems) {\r\n this.itemsShowing = this.totalItems;\r\n }\r\n\r\n if (this.imageUrl == '') {\r\n let image = this.items[0].image;\r\n if (image) {\r\n this.imageUrl = image.url;\r\n }\r\n }\r\n });\r\n },\r\n changeImage(imageUrl) {\r\n if (imageUrl) {\r\n this.imageUrl = imageUrl;\r\n }\r\n },\r\n loadMore() {\r\n this.currentPage++;\r\n this.getNews();\r\n }\r\n }\r\n });\r\n };\r\n }();\r\n","'use strict';\r\nvar novicell = novicell || {};\r\nnovicell.newsList =\r\n novicell.newsList ||\r\n new function () {\r\n const newsLists = document.querySelectorAll('.js-newslist');\r\n\r\n this.init = function () {\r\n if (newsLists == null || newsLists.length <= 0) {\r\n return;\r\n }\r\n\r\n for (let i = 0; i < newsLists.length; i++) {\r\n let currentNewsList = newsLists[i];\r\n\r\n if (window.innerWidth < 992) {\r\n initSlider(currentNewsList);\r\n } else {\r\n const controller = new ScrollMagic.Controller();\r\n var list = currentNewsList.querySelector('.js-newslist-list');\r\n\r\n // create a scene\r\n new ScrollMagic.Scene({\r\n triggerElement: currentNewsList,\r\n reverse: false,\r\n triggerHook: '.7'\r\n })\r\n .setClassToggle(list, 'newslist__list--in-viewport')\r\n .addTo(controller); // assign the scene to the controller\r\n }\r\n }\r\n };\r\n\r\n function initSlider(elem) {\r\n const flkty = new Flickity(elem, {\r\n contain: true,\r\n pageDots: false,\r\n prevNextButtons: false,\r\n wrapAround: false,\r\n groupCells: '80%',\r\n cellAlign: 'left',\r\n cellSelector: '.js-newslist-item'\r\n });\r\n }\r\n }();\r\n","\"use strict\";\r\n\r\nvar novicell = novicell || {};\r\nnovicell.operationalChanges =\r\n novicell.operationalChanges ||\r\n new (function () {\r\n const delay = (t) => new Promise((resolve) => setTimeout(resolve, t));\r\n this.init = function () {\r\n const lang = document.documentElement.lang;\r\n const isDanish = lang === \"da\";\r\n dayjs.locale(lang);\r\n\r\n const operationalChanges = document.getElementById(\r\n \"js-operational-changes\"\r\n );\r\n if (!operationalChanges) {\r\n return;\r\n }\r\n\r\n const days =\r\n lang === \"da\"\r\n ? [\r\n \"Mandag\",\r\n \"Tirsdag\",\r\n \"Onsdag\",\r\n \"Torsdag\",\r\n \"Fredag\",\r\n \"Lørdag\",\r\n \"Søndag\",\r\n ]\r\n : [\r\n \"Monday\",\r\n \"Tuesday\",\r\n \"Wednesday\",\r\n \"Thursday\",\r\n \"Friday\",\r\n \"Saturday\",\r\n \"Sunday\",\r\n ];\r\n const shortDays =\r\n lang === \"da\"\r\n ? [\"Man\", \"Tirs\", \"Ons\", \"Tors\", \"Fre\", \"Lør\", \"Søn\"]\r\n : [\"Mon\", \"Tues\", \"Wed\", \"Thur\", \"Fri\", \"Sat\", \"Sun\"];\r\n\r\n const apiUrl = \"/umbraco/api/ocapi/\";\r\n\r\n new Vue({\r\n data: {\r\n calendar: [],\r\n days: days,\r\n shortDays: shortDays,\r\n selectedDate: \"\",\r\n view: \"week\",\r\n dateRange: \"\",\r\n daysAfter: 3,\r\n email: \"\",\r\n notificationLines: [],\r\n filters: [\"m1,m2,m3,m4\"],\r\n availableLines: [\r\n { name: \"M1\", value: \"m1\" },\r\n { name: \"M2\", value: \"m2\" },\r\n { name: \"M3\", value: \"m3\" },\r\n { name: \"M4\", value: \"m4\" },\r\n ],\r\n lineDescriptions: JSON.parse(\r\n operationalChanges.getAttribute(\"data-line-descriptions\")\r\n ),\r\n operationalChanges: [],\r\n showSignUpSuccessResponse: false,\r\n showErrorResponse: false,\r\n showValidationErrorResponse: false,\r\n nodeId: operationalChanges.getAttribute(\"data-node-id\"),\r\n signUpNotificationTimeout: null,\r\n loading: false,\r\n },\r\n computed: {\r\n mappedFilter() {\r\n return this.filters.join(\",\");\r\n },\r\n weeks() {\r\n return this.view === \"week\" ? 1 : 2;\r\n },\r\n },\r\n mounted() {\r\n this.selectedDate = dayjs(new Date()).format(\"YYYYMMDD\");\r\n this.getCalendar();\r\n this.getDays();\r\n\r\n const scrollArea = document.querySelector(\r\n \".oc-calendar__scroll-area\"\r\n );\r\n const leftShadow = document.querySelector(\r\n \".oc-calendar__shadow--left\"\r\n );\r\n const rightShadow = document.querySelector(\r\n \".oc-calendar__shadow--right\"\r\n );\r\n const threshold = 50;\r\n const toggleShadows = function () {\r\n let scrollWidth = scrollArea.scrollWidth;\r\n let scrollLeft = scrollArea.scrollLeft;\r\n let width = scrollArea.getBoundingClientRect().width;\r\n let sum = scrollLeft + width;\r\n\r\n if (scrollLeft <= threshold) {\r\n leftShadow.classList.remove(\"active\");\r\n } else {\r\n leftShadow.classList.add(\"active\");\r\n }\r\n if (sum >= scrollWidth - threshold) {\r\n rightShadow.classList.remove(\"active\");\r\n } else {\r\n rightShadow.classList.add(\"active\");\r\n }\r\n };\r\n scrollArea.addEventListener(\"scroll\", toggleShadows, {\r\n passive: true,\r\n });\r\n this.signUpNotificationTimeout = window.setTimeout(() => {}, 0);\r\n },\r\n methods: {\r\n lineId(day, line) {\r\n const date = new Date(day).getDate();\r\n return `${line.toUpperCase()}-${date}`;\r\n },\r\n getCalendar() {\r\n const lang = document.documentElement.lang;\r\n const format = isDanish ? \"D. MMM\" : \"D MMM\";\r\n axios\r\n .get(\r\n `${apiUrl}getCalendar?lines=${this.mappedFilter}&lang=${lang}&weeks=${this.weeks}`\r\n )\r\n .then((response) => {\r\n const weeks = response.data;\r\n this.calendar.splice(0, this.calendar.length, ...weeks);\r\n const firstDate = weeks[0].days[0];\r\n const lastDate = weeks[weeks.length - 1].days[6];\r\n this.dateRange =\r\n dayjs(firstDate.date).format(format) +\r\n \" - \" +\r\n dayjs(lastDate.date).format(format);\r\n });\r\n },\r\n formatDate(date) {\r\n return dayjs(date).format(\"YYYYMMDD\");\r\n },\r\n fetchDays() {\r\n return axios\r\n .get(\r\n `${apiUrl}getDays?date=${this.selectedDate}&lang=${lang}&lines=${this.mappedFilter}&nodeid=${this.nodeId}&daysAfter=${this.daysAfter}`\r\n )\r\n .then((response) => {\r\n const data = response.data;\r\n if (data) {\r\n this.operationalChanges = this.groupBy(data, \"startDate\");\r\n }\r\n });\r\n },\r\n getDays(extend = false) {\r\n if (extend) {\r\n this.daysAfter += 3;\r\n } else {\r\n this.daysAfter = this.daysAfter;\r\n }\r\n this.fetchDays();\r\n },\r\n toggleCalendarView() {\r\n if (this.view === \"week\") {\r\n this.view = \"month\";\r\n } else {\r\n this.view = \"week\";\r\n }\r\n this.getCalendar();\r\n },\r\n groupBy(objectArray, property) {\r\n return objectArray.reduce(function (acc, obj) {\r\n var format = isDanish ? \"D. MMMM YYYY\" : \"D MMMM YYYY\";\r\n var key = dayjs(obj[property]).format(format);\r\n if (!acc[key]) {\r\n acc[key] = [];\r\n }\r\n acc[key].push(obj);\r\n return acc;\r\n }, {});\r\n },\r\n selectDate(day, line) {\r\n this.selectedDate = this.formatDate(day);\r\n this.fetchDays().then(() => {\r\n const list = document.getElementById(\"oc-list\");\r\n if (!list) return;\r\n\r\n if (line) {\r\n const id = this.lineId(day, line);\r\n const change = document.getElementById(id);\r\n\r\n if (change) {\r\n this.scrollToElement(change);\r\n\r\n const checkbox = change.querySelector(\r\n \".oc-list-change__toggle-checkbox\"\r\n );\r\n if (checkbox) checkbox.checked = true;\r\n }\r\n } else {\r\n this.scrollToElement(list);\r\n }\r\n });\r\n },\r\n scrollToElement(el) {\r\n el.scrollIntoView({\r\n behavior: \"smooth\",\r\n });\r\n },\r\n onSignup: function (event) {\r\n event.preventDefault();\r\n const form = document.getElementById(\"oc-notifications-form\");\r\n const notificationIcon = form.querySelector(\r\n \".oc-notifications__form-input-icon\"\r\n );\r\n const notification = form.querySelector(\r\n \".oc-notifications__form-input-notification\"\r\n );\r\n const emailAddressPattern =\r\n /^(?!\\.)(\"([^\"\\r\\\\]|\\\\[\"\\r\\\\])*\"|(?:[-\\u00BF-\\u1FFF\\u2C00-\\uD7FF\\w0-9!#$%&'*+\\/=?^_`{|}~]|\\.)+)@((?![\\.\\-])(?:[-\\u00BF-\\u1FFF\\u2C00-\\uD7FF\\w0-9]|\\.)+\\.[-\\u00BF-\\u1FFF\\u2C00-\\uD7FF\\w0-9]{2,})$/;\r\n if (!emailAddressPattern.test(this.email)) {\r\n notification.style.visibility = \"visible\";\r\n notificationIcon.style.visibility = \"visible\";\r\n notification.classList.add(\"active\");\r\n notificationIcon.classList.add(\"active\");\r\n window.clearTimeout(this.signUpNotificationTimeout);\r\n this.signUpNotificationTimeout = window.setTimeout(() => {\r\n notification.classList.remove(\"active\");\r\n notificationIcon.classList.remove(\"active\");\r\n window.setTimeout(() => {\r\n notification.style.visibility = \"hidden\";\r\n notificationIcon.style.visibility = \"hidden\";\r\n }, 300);\r\n }, 4000);\r\n return;\r\n }\r\n if (this.notificationLines.length > 0) {\r\n const tags = this.notificationLines;\r\n this.loading = true;\r\n axios\r\n .post(\r\n `/umbraco/api/OcNewsletter/SubscribeToNewsletter?email=${\r\n this.email\r\n }&tags=${tags.join(\",\")}&lang=${lang}`\r\n )\r\n .then((response) => {\r\n if (response.status === 200) {\r\n this.showSignUpSuccessResponse = true;\r\n this.email = \"\";\r\n this.notificationLines = [];\r\n this.loading = false;\r\n delay(5000).then(\r\n function () {\r\n this.showSignUpSuccessResponse = false;\r\n }.bind(this)\r\n );\r\n }\r\n })\r\n .catch((error) => {\r\n //handle error\r\n this.loading = false;\r\n if (error.response.data.internalError) {\r\n this.showErrorResponse = true;\r\n } else {\r\n this.showValidationErrorResponse = true;\r\n }\r\n delay(5000).then(\r\n function () {\r\n this.showErrorResponse = false;\r\n this.showValidationErrorResponse = false;\r\n this.showSignupContent = true;\r\n }.bind(this)\r\n );\r\n });\r\n }\r\n },\r\n isDayDisabled: function (day) {\r\n const actives = day.lines.filter(function (l) {\r\n if (l.isActive) {\r\n return l;\r\n }\r\n });\r\n return actives.length === 0;\r\n },\r\n },\r\n filters: {\r\n formatDate: function (date) {\r\n var format = isDanish ? \"DD. MMMM YYYY\" : \"DD MMMM YYYY\";\r\n return dayjs(date).format(format);\r\n },\r\n dayName: function (date) {\r\n return dayjs(date).format(\"dddd\");\r\n },\r\n day: function (date) {\r\n return dayjs(date).format(\"D\");\r\n },\r\n time: function (date) {\r\n return dayjs(date).format(\"HH:mm\");\r\n },\r\n dateRange: function (date) {\r\n var format = isDanish ? \"D. MMM\" : \"D MMM\";\r\n return dayjs(date).format(format);\r\n },\r\n },\r\n watch: {\r\n filters(newFilters, oldFilters) {\r\n let skip = false;\r\n const allSelected =\r\n !oldFilters.includes(\"m1,m2,m3,m4\") &&\r\n newFilters.includes(\"m1,m2,m3,m4\");\r\n if (newFilters.length === 0 || allSelected) {\r\n if (\r\n newFilters.length === 0 ||\r\n (newFilters.length > 1 && allSelected)\r\n ) {\r\n skip = true;\r\n }\r\n this.filters = [\"m1,m2,m3,m4\"];\r\n } else if (newFilters.length > 1) {\r\n const indexOfAll = this.filters.indexOf(\"m1,m2,m3,m4\");\r\n if (indexOfAll > -1) {\r\n this.filters.splice(indexOfAll, 1);\r\n }\r\n }\r\n if (newFilters.join() !== oldFilters.join() && !skip) {\r\n this.getCalendar();\r\n this.getDays();\r\n }\r\n },\r\n },\r\n delimiters: [\"${\", \"}\"],\r\n el: operationalChanges,\r\n });\r\n };\r\n })();\r\n","'use strict';\r\nvar novicell = novicell || {};\r\nnovicell.mobileTickets =\r\n novicell.mobileTickets ||\r\n new function () {\r\n const mobileTickets = document.querySelectorAll('.js-mobile-tickets');\r\n\r\n this.init = function () {\r\n if (mobileTickets == null || mobileTickets.length <= 0) {\r\n return;\r\n }\r\n\r\n for (let i = 0; i < mobileTickets.length; i++) {\r\n const current = mobileTickets[i];\r\n\r\n initSlider(current);\r\n }\r\n };\r\n\r\n function initSlider(elem) {\r\n const flkty = new Flickity(elem, {\r\n // options\r\n contain: true,\r\n pageDots: false,\r\n prevNextButtons: true,\r\n wrapAround: false,\r\n cellAlign: 'left',\r\n cellSelector: '.js-mobile-ticket-item',\r\n arrowShape: {\r\n x0: 10,\r\n x1: 45,\r\n y1: 35,\r\n x2: 55,\r\n y2: 35,\r\n x3: 20\r\n }\r\n });\r\n }\r\n }();\r\n","'use strict';\r\nvar novicell = novicell || {};\r\nnovicell.signup =\r\n novicell.signup ||\r\n new function () {\r\n\r\n const delay = t => new Promise(resolve => setTimeout(resolve, t));\r\n\r\n this.init = function () {\r\n var signup = document.querySelector('.js-signup');\r\n if (!signup) {\r\n return;\r\n }\r\n const mailingListId = signup.getAttribute('data-list-id');\r\n\r\n new Vue({\r\n el: signup,\r\n data: {\r\n email: '',\r\n mailingListId: mailingListId,\r\n showSuccessResponse: false,\r\n showErrorResponse: false,\r\n showValidationErrorResponse: false,\r\n showSignupContent: true,\r\n loading: false\r\n },\r\n methods: {\r\n onSubmit: function (event) {\r\n event.preventDefault();\r\n this.showSignupContent = false;\r\n this.loading = true;\r\n axios.post(\r\n '/umbraco/metro/newsletterApi/SubscribeToNewsletter?email=' + this.email + '&mailingListId=' + this.mailingListId\r\n )\r\n .then(response => {\r\n //handle Success\r\n this.loading = false;\r\n this.showSuccessResponse = true;\r\n delay(5000).then(function () {\r\n this.showSuccessResponse = false;\r\n this.showSignupContent = true;\r\n }.bind(this));\r\n })\r\n .catch(error => {\r\n //handle error\r\n this.loading = false;\r\n if (error.response.data.internalError) {\r\n this.showErrorResponse = true;\r\n } else {\r\n this.showValidationErrorResponse = true;\r\n }\r\n delay(5000).then(function () {\r\n this.showErrorResponse = false;\r\n this.showValidationErrorResponse = false;\r\n this.showSignupContent = true;\r\n }.bind(this));\r\n });\r\n }\r\n }\r\n });\r\n };\r\n }();\r\n","\"use strict\";\r\nvar novicell = novicell || {};\r\nnovicell.notification =\r\n novicell.notification ||\r\n new (function () {\r\n this.init = function () {\r\n const notificationElement = document.querySelector(\".js-notification\");\r\n if (!notificationElement) return;\r\n\r\n const closeButton = notificationElement.querySelector(\r\n \".js-notification-button\"\r\n );\r\n if (!closeButton) return;\r\n\r\n closeButton.addEventListener(\"click\", () => {\r\n notificationElement.classList.remove(\"active\");\r\n });\r\n };\r\n })();\r\n","\"use strict\";\r\nvar novicell = novicell || {};\r\nnovicell.searchResultPage =\r\n novicell.searchResultPage ||\r\n new (function () {\r\n const searchResultPage = document.getElementById(\"js-search-result-page\");\r\n const siteNodeId = document.body.dataset.sitenodeid;\r\n\r\n this.init = function () {\r\n if (searchResultPage == null) {\r\n return;\r\n }\r\n\r\n new Vue({\r\n el: searchResultPage,\r\n data() {\r\n return {\r\n items: [],\r\n currentPage: 1,\r\n itemsPerPage: 10,\r\n pageSize: 10,\r\n totalItems: 0,\r\n itemsShowing: 0,\r\n term: \"\",\r\n };\r\n },\r\n mounted() {\r\n const urlParams = new URLSearchParams(window.location.search);\r\n const queryTerm = urlParams.get(\"term\");\r\n\r\n this.term = queryTerm;\r\n\r\n if (this.term) {\r\n this.getResults();\r\n }\r\n },\r\n methods: {\r\n getResults() {\r\n axios\r\n .get(\r\n \"/umbraco/api/searchApi/Search?siteNodeId=\" +\r\n siteNodeId +\r\n \"&term=\" +\r\n this.term +\r\n \"¤tPage=\" +\r\n this.currentPage +\r\n \"&itemsPerPage=\" +\r\n this.itemsPerPage\r\n )\r\n .catch((error) => {\r\n console.error(\"Error: \" + error);\r\n })\r\n .then((response) => {\r\n if (response) {\r\n if (response.data.currentPage <= 1) {\r\n this.items = [];\r\n }\r\n let items = this.items;\r\n let newItems = response.data.items;\r\n let updatedItems = items.concat(newItems);\r\n\r\n this.items = updatedItems;\r\n\r\n /* Total items */\r\n this.totalItems = response.data.totalItems;\r\n // if (this.totalItems < this.itemsPerPage) {\r\n // this.itemsPerPage = this.totalItems;\r\n // }\r\n\r\n /* Items showing */\r\n this.itemsShowing = this.itemsPerPage * this.currentPage;\r\n if (this.itemsShowing > this.totalItems) {\r\n this.itemsShowing = this.totalItems;\r\n }\r\n\r\n var url = new URL(window.location);\r\n var searchParams = url.searchParams;\r\n const term = searchParams.get(\"term\");\r\n if (term !== this.term) {\r\n searchParams.set(\"term\", this.term);\r\n window.location = url.toString();\r\n }\r\n }\r\n });\r\n },\r\n loadMore() {\r\n this.currentPage++;\r\n this.getResults();\r\n },\r\n submitForm(e) {\r\n e.preventDefault();\r\n this.currentPage = 1;\r\n this.getResults();\r\n },\r\n clear() {\r\n this.items = [];\r\n this.totalItems = 0;\r\n this.itemsShowing = 0;\r\n this.currentPage = 1;\r\n this.term = \"\";\r\n\r\n this.$refs.input.focus();\r\n },\r\n },\r\n });\r\n };\r\n })();\r\n","\"use strict\";\r\n\r\nvar novicell = novicell || {};\r\n\r\nnovicell.timeline =\r\n novicell.timeline ||\r\n new (function () {\r\n this.init = function () {\r\n const timelines = document.querySelectorAll('.js-timeline');\r\n\r\n for (let index = 0; index < timelines.length; index++) {\r\n const element = timelines[index];\r\n new Flickity(element, {\r\n // options\r\n contain: true,\r\n pageDots: false,\r\n prevNextButtons: true,\r\n wrapAround: false,\r\n cellAlign: 'left',\r\n cellSelector: '.js-timeline-card',\r\n arrowShape: { \r\n x0: 20,\r\n x1: 60, y1: 40,\r\n x2: 70, y2: 40,\r\n x3: 30\r\n }\r\n });\r\n }\r\n };\r\n})();\r\n","'use strict';\r\nvar novicell = novicell || {};\r\nnovicell.vacancies =\r\n novicell.vacancies ||\r\n new function () {\r\n const vacanciesElement = document.querySelector('.js-vacancies')\r\n\r\n this.init = function () {\r\n if (!vacanciesElement) return;\r\n const loadMoreBth = vacanciesElement.querySelector(\".vacancies__button\")\r\n\r\n if (!loadMoreBth) return;\r\n\r\n loadMoreBth.addEventListener(\"click\", function () {\r\n vacanciesElement.classList.add(\"show-all\")\r\n loadMoreBth.classList.add(\"hide\")\r\n })\r\n };\r\n }();\r\n","\"use strict\";\r\n\r\nvar novicell = novicell || {};\r\n\r\nnovicell.pageheaderVideoYoutube =\r\n novicell.pageheaderVideoYoutube ||\r\n new (function () {\r\n const youtubeVideoWrapper = document.querySelector(\"header .tv iframe\");\r\n\r\n this.init = function () {\r\n if (youtubeVideoWrapper != null) {\r\n youtubeVideoWrapper.style.display = \"block\";\r\n youtubeVideoWrapper.classList.add(\"active\");\r\n }\r\n\r\n novicell.pageheaderVideoYoutube.vidRescale();\r\n };\r\n\r\n this.vidRescale = function () {\r\n var tvScreen = document.querySelector(\".tv .screen\");\r\n if (\r\n tvScreen != null &&\r\n youtubeVideoWrapper != null &&\r\n youtubeVideoWrapper !== \"undefined\"\r\n ) {\r\n var w = window.innerWidth + 200,\r\n h = window.innerHeight + 200;\r\n if (w / h > 16 / 9) {\r\n youtubeVideoWrapper.style.height = (w / 16) * 9 + \"px\";\r\n tvScreen.style.left = \"0px\";\r\n } else {\r\n youtubeVideoWrapper.style.height = h + \"px\";\r\n tvScreen.style.left = \"0px\";\r\n }\r\n }\r\n };\r\n })();\r\n\r\nwindow.addEventListener(\r\n \"resize\",\r\n function () {\r\n novicell.pageheaderVideoYoutube.vidRescale();\r\n },\r\n true\r\n);\r\n","\"use strict\";\r\n/*\r\n * Novicell master\r\n * Use this file to call functions in other files, on document ready, window.resize etc.\r\n */\r\n\r\nvar novicell = novicell || {};\r\nvar projectName = projectName || {};\r\n\r\n// Document ready\r\ndocument.addEventListener(\"DOMContentLoaded\", function () {\r\n // disabled as it is currently not in use\r\n // novicell.capacityGuide.init();\r\n\r\n novicell.pageHeader.init();\r\n novicell.newsList.init();\r\n novicell.vacancies.init();\r\n novicell.searchField.init();\r\n\r\n novicell.newsListPage.init();\r\n novicell.mobileTickets.init();\r\n novicell.searchResultPage.init();\r\n novicell.playIcon.init();\r\n\r\n novicell.quickAccess.init();\r\n novicell.operationData.init();\r\n novicell.mediaCarousel.init();\r\n novicell.mediaLightbox.init();\r\n\r\n novicell.countDown.init();\r\n novicell.fullwidthimage.init();\r\n novicell.stationMap.init();\r\n novicell.signup.init();\r\n\r\n novicell.accordionLinks.init();\r\n novicell.accessibility.init();\r\n novicell.departureTable.init();\r\n novicell.leftNavigation.init();\r\n\r\n novicell.leftNavigationSubNavigation.init();\r\n novicell.timeline.init();\r\n novicell.departures.init();\r\n\r\n novicell.notification.init();\r\n\r\n // Vue components\r\n novicell.operationalChanges.init();\r\n novicell.information.init();\r\n\r\n //SetTimeout to make delay on pageheader video\r\n setTimeout(() => {\r\n novicell.pageheaderVideoYoutube.init();\r\n }, 3000);\r\n});\r\n"]}