mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-12-16 14:40:12 +01:00
🎨 Improve the backlink panel breadcrumb and block sorting https://github.com/siyuan-note/siyuan/issues/13008
This commit is contained in:
parent
f0a292ac51
commit
c55c5753cd
1 changed files with 40 additions and 0 deletions
|
|
@ -109,6 +109,7 @@ func GetBackmentionDoc(defID, refTreeID, keyword string, containChildren bool) (
|
||||||
|
|
||||||
if 0 < len(trees) {
|
if 0 < len(trees) {
|
||||||
sortBacklinks(ret, refTree)
|
sortBacklinks(ret, refTree)
|
||||||
|
ret = mergeNeighborBacklinks(ret)
|
||||||
filterBlockPaths(ret)
|
filterBlockPaths(ret)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
|
|
@ -152,6 +153,7 @@ func GetBacklinkDoc(defID, refTreeID, keyword string, containChildren bool) (ret
|
||||||
}
|
}
|
||||||
|
|
||||||
sortBacklinks(ret, refTree)
|
sortBacklinks(ret, refTree)
|
||||||
|
ret = mergeNeighborBacklinks(ret)
|
||||||
filterBlockPaths(ret)
|
filterBlockPaths(ret)
|
||||||
|
|
||||||
for i := len(ret) - 1; 0 < i; i-- {
|
for i := len(ret) - 1; 0 < i; i-- {
|
||||||
|
|
@ -165,6 +167,44 @@ func GetBacklinkDoc(defID, refTreeID, keyword string, containChildren bool) (ret
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func mergeNeighborBacklinks(blockLinks []*Backlink) (ret []*Backlink) {
|
||||||
|
// 如果反链中的节点是相邻的,则合并
|
||||||
|
for i := len(blockLinks) - 1; 0 < i; i-- {
|
||||||
|
if isPrevious(blockLinks[i].node, blockLinks[i-1].node) {
|
||||||
|
blockLinks[i-1].DOM += blockLinks[i].DOM
|
||||||
|
blockLinks[i] = nil
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, b := range blockLinks {
|
||||||
|
if nil != b {
|
||||||
|
ret = append(ret, b)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func isPrevious(cur, prev *ast.Node) bool {
|
||||||
|
if nil == cur || nil == prev {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if cur.Previous == prev {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
for prevParent := prev.Parent; nil != prevParent; prevParent = prevParent.Parent {
|
||||||
|
if prev.Next == cur {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for curParent := cur.Parent; nil != curParent; curParent = curParent.Parent {
|
||||||
|
if prev.Next == curParent {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func filterBlockPaths(blockLinks []*Backlink) {
|
func filterBlockPaths(blockLinks []*Backlink) {
|
||||||
for _, b := range blockLinks {
|
for _, b := range blockLinks {
|
||||||
if 2 == len(b.BlockPaths) {
|
if 2 == len(b.BlockPaths) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue