From 01a3f3e690c5d7569881ae07b4de0d9cfd863133 Mon Sep 17 00:00:00 2001
From: Daniel <845765@qq.com>
Date: Fri, 19 Apr 2024 20:06:43 +0800
Subject: [PATCH] :art: Limit the maximum number of tags listed in the tag
panel https://github.com/siyuan-note/siyuan/issues/11071
---
app/appearance/langs/en_US.json | 5 +++--
app/appearance/langs/es_ES.json | 5 +++--
app/appearance/langs/fr_FR.json | 7 ++++---
app/appearance/langs/zh_CHT.json | 5 +++--
app/appearance/langs/zh_CN.json | 5 +++--
kernel/model/tag.go | 23 ++++++++++++++++++++++-
6 files changed, 38 insertions(+), 12 deletions(-)
diff --git a/app/appearance/langs/en_US.json b/app/appearance/langs/en_US.json
index 62612e2ec..8f4aa9144 100644
--- a/app/appearance/langs/en_US.json
+++ b/app/appearance/langs/en_US.json
@@ -990,7 +990,7 @@
"fileTree14": "Save path (support date format template variables, such as /Daily Notes/{{now | date \"2006/01\"}}/{{now | date \"2006-01-02\"}}
)",
"fileTree15": "Template path (for example, dailynote.md
, the file needs to be placed under the workspace/data/templates/)",
"fileTree16": "Maximum number to list",
- "fileTree17": "If there are too many sub-documents, this restriction can be used to improve performance",
+ "fileTree17": "If there are too many sub-docs/tags, this restriction can be used to improve performance",
"fileTree18": "Allows creation of sub-documents deeper than 7 levels",
"fileTree19": "Some operating systems have technical limitations that may prevent manual copying of workspace data after creating sub-documents greater than 7 levels",
"fileTree20": "Save with a single line",
@@ -1473,6 +1473,7 @@
"239": "Related operations are being processed, please try again later",
"240": "Drag heading under container blocks in the doc is not supported",
"241": "Drag to its subheading is not supported",
- "242": "The binding block already exists in the current database"
+ "242": "The binding block already exists in the current database",
+ "243": "Only list the first [%d] tags (including subtags), if you need to adjust, please modify [Settings - Doc Tree - Maximum number to list]"
}
}
diff --git a/app/appearance/langs/es_ES.json b/app/appearance/langs/es_ES.json
index 703991e49..4bcc8f827 100644
--- a/app/appearance/langs/es_ES.json
+++ b/app/appearance/langs/es_ES.json
@@ -990,7 +990,7 @@
"fileTree14": "Ruta de guardado (admite variables de plantilla de formato de fecha, como /Notas del día/{{now | date \"2006/01\"}}/{{now | date \"2006-01-02\"}}
)",
"fileTree15": "Ruta de la plantilla (por ejemplo, dailynote.md
, el archivo debe colocarse en el espacio de trabajo/data/templates/)",
"fileTree16": "Número máximo a listar",
- "fileTree17": "Si hay demasiados subdocumentos, se puede utilizar esta restricción para mejorar el rendimiento",
+ "fileTree17": "Si hay demasiados subdocumentos/etiquetas, se puede utilizar esta restricción para mejorar el rendimiento",
"fileTree18": "Permite la creación de subdocumentos de más de 7 niveles",
"fileTree19": "Algunos sistemas operativos tienen limitaciones técnicas que pueden impedir la copia manual de los datos del espacio de trabajo después de crear subdocumentos de más de 7 niveles",
"fileTree20": "Guardar con una sola línea",
@@ -1473,6 +1473,7 @@
"239": "Las operaciones relacionadas se están procesando, inténtalo de nuevo más tarde",
"240": "No se admite arrastrar encabezado debajo de los bloques contenedores en el documento",
"241": "No se admite arrastrar a su subtítulo",
- "242": "El bloque de enlace ya existe en la base de datos actual"
+ "242": "El bloque de enlace ya existe en la base de datos actual",
+ "243": "Enumere solo las primeras [%d] etiquetas (incluidas las subetiquetas), modifique [Configuración - Árbol de documentos - Número máximo a listar]"
}
}
diff --git a/app/appearance/langs/fr_FR.json b/app/appearance/langs/fr_FR.json
index dd28a4723..725982271 100644
--- a/app/appearance/langs/fr_FR.json
+++ b/app/appearance/langs/fr_FR.json
@@ -925,7 +925,7 @@
"reset": "Réinitialiser",
"siyuanNote": "SiYuan",
"resetLayout": "Restaurer la mise en page par défaut",
- "tag": "Tag",
+ "tag": "Étiqueter",
"twoFactorCaptcha": "Vérification en 2 étapes",
"captcha": "Code de vérification",
"register": "Créer un nouveau compte",
@@ -990,7 +990,7 @@
"fileTree14": "Chemin d'enregistrement (prise en charge des variables de modèle de format de date, telles que /Notes quotidiennes/{{mais | date \"2006/01\"}}/{{mais | date \"2006-01-02\"}}
)",
"fileTree15": "Chemin du modèle (par exemple, dailynote.md
, le fichier doit être placé sous \"l'espace de travail/data/templates/\")",
"fileTree16": "Nombre maximum à lister",
- "fileTree17": "S'il y a trop de sous-documents, cette restriction peut être utilisée pour améliorer les performances.",
+ "fileTree17": "S'il y a trop de sous-documents/étiqueter, cette restriction peut être utilisée pour améliorer les performances.",
"fileTree18": "Permet la création de sous-documents de plus de 7 niveaux",
"fileTree19": "Certains systèmes d'exploitation ont des limitations techniques qui peuvent empêcher la copie manuelle des données de l'espace de travail après la création de sous-documents supérieurs à 7 niveaux",
"fileTree20": "Enregistrer avec une seule ligne",
@@ -1473,6 +1473,7 @@
"239": "Les opérations associées sont en cours de traitement, veuillez réessayer plus tard",
"240": "Le déplacement du titre sous les blocs conteneurs dans la doc n'est pas pris en charge",
"241": "Le glisser vers son sous-titre n'est pas pris en charge",
- "242": "Le bloc de liaison existe déjà dans la base de données actuelle"
+ "242": "Le bloc de liaison existe déjà dans la base de données actuelle",
+ "243": "Répertorier uniquement les [%d] premières balises (y compris les sous-balises). veuillez modifier [Paramètres - Arbre des documents - Nombre maximum de documents à lister]."
}
}
diff --git a/app/appearance/langs/zh_CHT.json b/app/appearance/langs/zh_CHT.json
index d88415cfb..8556400ca 100644
--- a/app/appearance/langs/zh_CHT.json
+++ b/app/appearance/langs/zh_CHT.json
@@ -990,7 +990,7 @@
"fileTree14": "存放路徑(可使用日期格式範本變數,例如 /日記/{{now | date \"2006/01\"}}/{{now | date \"2006-01-02\"}}
)",
"fileTree15": "範本路徑(例如 dailynote.md
,需要將該檔放置於工作空間/data/templates/ 下)",
"fileTree16": "最大列出數量",
- "fileTree17": "如果子文檔非常多,可通過該項限制以提升性能",
+ "fileTree17": "如果子文檔/標籤非常多,可通過該項限制以提升性能",
"fileTree18": "允許建立深度大於 7 層的子文檔",
"fileTree19": "一些操作系統存在技術限制導致建立大於 7 層的子文檔後可能無法正常手動複製工作空間資料",
"fileTree20": "使用單行保存",
@@ -1473,6 +1473,7 @@
"239": "相關操作正在處理中,請稍後再試",
"240": "不支援拖曳文件中容器區塊下的標題",
"241": "不支持拖曳為自己的子標題",
- "242": "目前資料庫中已經存在該綁定區塊"
+ "242": "目前資料庫中已經存在該綁定區塊",
+ "243": "僅列出前 [%d] 個標籤(含子標籤),如需調整請修改 [設置 - 文檔樹 - 最大列出數量]"
}
}
diff --git a/app/appearance/langs/zh_CN.json b/app/appearance/langs/zh_CN.json
index c418a93b2..d353283be 100644
--- a/app/appearance/langs/zh_CN.json
+++ b/app/appearance/langs/zh_CN.json
@@ -990,7 +990,7 @@
"fileTree14": "存放路径(可使用日期格式模板变量,例如 /日记/{{now | date \"2006/01\"}}/{{now | date \"2006-01-02\"}}
)",
"fileTree15": "模板路径(例如 dailynote.md
,需要将该文件放置于工作空间/data/templates/ 下)",
"fileTree16": "最大列出数量",
- "fileTree17": "如果子文档非常多,可通过该项限制以提升性能",
+ "fileTree17": "如果子文档/标签非常多,可通过该项限制以提升性能",
"fileTree18": "允许创建深度大于 7 层的子文档",
"fileTree19": "一些操作系统存在技术限制导致创建大于 7 层的子文档后可能无法正常手动复制工作空间数据",
"fileTree20": "使用单行保存",
@@ -1473,6 +1473,7 @@
"239": "相关操作正在处理中,请稍后再试",
"240": "不支持拖拽文档中容器块下的标题",
"241": "不支持拖拽为自己的子标题",
- "242": "当前数据库中已经存在该绑定块"
+ "242": "当前数据库中已经存在该绑定块",
+ "243": "仅列出前 [%d] 个标签(含子标签),如需调整请修改 [设置 - 文档树 - 最大列出数量]"
}
}
diff --git a/kernel/model/tag.go b/kernel/model/tag.go
index 78b1b1151..b45bfb12d 100644
--- a/kernel/model/tag.go
+++ b/kernel/model/tag.go
@@ -208,6 +208,7 @@ type Tags []*Tag
func BuildTags() (ret *Tags) {
WaitForWritingFiles()
+
if !sql.IsEmptyQueue() {
sql.WaitForWritingDatabase()
}
@@ -220,10 +221,30 @@ func BuildTags() (ret *Tags) {
}
appendTagChildren(&tags, labels)
sortTags(tags)
- ret = &tags
+
+ var total int
+ tmp := &Tags{}
+ for _, tag := range tags {
+ *tmp = append(*tmp, tag)
+ total += countTag(tag)
+ if Conf.FileTree.MaxListCount < total {
+ util.PushMsg(fmt.Sprintf(Conf.Language(243), Conf.FileTree.MaxListCount), 7000)
+ break
+ }
+ }
+
+ ret = tmp
return
}
+func countTag(tag *Tag) int {
+ count := 1
+ for _, child := range tag.tags {
+ count += countTag(child)
+ }
+ return count + tag.Count
+}
+
func sortTags(tags Tags) {
switch Conf.Tag.Sort {
case util.SortModeNameASC: