-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscripting.js
More file actions
112 lines (100 loc) · 3.51 KB
/
Copy pathscripting.js
File metadata and controls
112 lines (100 loc) · 3.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
document.addEventListener('DOMContentLoaded', () => {
// Navigation toggle (mobile)
const navToggle = document.getElementById('navToggle');
const navLinks = document.getElementById('navLinks');
if (navToggle && navLinks) {
navToggle.addEventListener('click', () => {
navToggle.classList.toggle('active');
navLinks.classList.toggle('open');
// Drop the focus ring after a tap so the X has no lingering outline
// (keyboard users still get focus-visible when tabbing to it).
navToggle.blur();
});
}
// Sidebar toggle (mobile on grade pages)
const sidebarToggle = document.getElementById('sidebarToggle');
const sidebar = document.getElementById('sidebar');
// Backdrop that closes the sidebar when tapping outside it (mobile/tablet)
let sidebarOverlay = null;
if (sidebar) {
sidebarOverlay = document.createElement('div');
sidebarOverlay.className = 'sidebar-overlay';
document.body.appendChild(sidebarOverlay);
}
const closeSidebar = () => {
if (sidebar) sidebar.classList.remove('open');
if (sidebarOverlay) sidebarOverlay.classList.remove('open');
};
const openSidebar = () => {
if (sidebar) sidebar.classList.add('open');
if (sidebarOverlay) sidebarOverlay.classList.add('open');
};
if (sidebarToggle && sidebar) {
sidebarToggle.addEventListener('click', () => {
sidebar.classList.contains('open') ? closeSidebar() : openSidebar();
});
}
if (sidebarOverlay) {
sidebarOverlay.addEventListener('click', closeSidebar);
}
// Subject cards and PDF viewer
const subjectCards = document.querySelectorAll('.subject-card[data-pdf]');
const pdfViewer = document.getElementById('pdfViewer');
const emptyState = document.getElementById('emptyState');
if (subjectCards.length && pdfViewer) {
subjectCards.forEach(card => {
card.addEventListener('click', () => {
// Remove active class from all cards
subjectCards.forEach(c => c.classList.remove('active'));
// Add active class to clicked card
card.classList.add('active');
// Load PDF
pdfViewer.src = card.dataset.pdf;
pdfViewer.style.display = 'block';
if (emptyState) emptyState.style.display = 'none';
// Close sidebar on mobile
if (sidebar && window.innerWidth <= 1024) {
closeSidebar();
}
});
});
}
// Navbar scroll effect
const nav = document.getElementById('nav');
if (nav) {
window.addEventListener('scroll', () => {
if (window.scrollY > 50) {
nav.classList.add('scrolled');
} else {
nav.classList.remove('scrolled');
}
});
}
// Smooth scroll for anchor links
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function(e) {
e.preventDefault();
const target = document.querySelector(this.getAttribute('href'));
if (target) {
target.scrollIntoView({ behavior: 'smooth', block: 'start' });
}
});
});
// Animation on scroll for grade cards
const observerOptions = {
threshold: 0.1,
rootMargin: '0px 0px -50px 0px'
};
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.style.animationPlayState = 'running';
observer.unobserve(entry.target);
}
});
}, observerOptions);
document.querySelectorAll('.animate-fade-up').forEach(el => {
el.style.animationPlayState = 'paused';
observer.observe(el);
});
});