document.addEventListener('DOMContentLoaded', () => { // Obtén el elemento del tema const themeStylesheet = document.getElementById('theme-stylesheet'); const themeToggle = document.getElementById('theme-toggle'); if (!themeStylesheet || !themeToggle) { console.error("No se encontró el theme-stylesheet o theme-toggle"); return; } // Guarda las URLs del tema oscuro y claro desde los atributos data const lightThemeURL = themeStylesheet.getAttribute('data-light'); const darkThemeURL = themeStylesheet.getAttribute('data-dark'); // Función para activar el tema const activateTheme = (theme) => { themeStylesheet.href = theme === 'dark' ? darkThemeURL : lightThemeURL; document.body.setAttribute('data-theme', theme); localStorage.setItem('theme', theme); }; // Función para cambiar el estilo de Pygments const changePygmentsStyle = (style) => { const pygmentsStylesheets = {}; document.querySelectorAll('link[id^="pygments-"]').forEach(sheet => { pygmentsStylesheets[sheet.id.replace('pygments-', '')] = sheet; }); Object.entries(pygmentsStylesheets).forEach(([key, sheet]) => { sheet.disabled = (key !== style); }); localStorage.setItem('pygments-style', style); }; // Recuperar el tema guardado en localStorage o usar 'light' por defecto let savedTheme = localStorage.getItem('theme') || 'light'; activateTheme(savedTheme); // Recuperar el estilo de Pygments guardado o usar el predeterminado let savedPygmentsStyle = localStorage.getItem('pygments-style') || (savedTheme === 'dark' ? 'monokai' : 'default'); changePygmentsStyle(savedPygmentsStyle); // Actualizar el contenido del botón de tema themeToggle.innerHTML = ` ${savedTheme === 'dark' ? 'Light Mode' : 'Dark Mode'}`; // Manejar el clic en el botón de alternar tema themeToggle.addEventListener('click', (e) => { e.preventDefault(); // Evitar comportamiento por defecto del enlace // Alternar el tema savedTheme = savedTheme === 'dark' ? 'light' : 'dark'; activateTheme(savedTheme); // Actualizar el contenido del botón themeToggle.innerHTML = ` ${savedTheme === 'dark' ? 'Light Mode' : 'Dark Mode'}`; // Cambiar el estilo de Pygments según el tema const defaultStyle = savedTheme === 'dark' ? 'monokai' : 'default'; changePygmentsStyle(defaultStyle); // Guardar en localStorage localStorage.setItem('pygments-style', defaultStyle); // Enviar el tema al servidor para persistencia en sesión fetch('/update-theme', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ theme: savedTheme }) }).then(response => { if (response.ok) { console.log('Theme updated on server'); } else { console.error('Failed to update theme on server'); } }).catch(err => console.error('Fetch error:', err)); }); });