47 lines
1.9 KiB
JavaScript
47 lines
1.9 KiB
JavaScript
// 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();
|
|
});
|