]> git.mdlowis.com Git - proto/journal.git/commitdiff
tweaked editor controls and added link handling
authorMichael D. Lowis <mike@mdlowis.com>
Thu, 30 Nov 2017 02:33:59 +0000 (21:33 -0500)
committerMichael D. Lowis <mike@mdlowis.com>
Thu, 30 Nov 2017 02:33:59 +0000 (21:33 -0500)
editor.js

index 3a8b7679f6ad5eb895a9fd8521f5191d9e53b1dd..c89d1add143730cb76578f87ce4b47c539f30dcb 100644 (file)
--- a/editor.js
+++ b/editor.js
@@ -6,59 +6,58 @@
         return (node.nodeType === 3 ? node.parentNode : node);
     };
 
-    const ctrlKey = (evnt, cmd, arg) => {
-        console.log(evnt.ctrlKey);
-        if (evnt.ctrlKey) {
-            document.execCommand(cmd,false,arg);
-            return false;
-        }
+    const keyCmd = (evnt, cmd, arg) => {
+        if (evnt.ctrlKey || evnt.metaKey)
+            return !document.execCommand(cmd, false, arg);
         return true;
-    };
-
-    const ctrlShiftKey = (evnt, cmd, arg) => {
-        console.log(evnt.ctrlKey);
-        if (evnt.ctrlKey && evnt.shiftKey) {
-            document.execCommand(cmd,false,arg);
-            return false;
-        }
-        return true;
-    };
+    }
 
     const keys = {
-        "b": (evnt) => (ctrlKey(evnt,"bold")),
-        "i": (evnt) => (ctrlKey(evnt,"italic")),
-        "u": (evnt) => (ctrlKey(evnt,"underline")),
-        ";": (evnt) => (ctrlKey(evnt,"insertHTML", "<code>\r\n</code>")),
-        "'": (evnt) => (ctrlKey(evnt,"formatBlock", "<blockquote>")),
-        "0": (evnt) => (ctrlKey(evnt,"formatBlock", "<p>")),
-        "1": (evnt) => (ctrlKey(evnt,"formatBlock", "<h1>")),
-        "2": (evnt) => (ctrlKey(evnt,"formatBlock", "<h2>")),
-        "3": (evnt) => (ctrlKey(evnt,"formatBlock", "<h3>")),
-        "4": (evnt) => (ctrlKey(evnt,"formatBlock", "<h4>")),
-        "5": (evnt) => (ctrlKey(evnt,"formatBlock", "<h5>")),
-        "6": (evnt) => (ctrlKey(evnt,"formatBlock", "<h6>")),
-        "#": (evnt) => (ctrlShiftKey(evnt,"insertOrderedList")),
-        "*": (evnt) => (ctrlShiftKey(evnt,"insertUnorderedList")),
+        "b": (evnt) => keyCmd(evnt, "bold"),
+        "i": (evnt) => keyCmd(evnt, "italic"),
+        "u": (evnt) => keyCmd(evnt, "underline"),
+        "0": (evnt) => keyCmd(evnt, "formatBlock", "<p>"),
+        "1": (evnt) => keyCmd(evnt, "formatBlock", "<h1>"),
+        "2": (evnt) => keyCmd(evnt, "formatBlock", "<h2>"),
+        "3": (evnt) => keyCmd(evnt, "formatBlock", "<h3>"),
+        "4": (evnt) => keyCmd(evnt, "formatBlock", "<h4>"),
+        "5": (evnt) => keyCmd(evnt, "formatBlock", "<h5>"),
+        "6": (evnt) => keyCmd(evnt, "formatBlock", "<h6>"),
+        "7": (evnt) => keyCmd(evnt, "insertOrderedList"),
+        "8": (evnt) => keyCmd(evnt, "insertUnorderedList"),
+        "9": (evnt) => {
+            if (evnt.ctrlKey || evnt.metaKey) {
+                const node = getSelNode();
+                const defurl = (node.nodeName === "A" ? node.href : "http://");
+                const url = prompt("Enter URL:", defurl);
+                return !document.execCommand(
+                    (url === "" ? "unlink" : "createLink"), false, url);
+            }
+            return true;
+        },
 
         "Enter": () => {
             if (getSelNode().nodeName === "CODE")
-                document.execCommand("insertHTML",false,"\n");
+                return !document.execCommand("insertHTML",false,"\n");
             else
-                document.execCommand("insertParagraph",false);
-            return false;
+                return !document.execCommand("insertParagraph",false);
         },
 
         "Tab": (evnt) => {
             if (getSelNode().nodeName === "CODE")
-                document.execCommand("insertHTML",false,"\t");
+                return !document.execCommand("insertHTML",false,"\t");
             else
-                document.execCommand((evnt.shiftKey ? "out" : "in")+"dent",false);
-            return false;
+                return !document.execCommand((evnt.shiftKey ? "out" : "in")+"dent",false);
+        },
+
+        ";": (evnt) => keyCmd(evnt, "insertHTML", "<code>\r\n</code>"),
+        "'": (evnt) => {
+            const block = (getSelNode().nodeName === "BLOCKQUOTE" ? "<p>" : "<blockquote>");
+            return !document.execCommand("formatBlock", false, block);
         },
     };
 
     content.onkeydown = (evnt) => {
-        console.log(evnt);
         const keyfn = keys[evnt.key];
         return (keyfn ? keyfn(evnt) : true);
     }