feat(content-docs): sidebar category linking to document or auto-generated index page (#5830)

Co-authored-by: Joshua Chen <sidachen2003@gmail.com>
Co-authored-by: Armano <armano2@users.noreply.github.com>
Co-authored-by: Alexey Pyltsyn <lex61rus@gmail.com>
This commit is contained in:
Sébastien Lorber 2021-12-03 14:44:59 +01:00 committed by GitHub
parent 95f911efef
commit cfae5d0933
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
105 changed files with 3904 additions and 816 deletions

View file

@ -9,24 +9,92 @@ import getSlug from '../slug';
describe('getSlug', () => {
test('should default to dirname/id', () => {
expect(getSlug({baseID: 'doc', dirName: '/dir'})).toEqual('/dir/doc');
expect(getSlug({baseID: 'doc', dirName: '/dir/subdir'})).toEqual(
'/dir/subdir/doc',
);
expect(
getSlug({
baseID: 'doc',
source: '@site/docs/dir/doc.md',
sourceDirName: '/dir',
}),
).toEqual('/dir/doc');
expect(
getSlug({
baseID: 'doc',
source: '@site/docs/dir/subdir/doc.md',
sourceDirName: '/dir/subdir',
}),
).toEqual('/dir/subdir/doc');
});
test('should handle conventional doc indexes', () => {
expect(
getSlug({
baseID: 'doc',
source: '@site/docs/dir/subdir/index.md',
sourceDirName: '/dir/subdir',
}),
).toEqual('/dir/subdir/');
expect(
getSlug({
baseID: 'doc',
source: '@site/docs/dir/subdir/inDEx.mdx',
sourceDirName: '/dir/subdir',
}),
).toEqual('/dir/subdir/');
expect(
getSlug({
baseID: 'doc',
source: '@site/docs/dir/subdir/readme.md',
sourceDirName: '/dir/subdir',
}),
).toEqual('/dir/subdir/');
expect(
getSlug({
baseID: 'doc',
source: '@site/docs/dir/subdir/reADMe.mdx',
sourceDirName: '/dir/subdir',
}),
).toEqual('/dir/subdir/');
expect(
getSlug({
baseID: 'doc',
source: '@site/docs/dir/subdir/subdir.md',
sourceDirName: '/dir/subdir',
}),
).toEqual('/dir/subdir/');
expect(
getSlug({
baseID: 'doc',
source: '@site/docs/dir/subdir/suBDir.mdx',
sourceDirName: '/dir/subdir',
}),
).toEqual('/dir/subdir/');
});
test('should ignore conventional doc index when explicit slug frontmatter is provided', () => {
expect(
getSlug({
baseID: 'doc',
source: '@site/docs/dir/subdir/index.md',
sourceDirName: '/dir/subdir',
frontmatterSlug: '/my/frontMatterSlug',
}),
).toEqual('/my/frontMatterSlug');
});
test('can strip dir number prefixes', () => {
expect(
getSlug({
baseID: 'doc',
dirName: '/001-dir1/002-dir2',
source: '@site/docs/001-dir1/002-dir2/doc.md',
sourceDirName: '/001-dir1/002-dir2',
stripDirNumberPrefixes: true,
}),
).toEqual('/dir1/dir2/doc');
expect(
getSlug({
baseID: 'doc',
dirName: '/001-dir1/002-dir2',
source: '@site/docs/001-dir1/002-dir2/doc.md',
sourceDirName: '/001-dir1/002-dir2',
stripDirNumberPrefixes: false,
}),
).toEqual('/001-dir1/002-dir2/doc');
@ -35,26 +103,45 @@ describe('getSlug', () => {
// See https://github.com/facebook/docusaurus/issues/3223
test('should handle special chars in doc path', () => {
expect(
getSlug({baseID: 'my dôc', dirName: '/dir with spâce/hey $hello'}),
getSlug({
baseID: 'my dôc',
source: '@site/docs/dir with spâce/hey $hello/doc.md',
sourceDirName: '/dir with spâce/hey $hello',
}),
).toEqual('/dir with spâce/hey $hello/my dôc');
});
test('should handle current dir', () => {
expect(getSlug({baseID: 'doc', dirName: '.'})).toEqual('/doc');
expect(getSlug({baseID: 'doc', dirName: '/'})).toEqual('/doc');
expect(
getSlug({baseID: 'doc', source: '@site/docs/doc.md', sourceDirName: '.'}),
).toEqual('/doc');
expect(
getSlug({baseID: 'doc', source: '@site/docs/doc.md', sourceDirName: '/'}),
).toEqual('/doc');
});
test('should resolve absolute slug frontmatter', () => {
expect(
getSlug({baseID: 'any', dirName: '.', frontmatterSlug: '/abc/def'}),
).toEqual('/abc/def');
expect(
getSlug({baseID: 'any', dirName: './any', frontmatterSlug: '/abc/def'}),
getSlug({
baseID: 'any',
source: '@site/docs/doc.md',
sourceDirName: '.',
frontmatterSlug: '/abc/def',
}),
).toEqual('/abc/def');
expect(
getSlug({
baseID: 'any',
dirName: './any/any',
source: '@site/docs/any/doc.md',
sourceDirName: './any',
frontmatterSlug: '/abc/def',
}),
).toEqual('/abc/def');
expect(
getSlug({
baseID: 'any',
source: '@site/docs/any/any/doc.md',
sourceDirName: './any/any',
frontmatterSlug: '/abc/def',
}),
).toEqual('/abc/def');
@ -62,46 +149,66 @@ describe('getSlug', () => {
test('should resolve relative slug frontmatter', () => {
expect(
getSlug({baseID: 'any', dirName: '.', frontmatterSlug: 'abc/def'}),
getSlug({
baseID: 'any',
source: '@site/docs/doc.md',
sourceDirName: '.',
frontmatterSlug: 'abc/def',
}),
).toEqual('/abc/def');
expect(
getSlug({baseID: 'any', dirName: '/dir', frontmatterSlug: 'abc/def'}),
getSlug({
baseID: 'any',
source: '@site/docs/dir/doc.md',
sourceDirName: '/dir',
frontmatterSlug: 'abc/def',
}),
).toEqual('/dir/abc/def');
expect(
getSlug({
baseID: 'any',
dirName: 'unslashedDir',
source: '@site/docs/unslashedDir/doc.md',
sourceDirName: 'unslashedDir',
frontmatterSlug: 'abc/def',
}),
).toEqual('/unslashedDir/abc/def');
expect(
getSlug({
baseID: 'any',
dirName: 'dir/subdir',
source: '@site/docs/dir/subdir/doc.md',
sourceDirName: 'dir/subdir',
frontmatterSlug: 'abc/def',
}),
).toEqual('/dir/subdir/abc/def');
expect(
getSlug({baseID: 'any', dirName: '/dir', frontmatterSlug: './abc/def'}),
getSlug({
baseID: 'any',
source: '@site/docs/dir/doc.md',
sourceDirName: '/dir',
frontmatterSlug: './abc/def',
}),
).toEqual('/dir/abc/def');
expect(
getSlug({
baseID: 'any',
dirName: '/dir',
source: '@site/docs/dir/doc.md',
sourceDirName: '/dir',
frontmatterSlug: './abc/../def',
}),
).toEqual('/dir/def');
expect(
getSlug({
baseID: 'any',
dirName: '/dir/subdir',
source: '@site/docs/dir/subdir/doc.md',
sourceDirName: '/dir/subdir',
frontmatterSlug: '../abc/def',
}),
).toEqual('/dir/abc/def');
expect(
getSlug({
baseID: 'any',
dirName: '/dir/subdir',
source: '@site/docs/dir/subdirdoc.md',
sourceDirName: '/dir/subdir',
frontmatterSlug: '../../../../../abc/../def',
}),
).toEqual('/def');