/// #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 {processRender} from "../util/processCode"; declare const html2canvas: (element: Element) => Promise; export const afterExport = (exportPath: string, msgId: string) => { /// #if !BROWSER showMessage(`${window.siyuan.languages.exported}${escapeHtml(exportPath)} ${window.siyuan.languages.showInFolder}`, 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} ${window.siyuan.languages.cancel} ${window.siyuan.languages.confirm} `, width: isMobile() ? "90vw" : "990px", }); fetchPost("/api/export/exportPreviewHTML", { id, keepFold: false, }, (response) => { const previewElement = exportDialog.element.querySelector("#preview") previewElement.innerHTML = response.data.content; processRender(previewElement); highlightRender(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) => { canvas.toBlob((blob: Blob) => { const formData = new FormData(); formData.append("file", blob, response.data.name + ".png"); formData.append("type", "image/png"); fetchPost("/api/export/exportAsFile", formData, () => { hideMessage(msgId); exportDialog.destroy(); }); }); }); }); }, Constants.TIMEOUT_TRANSITION) }); }); }