From 9e37aa7bfb5e49eb291899bbb5a277ef0cec6fe2 Mon Sep 17 00:00:00 2001 From: delphi Date: Wed, 26 Feb 2025 18:44:11 +0800 Subject: [PATCH] TemplateInstructions --- src/main.ts | 78 ++++++++++++++++++++++++------------- src/templateInstructions.ts | 76 ++++++++++++++++++++++++++++++++++++ styles.css | 43 ++++++++++++++++++++ 3 files changed, 171 insertions(+), 26 deletions(-) create mode 100644 src/templateInstructions.ts diff --git a/src/main.ts b/src/main.ts index 3a5ddfd..96336df 100644 --- a/src/main.ts +++ b/src/main.ts @@ -3,6 +3,7 @@ import { CuboxApi, CuboxApiOptions } from './cuboxApi'; import { TemplateProcessor } from './templateProcessor'; import { formatISODateTime, getCurrentFormattedTime } from './utils'; import { FolderSelectModal } from './folderSelectModal'; +import { filenameTemplateInstructions, metadataTemplateInstructions, contentTemplateInstructions } from './templateInstructions'; interface CuboxSyncSettings { domain: string; // 可以是 'cubox.cc' | 'cubox.pro' | '' @@ -397,31 +398,69 @@ class CuboxSyncSettingTab extends PluginSettingTab { await this.plugin.saveSettings(); })); + // 更新文件名模板设置 + const filenameInstructionsFragment = document.createRange().createContextualFragment(filenameTemplateInstructions); + new Setting(containerEl) .setName('File Name Template') - .setDesc('Enter the file name when the data is stored') + .setDesc(filenameInstructionsFragment) .addText(text => text .setPlaceholder('Enter file name template') .setValue(this.plugin.settings.filenameTemplate) .onChange(async (value) => { this.plugin.settings.filenameTemplate = value; await this.plugin.saveSettings(); + })) + .addButton(button => button + .setIcon('reset') + .setTooltip('Reset to default') + .onClick(async () => { + this.plugin.settings.filenameTemplate = DEFAULT_SETTINGS.filenameTemplate; + await this.plugin.saveSettings(); + this.display(); // 刷新显示 })); + + // 为参考链接添加事件监听器 + containerEl.querySelectorAll('.reference-link').forEach(el => { + el.addEventListener('click', (e) => { + e.preventDefault(); + // 这里可以添加打开参考文档的逻辑 + }); + }); + + // 更新前置元数据模板设置 + const metadataInstructionsFragment = document.createRange().createContextualFragment(metadataTemplateInstructions); new Setting(containerEl) - .setName('Front Matter') - .setDesc('Enter the metadata') + .setName('Metadata Template') + .setDesc(metadataInstructionsFragment) .addTextArea(text => text .setPlaceholder('Enter front matter template') .setValue(this.plugin.settings.frontMatterTemplate) .onChange(async (value) => { this.plugin.settings.frontMatterTemplate = value; await this.plugin.saveSettings(); + }) + // 设置文本区域的大小 + .then(textArea => { + textArea.inputEl.rows = 6; + textArea.inputEl.cols = 50; + })) + .addButton(button => button + .setIcon('reset') + .setTooltip('Reset to default') + .onClick(async () => { + this.plugin.settings.frontMatterTemplate = DEFAULT_SETTINGS.frontMatterTemplate; + await this.plugin.saveSettings(); + this.display(); // 刷新显示 })); + // 更新内容模板设置 + const contentInstructionsFragment = document.createRange().createContextualFragment(contentTemplateInstructions); + new Setting(containerEl) .setName('Content Template') - .setDesc('Enter the file name when the data is stored') + .setDesc(contentInstructionsFragment) .addTextArea(text => text .setPlaceholder('Enter content template') .setValue(this.plugin.settings.contentTemplate) @@ -431,29 +470,16 @@ class CuboxSyncSettingTab extends PluginSettingTab { }) // 设置文本区域的大小 .then(textArea => { - textArea.inputEl.rows = 8; // 设置行数 - textArea.inputEl.cols = 50; // 设置列数 - })); - - new Setting(containerEl) - .setName('Highlight Text in Content') - .setDesc('Highlight text in articles') - .addToggle(toggle => toggle - .setValue(this.plugin.settings.highlightInContent) - .onChange(async (value) => { - this.plugin.settings.highlightInContent = value; - await this.plugin.saveSettings(); - })); - - new Setting(containerEl) - .setName('Date Format') - .setDesc('Enter the xxxxx, 0 means manual sync') - .addText(text => text - .setPlaceholder('Enter date format') - .setValue(this.plugin.settings.dateFormat) - .onChange(async (value) => { - this.plugin.settings.dateFormat = value; + textArea.inputEl.rows = 8; + textArea.inputEl.cols = 50; + })) + .addButton(button => button + .setIcon('reset') + .setTooltip('Reset to default') + .onClick(async () => { + this.plugin.settings.contentTemplate = DEFAULT_SETTINGS.contentTemplate; await this.plugin.saveSettings(); + this.display(); // 刷新显示 })); // 状态部分 diff --git a/src/templateInstructions.ts b/src/templateInstructions.ts new file mode 100644 index 0000000..5f62c48 --- /dev/null +++ b/src/templateInstructions.ts @@ -0,0 +1,76 @@ +export const filenameTemplateInstructions = ` +Enter template for creating synced article file name. + +
+
Available variables
+ +
For more, refer to reference.
+
+`; + +export const metadataTemplateInstructions = ` +Enter the metadata separated by comma. you can also use custom aliases in the format of metadata::alias. + +
+
Available variables
+ +
For more, refer to reference.
+
+`; + +export const contentTemplateInstructions = ` +Enter template for creating synced article content. + +
+
Available variables
+ +
For more, refer to reference.
+
+`; \ No newline at end of file diff --git a/styles.css b/styles.css index 77b400f..7001903 100644 --- a/styles.css +++ b/styles.css @@ -36,3 +36,46 @@ If your plugin does not need CSS, delete this file. background-color: var(--interactive-accent); color: var(--text-on-accent); } + +/* 变量列表样式优化 */ +.cubox-variables-container { + margin: 20px 0; + color: var(--text-muted); +} + +.cubox-variables-title { + font-weight: 500; + margin-bottom: 8px; + color: var(--text-normal); +} + +.cubox-variables-list { + margin: 0; + padding-left: 20px; + list-style-type: disc; +} + +.cubox-variables-list li { + margin-bottom: 4px; + line-height: 1.5; +} + +.highlight-sublist { + margin-top: 4px; + padding-left: 20px; + list-style-type: circle; +} + +.cubox-reference { + margin-top: 10px; + font-size: 0.9em; +} + +.reference-link { + color: var(--text-accent); + text-decoration: none; +} + +.reference-link:hover { + text-decoration: underline; +} \ No newline at end of file