{"version":3,"sources":["webpack:///./src/js/utils/slider.js","webpack:///./src/js/components/qu-today-video.js","webpack:///./src/js/components/qu-today-videos.js"],"names":["hideFocusableElementsinSlide","$slide","_$$","focusableElements","forEach","$element","setAttribute","disableFocusOnHiddenSlides","$slides","$selectedSlide","find","classList","contains","removeAttribute","getGenericSliderConfig","element","heading","textDefault","arguments","length","undefined","slides","querySelectorAll","pager","querySelector","prevButton","nextButton","a11y","enabled","nextSlideMessage","concat","textContent","replace","trim","prevSlideMessage","paginationBulletMessage","keyboard","onlyInViewport","watchSlidesProgress","watchSlidesVisibility","slideToClickedSlide","observer","allowTouchMove","pagination","dynamicBullets","clickable","el","bulletClass","bulletActiveClass","modifierClass","navigation","nextEl","prevEl","watchOverflow","QuTodayVideo","_Component","_classCallCheck","_callSuper","_inherits","key","value","this","dom","$image","_$","$mediaWrapper","containerId","nanoid","playButtonLabel","dataset","videoId","videoTitle","addVideoPlayer","_on","handleClick","bind","e","$button","target","closest","removeButton","removeImage","hideGradient","youtubeVideo","pause","getState","_this$dom","$overlay","$iframe","isIE","src","play","focus","parentNode","removeChild","_this","_this$dom2","insertAdjacentHTML","getIframe","getPlayButton","then","module","YTPlayer","default","related","modestBranding","host","load","Component","getVideoId","index","QuTodayVideos","$heading","$videos","$swiperContainer","video","handleViewport","updateFocusableElements","breakpoints","addBreakpointListenerLg","swiper","on","handleVideoPause","_this2","_this2$dom$getVideoId","pauseVideo","isLg","remove","add","destroy","initSlider","Swiper","_objectSpread","slidesPerView","spaceBetween","_defineProperty","tablet","loop","centeredSlides","init"],"mappings":"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","file":"48.5d5f32.js","sourcesContent":["/* eslint-disable indent */\r\nimport breakpoints from './breakpoints';\r\nimport focusableElements from './focusable-elements';\r\n\r\nconst hideFocusableElementsinSlide = ($slide) => {\r\n const $focusableElements = $slide._$$(focusableElements);\r\n $focusableElements.forEach(($element) =>\r\n $element.setAttribute('tabindex', '-1')\r\n );\r\n};\r\n\r\nconst showFocusableElementsinSlide = ($slide) => {\r\n const $focusableElements = $slide._$$(focusableElements);\r\n $focusableElements.forEach(($element) =>\r\n $element.removeAttribute('tabindex')\r\n );\r\n};\r\n\r\nexport const disableFocusOnHiddenSlides = ($slides) => {\r\n $slides.forEach(hideFocusableElementsinSlide);\r\n const $selectedSlide = $slides.find(($slide) =>\r\n $slide.classList.contains('swiper-slide-active')\r\n );\r\n showFocusableElementsinSlide($selectedSlide);\r\n};\r\n\r\nexport const getGenericSliderConfig = (element, heading, textDefault = '') => {\r\n const slides = element.querySelectorAll('.swiper-slide');\r\n const pager = element.querySelector('.swiper-pagination');\r\n const prevButton = element.querySelector('.swiper-button-prev');\r\n const nextButton = element.querySelector('.swiper-button-next');\r\n\r\n return {\r\n a11y: {\r\n enabled: true,\r\n nextSlideMessage: `Go to ${\r\n heading\r\n ? `${heading.textContent\r\n .replace(/(\\r\\n|\\n|\\r)/gm, '')\r\n .replace(/\\s+/g, ' ')\r\n .trim()}`\r\n : textDefault\r\n } next slide`,\r\n prevSlideMessage: `Go to ${\r\n heading\r\n ? `${heading.textContent\r\n .replace(/(\\r\\n|\\n|\\r)/gm, '')\r\n .replace(/\\s+/g, ' ')\r\n .trim()}`\r\n : textDefault\r\n } previous slide`,\r\n paginationBulletMessage: `Go to ${\r\n heading\r\n ? `${heading.textContent\r\n .replace(/(\\r\\n|\\n|\\r)/gm, '')\r\n .replace(/\\s+/g, ' ')\r\n .trim()}`\r\n : textDefault\r\n } slide {{index}} of ${slides.length}`\r\n },\r\n keyboard: {\r\n enabled: true,\r\n onlyInViewport: true\r\n },\r\n watchSlidesProgress: true,\r\n watchSlidesVisibility: true,\r\n slideToClickedSlide: false,\r\n observer: true,\r\n allowTouchMove: true,\r\n pagination: {\r\n dynamicBullets: true,\r\n clickable: true,\r\n el: pager,\r\n bulletClass: 'swiper-bullet',\r\n bulletActiveClass: 'swiper-bullet--active',\r\n modifierClass: 'swiper-bullet--'\r\n },\r\n navigation: {\r\n nextEl: nextButton,\r\n prevEl: prevButton\r\n },\r\n watchOverflow: true\r\n };\r\n};\r\n","import { Component } from '@verndale/core';\r\nimport { nanoid } from 'nanoid';\r\n\r\nimport { isIE } from '../utils/browsers';\r\n\r\nclass QuTodayVideo extends Component {\r\n setupDefaults() {\r\n this.dom = {\r\n $image: this.el._$('img.qu-today-videos__video-media'),\r\n $mediaWrapper: this.el._$('.qu-today-videos__video-wrapper')\r\n };\r\n\r\n this.containerId = `video-${nanoid()}`;\r\n this.playButtonLabel = this.el.dataset.playButtonLabel;\r\n this.videoId = this.el.dataset.videoId;\r\n this.videoTitle = this.el.dataset.videoTitle;\r\n this.addVideoPlayer();\r\n }\r\n\r\n addListeners() {\r\n const { $mediaWrapper } = this.dom;\r\n\r\n $mediaWrapper._on('click', ::this.handleClick);\r\n }\r\n\r\n handleClick(e) {\r\n const $button = e.target.closest('.qu-today-videos__video-play-button');\r\n\r\n if ($button) {\r\n this.removeButton($button);\r\n this.removeImage();\r\n this.el.dataset.hideGradient = 'true';\r\n }\r\n }\r\n\r\n pauseVideo() {\r\n const { youtubeVideo } = this.dom;\r\n\r\n youtubeVideo?.pause();\r\n }\r\n\r\n getState() {\r\n const { youtubeVideo } = this.dom;\r\n\r\n return youtubeVideo?.getState();\r\n }\r\n\r\n removeButton($button) {\r\n if ($button) {\r\n const { youtubeVideo, $mediaWrapper } = this.dom;\r\n const $overlay = $mediaWrapper._$('.qu-today-videos__video-overlay');\r\n const $iframe = $mediaWrapper._$('iframe');\r\n $iframe.removeAttribute('tabindex');\r\n\r\n if (isIE) {\r\n $iframe.src = `${$iframe.src}?autoplay=1&rel=0`;\r\n } else {\r\n youtubeVideo?.play();\r\n }\r\n\r\n $iframe.focus();\r\n $overlay.parentNode.removeChild($overlay);\r\n $button.parentNode.removeChild($button);\r\n }\r\n }\r\n\r\n removeImage() {\r\n const { $image } = this.dom;\r\n\r\n if ($image) {\r\n $image.parentNode.removeChild($image);\r\n }\r\n }\r\n\r\n addVideoPlayer() {\r\n const { $mediaWrapper, $image } = this.dom;\r\n\r\n $mediaWrapper.insertAdjacentHTML('afterbegin', this.getIframe());\r\n if ($image) {\r\n $mediaWrapper.insertAdjacentHTML('beforeend', this.getPlayButton());\r\n }\r\n\r\n if (!isIE) {\r\n import('yt-player').then((module) => {\r\n const YTPlayer = module.default;\r\n const element = this.el._$(`.${this.containerId}`);\r\n\r\n this.dom.youtubeVideo = new YTPlayer(element, {\r\n related: false,\r\n modestBranding: true,\r\n host: '//youtube.com'\r\n });\r\n this.dom.youtubeVideo.load(this.videoId);\r\n });\r\n }\r\n }\r\n\r\n getIframe() {\r\n return isIE\r\n ? `\r\n <div class=\"qu-today-videos__video-media\">\r\n <iframe\r\n loading=\"lazy\"\r\n src=\"https://www.youtube.com/embed/${this.videoId}\"\r\n frameborder=\"0\"\r\n allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\"\r\n allowfullscreen=\"allowfullscreen\"\r\n msallowfullscreen=\"msallowfullscreen\"\r\n webkitallowfullscreen=\"webkitallowfullscreen\"\r\n title=\"${this.videoTitle}\"\r\n tabindex=\"-1\"\r\n ></iframe>\r\n </div>\r\n `\r\n : `\r\n <div class=\"qu-today-videos__video-media\">\r\n <div class=\"${this.containerId}\" tabindex=\"-1\"></div>\r\n </div>\r\n `;\r\n }\r\n\r\n getPlayButton() {\r\n return `\r\n <button class=\"qu-today-videos__video-play-button\" aria-label=\"${this.playButtonLabel}\">\r\n <svg aria-hidden=\"true\">\r\n <use xlink:href=\"#play-outline\" />\r\n </svg>\r\n </button>\r\n `;\r\n }\r\n}\r\n\r\nexport default QuTodayVideo;\r\n","import { Component } from '@verndale/core';\r\nimport Swiper from 'swiper/js/swiper';\r\n\r\nimport QuTodayVideo from './qu-today-video';\r\nimport breakpoints from '../utils/breakpoints';\r\nimport {\r\n disableFocusOnHiddenSlides,\r\n getGenericSliderConfig\r\n} from '../utils/slider';\r\nimport { isIE } from '../utils/browsers';\r\n\r\nfunction getVideoId(index) {\r\n return `video-${index}`;\r\n}\r\n\r\nconst IS_PLAYING = 'playing';\r\n\r\nclass QuTodayVideos extends Component {\r\n setupDefaults() {\r\n this.dom = {\r\n $heading: this.el._$('h2'),\r\n $videos: this.el._$$('.qu-today-videos__video'),\r\n $slides: this.el._$$('.swiper-slide'),\r\n $swiperContainer: this.el._$('.swiper-container')\r\n };\r\n\r\n this.dom.$videos.forEach(\r\n (video, index) => (this.dom[getVideoId(index)] = new QuTodayVideo(video))\r\n );\r\n this.handleViewport();\r\n this.updateFocusableElements();\r\n }\r\n\r\n addListeners() {\r\n breakpoints.addBreakpointListenerLg(::this.handleViewport);\r\n if (this.swiper && !isIE) {\r\n this.swiper.on('slideChangeTransitionEnd', ::this.handleVideoPause);\r\n }\r\n }\r\n\r\n handleVideoPause() {\r\n const { $slides } = this.dom;\r\n\r\n $slides.forEach(($slide, index) => {\r\n const isActive = $slide.classList.contains('swiper-slide-active');\r\n\r\n if (!isActive && this.dom[getVideoId(index)]?.getState() === IS_PLAYING) {\r\n this.dom[getVideoId(index)].pauseVideo();\r\n }\r\n });\r\n }\r\n\r\n handleViewport() {\r\n const { $swiperContainer, $slides } = this.dom;\r\n\r\n if (breakpoints.isLg()) {\r\n $swiperContainer.classList.remove('loading');\r\n $swiperContainer.classList.add('loaded');\r\n if (this.swiper) {\r\n this.swiper.destroy();\r\n this.swiper = null;\r\n }\r\n } else {\r\n this.initSlider();\r\n }\r\n this.updateFocusableElements();\r\n }\r\n\r\n initSlider() {\r\n const { $swiperContainer, $heading } = this.dom;\r\n const element = this.el;\r\n\r\n this.swiper = new Swiper($swiperContainer, {\r\n ...getGenericSliderConfig(element, $heading),\r\n slidesPerView: 1,\r\n spaceBetween: 25,\r\n breakpoints: {\r\n [breakpoints.tablet]: {\r\n loop: true,\r\n slidesPerView: 1,\r\n centeredSlides: true\r\n }\r\n },\r\n on: {\r\n init() {\r\n $swiperContainer.classList.remove('loading');\r\n $swiperContainer.classList.add('loaded');\r\n }\r\n }\r\n });\r\n }\r\n\r\n updateFocusableElements() {\r\n const { $slides } = this.dom;\r\n if (!this.swiper) return;\r\n this.swiper.on('slideChangeTransitionStart', () =>\r\n disableFocusOnHiddenSlides($slides)\r\n );\r\n disableFocusOnHiddenSlides($slides);\r\n }\r\n}\r\n\r\nexport default QuTodayVideos;\r\n"],"sourceRoot":""}