mirror of
https://github.com/facebook/docusaurus.git
synced 2025-05-10 07:37:19 +02:00
feat: doc tags (same as blog tags) (#3646)
* [v2] tags to doc, same as tags to blog - [IN PROGRESS] - Addition of plugin-content-docs - Addition of DocTagsListPage in `docusaurus-theme-classic` ! Error exists for this commit towards the theme aspect and help required. Commit towards #3434 * docs: make tags list page work * temp: disable onBrokenLinks * theme bootstrap: create DocTagsListPage * DocTagsPage added and functionality too - individual doc tag page added to show docs for that specific tag * Added all Docs Tags Link * add some shared tag utils * move tag tests to _dogfooding * fix type * fix some tests * fix blog test * refactor blog post tags handling * better yaml tag examples * better dogfood md files * refactor and factorize theme tag components * finish DocTagDocListPage * Extract DocItemFooter + add inline tag list * minor fix * better typings * fix versions.test.ts tests * add tests for doc tags * fix tests * test toTagDocListProp * move shared theme code to tagUtils * Add new theme translation keys * move common theme code to tagUtils + add tests * update-code-translations should handle theme-common * update french translation * revert add translation * fix pluralization problem in theme.docs.tagDocListPageTitle * add theme component configuration options * add more tags tests * add documentation for docs tagging Co-authored-by: slorber <lorber.sebastien@gmail.com>
This commit is contained in:
parent
f666de7e59
commit
f9c79cbd58
81 changed files with 1874 additions and 381 deletions
26
packages/docusaurus-utils-validation/src/JoiFrontMatter.ts
Normal file
26
packages/docusaurus-utils-validation/src/JoiFrontMatter.ts
Normal file
|
@ -0,0 +1,26 @@
|
|||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
import Joi from './Joi';
|
||||
|
||||
// Enhance the default Joi.string() type so that it can convert number to strings
|
||||
// If user use frontmatter "tag: 2021", we shouldn't need to ask the user to write "tag: '2021'"
|
||||
// Also yaml tries to convert patterns like "2019-01-01" to dates automatically
|
||||
// see https://github.com/facebook/docusaurus/issues/4642
|
||||
// see https://github.com/sideway/joi/issues/1442#issuecomment-823997884
|
||||
const JoiFrontMatterString: Joi.Extension = {
|
||||
type: 'string',
|
||||
base: Joi.string(),
|
||||
// Fix Yaml that tries to auto-convert many things to string out of the box
|
||||
prepare: (value) => {
|
||||
if (typeof value === 'number' || value instanceof Date) {
|
||||
return {value: value.toString()};
|
||||
}
|
||||
return {value};
|
||||
},
|
||||
};
|
||||
export const JoiFrontMatter: typeof Joi = Joi.extend(JoiFrontMatterString);
|
|
@ -6,7 +6,8 @@
|
|||
*/
|
||||
|
||||
import Joi from '../Joi';
|
||||
import {JoiFrontMatter, validateFrontMatter} from '../validationUtils';
|
||||
import {JoiFrontMatter} from '../JoiFrontMatter';
|
||||
import {validateFrontMatter} from '../validationUtils';
|
||||
|
||||
describe('validateFrontMatter', () => {
|
||||
test('should accept good values', () => {
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
// /!\ don't remove this export, as we recommend plugin authors to use it
|
||||
export {default as Joi} from './Joi';
|
||||
export {JoiFrontMatter} from './JoiFrontMatter';
|
||||
|
||||
export * from './validationUtils';
|
||||
export * from './validationSchemas';
|
||||
|
|
|
@ -6,6 +6,8 @@
|
|||
*/
|
||||
import Joi from './Joi';
|
||||
import {isValidPathname} from '@docusaurus/utils';
|
||||
import type {Tag} from '@docusaurus/utils';
|
||||
import {JoiFrontMatter} from './JoiFrontMatter';
|
||||
|
||||
export const PluginIdSchema = Joi.string()
|
||||
.regex(/^[a-zA-Z_-]+$/)
|
||||
|
@ -55,3 +57,13 @@ export const PathnameSchema = Joi.string()
|
|||
.message(
|
||||
'{{#label}} is not a valid pathname. Pathname should start with slash and not contain any domain or query string.',
|
||||
);
|
||||
|
||||
export const FrontMatterTagsSchema = JoiFrontMatter.array().items(
|
||||
JoiFrontMatter.alternatives().try(
|
||||
JoiFrontMatter.string().required(),
|
||||
JoiFrontMatter.object<Tag>({
|
||||
label: JoiFrontMatter.string().required(),
|
||||
permalink: JoiFrontMatter.string().required(),
|
||||
}).required(),
|
||||
),
|
||||
);
|
||||
|
|
|
@ -99,24 +99,6 @@ export function normalizeThemeConfig<T>(
|
|||
return value;
|
||||
}
|
||||
|
||||
// Enhance the default Joi.string() type so that it can convert number to strings
|
||||
// If user use frontmatter "tag: 2021", we shouldn't need to ask the user to write "tag: '2021'"
|
||||
// Also yaml tries to convert patterns like "2019-01-01" to dates automatically
|
||||
// see https://github.com/facebook/docusaurus/issues/4642
|
||||
// see https://github.com/sideway/joi/issues/1442#issuecomment-823997884
|
||||
const JoiFrontMatterString: Joi.Extension = {
|
||||
type: 'string',
|
||||
base: Joi.string(),
|
||||
// Fix Yaml that tries to auto-convert many things to string out of the box
|
||||
prepare: (value) => {
|
||||
if (typeof value === 'number' || value instanceof Date) {
|
||||
return {value: value.toString()};
|
||||
}
|
||||
return {value};
|
||||
},
|
||||
};
|
||||
export const JoiFrontMatter: typeof Joi = Joi.extend(JoiFrontMatterString);
|
||||
|
||||
export function validateFrontMatter<T>(
|
||||
frontMatter: Record<string, unknown>,
|
||||
schema: Joi.ObjectSchema<T>,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue