From 0c97380a32a6f1f1833dc12aae5d07f93d4aa9e7 Mon Sep 17 00:00:00 2001 From: wood chen Date: Wed, 19 Mar 2025 13:16:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=B7=B3=E8=BF=87=E4=B8=80?= =?UTF-8?q?=E7=BA=A7=E6=A0=87=E9=A2=98=E9=80=89=E9=A1=B9=EF=BC=8C=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E5=8F=91=E5=B8=83=E5=88=B0=20Discourse=20=E7=9A=84?= =?UTF-8?q?=E5=86=85=E5=AE=B9=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在配置中添加 skipH1 字段,默认为 false - 更新发布逻辑,支持根据设置跳过 Markdown 中的 H1 标题 - 添加相应的国际化支持,包括英文和中文描述 --- src/config.ts | 16 +++++++++++++++- src/i18n/en.ts | 2 ++ src/i18n/zh-CN.ts | 2 ++ src/main.ts | 6 ++++++ 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/config.ts b/src/config.ts index 3efc857..e10fa1a 100644 --- a/src/config.ts +++ b/src/config.ts @@ -7,13 +7,15 @@ export interface DiscourseSyncSettings { apiKey: string; disUser: string; category: number; + skipH1: boolean; } export const DEFAULT_SETTINGS: DiscourseSyncSettings = { baseUrl: "https://yourforum.example.com", apiKey: "apikey", disUser: "DiscourseUsername", - category: 1 + category: 1, + skipH1: false }; export class DiscourseSyncSettingsTab extends PluginSettingTab { @@ -65,6 +67,18 @@ export class DiscourseSyncSettingsTab extends PluginSettingTab { }), ); + new Setting(containerEl) + .setName(t('SKIP_H1')) + .setDesc(t('SKIP_H1_DESC')) + .addToggle((toggle) => + toggle + .setValue(this.plugin.settings.skipH1) + .onChange(async (value) => { + this.plugin.settings.skipH1 = value; + await this.plugin.saveSettings(); + }) + ); + new Setting(containerEl) .setName(t('TEST_API_KEY')) .setDesc('') diff --git a/src/i18n/en.ts b/src/i18n/en.ts index 627dfc3..d3223a6 100644 --- a/src/i18n/en.ts +++ b/src/i18n/en.ts @@ -6,6 +6,8 @@ export default { 'API_KEY_DESC': "API key created in '/admin/api/keys'", 'USERNAME': 'Username', 'USERNAME_DESC': 'Your Discourse username', + 'SKIP_H1': 'Skip First Heading', + 'SKIP_H1_DESC': 'Skip the first heading (H1) when publishing to Discourse', 'TEST_API_KEY': 'Test Connection', 'TESTING': 'Testing...', 'API_TEST_SUCCESS': 'Connection successful! API key is valid', diff --git a/src/i18n/zh-CN.ts b/src/i18n/zh-CN.ts index be1cffd..47125f1 100644 --- a/src/i18n/zh-CN.ts +++ b/src/i18n/zh-CN.ts @@ -6,6 +6,8 @@ export default { 'API_KEY_DESC': "在'/admin/api/keys'中创建的 API 密钥", 'USERNAME': '用户名', 'USERNAME_DESC': 'Discourse 用户名', + 'SKIP_H1': '跳过一级标题', + 'SKIP_H1_DESC': '发布到 Discourse 时跳过笔记中的一级标题', 'TEST_API_KEY': '测试连接', 'TESTING': '测试中...', 'API_TEST_SUCCESS': '连接成功!API密钥有效', diff --git a/src/main.ts b/src/main.ts index baed684..1b61b42 100644 --- a/src/main.ts +++ b/src/main.ts @@ -182,6 +182,12 @@ export default class PublishToDiscourse extends Plugin implements PluginInterfac // 替换嵌入引用为Markdown格式 content = this.embedHandler.replaceEmbedReferences(content, embedReferences, uploadedUrls); + // 如果启用了"跳过一级标题"选项,则删除所有H1标题 + if (this.settings.skipH1) { + // 匹配Markdown中的所有H1标题(# 标题) + content = content.replace(/^\s*# [^\n]+\n?/gm, ''); + } + // 获取Front Matter const frontMatter = getFrontMatter(this.activeFile.content); const postId = frontMatter?.discourse_post_id;