diff --git a/app/src/layout/dock/Outline.ts b/app/src/layout/dock/Outline.ts index e8a482ee1..8a5a6a051 100644 --- a/app/src/layout/dock/Outline.ts +++ b/app/src/layout/dock/Outline.ts @@ -236,8 +236,15 @@ export class Outline extends Model { documentSelf.ondragstart = () => false; let ghostElement: HTMLElement; let selectItem: HTMLElement; + let editor: IProtyle + getAllModels().editor.find(editItem => { + if (editItem.editor.protyle.block.rootID === this.blockId) { + editor = editItem.editor.protyle; + return true; + } + }); documentSelf.onmousemove = (moveEvent: MouseEvent) => { - if (moveEvent.clientY === event.clientY && moveEvent.clientX === event.clientX || this.element.getAttribute("data-loading") === "true") { + if (!editor || editor.disabled || moveEvent.clientY === event.clientY && moveEvent.clientX === event.clientX || this.element.getAttribute("data-loading") === "true") { return; } moveEvent.preventDefault(); @@ -275,56 +282,52 @@ export class Outline extends Model { documentSelf.ondragstart = null; documentSelf.onselectstart = null; documentSelf.onselect = null; - ghostElement.remove(); + ghostElement?.remove(); item.style.opacity = ""; if (!selectItem) { selectItem = this.element.querySelector(".dragover__top, .dragover__bottom, .dragover"); } - if (selectItem && selectItem.className.indexOf("dragover") > -1) { - getAllModels().editor.find(editItem => { - if (editItem.editor.protyle.block.rootID === this.blockId) { - let previousID; - let parentID; - const undoPreviousID = (item.previousElementSibling && item.previousElementSibling.tagName === "UL") ? item.previousElementSibling.previousElementSibling.getAttribute("data-node-id") : item.previousElementSibling?.getAttribute("data-node-id"); - const undoParentID = item.parentElement.previousElementSibling?.getAttribute("data-node-id"); - if (selectItem.classList.contains("dragover")) { - parentID = selectItem.getAttribute("data-node-id"); - if (selectItem.nextElementSibling && selectItem.nextElementSibling.tagName === "UL") { - selectItem.nextElementSibling.insertAdjacentElement("afterbegin", item); - } else { - selectItem.insertAdjacentHTML("afterend", ``); - item.remove(); - } - } else if (selectItem.classList.contains("dragover__top")) { - parentID = selectItem.parentElement.previousElementSibling?.getAttribute("data-node-id"); - if (selectItem.previousElementSibling && selectItem.previousElementSibling.tagName === "UL") { - previousID = selectItem.previousElementSibling.previousElementSibling.getAttribute("data-node-id"); - } else { - previousID = selectItem.previousElementSibling?.getAttribute("data-node-id"); - } - if (previousID === item.dataset.nodeId || parentID === item.dataset.nodeId) { - return true; - } - selectItem.before(item); - } else if (selectItem.classList.contains("dragover__bottom")) { - previousID = selectItem.getAttribute("data-node-id"); - selectItem.after(item); - } - this.element.setAttribute("data-loading", "true"); - transaction(editItem.editor.protyle, [{ - action: "moveOutlineHeading", - id: item.dataset.nodeId, - previousID, - parentID, - }], [{ - action: "moveOutlineHeading", - id: item.dataset.nodeId, - previousID: undoPreviousID, - parentID: undoParentID, - }]); + if (selectItem && selectItem.className.indexOf("dragover") > -1 && editor) { + let previousID; + let parentID; + const undoPreviousID = (item.previousElementSibling && item.previousElementSibling.tagName === "UL") ? item.previousElementSibling.previousElementSibling.getAttribute("data-node-id") : item.previousElementSibling?.getAttribute("data-node-id"); + const undoParentID = item.parentElement.previousElementSibling?.getAttribute("data-node-id"); + if (selectItem.classList.contains("dragover")) { + parentID = selectItem.getAttribute("data-node-id"); + if (selectItem.nextElementSibling && selectItem.nextElementSibling.tagName === "UL") { + selectItem.nextElementSibling.insertAdjacentElement("afterbegin", item); + } else { + selectItem.insertAdjacentHTML("afterend", ``); + item.remove(); + } + } else if (selectItem.classList.contains("dragover__top")) { + parentID = selectItem.parentElement.previousElementSibling?.getAttribute("data-node-id"); + if (selectItem.previousElementSibling && selectItem.previousElementSibling.tagName === "UL") { + previousID = selectItem.previousElementSibling.previousElementSibling.getAttribute("data-node-id"); + } else { + previousID = selectItem.previousElementSibling?.getAttribute("data-node-id"); + } + if (previousID === item.dataset.nodeId || parentID === item.dataset.nodeId) { return true; } - }); + selectItem.before(item); + } else if (selectItem.classList.contains("dragover__bottom")) { + previousID = selectItem.getAttribute("data-node-id"); + selectItem.after(item); + } + this.element.setAttribute("data-loading", "true"); + transaction(editor, [{ + action: "moveOutlineHeading", + id: item.dataset.nodeId, + previousID, + parentID, + }], [{ + action: "moveOutlineHeading", + id: item.dataset.nodeId, + previousID: undoPreviousID, + parentID: undoParentID, + }]); + return true; } this.element.querySelectorAll(".dragover__top, .dragover__bottom, .dragover").forEach(item => { item.classList.remove("dragover__top", "dragover__bottom", "dragover");