From ce544d2dfc931d3e6fda9c93e65fb6c1609ba91c Mon Sep 17 00:00:00 2001 From: pengzhanbo Date: Fri, 26 Jul 2024 16:46:05 +0800 Subject: [PATCH] feat(theme): add support disable `blog` --- theme/src/client/composables/langs.ts | 3 +- .../node/autoFrontmatter/resolveOptions.ts | 56 ++++++++++--------- theme/src/node/config/resolveThemeData.ts | 32 ++++++----- theme/src/node/prepare/prepareBlogData.ts | 6 ++ theme/src/node/setupPages.ts | 3 + theme/src/shared/options/locale.ts | 4 +- 6 files changed, 59 insertions(+), 45 deletions(-) diff --git a/theme/src/client/composables/langs.ts b/theme/src/client/composables/langs.ts index 994b1149..7aee9516 100644 --- a/theme/src/client/composables/langs.ts +++ b/theme/src/client/composables/langs.ts @@ -29,8 +29,9 @@ export function useLangs({ const { notFound, path } = resolveRoute(targetPath) if (!notFound) return path + const blog = theme.value.blog - if (isBlogPost.value) + if (isBlogPost.value && blog !== false) return withBase(blog?.link || normalizeLink(locale, 'blog/')) const sidebarList = sidebar.value diff --git a/theme/src/node/autoFrontmatter/resolveOptions.ts b/theme/src/node/autoFrontmatter/resolveOptions.ts index c417240b..35947d59 100644 --- a/theme/src/node/autoFrontmatter/resolveOptions.ts +++ b/theme/src/node/autoFrontmatter/resolveOptions.ts @@ -194,34 +194,36 @@ export function resolveOptions( include: '**/{readme,README,index}.md', frontmatter: {}, }, - { - include: localeOptions.blog?.include ?? ['**/*.md'], - frontmatter: { - ...options.title !== false - ? { - title(title: string, { relativePath }) { - if (title) - return title - const basename = path.basename(relativePath || '', '.md') - return basename - }, - } as AutoFrontmatterObject - : undefined, - ...baseFrontmatter, - ...options.permalink !== false - ? { - permalink(permalink: string, { relativePath }) { - if (permalink) - return permalink - const locale = resolveLocale(relativePath) - const prefix = withBase(articlePrefix, locale) + localeOptions.blog !== false + ? { + include: localeOptions.blog?.include ?? ['**/*.md'], + frontmatter: { + ...options.title !== false + ? { + title(title: string, { relativePath }) { + if (title) + return title + const basename = path.basename(relativePath || '', '.md') + return basename + }, + } as AutoFrontmatterObject + : undefined, + ...baseFrontmatter, + ...options.permalink !== false + ? { + permalink(permalink: string, { relativePath }) { + if (permalink) + return permalink + const locale = resolveLocale(relativePath) + const prefix = withBase(articlePrefix, locale) - return normalizePath(`${prefix}/${nanoid()}/`) - }, - } as AutoFrontmatterObject - : undefined, - }, - }, + return normalizePath(`${prefix}/${nanoid()}/`) + }, + } as AutoFrontmatterObject + : undefined, + }, + } + : '', { include: '*', diff --git a/theme/src/node/config/resolveThemeData.ts b/theme/src/node/config/resolveThemeData.ts index 1484be1a..a8f025e4 100644 --- a/theme/src/node/config/resolveThemeData.ts +++ b/theme/src/node/config/resolveThemeData.ts @@ -35,8 +35,6 @@ export function resolveThemeData(app: App, options: PlumeThemeLocaleOptions): Pl } }) - const blog = options.blog || {} - const blogLink = blog.link || '/blog/' entries(options.locales || {}).forEach(([locale, opt]) => { // 注入预设 导航栏 // home | blog | tags | archives @@ -47,21 +45,25 @@ export function resolveThemeData(app: App, options: PlumeThemeLocaleOptions): Pl text: PRESET_LOCALES[localePath].home, link: locale, }] - navbar.push({ - text: PRESET_LOCALES[localePath].blog, - link: withBase(blogLink, locale), - }) - if (blog.tags !== false) { + if (options.blog !== false) { + const blog = options.blog || {} + const blogLink = blog.link || '/blog/' navbar.push({ - text: PRESET_LOCALES[localePath].tag, - link: withBase(blog.tagsLink || `${blogLink}/tags/`, locale), - }) - } - if (blog.archives !== false) { - navbar.push({ - text: PRESET_LOCALES[localePath].archive, - link: withBase(blog.archivesLink || `${blogLink}/archives/`, locale), + text: PRESET_LOCALES[localePath].blog, + link: withBase(blogLink, locale), }) + if (blog.tags !== false) { + navbar.push({ + text: PRESET_LOCALES[localePath].tag, + link: withBase(blog.tagsLink || `${blogLink}/tags/`, locale), + }) + } + if (blog.archives !== false) { + navbar.push({ + text: PRESET_LOCALES[localePath].archive, + link: withBase(blog.archivesLink || `${blogLink}/archives/`, locale), + }) + } } themeData.locales![locale].navbar = navbar diff --git a/theme/src/node/prepare/prepareBlogData.ts b/theme/src/node/prepare/prepareBlogData.ts index c563a048..ee8531ac 100644 --- a/theme/src/node/prepare/prepareBlogData.ts +++ b/theme/src/node/prepare/prepareBlogData.ts @@ -25,6 +25,12 @@ export async function preparedBlogData( localeOptions: PlumeThemeLocaleOptions, encrypt?: PlumeThemeEncrypt, ): Promise { + if (localeOptions.blog === false) { + const content = resolveContent(app, { name: 'blogPostData', content: [] }) + await writeTemp(app, 'internal/blogData.js', content) + return + } + const start = performance.now() const blog = localeOptions.blog || {} diff --git a/theme/src/node/setupPages.ts b/theme/src/node/setupPages.ts index 3beb8c93..7892cff4 100644 --- a/theme/src/node/setupPages.ts +++ b/theme/src/node/setupPages.ts @@ -18,6 +18,9 @@ export async function setupPage( app: App, localeOption: PlumeThemeLocaleOptions, ) { + if (localeOption.blog === false) + return + const pageList: Promise[] = [] const locales = localeOption.locales || {} const rootPath = getRootLangPath(app) diff --git a/theme/src/shared/options/locale.ts b/theme/src/shared/options/locale.ts index 47af52a4..97f09d65 100644 --- a/theme/src/shared/options/locale.ts +++ b/theme/src/shared/options/locale.ts @@ -64,7 +64,7 @@ export interface PlumeThemeLocaleData extends LocaleData { /** * 博客配置 */ - blog?: PlumeThemeBlog + blog?: false | PlumeThemeBlog /** * 文章链接前缀 @@ -274,7 +274,7 @@ export interface PlumeThemeLocaleData extends LocaleData { encryptPlaceholder?: string } -/** =========================== Avatar ================================ */ +/** =========================== Profile ================================ */ /** * 个人资料