Bläddra i källkod

:art: https://github.com/siyuan-note/siyuan/issues/11529

Vanessa 1 år sedan
förälder
incheckning
709af9adbf
1 ändrade filer med 30 tillägg och 21 borttagningar
  1. 30 21
      app/src/layout/dock/Outline.ts

+ 30 - 21
app/src/layout/dock/Outline.ts

@@ -244,7 +244,8 @@ export class Outline extends Model {
                 }
             });
             documentSelf.onmousemove = (moveEvent: MouseEvent) => {
-                if (!editor || editor.disabled || moveEvent.clientY === event.clientY && moveEvent.clientX === event.clientX) {
+                if (!editor || editor.disabled || Math.abs(moveEvent.clientY - event.clientY) < 3 &&
+                    Math.abs(moveEvent.clientX - event.clientX) < 3) {
                     return;
                 }
                 moveEvent.preventDefault();
@@ -287,6 +288,7 @@ export class Outline extends Model {
                 if (!selectItem) {
                     selectItem = this.element.querySelector(".dragover__top, .dragover__bottom, .dragover");
                 }
+                let hasChange = true;
                 if (selectItem && selectItem.className.indexOf("dragover") > -1 && editor) {
                     let previousID;
                     let parentID;
@@ -308,30 +310,37 @@ export class Outline extends Model {
                             previousID = selectItem.previousElementSibling?.getAttribute("data-node-id");
                         }
                         if (previousID === item.dataset.nodeId || parentID === item.dataset.nodeId) {
-                            return true;
+                            hasChange = false;
+                        } else {
+                            selectItem.before(item);
                         }
-                        selectItem.before(item);
                     } else if (selectItem.classList.contains("dragover__bottom")) {
                         previousID = selectItem.getAttribute("data-node-id");
-                        selectItem.after(item);
+                        if (previousID === item.previousElementSibling?.getAttribute("data-node-id")) {
+                            hasChange = false;
+                        } else {
+                            selectItem.after(item);
+                        }
+                    }
+                    if (hasChange) {
+                        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,
+                        }]);
+                        // https://github.com/siyuan-note/siyuan/issues/10828#issuecomment-2044099675
+                        editor.wysiwyg.element.querySelectorAll('[data-type="NodeHeading"] [contenteditable="true"][spellcheck]').forEach(item => {
+                            item.setAttribute("contenteditable", "false");
+                        });
+                        return true;
                     }
-                    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,
-                    }]);
-                    // https://github.com/siyuan-note/siyuan/issues/10828#issuecomment-2044099675
-                    editor.wysiwyg.element.querySelectorAll('[data-type="NodeHeading"] [contenteditable="true"][spellcheck]').forEach(item => {
-                        item.setAttribute("contenteditable", "false");
-                    });
-                    return true;
                 }
                 this.element.querySelectorAll(".dragover__top, .dragover__bottom, .dragover").forEach(item => {
                     item.classList.remove("dragover__top", "dragover__bottom", "dragover");