diff --git a/app/src/protyle/gutter/index.ts b/app/src/protyle/gutter/index.ts
index 6c17443ef..50f309154 100644
--- a/app/src/protyle/gutter/index.ts
+++ b/app/src/protyle/gutter/index.ts
@@ -54,6 +54,7 @@ import {avContextmenu, duplicateCompletely} from "../render/av/action";
import {getPlainText} from "../util/paste";
import {Menu} from "../../plugin/Menu";
import {addEditorToDatabase} from "../render/av/addToDatabase";
+import {processClonePHElement} from "../render/util";
export class Gutter {
public element: HTMLElement;
@@ -111,7 +112,7 @@ export class Gutter {
getContenteditableElement(embedElement).innerHTML = ` ${getLangByType(type)}`;
ghostElement.append(embedElement);
} else {
- ghostElement.append(item.cloneNode(true));
+ ghostElement.append(processClonePHElement(item.cloneNode(true) as Element));
}
});
ghostElement.setAttribute("style", `position:fixed;opacity:.1;width:${selectElements[0].clientWidth}px;padding:0;`);
diff --git a/app/src/protyle/render/util.ts b/app/src/protyle/render/util.ts
index 0a72f7f42..dee0bac8c 100644
--- a/app/src/protyle/render/util.ts
+++ b/app/src/protyle/render/util.ts
@@ -13,3 +13,11 @@ export const genIconHTML = (element?: false|HTMLElement) => {
`;
};
+
+export const processClonePHElement = (item:Element) => {
+ if (item.getAttribute("data-type") === "NodeHTMLBlock") {
+ const phElement = item.querySelector("protyle-html");
+ phElement.setAttribute("data-content", Lute.UnEscapeHTMLStr(phElement.getAttribute("data-content")));
+ }
+ return item;
+}
diff --git a/app/src/protyle/wysiwyg/commonHotkey.ts b/app/src/protyle/wysiwyg/commonHotkey.ts
index 959fb5b00..7b1dee505 100644
--- a/app/src/protyle/wysiwyg/commonHotkey.ts
+++ b/app/src/protyle/wysiwyg/commonHotkey.ts
@@ -16,6 +16,7 @@ import {onGet} from "../util/onGet";
import {Constants} from "../../constants";
import * as dayjs from "dayjs";
import {net2LocalAssets} from "../breadcrumb/action";
+import {processClonePHElement} from "../render/util";
export const commonHotkey = (protyle: IProtyle, event: KeyboardEvent, nodeElement?: HTMLElement) => {
if (matchHotKey(window.siyuan.config.keymap.editor.general.copyHPath.custom, event)) {
@@ -211,15 +212,7 @@ export const duplicateBlock = (nodeElements: Element[], protyle: IProtyle) => {
tempElement.setAttribute("data-marker", (orderIndex) + ".");
tempElement.querySelector(".protyle-action--order").textContent = (orderIndex) + ".";
}
- if (tempElement.dataset.type === "NodeHTMLBlock") {
- const phElement = tempElement.querySelector("protyle-html");
- const content = phElement.getAttribute("data-content");
- phElement.setAttribute("data-content", "");
- nodeElements[0].after(tempElement);
- phElement.setAttribute("data-content", Lute.UnEscapeHTMLStr(content));
- } else {
- nodeElements[0].after(tempElement);
- }
+ nodeElements[0].after(processClonePHElement(tempElement));
doOperations.push({
action: "insert",
data: tempElement.outerHTML,
diff --git a/app/src/protyle/wysiwyg/transaction.ts b/app/src/protyle/wysiwyg/transaction.ts
index 490fb9557..474c071c2 100644
--- a/app/src/protyle/wysiwyg/transaction.ts
+++ b/app/src/protyle/wysiwyg/transaction.ts
@@ -19,6 +19,7 @@ import {reloadProtyle} from "../util/reload";
import {countBlockWord} from "../../layout/status";
import {isPaidUser, needSubscribe} from "../../util/needSubscribe";
import {resize} from "../util/resize";
+import {processClonePHElement} from "../render/util";
const removeTopElement = (updateElement: Element, protyle: IProtyle) => {
// 移动到其他文档中,该块需移除
@@ -207,7 +208,7 @@ const promiseTransaction = () => {
if (operation.previousID && updateElements.length > 0) {
Array.from(protyle.wysiwyg.element.querySelectorAll(`[data-node-id="${operation.previousID}"]`)).forEach(item => {
if (item.getAttribute("data-type") === "NodeBlockQueryEmbed" || !hasClosestByAttribute(item.parentElement, "data-type", "NodeBlockQueryEmbed")) {
- item.after(updateElements[0].cloneNode(true));
+ item.after(processClonePHElement(updateElements[0].cloneNode(true) as Element));
hasFind = true;
}
});
@@ -216,9 +217,9 @@ const promiseTransaction = () => {
if (item.getAttribute("data-type") === "NodeBlockQueryEmbed" || !hasClosestByAttribute(item.parentElement, "data-type", "NodeBlockQueryEmbed")) {
// 列表特殊处理
if (item.firstElementChild?.classList.contains("protyle-action")) {
- item.firstElementChild.after(updateElements[0].cloneNode(true));
+ item.firstElementChild.after(processClonePHElement(updateElements[0].cloneNode(true) as Element));
} else {
- item.prepend(updateElements[0].cloneNode(true));
+ item.prepend(processClonePHElement(updateElements[0].cloneNode(true) as Element));
}
hasFind = true;
}
@@ -638,22 +639,22 @@ export const onTransaction = (protyle: IProtyle, operation: IOperation, isUndo:
if (operation.previousID && updateElements.length > 0) {
Array.from(protyle.wysiwyg.element.querySelectorAll(`[data-node-id="${operation.previousID}"]`)).forEach(item => {
if (!hasClosestByAttribute(item.parentElement, "data-type", "NodeBlockQueryEmbed")) {
- item.after(updateElements[0].cloneNode(true));
+ item.after(processClonePHElement(updateElements[0].cloneNode(true) as Element));
hasFind = true;
}
});
} else if (updateElements.length > 0) {
if (!protyle.options.backlinkData && operation.parentID === protyle.block.parentID) {
- protyle.wysiwyg.element.prepend(updateElements[0].cloneNode(true));
+ protyle.wysiwyg.element.prepend(processClonePHElement(updateElements[0].cloneNode(true) as Element));
hasFind = true;
} else {
Array.from(protyle.wysiwyg.element.querySelectorAll(`[data-node-id="${operation.parentID}"]`)).forEach(item => {
if (!hasClosestByAttribute(item.parentElement, "data-type", "NodeBlockQueryEmbed")) {
// 列表特殊处理
if (item.firstElementChild?.classList.contains("protyle-action")) {
- item.firstElementChild.after(updateElements[0].cloneNode(true));
+ item.firstElementChild.after(processClonePHElement(updateElements[0].cloneNode(true) as Element));
} else {
- item.prepend(updateElements[0].cloneNode(true));
+ item.prepend(processClonePHElement(updateElements[0].cloneNode(true) as Element));
}
hasFind = true;
}