// assets/js/main.js document.addEventListener('DOMContentLoaded', function() { // --- Dark Mode System --- const themeToggleBtn = document.getElementById('themeToggle'); const htmlElement = document.documentElement; // Check local storage or system preference if (localStorage.getItem('theme') === 'dark' || (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) { htmlElement.classList.add('dark'); } else { htmlElement.classList.remove('dark'); } if (themeToggleBtn) { themeToggleBtn.addEventListener('click', function() { htmlElement.classList.toggle('dark'); if (htmlElement.classList.contains('dark')) { localStorage.setItem('theme', 'dark'); } else { localStorage.setItem('theme', 'light'); } }); } // --- Loading Button Global Handling --- // If a button has 'data-loading-text', it will show a spinner when clicked within a form const forms = document.querySelectorAll('form'); forms.forEach(form => { form.addEventListener('submit', function(e) { const submitBtn = form.querySelector('button[type="submit"]'); if (submitBtn) { // Don't disable immediately if validation is required and fails, but assuming HTML5 validation passes here submitBtn.classList.add('btn-loading'); // Optional: revert loading state if the form submission is prevented via AJAX in specific page scripts } }); }); // --- PWA Service Worker Registration --- if ('serviceWorker' in navigator) { window.addEventListener('load', () => { navigator.serviceWorker.register('sw.js') .then(registration => { console.log('ServiceWorker registration successful with scope: ', registration.scope); }) .catch(err => { console.log('ServiceWorker registration failed: ', err); }); }); } });