diff --git a/src/App.svelte b/src/App.svelte index 9274a4f..2144c25 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -42,15 +42,18 @@ let [editMode, dragging, colorfulCross] = [params.has('edit'), false, false] const modes = ['line', 'mask', 'color'] let mode = 'line' - let [startTime, elapsed, complete, completedOverlay, statusMsg] = [Date.now(), 0, false, false, ''] + + // Solve Timer + let startTime = JsonTy.lsDefault(`${pid}-start-time`, Date.now()) + let [elapsed, complete, completedOverlay, statusMsg] = [0, false, false, ''] setInterval(() => !complete && (elapsed = Date.now() - startTime), 100) // Checkpoints const ckpt = () => ({rows, cols, hStates, vStates, numbers, nMask, hColors, vColors, colors}) - const loadPt = () => JsonTy.parse(localStorage.getItem(`${pid}-checkpoints`) ?? "[]") + const loadPt = () => JsonTy.lsDefault(`${pid}-checkpoints`, []) let ckpts: Checkpoint[] = loadPt() const savePt = (fn: () => any) => () => { fn() - localStorage.setItem(`${pid}-checkpoints`, JsonTy.stringify(ckpts)) + JsonTy.lsWrite(`${pid}-checkpoints`, ckpts) ckpts = loadPt() } const restorePt = (pt: Checkpoint) => { diff --git a/src/utils.ts b/src/utils.ts index 3b550c9..7c3107a 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -57,7 +57,14 @@ export const JsonTy = { a.download = name a.click() URL.revokeObjectURL(a.href) - } + }, + + lsWrite: (key: string, obj: any) => localStorage.setItem(key, JsonTy.stringify(obj)), + lsDefault: (key: string, def: any) => { + let v = localStorage.getItem(key) + if (!v) localStorage.setItem(key, JsonTy.stringify(v = def)) + return JsonTy.parse(v!) + }, } export const Fmt = {