This commit is contained in:
parent
b5266a1e16
commit
b11cd266b7
1 changed files with 156 additions and 0 deletions
|
@ -297,6 +297,8 @@ export const listOutdent = (protyle: IProtyle, liItemElements: Element[], range:
|
|||
}
|
||||
let previousID = liId;
|
||||
let previousElement: Element = liElement;
|
||||
let nextElement = liItemElements[liItemElements.length - 1].nextElementSibling;
|
||||
let lastBlockElement = liItemElements[liItemElements.length - 1].lastElementChild.previousElementSibling;
|
||||
liItemElements.forEach(item => {
|
||||
item.classList.remove("protyle-wysiwyg--select");
|
||||
item.removeAttribute("select-start");
|
||||
|
@ -324,6 +326,74 @@ export const listOutdent = (protyle: IProtyle, liItemElements: Element[], range:
|
|||
previousElement = blockElement;
|
||||
});
|
||||
});
|
||||
if (!window.siyuan.config.editor.listLogicalOutdent && !nextElement.classList.contains("protyle-attr")) {
|
||||
// 传统缩进
|
||||
let newId
|
||||
if (lastBlockElement.getAttribute("data-subtype") !== nextElement.getAttribute("data-subtype")) {
|
||||
newId = Lute.NewNodeID()
|
||||
lastBlockElement = document.createElement("div")
|
||||
lastBlockElement.classList.add("list")
|
||||
lastBlockElement.setAttribute("data-subtype", nextElement.getAttribute("data-subtype"))
|
||||
lastBlockElement.setAttribute("data-node-id", newId)
|
||||
lastBlockElement.setAttribute("data-type", "NodeList")
|
||||
lastBlockElement.setAttribute("updated", dayjs().format("YYYYMMDDHHmmss"))
|
||||
lastBlockElement.innerHTML = `<div class="protyle-attr" contenteditable="false">${Constants.ZWSP}</div>`
|
||||
previousElement.after(lastBlockElement)
|
||||
doOperations.push({
|
||||
action: "insert",
|
||||
id: newId,
|
||||
data: lastBlockElement.outerHTML,
|
||||
previousID: previousElement.getAttribute("data-node-id"),
|
||||
});
|
||||
}
|
||||
let previousID;
|
||||
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"),
|
||||
parentID: lastBlockElement.getAttribute("data-node-id")
|
||||
});
|
||||
undoOperations.push({
|
||||
action: "move",
|
||||
id: nextElement.getAttribute("data-node-id"),
|
||||
previousID: previousID || nextElement.previousElementSibling.getAttribute("data-node-id"),
|
||||
});
|
||||
previousID = nextElement.getAttribute("data-node-id");
|
||||
const tempElement = nextElement
|
||||
nextElement = nextElement.nextElementSibling
|
||||
lastBlockElement.lastElementChild.before(tempElement);
|
||||
}
|
||||
if (lastBlockElement.getAttribute("data-subtype") === "o") {
|
||||
Array.from(lastBlockElement.children).forEach(orderItem => {
|
||||
const id = orderItem.getAttribute("data-node-id")
|
||||
if (id) {
|
||||
undoOperations.push({
|
||||
action: "update",
|
||||
id,
|
||||
data: orderItem.outerHTML,
|
||||
});
|
||||
}
|
||||
});
|
||||
updateListOrder(lastBlockElement, 1);
|
||||
Array.from(lastBlockElement.children).forEach(orderItem => {
|
||||
const id = orderItem.getAttribute("data-node-id")
|
||||
if (id) {
|
||||
doOperations.push({
|
||||
action: "update",
|
||||
id,
|
||||
data: orderItem.outerHTML,
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
if (newId) {
|
||||
undoOperations.push({
|
||||
action: "delete",
|
||||
id: newId
|
||||
});
|
||||
}
|
||||
}
|
||||
const movedHTML = liElement.outerHTML;
|
||||
liItemElements.forEach(item => {
|
||||
item.remove();
|
||||
|
@ -391,6 +461,8 @@ export const listOutdent = (protyle: IProtyle, liItemElements: Element[], range:
|
|||
startIndex = parseInt(liItemElements[0].getAttribute("data-marker"));
|
||||
}
|
||||
const html = parentLiItemElement.parentElement.outerHTML;
|
||||
let nextElement = liItemElements[liItemElements.length - 1].nextElementSibling;
|
||||
let lastBlockElement = liItemElements[liItemElements.length - 1].lastElementChild.previousElementSibling;
|
||||
liItemElements.reverse().forEach(item => {
|
||||
const itemId = item.getAttribute("data-node-id");
|
||||
doOperations.push({
|
||||
|
@ -452,6 +524,90 @@ export const listOutdent = (protyle: IProtyle, liItemElements: Element[], range:
|
|||
});
|
||||
}
|
||||
});
|
||||
if (!window.siyuan.config.editor.listLogicalOutdent && !nextElement.classList.contains("protyle-attr")) {
|
||||
// 传统缩进
|
||||
let newId
|
||||
if (!lastBlockElement.classList.contains("list")) {
|
||||
newId = Lute.NewNodeID()
|
||||
lastBlockElement = document.createElement("div")
|
||||
lastBlockElement.classList.add("list")
|
||||
lastBlockElement.setAttribute("data-subtype", nextElement.getAttribute("data-subtype"))
|
||||
lastBlockElement.setAttribute("data-node-id", newId)
|
||||
lastBlockElement.setAttribute("data-type", "NodeList")
|
||||
lastBlockElement.setAttribute("updated", dayjs().format("YYYYMMDDHHmmss"))
|
||||
lastBlockElement.innerHTML = `<div class="protyle-attr" contenteditable="false">${Constants.ZWSP}</div>`
|
||||
parentLiItemElement.after(lastBlockElement)
|
||||
doOperations.push({
|
||||
action: "insert",
|
||||
id: newId,
|
||||
data: lastBlockElement.outerHTML,
|
||||
previousID: parentLiItemElement.getAttribute("data-node-id"),
|
||||
});
|
||||
}
|
||||
let previousID;
|
||||
while (nextElement && !nextElement.classList.contains("protyle-attr")) {
|
||||
const nextId = nextElement.getAttribute("data-node-id")
|
||||
if (nextElement.getAttribute("data-subtype") !== lastBlockElement.getAttribute("data-subtype")) {
|
||||
undoOperations.push({
|
||||
action: "update",
|
||||
id: nextId,
|
||||
data: nextElement.outerHTML
|
||||
});
|
||||
nextElement.querySelector(".protyle-action").outerHTML = lastBlockElement.querySelector(".protyle-action").outerHTML;
|
||||
nextElement.setAttribute("data-subtype", lastBlockElement.getAttribute("data-subtype"));
|
||||
nextElement.setAttribute("data-marker", lastBlockElement.getAttribute("data-marker"));
|
||||
doOperations.push({
|
||||
action: "update",
|
||||
id: nextId,
|
||||
data: nextElement.outerHTML
|
||||
});
|
||||
}
|
||||
doOperations.push({
|
||||
action: "move",
|
||||
id: nextId,
|
||||
previousID: previousID || lastBlockElement.lastElementChild.previousElementSibling?.getAttribute("data-node-id"),
|
||||
parentID: lastBlockElement.getAttribute("data-node-id")
|
||||
});
|
||||
undoOperations.push({
|
||||
action: "move",
|
||||
id: nextId,
|
||||
previousID: previousID || nextElement.previousElementSibling.getAttribute("data-node-id"),
|
||||
});
|
||||
previousID = nextId;
|
||||
const tempElement = nextElement
|
||||
nextElement = nextElement.nextElementSibling
|
||||
lastBlockElement.lastElementChild.before(tempElement);
|
||||
}
|
||||
if (lastBlockElement.getAttribute("data-subtype") === "o") {
|
||||
Array.from(lastBlockElement.children).forEach(orderItem => {
|
||||
const id = orderItem.getAttribute("data-node-id")
|
||||
if (id) {
|
||||
undoOperations.push({
|
||||
action: "update",
|
||||
id,
|
||||
data: orderItem.outerHTML,
|
||||
});
|
||||
}
|
||||
});
|
||||
updateListOrder(lastBlockElement, 1);
|
||||
Array.from(lastBlockElement.children).forEach(orderItem => {
|
||||
const id = orderItem.getAttribute("data-node-id")
|
||||
if (id) {
|
||||
doOperations.push({
|
||||
action: "update",
|
||||
id,
|
||||
data: orderItem.outerHTML,
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
if (newId) {
|
||||
undoOperations.push({
|
||||
action: "delete",
|
||||
id: newId
|
||||
});
|
||||
}
|
||||
}
|
||||
if (liElement.childElementCount === 1) {
|
||||
doOperations.push({
|
||||
action: "delete",
|
||||
|
|
Loading…
Add table
Reference in a new issue