🎨 新建文档名模板 改为 新建文档存放位置 并支持设置路径 https://github.com/siyuan-note/siyuan/issues/4494

This commit is contained in:
Liang Ding 2023-02-03 20:47:43 +08:00
parent f3aa37f21c
commit 551cbb8c18
No known key found for this signature in database
GPG Key ID: 136F30F901A2231D
14 changed files with 38 additions and 41 deletions

View File

@ -655,14 +655,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 <code class='fn__code'>((</code>, the save path of the new document (for example, <code class='fn__code'>/folder1/{{now | date \"20060102150405\"}}/</code>, the relative path of the current doc is used if it does not start with /)",
"fileTree6": "When using <code class='fn__code'>((</code>, the save path of the new document (for example, <code class='fn__code'>/folder1/{{now | date \"20060102150405\"}}/</code>, the relative path of the current doc is used if it does not start with <code class='fn__code'>/</code>)",
"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 <code class='fn__code'>{{now | date \"20060102150405\"}}</code>)",
"fileTree12": "New document save location",
"fileTree13": "When using <code class='fn__code'>Ctrl+N</code>, the save path of the new document (for example, <code class='fn__code'>/folder1/{{now | date \"20060102150405\"}}</code>)",
"fileTree14": "Save path (support date format template variables, such as <code class='fn__code'>/Daily Notes/{{now | date \"2006/01\"}}/{{now | date \"2006-01-02\"}}</code>)",
"fileTree15": "Template path (for example, <code class='fn__code'>dailynote.md</code>, the file needs to be placed under the workspace/data/templates/)",
"fileTree16": "Maximum number to list",

View File

@ -655,14 +655,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 <code class='fn__code'>((</code>, la ruta de guardado del nuevo documento (por ejemplo, <code class='fn__code'>/carpeta1/{{now | date \"20060102150405\"}}/</code>, se utiliza la ruta relativa del documento actual si no empieza por /)",
"fileTree6": "Al utilizar <code class='fn__code'>((</code>, la ruta de guardado del nuevo documento (por ejemplo, <code class='fn__code'>/carpeta1/{{now | date \"20060102150405\"}}/</code>, se utiliza la ruta relativa del documento actual si no empieza por <code class='fn__code'>/</code>)",
"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 <code class='fn__code'>{{now | date \"20060102150405\"}}</code>)",
"fileTree12": "Nueva ubicación para guardar el documento",
"fileTree13": "Al usar <code class='fn__code'>Ctrl+N</code>, la ruta de guardado del nuevo documento (por ejemplo, <code class='fn__code'>/folder1/{{now | date \"20060102150405\"}}</código>)",
"fileTree14": "Ruta de guardado (admite variables de plantilla de formato de fecha, como <code class='fn__code'>/Notas del día/{{now | date \"2006/01\"}}/{{now | date \"2006-01-02\"}}</code>)",
"fileTree15": "Ruta de la plantilla (por ejemplo, <code class='fn__code'>dailynote.md</code>, el archivo debe colocarse en el espacio de trabajo/data/templates/)",
"fileTree16": "Número máximo a listar",

View File

@ -655,14 +655,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 <code class='fn__code'>((</code>, le chemin d'enregistrement du nouveau document (par exemple, <code class='fn__code'>/dossier1/{{now | date \"20060102150405\"}}/</code>, le chemin relatif du doc actuel est utilisé s'il ne commence pas par /).",
"fileTree6": "Lors de l'utilisation de <code class='fn__code'>((</code>, le chemin d'enregistrement du nouveau document (par exemple, <code class='fn__code'>/dossier1/{{now | date \"20060102150405\"}}/</code>, le chemin relatif du doc actuel est utilisé s'il ne commence pas par <code class='fn__code'>/</code>).",
"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 <code class='fn__code'>{{maintenant | date \"20060102150405\"}}</code>).",
"fileTree12": "Emplacement de sauvegarde du nouveau document",
"fileTree13": "Lorsque vous utilisez <code class='fn__code'>Ctrl+N</code>, le chemin d'enregistrement du nouveau document (par exemple, <code class='fn__code'>/folder1/{{now | date \"20060102150405\"}}</code>)",
"fileTree14": "Chemin d'enregistrement (prise en charge des variables de modèle de format de date, telles que <code class='fn__code'>/Notes quotidiennes/{{mais | date \"2006/01\"}}/{{mais | date \"2006-01-02\"}}</code>)",
"fileTree15": "Chemin du modèle (par exemple, <code class='fn__code'>dailynote.md</code>, le fichier doit être placé sous \"l'espace de travail/data/templates/\")",
"fileTree16": "Nombre maximum à lister",

View File

@ -655,14 +655,14 @@
"fileTree3": "刪除文檔時不需要確認",
"fileTree4": "不啟用時每次刪除文檔都會彈出確認框",
"fileTree5": "塊引新建文檔存放位置",
"fileTree6": "使用 <code class='fn__code'>((</code> 時新建文檔的存放路徑(例如 <code class='fn__code'>/folder1/{{now | date \"20060102150405\"}}/</code>,不以 / 開頭則使用當前文檔相對路徑)",
"fileTree6": "使用 <code class='fn__code'>((</code> 時新建文檔的存放路徑(例如 <code class='fn__code'>/folder1/{{now | date \"20060102150405\"}}/</code>,不以 <code class='fn__code'>/</code> 開頭則使用當前文檔相對路徑)",
"fileTree7": "在當前分頁中打開",
"fileTree8": "新打開的文檔分頁將會替換沒有修改過的分頁",
"fileTree9": "啟動時關閉所有頁籤",
"fileTree10": "啟用後每次啟動界面後都會自動關閉上次打開未釘住的頁籤",
"fileTree11": "新建日記",
"fileTree12": "新建文檔名範本",
"fileTree13": "使用該範本片段進行命名(例如<code class='fn__code'>{{now | date \"20060102150405\"}}</code>",
"fileTree12": "新建文檔存放位置",
"fileTree13": "使用 <code class='fn__code'>Ctrl+N</code> 時新建文檔的存放路徑(例如 <code class='fn__code'>/folder1/{{now | date \"20060102150405\"}}</code>",
"fileTree14": "存放路徑(可使用日期格式範本變數,例如 <code class='fn__code'>/日記/{{now | date \"2006/01\"}}/{{now | date \"2006-01-02\"}}</code>",
"fileTree15": "範本路徑(例如 <code class='fn__code'>dailynote.md</code>,需要將該檔放置於工作空間/data/templates/ 下)",
"fileTree16": "最大列出數量",

View File

@ -655,14 +655,14 @@
"fileTree3": "删除文档时不需要确认",
"fileTree4": "不启用时每次删除文档都会弹出确认框",
"fileTree5": "块引新建文档存放位置",
"fileTree6": "使用 <code class='fn__code'>((</code> 时新建文档的存放路径(例如 <code class='fn__code'>/folder1/{{now | date \"20060102150405\"}}/</code>,不以 / 开头则使用当前文档相对路径)",
"fileTree6": "使用 <code class='fn__code'>((</code> 时新建文档的存放路径(例如 <code class='fn__code'>/folder1/{{now | date \"20060102150405\"}}/</code>,不以 <code class='fn__code'>/</code> 开头则使用当前文档相对路径)",
"fileTree7": "在当前页签中打开",
"fileTree8": "新打开的文档页签将会替换没有修改过的页签",
"fileTree9": "启动时关闭所有页签",
"fileTree10": "启用后每次启动界面后都会自动关闭上次打开未钉住的页签",
"fileTree11": "新建日记",
"fileTree12": "新建文档名模板",
"fileTree13": "使用该模板片段进行命名(例如 <code class='fn__code'>{{now | date \"20060102150405\"}}</code>",
"fileTree12": "新建文档存放位置",
"fileTree13": "使用 <code class='fn__code'>Ctrl+N</code> 时新建文档的存放路径(例如 <code class='fn__code'>/folder1/{{now | date \"20060102150405\"}}</code>",
"fileTree14": "存放路径(可使用日期格式模板变量,例如 <code class='fn__code'>/日记/{{now | date \"2006/01\"}}/{{now | date \"2006-01-02\"}}</code>",
"fileTree15": "模板路径(例如 <code class='fn__code'>dailynote.md</code>,需要将该文件放置于工作空间/data/templates/ 下)",
"fileTree16": "最大列出数量",

View File

@ -49,7 +49,7 @@ export const fileTree = {
<div class="b3-label__text">${window.siyuan.languages.fileTree13}</div>
</div>
<span class="fn__space"></span>
<input class="b3-text-field fn__flex-center fn__size200" id="createDocNameTemplate" value="">
<input class="b3-text-field fn__flex-center fn__size200" id="docCreateSavePath" value="">
</label>
<label class="b3-label fn__flex config__item">
<div class="fn__flex-1">
@ -92,7 +92,7 @@ export const fileTree = {
sort: window.siyuan.config.fileTree.sort,
alwaysSelectOpenedFile: (fileTree.element.querySelector("#alwaysSelectOpenedFile") as HTMLInputElement).checked,
refCreateSavePath: (fileTree.element.querySelector("#refCreateSavePath") as HTMLInputElement).value,
createDocNameTemplate: (fileTree.element.querySelector("#createDocNameTemplate") as HTMLInputElement).value,
docCreateSavePath: (fileTree.element.querySelector("#docCreateSavePath") as HTMLInputElement).value,
openFilesUseCurrentTab: (fileTree.element.querySelector("#openFilesUseCurrentTab") as HTMLInputElement).checked,
closeTabsOnStart: (fileTree.element.querySelector("#closeTabsOnStart") as HTMLInputElement).checked,
allowCreateDeeper: (fileTree.element.querySelector("#allowCreateDeeper") as HTMLInputElement).checked,
@ -104,7 +104,7 @@ export const fileTree = {
});
},
bindEvent: () => {
(fileTree.element.querySelector("#createDocNameTemplate") as HTMLInputElement).value = window.siyuan.config.fileTree.createDocNameTemplate;
(fileTree.element.querySelector("#docCreateSavePath") as HTMLInputElement).value = window.siyuan.config.fileTree.docCreateSavePath;
(fileTree.element.querySelector("#refCreateSavePath") as HTMLInputElement).value = window.siyuan.config.fileTree.refCreateSavePath;
fileTree.element.querySelectorAll("input").forEach((item) => {
item.addEventListener("change", () => {

View File

@ -950,7 +950,7 @@ class="b3-list-item b3-list-item--hide-action" data-path="${item.path}">
sort: window.siyuan.config.fileTree.sort,
alwaysSelectOpenedFile: window.siyuan.config.fileTree.alwaysSelectOpenedFile,
refCreateSavePath: window.siyuan.config.fileTree.refCreateSavePath,
createDocNameTemplate: window.siyuan.config.fileTree.createDocNameTemplate,
docCreateSavePath: window.siyuan.config.fileTree.docCreateSavePath,
openFilesUseCurrentTab: window.siyuan.config.fileTree.openFilesUseCurrentTab,
maxListCount: window.siyuan.config.fileTree.maxListCount,
}, () => {

View File

@ -10,7 +10,7 @@ export const onGetnotebookconf = (data: {
box: string,
conf: {
refCreateSavePath: string
createDocNameTemplate: string
docCreateSavePath: string
dailyNoteSavePath: string
dailyNoteTemplatePath: string
}
@ -24,7 +24,7 @@ export const onGetnotebookconf = (data: {
<div class="fn__hr"></div>
<div class="b3-label__text">${window.siyuan.languages.fileTree13}</div>
<div class="fn__hr"></div>
<input class="b3-text-field fn__flex-center fn__block" id="createDocNameTemplate" value="">
<input class="b3-text-field fn__flex-center fn__block" id="docCreateSavePath" value="">
</div>
<div class="b3-label">
${window.siyuan.languages.fileTree5}
@ -65,8 +65,8 @@ export const onGetnotebookconf = (data: {
});
const dailyNoteSavePathElement = contentElement.querySelector("#dailyNoteSavePath") as HTMLInputElement;
dailyNoteSavePathElement.value = data.conf.dailyNoteSavePath;
const createDocNameTemplateElement = contentElement.querySelector("#createDocNameTemplate") as HTMLInputElement;
createDocNameTemplateElement.value = data.conf.createDocNameTemplate;
const docCreateSavePathElement = contentElement.querySelector("#docCreateSavePath") as HTMLInputElement;
docCreateSavePathElement.value = data.conf.docCreateSavePath;
const refCreateSavePathElement = contentElement.querySelector("#refCreateSavePath") as HTMLInputElement;
refCreateSavePathElement.value = data.conf.refCreateSavePath;
const dailyNoteTemplatePathElement = contentElement.querySelector("#dailyNoteTemplatePath") as HTMLInputElement;
@ -77,7 +77,7 @@ export const onGetnotebookconf = (data: {
notebook: data.box,
conf: {
refCreateSavePath: refCreateSavePathElement.value,
createDocNameTemplate: createDocNameTemplateElement.value,
docCreateSavePath: docCreateSavePathElement.value,
dailyNoteSavePath: dailyNoteSavePathElement.value,
dailyNoteTemplatePath: dailyNoteTemplatePathElement.value,
}

View File

@ -219,7 +219,7 @@ export class MobileFiles extends Model {
sort: window.siyuan.config.fileTree.sort,
alwaysSelectOpenedFile: window.siyuan.config.fileTree.alwaysSelectOpenedFile,
refCreateSavePath: window.siyuan.config.fileTree.refCreateSavePath,
createDocNameTemplate: window.siyuan.config.fileTree.createDocNameTemplate,
docCreateSavePath: window.siyuan.config.fileTree.docCreateSavePath,
openFilesUseCurrentTab: window.siyuan.config.fileTree.openFilesUseCurrentTab,
maxListCount: window.siyuan.config.fileTree.maxListCount,
}, () => {

View File

@ -361,7 +361,7 @@ declare interface IFileTree {
removeDocWithoutConfirm: boolean
allowCreateDeeper: boolean
refCreateSavePath: string
createDocNameTemplate: string
docCreateSavePath: string
sort: number
maxOpenTabCount: number
maxListCount: number

View File

@ -517,7 +517,7 @@ func lockFile(c *gin.Context) {
}
}
func getDocNameTemplate(c *gin.Context) {
func getDocCreateSavePath(c *gin.Context) {
ret := gulu.Ret.NewResult()
defer c.JSON(http.StatusOK, ret)
@ -528,22 +528,22 @@ func getDocNameTemplate(c *gin.Context) {
notebook := arg["notebook"].(string)
box := model.Conf.Box(notebook)
nameTemplate := model.Conf.FileTree.CreateDocNameTemplate
docCreateSavePathTpl := model.Conf.FileTree.DocCreateSavePath
if nil != box {
nameTemplate = box.GetConf().CreateDocNameTemplate
docCreateSavePathTpl = box.GetConf().DocCreateSavePath
}
if "" == nameTemplate {
nameTemplate = model.Conf.FileTree.CreateDocNameTemplate
if "" == docCreateSavePathTpl {
docCreateSavePathTpl = model.Conf.FileTree.DocCreateSavePath
}
name, err := model.RenderGoTemplate(nameTemplate)
path, err := model.RenderGoTemplate(docCreateSavePathTpl)
if nil != err {
ret.Code = -1
ret.Msg = err.Error()
return
}
ret.Data = map[string]interface{}{
"name": name,
"path": path,
}
}

View File

@ -86,7 +86,7 @@ func ServeAPI(ginServer *gin.Engine) {
ginServer.Handle("POST", "/api/filetree/searchDocs", model.CheckAuth, searchDocs)
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/getDocCreateSavePath", model.CheckAuth, getDocCreateSavePath)
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)

View File

@ -22,8 +22,8 @@ type BoxConf struct {
Sort int `json:"sort"` // 排序字段
Icon string `json:"icon"` // 图标
Closed bool `json:"closed"` // 是否处于关闭状态
RefCreateSavePath string `json:"refCreateSavePath"` // 块引时新建文档存储文件夹路径
CreateDocNameTemplate string `json:"createDocNameTemplate"` // 新建文档名模板
RefCreateSavePath string `json:"refCreateSavePath"` // 块引时新建文档存储路径
DocCreateSavePath string `json:"docCreateSavePath"` // 新建文档存储路径
DailyNoteSavePath string `json:"dailyNoteSavePath"` // 新建日记存储路径
DailyNoteTemplatePath string `json:"dailyNoteTemplatePath"` // 新建日记使用的模板路径
}
@ -32,8 +32,6 @@ func NewBoxConf() *BoxConf {
return &BoxConf{
Name: "Untitled",
Closed: true,
RefCreateSavePath: "",
CreateDocNameTemplate: "",
DailyNoteSavePath: "/daily note/{{now | date \"2006/01\"}}/{{now | date \"2006-01-02\"}}",
DailyNoteTemplatePath: "",
}

View File

@ -23,8 +23,8 @@ import (
type FileTree struct {
AlwaysSelectOpenedFile bool `json:"alwaysSelectOpenedFile"` // 是否自动选中当前打开的文件
OpenFilesUseCurrentTab bool `json:"openFilesUseCurrentTab"` // 在当前页签打开文件
RefCreateSavePath string `json:"refCreateSavePath"` // 块引时新建文档存储文件夹路径
CreateDocNameTemplate string `json:"createDocNameTemplate"` // 新建文档名模板
RefCreateSavePath string `json:"refCreateSavePath"` // 块引时新建文档存储路径
DocCreateSavePath string `json:"docCreateSavePath"` // 新建文档存储路径
MaxListCount int `json:"maxListCount"` // 最大列出数量
MaxOpenTabCount int `json:"maxOpenTabCount"` // 最大打开页签数量
AllowCreateDeeper bool `json:"allowCreateDeeper"` // 允许创建超过 7 层深度的子文档
@ -39,7 +39,6 @@ func NewFileTree() *FileTree {
AlwaysSelectOpenedFile: false,
OpenFilesUseCurrentTab: false,
Sort: util.SortModeCustom,
CreateDocNameTemplate: "",
MaxListCount: 512,
MaxOpenTabCount: 8,
AllowCreateDeeper: false,