{"version":3,"file":"scrolling-banner.min.js","sources":["scrolling-banner.min.js"],"sourcesContent":["\"use strict\";\n\n(function () {\n var bannerSelector = '[data-scrolling-banner]';\n var videoSelector = '[data-scrolling-video]';\n var frameSelector = '[data-scrolling-frame]';\n var frameImageSelector = '[data-frame-image]';\n var maskSelector = '[data-scrolling-mask]';\n var containers = document.querySelectorAll(bannerSelector);\n var viewportHeight = function viewportHeight() {\n return window.innerHeight || document.documentElement.clientHeight;\n };\n var isDesktop = function isDesktop() {\n return window.innerWidth >= 900;\n };\n var inViewport = function inViewport(el) {\n var full = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var rect = el.getBoundingClientRect(),\n vh = viewportHeight();\n return full ? rect.top >= 0 && rect.bottom <= vh : rect.top < vh && rect.bottom >= 0;\n };\n var once = function once(el, event, fn, opts) {\n var _onceFn = function onceFn(e) {\n el.removeEventListener(event, _onceFn);\n fn.apply(this, arguments);\n };\n el.addEventListener(event, _onceFn, opts);\n return _onceFn;\n };\n if (containers) {\n containers.forEach(function (container, index) {\n var containerHeight = function containerHeight() {\n return container.offsetHeight;\n };\n var start = function start() {\n return container.offsetTop;\n };\n var end = function end() {\n return start() + containerHeight();\n };\n var arrowScroll = container.querySelector('.banner_scroll');\n var handleArrowScroll = function handleArrowScroll() {\n return arrowScroll.style.opacity = window.scrollY > 0 ? '0' : '1';\n };\n var video = container.querySelector(videoSelector);\n var stickyEl = video.parentNode;\n var videoInit = false;\n var imagesInit = false;\n var reInitLoader = function reInitLoader() {\n if (!imagesInit || !videoInit) stickyEl.classList.remove('ready');\n setTimeout(function () {\n return stickyEl.classList.add('ready');\n }, 1000);\n };\n var handleFrameScroll = function handleFrameScroll(frame, index) {\n var active = inViewport(frame);\n frame.classList.toggle('is-visible', active);\n active && !isDesktop() && showSlide(index);\n };\n var frames = container.querySelectorAll(frameSelector);\n var framesSlides = container.querySelectorAll(frameImageSelector);\n var currentSlide = 0;\n var showSlide = function showSlide(current) {\n if (currentSlide === current) return;\n framesSlides.forEach(function (image) {\n image.classList.remove('active');\n });\n framesSlides[current].classList.add('active');\n currentSlide = current;\n };\n arrowScroll && window.addEventListener('scroll', function () {\n return handleArrowScroll();\n }, {\n passive: true\n });\n frames && frames.forEach(function (frame, index) {\n handleFrameScroll(frame, index);\n window.addEventListener('scroll', function () {\n return handleFrameScroll(frame, index);\n }, {\n passive: true\n });\n });\n var initVideo = function initVideo(resize) {\n var _video$dataset;\n resize && reInitLoader();\n if (!isDesktop() || videoInit || !video) return;\n videoInit = true;\n console.log('video ', (_video$dataset = video.dataset) === null || _video$dataset === void 0 ? void 0 : _video$dataset.videoId, 'initialized');\n var source = video.querySelector('source');\n var src = source.dataset.src;\n source.src = src;\n window['fetch'] && fetch(src).then(function (response) {\n return response.blob();\n }).then(function (response) {\n var _video$dataset2;\n var blobURL = URL.createObjectURL(response);\n console.log('video ', (_video$dataset2 = video.dataset) === null || _video$dataset2 === void 0 ? void 0 : _video$dataset2.videoId, ' fetched');\n var t = video.currentTime;\n once(document.documentElement, 'touchstart', function () {\n video.play();\n video.pause();\n });\n video.setAttribute('src', blobURL);\n video.currentTime = t + 0.01;\n stickyEl.classList.add('ready');\n handleVideoScroll(container);\n });\n var videoDuration = 5;\n var cmsDuration = !isNaN(parseFloat(video.dataset.duration)) && parseFloat(video.dataset.duration);\n var currentTime = 0;\n var handleVideoScroll = function handleVideoScroll(element) {\n if (!isDesktop()) return;\n var scrollY = window.scrollY;\n if (inViewport(element, false) && scrollY > start() && scrollY + viewportHeight() < end()) {\n var scrolled = (scrollY - start()) / (containerHeight() - viewportHeight());\n currentTime = videoDuration * scrolled;\n if (currentTime >= videoDuration) return;\n video.currentTime = currentTime;\n video.style.objectPosition = '50% ' + 100 * scrolled + '%';\n } else if (scrollY + viewportHeight() > end()) {\n video.currentTime = videoDuration;\n video.style.objectPosition = '50% 100%';\n } else {\n video.currentTime = 0;\n video.style.objectPosition = '50% 0%';\n }\n };\n once(video, 'loadeddata', function () {\n var _video$dataset3;\n videoDuration = cmsDuration || video.duration;\n video.currentTime = 0.01;\n console.log('loadeddata id = ', (_video$dataset3 = video.dataset) === null || _video$dataset3 === void 0 ? void 0 : _video$dataset3.videoId);\n console.log('duration = ', video.duration, 'cms duration = ', cmsDuration);\n console.log('current duration = ', videoDuration);\n\n /* Make sure the video is 'activated' on iOS */\n once(document.documentElement, 'touchstart', function () {\n video.play();\n video.pause();\n });\n handleVideoScroll(container);\n window.addEventListener('scroll', function () {\n return handleVideoScroll(container);\n }, {\n passive: true\n });\n window.addEventListener('resize', function () {\n return handleVideoScroll(container);\n }, {\n passive: true\n });\n }, false);\n };\n\n // START of Mask\n var scrollMask = container.querySelector(maskSelector);\n if (scrollMask) {\n var maskClass = scrollMask.classList;\n var max = parseInt(scrollMask.dataset.maskOffset) || 150;\n var setMaskOffset = function setMaskOffset(offset) {\n return container.style.setProperty('--mask-offset', \"\".concat(offset, \"px\"));\n };\n var handleScrollMask = function handleScrollMask(el) {\n var scrollY = window.scrollY;\n var rectTop = el.getBoundingClientRect().top;\n var vh = viewportHeight();\n var way = vh / 2;\n var top = scrollY + vh > start() && start() > scrollY;\n var bottom = scrollY + vh > end() && end() + vh > scrollY;\n var progressTop = (way - rectTop / 2) / way * 100;\n var progressBottom = (way - (rectTop + el.offsetHeight) / 2) / way * 100;\n maskClass.toggle('active-top', top);\n maskClass.toggle('active-bottom', bottom);\n if (top && !bottom && index !== 0) {\n var _top = max - max / 100 * progressTop;\n if (_top <= max) {\n setMaskOffset(_top);\n } else {\n setMaskOffset(max);\n return;\n }\n }\n if (bottom && !top) {\n var _bottom = max / 100 * progressBottom;\n if (_bottom >= max) {\n setMaskOffset(max);\n return;\n } else {\n setMaskOffset(_bottom);\n }\n }\n !bottom && !top && setMaskOffset(0);\n };\n handleScrollMask(container);\n document.addEventListener('DOMContentLoaded', function () {\n window.addEventListener('resize', function () {\n return handleScrollMask(container);\n }, {\n passive: true\n });\n window.addEventListener('scroll', function () {\n return handleScrollMask(container);\n }, {\n passive: true\n });\n });\n }\n // END of Mask\n\n var initImages = function initImages(resize) {\n var _video$dataset4;\n resize && reInitLoader();\n if (isDesktop() || imagesInit || !framesSlides) return;\n imagesInit = true;\n console.log('images ', (_video$dataset4 = video.dataset) === null || _video$dataset4 === void 0 ? void 0 : _video$dataset4.videoId, 'initialized');\n framesSlides.forEach(function (slide) {\n var img = slide.querySelector('img');\n img.src = img.dataset.src;\n });\n once(document, 'readystatechange', function (e) {\n return e.target.readyState === 'complete' && stickyEl.classList.add('ready');\n });\n };\n document.addEventListener('DOMContentLoaded', function () {\n initImages();\n initVideo();\n window.addEventListener('resize', function () {\n initImages(true);\n initVideo(true);\n });\n });\n });\n }\n})();"],"names":["isDesktop","window","innerWidth","inViewport","el","full","arguments","length","undefined","rect","getBoundingClientRect","vh","viewportHeight","top","bottom","once","event","fn","opts","_onceFn","e","removeEventListener","apply","this","addEventListener","containers","document","querySelectorAll","innerHeight","documentElement","clientHeight","forEach","container","index","end","start","containerHeight","reInitLoader","imagesInit","videoInit","stickyEl","classList","remove","setTimeout","add","handleFrameScroll","frame","active","toggle","showSlide","current","currentSlide","framesSlides","image","initVideo","resize","src","videoDuration","cmsDuration","currentTime","handleVideoScroll","video","console","log","_video$dataset","dataset","videoId","source","querySelector","fetch","then","response","blob","blobURL","URL","createObjectURL","t","_video$dataset2","play","pause","setAttribute","isNaN","parseFloat","duration","_video$dataset3","passive","element","scrollY","scrolled","style","objectPosition","initImages","_video$dataset4","slide","img","target","readyState","maskClass","max","setMaskOffset","handleScrollMask","offsetHeight","offsetTop","arrowScroll","parentNode","frames","scrollMask","opacity","parseInt","maskOffset","offset","setProperty","concat","rectTop","way","progressTop","progressBottom","_top","_bottom"],"mappings":"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"}