|
15 | 15 | @openFile="onOpenFile"
|
16 | 16 | @saveFile="onSaveFile"
|
17 | 17 | @saveFileAs="onSaveFileAs"
|
| 18 | + @exportFile="onExportFile" |
18 | 19 | @printFile="onPrintFile"
|
19 | 20 | @settings="onSettings"
|
20 | 21 | @exit="onExit"
|
@@ -127,6 +128,36 @@ export default defineComponent({
|
127 | 128 | await writable.close();
|
128 | 129 | }
|
129 | 130 |
|
| 131 | + async function onExportFile() { |
| 132 | + $q.dialog({ |
| 133 | + title: i18n.t("Export file"), |
| 134 | + message: i18n.t("Select the format to export"), |
| 135 | + options: { |
| 136 | + type: "radio", |
| 137 | + model: "md", |
| 138 | + items: [ |
| 139 | + { label: "Markdown", value: "md" }, |
| 140 | + { label: "HTML", value: "html" }, |
| 141 | + { label: "Plain Text", value: "txt" }, |
| 142 | + ], |
| 143 | + }, |
| 144 | + cancel: true, |
| 145 | + persistent: true, |
| 146 | + }).onOk(async (format) => { |
| 147 | + const basename = store.state.editor.filename.replace(/\.[^/.]+$/, ""); |
| 148 | + const fileHandle = await window.showSaveFilePicker({ |
| 149 | + suggestedName: `${basename}.${format}`, |
| 150 | + }); |
| 151 | + const writable = await fileHandle.createWritable(); |
| 152 | + const content = serializeContent( |
| 153 | + store.state.editor.content, |
| 154 | + fileHandle.name |
| 155 | + ); |
| 156 | + await writable.write(content); |
| 157 | + await writable.close(); |
| 158 | + }); |
| 159 | + } |
| 160 | +
|
130 | 161 | function onPrintFile() {
|
131 | 162 | store.dispatch("editor/printFile");
|
132 | 163 | }
|
@@ -210,6 +241,7 @@ export default defineComponent({
|
210 | 241 | onOpenFile,
|
211 | 242 | onSaveFile,
|
212 | 243 | onSaveFileAs,
|
| 244 | + onExportFile, |
213 | 245 | onPrintFile,
|
214 | 246 | onSettings,
|
215 | 247 | onAbout,
|
|
0 commit comments