diff --git a/README.md b/README.md index 1c2b7d8..84336c1 100644 --- a/README.md +++ b/README.md @@ -74,6 +74,9 @@ The following options are available (defaults are shown below): // Do _not_ use Infinity, the value must be a JSON-serializable integer. indexDocSidebarParentCategories: 0, + // Includes parent categories path in search result + includeParentCategoriesInPageTitle: false, + // whether to index blog pages indexBlog: true, diff --git a/packages/docusaurus-search-local/src/server/index.test.js b/packages/docusaurus-search-local/src/server/index.test.js index bd1ff3d..75db5b0 100644 --- a/packages/docusaurus-search-local/src/server/index.test.js +++ b/packages/docusaurus-search-local/src/server/index.test.js @@ -11,6 +11,7 @@ const validate = (schema, options) => { const DEFAULT_OPTIONS = { indexDocs: true, indexDocSidebarParentCategories: 0, + includeParentCategoriesInPageTitle: false, indexBlog: true, indexPages: false, language: "en", @@ -57,6 +58,7 @@ it("validates options correctly", () => { const options = { indexDocs: false, indexDocSidebarParentCategories: 3, + includeParentCategoriesInPageTitle: false, indexBlog: false, indexPages: true, language: "hi", diff --git a/packages/docusaurus-search-local/src/server/index.ts b/packages/docusaurus-search-local/src/server/index.ts index 019babe..5e9ca0f 100644 --- a/packages/docusaurus-search-local/src/server/index.ts +++ b/packages/docusaurus-search-local/src/server/index.ts @@ -76,6 +76,7 @@ function codeTranslationLocalesToTry(locale: string): string[] { type MyOptions = { indexDocs: boolean; indexDocSidebarParentCategories: number; + includeParentCategoriesInPageTitle: boolean; indexBlog: boolean; indexPages: boolean; language: string | string[]; @@ -124,6 +125,8 @@ const optionsSchema = Joi.object({ .max(Number.MAX_SAFE_INTEGER) .default(0), + includeParentCategoriesInPageTitle: Joi.boolean().default(false), + indexBlog: Joi.boolean().default(true), indexPages: Joi.boolean().default(false), @@ -154,6 +157,7 @@ export default function cmfcmfDocusaurusSearchLocal( ): Plugin { let { indexDocSidebarParentCategories, + includeParentCategoriesInPageTitle, indexBlog, indexDocs, indexPages, @@ -543,7 +547,7 @@ export const tokenize = (input) => lunr.tokenizer(input) indexDocSidebarParentCategories > 0 && docSidebarParentCategories ) { - sidebarParentCategories = docSidebarParentCategories + sidebarParentCategories = [...docSidebarParentCategories] .reverse() .slice(0, indexDocSidebarParentCategories) .join(" "); @@ -570,13 +574,29 @@ export const tokenize = (input) => lunr.tokenizer(input) sectionTitle, sectionRoute, type, - }): MyDocument => ({ - id, - pageTitle, - sectionTitle, - sectionRoute, - type, - }) + docSidebarParentCategories, + }): MyDocument => { + let fullTitle = pageTitle; + + if ( + includeParentCategoriesInPageTitle && + docSidebarParentCategories && + docSidebarParentCategories.length > 0 + ) { + fullTitle = [ + ...docSidebarParentCategories, + pageTitle, + ].join(" > "); + } + + return { + id, + pageTitle: fullTitle, + sectionTitle, + sectionRoute, + type, + }; + } ), index, }), diff --git a/packages/example-docs/docusaurus.config.js b/packages/example-docs/docusaurus.config.js index 318668d..3102bbb 100644 --- a/packages/example-docs/docusaurus.config.js +++ b/packages/example-docs/docusaurus.config.js @@ -126,7 +126,8 @@ module.exports = { ], plugins: [ [require.resolve("@cmfcmf/docusaurus-search-local"), { - indexPages: true + indexPages: true, + includeParentCategoriesInPageTitle: true, }], ] };