diff --git a/web/pdf_attachment_viewer.js b/web/pdf_attachment_viewer.js index eb4a3034be0d5..27d1b4eabb83f 100644 --- a/web/pdf_attachment_viewer.js +++ b/web/pdf_attachment_viewer.js @@ -35,13 +35,12 @@ class PDFAttachmentViewer { * @param {PDFAttachmentViewerOptions} options */ constructor({ container, eventBus, downloadManager, }) { - this.attachments = null; - this.container = container; this.eventBus = eventBus; this.downloadManager = downloadManager; - this._renderedCapability = createPromiseCapability(); + this.reset(); + this.eventBus.on('fileattachmentannotation', this._appendAttachment.bind(this)); } @@ -63,12 +62,12 @@ class PDFAttachmentViewer { * @private */ _dispatchEvent(attachmentsCount) { + this._renderedCapability.resolve(); + this.eventBus.dispatch('attachmentsloaded', { source: this, attachmentsCount, }); - - this._renderedCapability.resolve(); } /** diff --git a/web/pdf_outline_viewer.js b/web/pdf_outline_viewer.js index 18d21471a928e..7aee5b626ddfe 100644 --- a/web/pdf_outline_viewer.js +++ b/web/pdf_outline_viewer.js @@ -36,12 +36,11 @@ class PDFOutlineViewer { * @param {PDFOutlineViewerOptions} options */ constructor({ container, linkService, eventBus, }) { - this.outline = null; - this.lastToggleIsShow = true; - this.container = container; this.linkService = linkService; this.eventBus = eventBus; + + this.reset(); } reset() { diff --git a/web/pdf_sidebar.js b/web/pdf_sidebar.js index f3a7a26f6d694..caabedd5738d7 100644 --- a/web/pdf_sidebar.js +++ b/web/pdf_sidebar.js @@ -420,17 +420,31 @@ class PDFSidebar { }); this.eventBus.on('attachmentsloaded', (evt) => { - let attachmentsCount = evt.attachmentsCount; + if (evt.attachmentsCount) { + this.attachmentsButton.disabled = false; - this.attachmentsButton.disabled = !attachmentsCount; - - if (attachmentsCount) { this._showUINotification(SidebarView.ATTACHMENTS); - } else if (this.active === SidebarView.ATTACHMENTS) { - // If the attachment view was opened during document load, switch away - // from it if it turns out that the document has no attachments. - this.switchView(SidebarView.THUMBS); + return; } + + // Attempt to avoid temporarily disabling, and switching away from, the + // attachment view for documents that do not contain proper attachments + // but *only* FileAttachment annotations. Hence we defer those operations + // slightly to allow time for parsing any FileAttachment annotations that + // may be present on the *initially* rendered page of the document. + Promise.resolve().then(() => { + if (this.attachmentsView.hasChildNodes()) { + // FileAttachment annotations were appended to the attachment view. + return; + } + this.attachmentsButton.disabled = true; + + if (this.active === SidebarView.ATTACHMENTS) { + // If the attachment view was opened during document load, switch away + // from it if it turns out that the document has no attachments. + this.switchView(SidebarView.THUMBS); + } + }); }); // Update the thumbnailViewer, if visible, when exiting presentation mode.