Parcourir la source

:bug: 超级块下方块面包屑计算不正确 Fix https://github.com/siyuan-note/siyuan/issues/6675

Liang Ding il y a 2 ans
Parent
commit
ba6f0e2067
2 fichiers modifiés avec 20 ajouts et 6 suppressions
  1. 12 6
      kernel/model/blockinfo.go
  2. 8 0
      kernel/treenode/heading.go

+ 12 - 6
kernel/model/blockinfo.go

@@ -276,15 +276,21 @@ func buildBlockBreadcrumb(node *ast.Node) (ret []*BlockPath) {
 		}
 
 		for prev := parent.Previous; nil != prev; prev = prev.Previous {
-			if ast.NodeHeading == prev.Type && headingLevel > prev.HeadingLevel {
-				name = gulu.Str.SubStr(renderBlockText(prev), maxNameLen)
+			b := prev
+			if ast.NodeSuperBlock == prev.Type {
+				// 超级块下方块面包屑计算不正确 https://github.com/siyuan-note/siyuan/issues/6675
+				b = treenode.SuperBlockLastHeading(prev)
+			}
+
+			if ast.NodeHeading == b.Type && headingLevel > b.HeadingLevel {
+				name = gulu.Str.SubStr(renderBlockText(b), maxNameLen)
 				ret = append([]*BlockPath{{
-					ID:      prev.ID,
+					ID:      b.ID,
 					Name:    name,
-					Type:    prev.Type.String(),
-					SubType: treenode.SubTypeAbbr(prev),
+					Type:    b.Type.String(),
+					SubType: treenode.SubTypeAbbr(b),
 				}}, ret...)
-				headingLevel = prev.HeadingLevel
+				headingLevel = b.HeadingLevel
 			}
 		}
 	}

+ 8 - 0
kernel/treenode/heading.go

@@ -117,6 +117,14 @@ func SuperBlockHeading(sb *ast.Node) *ast.Node {
 	return nil
 }
 
+func SuperBlockLastHeading(sb *ast.Node) *ast.Node {
+	headings := sb.ChildrenByType(ast.NodeHeading)
+	if 0 < len(headings) {
+		return headings[len(headings)-1]
+	}
+	return nil
+}
+
 func HeadingParent(node *ast.Node) *ast.Node {
 	if nil == node {
 		return nil