瀏覽代碼

:art: 块滚动条跟随滚动 https://github.com/siyuan-note/siyuan/issues/4612

Liang Ding 2 年之前
父節點
當前提交
420693197d
共有 3 個文件被更改,包括 43 次插入0 次删除
  1. 14 0
      kernel/api/block.go
  2. 1 0
      kernel/api/router.go
  3. 28 0
      kernel/model/blockinfo.go

+ 14 - 0
kernel/api/block.go

@@ -321,6 +321,20 @@ func getBlockBreadcrumb(c *gin.Context) {
 	ret.Data = blockPath
 }
 
+func getBlockIndex(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)
+	index := model.GetBlockIndex(id)
+	ret.Data = index
+}
+
 func getBlockInfo(c *gin.Context) {
 	ret := gulu.Ret.NewResult()
 	defer c.JSON(http.StatusOK, ret)

+ 1 - 0
kernel/api/router.go

@@ -131,6 +131,7 @@ func ServeAPI(ginServer *gin.Engine) {
 	ginServer.Handle("POST", "/api/block/getBlockDOM", model.CheckAuth, getBlockDOM)
 	ginServer.Handle("POST", "/api/block/getBlockKramdown", model.CheckAuth, getBlockKramdown)
 	ginServer.Handle("POST", "/api/block/getBlockBreadcrumb", model.CheckAuth, getBlockBreadcrumb)
+	ginServer.Handle("POST", "/api/block/getBlockIndex", model.CheckAuth, getBlockIndex)
 	ginServer.Handle("POST", "/api/block/getRefIDs", model.CheckAuth, getRefIDs)
 	ginServer.Handle("POST", "/api/block/getRefIDsByFileAnnotationID", model.CheckAuth, getRefIDsByFileAnnotationID)
 	ginServer.Handle("POST", "/api/block/getBlockDefIDsByRefText", model.CheckAuth, getBlockDefIDsByRefText)

+ 28 - 0
kernel/model/blockinfo.go

@@ -153,6 +153,34 @@ func GetBlockDefIDsByRefText(refText string, excludeIDs []string) (ret []string)
 	return
 }
 
+func GetBlockIndex(id string) (ret int) {
+	tree, _ := loadTreeByBlockID(id)
+	if nil == tree {
+		return
+	}
+	node := treenode.GetNodeInTree(tree, id)
+	if nil == node {
+		return
+	}
+
+	ast.Walk(tree.Root, func(n *ast.Node, entering bool) ast.WalkStatus {
+		if !entering {
+			return ast.WalkContinue
+		}
+
+		if !n.IsChildBlockOf(tree.Root, 1) {
+			return ast.WalkContinue
+		}
+
+		ret++
+		if node == n {
+			return ast.WalkStop
+		}
+		return ast.WalkContinue
+	})
+	return
+}
+
 type BlockPath struct {
 	ID       string       `json:"id"`
 	Name     string       `json:"name"`