فهرست منبع

:art: Prevent parent move into child https://github.com/siyuan-note/siyuan/issues/13131

Daniel 7 ماه پیش
والد
کامیت
818d1746c0
1فایلهای تغییر یافته به همراه17 افزوده شده و 0 حذف شده
  1. 17 0
      kernel/model/transaction.go

+ 17 - 0
kernel/model/transaction.go

@@ -358,6 +358,10 @@ func (tx *Transaction) doMove(operation *Operation) (ret *TxErr) {
 			return
 		}
 
+		if isMovingParentIntoChild(srcNode, targetNode) {
+			return
+		}
+
 		for i := len(headingChildren) - 1; -1 < i; i-- {
 			c := headingChildren[i]
 			targetNode.InsertAfter(c)
@@ -407,6 +411,10 @@ func (tx *Transaction) doMove(operation *Operation) (ret *TxErr) {
 		return
 	}
 
+	if isMovingParentIntoChild(srcNode, targetNode) {
+		return
+	}
+
 	processed := false
 	if ast.NodeSuperBlock == targetNode.Type {
 		// 在布局节点后插入
@@ -474,6 +482,15 @@ func isMovingFoldHeadingIntoSelf(targetNode *ast.Node, headingChildren []*ast.No
 	return false
 }
 
+func isMovingParentIntoChild(srcNode, targetNode *ast.Node) bool {
+	for parent := targetNode.Parent; nil != parent; parent = parent.Parent {
+		if parent.ID == srcNode.ID {
+			return true
+		}
+	}
+	return false
+}
+
 func (tx *Transaction) doPrependInsert(operation *Operation) (ret *TxErr) {
 	var err error
 	block := treenode.GetBlockTree(operation.ParentID)