diff --git a/webapp/static/clients/codemirror/script.js b/webapp/static/clients/codemirror/script.js index 25ce407..d0bb407 100644 --- a/webapp/static/clients/codemirror/script.js +++ b/webapp/static/clients/codemirror/script.js @@ -22,6 +22,7 @@ window.addEventListener('load', () => { } $("iServer").value = svr; view.setState(lsp.EditorState.create({ doc: doc, extensions: lsp.baseExts })); + formFromStore('fSettings'); connect(); }); @@ -51,35 +52,35 @@ $("symbols2").onclick = e => { .then(r => { console.log("symbols", r) $("symPanel").open = true; - const icons=[ -'symbol-file' , -'symbol-class' , -'symbol-namespace' , -'symbol-structure' , -'symbol-class' , -'symbol-method' , -'symbol-property' , -'symbol-field' , -'symbol-method-arrow' , -'symbol-enum' , -'symbol-interface' , -'symbol-method' , -'symbol-variable' , -'symbol-constant' , -'symbol-string' , -'symbol-numeric' , -'symbol-boolean' , -'symbol-array' , -'symbol-structure' , -'symbol-key' , -'dash' , -'symbol-enum-member' , -'symbol-misc' , -'symbol-event' , -'symbol-operator' , -'symbol-parameter' + const icons = [ + 'symbol-file', + 'symbol-class', + 'symbol-namespace', + 'symbol-structure', + 'symbol-class', + 'symbol-method', + 'symbol-property', + 'symbol-field', + 'symbol-method-arrow', + 'symbol-enum', + 'symbol-interface', + 'symbol-method', + 'symbol-variable', + 'symbol-constant', + 'symbol-string', + 'symbol-numeric', + 'symbol-boolean', + 'symbol-array', + 'symbol-structure', + 'symbol-key', + 'dash', + 'symbol-enum-member', + 'symbol-misc', + 'symbol-event', + 'symbol-operator', + 'symbol-parameter' ]; - $("symList").setData(r,icons); + $("symList").setData(r, icons); }); }; @@ -128,13 +129,17 @@ $("load").onchange = e => { function updateSettings(event) { event.preventDefault(); - console.log("COPTS",lsp.curOpts); - const opts={lineWrap: $("lineWrap").checked, - minimap:$("minimap").checked + const form = $('fSettings'); + console.log("ser..", formSerialize(form)) + console.log("COPTS", lsp.curOpts); + const opts = { + lineWrap: $("lineWrap").checked, + minimap: $("minimap").checked } console.log(opts) lsp.updateCompartment(opts); $('popSettings').hidePopover(); + formToStore("fSettings"); }; $("fSettings").addEventListener("submit", updateSettings); @@ -195,3 +200,29 @@ function log(rpc) { $("traffic").insertBefore(li, $("traffic").firstChild) }; +function formFromStore(name) { + let v = localStorage.getItem(name) + if (!!v) formDeserialize($(name), v); +}; + +function formToStore(name) { + localStorage.setItem(name, formSerialize($(name))); +}; + +function formSerialize(form) { + const data = new FormData(form); + //https://stackoverflow.com/a/44033425/1869660 + return new URLSearchParams(data).toString(); +} + +function formDeserialize(form, data) { + const entries = (new URLSearchParams(data)).entries(); + for (const [key, val] of entries) { + //http://javascript-coder.com/javascript-form/javascript-form-value.phtml + const input = form.elements[key]; + switch (input.type) { + case 'checkbox': input.checked = !!val; break; + default: input.value = val; break; + } + } +} \ No newline at end of file