From ac9f8b8680bfe68af430988853bcba004034a3c2 Mon Sep 17 00:00:00 2001 From: Vanessa Date: Wed, 20 Sep 2023 11:18:27 +0800 Subject: [PATCH] :art: fix https://github.com/siyuan-note/siyuan/issues/9226 --- app/src/protyle/wysiwyg/list.ts | 47 ++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 12 deletions(-) diff --git a/app/src/protyle/wysiwyg/list.ts b/app/src/protyle/wysiwyg/list.ts index f142d776b..84922ce3e 100644 --- a/app/src/protyle/wysiwyg/list.ts +++ b/app/src/protyle/wysiwyg/list.ts @@ -300,7 +300,7 @@ export const listOutdent = (protyle: IProtyle, liItemElements: Element[], range: if (!liItemElements[0].previousElementSibling && liElement.getAttribute("data-subtype") === "o") { startIndex = parseInt(liItemElements[0].getAttribute("data-marker")); } - let previousID = liId; + let topPreviousID = liId; let previousElement: Element = liElement; let nextElement = liItemElements[liItemElements.length - 1].nextElementSibling; let lastBlockElement = liItemElements[liItemElements.length - 1].lastElementChild.previousElementSibling; @@ -316,17 +316,17 @@ export const listOutdent = (protyle: IProtyle, liItemElements: Element[], range: doOperations.push({ action: "move", id, - previousID, + previousID: topPreviousID, parentID: parentLiItemElement.getAttribute("data-node-id") || protyle.block.parentID }); undoOperations.push({ action: "move", id, - previousID: index === 1 ? undefined : previousID, + previousID: index === 1 ? undefined : topPreviousID, parentID: item.getAttribute("data-node-id"), data: blockElement.contains(range.startContainer) ? "focus" : "" // 标记需要 focus,https://ld246.com/article/1650018446988/comment/1650081404993?r=Vanessa#comments }); - previousID = id; + topPreviousID = id; previousElement.after(blockElement); previousElement = blockElement; }); @@ -351,21 +351,21 @@ export const listOutdent = (protyle: IProtyle, liItemElements: Element[], range: previousID: previousElement.getAttribute("data-node-id"), }); } - let previousID; + let topOldPreviousID; while (nextElement && !nextElement.classList.contains("protyle-attr")) { doOperations.push({ action: "move", id: nextElement.getAttribute("data-node-id"), - previousID: previousID || lastBlockElement.lastElementChild.previousElementSibling?.getAttribute("data-node-id"), + previousID: topOldPreviousID || lastBlockElement.lastElementChild.previousElementSibling?.getAttribute("data-node-id"), parentID: lastBlockElement.getAttribute("data-node-id") }); undoOperations.push({ action: "move", id: nextElement.getAttribute("data-node-id"), parentID: lastBlockElement.getAttribute("data-node-id"), - previousID: previousID || nextElement.previousElementSibling?.getAttribute("data-node-id"), + previousID: topOldPreviousID || nextElement.previousElementSibling?.getAttribute("data-node-id"), }); - previousID = nextElement.getAttribute("data-node-id"); + topOldPreviousID = nextElement.getAttribute("data-node-id"); const tempElement = nextElement; nextElement = nextElement.nextElementSibling; lastBlockElement.lastElementChild.before(tempElement); @@ -554,7 +554,7 @@ export const listOutdent = (protyle: IProtyle, liItemElements: Element[], range: }); liItemElements[0].lastElementChild.before(lastBlockElement); } - let previousID; + let subPreviousID; while (nextElement && !nextElement.classList.contains("protyle-attr")) { const nextId = nextElement.getAttribute("data-node-id"); if (nextElement.getAttribute("data-subtype") !== lastBlockElement.getAttribute("data-subtype")) { @@ -575,15 +575,15 @@ export const listOutdent = (protyle: IProtyle, liItemElements: Element[], range: doOperations.push({ action: "move", id: nextId, - previousID: previousID || lastBlockElement.lastElementChild.previousElementSibling?.getAttribute("data-node-id"), + previousID: subPreviousID || lastBlockElement.lastElementChild.previousElementSibling?.getAttribute("data-node-id"), parentID: lastBlockElement.getAttribute("data-node-id") }); undoOperations.push({ action: "move", id: nextId, - previousID: previousID || lastBlockElement.parentElement?.getAttribute("data-node-id"), + previousID: subPreviousID || lastBlockElement.parentElement?.getAttribute("data-node-id"), }); - previousID = nextId; + subPreviousID = nextId; const tempElement = nextElement; nextElement = nextElement.nextElementSibling; lastBlockElement.lastElementChild.before(tempElement); @@ -618,6 +618,29 @@ export const listOutdent = (protyle: IProtyle, liItemElements: Element[], range: }); } } + if (!window.siyuan.config.editor.listLogicalOutdent && liElement.nextElementSibling) { + // https://github.com/siyuan-note/siyuan/issues/9226 + nextElement = liElement.nextElementSibling; + let subBlockPreviousID; + while (nextElement && !nextElement.classList.contains("protyle-attr")) { + const nextId = nextElement.getAttribute("data-node-id"); + doOperations.push({ + action: "move", + id: nextId, + previousID: subBlockPreviousID || lastBlockElement.getAttribute("data-node-id"), + }); + undoOperations.push({ + action: "move", + id: nextId, + previousID: subBlockPreviousID || liElement.getAttribute("data-node-id"), + }); + subBlockPreviousID = nextId; + const tempElement = nextElement; + nextElement = nextElement.nextElementSibling; + lastBlockElement.after(tempElement); + lastBlockElement = tempElement; + } + } if (liElement.childElementCount === 1 && parentLiItemElement.childElementCount === 3) { // https://ld246.com/article/1691981936960 doOperations.push({