diff --git a/src/events.ts b/src/events.ts index d1c85fa..a42e5bc 100644 --- a/src/events.ts +++ b/src/events.ts @@ -198,6 +198,12 @@ class AddonEvents extends AddonBase { middle.append(header); } else { // This is a preview knowledge, hide openWorkspace button add show close botton + this._Addon.views.changeEditorButtonView( + _window.document.getElementById("knowledge-start"), + "jumpAttachment", + "Open Note Attachments", + "jumpAttachment" + ); this._Addon.views.changeEditorButtonView( _window.document.getElementById("knowledge-end"), "close", @@ -411,6 +417,39 @@ class AddonEvents extends AddonBase { await this._Addon.knowledge.exportNoteToFile( message.content.editorInstance._item ); + } else if (message.type === "jumpAttachment") { + /* + message.content = { + editorInstance + } + */ + const note = message.content.editorInstance._item; + let successCount = 0; + let failCount = 0; + if (note.parentItem) { + for (const attchment of Zotero.Items.get( + note.parentItem.getAttachments() + )) { + Zotero.debug(attchment); + try { + await Zotero.OpenPDF.openToPage(attchment); + successCount += 1; + } catch (e) { + Zotero.debug("Knowledge4Zotero: Open attachment failed:"); + Zotero.debug(attchment); + failCount += 1; + } + } + } + if (successCount === 0) { + this._Addon.views.showProgressWindow( + "Knowledge", + failCount + ? "Error occurred on opening attachemnts." + : "No attachment found.", + "fail" + ); + } } else { Zotero.debug(`Knowledge4Zotero: message not handled.`); } diff --git a/src/views.ts b/src/views.ts index efbc64c..c4a53f5 100644 --- a/src/views.ts +++ b/src/views.ts @@ -16,6 +16,7 @@ class AddonViews extends AddonBase { addToKnowledge: ``, notMainKnowledge: ``, isMainKnowledge: ``, + jumpAttachment: ``, export: ``, close: ``, openWorkspaceCollectionView: ``, @@ -134,11 +135,12 @@ class AddonViews extends AddonBase { } changeEditorButtonView( - button: Element, + container: Element, icon: string, title: string = "", eventType: string = "" ) { + const button = container.getElementsByTagName("button")[0]; button.innerHTML = this.editorIcon[icon]; if (title) { button.setAttribute("title", title); @@ -477,7 +479,7 @@ class AddonViews extends AddonBase { showProgressWindow( header: string, context: string, - type: string = "default", + type: "default" | "success" | "fail" = "default", t: number = 5000 ) { let progressWindow = new Zotero.ProgressWindow({ closeOnClick: true });