Skip to content

Commit cc79d31

Browse files
committed
feat: add disableCopy props.
1 parent 560dfd2 commit cc79d31

File tree

2 files changed

+18
-14
lines changed

2 files changed

+18
-14
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ import { ReactMarkdownProps } from 'react-markdown';
5454
type MarkdownPreviewProps = {
5555
className?: string;
5656
source?: string;
57+
disableCopy?: boolean;
5758
style?: React.CSSProperties;
5859
warpperElement?: HTMLDivElement;
5960
pluginsFilter?: (type: 'rehype' | 'remark', plugin: PluggableList) => PluggableList;

src/index.tsx

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,24 +15,11 @@ import './styles/markdown.less';
1515

1616
import { reservedMeta } from './plugins/reservedMeta';
1717

18-
const rehypeRewriteHandle = (node: ElementContent, index: number | null, parent: Root | Element | null) => {
19-
if (node.type === 'element' && parent && parent.type === 'root' && /h(1|2|3|4|5|6)/.test(node.tagName)) {
20-
const child = node.children && (node.children[0] as Element);
21-
if (child && child.properties && child.properties.ariaHidden === 'true') {
22-
child.properties = { class: 'anchor', ...child.properties };
23-
child.children = [octiconLink];
24-
}
25-
}
26-
if (node.type === 'element' && node.tagName === 'pre') {
27-
const code = getCodeString(node.children);
28-
node.children.push(copyElement(code));
29-
}
30-
};
31-
3218
export interface MarkdownPreviewProps extends Omit<Options, 'children'> {
3319
prefixCls?: string;
3420
className?: string;
3521
source?: string;
22+
disableCopy?: boolean;
3623
style?: React.CSSProperties;
3724
pluginsFilter?: (type: 'rehype' | 'remark', plugin: PluggableList) => PluggableList;
3825
warpperElement?: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>;
@@ -50,6 +37,7 @@ export default React.forwardRef<MarkdownPreviewRef, MarkdownPreviewProps>((props
5037
className,
5138
source,
5239
style,
40+
disableCopy = false,
5341
onScroll,
5442
onMouseOver,
5543
pluginsFilter,
@@ -59,6 +47,21 @@ export default React.forwardRef<MarkdownPreviewRef, MarkdownPreviewProps>((props
5947
const mdp = React.createRef<HTMLDivElement>();
6048
useImperativeHandle(ref, () => ({ ...props, mdp }), [mdp, props]);
6149
const cls = `${prefixCls || ''} ${className || ''}`;
50+
51+
const rehypeRewriteHandle = (node: ElementContent, index: number | null, parent: Root | Element | null) => {
52+
if (node.type === 'element' && parent && parent.type === 'root' && /h(1|2|3|4|5|6)/.test(node.tagName)) {
53+
const child = node.children && (node.children[0] as Element);
54+
if (child && child.properties && child.properties.ariaHidden === 'true') {
55+
child.properties = { class: 'anchor', ...child.properties };
56+
child.children = [octiconLink];
57+
}
58+
}
59+
if (node.type === 'element' && node.tagName === 'pre' && !disableCopy) {
60+
const code = getCodeString(node.children);
61+
node.children.push(copyElement(code));
62+
}
63+
};
64+
6265
const rehypePlugins: PluggableList = [
6366
reservedMeta,
6467
[rehypePrism, { ignoreMissing: true }],

0 commit comments

Comments
 (0)