mirror of
https://github.com/facebook/docusaurus.git
synced 2025-06-09 14:22:27 +02:00
docs: formally document how admonitions can be customized (#7799)
This commit is contained in:
parent
e912e536c8
commit
09326bd456
3 changed files with 53 additions and 23 deletions
|
@ -11,7 +11,7 @@ import Tabs from '@theme/Tabs';
|
||||||
import TabItem from '@theme/TabItem';
|
import TabItem from '@theme/TabItem';
|
||||||
import Admonition from '@theme/Admonition';
|
import Admonition from '@theme/Admonition';
|
||||||
|
|
||||||
In addition to the basic Markdown syntax, we use [remark-admonitions](https://github.com/elviswolcott/remark-admonitions) alongside MDX to add support for admonitions. Admonitions are wrapped by a set of 3 colons.
|
In addition to the basic Markdown syntax, we have a special admonitions syntax by wrapping text with a set of 3 colons, followed by a label denoting its type.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
|
@ -107,7 +107,7 @@ Hello world
|
||||||
|
|
||||||
## Specifying title {#specifying-title}
|
## Specifying title {#specifying-title}
|
||||||
|
|
||||||
You may also specify an optional title
|
You may also specify an optional title.
|
||||||
|
|
||||||
```md
|
```md
|
||||||
:::note Your Title
|
:::note Your Title
|
||||||
|
@ -204,3 +204,53 @@ The types that are accepted are the same as above: `note`, `tip`, `danger`, `inf
|
||||||
</Admonition>
|
</Admonition>
|
||||||
</BrowserWindow>
|
</BrowserWindow>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Customizing admonitions {#customizing-admonitions}
|
||||||
|
|
||||||
|
There are two kinds of customizations possible with admonitions: **parsing** and **rendering**.
|
||||||
|
|
||||||
|
### Customizing rendering behavior {#customizing-rendering-behavior}
|
||||||
|
|
||||||
|
You can customize how each individual admonition type is rendered through [swizzling](../../swizzling.md). You can often achieve your goal through a simple wrapper. For example, in the follow example, we swap out the icon for `info` admonitions only.
|
||||||
|
|
||||||
|
```jsx title="src/theme/Admonition.js"
|
||||||
|
import React from 'react';
|
||||||
|
import Admonition from '@theme-original/Admonition';
|
||||||
|
import MyIcon from '@site/static/img/info.svg';
|
||||||
|
|
||||||
|
export default function AdmonitionWrapper(props) {
|
||||||
|
if (props.type !== 'info') {
|
||||||
|
return <Admonition {...props} />;
|
||||||
|
}
|
||||||
|
return <Admonition icon={<MyIcon />} {...props} />;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Customizing parsing behavior {#customizing-parsing-behavior}
|
||||||
|
|
||||||
|
Admonitions are implemented with a [Remark plugin](./markdown-features-plugins.mdx). The plugin is designed to be configurable. To customize the Remark plugin for a specific content plugin (docs, blog, pages), pass the options through the `admonitions` key.
|
||||||
|
|
||||||
|
```js title="docusaurus.config.js"
|
||||||
|
module.exports = {
|
||||||
|
presets: [
|
||||||
|
[
|
||||||
|
'@docusaurus/preset-classic',
|
||||||
|
{
|
||||||
|
docs: {
|
||||||
|
admonitions: {
|
||||||
|
tag: ':::',
|
||||||
|
keywords: ['note', 'tip', 'info', 'caution', 'danger'],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
],
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
The plugin accepts two options:
|
||||||
|
|
||||||
|
- `tag`: The tag that encloses the admonition. Defaults to `:::`.
|
||||||
|
- `keywords`: An array of keywords that can be used as the type for the admonition. Note that if you override this, the default values will not be applied.
|
||||||
|
|
||||||
|
The `keyword` will be passed as the `type` prop of the `Admonition` component. If you register more types than the default, you are also responsible for providing their implementation—including the container's style, icon, default title text, etc. You would usually need to [eject](../../swizzling.md#ejecting) the `@theme/Admonition` component, so you could re-use the same infrastructure as the other types.
|
||||||
|
|
|
@ -25,7 +25,7 @@ If you play with the [MDX playground](https://mdx-git-renovate-babel-monorepo-md
|
||||||
|
|
||||||
:::tip
|
:::tip
|
||||||
|
|
||||||
Use plugins to introduce shorter syntax for the most commonly used JSX elements in your project. The [admonition](./markdown-features-admonitions.mdx) syntax that we offer is also generated by a [Remark plugin](https://github.com/elviswolcott/remark-admonitions), and you could do the same for your own use case.
|
Use plugins to introduce shorter syntax for the most commonly used JSX elements in your project. The [admonition](./markdown-features-admonitions.mdx) syntax that we offer is also generated by a Remark plugin, and you could do the same for your own use case.
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
|
|
|
@ -180,26 +180,6 @@ module.exports = {
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
In addition to these plugins and themes, `@docusaurus/theme-classic` adds [`remark-admonitions`](https://github.com/elviswolcott/remark-admonitions) as a remark plugin to `@docusaurus/plugin-content-blog` and `@docusaurus/plugin-content-docs`.
|
|
||||||
|
|
||||||
The `admonitions` key will be passed as the [options](https://github.com/elviswolcott/remark-admonitions#options) to `remark-admonitions`. Passing `false` will prevent the plugin from being added to MDX.
|
|
||||||
|
|
||||||
```js title="docusaurus.config.js"
|
|
||||||
module.exports = {
|
|
||||||
presets: [
|
|
||||||
[
|
|
||||||
'@docusaurus/preset-classic',
|
|
||||||
{
|
|
||||||
docs: {
|
|
||||||
// options for remark-admonitions
|
|
||||||
admonitions: {},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
],
|
|
||||||
};
|
|
||||||
```
|
|
||||||
|
|
||||||
### Installing presets {#installing-presets}
|
### Installing presets {#installing-presets}
|
||||||
|
|
||||||
A preset is usually an npm package, so you install them like other npm packages using npm.
|
A preset is usually an npm package, so you install them like other npm packages using npm.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue