Bladeren bron

Merge remote-tracking branch 'origin/dev' into dev

Vanessa 1 jaar geleden
bovenliggende
commit
e2e836a159
1 gewijzigde bestanden met toevoegingen van 25 en 8 verwijderingen
  1. 25 8
      kernel/model/block.go

+ 25 - 8
kernel/model/block.go

@@ -145,20 +145,20 @@ func GetBlockSiblingID(id string) (parent, previous, next string) {
 
 
 	if nil != parentList {
 	if nil != parentList {
 		parent = parentList.ID
 		parent = parentList.ID
-		if flb := treenode.FirstLeafBlock(parentList); nil != flb {
+		if flb := firstChild(parentList); nil != flb {
 			parent = flb.ID
 			parent = flb.ID
 		}
 		}
 
 
 		if parentListItem.Previous != nil {
 		if parentListItem.Previous != nil {
 			previous = parentListItem.Previous.ID
 			previous = parentListItem.Previous.ID
-			if flb := treenode.FirstLeafBlock(parentListItem.Previous); nil != flb {
+			if flb := firstChild(parentListItem.Previous); nil != flb {
 				previous = flb.ID
 				previous = flb.ID
 			}
 			}
 		}
 		}
 
 
 		if parentListItem.Next != nil {
 		if parentListItem.Next != nil {
 			next = parentListItem.Next.ID
 			next = parentListItem.Next.ID
-			if flb := treenode.FirstLeafBlock(parentListItem.Next); nil != flb {
+			if flb := firstChild(parentListItem.Next); nil != flb {
 				next = flb.ID
 				next = flb.ID
 			}
 			}
 		}
 		}
@@ -171,35 +171,37 @@ func GetBlockSiblingID(id string) (parent, previous, next string) {
 
 
 	if nil != current.Parent && current.Parent.IsBlock() {
 	if nil != current.Parent && current.Parent.IsBlock() {
 		parent = current.Parent.ID
 		parent = current.Parent.ID
-		if flb := treenode.FirstLeafBlock(current.Parent); nil != flb {
+		if flb := firstChild(current.Parent); nil != flb {
 			parent = flb.ID
 			parent = flb.ID
 		}
 		}
 
 
 		if ast.NodeDocument == current.Parent.Type {
 		if ast.NodeDocument == current.Parent.Type {
+			parent = current.Parent.ID
+
 			if nil != current.Previous && current.Previous.IsBlock() {
 			if nil != current.Previous && current.Previous.IsBlock() {
 				previous = current.Previous.ID
 				previous = current.Previous.ID
-				if flb := treenode.FirstLeafBlock(current.Previous); nil != flb {
+				if flb := firstChild(current.Previous); nil != flb {
 					previous = flb.ID
 					previous = flb.ID
 				}
 				}
 			}
 			}
 
 
 			if nil != current.Next && current.Next.IsBlock() {
 			if nil != current.Next && current.Next.IsBlock() {
 				next = current.Next.ID
 				next = current.Next.ID
-				if flb := treenode.FirstLeafBlock(current.Next); nil != flb {
+				if flb := firstChild(current.Next); nil != flb {
 					next = flb.ID
 					next = flb.ID
 				}
 				}
 			}
 			}
 		} else {
 		} else {
 			if nil != current.Parent.Previous && current.Parent.Previous.IsBlock() {
 			if nil != current.Parent.Previous && current.Parent.Previous.IsBlock() {
 				previous = current.Parent.Previous.ID
 				previous = current.Parent.Previous.ID
-				if flb := treenode.FirstLeafBlock(current.Parent.Previous); nil != flb {
+				if flb := firstChild(current.Parent.Previous); nil != flb {
 					previous = flb.ID
 					previous = flb.ID
 				}
 				}
 			}
 			}
 
 
 			if nil != current.Parent.Next && current.Parent.Next.IsBlock() {
 			if nil != current.Parent.Next && current.Parent.Next.IsBlock() {
 				next = current.Parent.Next.ID
 				next = current.Parent.Next.ID
-				if flb := treenode.FirstLeafBlock(current.Parent.Next); nil != flb {
+				if flb := firstChild(current.Parent.Next); nil != flb {
 					next = flb.ID
 					next = flb.ID
 				}
 				}
 			}
 			}
@@ -209,6 +211,21 @@ func GetBlockSiblingID(id string) (parent, previous, next string) {
 	return
 	return
 }
 }
 
 
+func firstChild(node *ast.Node) (ret *ast.Node) {
+	ast.Walk(node, func(n *ast.Node, entering bool) ast.WalkStatus {
+		if !entering {
+			return ast.WalkContinue
+		}
+
+		if n.IsBlock() {
+			ret = n
+			return ast.WalkStop
+		}
+		return ast.WalkContinue
+	})
+	return
+}
+
 func IsBlockFolded(id string) bool {
 func IsBlockFolded(id string) bool {
 	for i := 0; i < 32; i++ {
 	for i := 0; i < 32; i++ {
 		b, _ := getBlock(id, nil)
 		b, _ := getBlock(id, nil)