]> git.0d.be Git - panikdb.git/commitdiff
wiki: add back some minimal content when everything is removed
authorFrédéric Péters <fpeters@0d.be>
Sun, 14 Jun 2020 14:32:26 +0000 (16:32 +0200)
committerFrédéric Péters <fpeters@0d.be>
Sun, 14 Jun 2020 14:32:26 +0000 (16:32 +0200)
panikdb/static/js/combo.wiki.js

index 2866e4debf69902471b79319da7f8020e6057080..9109b7938fea88264e4912b1bacb99c2ba897857 100644 (file)
@@ -42,13 +42,28 @@ function auto_anchors() {
           {name: 'note', tag: 'DIV', subtag: true, klass: 'note'},
     ],
     input_event: function(event) {
-      if (event.originalEvent.inputType != "insertParagraph") return true;
       var sel = document.getSelection();
       var anchorNode = sel.anchorNode;
+      if (sel.anchorNode.contentEditable === 'true') {
+        // when everything has been removed, add back <p><br></p>
+        var empty_p = document.createElement('P');
+        empty_p.appendChild(document.createElement('BR'));
+        if (anchorNode.childNodes.length) { // lone <br>
+          anchorNode.removeChild(anchorNode.childNodes[0]);
+        }
+        anchorNode.appendChild(empty_p);
+        var range = document.createRange();
+        range.setStart(empty_p, 0);
+        sel.removeAllRanges();
+        sel.addRange(range);
+        return;
+      }
+      if (event.originalEvent.inputType != "insertParagraph") return true;
       var prev_p = sel.anchorNode.previousSibling;
       if (! prev_p) return;
       if (prev_p.tagName != 'P') {
         prev_p = $(prev_p).parents('p')[0];
+        if (! prev_p || prev_p.tagName != 'P') return;
       }
       var title_match = prev_p.innerText.match(/^(h[1-6]). /);
       if (title_match) {
@@ -119,6 +134,7 @@ function auto_anchors() {
 
   function get_contenteditable_subnode(node) {
     if (node === null) return null;
+    if (node.contentEditable === 'true') return node;  // but we shouldn't arrive at root
     if (node.parentNode.contentEditable === 'true') return node;
     return get_contenteditable_subnode(node.parentNode);
   }