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));
});
});