-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathcodes.jsx
62 lines (56 loc) · 1.68 KB
/
codes.jsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import React from "react";
import { Button, message, Collapse } from "antd";
import marked from "marked";
import hljs from "highlight.js";
import { copy } from "./utils";
const formatCodeToMarkDown = (code, lang) => `\`\`\`${lang}\n${code}\`\`\`\n`;
const { Panel } = Collapse;
export default function Codes({ codes, renderHeader }) {
return (
<Collapse>
{codes.map((c) => (
<Panel
key={c.text}
header={
<div className="row">
<span className="language language-js">{c.language}</span>
<Button
type="primary"
size="small"
onClick={(e) => {
e.stopPropagation();
copy(c.text, () => {
message.success("复制成功~");
});
}}
>
复制
</Button>
{renderHeader && renderHeader()}
</div>
}
>
<div
dangerouslySetInnerHTML={{
__html: marked(formatCodeToMarkDown(c.text, c.language), {
renderer: new marked.Renderer(),
highlight: function () {
const validLanguage = c.language;
return hljs.highlight(validLanguage, c.text).value;
},
pedantic: false,
gfm: true,
langPrefix: c.language,
breaks: false,
sanitize: false,
smartLists: true,
smartypants: false,
xhtml: false,
}),
}}
></div>
</Panel>
))}
</Collapse>
);
}