Liyuan Li 5 years ago
parent
commit
a3a6a44845

+ 1 - 1
demo/index.js

@@ -4,7 +4,7 @@ import '../src/assets/scss/index.scss'
 window.vditor = new Vditor('vditor', {
   debugger: true,
   typewriterMode: true,
-  // mode: 'ir',
+  mode: 'ir',
   placeholder: 'placeholder',
   preview: {
     markdown: {

+ 9 - 2
src/assets/scss/_ir.scss

@@ -198,7 +198,14 @@
     content: '^F';
   }
 
-  .vditor-toc:before {
-    content: "ToC";
+  .vditor-toc {
+    &:before {
+      content: "ToC";
+    }
+
+    span[data-type="toc-h"] {
+      color: $blurColor;
+      text-decoration: underline;
+    }
   }
 }

+ 4 - 3
src/ts/ir/index.ts

@@ -5,6 +5,7 @@ import {focusEvent, hotkeyEvent, scrollCenter, selectEvent} from "../util/editor
 import {hasClosestByClassName, hasClosestByMatchTag} from "../util/hasClosest";
 import {processCodeRender, processPasteCode} from "../util/processCode";
 import {
+    getEditorRange,
     getSelectPosition,
     insertHTML,
     setSelectionByPosition,
@@ -206,11 +207,11 @@ class IR {
                 return;
             }
 
-            expandMarker(getSelection().getRangeAt(0), vditor);
+            const range = getEditorRange(this.element);
+            expandMarker(range, vditor);
             highlightToolbar(vditor);
 
             // 点击后光标落于预览区
-            const range = getSelection().getRangeAt(0);
             let previewElement = hasClosestByClassName(event.target, "vditor-ir__preview");
             if (!previewElement) {
                 previewElement = hasClosestByClassName(
@@ -242,7 +243,7 @@ class IR {
                 vditor.ir.element.innerHTML = "";
                 return;
             }
-            const range = getSelection().getRangeAt(0);
+            const range = getEditorRange(this.element);
             if (event.key === "Backspace") {
                 // firefox headings https://github.com/Vanessa219/vditor/issues/211
                 if (isFirefox() && range.startContainer.textContent === "\n" && range.startOffset === 1) {

+ 2 - 1
src/ts/ir/processKeydown.ts

@@ -12,6 +12,7 @@ import {
     insertAfterBlock, insertBeforeBlock, isFirstCell, isLastCell,
 } from "../util/fixBrowserBehavior";
 import {hasClosestByAttribute, hasClosestByClassName, hasClosestByMatchTag} from "../util/hasClosest";
+import {getEditorRange} from "../util/selection";
 
 export const processKeydown = (vditor: IVditor, event: KeyboardEvent) => {
     vditor.ir.composingLock = event.isComposing;
@@ -30,7 +31,7 @@ export const processKeydown = (vditor: IVditor, event: KeyboardEvent) => {
         return false;
     }
 
-    const range = getSelection().getRangeAt(0);
+    const range = getEditorRange(vditor.ir.element);
     const startContainer = range.startContainer;
 
     // 斜体、粗体、内联代码块中换行

+ 3 - 0
src/ts/undo/IRUndo.ts

@@ -65,6 +65,9 @@ class IRUndo {
     }
 
     public recordFirstWbr(vditor: IVditor, event: KeyboardEvent) {
+        if (getSelection().rangeCount === 0) {
+            return;
+        }
         if (this.undoStack.length !== 1 || this.undoStack[0].length === 0) {
             return;
         }

+ 3 - 0
src/ts/undo/WysiwygUndo.ts

@@ -68,6 +68,9 @@ class WysiwygUndo {
     }
 
     public recordFirstWbr(vditor: IVditor, event: KeyboardEvent) {
+        if (getSelection().rangeCount === 0) {
+            return;
+        }
         if (this.undoStack.length !== 1 || this.undoStack[0].length === 0) {
             return;
         }

+ 1 - 1
src/ts/wysiwyg/index.ts

@@ -321,7 +321,7 @@ class WYSIWYG {
             // 点击后光标落于预览区,需展开代码块
             let previewElement = hasClosestByClassName(event.target, "vditor-wysiwyg__preview");
             if (!previewElement) {
-                previewElement = hasClosestByClassName(getSelection().getRangeAt(0).startContainer, "vditor-wysiwyg__preview");
+                previewElement = hasClosestByClassName(getEditorRange(this.element).startContainer, "vditor-wysiwyg__preview");
             }
             if (previewElement) {
                 showCode(previewElement);

+ 2 - 2
src/ts/wysiwyg/processKeydown.ts

@@ -18,7 +18,7 @@ import {
     hasTopClosestByTag,
 } from "../util/hasClosest";
 import {matchHotKey} from "../util/hotKey";
-import {getSelectPosition, setSelectionFocus} from "../util/selection";
+import {getEditorRange, getSelectPosition, setSelectionFocus} from "../util/selection";
 import {afterRenderEvent} from "./afterRenderEvent";
 import {nextIsCode} from "./inlineTag";
 import {removeHeading, setHeading} from "./setHeading";
@@ -42,7 +42,7 @@ export const processKeydown = (vditor: IVditor, event: KeyboardEvent) => {
         return false;
     }
 
-    const range = getSelection().getRangeAt(0);
+    const range = getEditorRange(vditor.wysiwyg.element);
     const startContainer = range.startContainer;
 
     const blockElement = hasClosestBlock(startContainer);