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.export30}
${window.siyuan.languages.export28}
${window.siyuan.languages.export29}
${window.siyuan.languages.export10}
${window.siyuan.languages.export} Data
${window.siyuan.languages.exportDataTip}
${window.siyuan.languages.exportConf}
${window.siyuan.languages.exportConfTip}
`;
},
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;
}
};