diff --git a/.gitignore b/.gitignore
index 1fd748eb9..331987095 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,5 @@
# Binaries for programs and plugins
*.exe
-cloc.exe
*.dll
*.so
*.dylib
diff --git a/app/appearance/langs/en_US.json b/app/appearance/langs/en_US.json
index 58d608703..3fea037e1 100644
--- a/app/appearance/langs/en_US.json
+++ b/app/appearance/langs/en_US.json
@@ -636,14 +636,14 @@
"fileTree3": "No confirmation required when deleting documents",
"fileTree4": "If not enabled, a confirmation box will pop up every time you delete a document",
"fileTree5": "Ref create doc save location",
- "fileTree6": "When using ((, the save path of the new document (for example, /folder1/folder2/, the relative path of the current doc is used if it does not start with /)",
+ "fileTree6": "When using ((, the save path of the new document (for example, /folder1/{{now | date \"20060102150405\"}}/, the relative path of the current doc is used if it does not start with /)",
"fileTree7": "Open in the current tab",
"fileTree8": "The newly opened document tab will replace the unmodified tab",
"fileTree9": "Close all tabs at startup",
"fileTree10": "After enabling, the unpinned tabs that were opened the last time will be automatically closed every time the interface is started",
"fileTree11": "New daily note",
"fileTree12": "New doc name template",
- "fileTree13": "The template snippet is used by default when creating a new doc for naming, for example {{now | date \"20060102150405\"}}",
+ "fileTree13": "The template snippet is used by default when creating a new doc for naming (for example {{now | date \"20060102150405\"}})",
"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",
diff --git a/app/appearance/langs/es_ES.json b/app/appearance/langs/es_ES.json
index 303ad17d9..08ee788ba 100644
--- a/app/appearance/langs/es_ES.json
+++ b/app/appearance/langs/es_ES.json
@@ -171,6 +171,7 @@
"exportPDF3": "Escala de la página",
"exportPDF4": "Eliminar directorio de activos",
"exportPDF5": "Mantener doblado",
+ "exportPDF6": "Fusionar subdocumentos",
"upload": "Subir",
"reminderTip": "La hora del recordatorio no puede ser inferior a la hora actual",
"wechatTip": "El bloque de contenido se enviará a la nube en texto claro, y se empujará a través del mensaje de plantilla de WeChat MP cuando caduque",
@@ -635,14 +636,14 @@
"fileTree3": "No se requiere confirmación al borrar documentos",
"fileTree4": "Si no se activa, aparecerá un cuadro de confirmación cada vez que se elimine un documento",
"fileTree5": "Ref crear ubicación de guardado de documentos",
- "fileTree6": "Al utilizar ((, la ruta de guardado del nuevo documento (por ejemplo, /carpeta1/carpeta2/, se utiliza la ruta relativa del documento actual si no empieza por /)",
+ "fileTree6": "Al utilizar ((, la ruta de guardado del nuevo documento (por ejemplo, /carpeta1/{{now | date \"20060102150405\"}}/, se utiliza la ruta relativa del documento actual si no empieza por /)",
"fileTree7": "Abrir en la pestaña actual",
"fileTree8": "La pestaña del documento recién abierto sustituirá a la pestaña no modificada",
"fileTree9": "Cerrar todas las pestañas al inicio",
"fileTree10": "Cuando está habilitado, las pestañas no fijadas que se abrieron la última vez se cerrarán automáticamente cada vez que se inicie la interfaz",
"fileTree11": "Nueva nota diaria",
"fileTree12": "Nueva pantilla de nombre de documento",
- "fileTree13": "El fragmento de plantilla se utiliza por defecto cuando se crea un nuevo documento para nombrar, por ejemplo {{now | date \"20060102150405\"}}",
+ "fileTree13": "El fragmento de plantilla se utiliza por defecto cuando se crea un nuevo documento para nombrar (por ejemplo {{now | date \"20060102150405\"}})",
"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",
diff --git a/app/appearance/langs/fr_FR.json b/app/appearance/langs/fr_FR.json
index 8cafa488a..a431cccdb 100644
--- a/app/appearance/langs/fr_FR.json
+++ b/app/appearance/langs/fr_FR.json
@@ -636,14 +636,14 @@
"fileTree3": "Aucune confirmation requise lors de la suppression de documents",
"fileTree4": "Si non activé, une boîte de confirmation apparaîtra à chaque fois que vous supprimerez un document",
"fileTree5": "Référence créer doc enregistrer emplacement",
- "fileTree6": "Lors de l'utilisation de ((, le chemin d'enregistrement du nouveau document (par exemple, /dossier1/ dossier2/, le chemin relatif du doc actuel est utilisé s'il ne commence pas par /).",
+ "fileTree6": "Lors de l'utilisation de ((, le chemin d'enregistrement du nouveau document (par exemple, /dossier1/{{now | date \"20060102150405\"}}/, le chemin relatif du doc actuel est utilisé s'il ne commence pas par /).",
"fileTree7": "Ouvrir dans l'Onglet actuel",
"fileTree8": "L'onglet du document nouvellement ouvert remplacera l'Onglet non modifié.",
"fileTree9": "Fermer tous les onglets au démarrage",
"fileTree10": "Lorsqu'il est activé, les onglets non épinglés qui ont été ouverts la dernière fois seront automatiquement fermés à chaque démarrage de l'interface",
"fileTree11": "Nouvelle note quotidienne",
"fileTree12": "Nouveau template de nom de document",
- "fileTree13": "L'extrait de modèle est utilisé par défaut lors de la création d'un nouveau document pour le nommage, par exemple {{maintenant | date \"20060102150405\"}}.",
+ "fileTree13": "L'extrait de modèle est utilisé par défaut lors de la création d'un nouveau document pour le nommage (par exemple {{maintenant | date \"20060102150405\"}}).",
"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",
diff --git a/app/appearance/langs/zh_CHT.json b/app/appearance/langs/zh_CHT.json
index ffdd93530..4f0c236c5 100644
--- a/app/appearance/langs/zh_CHT.json
+++ b/app/appearance/langs/zh_CHT.json
@@ -636,14 +636,14 @@
"fileTree3": "刪除文檔時不需要確認",
"fileTree4": "不啟用時每次刪除文檔都會彈出確認框",
"fileTree5": "塊引新建文檔存放位置",
- "fileTree6": "使用 (( 時新建文檔的存放路徑(例如 /folder1/folder2/,不以 / 開頭則使用當前文檔相對路徑)",
+ "fileTree6": "使用 (( 時新建文檔的存放路徑(例如 /folder1/{{now | date \"20060102150405\"}}/,不以 / 開頭則使用當前文檔相對路徑)",
"fileTree7": "在當前分頁中打開",
"fileTree8": "新打開的文檔分頁將會替換沒有修改過的分頁",
"fileTree9": "啟動時關閉所有頁簽",
"fileTree10": "啟用後每次啟動界面後都會自動關閉上次打開未釘住的頁簽",
"fileTree11": "新建日記",
"fileTree12": "新建文檔名範本",
- "fileTree13": "使用該範本片段進行命名,例如 {{now | date \"20060102150405\"}}",
+ "fileTree13": "使用該範本片段進行命名(例如{{now | date \"20060102150405\"}})",
"fileTree14": "存放路徑(可使用日期格式範本變數,例如 /日記/{{now | date \"2006/01\"}}/{{now | date \"2006-01-02\"}})",
"fileTree15": "範本路徑(例如 dailynote.md,需要將該檔放置於工作空間/data/templates/ 下)",
"fileTree16": "最大列出數量",
diff --git a/app/appearance/langs/zh_CN.json b/app/appearance/langs/zh_CN.json
index ef7f7b851..e95b96cee 100644
--- a/app/appearance/langs/zh_CN.json
+++ b/app/appearance/langs/zh_CN.json
@@ -636,14 +636,14 @@
"fileTree3": "删除文档时不需要确认",
"fileTree4": "不启用时每次删除文档都会弹出确认框",
"fileTree5": "块引新建文档存放位置",
- "fileTree6": "使用 (( 时新建文档的存放路径(例如 /folder1/folder2/,不以 / 开头则使用当前文档相对路径)",
+ "fileTree6": "使用 (( 时新建文档的存放路径(例如 /folder1/{{now | date \"20060102150405\"}}/,不以 / 开头则使用当前文档相对路径)",
"fileTree7": "在当前页签中打开",
"fileTree8": "新打开的文档页签将会替换没有修改过的页签",
"fileTree9": "启动时关闭所有页签",
"fileTree10": "启用后每次启动界面后都会自动关闭上次打开未钉住的页签",
"fileTree11": "新建日记",
"fileTree12": "新建文档名模板",
- "fileTree13": "使用该模板片段进行命名,例如 {{now | date \"20060102150405\"}}",
+ "fileTree13": "使用该模板片段进行命名(例如 {{now | date \"20060102150405\"}})",
"fileTree14": "存放路径(可使用日期格式模板变量,例如 /日记/{{now | date \"2006/01\"}}/{{now | date \"2006-01-02\"}})",
"fileTree15": "模板路径(例如 dailynote.md,需要将该文件放置于工作空间/data/templates/ 下)",
"fileTree16": "最大列出数量",
diff --git a/kernel/api/filetree.go b/kernel/api/filetree.go
index b09600018..4c6dba7e5 100644
--- a/kernel/api/filetree.go
+++ b/kernel/api/filetree.go
@@ -557,7 +557,7 @@ func getDocNameTemplate(c *gin.Context) {
nameTemplate = model.Conf.FileTree.CreateDocNameTemplate
}
- name, err := model.RenderCreateDocNameTemplate(nameTemplate)
+ name, err := model.RenderGoTemplate(nameTemplate)
if nil != err {
ret.Code = -1
ret.Msg = err.Error()
@@ -568,6 +568,36 @@ func getDocNameTemplate(c *gin.Context) {
}
}
+func getRefCreateSavePath(c *gin.Context) {
+ ret := gulu.Ret.NewResult()
+ defer c.JSON(http.StatusOK, ret)
+
+ arg, ok := util.JsonArg(c, ret)
+ if !ok {
+ return
+ }
+
+ notebook := arg["notebook"].(string)
+ box := model.Conf.Box(notebook)
+ refCreateSavePath := model.Conf.FileTree.RefCreateSavePath
+ if nil != box {
+ refCreateSavePath = box.GetConf().RefCreateSavePath
+ }
+ if "" == refCreateSavePath {
+ refCreateSavePath = model.Conf.FileTree.RefCreateSavePath
+ }
+
+ p, err := model.RenderGoTemplate(refCreateSavePath)
+ if nil != err {
+ ret.Code = -1
+ ret.Msg = err.Error()
+ return
+ }
+ ret.Data = map[string]interface{}{
+ "path": p,
+ }
+}
+
func changeSort(c *gin.Context) {
ret := gulu.Ret.NewResult()
defer c.JSON(http.StatusOK, ret)
diff --git a/kernel/api/router.go b/kernel/api/router.go
index 21407a374..9f44b8f24 100644
--- a/kernel/api/router.go
+++ b/kernel/api/router.go
@@ -85,6 +85,7 @@ func ServeAPI(ginServer *gin.Engine) {
ginServer.Handle("POST", "/api/filetree/listDocsByPath", model.CheckAuth, listDocsByPath)
ginServer.Handle("POST", "/api/filetree/getDoc", model.CheckAuth, getDoc)
ginServer.Handle("POST", "/api/filetree/getDocNameTemplate", model.CheckAuth, getDocNameTemplate)
+ ginServer.Handle("POST", "/api/filetree/getRefCreateSavePath", model.CheckAuth, getRefCreateSavePath)
ginServer.Handle("POST", "/api/filetree/changeSort", model.CheckAuth, changeSort)
ginServer.Handle("POST", "/api/filetree/lockFile", model.CheckAuth, lockFile)
ginServer.Handle("POST", "/api/filetree/createDocWithMd", model.CheckAuth, model.CheckReadonly, createDocWithMd)
diff --git a/kernel/go.mod b/kernel/go.mod
index 09a3604a8..1fe2b713b 100644
--- a/kernel/go.mod
+++ b/kernel/go.mod
@@ -6,7 +6,7 @@ require (
github.com/88250/clipboard v0.1.5
github.com/88250/css v0.1.2
github.com/88250/gulu v1.2.3-0.20221117052724-cd06804db798
- github.com/88250/lute v1.7.5-0.20221206095954-a4a95834a327
+ github.com/88250/lute v1.7.5-0.20221211155550-bad4c4be7125
github.com/88250/pdfcpu v0.3.13
github.com/88250/vitess-sqlparser v0.0.0-20210205111146-56a2ded2aba1
github.com/ConradIrwin/font v0.0.0-20210318200717-ce8d41cc0732
diff --git a/kernel/go.sum b/kernel/go.sum
index dd417aaac..e0f59da5e 100644
--- a/kernel/go.sum
+++ b/kernel/go.sum
@@ -17,8 +17,8 @@ github.com/88250/go-sqlite3 v1.14.13-0.20220714142610-fbbda1ee84f5 h1:8HdZozCsXS
github.com/88250/go-sqlite3 v1.14.13-0.20220714142610-fbbda1ee84f5/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
github.com/88250/gulu v1.2.3-0.20221117052724-cd06804db798 h1:sR/s/Y9wyl79ZRCUERwLPo9zqaB3KhNRodCMTJ4ozEU=
github.com/88250/gulu v1.2.3-0.20221117052724-cd06804db798/go.mod h1:I1qBzsksFL2ciGSuqDE7R3XW4BUMrfDgOvSXEk7FsAI=
-github.com/88250/lute v1.7.5-0.20221206095954-a4a95834a327 h1:qT7A7AUVLuqZOWzhLKtJcZ8MPIiqqmX64M+YoYhYnDU=
-github.com/88250/lute v1.7.5-0.20221206095954-a4a95834a327/go.mod h1:cEoBGi0zArPqAsp0MdG9SKinvH/xxZZWXU7sRx8vHSA=
+github.com/88250/lute v1.7.5-0.20221211155550-bad4c4be7125 h1:zwReaqEwPREiGHHwcAYNTPNZiW8NF5FjKLv+R3wZLZo=
+github.com/88250/lute v1.7.5-0.20221211155550-bad4c4be7125/go.mod h1:cEoBGi0zArPqAsp0MdG9SKinvH/xxZZWXU7sRx8vHSA=
github.com/88250/pdfcpu v0.3.13 h1:touMWMZkCGalMIbEg9bxYp7rETM+zwb9hXjwhqi4I7Q=
github.com/88250/pdfcpu v0.3.13/go.mod h1:S5YT38L/GCjVjmB4PB84PymA1qfopjEhfhTNQilLpv4=
github.com/88250/vitess-sqlparser v0.0.0-20210205111146-56a2ded2aba1 h1:48T899JQDwyyRu9yXHePYlPdHtpJfrJEUGBMH3SMBWY=
diff --git a/kernel/model/file.go b/kernel/model/file.go
index 577e3d628..718589593 100644
--- a/kernel/model/file.go
+++ b/kernel/model/file.go
@@ -1335,7 +1335,7 @@ func CreateDailyNote(boxID string) (p string, existed bool, err error) {
return
}
- hPath, err := RenderCreateDocNameTemplate(boxConf.DailyNoteSavePath)
+ hPath, err := RenderGoTemplate(boxConf.DailyNoteSavePath)
if nil != err {
return
}
diff --git a/kernel/model/template.go b/kernel/model/template.go
index 111916218..f129f4ac5 100644
--- a/kernel/model/template.go
+++ b/kernel/model/template.go
@@ -41,8 +41,8 @@ import (
"github.com/siyuan-note/siyuan/kernel/sql"
)
-func RenderCreateDocNameTemplate(nameTemplate string) (ret string, err error) {
- tpl, err := template.New("").Funcs(sprig.TxtFuncMap()).Parse(nameTemplate)
+func RenderGoTemplate(templateContent string) (ret string, err error) {
+ tpl, err := template.New("").Funcs(sprig.TxtFuncMap()).Parse(templateContent)
if nil != err {
return "", errors.New(fmt.Sprintf(Conf.Language(44), err.Error()))
}