diff --git a/web/pdf_link_service.js b/web/pdf_link_service.js index a89cdd72a..2f1485598 100644 --- a/web/pdf_link_service.js +++ b/web/pdf_link_service.js @@ -228,13 +228,11 @@ var PDFLinkService = (function () { this.page = pageNumber; // simple page } if ('pagemode' in params) { - if (params.pagemode === 'thumbs' || params.pagemode === 'bookmarks' || - params.pagemode === 'attachments') { - this.switchSidebarView((params.pagemode === 'bookmarks' ? - 'outline' : params.pagemode), true); - } else if (params.pagemode === 'none' && this.sidebarOpen) { - document.getElementById('sidebarToggle').click(); - } + var event = document.createEvent('CustomEvent'); + event.initCustomEvent('pagemode', true, true, { + mode: params.pagemode, + }); + this.pdfViewer.container.dispatchEvent(event); } } else if (/^\d+$/.test(hash)) { // page number this.page = hash; diff --git a/web/viewer.js b/web/viewer.js index cbeda49ef..f5d82b5ca 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -1566,6 +1566,30 @@ document.addEventListener('textlayerrendered', function (e) { //#endif }, true); +document.addEventListener('pagemode', function (evt) { + if (!PDFViewerApplication.initialized) { + return; + } + // Handle the 'pagemode' hash parameter, see also `PDFLinkService_setHash`. + var mode = evt.detail.mode; + switch (mode) { + case 'bookmarks': + // Note: Our code calls this property 'outline', even though the + // Open Parameter specification calls it 'bookmarks'. + mode = 'outline'; + /* falls through */ + case 'thumbs': + case 'attachments': + PDFViewerApplication.switchSidebarView(mode, true); + break; + case 'none': + if (PDFViewerApplication.sidebarOpen) { + document.getElementById('sidebarToggle').click(); + } + break; + } +}, true); + document.addEventListener('namedaction', function (e) { // Processing couple of named actions that might be useful. // See also PDFLinkService.executeNamedAction