A privacy-first, self-hosted, fully open source personal knowledge management software, written in typescript and golang. (PERSONAL FORK)
at lambda-fork/main 78 lines 3.1 kB view raw
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("<", "&lt;").replace(">", "&gt;"); 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};