From e988f5373ff02fcf4ebd86315c38aa5d70727f8e Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Fri, 29 Mar 2024 21:42:40 +0800 Subject: [PATCH 1/5] :art: The outline item in the outline panel supports dragging to adjust the level and position https://github.com/siyuan-note/siyuan/issues/7957 --- kernel/model/outline.go | 6 ------ 1 file changed, 6 deletions(-) diff --git a/kernel/model/outline.go b/kernel/model/outline.go index 0067b93dc..61cbcce09 100644 --- a/kernel/model/outline.go +++ b/kernel/model/outline.go @@ -71,12 +71,6 @@ func (tx *Transaction) doMoveOutlineHeading(operation *Operation) (ret *TxErr) { } } - if targetNode == heading.Previous { - if previousHeading.HeadingLevel >= heading.HeadingLevel { - return - } - } - diffLevel := heading.HeadingLevel - previousHeading.HeadingLevel heading.HeadingLevel = previousHeading.HeadingLevel From 7d6dfc853655dacd1b840ccf40c9a0c230f3c859 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Fri, 29 Mar 2024 21:59:32 +0800 Subject: [PATCH 2/5] :art: The outline item in the outline panel supports dragging to adjust the level and position https://github.com/siyuan-note/siyuan/issues/7957 --- kernel/model/outline.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/kernel/model/outline.go b/kernel/model/outline.go index 61cbcce09..9b5725f68 100644 --- a/kernel/model/outline.go +++ b/kernel/model/outline.go @@ -54,6 +54,16 @@ func (tx *Transaction) doMoveOutlineHeading(operation *Operation) (ret *TxErr) { }) headingChildren := treenode.HeadingChildren(heading) + var tmp []*ast.Node + // 过滤掉超级块结束节点 + for _, child := range headingChildren { + if ast.NodeSuperBlockCloseMarker == child.Type { + continue + } + tmp = append(tmp, child) + } + headingChildren = tmp + if "" != previousID { previousHeading := treenode.GetNodeInTree(tree, previousID) if nil == previousHeading { From 0234549a931840a53fd4c3df31f686c5c2e3fdef Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Fri, 29 Mar 2024 22:06:20 +0800 Subject: [PATCH 3/5] :art: The outline item in the outline panel supports dragging to adjust the level and position https://github.com/siyuan-note/siyuan/issues/7957 --- kernel/model/outline.go | 6 ------ 1 file changed, 6 deletions(-) diff --git a/kernel/model/outline.go b/kernel/model/outline.go index 9b5725f68..e07a86df9 100644 --- a/kernel/model/outline.go +++ b/kernel/model/outline.go @@ -112,12 +112,6 @@ func (tx *Transaction) doMoveOutlineHeading(operation *Operation) (ret *TxErr) { } } - if targetNode == heading.Previous { - if parentHeading.HeadingLevel < heading.HeadingLevel { - return - } - } - diffLevel := 1 heading.HeadingLevel = parentHeading.HeadingLevel + 1 if 6 < heading.HeadingLevel { From 30621f6ecf38f4dc72b65d1f3c9a5947c0939864 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Fri, 29 Mar 2024 22:18:05 +0800 Subject: [PATCH 4/5] :art: The outline item in the outline panel supports dragging to adjust the level and position https://github.com/siyuan-note/siyuan/issues/7957 --- kernel/model/outline.go | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/kernel/model/outline.go b/kernel/model/outline.go index e07a86df9..63b2c6a01 100644 --- a/kernel/model/outline.go +++ b/kernel/model/outline.go @@ -54,8 +54,9 @@ func (tx *Transaction) doMoveOutlineHeading(operation *Operation) (ret *TxErr) { }) headingChildren := treenode.HeadingChildren(heading) - var tmp []*ast.Node + // 过滤掉超级块结束节点 + var tmp []*ast.Node for _, child := range headingChildren { if ast.NodeSuperBlockCloseMarker == child.Type { continue @@ -103,6 +104,17 @@ func (tx *Transaction) doMoveOutlineHeading(operation *Operation) (ret *TxErr) { targetNode := parentHeading parentHeadingChildren := treenode.HeadingChildren(parentHeading) + + // 找到下方第一个非标题节点 + tmp = nil + for _, child := range parentHeadingChildren { + if ast.NodeHeading == child.Type { + break + } + tmp = append(tmp, child) + } + parentHeadingChildren = tmp + if 0 < len(parentHeadingChildren) { for _, child := range parentHeadingChildren { if child.ID == headingID { From 4fb311de68fb9c4d8ae9cd7fc3574f68cb9498ac Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Fri, 29 Mar 2024 23:22:29 +0800 Subject: [PATCH 5/5] :art: The outline item in the outline panel supports dragging to adjust the level and position https://github.com/siyuan-note/siyuan/issues/7957 --- kernel/api/transaction.go | 11 ++++++++--- kernel/model/outline.go | 2 +- kernel/model/transaction.go | 11 +++++++++++ 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/kernel/api/transaction.go b/kernel/api/transaction.go index f8e68c57f..faea807bc 100644 --- a/kernel/api/transaction.go +++ b/kernel/api/transaction.go @@ -70,11 +70,16 @@ func performTransactions(c *gin.Context) { app := arg["app"].(string) session := arg["session"].(string) - if model.IsFoldHeading(&transactions) || model.IsUnfoldHeading(&transactions) { - model.WaitForWritingFiles() - } pushTransactions(app, session, transactions) + if model.IsFoldHeading(&transactions) || model.IsUnfoldHeading(&transactions) || model.IsMoveOutlineHeading(&transactions) { + if model.IsMoveOutlineHeading(&transactions) { + if retData := transactions[0].DoOperations[0].RetData; nil != retData { + util.PushReloadDoc(retData.(string)) + } + } + } + elapsed := time.Now().Sub(start).Milliseconds() c.Header("Server-Timing", fmt.Sprintf("total;dur=%d", elapsed)) } diff --git a/kernel/model/outline.go b/kernel/model/outline.go index 63b2c6a01..28e73a47b 100644 --- a/kernel/model/outline.go +++ b/kernel/model/outline.go @@ -154,7 +154,7 @@ func (tx *Transaction) doMoveOutlineHeading(operation *Operation) (ret *TxErr) { return } - util.PushReloadDoc(tree.Root.ID) + operation.RetData = tree.Root.ID return } diff --git a/kernel/model/transaction.go b/kernel/model/transaction.go index 5d2e07f16..67882b680 100644 --- a/kernel/model/transaction.go +++ b/kernel/model/transaction.go @@ -66,6 +66,17 @@ func IsUnfoldHeading(transactions *[]*Transaction) bool { return false } +func IsMoveOutlineHeading(transactions *[]*Transaction) bool { + for _, tx := range *transactions { + for _, op := range tx.DoOperations { + if "moveOutlineHeading" == op.Action { + return true + } + } + } + return false +} + func WaitForWritingFiles() { var printLog bool var lastPrintLog bool