diff --git a/js/app.js b/js/app.js index 203dfe7..fca7861 100644 --- a/js/app.js +++ b/js/app.js @@ -2,9 +2,21 @@ import { initRenderer } from './renderer.js'; import { initEvents } from './events.js'; import { initPuzzleUI } from './puzzleUI.js'; +import { loadFromStorage, startAutoSave } from './saveLoad.js'; +import { updateComponentButtons } from './components.js'; +import { evaluateAll } from './gates.js'; document.addEventListener('DOMContentLoaded', () => { initRenderer(); initEvents(); initPuzzleUI(); + + // Restore previous session from localStorage + if (loadFromStorage()) { + updateComponentButtons(); + evaluateAll(); + } + + // Auto-save every 3 seconds + on page unload + startAutoSave(3000); }); diff --git a/js/saveLoad.js b/js/saveLoad.js index 20240f8..26fd6bf 100644 --- a/js/saveLoad.js +++ b/js/saveLoad.js @@ -2,6 +2,8 @@ import { state } from './state.js'; import { progress } from './levels.js'; +const STORAGE_KEY = 'logiclab_state'; + /** * Save complete application state to JSON */ @@ -147,3 +149,46 @@ export async function pasteFromClipboard() { return { success: false, error: e.message }; } } + +/** + * Save state to localStorage + */ +export function saveToStorage() { + try { + const data = saveState(); + localStorage.setItem(STORAGE_KEY, JSON.stringify(data)); + } catch (e) { + console.warn('[storage] failed to save:', e.message); + } +} + +/** + * Load state from localStorage (returns true if state was restored) + */ +export function loadFromStorage() { + try { + const json = localStorage.getItem(STORAGE_KEY); + if (!json) return false; + const data = JSON.parse(json); + const result = loadState(data); + if (result.success) { + console.log('[storage] restored state from localStorage'); + } + return result.success; + } catch (e) { + console.warn('[storage] failed to load:', e.message); + return false; + } +} + +/** + * Start auto-saving to localStorage on an interval + */ +let autoSaveInterval = null; +export function startAutoSave(intervalMs = 3000) { + if (autoSaveInterval) clearInterval(autoSaveInterval); + autoSaveInterval = setInterval(saveToStorage, intervalMs); + // Also save on page unload + window.addEventListener('beforeunload', saveToStorage); + console.log(`[storage] auto-save enabled (every ${intervalMs}ms)`); +}