From da642674329a08df838e9538089f80a0e92a1c1b Mon Sep 17 00:00:00 2001 From: pengzhanbo Date: Fri, 27 Sep 2024 08:41:27 +0800 Subject: [PATCH] feat(theme): add support frontmatter `excerpt` for blog post, close #218 (#224) --- theme/src/node/prepare/prepareBlogData.ts | 19 ++++++++++++------- theme/src/shared/frontmatter/post.ts | 17 ++++++++++++++++- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/theme/src/node/prepare/prepareBlogData.ts b/theme/src/node/prepare/prepareBlogData.ts index 8c125b9b..752bf67e 100644 --- a/theme/src/node/prepare/prepareBlogData.ts +++ b/theme/src/node/prepare/prepareBlogData.ts @@ -80,14 +80,19 @@ export async function preparedBlogData( data.encrypt = true } - if (page.contentRendered.includes(EXCERPT_SPLIT)) { - const contents = page.contentRendered.split(EXCERPT_SPLIT) - let excerpt = contents[0] - // 删除摘要中的标题 - excerpt = excerpt.replace(HEADING_RE, '') - data.excerpt = excerpt + const fmExcerpt = page.frontmatter.excerpt + if (fmExcerpt !== false) { + if (typeof fmExcerpt === 'string') { + data.excerpt = fmExcerpt + } + else if (page.contentRendered.includes(EXCERPT_SPLIT)) { + const contents = page.contentRendered.split(EXCERPT_SPLIT) + let excerpt = contents[0] + // 删除摘要中的标题 + excerpt = excerpt.replace(HEADING_RE, '') + data.excerpt = excerpt + } } - return data }) diff --git a/theme/src/shared/frontmatter/post.ts b/theme/src/shared/frontmatter/post.ts index 65a83b19..a73df9ab 100644 --- a/theme/src/shared/frontmatter/post.ts +++ b/theme/src/shared/frontmatter/post.ts @@ -2,9 +2,19 @@ import type { BlogPostCover } from 'vuepress-theme-plume' import type { PlumeThemePageFrontmatter } from './page.js' export interface PlumeThemePostFrontmatter extends PlumeThemePageFrontmatter { + /** + * 创建时间 + */ createTime?: string - author?: string + + /** + * 文章标签 + */ tags?: string[] + + /** + * 是否置顶 + */ sticky?: boolean | number /** * @deprecated 使用 `draft` 代替 @@ -23,4 +33,9 @@ export interface PlumeThemePostFrontmatter extends PlumeThemePageFrontmatter { * 文章封面图 */ cover?: string | BlogPostCover + + /** + * 是否展示文章摘要,传入 string 时为自定义摘要,此时 `` 无效 + */ + excerpt?: boolean | string }