A privacy-first, self-hosted, fully open source personal knowledge management software, written in typescript and golang. (PERSONAL FORK)
1import {abcRender} from "../render/abcRender";
2import {chartRender} from "../render/chartRender";
3import {graphvizRender} from "../render/graphvizRender";
4import {mathRender} from "../render/mathRender";
5import {mermaidRender} from "../render/mermaidRender";
6import {mindmapRender} from "../render/mindmapRender";
7import {flowchartRender} from "../render/flowchartRender";
8import {plantumlRender} from "../render/plantumlRender";
9import {Constants} from "../../constants";
10import {htmlRender} from "../render/htmlRender";
11
12export const processPasteCode = (html: string, text: string, protyle: IProtyle) => {
13 const tempElement = document.createElement("div");
14 tempElement.innerHTML = html;
15 let isCode = false;
16 if (tempElement.childElementCount === 1 &&
17 (tempElement.lastElementChild as HTMLElement).style.fontFamily.indexOf("monospace") > -1) {
18 // VS Code
19 isCode = true;
20 } else if (tempElement.childElementCount === 1 && tempElement.querySelectorAll("pre").length === 1) {
21 // IDE
22 isCode = true;
23 } else if (html.indexOf('\n<p class="p1">') === 0) {
24 // Xcode
25 isCode = true;
26 } else if (tempElement.childElementCount === 1 && tempElement.firstElementChild.tagName === "TABLE" &&
27 tempElement.querySelector(".line-number") && tempElement.querySelector(".line-content")) {
28 // 网页源码
29 isCode = true;
30 }
31
32 if (isCode) {
33 let code = text || html;
34 if (/\n/.test(code)) {
35 return protyle.lute.Md2BlockDOM(code);
36 } else {
37 // Paste code from IDE no longer escape `<` and `>` https://github.com/siyuan-note/siyuan/issues/8340
38 code = code.replace("<", "<").replace(">", ">");
39 return "`" + code + "`";
40 }
41 }
42 return false;
43};
44
45export const processRender = (previewPanel: Element) => {
46 const language = previewPanel.getAttribute("data-subtype");
47 if (!Constants.SIYUAN_RENDER_CODE_LANGUAGES.includes(language) || previewPanel.getAttribute("data-type") !== "NodeHTMLBlock") {
48 abcRender(previewPanel);
49 htmlRender(previewPanel);
50 plantumlRender(previewPanel);
51 mermaidRender(previewPanel);
52 flowchartRender(previewPanel);
53 chartRender(previewPanel);
54 mindmapRender(previewPanel);
55 graphvizRender(previewPanel);
56 mathRender(previewPanel);
57 return;
58 }
59 if (language === "abc") {
60 abcRender(previewPanel);
61 } else if (language === "plantuml") {
62 plantumlRender(previewPanel);
63 } else if (language === "mermaid") {
64 mermaidRender(previewPanel);
65 } else if (language === "flowchart") {
66 flowchartRender(previewPanel);
67 } else if (language === "echarts") {
68 chartRender(previewPanel);
69 } else if (language === "mindmap") {
70 mindmapRender(previewPanel);
71 } else if (language === "graphviz") {
72 graphvizRender(previewPanel);
73 } else if (language === "math") {
74 mathRender(previewPanel);
75 } else if (previewPanel.getAttribute("data-type") === "NodeHTMLBlock") {
76 htmlRender(previewPanel);
77 }
78};