Vanessa 2025-09-28 19:56:04 +08:00
parent db2bfdbdd6
commit c202d58bce
3 changed files with 23 additions and 5 deletions

View file

@ -28,7 +28,7 @@ export const chartRender = (element: Element, cdn = Constants.PROTYLE_CDN) => {
return; return;
} }
if (!e.firstElementChild.classList.contains("protyle-icons")) { if (!e.firstElementChild.classList.contains("protyle-icons")) {
e.insertAdjacentHTML("afterbegin", genIconHTML(wysiswgElement)); e.insertAdjacentHTML("afterbegin", genIconHTML(wysiswgElement, ["refresh", "edit", "more"]));
} }
const renderElement = e.firstElementChild.nextElementSibling as HTMLElement; const renderElement = e.firstElementChild.nextElementSibling as HTMLElement;
if (!e.getAttribute("data-content")) { if (!e.getAttribute("data-content")) {
@ -41,9 +41,12 @@ export const chartRender = (element: Element, cdn = Constants.PROTYLE_CDN) => {
} }
const chartInstance = window.echarts.getInstanceById(renderElement.lastElementChild?.getAttribute("_echarts_instance_")); const chartInstance = window.echarts.getInstanceById(renderElement.lastElementChild?.getAttribute("_echarts_instance_"));
const option = await looseJsonParse(Lute.UnEscapeHTMLStr(e.getAttribute("data-content"))); const option = await looseJsonParse(Lute.UnEscapeHTMLStr(e.getAttribute("data-content")));
if (chartInstance && chartInstance.getOption().series[0]?.type !== option.series[0]?.type) { if (chartInstance) {
if (chartInstance.getOption().series[0]?.type !== option.series[0]?.type) {
chartInstance.clear(); chartInstance.clear();
} }
chartInstance?.resize();
}
window.echarts.init(renderElement.lastElementChild, window.siyuan.config.appearance.mode === 1 ? "dark" : undefined, {width}).setOption(option); window.echarts.init(renderElement.lastElementChild, window.siyuan.config.appearance.mode === 1 ? "dark" : undefined, {width}).setOption(option);
} catch (error) { } catch (error) {
window.echarts.dispose(renderElement.lastElementChild); window.echarts.dispose(renderElement.lastElementChild);

View file

@ -1,7 +1,7 @@
import {isInEmbedBlock} from "../util/hasClosest"; import {isInEmbedBlock} from "../util/hasClosest";
import {Constants} from "../../constants"; import {Constants} from "../../constants";
export const genIconHTML = (element?: false | HTMLElement) => { export const genIconHTML = (element?: false | HTMLElement, actions = ["edit", "more"]) => {
let enable = true; let enable = true;
if (element) { if (element) {
const readonly = element.getAttribute("data-readonly"); const readonly = element.getAttribute("data-readonly");
@ -11,10 +11,18 @@ export const genIconHTML = (element?: false | HTMLElement) => {
return '<div class="protyle-icons"></div>'; return '<div class="protyle-icons"></div>';
} }
} }
if (actions.length === 3) {
return `<div class="protyle-icons">
<span aria-label="${window.siyuan.languages.refresh}" class="b3-tooltips__nw b3-tooltips protyle-icon protyle-icon--first protyle-action__reload"><svg><use xlink:href="#iconRefresh"></use></svg></span>
<span aria-label="${window.siyuan.languages.edit}" class="b3-tooltips__nw b3-tooltips protyle-icon protyle-action__edit${enable ? "" : " fn__none"}"><svg><use xlink:href="#iconEdit"></use></svg></span>
<span aria-label="${window.siyuan.languages.more}" class="b3-tooltips__nw b3-tooltips protyle-icon protyle-action__menu protyle-icon--last"><svg><use xlink:href="#iconMore"></use></svg></span>
</div>`;
} else {
return `<div class="protyle-icons"> return `<div class="protyle-icons">
<span aria-label="${window.siyuan.languages.edit}" class="b3-tooltips__nw b3-tooltips protyle-icon protyle-icon--first protyle-action__edit${enable ? "" : " fn__none"}"><svg><use xlink:href="#iconEdit"></use></svg></span> <span aria-label="${window.siyuan.languages.edit}" class="b3-tooltips__nw b3-tooltips protyle-icon protyle-icon--first protyle-action__edit${enable ? "" : " fn__none"}"><svg><use xlink:href="#iconEdit"></use></svg></span>
<span aria-label="${window.siyuan.languages.more}" class="b3-tooltips__nw b3-tooltips protyle-icon protyle-action__menu protyle-icon--last${enable ? "" : " protyle-icon--first"}"><svg><use xlink:href="#iconMore"></use></svg></span> <span aria-label="${window.siyuan.languages.more}" class="b3-tooltips__nw b3-tooltips protyle-icon protyle-action__menu protyle-icon--last${enable ? "" : " protyle-icon--first"}"><svg><use xlink:href="#iconMore"></use></svg></span>
</div>`; </div>`;
}
}; };
export const genRenderFrame = (renderElement: Element) => { export const genRenderFrame = (renderElement: Element) => {

View file

@ -100,6 +100,7 @@ import {globalClickHideMenu} from "../../boot/globalEvent/click";
import {hideTooltip} from "../../dialog/tooltip"; import {hideTooltip} from "../../dialog/tooltip";
import {openGalleryItemMenu} from "../render/av/gallery/util"; import {openGalleryItemMenu} from "../render/av/gallery/util";
import {clearSelect} from "../util/clearSelect"; import {clearSelect} from "../util/clearSelect";
import {chartRender} from "../render/chartRender";
export class WYSIWYG { export class WYSIWYG {
public lastHTMLs: { [key: string]: string } = {}; public lastHTMLs: { [key: string]: string } = {};
@ -2815,6 +2816,12 @@ export class WYSIWYG {
if (embedReloadElement) { if (embedReloadElement) {
embedReloadElement.removeAttribute("data-render"); embedReloadElement.removeAttribute("data-render");
blockRender(protyle, embedReloadElement); blockRender(protyle, embedReloadElement);
} else {
const blockElement = hasClosestBlock(reloadElement);
if (blockElement && blockElement.getAttribute("data-subtype") === "echarts") {
blockElement.removeAttribute("data-render");
chartRender(blockElement);
}
} }
event.stopPropagation(); event.stopPropagation();
event.preventDefault(); event.preventDefault();