Bladeren bron

:art: 改进标签重命名 Fix https://github.com/siyuan-note/siyuan/issues/6816

Liang Ding 2 jaren geleden
bovenliggende
commit
07ae572d8d
2 gewijzigde bestanden met toevoegingen van 7 en 26 verwijderingen
  1. 4 23
      kernel/model/tag.go
  2. 3 3
      kernel/sql/database.go

+ 4 - 23
kernel/model/tag.go

@@ -17,10 +17,8 @@
 package model
 
 import (
-	"bytes"
 	"errors"
 	"fmt"
-	"github.com/siyuan-note/logging"
 	"sort"
 	"strings"
 
@@ -29,6 +27,7 @@ import (
 	"github.com/88250/lute/html"
 	"github.com/emirpasic/gods/sets/hashset"
 	"github.com/facette/natsort"
+	"github.com/siyuan-note/logging"
 	"github.com/siyuan-note/siyuan/kernel/search"
 	"github.com/siyuan-note/siyuan/kernel/sql"
 	"github.com/siyuan-note/siyuan/kernel/treenode"
@@ -83,16 +82,7 @@ func RemoveTag(label string) (err error) {
 				continue
 			}
 
-			nodeTags := node.ChildrenByType(ast.NodeTag)
-			for _, nodeTag := range nodeTags {
-				nodeLabels := nodeTag.ChildrenByType(ast.NodeText)
-				for _, nodeLabel := range nodeLabels {
-					if bytes.Equal(nodeLabel.Tokens, []byte(label)) {
-						unlinks = append(unlinks, nodeTag)
-					}
-				}
-			}
-			nodeTags = node.ChildrenByType(ast.NodeTextMark)
+			nodeTags := node.ChildrenByType(ast.NodeTextMark)
 			for _, nodeTag := range nodeTags {
 				if nodeTag.IsTextMarkType("tag") {
 					if label == nodeTag.TextMarkTextContent {
@@ -181,19 +171,10 @@ func RenameTag(oldLabel, newLabel string) (err error) {
 				continue
 			}
 
-			nodeTags := node.ChildrenByType(ast.NodeTag)
-			for _, nodeTag := range nodeTags {
-				nodeLabels := nodeTag.ChildrenByType(ast.NodeText)
-				for _, nodeLabel := range nodeLabels {
-					if bytes.Equal(nodeLabel.Tokens, []byte(oldLabel)) {
-						nodeLabel.Tokens = bytes.ReplaceAll(nodeLabel.Tokens, []byte(oldLabel), []byte(newLabel))
-					}
-				}
-			}
-			nodeTags = node.ChildrenByType(ast.NodeTextMark)
+			nodeTags := node.ChildrenByType(ast.NodeTextMark)
 			for _, nodeTag := range nodeTags {
 				if nodeTag.IsTextMarkType("tag") {
-					if oldLabel == nodeTag.TextMarkTextContent {
+					if strings.HasPrefix(nodeTag.TextMarkTextContent, oldLabel+"/") || nodeTag.TextMarkTextContent == oldLabel {
 						nodeTag.TextMarkTextContent = strings.ReplaceAll(nodeTag.TextMarkTextContent, oldLabel, newLabel)
 					}
 				}

+ 3 - 3
kernel/sql/database.go

@@ -1232,11 +1232,11 @@ func nSort(n *ast.Node) int {
 		return 20
 	case ast.NodeSuperBlock:
 		return 30
-	// 以下为行级元素
 	case ast.NodeText, ast.NodeTextMark:
+		if n.IsTextMarkType("tag") {
+			return 205
+		}
 		return 200
-	case ast.NodeTag:
-		return 205
 	}
 	return 100
 }