Something went wrong. Try again.
A privacy-first, self-hosted, fully open source personal knowledge management software, written in typescript and golang. (PERSONAL FORK)
Something went wrong. Try again.
TypeScript
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348import {fetchPost} from "../util/fetch";/// #if !BROWSERimport {afterExport} from "../protyle/export/util";import {ipcRenderer} from "electron";import * as path from "path";import {exportLayout} from "../layout/util";/// #endifimport {isBrowser} from "../util/functions";import {showMessage} from "../dialog/message";import {useShell} from "../util/pathName";import {Constants} from "../constants";import {openByMobile} from "../protyle/util/compatibility";import {exitSiYuan} from "../dialog/processSystem";
export const exportConfig = { element: undefined as Element, genHTML: () => { return `<label class="fn__flex b3-label"> <div class="fn__flex-1"> ${window.siyuan.languages.paragraphBeginningSpace} <div class="b3-label__text">${window.siyuan.languages.md4}</div> </div> <span class="fn__space"></span> <input class="b3-switch fn__flex-center" id="paragraphBeginningSpace" type="checkbox"${window.siyuan.config.export.paragraphBeginningSpace ? " checked" : ""}/></label><label class="fn__flex b3-label"> <div class="fn__flex-1"> ${window.siyuan.languages.export17} <div class="b3-label__text">${window.siyuan.languages.export18}</div> </div> <span class="fn__space"></span> <input class="b3-switch fn__flex-center" id="addTitle" type="checkbox"${window.siyuan.config.export.addTitle ? " checked" : ""}/></label><label class="fn__flex b3-label"> <div class="fn__flex-1"> ${window.siyuan.languages.export23} <div class="b3-label__text">${window.siyuan.languages.export24}</div> </div> <span class="fn__space"></span> <input class="b3-switch fn__flex-center" id="markdownYFM" type="checkbox"${window.siyuan.config.export.markdownYFM ? " checked" : ""}/></label><label class="fn__flex b3-label"> <div class="fn__flex-1"> ${window.siyuan.languages.removeAssetsID} <div class="b3-label__text">${window.siyuan.languages.removeAssetsIDTip}</div> </div> <span class="fn__space"></span> <input class="b3-switch fn__flex-center" id="removeAssetsID" type="checkbox"${window.siyuan.config.export.removeAssetsID ? " checked" : ""}/></label><label class="fn__flex b3-label"> <div class="fn__flex-1"> ${window.siyuan.languages.export31} <div class="b3-label__text">${window.siyuan.languages.export32}</div> </div> <span class="fn__space"></span> <input class="b3-switch fn__flex-center" id="inlineMemo" type="checkbox"${window.siyuan.config.export.inlineMemo ? " checked" : ""}/></label><label class="fn__flex b3-label"> <div class="fn__flex-1"> ${window.siyuan.languages.includeSubDocs} <div class="b3-label__text">${window.siyuan.languages.includeSubDocsTip}</div> </div> <span class="fn__space"></span> <input class="b3-switch fn__flex-center" id="includeSubDocs" type="checkbox"${window.siyuan.config.export.includeSubDocs ? " checked" : ""}/></label><label class="fn__flex b3-label"> <div class="fn__flex-1"> ${window.siyuan.languages.includeRelatedDocs} <div class="b3-label__text">${window.siyuan.languages.includeRelatedDocsTip}</div> </div> <span class="fn__space"></span> <input class="b3-switch fn__flex-center" id="includeRelatedDocs" type="checkbox"${window.siyuan.config.export.includeRelatedDocs ? " checked" : ""}/></label><div class="fn__flex b3-label config__item"> <div class="fn__flex-1"> ${window.siyuan.languages.ref} <div class="b3-label__text">${window.siyuan.languages.export11}</div> </div> <span class="fn__space"></span> <select id="blockRefMode" class="b3-select fn__flex-center fn__size200"> <option value="2" ${window.siyuan.config.export.blockRefMode === 2 ? "selected" : ""}>${window.siyuan.languages.export2}</option> <option value="3" ${window.siyuan.config.export.blockRefMode === 3 ? "selected" : ""}>${window.siyuan.languages.export3}</option> <option value="4" ${window.siyuan.config.export.blockRefMode === 4 ? "selected" : ""}>${window.siyuan.languages.export4}</option> </select></div><div class="fn__flex b3-label config__item"> <div class="fn__flex-1"> ${window.siyuan.languages.blockEmbed} <div class="b3-label__text">${window.siyuan.languages.export12}</div> </div> <span class="fn__space"></span> <select id="blockEmbedMode" class="b3-select fn__flex-center fn__size200"> <option value="0" ${window.siyuan.config.export.blockEmbedMode === 0 ? "selected" : ""}>${window.siyuan.languages.export0}</option> <option value="1" ${window.siyuan.config.export.blockEmbedMode === 1 ? "selected" : ""}>${window.siyuan.languages.export1}</option> </select></div><div class="fn__flex b3-label config__item"> <div class="fn__flex-1"> ${window.siyuan.languages.export5} <div class="b3-label__text">${window.siyuan.languages.export6}</div> </div> <span class="fn__space"></span> <select id="fileAnnotationRefMode" class="b3-select fn__flex-center fn__size200"> <option value="0" ${window.siyuan.config.export.fileAnnotationRefMode === 0 ? "selected" : ""}>${window.siyuan.languages.export7}</option> <option value="1" ${window.siyuan.config.export.fileAnnotationRefMode === 1 ? "selected" : ""}>${window.siyuan.languages.export8}</option> </select></div><div class="fn__flex b3-label config__item"> <div class="fn__flex-1"> ${window.siyuan.languages.export21} <div class="b3-label__text">${window.siyuan.languages.export22}</div> </div> <input class="b3-text-field fn__flex-center fn__size200" id="pdfFooter"></div><div class="b3-label config__item"> ${window.siyuan.languages.export27} <div class="b3-label__text">${window.siyuan.languages.export28}</div> <div class="fn__hr"></div> <input class="b3-text-field fn__block" id="pdfWatermarkStr"> <div class="fn__hr"></div> <div class="b3-label__text"><a href="https://pdfcpu.io/core/watermark#description" target="_blank">${window.siyuan.languages.export29}</a></div> <div class="fn__hr"></div> <textarea class="b3-text-field fn__block" id="pdfWatermarkDesc"></textarea></div><div class="b3-label config__item"> ${window.siyuan.languages.export30} <div class="b3-label__text">${window.siyuan.languages.export28}</div> <div class="fn__hr"></div> <input class="b3-text-field fn__block" id="imageWatermarkStr"> <div class="fn__hr"></div> <div class="b3-label__text"> ${window.siyuan.languages.export29}<br> ${window.siyuan.languages.export10} </div> <div class="fn__hr"></div> <textarea class="b3-text-field fn__block" id="imageWatermarkDesc"></textarea></div><div class="fn__flex b3-label config__item"> <div class="fn__flex-1"> ${window.siyuan.languages.export13} <div class="b3-label__text">${window.siyuan.languages.export14}</div> </div> <span class="fn__space"></span> <input class="b3-text-field fn__flex-center fn__size96" id="blockRefTextLeft"> <span class="fn__space"></span> <input class="b3-text-field fn__flex-center fn__size96" id="blockRefTextRight"></div><div class="fn__flex b3-label config__item"> <div class="fn__flex-1"> ${window.siyuan.languages.export15} <div class="b3-label__text">${window.siyuan.languages.export16}</div> </div> <span class="fn__space"></span> <input class="b3-text-field fn__flex-center fn__size96" id="tagOpenMarker"> <span class="fn__space"></span> <input class="b3-text-field fn__flex-center fn__size96" id="tagCloseMarker"></div><div class="fn__flex b3-label config__item${isBrowser() ? " fn__none" : ""}"> <div class="fn__flex-1"> ${window.siyuan.languages.export19} <span class="fn__space"></span> <a href="javascript:void(0)" id="pandocBinPath" style="word-break: break-all">${window.siyuan.config.export.pandocBin}</a> <div class="b3-label__text">${window.siyuan.languages.export20}</div> </div> <span class="fn__space"></span> <button class="b3-button b3-button--outline fn__flex-center fn__size200" id="pandocBin"><svg><use xlink:href="#iconSettings"></use></svg>${window.siyuan.languages.config}</button></div><div class="b3-label config__item${isBrowser() ? " fn__none" : ""}"> ${window.siyuan.languages.export25} <div class="b3-label__text">${window.siyuan.languages.export26}</div> <div class="fn__hr"></div> <textarea class="b3-text-field fn__block" id="pandocParams"></textarea></div><div class="fn__flex b3-label config__item"> <div class="fn__flex-1 fn__flex-center"> ${window.siyuan.languages.export} Data <div class="b3-label__text">${window.siyuan.languages.exportDataTip}</div> </div> <span class="fn__space"></span> <button class="b3-button b3-button--outline fn__flex-center fn__size200" id="exportData"> <svg><use xlink:href="#iconUpload"></use></svg>${window.siyuan.languages.export} </button></div><div class="fn__flex b3-label config__item"> <div class="fn__flex-1 fn__flex-center"> ${window.siyuan.languages.import} Data <div class="b3-label__text">${window.siyuan.languages.importDataTip}</div> </div> <span class="fn__space"></span> <button class="b3-button b3-button--outline fn__flex-center fn__size200" style="position: relative"> <input id="importData" class="b3-form__upload" type="file"> <svg><use xlink:href="#iconDownload"></use></svg>${window.siyuan.languages.import} </button></div><div class="fn__flex b3-label config__item"> <div class="fn__flex-1 fn__flex-center"> ${window.siyuan.languages.exportConf} <div class="b3-label__text">${window.siyuan.languages.exportConfTip}</div> </div> <span class="fn__space"></span> <button class="b3-button b3-button--outline fn__flex-center fn__size200" id="exportConf"> <svg><use xlink:href="#iconUpload"></use></svg>${window.siyuan.languages.export} </button></div><div class="fn__flex b3-label config__item"> <div class="fn__flex-1 fn__flex-center"> ${window.siyuan.languages.importConf} <div class="b3-label__text">${window.siyuan.languages.importConfTip}</div> </div> <span class="fn__space"></span> <button class="b3-button b3-button--outline fn__flex-center fn__size200" style="position: relative"> <input id="importConf" class="b3-form__upload" type="file"> <svg><use xlink:href="#iconDownload"></use></svg>${window.siyuan.languages.import} </button></div>`; }, bindEvent: () => { (exportConfig.element.querySelector("#pandocParams") as HTMLInputElement).value = window.siyuan.config.export.pandocParams; (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, removeAssetsID: (exportConfig.element.querySelector("#removeAssetsID") as HTMLInputElement).checked, markdownYFM: (exportConfig.element.querySelector("#markdownYFM") as HTMLInputElement).checked, inlineMemo: (exportConfig.element.querySelector("#inlineMemo") as HTMLInputElement).checked, includeSubDocs: (exportConfig.element.querySelector("#includeSubDocs") as HTMLInputElement).checked, includeRelatedDocs: (exportConfig.element.querySelector("#includeRelatedDocs") 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, pandocParams: (exportConfig.element.querySelector("#pandocParams") 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); /// #if MOBILE exitSiYuan(); /// #else exportLayout({ errorExit: true, cb: exitSiYuan }); /// #endif }); }); } else { item.addEventListener("change", () => { setexprt(); }); } }); exportConfig.element.querySelector("#exportData").addEventListener("click", async () => { /// #if BROWSER fetchPost("/api/export/exportData", {}, response => { openByMobile(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) { useShell("showItemInFolder", 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; }};