From 771ccc13fe8cd4b2898841c01f69cade0d8495b0 Mon Sep 17 00:00:00 2001 From: windingwind Date: Fri, 5 May 2023 18:59:18 +0800 Subject: [PATCH] fix: #448 --- addon/chrome/locale/en-US/addon.properties | 2 ++ addon/chrome/locale/zh-CN/addon.properties | 2 ++ src/modules/editor/initalize.ts | 2 ++ src/modules/editor/menu.ts | 40 ++++++++++++++++++++++ src/utils/editor.ts | 1 + 5 files changed, 47 insertions(+) create mode 100644 src/modules/editor/menu.ts diff --git a/addon/chrome/locale/en-US/addon.properties b/addon/chrome/locale/en-US/addon.properties index e5fcf09..5e19c6b 100644 --- a/addon/chrome/locale/en-US/addon.properties +++ b/addon/chrome/locale/en-US/addon.properties @@ -19,6 +19,8 @@ menuAddNote.newTemplateItemNote=New Item Note from Template menuAddReaderNote.newTemplateNote=New Item Note from Template +menuEditor.resizeImage=Resize Image + templateEditor.title=Template Editor templateEditor.templateName=Template Name templateEditor.previewContainer=Preview diff --git a/addon/chrome/locale/zh-CN/addon.properties b/addon/chrome/locale/zh-CN/addon.properties index 2a7c4f4..ebb3a29 100644 --- a/addon/chrome/locale/zh-CN/addon.properties +++ b/addon/chrome/locale/zh-CN/addon.properties @@ -19,6 +19,8 @@ menuAddNote.newTemplateItemNote=从模板新建条目子笔记 menuAddReaderNote.newTemplateNote=从模板新建条目子笔记 +menuEditor.resizeImage=缩放图片 + templateEditor.title=模板编辑器 templateEditor.templateName=模板名称 templateEditor.previewContainer=预览 diff --git a/src/modules/editor/initalize.ts b/src/modules/editor/initalize.ts index ea72f42..34d7eb3 100644 --- a/src/modules/editor/initalize.ts +++ b/src/modules/editor/initalize.ts @@ -1,5 +1,6 @@ import { initEditorImagePreviewer } from "./image"; import { injectEditorCSS, injectEditorScripts } from "./inject"; +import { initEditorMenu } from "./menu"; import { initEditorPopup } from "./popup"; import { initEditorToolbar } from "./toolbar"; @@ -31,4 +32,5 @@ async function onEditorInstanceCreated(editor: Zotero.EditorInstance) { initEditorImagePreviewer(editor); await initEditorToolbar(editor); initEditorPopup(editor); + initEditorMenu(editor); } diff --git a/src/modules/editor/menu.ts b/src/modules/editor/menu.ts new file mode 100644 index 0000000..2b9a812 --- /dev/null +++ b/src/modules/editor/menu.ts @@ -0,0 +1,40 @@ +import { config } from "../../../package.json"; +import { + isImageAtCursor, + updateImageDimensionsAtCursor, +} from "../../utils/editor"; +import { getString } from "../../utils/locale"; +import { getEditorCore } from "../../utils/editor"; + +export function initEditorMenu(editor: Zotero.EditorInstance) { + const makeId = (key: string) => + `${config.addonRef}-editor-menu-${editor.instanceID}-${key}`; + // Prevent duplicate menu items + if (editor._popup.getAttribute("bn-init") === "true") { + return; + } + editor._popup.setAttribute("bn-init", "true"); + (editor._popup as XUL.Menu).addEventListener("popupshowing", (ev) => { + if (isImageAtCursor(editor)) { + ztoolkit.Menu.register(editor._popup, { + tag: "menuitem", + id: makeId("resizeImage"), + classList: [config.addonRef], + label: getString("menuEditor.resizeImage"), + icon: `chrome://${config.addonRef}/content/icons/favicon.png`, + commandListener: (ev) => { + const newWidth = parseFloat( + editor._iframeWindow.prompt( + getString("editor.resizeImage.prompt"), + // @ts-ignore + getEditorCore(editor).view.state.selection.node?.attrs?.width + ) || "" + ); + if (newWidth && newWidth > 10) { + updateImageDimensionsAtCursor(editor, newWidth); + } + }, + }); + } + }); +} diff --git a/src/utils/editor.ts b/src/utils/editor.ts index 13b10b5..0663db1 100644 --- a/src/utils/editor.ts +++ b/src/utils/editor.ts @@ -20,6 +20,7 @@ export { updateURLAtCursor, getTextBetween, getTextBetweenLines, + isImageAtCursor, }; function insert(