From 84eba12448a2283185d5b81d6605247d9d7fbc64 Mon Sep 17 00:00:00 2001 From: Vanessa Date: Tue, 23 Aug 2022 20:13:41 +0800 Subject: [PATCH] :art: https://github.com/siyuan-note/siyuan/issues/5693 --- app/src/menus/protyle.ts | 13 +++++++++++-- app/src/menus/util.ts | 25 +++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 app/src/menus/util.ts diff --git a/app/src/menus/protyle.ts b/app/src/menus/protyle.ts index f61b4f8f1..8cfe0f475 100644 --- a/app/src/menus/protyle.ts +++ b/app/src/menus/protyle.ts @@ -21,14 +21,16 @@ import {fetchPost} from "../util/fetch"; import {Constants} from "../constants"; import {writeText} from "../protyle/util/compatibility"; import {preventScroll} from "../protyle/scroll/preventScroll"; -import {getCurrentWindow} from "@electron/remote"; -import {clipboard} from "electron"; import {onGet} from "../protyle/util/onGet"; import {getAllModels} from "../layout/getAll"; import {pasteText} from "../protyle/util/paste"; /// #if !MOBILE import {openFileById, updateBacklinkGraph} from "../editor/util"; /// #endif +/// #if !BROWSER +import {getCurrentWindow} from "@electron/remote"; +import {clipboard} from "electron"; +/// #endif import {isMobile} from "../util/functions"; import {removeFoldHeading} from "../protyle/util/heading"; import {lineNumberRender} from "../protyle/markdown/highlightRender"; @@ -38,6 +40,7 @@ import {renameAsset} from "../editor/rename"; import {hasNextSibling} from "../protyle/wysiwyg/getBlock"; import {electronUndo} from "../protyle/undo"; import {pushBack} from "../mobile/util/MobileBackFoward"; +import {exportAsset} from "./util"; export const refMenu = (protyle: IProtyle, element: HTMLElement) => { const nodeElement = hasClosestBlock(element); @@ -525,6 +528,9 @@ export const imgMenu = (protyle: IProtyle, range: Range, assetElement: HTMLEleme } } }).element); + /// #if !BROWSER + window.siyuan.menus.menu.append(new MenuItem(exportAsset(imgElement.getAttribute("data-src"))).element); + /// #endif window.siyuan.menus.menu.append(new MenuItem({ icon: "iconCut", accelerator: "⌘X", @@ -931,6 +937,9 @@ export const videoMenu = (protyle: IProtyle, nodeElement: Element, type: string) } }); } + /// #if !BROWSER + subMenus.push(exportAsset(src)); + /// #endif const VideoSrc = videoElement.getAttribute("src"); if (VideoSrc) { return subMenus.concat(openMenu(VideoSrc, true) as IMenu[]); diff --git a/app/src/menus/util.ts b/app/src/menus/util.ts new file mode 100644 index 000000000..ff1145026 --- /dev/null +++ b/app/src/menus/util.ts @@ -0,0 +1,25 @@ +/// #if !BROWSER +import {dialog} from "@electron/remote"; +import {SaveDialogReturnValue} from "electron"; +/// #endif +import {fetchPost} from "../util/fetch"; +import {getAssetName, pathPosix} from "../util/pathName"; + +export const exportAsset = (src: string) => { + /// #if !BROWSER + return { + label: window.siyuan.languages.export, + icon: "iconUpload", + click() { + dialog.showSaveDialog({ + defaultPath: getAssetName(src) + pathPosix().extname(src), + properties: ["showOverwriteConfirmation"], + }).then((result: SaveDialogReturnValue) => { + if (!result.canceled) { + fetchPost("/api/file/saveAs", {src, targe: result.filePath}) + } + }); + } + } + /// #endif +}