Forráskód Böngészése

:art: fix https://github.com/siyuan-note/siyuan/issues/7360

Vanessa 2 éve
szülő
commit
bffa2235c2

+ 22 - 1
app/src/protyle/hint/index.ts

@@ -128,7 +128,28 @@ ${unicode2Emoji(emoji.unicode, true)}</button>`;
             return;
         }
         protyle.toolbar.range = getSelection().getRangeAt(0);
-        const start = getSelectionOffset(protyle.toolbar.range.startContainer as HTMLElement, protyle.wysiwyg.element).start;
+        // 粘贴后 range.startContainer 为空 https://github.com/siyuan-note/siyuan/issues/7360
+        if (protyle.toolbar.range.startContainer.nodeType === 3 && protyle.toolbar.range.startContainer.textContent === "") {
+            const lastSibling = hasPreviousSibling(protyle.toolbar.range.startContainer) as Text;
+            if (lastSibling && lastSibling.nodeType === 3) {
+                if (lastSibling.wholeText !== lastSibling.textContent) {
+                    let previousSibling = lastSibling.previousSibling;
+                    while (previousSibling && previousSibling.nodeType === 3) {
+                        if (previousSibling.textContent === "") {
+                            previousSibling = previousSibling.previousSibling;
+                            previousSibling.nextSibling.remove();
+                        } else {
+                            lastSibling.textContent = previousSibling.textContent + lastSibling.textContent;
+                            previousSibling.remove();
+                            break;
+                        }
+                    }
+                }
+                protyle.toolbar.range.setStart(lastSibling, lastSibling.textContent.length);
+                protyle.toolbar.range.collapse(true);
+            }
+        }
+        const start = getSelectionOffset(protyle.toolbar.range.startContainer, protyle.wysiwyg.element).start;
         const currentLineValue = protyle.toolbar.range.startContainer.textContent.substring(0, start) || "";
         const key = this.getKey(currentLineValue, protyle.options.hint.extend);
         if (typeof key === "undefined" ||

+ 3 - 2
app/src/protyle/util/paste.ts

@@ -191,7 +191,7 @@ export const paste = async (protyle: IProtyle, event: (ClipboardEvent | DragEven
         });
         const tempInnerHTML = tempElement.innerHTML;
         insertHTML(tempInnerHTML, protyle, isBlock);
-        filterClipboardHint(protyle, tempInnerHTML);
+        filterClipboardHint(protyle, protyle.lute.BlockDOM2StdMd(tempInnerHTML));
         blockRender(protyle, protyle.wysiwyg.element);
         processRender(protyle.wysiwyg.element);
         highlightRender(protyle.wysiwyg.element);
@@ -220,6 +220,7 @@ export const paste = async (protyle: IProtyle, event: (ClipboardEvent | DragEven
             insertHTML(code, protyle, true);
             highlightRender(protyle.wysiwyg.element);
         }
+        hideElements(["hint"], protyle)
     } else {
         let isHTML = false;
         if (textHTML.replace("<!--StartFragment--><!--EndFragment-->", "").trim() !== "") {
@@ -278,7 +279,7 @@ export const paste = async (protyle: IProtyle, event: (ClipboardEvent | DragEven
             }
             const textPlainDom = protyle.lute.Md2BlockDOM(textPlain);
             insertHTML(textPlainDom, protyle);
-            filterClipboardHint(protyle, textPlainDom);
+            filterClipboardHint(protyle, textPlain);
         }
         blockRender(protyle, protyle.wysiwyg.element);
         processRender(protyle.wysiwyg.element);

+ 1 - 1
app/src/protyle/util/selection.ts

@@ -219,7 +219,7 @@ export const getSelectionPosition = (nodeElement: Element, range?: Range) => {
     };
 };
 
-export const getSelectionOffset = (selectElement: Element, editorElement?: Element, range?: Range) => {
+export const getSelectionOffset = (selectElement: Node, editorElement?: Element, range?: Range) => {
     const position = {
         end: 0,
         start: 0,