diff --git a/packages/docusaurus-plugin-content-blog/src/__tests__/__snapshots__/translations.test.ts.snap b/packages/docusaurus-plugin-content-blog/src/__tests__/__snapshots__/translations.test.ts.snap index ecb579574d0b..f2eccf4d82d5 100644 --- a/packages/docusaurus-plugin-content-blog/src/__tests__/__snapshots__/translations.test.ts.snap +++ b/packages/docusaurus-plugin-content-blog/src/__tests__/__snapshots__/translations.test.ts.snap @@ -24,24 +24,7 @@ exports[`getContentTranslationFiles returns translation files matching snapshot exports[`translateContent falls back when translation is incomplete 1`] = ` { - "blogListPaginated": [ - { - "items": [ - "hello", - ], - "metadata": { - "blogDescription": "Someone's random blog", - "blogTitle": "My blog", - "nextPage": undefined, - "page": 1, - "permalink": "/", - "postsPerPage": 10, - "previousPage": undefined, - "totalCount": 1, - "totalPages": 1, - }, - }, - ], + "blogDescription": "Someone's random blog", "blogPosts": [ { "content": "", @@ -63,29 +46,13 @@ exports[`translateContent falls back when translation is incomplete 1`] = ` "blogSidebarTitle": "All my posts", "blogTags": {}, "blogTagsListPath": "/tags", + "blogTitle": "My blog", } `; exports[`translateContent returns translated loaded 1`] = ` { - "blogListPaginated": [ - { - "items": [ - "hello", - ], - "metadata": { - "blogDescription": "Someone's random blog (translated)", - "blogTitle": "My blog (translated)", - "nextPage": undefined, - "page": 1, - "permalink": "/", - "postsPerPage": 10, - "previousPage": undefined, - "totalCount": 1, - "totalPages": 1, - }, - }, - ], + "blogDescription": "Someone's random blog (translated)", "blogPosts": [ { "content": "", @@ -107,5 +74,6 @@ exports[`translateContent returns translated loaded 1`] = ` "blogSidebarTitle": "All my posts (translated)", "blogTags": {}, "blogTagsListPath": "/tags", + "blogTitle": "My blog (translated)", } `; 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 6e4879ce70c3..92a83d57815b 100644 --- a/packages/docusaurus-plugin-content-blog/src/__tests__/index.test.ts +++ b/packages/docusaurus-plugin-content-blog/src/__tests__/index.test.ts @@ -638,10 +638,7 @@ describe('blog plugin', () => { }, DefaultI18N, ); - const {blogPosts, blogTags, blogListPaginated} = - (await plugin.loadContent!())!; - - expect(blogListPaginated).toHaveLength(3); + const {blogPosts, blogTags} = (await plugin.loadContent!())!; expect(Object.keys(blogTags)).toHaveLength(2); expect(blogTags).toMatchSnapshot(); diff --git a/packages/docusaurus-plugin-content-blog/src/__tests__/translations.test.ts b/packages/docusaurus-plugin-content-blog/src/__tests__/translations.test.ts index 97db9eac8748..2f7663b4d969 100644 --- a/packages/docusaurus-plugin-content-blog/src/__tests__/translations.test.ts +++ b/packages/docusaurus-plugin-content-blog/src/__tests__/translations.test.ts @@ -6,6 +6,7 @@ */ import {updateTranslationFileMessages} from '@docusaurus/utils'; +import {fromPartial} from '@total-typescript/shoehorn'; import {getTranslationFiles, translateContent} from '../translations'; import {DEFAULT_OPTIONS} from '../options'; import type { @@ -16,13 +17,13 @@ import type { const sampleBlogOptions: PluginOptions = { ...DEFAULT_OPTIONS, - blogSidebarTitle: 'All my posts', blogTitle: 'My blog', blogDescription: "Someone's random blog", + blogSidebarTitle: 'All my posts', }; const sampleBlogPosts: BlogPost[] = [ - { + fromPartial({ id: 'hello', metadata: { permalink: '/blog/2021/06/19/hello', @@ -37,27 +38,13 @@ const sampleBlogPosts: BlogPost[] = [ unlisted: false, }, content: '', - }, + }), ]; const sampleBlogContent: BlogContent = { + blogTitle: sampleBlogOptions.blogTitle, + blogDescription: sampleBlogOptions.blogDescription, blogSidebarTitle: sampleBlogOptions.blogSidebarTitle, - blogListPaginated: [ - { - items: ['hello'], - metadata: { - permalink: '/', - page: 1, - postsPerPage: 10, - totalPages: 1, - totalCount: 1, - previousPage: undefined, - nextPage: undefined, - blogTitle: sampleBlogOptions.blogTitle, - blogDescription: sampleBlogOptions.blogDescription, - }, - }, - ], blogPosts: sampleBlogPosts, blogTags: {}, blogTagsListPath: '/tags', diff --git a/packages/docusaurus-plugin-content-blog/src/index.ts b/packages/docusaurus-plugin-content-blog/src/index.ts index e19969ab222d..ae76530f8837 100644 --- a/packages/docusaurus-plugin-content-blog/src/index.ts +++ b/packages/docusaurus-plugin-content-blog/src/index.ts @@ -17,7 +17,6 @@ import { createAbsoluteFilePathMatcher, getContentPathList, getDataFilePath, - DEFAULT_PLUGIN_ID, resolveMarkdownLinkPathname, getLocaleConfig, } from '@docusaurus/utils'; @@ -25,7 +24,6 @@ import {getTagsFilePathsToWatch} from '@docusaurus/utils-validation'; import {createMDXLoaderItem} from '@docusaurus/mdx-loader'; import { getBlogTags, - paginateBlogPosts, shouldBeListed, applyProcessBlogPosts, generateBlogPosts, @@ -45,7 +43,6 @@ import type { Assets, BlogTags, BlogContent, - BlogPaginated, } from '@docusaurus/plugin-content-blog'; import type {RuleSetRule, RuleSetUseItem} from 'webpack'; @@ -85,7 +82,7 @@ export default async function pluginContentBlog( }) : undefined, }; - const pluginId = options.id ?? DEFAULT_PLUGIN_ID; + const pluginId = options.id; const pluginDataDirRoot = path.join(generatedFilesDir, PluginName); const dataDir = path.join(pluginDataDirRoot, pluginId); @@ -260,9 +257,10 @@ export default async function pluginContentBlog( if (!blogPosts.length) { return { + blogTitle, + blogDescription, blogSidebarTitle, blogPosts: [], - blogListPaginated: [], blogTags: {}, blogTagsListPath, authorsMap, @@ -291,15 +289,6 @@ export default async function pluginContentBlog( } }); - const blogListPaginated: BlogPaginated[] = paginateBlogPosts({ - blogPosts: listedBlogPosts, - blogTitle, - blogDescription, - postsPerPageOption, - basePageUrl: baseBlogUrl, - pageBasePath, - }); - const blogTags: BlogTags = getBlogTags({ blogPosts, postsPerPageOption, @@ -309,9 +298,10 @@ export default async function pluginContentBlog( }); return { + blogTitle, + blogDescription, blogSidebarTitle, blogPosts, - blogListPaginated, blogTags, blogTagsListPath, authorsMap, diff --git a/packages/docusaurus-plugin-content-blog/src/options.ts b/packages/docusaurus-plugin-content-blog/src/options.ts index fe2d64e664a4..b808e144c805 100644 --- a/packages/docusaurus-plugin-content-blog/src/options.ts +++ b/packages/docusaurus-plugin-content-blog/src/options.ts @@ -15,7 +15,7 @@ import { RouteBasePathSchema, URISchema, } from '@docusaurus/utils-validation'; -import {GlobExcludeDefault} from '@docusaurus/utils'; +import {DEFAULT_PLUGIN_ID, GlobExcludeDefault} from '@docusaurus/utils'; import type { PluginOptions, Options, @@ -25,6 +25,7 @@ import type { import type {OptionValidationContext} from '@docusaurus/types'; export const DEFAULT_OPTIONS: PluginOptions = { + id: DEFAULT_PLUGIN_ID, feedOptions: { type: ['rss', 'atom'], copyright: '', diff --git a/packages/docusaurus-plugin-content-blog/src/plugin-content-blog.d.ts b/packages/docusaurus-plugin-content-blog/src/plugin-content-blog.d.ts index 625aaf94df87..944a113c0aad 100644 --- a/packages/docusaurus-plugin-content-blog/src/plugin-content-blog.d.ts +++ b/packages/docusaurus-plugin-content-blog/src/plugin-content-blog.d.ts @@ -431,7 +431,7 @@ declare module '@docusaurus/plugin-content-blog' { export type PluginOptions = MDXOptions & TagsPluginOptions & { /** Plugin ID. */ - id?: string; + id: string; /** * Path to the blog content directory on the file system, relative to site * directory. @@ -583,9 +583,10 @@ declare module '@docusaurus/plugin-content-blog' { export type AuthorsMap = {[authorKey: string]: AuthorWithKey}; export type BlogContent = { - blogSidebarTitle: string; + blogTitle: string; // for translation purposes + blogDescription: string; // for translation purposes + blogSidebarTitle: string; // for translation purposes blogPosts: BlogPost[]; - blogListPaginated: BlogPaginated[]; blogTags: BlogTags; blogTagsListPath: string; authorsMap?: AuthorsMap; diff --git a/packages/docusaurus-plugin-content-blog/src/routes.ts b/packages/docusaurus-plugin-content-blog/src/routes.ts index ced92dc0fda9..55bb98212e73 100644 --- a/packages/docusaurus-plugin-content-blog/src/routes.ts +++ b/packages/docusaurus-plugin-content-blog/src/routes.ts @@ -67,27 +67,24 @@ export async function buildAllRoutes({ blogArchiveComponent, routeBasePath, archiveBasePath, - blogTitle, authorsBasePath, postsPerPage, - blogDescription, + pageBasePath, } = options; - const pluginId = options.id!; + const pluginId = options.id; const {createData} = actions; const { + blogTitle, + blogDescription, blogSidebarTitle, blogPosts, - blogListPaginated, blogTags, blogTagsListPath, authorsMap, } = content; - const authorsListPath = normalizeUrl([ - baseUrl, - routeBasePath, - authorsBasePath, - ]); + const blogBasePath = normalizeUrl([baseUrl, routeBasePath]); + const authorsListPath = normalizeUrl([blogBasePath, authorsBasePath]); const listedBlogPosts = blogPosts.filter(shouldBeListed); @@ -119,7 +116,7 @@ export async function buildAllRoutes({ async function createBlogMetadataModule() { const blogMetadata: BlogMetadata = { - blogBasePath: normalizeUrl([baseUrl, routeBasePath]), + blogBasePath, blogTitle, authorsListPath, }; @@ -156,7 +153,7 @@ export async function buildAllRoutes({ if (archiveBasePath && listedBlogPosts.length) { return [ { - path: normalizeUrl([baseUrl, routeBasePath, archiveBasePath]), + path: normalizeUrl([blogBasePath, archiveBasePath]), component: blogArchiveComponent, exact: true, props: { @@ -210,6 +207,15 @@ export async function buildAllRoutes({ } function createBlogPostsPaginatedRoutes(): RouteConfig[] { + const blogListPaginated = paginateBlogPosts({ + blogPosts: listedBlogPosts, + blogTitle, + blogDescription, + postsPerPageOption: postsPerPage, + basePageUrl: blogBasePath, + pageBasePath, + }); + return blogListPaginated.map((paginated) => { return { path: paginated.metadata.permalink, @@ -294,12 +300,14 @@ export async function buildAllRoutes({ sidebar: sidebarModulePath, }, props: { - authors: authors.map((author) => - toAuthorItemProp({ + authors: authors.map((author) => { + const authorPosts = blogPostsByAuthorKey[author.key] ?? []; + const listedAuthorPosts = authorPosts.filter(shouldBeListed); + return toAuthorItemProp({ author, - count: blogPostsByAuthorKey[author.key]?.length ?? 0, - }), - ), + count: listedAuthorPosts.length, + }); + }), }, context: { blogMetadata: blogMetadataModulePath, @@ -309,12 +317,13 @@ export async function buildAllRoutes({ function createAuthorPaginatedRoute(author: AuthorWithKey): RouteConfig[] { const authorBlogPosts = blogPostsByAuthorKey[author.key] ?? []; + const listedAuthorBlogPosts = authorBlogPosts.filter(shouldBeListed); if (!author.page) { return []; } const pages = paginateBlogPosts({ - blogPosts: authorBlogPosts, + blogPosts: listedAuthorBlogPosts, basePageUrl: author.page.permalink, blogDescription, blogTitle, @@ -332,7 +341,10 @@ export async function buildAllRoutes({ sidebar: sidebarModulePath, }, props: { - author: toAuthorItemProp({author, count: authorBlogPosts.length}), + author: toAuthorItemProp({ + author, + count: listedAuthorBlogPosts.length, + }), listMetadata: metadata, }, context: { diff --git a/packages/docusaurus-plugin-content-blog/src/translations.ts b/packages/docusaurus-plugin-content-blog/src/translations.ts index 9cf763de3b42..4e256ac5ada3 100644 --- a/packages/docusaurus-plugin-content-blog/src/translations.ts +++ b/packages/docusaurus-plugin-content-blog/src/translations.ts @@ -5,30 +5,8 @@ * LICENSE file in the root directory of this source tree. */ -import type {TranslationFileContent, TranslationFile} from '@docusaurus/types'; -import type { - PluginOptions, - BlogContent, - BlogPaginated, -} from '@docusaurus/plugin-content-blog'; - -function translateListPage( - blogListPaginated: BlogPaginated[], - translations: TranslationFileContent, -) { - return blogListPaginated.map((page) => { - const {items, metadata} = page; - return { - items, - metadata: { - ...metadata, - blogTitle: translations.title?.message ?? page.metadata.blogTitle, - blogDescription: - translations.description?.message ?? page.metadata.blogDescription, - }, - }; - }); -} +import type {TranslationFile} from '@docusaurus/types'; +import type {PluginOptions, BlogContent} from '@docusaurus/plugin-content-blog'; export function getTranslationFiles(options: PluginOptions): TranslationFile[] { return [ @@ -56,14 +34,13 @@ export function translateContent( content: BlogContent, translationFiles: TranslationFile[], ): BlogContent { - const {content: optionsTranslations} = translationFiles[0]!; + const {content: translations} = translationFiles[0]!; return { ...content, + blogTitle: translations.title?.message ?? content.blogTitle, + blogDescription: + translations.description?.message ?? content.blogDescription, blogSidebarTitle: - optionsTranslations['sidebar.title']?.message ?? content.blogSidebarTitle, - blogListPaginated: translateListPage( - content.blogListPaginated, - optionsTranslations, - ), + translations['sidebar.title']?.message ?? content.blogSidebarTitle, }; } diff --git a/packages/docusaurus-plugin-content-pages/src/index.ts b/packages/docusaurus-plugin-content-pages/src/index.ts index aea10501f2e5..cb2a647b005b 100644 --- a/packages/docusaurus-plugin-content-pages/src/index.ts +++ b/packages/docusaurus-plugin-content-pages/src/index.ts @@ -13,7 +13,6 @@ import { addTrailingPathSeparator, createAbsoluteFilePathMatcher, getContentPathList, - DEFAULT_PLUGIN_ID, } from '@docusaurus/utils'; import {createMDXLoaderRule} from '@docusaurus/mdx-loader'; import {createAllRoutes} from './routes'; @@ -38,7 +37,7 @@ export default async function pluginContentPages( generatedFilesDir, 'docusaurus-plugin-content-pages', ); - const dataDir = path.join(pluginDataDirRoot, options.id ?? DEFAULT_PLUGIN_ID); + const dataDir = path.join(pluginDataDirRoot, options.id); async function createPagesMDXLoaderRule(): Promise { const { diff --git a/packages/docusaurus-plugin-content-pages/src/options.ts b/packages/docusaurus-plugin-content-pages/src/options.ts index 2ffda3e7c2fa..8d6383c7aea0 100644 --- a/packages/docusaurus-plugin-content-pages/src/options.ts +++ b/packages/docusaurus-plugin-content-pages/src/options.ts @@ -14,11 +14,12 @@ import { RouteBasePathSchema, URISchema, } from '@docusaurus/utils-validation'; -import {GlobExcludeDefault} from '@docusaurus/utils'; +import {DEFAULT_PLUGIN_ID, GlobExcludeDefault} from '@docusaurus/utils'; import type {OptionValidationContext} from '@docusaurus/types'; import type {PluginOptions, Options} from '@docusaurus/plugin-content-pages'; export const DEFAULT_OPTIONS: PluginOptions = { + id: DEFAULT_PLUGIN_ID, path: 'src/pages', // Path to data on filesystem, relative to site dir. routeBasePath: '/', // URL Route. include: ['**/*.{js,jsx,ts,tsx,md,mdx}'], // Extensions to include. diff --git a/packages/docusaurus-plugin-content-pages/src/plugin-content-pages.d.ts b/packages/docusaurus-plugin-content-pages/src/plugin-content-pages.d.ts index c0e02f40aed5..ca5bd518f35a 100644 --- a/packages/docusaurus-plugin-content-pages/src/plugin-content-pages.d.ts +++ b/packages/docusaurus-plugin-content-pages/src/plugin-content-pages.d.ts @@ -19,7 +19,7 @@ declare module '@docusaurus/plugin-content-pages' { }; export type PluginOptions = MDXOptions & { - id?: string; + id: string; path: string; routeBasePath: string; include: string[]; diff --git a/website/community/2-resources.mdx b/website/community/2-resources.mdx index beaef3be1097..25b8362bf8cd 100644 --- a/website/community/2-resources.mdx +++ b/website/community/2-resources.mdx @@ -70,7 +70,9 @@ See the showcase - [docusaurus-openapi-docs](https://github.com/PaloAltoNetworks/docusaurus-openapi-docs) - A Docusaurus plugin and theme for generating interactive OpenAPI docs - [docusaurus-post-generator](https://github.com/moojing/docusaurus-post-generator) - A command line tool for user to add a blog/doc file quickly by command like `yarn gen-post new [template] [post_name]`. - [docusaurus-graph](https://github.com/Arsero/docusaurus-graph) - A Docusaurus plugin for generating a graph view showing links between documentation files. -- [docusaurus-i18n](https://github.com/moonrailgun/docusaurus-i18n) - Auto translate docusaurus documents with openai. +- [docusaurus-i18n](https://github.com/moonrailgun/docusaurus-i18n) - Auto-translate docusaurus documents with openai. +- [docusaurus-plugin-glossary](https://github.com/mcclowes/docusaurus-plugin-glossary) - A docusaurus plugin for helping users understand key terms. +- [docusaurus-plugin-cookie-consent](https://github.com/mcclowes/docusaurus-plugin-cookie-consent) - A Docusaurus plugin for allowing users to opt in/out of cookies, and accessing those settings in code. ## Enterprise usage {#enterprise-usage}