]> git.mdlowis.com Git - proto/journal.git/commitdiff
added first pass at local storage support
authorMichael D. Lowis <mike@mdlowis.com>
Sat, 2 Dec 2017 01:37:07 +0000 (20:37 -0500)
committerMichael D. Lowis <mike@mdlowis.com>
Sat, 2 Dec 2017 01:37:07 +0000 (20:37 -0500)
editor.js
index.html

index 5625170757be06389f5f6218164eb9aeea48f419..30eaf5a9c7d16418ed4e41567fd924099fb08fd5 100644 (file)
--- a/editor.js
+++ b/editor.js
@@ -3,6 +3,10 @@
 (() => {
        const doc = document;
        doc.exec = doc.execCommand;
+       const ls = (() => {
+               try { return localStorage; }
+               catch (e) { return {}; }
+       })();
 
        const getSelNode = () => {
                const node = doc.getSelection().anchorNode;
                return [dt.getFullYear(), (month > 9 ? '' : '0') + month, (day > 9 ? '' : '0') + day].join('.');
        };
 
+       const initialize = () => {
+               if (doc.title === "") {
+                       content.innerHTML = !!ls['content'] ? ls['content'] : "<p>&nbsp;</p>";
+                       header.innerHTML = !!ls['header'] ? ls['header']
+                                        : '<h1 align="center" contenteditable="true">' + ymd_string() + '</h1><hr/>' ;
+                       doc.title = header.innerText;
+               }
+
+               content.onkeydown = (ev) => (!!keys[ev.key] ? (keys[ev.key])(ev) : true);
+               header.onkeyup = (ev) => {
+                       doc.title = header.innerText;
+                       ls['header'] = header.innerHTML;
+                       ls['content'] = content.innerHTML;
+               };
+               content.focus();
+       }
+
        const ctrlHeld = (ev) => (ev.ctrlKey || ev.metaKey);
        const inTag = (tag) => (getSelNode().nodeName === tag);
        const keyCmd = (ev, cmd, arg) => (ctrlHeld(ev) ? !doc.exec(cmd, false, arg) : true);
@@ -49,6 +70,7 @@
                                return !doc.exec((ev.shiftKey ? "out" : "in")+"dent",false);
                },
 
+               "\\": (ev) => init(),
                ";": (ev) => keyCmd(ev, "insertHTML", "<code>\r\n</code>"),
                "'": (ev) => {
                        if (ctrlHeld(ev)) {
                },
        };
 
-       header.onkeyup = (ev) => (doc.title = header.innerText);
-       content.onkeydown = (ev) => (keys[ev.key] ? (keys[ev.key])(ev) : true);
-       content.focus();
-
-       if (doc.title === "") {
-               header.innerHTML = '<h1 align="center" contenteditable="true">' + ymd_string() + '</h1><hr/>';
-               doc.title = header.innerText;
-       }
+       initialize();
 })();
index 53620c5279a35f75499ec37c9cd9122ced9cdaaf..a55c5e288bc4df18dc51e9e827018a19e9e7ffa0 100644 (file)
@@ -84,6 +84,10 @@ th:first-child, td:first-child {
 (() => {
        const doc = document;
        doc.exec = doc.execCommand;
+       const ls = (() => {
+               try { return localStorage; }
+               catch (e) { return {}; }
+       })();
 
        const getSelNode = () => {
                const node = doc.getSelection().anchorNode;
@@ -95,6 +99,23 @@ th:first-child, td:first-child {
                return [dt.getFullYear(), (month > 9 ? '' : '0') + month, (day > 9 ? '' : '0') + day].join('.');
        };
 
+       const initialize = () => {
+               if (doc.title === "") {
+                       content.innerHTML = !!ls['content'] ? ls['content'] : "<p>&nbsp;</p>";
+                       header.innerHTML = !!ls['header'] ? ls['header']
+                                        : '<h1 align="center" contenteditable="true">' + ymd_string() + '</h1><hr/>' ;
+                       doc.title = header.innerText;
+               }
+
+               content.onkeydown = (ev) => (!!keys[ev.key] ? (keys[ev.key])(ev) : true);
+               header.onkeyup = (ev) => {
+                       doc.title = header.innerText;
+                       ls['header'] = header.innerHTML;
+                       ls['content'] = content.innerHTML;
+               };
+               content.focus();
+       }
+
        const ctrlHeld = (ev) => (ev.ctrlKey || ev.metaKey);
        const inTag = (tag) => (getSelNode().nodeName === tag);
        const keyCmd = (ev, cmd, arg) => (ctrlHeld(ev) ? !doc.exec(cmd, false, arg) : true);
@@ -130,6 +151,7 @@ th:first-child, td:first-child {
                                return !doc.exec((ev.shiftKey ? "out" : "in")+"dent",false);
                },
 
+               "\\": (ev) => init(),
                ";": (ev) => keyCmd(ev, "insertHTML", "<code>\r\n</code>"),
                "'": (ev) => {
                        if (ctrlHeld(ev)) {
@@ -140,14 +162,7 @@ th:first-child, td:first-child {
                },
        };
 
-       header.onkeyup = (ev) => (doc.title = header.innerText);
-       content.onkeydown = (ev) => (keys[ev.key] ? (keys[ev.key])(ev) : true);
-       content.focus();
-
-       if (doc.title === "") {
-               header.innerHTML = '<h1 align="center" contenteditable="true">' + ymd_string() + '</h1><hr/>';
-               doc.title = header.innerText;
-       }
+       initialize();
 })();
     </script>
 </body>