{"version":3,"sources":["js/priority.js"],"names":["initImageSizer","images","document","querySelectorAll","length","forEach","img","windowWidth","window","innerWidth","imgWidth","clientWidth","imgViewportWidth","Math","floor","sizes","initVideoSlider","coverViewport","element","scaleToParent","viewportWidth","viewportHeight","parentElement","clientHeight","innerHeight","elementWidth","getAttribute","elementHeight","viewportRatio","videoRatio","newWidth","newHeight","style","height","width","left","top","video","querySelector","addEventListener","initOffCanvas","handleOffCanvasMenu","container","toggleBtns","states","btn","toggleMenu","handleToggle","isActiveMenu","handleOffCanvasBooking","frames","toggleBooking","isActiveBooking","handleIframes","handleOffCanvasBtn","args","offCanvasBookingBtn","bookingContainer","menuContainer","frame","dataset","src","menuToggleBtns","bookingToggleBtns","this","argsHandleCanBtn","state","transform","animateInViewIntersectionObs","callbackObserver","entries","entry","target","isIntersecting","classList","add","animateInView","observer","unobserve","setObserver","elements","el","observe","options","root","rootMargin","threshold","IntersectionObserver"],"mappings":"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","file":"priority.js","sourcesContent":["document.addEventListener('DOMContentLoaded', function () {\r\n initImageSizer()\r\n initVideoSlider()\r\n initOffCanvas()\r\n animateInViewIntersectionObs()\r\n });\r\n\r\n function initImageSizer() {\r\n var images = document.querySelectorAll('.auto-sizing')\r\n if (images.length === 0) return;\r\n images.forEach(function(img) {\r\n var windowWidth = window.innerWidth;\r\n var imgWidth = img.clientWidth;\r\n var imgViewportWidth = Math.floor((imgWidth / windowWidth) * 100) + \"vw\";\r\n img.sizes = imgViewportWidth;\r\n })\r\n }\r\n\r\n function initVideoSlider() {\r\n var video = document.querySelector('.large-slider__inner iframe')\r\n if (!video) return;\r\n coverViewport(video, true);\r\n window.addEventListener('resize', function () {\r\n coverViewport(video, true)\r\n });\r\n \r\n function coverViewport(element, scaleToParent) {\r\n if (typeof scaleToParent === 'undefined') { scaleToParent = false; }\r\n\r\n var viewportWidth, viewportHeight;\r\n if (scaleToParent) {\r\n viewportWidth = element.parentElement.clientWidth;\r\n viewportHeight = element.parentElement.clientHeight;\r\n } else {\r\n viewportWidth = window.innerWidth;\r\n viewportHeight = window.innerHeight;\r\n }\r\n\r\n var elementWidth = element.getAttribute('width');\r\n var elementHeight = element.getAttribute('height');\r\n\r\n // Aspect ratio = height / width\r\n var viewportRatio = viewportHeight / viewportWidth;\r\n var videoRatio = elementHeight / elementWidth;\r\n\r\n // console.log('viewportHeigt: ', viewportHeight )\r\n // console.log('viewportWidth: ', viewportWidth )\r\n // console.log('Viewport: ', viewportRatio, ' Video: ', videoRatio);\r\n\r\n\r\n var newWidth = (elementWidth / elementHeight) * viewportHeight\r\n var newHeight = (elementHeight / elementWidth) * viewportWidth;\r\n var newTop = 0;\r\n\r\n if (viewportRatio > videoRatio) {\r\n // set video height to the viewport, and extend the video beyond the viewport width, i.e. portrait viewport\r\n // console.log('crop left and right');\r\n element.style.height = viewportHeight +'px';\r\n element.style.width = newWidth +'px';\r\n element.style.left = '-' + (newWidth - viewportWidth) / 2 +'px';\r\n element.style.top = '0';\r\n } else if (viewportRatio < videoRatio) {\r\n // set video width to the viewport, and extend the video beyond the viewport height, i.e. landscape viewport\r\n // console.log('crop top and bottom');\r\n element.style.width = viewportWidth +'px';\r\n element.style.height = newHeight +'px';\r\n element.style.left = '0';\r\n element.style.top = '-' + (newHeight - viewportHeight) / 2 +'px';\r\n } else {\r\n // set the video width AND height to the viewport size, i.e. viewport is the same ratio as the video\r\n // console.log('no crop');\r\n element.style.height = viewportHeight +'px';\r\n element.style.width = viewportWidth +'px';\r\n element.style.left = '0';\r\n element.style.top = '0';\r\n }\r\n }\r\n }\r\n\r\n function initOffCanvas () {\r\n var menuContainer = document.querySelector('.off-canvas');\r\n var menuToggleBtns = document.querySelectorAll(\r\n '.off-canvas__open, .off-canvas__close'\r\n );\r\n \r\n var bookingContainer = document.querySelector('#booking');\r\n var bookingToggleBtns = document.querySelectorAll(\r\n '.booking-btn, .booking__close, a[href=\"#bookTable\"]'\r\n );\r\n var offCanvasBookingBtn = document.querySelector('.offCanvas-book-now')\r\n\r\n\r\n\r\n var states = {\r\n isActiveMenu: false,\r\n isActiveBooking: false,\r\n toggleMenu: function () {this.isActiveMenu = !this.isActiveMenu},\r\n toggleBooking: function () {this.isActiveBooking = !this.isActiveBooking}\r\n }\r\n\r\n handleOffCanvasMenu(menuContainer, menuToggleBtns, states)\r\n handleOffCanvasBooking(bookingContainer, bookingToggleBtns, states)\r\n // handleOffCanvasBooking(bookingContainer, bookingOpenLinks, states)\r\n\r\n var argsHandleCanBtn = {\r\n offCanvasBookingBtn: offCanvasBookingBtn, \r\n states: states,\r\n bookingContainer: bookingContainer,\r\n menuContainer: menuContainer\r\n }\r\n handleOffCanvasBtn(argsHandleCanBtn)\r\n\r\n\r\n\r\n function handleOffCanvasMenu (container, toggleBtns, states) {\r\n toggleBtns.forEach( function (btn) {\r\n btn.addEventListener('click', function () {\r\n states.toggleMenu()\r\n handleToggle(states.isActiveMenu, container)\r\n });\r\n });\r\n }\r\n\r\n function handleOffCanvasBooking (container, toggleBtns, states) {\r\n var frames = document.querySelectorAll('#booking iframe')\r\n toggleBtns.forEach( function (btn) {\r\n btn.addEventListener('click', function () {\r\n states.toggleBooking()\r\n handleToggle(states.isActiveBooking, container)\r\n if (frames.length > 0 ) {\r\n handleIframes(frames)\r\n }\r\n });\r\n });\r\n }\r\n\r\n function handleOffCanvasBtn(args) {\r\n args.offCanvasBookingBtn.addEventListener('click', function() {\r\n args.states.toggleMenu()\r\n args.states.toggleBooking()\r\n handleToggle(args.states.isActiveBooking, args.bookingContainer)\r\n handleToggle(args.states.isActiveMenu, args.menuContainer)\r\n })\r\n }\r\n\r\n var handleToggle = function (state, container) {\r\n if (!state) {\r\n container.style.transform = 'translateX(-100%)';\r\n } else {\r\n container.style.transform = 'translateX(0)';\r\n }\r\n };\r\n\r\n function handleIframes(frames) {\r\n frames.forEach(function(frame) { \r\n if (typeof frame.dataset.src !== 'undefined' && frame.src === '' ) {\r\n frame.src = frame.dataset.src\r\n }\r\n } )\r\n }\r\n}\r\n\r\n\r\nfunction animateInViewIntersectionObs() {\r\n\tvar elements = document.querySelectorAll('[data-animate-in-view]')\t\r\n\tvar options = {\r\n\t\troot: null,\r\n\t\trootMargin: \"0px\",\r\n\t\tthreshold: 0,\r\n\t\t};\r\n\t\r\n\tfunction callbackObserver(entries) {\r\n\t\tentries.forEach(function(entry) {\r\n\t\t\tvar element = entry.target;\r\n\t\t\t\r\n\t\t\tif (!entry.isIntersecting) return;\r\n\t\t\t\r\n\t\t\r\n\t\t\telement.classList.add(\"in-view\")\r\n\t\t\telement.classList.add(element.dataset.animateInView)\r\n\t\t\tobserver.unobserve(element)\r\n\t\t});\r\n\t}\r\n\t\r\n\tfunction setObserver(elements) {\r\n\t\telements.forEach(function (el) {\r\n\t\t\tobserver.observe(el) \r\n\t\t})\r\n\t}\r\n\r\n\tvar observer = new IntersectionObserver(callbackObserver, options);\r\n\tsetObserver(elements)\r\n}"],"sourceRoot":"/source/"}