From fafaff7bceb71e41adc4f148fe9a02000e602599 Mon Sep 17 00:00:00 2001 From: David Evans Date: Sat, 28 Oct 2017 14:08:59 +0100 Subject: [PATCH] Persist code in local storage (if available) to avoid data loss when closing [#3] --- scripts/interface/Interface.js | 28 +++++++++++++++++++++++++++- scripts/main.js | 1 + 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/scripts/interface/Interface.js b/scripts/interface/Interface.js index 0455af0..85702e7 100644 --- a/scripts/interface/Interface.js +++ b/scripts/interface/Interface.js @@ -29,6 +29,7 @@ define(['codemirror'], (CodeMirror) => { generator, renderer, defaultCode = '', + localStorage = '', }) { window.devicePixelRatio = 1; this.canvas = makeNode('canvas'); @@ -38,6 +39,7 @@ define(['codemirror'], (CodeMirror) => { this.generator = generator; this.renderer = renderer; this.defaultCode = defaultCode; + this.localStorage = localStorage; this.minScale = 1.5; this.debounced = null; @@ -92,8 +94,9 @@ define(['codemirror'], (CodeMirror) => { container.appendChild(this.codePane); container.appendChild(this.viewPane); + const code = this.loadCode() || this.defaultCode; this.code = new CodeMirror(this.codePane, { - value: this.defaultCode, + value: code, mode: '', }); this.viewPaneInner.appendChild(this.renderer.svg()); @@ -118,8 +121,31 @@ define(['codemirror'], (CodeMirror) => { this.updateMinSize(this.renderer.width, this.renderer.height); } + saveCode(src) { + if(!this.localStorage) { + return; + } + try { + window.localStorage.setItem(this.localStorage, src); + } catch(e) { + // ignore + } + } + + loadCode() { + if(!this.localStorage) { + return ''; + } + try { + return window.localStorage.getItem(this.localStorage) || ''; + } catch(e) { + return ''; + } + } + update(immediate = true) { const src = this.code.getDoc().getValue(); + this.saveCode(src); let sequence = null; try { const parsed = this.parser.parse(src); diff --git a/scripts/main.js b/scripts/main.js index 0acfead..7ca0cd3 100644 --- a/scripts/main.js +++ b/scripts/main.js @@ -40,6 +40,7 @@ parser: new Parser(), generator: new Generator(), renderer: new Renderer(new Theme()), + localStorage: 'src', }); ui.build(document.body); });