🎨 状态栏显示选中内容的字数 https://github.com/siyuan-note/siyuan/issues/4932

This commit is contained in:
Liang Ding 2022-06-27 16:13:11 +08:00
parent 1b173ae421
commit 46c4d842f9
No known key found for this signature in database
GPG key ID: 136F30F901A2231D
3 changed files with 62 additions and 0 deletions

View file

@ -104,6 +104,44 @@ func getRecentUpdatedBlocks(c *gin.Context) {
ret.Data = blocks
}
func getContentWordCount(c *gin.Context) {
ret := gulu.Ret.NewResult()
defer c.JSON(http.StatusOK, ret)
arg, ok := util.JsonArg(c, ret)
if !ok {
return
}
content := arg["content"].(string)
runeCount, wordCount := model.ContentWordCount(content)
ret.Data = map[string]interface{}{
"runeCount": runeCount,
"wordCount": wordCount,
}
}
func getBlocksWordCount(c *gin.Context) {
ret := gulu.Ret.NewResult()
defer c.JSON(http.StatusOK, ret)
arg, ok := util.JsonArg(c, ret)
if !ok {
return
}
idsArg := arg["ids"].([]interface{})
var ids []string
for _, id := range idsArg {
ids = append(ids, id.(string))
}
runeCount, wordCount := model.BlocksWordCount(ids)
ret.Data = map[string]interface{}{
"runeCount": runeCount,
"wordCount": wordCount,
}
}
func getBlockWordCount(c *gin.Context) {
ret := gulu.Ret.NewResult()
defer c.JSON(http.StatusOK, ret)

View file

@ -131,6 +131,8 @@ func ServeAPI(ginServer *gin.Engine) {
ginServer.Handle("POST", "/api/block/getBlockDefIDsByRefText", model.CheckAuth, getBlockDefIDsByRefText)
ginServer.Handle("POST", "/api/block/getRefText", model.CheckAuth, getRefText)
ginServer.Handle("POST", "/api/block/getBlockWordCount", model.CheckAuth, getBlockWordCount)
ginServer.Handle("POST", "/api/block/getBlocksWordCount", model.CheckAuth, getBlocksWordCount)
ginServer.Handle("POST", "/api/block/getContentWordCount", model.CheckAuth, getContentWordCount)
ginServer.Handle("POST", "/api/block/getRecentUpdatedBlocks", model.CheckAuth, getRecentUpdatedBlocks)
ginServer.Handle("POST", "/api/block/getDocInfo", model.CheckAuth, getDocInfo)
ginServer.Handle("POST", "/api/block/checkBlockExist", model.CheckAuth, checkBlockExist)

View file

@ -364,6 +364,28 @@ func ListDocTree(boxID, path string, sortMode int) (ret []*File, totals int, err
return
}
func ContentWordCount(content string) (runeCount, wordCount int) {
luteEngine := NewLute()
tree := luteEngine.BlockDOM2Tree(content)
runeCount, wordCount = tree.Root.ContentLen()
return
}
func BlocksWordCount(ids []string) (runeCount, wordCount int) {
for _, id := range ids {
tree, _ := loadTreeByBlockID(id)
if nil == tree {
return
}
node := treenode.GetNodeInTree(tree, id)
blockRuneCount, blockWordCount := node.ContentLen()
runeCount += blockRuneCount
wordCount += blockWordCount
}
return
}
func BlockWordCount(id string) (blockRuneCount, blockWordCount, rootBlockRuneCount, rootBlockWordCount int) {
tree, _ := loadTreeByBlockID(id)
if nil == tree {