diff --git a/app/src/protyle/preview/image.ts b/app/src/protyle/preview/image.ts
index e27ab4bbb..75cb76e2b 100644
--- a/app/src/protyle/preview/image.ts
+++ b/app/src/protyle/preview/image.ts
@@ -2,7 +2,47 @@ import {Constants} from "../../constants";
import {addScript} from "../util/addScript";
import {fetchPost} from "../../util/fetch";
-export const previewImage = (src: string, id: string) => {
+export const previewImage = (src: string) => {
+ addScript(`${Constants.PROTYLE_CDN}/js/viewerjs/viewer.js?v=1.10.4`, "protyleViewerScript").then(() => {
+ const imagesElement = document.createElement("ul");
+ imagesElement.innerHTML = `
`;
+ // @ts-ignore
+ window.siyuan.viewer = new Viewer(imagesElement, {
+ title: [1, (image: HTMLImageElement, imageData: IObject) => {
+ let name = image.alt;
+ if (!name) {
+ name = image.src.substring(image.src.lastIndexOf("/") + 1);
+ }
+ name = name.substring(0, name.lastIndexOf(".")).replace(/-\d{14}-\w{7}$/, "");
+ return `${name} [${imageData.naturalWidth} × ${imageData.naturalHeight}]`;
+ }],
+ button: false,
+ transition: false,
+ hidden: function () {
+ window.siyuan.viewer.destroy();
+ },
+ toolbar: {
+ zoomIn: true,
+ zoomOut: true,
+ oneToOne: true,
+ reset: true,
+ prev: true,
+ play: true,
+ next: true,
+ rotateLeft: true,
+ rotateRight: true,
+ flipHorizontal: true,
+ flipVertical: true,
+ close: function () {
+ window.siyuan.viewer.destroy();
+ },
+ },
+ });
+ window.siyuan.viewer.show();
+ });
+};
+
+export const previewDocImage = (src: string, id: string) => {
addScript(`${Constants.PROTYLE_CDN}/js/viewerjs/viewer.js?v=1.10.4`, "protyleViewerScript").then(() => {
fetchPost("/api/asset/getDocImageAssets", {id}, (response) => {
const imagesElement = document.createElement("ul");
diff --git a/app/src/protyle/preview/index.ts b/app/src/protyle/preview/index.ts
index 9eb4bcfc9..7fda735f6 100644
--- a/app/src/protyle/preview/index.ts
+++ b/app/src/protyle/preview/index.ts
@@ -2,7 +2,7 @@ import {openByMobile, writeText} from "../util/compatibility";
import {focusByRange} from "../util/selection";
import {showMessage} from "../../dialog/message";
import {isLocalPath, pathPosix} from "../../util/pathName";
-import {previewImage} from "./image";
+import {previewDocImage} from "./image";
import {needSubscribe} from "../../util/needSubscribe";
import {Constants} from "../../constants";
import {getSearch, isMobile} from "../../util/functions";
@@ -117,7 +117,7 @@ export class Preview {
}
break;
} else if (target.tagName === "IMG") {
- previewImage((event.target as HTMLImageElement).src, protyle.block.rootID);
+ previewDocImage((event.target as HTMLImageElement).src, protyle.block.rootID);
event.stopPropagation();
event.preventDefault();
break;
diff --git a/app/src/protyle/render/av/asset.ts b/app/src/protyle/render/av/asset.ts
index ee05aac25..6e6d1f934 100644
--- a/app/src/protyle/render/av/asset.ts
+++ b/app/src/protyle/render/av/asset.ts
@@ -5,7 +5,11 @@ import {isMobile} from "../../../util/functions";
import {Constants} from "../../../constants";
import {uploadFiles} from "../../upload";
import {pathPosix} from "../../../util/pathName";
-
+import {openMenu} from "../../../menus/commonMenuItem";
+import {MenuItem} from "../../../menus/Menu";
+import {exportAsset} from "../../../menus/util";
+import {setPosition} from "../../../util/setPosition";
+import {previewImage} from "../../preview/image";
export const bindAssetEvent = (options: {
protyle: IProtyle,
@@ -62,15 +66,17 @@ export const getAssetHTML = (data: IAVTable, cellElements: HTMLElement[]) => {
}
let contentHTML
if (item.type === "image") {
- contentHTML = `
`
+ contentHTML = `
+
+`
} else {
contentHTML = ``
}
- html += `