From 20ee605bfce796fca92c760f9125d676ce9e7192 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Wed, 3 Apr 2024 00:15:59 +0800 Subject: [PATCH] :bug: Improve outline dnd https://github.com/siyuan-note/siyuan/issues/10828 --- kernel/model/outline.go | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/kernel/model/outline.go b/kernel/model/outline.go index 859287edc..8dbb2ca61 100644 --- a/kernel/model/outline.go +++ b/kernel/model/outline.go @@ -173,12 +173,32 @@ func (tx *Transaction) doMoveOutlineHeading(operation *Operation) (ret *TxErr) { } else { generateOpTypeHistory(tree, HistoryOpOutline) - // 移到最前 - for i := len(headingChildren) - 1; i >= 0; i-- { - child := headingChildren[i] - tree.Root.PrependChild(child) + // 移到第一个标题前 + var firstHeading *ast.Node + for n := tree.Root.FirstChild; nil != n; n = n.Next { + if ast.NodeHeading == n.Type { + firstHeading = n + break + } + } + if nil == firstHeading || firstHeading.ID == heading.ID { + return + } + + diffLevel := heading.HeadingLevel - firstHeading.HeadingLevel + heading.HeadingLevel = firstHeading.HeadingLevel + + firstHeading.InsertBefore(heading) + for i := 0; i < len(headingChildren)-1; i++ { + child := headingChildren[i] + if ast.NodeHeading == child.Type { + child.HeadingLevel -= diffLevel + if 6 < child.HeadingLevel { + child.HeadingLevel = 6 + } + } + firstHeading.InsertBefore(child) } - tree.Root.PrependChild(heading) } if err = tx.writeTree(tree); nil != err {