diff --git a/app/src/protyle/render/abcRender.ts b/app/src/protyle/render/abcRender.ts index 06ef1fce9..efd56a920 100644 --- a/app/src/protyle/render/abcRender.ts +++ b/app/src/protyle/render/abcRender.ts @@ -37,13 +37,13 @@ export const abcRender = (element: Element, cdn = Constants.PROTYLE_CDN) => { } if (abcElements.length > 0) { addScript(`${cdn}/js/abcjs/abcjs-basic-min.js?v=6.5.0`, "protyleAbcjsScript").then(() => { - const wysiswgElement = hasClosestByClassName(element, "protyle-wysiwyg", true); + const wysiwygElement = hasClosestByClassName(element, "protyle-wysiwyg", true); abcElements.forEach((e: HTMLDivElement) => { if (e.getAttribute("data-render") === "true") { return; } if (!e.firstElementChild.classList.contains("protyle-icons")) { - e.insertAdjacentHTML("afterbegin", genIconHTML(wysiswgElement)); + e.insertAdjacentHTML("afterbegin", genIconHTML(wysiwygElement)); } const renderElement = e.firstElementChild.nextElementSibling as HTMLElement; renderElement.innerHTML = `${Constants.ZWSP}
`; diff --git a/app/src/protyle/render/chartRender.ts b/app/src/protyle/render/chartRender.ts index e334901a8..83c8e0cb5 100644 --- a/app/src/protyle/render/chartRender.ts +++ b/app/src/protyle/render/chartRender.ts @@ -31,24 +31,25 @@ export const chartRender = (element: Element, cdn = Constants.PROTYLE_CDN) => { e.insertAdjacentHTML("afterbegin", genIconHTML(wysiswgElement)); } const renderElement = e.firstElementChild.nextElementSibling as HTMLElement; + if (!e.getAttribute("data-content")) { + renderElement.innerHTML = `${Constants.ZWSP}`; + return; + } try { - const chartInstance = window.echarts.getInstanceById(renderElement.getAttribute("_echarts_instance_")); + if (!renderElement.lastElementChild || renderElement.childElementCount === 1) { + renderElement.innerHTML = `${Constants.ZWSP}
`; + } + const chartInstance = window.echarts.getInstanceById(renderElement.lastElementChild?.getAttribute("_echarts_instance_")); const option = await looseJsonParse(Lute.UnEscapeHTMLStr(e.getAttribute("data-content"))); if (chartInstance && chartInstance.getOption().series[0]?.type !== option.series[0]?.type) { chartInstance.clear(); } - renderElement.classList.remove("ft__error"); - renderElement.style.height = e.style.height; - window.echarts.init(renderElement, window.siyuan.config.appearance.mode === 1 ? "dark" : undefined, {width}).setOption(option); - e.setAttribute("data-render", "true"); - if (!renderElement.textContent.endsWith(Constants.ZWSP)) { - renderElement.firstElementChild.insertAdjacentText("beforeend", Constants.ZWSP); - } + window.echarts.init(renderElement.lastElementChild, window.siyuan.config.appearance.mode === 1 ? "dark" : undefined, {width}).setOption(option); } catch (error) { - window.echarts.dispose(renderElement); - renderElement.classList.add("ft__error"); - renderElement.innerHTML = `echarts render error:
${error}`; + window.echarts.dispose(renderElement.lastElementChild); + renderElement.innerHTML = `${Constants.ZWSP}
echarts render error:
${error}
`; } + e.setAttribute("data-render", "true"); }); }); }); diff --git a/app/src/protyle/render/flowchartRender.ts b/app/src/protyle/render/flowchartRender.ts index 152a83198..6da8c5614 100644 --- a/app/src/protyle/render/flowchartRender.ts +++ b/app/src/protyle/render/flowchartRender.ts @@ -49,8 +49,12 @@ const initFlowchart = (flowchartElements: Element[]) => { item.insertAdjacentHTML("afterbegin", genIconHTML(wysiswgElement)); } const renderElement = item.firstElementChild.nextElementSibling; - renderElement.innerHTML = `${Constants.ZWSP}
`; + if (!item.getAttribute("data-content")) { + renderElement.innerHTML = `${Constants.ZWSP}`; + return; + } try { + renderElement.innerHTML = `${Constants.ZWSP}
`; flowchart.parse(Lute.UnEscapeHTMLStr(item.getAttribute("data-content"))).drawSVG(renderElement.lastElementChild); } catch (error) { renderElement.innerHTML = `${Constants.ZWSP}
Flow Chart render error:
${error}
`; diff --git a/app/src/protyle/render/graphvizRender.ts b/app/src/protyle/render/graphvizRender.ts index 9461c87aa..4097730d3 100644 --- a/app/src/protyle/render/graphvizRender.ts +++ b/app/src/protyle/render/graphvizRender.ts @@ -24,6 +24,10 @@ export const graphvizRender = (element: Element, cdn = Constants.PROTYLE_CDN) => e.insertAdjacentHTML("afterbegin", genIconHTML(wysiswgElement)); } const renderElement = e.firstElementChild.nextElementSibling as HTMLElement; + if (!e.getAttribute("data-content")) { + renderElement.innerHTML = `${Constants.ZWSP}`; + return; + } try { Viz.instance().then((viz) => { const svgElement = viz.renderSVGElement(Lute.UnEscapeHTMLStr(e.getAttribute("data-content"))); diff --git a/app/src/protyle/render/mermaidRender.ts b/app/src/protyle/render/mermaidRender.ts index 4835f8e19..627fc3b42 100644 --- a/app/src/protyle/render/mermaidRender.ts +++ b/app/src/protyle/render/mermaidRender.ts @@ -70,9 +70,13 @@ const initMermaid = (mermaidElements: Element[]) => { item.insertAdjacentHTML("afterbegin", genIconHTML(wysiswgElement)); } const renderElement = item.firstElementChild.nextElementSibling as HTMLElement; + if (!item.getAttribute("data-content")) { + renderElement.innerHTML = `${Constants.ZWSP}`; + return; + } const id = "mermaid" + Lute.NewNodeID(); - renderElement.innerHTML = `${Constants.ZWSP}
`; try { + renderElement.innerHTML = `${Constants.ZWSP}
`; const mermaidData = await window.mermaid.render(id, Lute.UnEscapeHTMLStr(item.getAttribute("data-content"))); renderElement.lastElementChild.innerHTML = mermaidData.svg; } catch (e) { @@ -80,7 +84,6 @@ const initMermaid = (mermaidElements: Element[]) => { renderElement.lastElementChild.innerHTML = `${errorElement.outerHTML}
${e.message.replace(/\n/, "
")}
`; errorElement.parentElement.remove(); } - item.setAttribute("data-render", "true"); }); }; diff --git a/app/src/protyle/render/mindmapRender.ts b/app/src/protyle/render/mindmapRender.ts index ada453bbf..242aab679 100644 --- a/app/src/protyle/render/mindmapRender.ts +++ b/app/src/protyle/render/mindmapRender.ts @@ -28,9 +28,15 @@ export const mindmapRender = (element: Element, cdn = Constants.PROTYLE_CDN) => e.insertAdjacentHTML("afterbegin", genIconHTML(wysiswgElement)); } const renderElement = e.firstElementChild.nextElementSibling as HTMLElement; + if (!e.getAttribute("data-content")) { + renderElement.innerHTML = `${Constants.ZWSP}`; + return; + } try { - renderElement.style.height = e.style.height; - window.echarts.init(renderElement, window.siyuan.config.appearance.mode === 1 ? "dark" : undefined, { + if (!renderElement.lastElementChild || renderElement.childElementCount === 1) { + renderElement.innerHTML = `${Constants.ZWSP}
`; + } + window.echarts.init(renderElement.lastElementChild, window.siyuan.config.appearance.mode === 1 ? "dark" : undefined, { width, }).setOption({ series: [ @@ -73,15 +79,11 @@ export const mindmapRender = (element: Element, cdn = Constants.PROTYLE_CDN) => }, backgroundColor: "transparent", }); - e.setAttribute("data-render", "true"); - if (!renderElement.textContent.endsWith(Constants.ZWSP)) { - renderElement.firstElementChild.insertAdjacentText("beforeend", Constants.ZWSP); - } - renderElement.classList.remove("ft__error"); } catch (error) { - renderElement.classList.add("ft__error"); - renderElement.innerHTML = `Mindmap render error:
${error}`; + window.echarts.dispose(renderElement.lastElementChild); + renderElement.innerHTML = `${Constants.ZWSP}
Mindmap render error:
${error}
`; } + e.setAttribute("data-render", "true"); }); }); }; diff --git a/app/src/protyle/render/plantumlRender.ts b/app/src/protyle/render/plantumlRender.ts index ae9ef97c4..4458e832b 100644 --- a/app/src/protyle/render/plantumlRender.ts +++ b/app/src/protyle/render/plantumlRender.ts @@ -24,14 +24,22 @@ export const plantumlRender = (element: Element, cdn = Constants.PROTYLE_CDN) => e.insertAdjacentHTML("afterbegin", genIconHTML(wysiswgElement)); } const renderElement = e.firstElementChild.nextElementSibling as HTMLElement; + if (!e.getAttribute("data-content")) { + renderElement.innerHTML = `${Constants.ZWSP}`; + return; + } try { - renderElement.innerHTML = ``; + const url = `${window.siyuan.config.editor.plantUMLServePath}${window.plantumlEncoder.encode(Lute.UnEscapeHTMLStr(e.getAttribute("data-content")))}`; + renderElement.innerHTML = ``; renderElement.classList.remove("ft__error"); - e.setAttribute("data-render", "true"); + renderElement.firstElementChild.addEventListener("error", () => { + renderElement.innerHTML = ``; + }); } catch (error) { renderElement.classList.add("ft__error"); renderElement.innerHTML = `plantuml render error:
${error}`; } + e.setAttribute("data-render", "true"); }); }); }; diff --git a/app/src/types/index.d.ts b/app/src/types/index.d.ts index a556ef1aa..ff560f628 100644 --- a/app/src/types/index.d.ts +++ b/app/src/types/index.d.ts @@ -141,7 +141,7 @@ interface CSSStyleDeclarationElectron extends CSSStyleDeclaration { interface Window { echarts: { - init(element: HTMLElement, theme?: string, options?: { + init(element: Element, theme?: string, options?: { width: number }): { setOption(option: any): void;