fix: v3 admonitions should support v2 title syntax for nested admonitions (#9535)

Fix admonition title mdx v1 compat option when admonition is nested
This commit is contained in:
Sébastien Lorber 2023-11-11 22:23:27 +01:00 committed by sebastienlorber
parent 01030044e0
commit 1700a293c4
3 changed files with 82 additions and 9 deletions

View file

@ -1288,17 +1288,23 @@ describe('admonitionTitleToDirectiveLabel', () => {
`); `);
}); });
it('does not transform left-padded directives', () => { it('transforms space indented directives', () => {
expect( expect(
admonitionTitleToDirectiveLabel( admonitionTitleToDirectiveLabel(
dedent` dedent`
before before
:::note Title :::note 1 space
content content
::: :::
:::note 2 spaces
content
:::
after after
`, `,
@ -1307,16 +1313,63 @@ describe('admonitionTitleToDirectiveLabel', () => {
).toEqual(dedent` ).toEqual(dedent`
before before
:::note Title :::note[1 space]
content content
::: :::
:::note[2 spaces]
content
:::
after after
`); `);
}); });
it('transforms tab indented directives', () => {
expect(
admonitionTitleToDirectiveLabel(
`
before
\t:::note 1 tab
\tcontent
\t:::
\t\t:::note 2 tabs
\t\tcontent
\t\t:::
after
`,
directives,
),
).toBe(`
before
\t:::note[1 tab]
\tcontent
\t:::
\t\t:::note[2 tabs]
\t\tcontent
\t\t:::
after
`);
});
it('does not transform admonition without title', () => { it('does not transform admonition without title', () => {
expect( expect(
admonitionTitleToDirectiveLabel( admonitionTitleToDirectiveLabel(

View file

@ -97,14 +97,14 @@ export function admonitionTitleToDirectiveLabel(
const directiveNameGroup = `(${admonitionContainerDirectives.join('|')})`; const directiveNameGroup = `(${admonitionContainerDirectives.join('|')})`;
const regexp = new RegExp( const regexp = new RegExp(
`^(?<directive>:{3,}${directiveNameGroup}) +(?<title>.*)$`, `^(?<indentation>( +|\t+))?(?<directive>:{3,}${directiveNameGroup}) +(?<title>.*)$`,
'gm', 'gm',
); );
return content.replaceAll(regexp, (substring, ...args: any[]) => { return content.replaceAll(regexp, (substring, ...args: any[]) => {
const groups = args.at(-1); const groups = args.at(-1);
return `${groups.directive}[${groups.title}]`; return `${groups.indentation ?? ''}${groups.directive}[${groups.title}]`;
}); });
} }

View file

@ -54,6 +54,26 @@ import InfoIcon from "@theme/Admonition/Icon/Info"
</Admonition> </Admonition>
``` ```
## Indented admonitions
See admonition title v2 compat syntax bug: https://github.com/facebook/docusaurus/issues/9507
1. Item 1
:::info Important Considerations
For better experience, try to keep the upgrade experience smooth.
:::
- **Scale-up cluster**
:::caution Warning
Scaling up a cluster may cause several minutes of downtime. Please exercise caution.
:::
## Official admonitions ## Official admonitions
Admonitions that are [officially documented](/docs/markdown-features/admonitions) Admonitions that are [officially documented](/docs/markdown-features/admonitions)