import {fetchPost} from "../util/fetch"; /// #if !BROWSER import {afterExport} from "../protyle/export/util"; import {ipcRenderer} from "electron"; import * as path from "path"; /// #endif import {isBrowser} from "../util/functions"; import {showMessage} from "../dialog/message"; import {showFileInFolder} from "../util/pathName"; import {Constants} from "../constants"; import {openByMobile} from "../protyle/util/compatibility"; import {exportLayout} from "../layout/util"; import {exitSiYuan} from "../dialog/processSystem"; export const exportConfig = { element: undefined as Element, genHTML: () => { return `
${window.siyuan.languages.ref}
${window.siyuan.languages.export11}
${window.siyuan.languages.blockEmbed}
${window.siyuan.languages.export12}
${window.siyuan.languages.export5}
${window.siyuan.languages.export6}
${window.siyuan.languages.export21}
${window.siyuan.languages.export22}
${window.siyuan.languages.export27}
${window.siyuan.languages.export28}
${window.siyuan.languages.export29}
${window.siyuan.languages.export30}
${window.siyuan.languages.export28}
${window.siyuan.languages.export29}
${window.siyuan.languages.export10}
${window.siyuan.languages.export25}
${window.siyuan.languages.export26}
${window.siyuan.languages.export13}
${window.siyuan.languages.export14}
${window.siyuan.languages.export15}
${window.siyuan.languages.export16}
${window.siyuan.languages.export19} ${window.siyuan.config.export.pandocBin}
${window.siyuan.languages.export20}
${window.siyuan.languages.export} Data
${window.siyuan.languages.exportDataTip}
${window.siyuan.languages.import} Data
${window.siyuan.languages.importDataTip}
${window.siyuan.languages.exportConf}
${window.siyuan.languages.exportConfTip}
${window.siyuan.languages.importConf}
${window.siyuan.languages.importConfTip}
`; }, bindEvent: () => { (exportConfig.element.querySelector("#docxTemplate") as HTMLInputElement).value = window.siyuan.config.export.docxTemplate; (exportConfig.element.querySelector("#pdfFooter") as HTMLInputElement).value = window.siyuan.config.export.pdfFooter; (exportConfig.element.querySelector("#pdfWatermarkStr") as HTMLInputElement).value = window.siyuan.config.export.pdfWatermarkStr; (exportConfig.element.querySelector("#pdfWatermarkDesc") as HTMLInputElement).value = window.siyuan.config.export.pdfWatermarkDesc; (exportConfig.element.querySelector("#imageWatermarkStr") as HTMLInputElement).value = window.siyuan.config.export.imageWatermarkStr; (exportConfig.element.querySelector("#imageWatermarkDesc") as HTMLInputElement).value = window.siyuan.config.export.imageWatermarkDesc; (exportConfig.element.querySelector("#blockRefTextLeft") as HTMLInputElement).value = window.siyuan.config.export.blockRefTextLeft; (exportConfig.element.querySelector("#blockRefTextRight") as HTMLInputElement).value = window.siyuan.config.export.blockRefTextRight; (exportConfig.element.querySelector("#tagOpenMarker") as HTMLInputElement).value = window.siyuan.config.export.tagOpenMarker; (exportConfig.element.querySelector("#tagCloseMarker") as HTMLInputElement).value = window.siyuan.config.export.tagCloseMarker; const pandocBinPathElement = exportConfig.element.querySelector("#pandocBinPath"); const setexprt = (pandocBin?: string) => { fetchPost("/api/setting/setExport", { paragraphBeginningSpace: (exportConfig.element.querySelector("#paragraphBeginningSpace") as HTMLInputElement).checked, addTitle: (exportConfig.element.querySelector("#addTitle") as HTMLInputElement).checked, markdownYFM: (exportConfig.element.querySelector("#markdownYFM") as HTMLInputElement).checked, blockRefMode: parseInt((exportConfig.element.querySelector("#blockRefMode") as HTMLSelectElement).value, 10), blockEmbedMode: parseInt((exportConfig.element.querySelector("#blockEmbedMode") as HTMLSelectElement).value, 10), fileAnnotationRefMode: parseInt((exportConfig.element.querySelector("#fileAnnotationRefMode") as HTMLSelectElement).value, 10), pdfFooter: (exportConfig.element.querySelector("#pdfFooter") as HTMLInputElement).value, pdfWatermarkStr: (exportConfig.element.querySelector("#pdfWatermarkStr") as HTMLInputElement).value, pdfWatermarkDesc: (exportConfig.element.querySelector("#pdfWatermarkDesc") as HTMLInputElement).value, imageWatermarkStr: (exportConfig.element.querySelector("#imageWatermarkStr") as HTMLInputElement).value, imageWatermarkDesc: (exportConfig.element.querySelector("#imageWatermarkDesc") as HTMLInputElement).value, docxTemplate: (exportConfig.element.querySelector("#docxTemplate") as HTMLInputElement).value, blockRefTextLeft: (exportConfig.element.querySelector("#blockRefTextLeft") as HTMLInputElement).value, blockRefTextRight: (exportConfig.element.querySelector("#blockRefTextRight") as HTMLInputElement).value, tagOpenMarker: (exportConfig.element.querySelector("#tagOpenMarker") as HTMLInputElement).value, tagCloseMarker: (exportConfig.element.querySelector("#tagCloseMarker") as HTMLInputElement).value, pandocBin: pandocBin || window.siyuan.config.export.pandocBin, }, (response) => { exportConfig.onSetexport(response.data); pandocBinPathElement.textContent = response.data.pandocBin; }); }; exportConfig.element.querySelectorAll("select").forEach((item) => { item.addEventListener("change", () => { setexprt(); }); }); exportConfig.element.querySelectorAll("input, textarea").forEach((item) => { if (item.id == "importData") { item.addEventListener("change", (event: InputEvent & { target: HTMLInputElement }) => { const formData = new FormData(); formData.append("file", event.target.files[0]); fetchPost("/api/import/importData", formData); }); } else if (item.id === "importConf") { item.addEventListener("change", (event: InputEvent & { target: HTMLInputElement }) => { const formData = new FormData(); formData.append("file", event.target.files[0]); fetchPost("/api/system/importConf", formData, response => { if (response.code !== 0) { showMessage(response.msg); return; } showMessage(window.siyuan.languages.imported); exportLayout({ errorExit: true, cb: exitSiYuan }); }); }); } else { item.addEventListener("change", () => { setexprt(); }); } }); exportConfig.element.querySelector("#exportData").addEventListener("click", async () => { /// #if BROWSER fetchPost("/api/export/exportData", {}, response => { window.location.href = response.data.zip; }); /// #else const result = await ipcRenderer.invoke(Constants.SIYUAN_GET, { cmd: "showOpenDialog", title: window.siyuan.languages.export + " " + "Data", properties: ["createDirectory", "openDirectory"], }); if (result.canceled || result.filePaths.length === 0) { return; } const msgId = showMessage(window.siyuan.languages.exporting, -1); fetchPost("/api/export/exportDataInFolder", { folder: result.filePaths[0], }, response => { afterExport(path.join(result.filePaths[0], response.data.name), msgId); }); /// #endif }); exportConfig.element.querySelector("#exportConf").addEventListener("click", async () => { fetchPost("/api/system/exportConf", {}, response => { openByMobile(response.data.zip); }); }); /// #if !BROWSER pandocBinPathElement.addEventListener("click", () => { if (window.siyuan.config.export.pandocBin) { showFileInFolder(window.siyuan.config.export.pandocBin); } }); const pandocBinElement = exportConfig.element.querySelector("#pandocBin") as HTMLInputElement; pandocBinElement.addEventListener("click", async () => { const localPath = await ipcRenderer.invoke(Constants.SIYUAN_GET, { cmd: "showOpenDialog", defaultPath: window.siyuan.config.system.homeDir, properties: ["openFile", "showHiddenFiles"], }); if (localPath.filePaths.length === 0) { pandocBinElement.value = window.siyuan.config.export.pandocBin; return; } setexprt(localPath.filePaths[0]); }); /// #endif }, onSetexport: (data: Config.IExport) => { window.siyuan.config.export = data; } };