Persist code in local storage (if available) to avoid data loss when closing [#3]

This commit is contained in:
David Evans 2017-10-28 14:08:59 +01:00
parent f7c4b1e4b2
commit fafaff7bce
2 changed files with 28 additions and 1 deletions

View File

@ -29,6 +29,7 @@ define(['codemirror'], (CodeMirror) => {
generator, generator,
renderer, renderer,
defaultCode = '', defaultCode = '',
localStorage = '',
}) { }) {
window.devicePixelRatio = 1; window.devicePixelRatio = 1;
this.canvas = makeNode('canvas'); this.canvas = makeNode('canvas');
@ -38,6 +39,7 @@ define(['codemirror'], (CodeMirror) => {
this.generator = generator; this.generator = generator;
this.renderer = renderer; this.renderer = renderer;
this.defaultCode = defaultCode; this.defaultCode = defaultCode;
this.localStorage = localStorage;
this.minScale = 1.5; this.minScale = 1.5;
this.debounced = null; this.debounced = null;
@ -92,8 +94,9 @@ define(['codemirror'], (CodeMirror) => {
container.appendChild(this.codePane); container.appendChild(this.codePane);
container.appendChild(this.viewPane); container.appendChild(this.viewPane);
const code = this.loadCode() || this.defaultCode;
this.code = new CodeMirror(this.codePane, { this.code = new CodeMirror(this.codePane, {
value: this.defaultCode, value: code,
mode: '', mode: '',
}); });
this.viewPaneInner.appendChild(this.renderer.svg()); this.viewPaneInner.appendChild(this.renderer.svg());
@ -118,8 +121,31 @@ define(['codemirror'], (CodeMirror) => {
this.updateMinSize(this.renderer.width, this.renderer.height); 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) { update(immediate = true) {
const src = this.code.getDoc().getValue(); const src = this.code.getDoc().getValue();
this.saveCode(src);
let sequence = null; let sequence = null;
try { try {
const parsed = this.parser.parse(src); const parsed = this.parser.parse(src);

View File

@ -40,6 +40,7 @@
parser: new Parser(), parser: new Parser(),
generator: new Generator(), generator: new Generator(),
renderer: new Renderer(new Theme()), renderer: new Renderer(new Theme()),
localStorage: 'src',
}); });
ui.build(document.body); ui.build(document.body);
}); });