1AOS.init(); 2 3// Select elements 4const header = document.querySelector('.header'); 5const headerWrapper = document.querySelector('.header__wrapper'); 6const headerNav = document.querySelector('.nav'); 7const drawer = document.querySelector('.drawer'); 8const drawerBtn = document.querySelector('.drawer__btn'); 9const closeDrawerBtn = document.querySelector('.drawer__btn--close'); 10const arrowDown = document.querySelector('.arrow__down'); 11const main = document.querySelector('main'); 12 13// Program Nav Elements 14const navToggle = document.querySelector('.program__nav-toggle'); 15const navContainer = document.querySelector('.program__nav-container'); 16 17// arrow down scrolls to main but needs to be offset by header height 18if (arrowDown) { 19 arrowDown.addEventListener('click', () => { 20 window.scrollTo({ 21 top: main.offsetTop - header.offsetHeight, 22 behavior: 'smooth', 23 }); 24 }); 25} 26 27 28 29// Open drawer 30const openDrawer = () => { 31 drawer.classList.add('open'); 32 header.classList.add('open-drawer'); 33 drawerBtn.classList.add('hide'); 34 closeDrawerBtn.classList.remove('hide'); 35}; 36 37// Close drawer 38const closeDrawer = () => { 39 drawer.classList.remove('open'); 40 header.classList.remove('open-drawer'); 41 drawerBtn.classList.remove('hide'); 42 closeDrawerBtn.classList.add('hide'); 43}; 44 45// Lock header on scroll 46const lockHeader = () => { 47 if (!drawer.classList.contains('open')) { 48 window.scrollY > 0 ? header.classList.add('locked') : header.classList.remove('locked'); 49 } 50}; 51 52const initializeProgramNav = () => { 53 if (navToggle) { 54 navToggle.addEventListener('click', () => { 55 navToggle.classList.toggle('active'); 56 navContainer.classList.toggle('active'); 57 }); 58 } 59 60 const itemsWithChildren = document.querySelectorAll('.program__nav .has-children > a'); 61 62 itemsWithChildren.forEach((link) => { 63 link.addEventListener('click', (e) => { 64 if (window.innerWidth < 1100) { 65 const parentLi = link.parentElement; 66 67 if (!parentLi.classList.contains('open')) { 68 e.preventDefault(); 69 parentLi.classList.add('open'); 70 return; 71 } 72 73 const rect = link.getBoundingClientRect(); 74 const clickX = e.clientX - rect.left; 75 const arrowArea = rect.width - 40; // Adjust based on your arrow width 76 77 if (clickX > arrowArea) { 78 e.preventDefault(); 79 parentLi.classList.toggle('open'); 80 } 81 } 82 }); 83 }); 84}; 85 86// Event listeners 87drawerBtn.addEventListener('click', openDrawer); 88closeDrawerBtn.addEventListener('click', closeDrawer); 89 90 91window.addEventListener('scroll', lockHeader); 92 93const menuItems = document.querySelectorAll('.drawer .menu-item-has-children'); 94 95menuItems.forEach((item) => { 96 item.addEventListener('click', () => { 97 item.classList.toggle('open'); 98 }); 99}); 100 101// Swiper functionality 102// const swiperEl = document.querySelector('swiper-container'); 103 104let currentWidth = window.innerWidth; 105 106 107let timeout; 108window.addEventListener('resize', () => { 109 clearTimeout(timeout); 110 timeout = setTimeout(() => { 111 const newWidth = window.innerWidth; 112 113 if (newWidth !== currentWidth) { 114 currentWidth = newWidth; 115 116 117 118 if (newWidth > 1099) { 119 navToggle?.classList.remove('active'); 120 navContainer?.classList.remove('active'); 121 document.querySelectorAll('.program__nav .open').forEach((item) => { 122 item.classList.remove('open'); 123 }); 124 } 125 } 126 }, 250); 127}); 128 129let scrollRef = 0; 130 131window.addEventListener('scroll', function () { 132 scrollRef <= 10 ? scrollRef++ : AOS.refresh(); 133}); 134 135document.addEventListener('DOMContentLoaded', initializeProgramNav);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.