فهرست منبع

Merge remote-tracking branch 'origin/dev' into dev

Vanessa 1 سال پیش
والد
کامیت
9935fc6734
2فایلهای تغییر یافته به همراه13 افزوده شده و 10 حذف شده
  1. 8 9
      app/src/protyle/util/insertHTML.ts
  2. 5 1
      app/src/protyle/util/paste.ts

+ 8 - 9
app/src/protyle/util/insertHTML.ts

@@ -7,12 +7,7 @@ import {Constants} from "../../constants";
 import {highlightRender} from "../render/highlightRender";
 import {scrollCenter} from "../../util/highlightById";
 import {updateAttrViewCellAnimation, updateAVName} from "../render/av/action";
-import {
-    genCellValue,
-    genCellValueByElement,
-    getTypeByCellElement,
-    updateCellsValue
-} from "../render/av/cell";
+import {genCellValue, genCellValueByElement, getTypeByCellElement, updateCellsValue} from "../render/av/cell";
 import {input} from "../wysiwyg/input";
 import {objEquals} from "../../util/functions";
 
@@ -213,10 +208,14 @@ export const insertHTML = (html: string, protyle: IProtyle, isBlock = false,
         });
     }
     const tempElement = document.createElement("template");
-    // 需要再 spin 一次 https://github.com/siyuan-note/siyuan/issues/7118
-    tempElement.innerHTML = tableInlineHTML // 在 table 中插入需要使用转换好的行内元素 https://github.com/siyuan-note/siyuan/issues/9358
-        || protyle.lute.SpinBlockDOM(html) ||
+
+    let innerHTML = tableInlineHTML || // 在 table 中插入需要使用转换好的行内元素 https://github.com/siyuan-note/siyuan/issues/9358
+        protyle.lute.SpinBlockDOM(html) || // 需要再 spin 一次 https://github.com/siyuan-note/siyuan/issues/7118
         html;   // 空格会被 Spin 不再,需要使用原文
+    // 粘贴纯文本时会进行内部转义,这里需要进行反转义 https://github.com/siyuan-note/siyuan/issues/10620
+    innerHTML = innerHTML.replace(/;;;lt;;;/g, "<").replace(/;;;gt;;;/g, ">");
+    tempElement.innerHTML = innerHTML;
+
     const editableElement = getContenteditableElement(blockElement);
     // 使用 lute 方法会添加 p 元素,只有一个 p 元素或者只有一个字符串或者为 <u>b</u> 时的时候只拷贝内部
     if (!isBlock) {

+ 5 - 1
app/src/protyle/util/paste.ts

@@ -91,7 +91,11 @@ export const pasteAsPlainText = async (protyle: IProtyle) => {
     if (localFiles.length === 0) {
         // Inline-level elements support pasted as plain text https://github.com/siyuan-note/siyuan/issues/8010
         navigator.clipboard.readText().then(textPlain => {
-            insertHTML(protyle.lute.BlockDOM2EscapeMarkerContent(protyle.lute.Md2BlockDOM(textPlain)), protyle);
+            // 对 HTML 标签进行内部转移,避免被 Lute 解析以后变为小写 https://github.com/siyuan-note/siyuan/issues/10620
+            // 在
+            textPlain = textPlain.replace(/</g, ";;;lt;;;").replace(/>/g, ";;;gt;;;");
+            const content = protyle.lute.BlockDOM2EscapeMarkerContent(protyle.lute.Md2BlockDOM(textPlain));
+            insertHTML(content, protyle);
             filterClipboardHint(protyle, textPlain);
         });
     }