import Splide from '@splidejs/splide'; // ---------------------------------------------------------------------------- // DATA // ---------------------------------------------------------------------------- // UTILS const body = document.body; // SPLIDE SLIDER const logo = document.querySelector('.logo__icon'); let slider = document.querySelector('.splide'); const slides = document.querySelectorAll('.splide__slide'); // EXHIBITION IFRAME const sidebar = document.querySelector('.sidebar'); const sidebarNavLinks = document.querySelectorAll('.sidebar__nav-link--internal'); const exhibitionIframe = document.querySelector('.exhibition'); // ---------------------------------------------------------------------------- // LOGIC // ---------------------------------------------------------------------------- // UTILS // Enable CSS :active pseudo-class in Safari Mobile function enableActivePseudoClass() { document.addEventListener("touchstart", function() {},false); } // Convert rem to pixels by getting font-size CSS property function convertRemToPixels(rem) { let fontSize = parseFloat(window.getComputedStyle(body).getPropertyValue('font-size')); return rem * fontSize; } // SPLIDE SLIDER function setUpSlider() { if (slider) { slider = new Splide('.splide', { type: 'fade', rewind: true, rewindByDrag: true, speed: 400, fixedWidth: '100vw', fixedHeight: '100vh', arrows: false, pagination: false, easing: 'ease-in-out', drag: true, wheel: true }); } } function mountSlider() { slider.mount(); } function goToNextSlideOnClick() { if (slider) { slider.on('click', function(e) { slider.go('>'); }); } } function turnLogoIconToBlack() { if (logo) { logo.classList.remove('logo__icon--white'); logo.classList.add('logo__icon--black'); } } function turnLogoIconToWhite() { if (logo) { logo.classList.remove('logo__icon--black'); logo.classList.add('logo__icon--white'); } } function editLogoColor(slide) { if (slide) { if (slide.getAttribute('data-logo-color') === 'white') { turnLogoIconToWhite(); } else if (slide.getAttribute('data-logo-color') === 'black') { turnLogoIconToBlack(); } } } function editLogoColorOnSliderMounted() { if (slider && slides) { slider.on('mounted', function() { editLogoColor(slides[0]); }) } } function editLogoColorOnSlideActive() { if (slider) { slider.on('active', function(e) { editLogoColor(e.slide); }); } } function enableLogoIconRotation() { if (logo) { logo.classList.add('logo__icon--rotate-horizontal-bottom'); } } function disableLogoIconRotation() { if (logo) { logo.classList.remove('logo__icon--rotate-horizontal-bottom'); } } function rotateLogoOnSliderMove() { if (slider && logo) { slider.on('move', function(e) { logo.removeEventListener('animationiteration', disableLogoIconRotation); enableLogoIconRotation(); }); slider.on('moved', function(e) { logo.addEventListener('animationiteration', disableLogoIconRotation); }); } } // EXHIBITION IFRAME function slimDownSidebar() { if (sidebar && !sidebar.classList.contains('sidebar--slimmed')) { sidebar.classList.add('sidebar--slimmed'); } } function enableExhibitionIframeVisibility() { if (exhibitionIframe) { exhibitionIframe.classList.add('exhibition--visible'); } } function disableExhibitionIframeVisibility() { if (exhibitionIframe) { exhibitionIframe.classList.remove('exhibition--visible'); } } function editBackgroundColor(sidebarNavLink) { if (body && sidebar) { if (sidebarNavLink.getAttribute('data-background') === 'feldgrau') { body.classList.remove('body--white-background'); sidebar.classList.remove('sidebar--white-background'); } else if (sidebarNavLink.getAttribute('data-background') === 'white') { body.classList.add('body--white-background'); sidebar.classList.add('sidebar--white-background'); } } } function loadExhibitionIframe() { if (sidebarNavLinks.length > 0 && exhibitionIframe) { for (let i = 0; i < sidebarNavLinks.length; i++) { sidebarNavLinks[i].addEventListener('click', function(e) { logo.removeEventListener('animationiteration', disableLogoIconRotation); enableLogoIconRotation(); disableExhibitionIframeVisibility(); exhibitionIframe.addEventListener('load', function(e) { logo.addEventListener('animationiteration', disableLogoIconRotation); slimDownSidebar(); enableExhibitionIframeVisibility(); editBackgroundColor(sidebarNavLinks[i]); }); }); } } } // ---------------------------------------------------------------------------- // PROGRAM // ---------------------------------------------------------------------------- // UTILS enableActivePseudoClass(); // SPLIDE SLIDER setUpSlider(); editLogoColorOnSliderMounted(); mountSlider(); goToNextSlideOnClick(); editLogoColorOnSlideActive(); rotateLogoOnSliderMove(); // EXHIBITION IFRAME loadExhibitionIframe();