/// #if !BROWSER import {escapeHtml} from "../../util/escape"; import {shell} from "electron"; import * as path from "path"; /// #endif import {hideMessage, showMessage} from "../../dialog/message"; import {fetchPost} from "../../util/fetch"; import {Dialog} from "../../dialog"; import {addScript} from "../util/addScript"; import {isMobile} from "../../util/functions"; import {Constants} from "../../constants"; import {highlightRender} from "../markdown/highlightRender"; import {mathRender} from "../markdown/mathRender"; import {mermaidRender} from "../markdown/mermaidRender"; import {flowchartRender} from "../markdown/flowchartRender"; import {graphvizRender} from "../markdown/graphvizRender"; import {chartRender} from "../markdown/chartRender"; import {mindmapRender} from "../markdown/mindmapRender"; import {abcRender} from "../markdown/abcRender"; import {plantumlRender} from "../markdown/plantumlRender"; declare const html2canvas: (element: Element) => Promise; export const afterExport = (exportPath: string, msgId: string) => { /// #if !BROWSER showMessage(`${window.siyuan.languages.exported}${escapeHtml(exportPath)}
`, 6000, "info", msgId); document.querySelector(`#message [data-id="${msgId}"] button`).addEventListener("click", () => { shell.showItemInFolder(path.join(exportPath)); hideMessage(msgId); }); /// #endif }; export const exportImage = (id: string) => { const exportDialog = new Dialog({ title: window.siyuan.languages.exportAsImage, content: `
${window.siyuan.languages.exportBySiYuan}
`, width: isMobile() ? "90vw" : "990px", }); fetchPost("/api/export/exportPreviewHTML", { id, keepFold: false, }, (response) => { const previewElement = exportDialog.element.querySelector("#preview") previewElement.innerHTML = response.data.content; highlightRender(previewElement); mathRender(previewElement); mermaidRender(previewElement); flowchartRender(previewElement); graphvizRender(previewElement); chartRender(previewElement); mindmapRender(previewElement); abcRender(previewElement); plantumlRender(previewElement); previewElement.querySelectorAll("table").forEach((item: HTMLElement) => { if (item.clientWidth > item.parentElement.clientWidth) { // @ts-ignore item.style.zoom = item.parentElement.clientWidth / item.clientWidth; } }); const btnsElement = exportDialog.element.querySelectorAll(".b3-button"); btnsElement[0].addEventListener("click", () => { exportDialog.destroy(); }); btnsElement[1].addEventListener("click", () => { const msgId = showMessage(window.siyuan.languages.exporting, 0); previewElement.parentElement.style.maxHeight = "none"; setTimeout(() => { addScript("stage/protyle/js/html2canvas.min.js?v=1.4.1", "protyleHtml2canvas").then(() => { html2canvas(previewElement.parentElement).then((canvas) => { const link = document.createElement("a"); link.download = response.data.name + ".png"; link.href = "data:" + canvas.toDataURL("image/png"); link.click(); link.remove(); hideMessage(msgId); exportDialog.destroy(); }); }); }, Constants.TIMEOUT_TRANSITION) }); }); }