49 lines
No EOL
1.8 KiB
JavaScript
49 lines
No EOL
1.8 KiB
JavaScript
// Initialize Lucide icons
|
|
lucide.createIcons();
|
|
|
|
// Update copyright year
|
|
document.getElementById('current-year').textContent = new Date().getFullYear();
|
|
|
|
// Theme toggle
|
|
const themeToggle = document.querySelector('.theme-toggle');
|
|
const moonIcon = document.getElementById('moon-icon');
|
|
const sunIcon = document.getElementById('sun-icon');
|
|
|
|
// Check for saved preference
|
|
if (localStorage.getItem('darkMode') === 'true') {
|
|
document.body.classList.add('dark-mode');
|
|
moonIcon.style.display = 'none';
|
|
sunIcon.style.display = 'block';
|
|
}
|
|
|
|
themeToggle.addEventListener('click', () => {
|
|
document.body.classList.toggle('dark-mode');
|
|
const isDark = document.body.classList.contains('dark-mode');
|
|
moonIcon.style.display = isDark ? 'none' : 'block';
|
|
sunIcon.style.display = isDark ? 'block' : 'none';
|
|
localStorage.setItem('darkMode', isDark ? 'true' : 'false');
|
|
});
|
|
|
|
// Mobile menu
|
|
const menuToggle = document.querySelector('.menu-toggle');
|
|
const navLinks = document.querySelector('.nav-links');
|
|
const menuIcon = document.getElementById('menu-icon');
|
|
const closeIcon = document.getElementById('close-icon');
|
|
|
|
menuToggle.addEventListener('click', () => {
|
|
const isExpanded = menuToggle.getAttribute('aria-expanded') === 'true';
|
|
menuToggle.setAttribute('aria-expanded', !isExpanded);
|
|
navLinks.classList.toggle('menu-open');
|
|
menuIcon.style.display = isExpanded ? 'block' : 'none';
|
|
closeIcon.style.display = isExpanded ? 'none' : 'block';
|
|
});
|
|
|
|
// Close menu when clicking outside
|
|
document.addEventListener('click', (event) => {
|
|
if (!event.target.closest('.menu-toggle') && !event.target.closest('.nav-links') && navLinks.classList.contains('menu-open')) {
|
|
navLinks.classList.remove('menu-open');
|
|
menuToggle.setAttribute('aria-expanded', 'false');
|
|
menuIcon.style.display = 'block';
|
|
closeIcon.style.display = 'none';
|
|
}
|
|
}); |