PageSourceSearch

https://www.bradley.edu/wp-content/themes/bradley/js/app.js?ver=1790051617

js bradley.edu collected 2026-09-24 08:36:28 UTC 3,479 bytes, 135 lines download raw bytes

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.