Vanessa 2025-12-10 10:06:06 +08:00
parent e63bfee6ac
commit 83fdc0f31b

View file

@ -19,7 +19,7 @@ import {Constants} from "../../constants";
import {scrollCenter} from "../../util/highlightById"; import {scrollCenter} from "../../util/highlightById";
import {isMobile} from "../../util/functions"; import {isMobile} from "../../util/functions";
import {mathRender} from "../render/mathRender"; import {mathRender} from "../render/mathRender";
import {hasClosestByClassName} from "../util/hasClosest"; import {hasClosestBlock, hasClosestByClassName} from "../util/hasClosest";
import {getInstanceById} from "../../layout/util"; import {getInstanceById} from "../../layout/util";
import {Tab} from "../../layout/Tab"; import {Tab} from "../../layout/Tab";
import {Backlink} from "../../layout/dock/Backlink"; import {Backlink} from "../../layout/dock/Backlink";
@ -131,7 +131,7 @@ export const removeBlock = async (protyle: IProtyle, blockElement: Element, rang
data, data,
id, id,
previousID, previousID,
parentID: topElement.parentElement.getAttribute("data-node-id") || protyle.block.parentID parentID: (hasClosestBlock(topElement.parentElement) as HTMLElement)?.getAttribute("data-node-id") || protyle.block.parentID
}); });
if (topElement.getAttribute("data-subtype") === "o" && topElement.classList.contains("li")) { if (topElement.getAttribute("data-subtype") === "o" && topElement.classList.contains("li")) {
listElement = topElement.parentElement; listElement = topElement.parentElement;
@ -240,7 +240,8 @@ export const removeBlock = async (protyle: IProtyle, blockElement: Element, rang
} }
const blockParentElement = isCallout ? blockElement.parentElement.parentElement : blockElement.parentElement; const blockParentElement = isCallout ? blockElement.parentElement.parentElement : blockElement.parentElement;
blockParentElement.insertAdjacentElement("beforebegin", blockElement); blockParentElement.insertAdjacentElement("beforebegin", blockElement);
if (isCallout ? blockParentElement.querySelector(".callout-content").childElementCount === 0:blockParentElement.childElementCount === 1 ) { if (isCallout ? blockParentElement.querySelector(".callout-content").childElementCount === 0 :
blockParentElement.childElementCount === 1) {
transaction(protyle, [{ transaction(protyle, [{
action: "move", action: "move",
id: blockElement.getAttribute("data-node-id"), id: blockElement.getAttribute("data-node-id"),
@ -352,7 +353,7 @@ export const removeBlock = async (protyle: IProtyle, blockElement: Element, rang
return; return;
} }
const parentElement = blockElement.parentElement; const parentElement = hasClosestBlock(blockElement.parentElement);
const editableElement = getContenteditableElement(blockElement); const editableElement = getContenteditableElement(blockElement);
const previousLastElement = getLastBlock(previousElement) as HTMLElement; const previousLastElement = getLastBlock(previousElement) as HTMLElement;
if (range.toString() === "" && isMobile() && previousLastElement && previousLastElement.classList.contains("hr") && getSelectionOffset(editableElement).start === 0) { if (range.toString() === "" && isMobile() && previousLastElement && previousLastElement.classList.contains("hr") && getSelectionOffset(editableElement).start === 0) {
@ -394,7 +395,7 @@ export const removeBlock = async (protyle: IProtyle, blockElement: Element, rang
}]; }];
blockElement.remove(); blockElement.remove();
// 取消超级块 // 取消超级块
if (parentElement.getAttribute("data-type") === "NodeSuperBlock" && parentElement.childElementCount === 2) { if (parentElement && parentElement.getAttribute("data-type") === "NodeSuperBlock" && parentElement.childElementCount === 2) {
const sbData = await cancelSB(protyle, parentElement); const sbData = await cancelSB(protyle, parentElement);
transaction(protyle, doOperations.concat(sbData.doOperations), sbData.undoOperations.concat(undoOperations)); transaction(protyle, doOperations.concat(sbData.doOperations), sbData.undoOperations.concat(undoOperations));
} else { } else {
@ -427,7 +428,7 @@ export const removeBlock = async (protyle: IProtyle, blockElement: Element, rang
id: removeId, id: removeId,
// 不能使用 previousLastElement否则在超级块下的元素前删除撤销错误 // 不能使用 previousLastElement否则在超级块下的元素前删除撤销错误
previousID: blockElement.previousElementSibling?.getAttribute("data-node-id"), previousID: blockElement.previousElementSibling?.getAttribute("data-node-id"),
parentID: parentElement.getAttribute("data-node-id") parentID: parentElement ? parentElement.getAttribute("data-node-id") : protyle.block.parentID
}]; }];
const doOperations: IOperation[] = [{ const doOperations: IOperation[] = [{
action: "delete", action: "delete",
@ -502,7 +503,7 @@ export const removeBlock = async (protyle: IProtyle, blockElement: Element, rang
id: previousId, id: previousId,
}); });
} }
if (parentElement.getAttribute("data-type") === "NodeSuperBlock" && parentElement.childElementCount === 2) { if (parentElement && parentElement.getAttribute("data-type") === "NodeSuperBlock" && parentElement.childElementCount === 2) {
const sbData = await cancelSB(protyle, parentElement); const sbData = await cancelSB(protyle, parentElement);
transaction(protyle, doOperations.concat(sbData.doOperations), sbData.undoOperations.concat(undoOperations)); transaction(protyle, doOperations.concat(sbData.doOperations), sbData.undoOperations.concat(undoOperations));
} else { } else {