Skip to content

Commit 44cc60a

Browse files
committed
feat: reserved meta data.
1 parent ab0be55 commit 44cc60a

File tree

3 files changed

+19
-1
lines changed

3 files changed

+19
-1
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ $ npm install @uiw/react-markdown-preview --save
3030

3131
[![Open in CodeSandbox](https://img.shields.io/badge/Open%20in-CodeSandbox-blue?logo=codesandbox)](https://codesandbox.io/embed/react-markdown-preview-co1mj?fontsize=14&hidenavigation=1&theme=dark)
3232

33-
```js
33+
```js test:meta
3434
import MarkdownPreview from '@uiw/react-markdown-preview';
3535

3636
const source = `

src/index.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ import { octiconLink } from './nodes/octiconLink';
1313
import { copyElement } from './nodes/copy';
1414
import './styles/markdown.less';
1515

16+
import { reservedMeta } from './plugins/reservedMeta';
17+
1618
const rehypeRewriteHandle = (node: ElementContent, index: number | null, parent: Root | Element | null) => {
1719
if (node.type === 'element' && parent && parent.type === 'root' && /h(1|2|3|4|5|6)/.test(node.tagName)) {
1820
const child = node.children && (node.children[0] as Element);
@@ -58,6 +60,7 @@ export default React.forwardRef<MarkdownPreviewRef, MarkdownPreviewProps>((props
5860
useImperativeHandle(ref, () => ({ ...props, mdp }), [mdp, props]);
5961
const cls = `${prefixCls || ''} ${className || ''}`;
6062
const rehypePlugins: PluggableList = [
63+
reservedMeta,
6164
[rehypePrism, { ignoreMissing: true }],
6265
rehypeRaw,
6366
slug,

src/plugins/reservedMeta.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { Plugin } from 'unified';
2+
import { Root, RootContent } from 'hast';
3+
import { visit } from 'unist-util-visit';
4+
5+
export interface ReservedMetaOptions {}
6+
7+
export const reservedMeta: Plugin<[ReservedMetaOptions?], Root> = (options = {}) => {
8+
return (tree) => {
9+
visit(tree, (node: Root | RootContent) => {
10+
if (node.type === 'element' && node.tagName === 'code' && node.data && node.data.meta) {
11+
node.properties = { ...node.properties, 'data-meta': String(node.data.meta) };
12+
}
13+
});
14+
};
15+
};

0 commit comments

Comments
 (0)