From 9d5ce246527dac3eb0af1e4221814f4ac8ebf76d Mon Sep 17 00:00:00 2001 From: Alexey Pyltsyn Date: Fri, 24 Jan 2020 00:20:01 +0300 Subject: [PATCH 1/2] fix(v2): hide read more button on non-truncated posts --- packages/docusaurus-plugin-content-blog/src/blogUtils.ts | 7 ++++--- packages/docusaurus-plugin-content-blog/src/index.ts | 2 +- .../docusaurus-plugin-content-blog/src/markdownLoader.ts | 2 +- packages/docusaurus-plugin-content-blog/src/types.ts | 3 ++- .../src/theme/BlogListPage/index.js | 2 +- 5 files changed, 9 insertions(+), 7 deletions(-) diff --git a/packages/docusaurus-plugin-content-blog/src/blogUtils.ts b/packages/docusaurus-plugin-content-blog/src/blogUtils.ts index 240ce1cc3a52..b6f3411302af 100644 --- a/packages/docusaurus-plugin-content-blog/src/blogUtils.ts +++ b/packages/docusaurus-plugin-content-blog/src/blogUtils.ts @@ -13,7 +13,7 @@ import {PluginOptions, BlogPost, DateLink} from './types'; import {parse, normalizeUrl, aliasedSitePath} from '@docusaurus/utils'; import {LoadContext} from '@docusaurus/types'; -export function truncate(fileString: string, truncateMarker: RegExp | string) { +export function truncate(fileString: string, truncateMarker: RegExp) { return fileString.split(truncateMarker, 1).shift()!; } @@ -85,7 +85,7 @@ export async function generateBlogPosts( {siteConfig, siteDir}: LoadContext, options: PluginOptions, ) { - const {include, routeBasePath} = options; + const {include, routeBasePath, truncateMarker} = options; if (!fs.existsSync(blogDir)) { return null; @@ -105,7 +105,7 @@ export async function generateBlogPosts( const blogFileName = path.basename(relativeSource); const fileString = await fs.readFile(source, 'utf-8'); - const {frontMatter, excerpt} = parse(fileString); + const {frontMatter, content, excerpt} = parse(fileString); let date; // Extract date and title from filename. @@ -137,6 +137,7 @@ export async function generateBlogPosts( date, tags: frontMatter.tags, title: frontMatter.title, + truncated: truncateMarker.test(content), }, }); }), diff --git a/packages/docusaurus-plugin-content-blog/src/index.ts b/packages/docusaurus-plugin-content-blog/src/index.ts index 8fae5da393e0..1ddfcd738768 100644 --- a/packages/docusaurus-plugin-content-blog/src/index.ts +++ b/packages/docusaurus-plugin-content-blog/src/index.ts @@ -41,7 +41,7 @@ const DEFAULT_OPTIONS: PluginOptions = { blogTagsPostsComponent: '@theme/BlogTagsPostsPage', remarkPlugins: [], rehypePlugins: [], - truncateMarker: //, // string or regex + truncateMarker: //, // Regex }; function assertFeedTypes(val: any): asserts val is FeedType { diff --git a/packages/docusaurus-plugin-content-blog/src/markdownLoader.ts b/packages/docusaurus-plugin-content-blog/src/markdownLoader.ts index 97798d473bf9..6c3dd8127be8 100644 --- a/packages/docusaurus-plugin-content-blog/src/markdownLoader.ts +++ b/packages/docusaurus-plugin-content-blog/src/markdownLoader.ts @@ -12,7 +12,7 @@ import {truncate} from './blogUtils'; export = function(fileString: string) { const callback = this.async(); - const {truncateMarker}: {truncateMarker: RegExp | string} = getOptions(this); + const {truncateMarker}: {truncateMarker: RegExp} = getOptions(this); let finalContent = fileString; diff --git a/packages/docusaurus-plugin-content-blog/src/types.ts b/packages/docusaurus-plugin-content-blog/src/types.ts index 33167ef3ae29..d9bb5a40d9c3 100644 --- a/packages/docusaurus-plugin-content-blog/src/types.ts +++ b/packages/docusaurus-plugin-content-blog/src/types.ts @@ -30,7 +30,7 @@ export interface PluginOptions { blogTagsPostsComponent: string; remarkPlugins: string[]; rehypePlugins: string[]; - truncateMarker: RegExp | string; + truncateMarker: RegExp; feedOptions?: { type: FeedType; title?: string; @@ -79,6 +79,7 @@ export interface MetaData { title: string; prevItem?: Paginator; nextItem?: Paginator; + truncated: boolean; } export interface Paginator { diff --git a/packages/docusaurus-theme-classic/src/theme/BlogListPage/index.js b/packages/docusaurus-theme-classic/src/theme/BlogListPage/index.js index aaa60ca9513f..1fe2d3e4b3aa 100644 --- a/packages/docusaurus-theme-classic/src/theme/BlogListPage/index.js +++ b/packages/docusaurus-theme-classic/src/theme/BlogListPage/index.js @@ -24,7 +24,7 @@ function BlogListPage(props) { key={BlogPostContent.metadata.permalink} frontMatter={BlogPostContent.frontMatter} metadata={BlogPostContent.metadata} - truncated> + truncated={BlogPostContent.metadata.truncated}> ))} From cf254b078362328b1e42582718d1d237782dfbf2 Mon Sep 17 00:00:00 2001 From: Alexey Pyltsyn Date: Fri, 24 Jan 2020 00:53:47 +0300 Subject: [PATCH 2/2] Update tests --- .../docusaurus-plugin-content-blog/src/__tests__/index.test.ts | 3 +++ packages/docusaurus-plugin-content-blog/src/blogUtils.ts | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/docusaurus-plugin-content-blog/src/__tests__/index.test.ts b/packages/docusaurus-plugin-content-blog/src/__tests__/index.test.ts index 9dfe8f93278f..afad6bffc5da 100644 --- a/packages/docusaurus-plugin-content-blog/src/__tests__/index.test.ts +++ b/packages/docusaurus-plugin-content-blog/src/__tests__/index.test.ts @@ -57,6 +57,7 @@ describe('loadBlog', () => { permalink: noDatePermalink, title: 'no date', }, + truncated: false, }); expect( blogPosts.find(v => v.metadata.title === 'Happy 1st Birthday Slash!') @@ -76,6 +77,7 @@ describe('loadBlog', () => { permalink: '/blog/2019/01/01/date-matter', title: 'date-matter', }, + truncated: false, }); expect( @@ -91,6 +93,7 @@ describe('loadBlog', () => { permalink: '/blog/2019/01/01/date-matter', title: 'date-matter', }, + truncated: false, }); }); }); diff --git a/packages/docusaurus-plugin-content-blog/src/blogUtils.ts b/packages/docusaurus-plugin-content-blog/src/blogUtils.ts index b6f3411302af..35b4bdbdabbe 100644 --- a/packages/docusaurus-plugin-content-blog/src/blogUtils.ts +++ b/packages/docusaurus-plugin-content-blog/src/blogUtils.ts @@ -137,7 +137,7 @@ export async function generateBlogPosts( date, tags: frontMatter.tags, title: frontMatter.title, - truncated: truncateMarker.test(content), + truncated: truncateMarker?.test(content) || false, }, }); }),