akhaliq's picture
akhaliq HF Staff
Upload folder using huggingface_hub
61bec0b verified
Raw
History Blame Contribute Delete
4.32 kB
// Mobile menu toggle
document.addEventListener('DOMContentLoaded', function() {
const mobileMenuToggle = document.querySelector('.mobile-menu-toggle');
const navMenu = document.querySelector('.nav-menu');
if (mobileMenuToggle && navMenu) {
mobileMenuToggle.addEventListener('click', function() {
navMenu.classList.toggle('active');
mobileMenuToggle.setAttribute('aria-expanded',
navMenu.classList.contains('active'));
});
// Close menu when clicking outside
document.addEventListener('click', function(event) {
if (!event.target.closest('nav') && navMenu.classList.contains('active')) {
navMenu.classList.remove('active');
mobileMenuToggle.setAttribute('aria-expanded', 'false');
}
});
}
// Contact form handling
const contactForm = document.getElementById('contactForm');
const formMessage = document.getElementById('formMessage');
if (contactForm && formMessage) {
contactForm.addEventListener('submit', function(e) {
e.preventDefault();
// Simple validation
const name = document.getElementById('name').value;
const email = document.getElementById('email').value;
const subject = document.getElementById('subject').value;
const message = document.getElementById('message').value;
if (!name || !email || !subject || !message) {
formMessage.textContent = 'Please fill in all fields.';
formMessage.className = 'form-message error';
return;
}
// Email validation
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
if (!emailRegex.test(email)) {
formMessage.textContent = 'Please enter a valid email address.';
formMessage.className = 'form-message error';
return;
}
// Simulate form submission
formMessage.textContent = 'Thank you for your message! We\'ll get back to you soon.';
formMessage.className = 'form-message success';
// Reset form
contactForm.reset();
// Clear message after 5 seconds
setTimeout(() => {
formMessage.textContent = '';
formMessage.className = 'form-message';
}, 5000);
});
}
// Smooth scrolling for anchor links
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function(e) {
e.preventDefault();
const targetId = this.getAttribute('href');
if (targetId === '#') return;
const targetElement = document.querySelector(targetId);
if (targetElement) {
targetElement.scrollIntoView({
behavior: 'smooth',
block: 'start'
});
}
});
});
// Current page highlighting
const currentPage = location.pathname.split('/').pop();
const navLinks = document.querySelectorAll('.nav-menu a');
navLinks.forEach(link => {
const linkPage = link.getAttribute('href');
if (currentPage === linkPage || (currentPage === '' && linkPage === 'index.html')) {
link.classList.add('active');
} else {
link.classList.remove('active');
}
});
// Lazy loading for images (would be implemented with actual images)
if ('IntersectionObserver' in window) {
const lazyImages = document.querySelectorAll('img[data-src]');
const imageObserver = new IntersectionObserver((entries, observer) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const img = entry.target;
img.src = img.dataset.src;
img.classList.remove('lazy');
imageObserver.unobserve(img);
}
});
});
lazyImages.forEach(img => {
imageObserver.observe(img);
});
}
});