Spaces:
Running
Running
| // Main JavaScript File | |
| document.addEventListener('DOMContentLoaded', function() { | |
| // Initialize animations | |
| const animateElements = document.querySelectorAll('.fade-in, .slide-up'); | |
| animateElements.forEach((el, index) => { | |
| el.style.animationDelay = `${index * 0.1}s`; | |
| }); | |
| // Language switcher functionality | |
| const langSwitcher = document.getElementById('lang-switcher'); | |
| if (langSwitcher) { | |
| langSwitcher.addEventListener('change', function() { | |
| const selectedLang = this.value; | |
| // In a real app, this would redirect to the selected language version | |
| console.log(`Language changed to: ${selectedLang}`); | |
| }); | |
| } | |
| // Theme switcher functionality | |
| const themeSwitcher = document.getElementById('theme-switcher'); | |
| if (themeSwitcher) { | |
| themeSwitcher.addEventListener('change', function() { | |
| const selectedTheme = this.value; | |
| document.body.classList.toggle('dark', selectedTheme === 'dark'); | |
| localStorage.setItem('theme', selectedTheme); | |
| }); | |
| // Check for saved theme preference | |
| const savedTheme = localStorage.getItem('theme') || 'light'; | |
| themeSwitcher.value = savedTheme; | |
| if (savedTheme === 'dark') { | |
| document.body.classList.add('dark'); | |
| } | |
| } | |
| }); | |
| // API functions | |
| async function fetchCourses() { | |
| try { | |
| const response = await fetch('/api/courses'); | |
| const data = await response.json(); | |
| return data; | |
| } catch (error) { | |
| console.error('Error fetching courses:', error); | |
| return []; | |
| } | |
| } | |
| // Form validation | |
| function validateForm(form) { | |
| let isValid = true; | |
| const inputs = form.querySelectorAll('input[required], textarea[required]'); | |
| inputs.forEach(input => { | |
| if (!input.value.trim()) { | |
| isValid = false; | |
| input.classList.add('border-red-500'); | |
| } else { | |
| input.classList.remove('border-red-500'); | |
| } | |
| }); | |
| return isValid; | |
| } |