{"version":3,"sources":["webpack:///./src/js/utils.js","webpack:///./src/js/modules/homepageAnimation.js"],"names":["updateHomepageDynamicStyles","homePageLeftBorder","document","querySelector","homeMastheadMediaContainer","headerExpandedShortcuts","window","innerWidth","breakpoints","tabletLandscape","svgHeight","offsetHeight","borderTopPosition","offsetTop","style","top","height","mastheadMediaTop","getBoundingClientRect","offset","desktop","calculateLeftBorderHeight","leftBorderElement","update","updateTop","laptop","defaultResolver","element","leftBorderTop","footerResolver","Math","floor","visualStoryRowResolver","leftBorderHeight","exploreAllFourResolver","leaf","fullScreenModules","selector","selectorType","elementClass","resolver","elementDataModule","getFullScreenModulesSelector","map","module","join","fullScreenElement","stopper","find","classList","contains","dataset","ScrollManager","this","scrollTop","scrollLeft","scrolledPosition","scrollY","body","position","pageXOffset","documentElement","scrollTo","HomepageAnimation","timeline","anime","easing","duration","wasWelcomeAnimationExecuted","localStorage","getItem","RUN_ANIMATION_KEY","dom","html","scene1","el","scene1Inner","scene2Background","scene2Leaf","scene2Wordmark","homeMastheadHeading","homeMastheadSubHeading","homeLeaf","homeLeftBorder","headerHomeLink","headerBookNow","headerControls","headerControlsButtons","querySelectorAll","shortcutsHeaderAnimatedElements","homeAllFourLeaf","setItem","runMobileAnimation","runDesktopAnimation","hideHomepageAnimationElement","setupValuesWithoutAnimation","add","value","overflowY","innerHeight","mastHeadMediaAnimationBg","createElement","append","setHtmlOverflow","homeLeafClientRect","scene2LeafClientRect","ceil","left","renderMastheadMediaAnimatedOverlay","headerControlsAnimatedBg","getHomeMastheadMediaTop","targets","opacity","scale","width","translateX","complete","translateY","remove","delay","stagger","scaleY","direction","Component"],"mappings":"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","file":"43.596409f58d6a506e2e67.js","sourcesContent":["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","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"],"sourceRoot":""}