// Guardar/cargar el patrón completo (secciones + personalización de // página) en localStorage. Para integrarlo con Django, bastaría con // sustituir estos dos listeners por una llamada a la API (POST del JSON de // serializeSections()+serializePageSettings() / GET para restaurarlo con // buildSectionsFrom()+applyPageSettings()). import { serializeSections, buildSectionsFrom } from './section-types.js'; import { serializePageSettings, applyPageSettings } from './page-settings.js'; import { renderOutput } from './render.js'; const SECTIONS_STORAGE_KEY = 'sections-data'; // Guardar en localStorage no da ninguna señal por sí solo; este aviso breve // confirma al usuario que sí ha ocurrido algo. Se reutiliza el mismo // temporizador en clics seguidos para que no se oculte a mitad de un nuevo // aviso si el usuario pulsa "Guardar" varias veces seguidas. const saveToast = document.getElementById('save-toast'); let saveToastTimeout; function showSaveToast() { saveToast.classList.remove('hidden'); clearTimeout(saveToastTimeout); saveToastTimeout = setTimeout(() => saveToast.classList.add('hidden'), 2000); } document.getElementById('save-pattern').addEventListener('click', () => { const data = { sections: serializeSections(), pageSettings: serializePageSettings() }; localStorage.setItem(SECTIONS_STORAGE_KEY, JSON.stringify(data)); showSaveToast(); }); const loadBtn = document.getElementById('load-pattern'); loadBtn.addEventListener('click', () => { const raw = localStorage.getItem(SECTIONS_STORAGE_KEY); if (!raw) return; // Cargar sustituye todo lo que haya en pantalla sin posibilidad de // deshacerlo, así que se confirma antes: podría haber cambios sin guardar. if (!confirm(loadBtn.dataset.confirmMessage)) return; const data = JSON.parse(raw); buildSectionsFrom(data.sections || []); applyPageSettings(data.pageSettings); renderOutput(); });