From 9e2bab6718d5c33af2ecfcc57c9f221bed112f8c Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Wed, 25 Dec 2024 20:19:44 +0800 Subject: [PATCH] :art: Improve search jump focus block and then exit focus positioning https://github.com/siyuan-note/siyuan/issues/13577 --- kernel/api/block.go | 16 ++++++++++++++++ kernel/api/router.go | 1 + kernel/model/block.go | 23 +++++++++++++++++++++++ 3 files changed, 40 insertions(+) diff --git a/kernel/api/block.go b/kernel/api/block.go index 3d41e8d39..7c42e3e2c 100644 --- a/kernel/api/block.go +++ b/kernel/api/block.go @@ -224,6 +224,22 @@ func setBlockReminder(c *gin.Context) { } } +func getUnfoldedParentID(c *gin.Context) { + ret := gulu.Ret.NewResult() + defer c.JSON(http.StatusOK, ret) + + arg, ok := util.JsonArg(c, ret) + if !ok { + return + } + + id := arg["id"].(string) + parentID := model.GetUnfoldedParentID(id) + ret.Data = map[string]interface{}{ + "parentID": parentID, + } +} + func checkBlockFold(c *gin.Context) { ret := gulu.Ret.NewResult() defer c.JSON(http.StatusOK, ret) diff --git a/kernel/api/router.go b/kernel/api/router.go index 8b6733a06..c53b672b0 100644 --- a/kernel/api/router.go +++ b/kernel/api/router.go @@ -189,6 +189,7 @@ func ServeAPI(ginServer *gin.Engine) { ginServer.Handle("POST", "/api/block/getDocInfo", model.CheckAuth, getDocInfo) ginServer.Handle("POST", "/api/block/getDocsInfo", model.CheckAuth, getDocsInfo) ginServer.Handle("POST", "/api/block/checkBlockExist", model.CheckAuth, checkBlockExist) + ginServer.Handle("POST", "/api/block/getUnfoldedParentID", model.CheckAuth, getUnfoldedParentID) ginServer.Handle("POST", "/api/block/checkBlockFold", model.CheckAuth, checkBlockFold) ginServer.Handle("POST", "/api/block/insertBlock", model.CheckAuth, model.CheckAdminRole, model.CheckReadonly, insertBlock) ginServer.Handle("POST", "/api/block/prependBlock", model.CheckAuth, model.CheckAdminRole, model.CheckReadonly, prependBlock) diff --git a/kernel/model/block.go b/kernel/model/block.go index 671ccf9be..13c328239 100644 --- a/kernel/model/block.go +++ b/kernel/model/block.go @@ -257,6 +257,29 @@ func GetBlockSiblingID(id string) (parent, previous, next string) { return } +func GetUnfoldedParentID(id string) (parentID string) { + tree, err := LoadTreeByBlockID(id) + if err != nil { + return + } + + node := treenode.GetNodeInTree(tree, id) + if nil == node { + return + } + + if !node.IsBlock() { + return + } + + for parent := treenode.HeadingParent(node); nil != parent && ast.NodeDocument != parent.Type; parent = treenode.HeadingParent(parent) { + if "1" != parent.IALAttr("fold") { + return parent.ID + } + } + return +} + func IsBlockFolded(id string) (isFolded, isRoot bool) { tree, _ := LoadTreeByBlockID(id) if nil == tree {