| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- import {abcRender} from "../markdown/abcRender";
- import {chartRender} from "../markdown/chartRender";
- import {codeRender} from "../markdown/codeRender";
- import {graphvizRender} from "../markdown/graphvizRender";
- import {highlightRender} from "../markdown/highlightRender";
- import {mathRender} from "../markdown/mathRender";
- import {mermaidRender} from "../markdown/mermaidRender";
- import {mindmapRender} from "../markdown/mindmapRender";
- export const processPasteCode = (html: string, text: string, type = "sv") => {
- const tempElement = document.createElement("div");
- tempElement.innerHTML = html;
- let isCode = false;
- if (tempElement.childElementCount === 1 &&
- (tempElement.lastElementChild as HTMLElement).style.fontFamily.indexOf("monospace") > -1) {
- // VS Code
- isCode = true;
- }
- const pres = tempElement.querySelectorAll("pre");
- if (tempElement.childElementCount === 1 && pres.length === 1
- && pres[0].className !== "vditor-wysiwyg"
- && pres[0].className !== "vditor-sv") {
- // IDE
- isCode = true;
- }
- if (html.indexOf('\n<p class="p1">') === 0) {
- // Xcode
- isCode = true;
- }
- if (tempElement.childElementCount === 1 && tempElement.firstElementChild.tagName === "TABLE" &&
- tempElement.querySelector(".line-number") && tempElement.querySelector(".line-content")) {
- // 网页源码
- isCode = true;
- }
- if (isCode) {
- const code = text || html;
- if (/\n/.test(code) || pres.length === 1) {
- if (type === "wysiwyg") {
- return `<div class="vditor-wysiwyg__block" data-block="0" data-type="code-block"><pre><code>${
- code.replace(/&/g, "&").replace(/</g, "<")}<wbr></code></pre></div>`;
- }
- return "```\n" + code.replace(/&/g, "&").replace(/</g, "<") + "\n```";
- } else {
- if (type === "wysiwyg") {
- return `<code>${code.replace(/&/g, "&").replace(/</g, "<")}</code><wbr>`;
- }
- return `\`${code}\``;
- }
- }
- return false;
- };
- export const processCodeRender = (previewPanel: HTMLElement, vditor: IVditor) => {
- if (!previewPanel) {
- return;
- }
- const codeElement = previewPanel.querySelector("code");
- if (!codeElement) {
- if (previewPanel.parentElement.getAttribute("data-type") === "html-block") {
- previewPanel.style.backgroundColor = "var(--preview-background-color)";
- previewPanel.style.padding = "0.2em 0.4em";
- previewPanel.setAttribute("data-render", "1");
- }
- return;
- }
- const language = codeElement.className.replace("language-", "");
- if (language === "abc") {
- abcRender(previewPanel, vditor.options.cdn);
- } else if (language === "mermaid") {
- mermaidRender(previewPanel, `.vditor-${vditor.currentMode}__preview .language-mermaid`, vditor.options.cdn);
- } else if (language === "echarts") {
- chartRender(previewPanel, vditor.options.cdn);
- } else if (language === "mindmap") {
- mindmapRender(previewPanel, vditor.options.cdn);
- } else if (language === "graphviz") {
- graphvizRender(previewPanel, vditor.options.cdn);
- } else if (language === "math") {
- let tag = "div";
- if (previewPanel.tagName === "SPAN") {
- tag = "span";
- }
- previewPanel.innerHTML = `<code class="language-math"><${tag} class="vditor-math">${previewPanel.innerHTML}</${tag}></code>`;
- mathRender(previewPanel.parentElement, {cdn: vditor.options.cdn, math: vditor.options.preview.math});
- } else {
- highlightRender(Object.assign({}, vditor.options.preview.hljs), previewPanel, vditor.options.cdn);
- codeRender(previewPanel, vditor.options.lang);
- }
- previewPanel.setAttribute("data-render", "1");
- };
|