{"version":3,"sources":["webpack:///./src/js/modules/homepageAnimation.js","webpack:///./src/js/utils.js"],"names":["HomepageAnimation","this","timeline","anime","easing","duration","wasWelcomeAnimationExecuted","window","localStorage","getItem","RUN_ANIMATION_KEY","dom","html","document","querySelector","body","scene1","el","scene1Inner","scene2Background","scene2Leaf","scene2Wordmark","homeMastheadHeading","homeMastheadSubHeading","homeLeaf","homeMastheadMediaContainer","homeLeftBorder","headerHomeLink","headerBookNow","headerControls","headerControlsButtons","querySelectorAll","headerExpandedShortcuts","shortcutsHeaderAnimatedElements","homeAllFourLeaf","setItem","innerWidth","breakpoints","tabletLandscape","runMobileAnimation","runDesktopAnimation","hideHomepageAnimationElement","setupValuesWithoutAnimation","classList","add","value","style","overflowY","getBoundingClientRect","top","innerHeight","height","Math","floor","mastHeadMediaAnimationBg","createElement","append","setHtmlOverflow","homeLeafClientRect","scene2LeafClientRect","ceil","left","renderMastheadMediaAnimatedOverlay","headerControlsAnimatedBg","getHomeMastheadMediaTop","leftBorderHeight","calculateLeftBorderHeight","targets","opacity","scale","width","translateX","complete","translateY","remove","delay","stagger","svgHeight","offsetHeight","borderTopPosition","offsetTop","scaleY","direction","updateHomepageDynamicStyles","Component","homePageLeftBorder","mastheadMediaTop","offset","desktop","leftBorderElement","update","updateTop","laptop","defaultResolver","element","leftBorderTop","footerResolver","visualStoryRowResolver","exploreAllFourResolver","leaf","fullScreenModules","selector","selectorType","elementClass","resolver","elementDataModule","getFullScreenModulesSelector","map","module","join","fullScreenElement","stopper","find","contains","dataset","ScrollManager","scrollTop","scrollLeft","scrolledPosition","scrollY","position","pageXOffset","documentElement","scrollTo"],"mappings":"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","file":"45.6338c7f34e9cde96103e.js","sourcesContent":["import { Component } from '@verndale/core';\nimport anime from 'animejs/lib/anime.es.js';\nimport { calculateLeftBorderHeight, updateHomepageDynamicStyles } from '../utils';\nimport { breakpoints, RUN_ANIMATION_KEY } from '../helpers/constants';\n\n\nclass HomepageAnimation extends Component {\n setupDefaults() {\n // Create new anime.js timeline\n this.timeline = anime.timeline({\n easing: 'easeInOutQuad',\n duration: 7000\n });\n this.wasWelcomeAnimationExecuted = window.localStorage.getItem(RUN_ANIMATION_KEY);\n this.dom = {\n html: document.querySelector('html'),\n body: document.querySelector('body'),\n scene1: this.el.querySelector('.homepage-animation__scene-1'),\n scene1Inner:this.el.querySelector('.homepage-animation__scene-1__inner'),\n scene2Background: this.el.querySelector('.homepage-animation__scene-2__background'),\n scene2Leaf: this.el.querySelector('.homepage-animation__scene-2 .homepage-animation__scene-2__leaf-container'),\n scene2Wordmark: this.el.querySelector('.homepage-animation__scene-2 .homepage-animation__scene-2__wordmark-container'),\n //Masthead elements\n homeMastheadHeading: document.querySelector('.homepage-masthead__heading'),\n homeMastheadSubHeading: document.querySelector('.homepage-masthead__sub-heading'),\n homeLeaf: document.querySelector('.homepage-masthead__header-logo'),\n homeMastheadMediaContainer: document.querySelector('.homepage-masthead__media-container'),\n homeLeftBorder: document.querySelector('.homepage-masthead__left-border'),\n // Header elements\n headerHomeLink: document.querySelector('.header__home-link'),\n headerBookNow: document.querySelector('.header__book-now__container'),\n headerControls: document.querySelector('.header__controls'),\n headerControlsButtons: [...document.querySelectorAll('.header__controls > button')],\n headerExpandedShortcuts: document.querySelector('.header__expanded-shortcuts'),\n shortcutsHeaderAnimatedElements: [...document.querySelectorAll(`\n .header__expanded-shortcuts__spacer,\n .header__expanded-shortcuts__nav li,\n .header__expanded-shortcuts .weather-button\n `)],\n // All Four elements\n homeAllFourLeaf: document.querySelector('.explore-all-four__leaf')\n };\n\n if (!this.wasWelcomeAnimationExecuted) {\n // Update localStorage so animation runs only on first load\n window.localStorage.setItem(RUN_ANIMATION_KEY, 'false');\n // Run specific viewport animation\n return window.innerWidth < breakpoints.tabletLandscape\n ? this.runMobileAnimation()\n : this.runDesktopAnimation();\n }\n this.hideHomepageAnimationElement();\n this.setupValuesWithoutAnimation();\n }\n\n hideHomepageAnimationElement() {\n this.el.classList.add('hidden');\n }\n\n setHtmlOverflow(value) {\n this.dom.html.style.overflowY = value;\n }\n\n getHomeMastheadMediaTop() {\n return this.dom.homeMastheadMediaContainer.getBoundingClientRect().top;\n }\n\n getAllFourLeafVerticalCenter() {\n if (!this.dom.homeAllFourLeaf) return window.innerHeight;\n const { top, height } = this.dom.homeAllFourLeaf.getBoundingClientRect();\n return top + Math.floor(height/2)\n }\n\n renderMastheadMediaAnimatedOverlay() {\n const mastHeadMediaAnimationBg = document.createElement('div');\n mastHeadMediaAnimationBg.classList.add('homepage-masthead__animation-background')\n this.dom.homeMastheadMediaContainer.append(mastHeadMediaAnimationBg);\n return mastHeadMediaAnimationBg;\n }\n\n runDesktopAnimation() {\n //Disable scroll\n this.setHtmlOverflow('hidden');\n // Get values for resizing and movement\n const homeLeafClientRect = this.dom.homeLeaf.getBoundingClientRect();\n const scene2LeafClientRect = this.dom.scene2Leaf.getBoundingClientRect();\n this.dom.scene2Leaf.classList.add('active');\n this.dom.scene2Wordmark.classList.add('active');\n this.dom.scene2Leaf.style.top = `${Math.ceil(scene2LeafClientRect.top)}px`;\n this.dom.scene2Leaf.style.left = `${Math.ceil(scene2LeafClientRect.left)}px`;\n // Render withe overlay masthead media container background\n const mastHeadMediaAnimationBg = this.renderMastheadMediaAnimatedOverlay();\n // Render animated header background\n const headerControlsAnimatedBg = document.createElement('div');\n headerControlsAnimatedBg.classList.add('header__controls__background');\n headerControlsAnimatedBg.style.height = `${this.getHomeMastheadMediaTop()}px`;\n this.dom.headerControls.append(headerControlsAnimatedBg);\n this.dom.headerControls.classList.add('with-animation');\n // Get border left height\n const leftBorderHeight = calculateLeftBorderHeight(this.dom.homeLeftBorder, false);\n\n /**\n * White background, logo scales down and fades\n */\n this.timeline.add({\n targets: this.dom.scene1Inner,\n opacity: [0, 1],\n scale: [1.75, 1],\n duration: 884\n }, 84);\n /**\n * Scene 1 gets removed and scene 2 gets revealed\n */\n this.timeline.add({\n targets: this.dom.scene1,\n width: ['100%', '0%'],\n duration: 718\n }, 1034);\n /**\n * Leaf change width/height and position\n */\n this.timeline.add({\n targets: this.dom.scene2Leaf,\n left: Math.floor(homeLeafClientRect.left),\n top: Math.ceil(homeLeafClientRect.top),\n width: [Math.ceil(scene2LeafClientRect.width), Math.ceil(homeLeafClientRect.width)],\n height: [Math.ceil(scene2LeafClientRect.height), Math.ceil(homeLeafClientRect.height)],\n duration: 1450\n }, 1834);\n /**\n * Black background slides right and home page gets revealed\n */\n this.timeline.add({\n targets: this.dom.scene2Background,\n translateX: ['0%', '100%'],\n duration: 688,\n complete: () => {\n this.setHtmlOverflow('auto');\n this.hideHomepageAnimationElement();\n }\n }, 3316);\n //Remove the white leaf from the screen\n this.timeline.add({\n targets: this.dom.scene2Leaf,\n opacity: [1, 0],\n duration: 100,\n easing: 'easeOutExpo'\n }, '-=260');\n /**\n * Slide down header home link\n */\n this.timeline.add({\n targets: this.dom.headerHomeLink,\n opacity: ['0', '100%'],\n translateY: ['-10%', '0%'],\n duration: 250\n }, 3616);\n /**\n * Masthead media (image/video) gets revealed\n */\n this.timeline.add({\n targets: mastHeadMediaAnimationBg,\n translateX: ['0', '-100%'],\n duration: 468,\n complete: () => mastHeadMediaAnimationBg.remove()\n }, 3600);\n /**\n * Left border slides down\n */\n this.timeline.add({\n targets: this.dom.homeLeftBorder,\n opacity: {\n value: [0, 1],\n duration: 200\n },\n height: [0, leftBorderHeight],\n duration: 716\n }, 3816);\n /**\n * Slide up header animated background\n */\n this.timeline.add({\n targets: headerControlsAnimatedBg,\n translateY: ['100%', '0%'],\n opacity: ['0', '100%'],\n duration: 368\n }, 4134);\n /**\n * Fade in header elements\n */\n this.timeline.add({\n targets: this.dom.headerControlsButtons,\n translateX: ['20%', '0%'],\n opacity: ['10%', '100%'],\n duration: 300,\n delay: anime.stagger(50)\n }, 4400);\n // Fade in shortcuts header elements\n this.timeline.add({\n targets: this.dom.shortcutsHeaderAnimatedElements,\n translateX: ['20%', '0%'],\n opacity: ['0', '100%'],\n duration: 720,\n delay: anime.stagger(100)\n }, 4466);\n }\n\n runMobileAnimation() {\n //Disable scroll\n this.setHtmlOverflow('hidden');\n // Render withe overlay masthead media container background\n const mastHeadMediaAnimationBg = this.renderMastheadMediaAnimatedOverlay();\n const svgHeight = this.dom.homeLeaf.offsetHeight;\n const borderTopPosition = this.dom.homeMastheadMediaContainer.offsetTop - svgHeight/2;\n // Update left border top value\n this.dom.homeLeftBorder.style.top = `${borderTopPosition}px`;\n\n /**\n * Animation layer scales down and reveal header and sticky bar\n */\n this.timeline.add({\n targets: this.dom.scene1,\n scaleY: ['100%', `${(window.innerHeight - 120) * 100 / window.innerHeight}%`],\n duration: 366,\n complete: () => {\n this.setHtmlOverflow('auto');\n this.hideHomepageAnimationElement();\n }\n }, 0);\n /**\n * Fade in header control buttons\n */\n this.timeline.add({\n targets: this.dom.headerControlsButtons,\n scale: [1.2, 1],\n opacity: ['0%', '100%'],\n translateY: ['16%', '0%'],\n delay: anime.stagger(166, { direction: 'reverse' }),\n duration: 500\n }, 132);\n /**\n * Fade in and scale down header logo\n */\n this.timeline.add({\n targets: this.dom.headerHomeLink,\n scale: [1.2, 1],\n opacity: ['0%', '100%'],\n duration: 266\n }, 166);\n /**\n * Fade in book now button\n */\n this.timeline.add({\n targets: this.dom.headerBookNow,\n translateY: ['25%', '0%'],\n opacity: ['0', '100%'],\n duration: 366\n }, 366);\n /**\n * Fade in masthead heading\n */\n this.timeline.add({\n targets: this.dom.homeMastheadHeading,\n translateY: ['10%', '0%'],\n opacity: ['30%', '100%'],\n duration: 360\n }, 366);\n /**\n * Slide up masthead media container animated background\n */\n this.timeline.add({\n targets: mastHeadMediaAnimationBg,\n height:['100%', '0%'],\n duration: 300\n }, 400);\n /**\n * Scale down and fadein masthead leaf\n */\n this.timeline.add({\n targets: this.dom.homeLeaf.querySelector('svg'),\n opacity: {\n value: ['0%', '100%'],\n duration: 330\n },\n scale: [1.2, 1],\n duration: 400\n }, 400);\n /**\n * Fade in masthead sub-heading\n */\n this.timeline.add({\n targets: this.dom.homeMastheadSubHeading,\n translateY: ['10%', '0%'],\n opacity: ['0', '100%'],\n duration: 300\n }, 433);\n /**\n * Fill hone left border\n */\n this.timeline.add({\n targets: this.dom.homeLeftBorder,\n scaleY: ['0%', '100%'],\n duration: 400\n }, 566);\n }\n\n setupValuesWithoutAnimation() {\n updateHomepageDynamicStyles();\n }\n}\n\nexport default HomepageAnimation;\n","import { breakpoints } from './helpers/constants';\n\nexport const updateHomepageDynamicStyles = () => {\n const homePageLeftBorder = document.querySelector(\n '.homepage-masthead__left-border'\n );\n const homeMastheadMediaContainer = document.querySelector(\n '.homepage-masthead__media-container'\n );\n const headerExpandedShortcuts = document.querySelector(\n '.header__expanded-shortcuts'\n );\n if (window.innerWidth < breakpoints.tabletLandscape) {\n if (homeMastheadMediaContainer && homePageLeftBorder) {\n const svgHeight = document.querySelector(\n '.homepage-masthead__header-logo'\n ).offsetHeight;\n const borderTopPosition =\n homeMastheadMediaContainer.offsetTop - svgHeight / 2;\n // Update left border top value\n homePageLeftBorder.style.top = `${borderTopPosition}px`;\n homePageLeftBorder.style.height = 'auto';\n }\n } else {\n // Update header expanded shortcuts nav height\n if (homeMastheadMediaContainer && headerExpandedShortcuts) {\n const {\n top: mastheadMediaTop\n } = homeMastheadMediaContainer.getBoundingClientRect();\n const offset = window.innerWidth > breakpoints.desktop ? 140 : 100;\n headerExpandedShortcuts.style.height = `${mastheadMediaTop - offset}px`;\n }\n }\n};\n\nexport const calculateLeftBorderHeight = (leftBorderElement, update = true) => {\n const updateTop = () => {\n const headerOffset = document.querySelector('header').offsetTop;\n const offset = window.innerWidth < breakpoints.laptop ? 32 : 44;\n const top = headerOffset + offset;\n leftBorderElement.style.top = `${top}px`;\n return top;\n };\n\n const defaultResolver = (element, update) => {\n const top = element.offsetTop;\n const leftBorderTop = updateTop();\n if (update) leftBorderElement.style.height = `${top - leftBorderTop}px`;\n return top;\n };\n\n const footerResolver = (element, update) => {\n const top = element.offsetTop;\n const height = element.offsetHeight;\n const leftBorderTop = updateTop();\n if (window.innerWidth < breakpoints.desktop) {\n if (update) leftBorderElement.style.height = `${top - leftBorderTop}px`;\n } else {\n if (update)\n leftBorderElement.style.height = `${\n top + Math.floor(height / 2) - 50 - leftBorderTop\n }px`;\n }\n };\n\n const visualStoryRowResolver = (element, update) => {\n const top = element.offsetTop;\n const offset = element.querySelector('.visual-story-row__image').offsetTop;\n const leftBorderTop = updateTop();\n const leftBorderHeight = top + offset - leftBorderTop;\n if (update) leftBorderElement.style.height = `${leftBorderHeight}px`;\n return leftBorderHeight;\n };\n\n const exploreAllFourResolver = (element, update) => {\n const leaf = element.querySelector('.explore-all-four__leaf');\n const top = element.offsetTop;\n const height = leaf.offsetHeight;\n const leftBorderTop = updateTop();\n const leftBorderHeight = top + Math.floor(height / 2) - leftBorderTop;\n if (update) leftBorderElement.style.height = `${leftBorderHeight}px`;\n return leftBorderHeight;\n };\n\n const fullScreenModules = [\n {\n selector: '.timeline',\n selectorType: 'class',\n elementClass: 'timeline',\n resolver: defaultResolver\n },\n {\n selector: '.values',\n selectorType: 'class',\n elementClass: 'values',\n resolver: defaultResolver\n },\n {\n selector: '.quick-statistics',\n selectorType: 'class',\n elementClass: 'quick-statistics',\n resolver: defaultResolver\n },\n {\n selector: '.flexible-carousel--dark',\n selectorType: 'class',\n elementClass: 'flexible-carousel--dark',\n resolver: defaultResolver\n },\n {\n selector: '.featured-content-row',\n selectorType: 'class',\n elementClass: 'featured-content-row',\n resolver: defaultResolver\n },\n {\n selector: '.featured-vertical-cards:not(.featured-vertical-cards--light)',\n selectorType: 'class',\n elementClass: 'featured-vertical-cards',\n resolver: defaultResolver\n },\n {\n selector: '.who-we-are:not(.who-we-are--light)',\n selectorType: 'class',\n elementClass: 'who-we-are',\n resolver: defaultResolver\n },\n {\n selector: '.footer',\n selectorType: 'class',\n elementClass: 'footer',\n resolver: footerResolver\n },\n {\n selector: '[data-module=\"filterContentModule\"]',\n selectorType: 'dataModule',\n elementDataModule: 'filterContentModule',\n resolver: defaultResolver\n },\n {\n selector: '.visual-story-row',\n selectorType: 'class',\n elementClass: 'visual-story-row',\n resolver: visualStoryRowResolver\n },\n {\n selector: '.explore-all-four',\n selectorType: 'class',\n elementClass: 'explore-all-four',\n resolver: exploreAllFourResolver\n },\n {\n selector: '.up-cards.up-cards--dark',\n selectorType: 'class',\n elementClass: 'up-cards',\n resolver: defaultResolver\n },\n {\n selector: '.event-finder',\n selectorType: 'class',\n elementClass: 'event-finder',\n resolver: defaultResolver\n }\n ];\n\n const getFullScreenModulesSelector = () =>\n fullScreenModules.map(module => module.selector).join(', ');\n // Get first full screen element\n const fullScreenElement = document.querySelector(\n getFullScreenModulesSelector()\n );\n\n // Return if there are no full screen elements\n if (!fullScreenElement) return;\n // Get the full screen module that would be the stopper of the left border\n const stopper = fullScreenModules.find(module => {\n if (module.selectorType === 'class') {\n return fullScreenElement.classList.contains(module.elementClass);\n } else if (module.selectorType === 'dataModule') {\n return fullScreenElement.dataset.module === module.elementDataModule;\n }\n });\n // Check resolver type\n if (window.innerWidth >= breakpoints.tabletLandscape) {\n return stopper.resolver(fullScreenElement, update);\n }\n};\n\nexport class ScrollManager {\n constructor() {\n this.scrollTop = 0;\n this.scrollLeft = 0;\n }\n\n disableScroll() {\n const scrolledPosition = window.scrollY;\n document.body.style.position = 'fixed';\n document.body.style.top = `-${scrolledPosition}px`;\n this.scrollTop = scrolledPosition;\n this.scrollLeft = window.pageXOffset || document.documentElement.scrollLeft;\n }\n\n enableScroll() {\n document.body.style.position = '';\n window.scrollTo(this.scrollLeft, this.scrollTop);\n }\n}\n"],"sourceRoot":""}