{"version":3,"file":"609.0337a537fe58bd9af943.js","mappings":"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","sources":["webpack://heligan.web/./wwwroot/app/src/modules/opening-times-calendar/opening-times-calendar.js"],"sourcesContent":["import Cookies from 'js-cookie';\r\nimport { Modal as bsModal } from 'bootstrap';\r\nimport { addMonths, subMonths, format, formatISO, isThisMonth, isSameDay } from 'date-fns';\r\nimport { watchViewport, unwatchViewport } from 'tornis';\r\nimport { breakPoint } from '../../js/config';\r\n\r\nimport './opening-times-calendar.scss';\r\n\r\n// endpoint where month data comes from\r\nconst monthDataURL = window.calendarMonthEndpoint;\r\n// endpoint where day detail comes from\r\nconst dayDetailDataURL = window.calendarDetailEndpoint;\r\n\r\n// Memory cache of previously fetched dates\r\nconst detailsCache = new Map();\r\n\r\n// Get from the cache, or make a new fetch request\r\nasync function getOtDetail(date, id) {\r\n let cacheID = `${id}--${date}`; // unique id for date and attraction\r\n if (!detailsCache.has(cacheID)) {\r\n let detailHtml = await (await window.fetch(dayDetailDataURL + '?date=' + date + '&attractionId=' + id)).text();\r\n detailsCache.set(cacheID, detailHtml);\r\n }\r\n return detailsCache.get(cacheID);\r\n}\r\nclass OpeningTimesCalendar {\r\n\r\n constructor(el) {\r\n this.el = el;\r\n // get attraction id to use in queries for data\r\n this.attractionID = el.dataset.attractionId;\r\n // do we need to show the instrcutions modal?\r\n this.instructionsModal = el.querySelector('.instructions-modal');\r\n // store month listing container element\r\n this.monthContentWrapper = el.querySelector('ol.opening-times--month');\r\n // month switching stuff\r\n this.monthsControls = {\r\n dropdownToggle: el.querySelector('.opening-times--controls .dropdown .dropdown-toggle'),\r\n dropdownLinks: el.querySelectorAll('.opening-times--controls .dropdown .dropdown-menu a.dropdown-item'),\r\n prevBtn: el.querySelector('.opening-times--controls .prev-month'),\r\n nextBtn: el.querySelector('.opening-times--controls .next-month')\r\n }\r\n this.monthOptions = []; // store the data-date values of the dropdown options\r\n this.monthOptionIndex = 0\r\n this.monthsControls.dropdownLinks.forEach((l, i) => {\r\n this.monthOptions.push(new Date(l.dataset.date + 'T00:00:00.000Z'));\r\n if(l.classList.contains('active')) this.monthOptionIndex = i;\r\n // add behaviour\r\n l.onclick = (e) => {\r\n e.preventDefault();\r\n this.loadMonth(i);\r\n };\r\n });\r\n // update controls\r\n this.updateControls();\r\n // add btn controls behaviours\r\n this.monthsControls.prevBtn.onclick = (e) => {\r\n e.preventDefault();\r\n this.loadMonth(this.monthOptionIndex - 1);\r\n };\r\n this.monthsControls.nextBtn.onclick = (e) => {\r\n e.preventDefault();\r\n this.loadMonth(this.monthOptionIndex + 1);\r\n };\r\n // process the initial month content\r\n this.monthContent = new MonthContent(this.monthContentWrapper, this.attractionID);\r\n // check cookie to see if we need to show the instructions modal\r\n let modalName = 'otInstructionsModalShown';\r\n if(typeof Cookies.get(modalName) == 'undefined') {\r\n let m = bsModal.getOrCreateInstance(this.instructionsModal);\r\n m.show();\r\n // set cookie\r\n Cookies.set(modalName, 'true');\r\n }\r\n }\r\n\r\n updateControls() {\r\n // prev button\r\n if(this.monthOptionIndex > 0) {\r\n this.monthsControls.prevBtn.removeAttribute('disabled');\r\n this.monthsControls.prevBtn.classList.remove('disabled');\r\n let date = formatISO(subMonths(this.monthOptions[this.monthOptionIndex - 1], 1), { representation: 'date' });\r\n this.monthsControls.prevBtn.setAttribute('href', \"?month=\" + date + \"&attractionId=\" + this.attractionID);\r\n this.monthsControls.prevBtn.setAttribute('data-date', date);\r\n } else {\r\n this.monthsControls.prevBtn.classList.add('disabled');\r\n this.monthsControls.prevBtn.setAttribute('disabled','disabled');\r\n }\r\n // dropdown\r\n this.monthsControls.dropdownToggle.innerHTML = format(this.monthOptions[this.monthOptionIndex], 'MMMM y');\r\n this.monthsControls.dropdownLinks.forEach((l, i) => {\r\n l.classList.toggle('active', i == this.monthOptionIndex);\r\n });\r\n // next button\r\n if(this.monthOptionIndex < (this.monthOptions.length - 1)) {\r\n this.monthsControls.nextBtn.removeAttribute('disabled');\r\n this.monthsControls.nextBtn.classList.remove('disabled');\r\n let date = formatISO(subMonths(this.monthOptions[this.monthOptionIndex + 1], 1), { representation: 'date' });\r\n this.monthsControls.nextBtn.setAttribute('href', \"?month=\" + date + \"&attractionId=\" + this.attractionID);\r\n this.monthsControls.nextBtn.setAttribute('data-date', date);\r\n } else {\r\n this.monthsControls.nextBtn.classList.add('disabled');\r\n this.monthsControls.nextBtn.setAttribute('disabled','disabled');\r\n }\r\n }\r\n\r\n loadMonth(newMonthOptionIndex) {\r\n let _this = this;\r\n if(newMonthOptionIndex != this.monthOptionIndex) {\r\n // load\r\n let r = new XMLHttpRequest();\r\n r.open('GET', `${monthDataURL}?month=${this.monthOptions[newMonthOptionIndex].toISOString()}&attractionId=${this.attractionID}`, true);\r\n r.onreadystatechange = function () {\r\n if (r.readyState != 4 || r.status != 200) return;\r\n _this.monthContentWrapper.style.opacity = 0;\r\n // listen for end of opacity transition\r\n _this.monthContentWrapper.ontransitionend = (e) => {\r\n if(e.target == _this.monthContentWrapper) {\r\n _this.monthContentWrapper.ontransitionend = null;\r\n _this.monthContentWrapper.innerHTML = r.responseText;\r\n _this.monthContentWrapper.style.opacity = 1;\r\n _this.monthOptionIndex = newMonthOptionIndex;\r\n _this.updateControls()\r\n // reset\r\n this.monthContent = null;\r\n // start over\r\n this.monthContent = new MonthContent(_this.monthContentWrapper, _this.attractionID);\r\n }\r\n }\r\n };\r\n r.send();\r\n }\r\n }\r\n\r\n}\r\n\r\nclass MonthContent {\r\n constructor(el, attractionID) {\r\n this.el = el;\r\n this.attractionID = attractionID;\r\n // day detail element\r\n this.dayDetail = {\r\n el: el.querySelector('.day-detail'),\r\n expanded: false,\r\n wrapper: el.querySelector('.day-detail--wrapper'),\r\n inner: el.querySelector('.day-detail--content'),\r\n closeButton: el.querySelector('.day-detail--wrapper button.close')\r\n };\r\n // buttons\r\n this.buttons = [];\r\n this.buttonActiveIndex = -1;\r\n el.querySelectorAll('button[data-date]').forEach((b, i) => {\r\n let button = {\r\n el: b,\r\n index: i,\r\n date: b.dataset.date,\r\n expanded: false,\r\n order: b.parentElement.style.order\r\n };\r\n button.el.onclick = (e) => {\r\n if(button.expanded) {\r\n this.closeDetails();\r\n this.buttonActiveIndex = -1;\r\n } else {\r\n if(this.dayDetail.expanded) {\r\n // turn off old button\r\n this.buttons[this.buttonActiveIndex].expanded = false;\r\n this.buttons[this.buttonActiveIndex].el.setAttribute('aria-expanded', false);\r\n // close existing then open new day detail\r\n this.closeDetails(() => {this.openDetails(button)});\r\n } else {\r\n // open new day detail\r\n this.openDetails(button);\r\n }\r\n button.expanded = true;\r\n button.el.setAttribute('aria-expanded', true);\r\n this.buttonActiveIndex = button.index;\r\n }\r\n };\r\n this.buttons.push(button);\r\n });\r\n // details close button\r\n this.dayDetail.closeButton.onclick = () => {\r\n this.closeDetails();\r\n this.buttons[this.buttonActiveIndex].el.focus();\r\n }\r\n // watch for viewport changes - update heights and/or order values\r\n this.watcherLastWidth = 0;\r\n this.watcher = ({size}) => {\r\n if (size.changed) {\r\n if (this.dayDetail.expanded) {\r\n this.fitToContent();\r\n // logical throttle, we only need to call again on a breakPoint change\r\n if ((this.watcherLastWidth < breakPoint.MD && size.x >= breakPoint.MD)\r\n || (this.watcherLastWidth >= breakPoint.MD && size.x < breakPoint.MD)) {\r\n this.updateOrder(this.buttons[this.buttonActiveIndex]);\r\n }\r\n }\r\n this.watcherLastWidth = size.x;\r\n }\r\n }\r\n watchViewport(this.watcher);\r\n }\r\n\r\n updateOrder(button) {\r\n if (button == null) {\r\n return;\r\n }\r\n let order = button.order;\r\n if (window.innerWidth >= breakPoint.MD) {\r\n order = (Math.ceil(order / 7) * 7);\r\n }\r\n this.dayDetail.el.style.order = order;\r\n }\r\n\r\n openDetails(button) {\r\n console.log('open details');\r\n this.updateOrder(button);\r\n getOtDetail(button.date, this.attractionID).then((content) => {\r\n this.dayDetail.inner.innerHTML = content;\r\n // expand area\r\n this.dayDetail.el.setAttribute('aria-expanded', true);\r\n this.dayDetail.el.ontransitionend = (e) => {\r\n if(e.target == this.dayDetail.el) {\r\n // set focus on first link or button inside details element\r\n this.dayDetail.inner.querySelector('a, button').focus();\r\n this.dayDetail.el.ontransitionend = null;\r\n }\r\n }\r\n // animate in\r\n this.fitToContent();\r\n this.dayDetail.expanded = true;\r\n });\r\n }\r\n\r\n closeDetails(callback) {\r\n console.log('close details');\r\n this.dayDetail.expanded = false;\r\n this.dayDetail.el.setAttribute('aria-expanded', false);\r\n // animate out\r\n this.dayDetail.el.ontransitionend = (e) => {\r\n if(e.target == this.dayDetail.el && e.propertyName == 'max-height') {\r\n if (typeof callback === 'function') {\r\n callback();\r\n this.dayDetail.el.ontransitionend = null;\r\n } else {\r\n this.dayDetail.el.style.order = '100';\r\n }\r\n }\r\n };\r\n this.dayDetail.el.style.maxHeight = 0;\r\n // turn off active button\r\n this.buttons[this.buttonActiveIndex].expanded = false;\r\n this.buttons[this.buttonActiveIndex].el.setAttribute('aria-expanded', false);\r\n }\r\n\r\n fitToContent() {\r\n if(this.dayDetail.el.style.maxHeight != this.dayDetail.wrapper.offsetHeight + 'px') this.dayDetail.el.style.maxHeight = this.dayDetail.wrapper.offsetHeight + 'px';\r\n }\r\n\r\n}\r\n\r\n// export the default function to create\r\nexport function createFrom(wrappers) {\r\n wrappers.forEach((node) => {\r\n // if node is an element\r\n if (node.nodeType === 1) {\r\n new OpeningTimesCalendar(node);\r\n }\r\n });\r\n}"],"names":["monthDataURL","window","calendarMonthEndpoint","dayDetailDataURL","calendarDetailEndpoint","detailsCache","Map","OpeningTimesCalendar","constructor","el","this","attractionID","dataset","attractionId","instructionsModal","querySelector","monthContentWrapper","monthsControls","dropdownToggle","dropdownLinks","querySelectorAll","prevBtn","nextBtn","monthOptions","monthOptionIndex","forEach","l","i","push","Date","date","classList","contains","onclick","e","preventDefault","loadMonth","updateControls","monthContent","MonthContent","modalName","Cookies","bsModal","show","removeAttribute","remove","formatISO","subMonths","representation","setAttribute","add","innerHTML","format","toggle","length","newMonthOptionIndex","_this","r","XMLHttpRequest","open","toISOString","onreadystatechange","readyState","status","style","opacity","ontransitionend","target","responseText","send","dayDetail","expanded","wrapper","inner","closeButton","buttons","buttonActiveIndex","b","button","index","order","parentElement","closeDetails","openDetails","focus","watcherLastWidth","watcher","size","changed","fitToContent","breakPoint","x","updateOrder","watchViewport","innerWidth","Math","ceil","console","log","async","id","cacheID","has","detailHtml","fetch","text","set","get","getOtDetail","then","content","callback","propertyName","maxHeight","offsetHeight","createFrom","wrappers","node","nodeType"],"sourceRoot":""}