From 911948c5c029726c3bc35a72b27bf4f268cf34f4 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Sat, 31 Oct 2020 10:17:28 +0100 Subject: [PATCH] Also update the browser history when the user *manually* change pages using the pageNumber-input (PR 12493 follow-up) This patch addresses a review comment, which pointed out that we should *also* handle the pageNumber-input, from PR 12493. Given that a user *manually* changing pages using the pageNumber-input, on the toolbar, could be regarded as a pretty strong indication of user-intent w.r.t. navigation in the document, hence I suppose that updating the browser history in this case as well probably won't hurt. --- web/app.js | 2 +- web/base_viewer.js | 16 ++++++++++++++++ web/interfaces.js | 4 ++-- web/pdf_link_service.js | 15 ++++++++------- 4 files changed, 27 insertions(+), 10 deletions(-) diff --git a/web/app.js b/web/app.js index a414c4b7c..731b9eab9 100644 --- a/web/app.js +++ b/web/app.js @@ -2537,7 +2537,7 @@ function webViewerPageNumberChanged(evt) { // Note that for `` HTML elements, an empty string will // be returned for non-number inputs; hence we simply do nothing in that case. if (evt.value !== "") { - pdfViewer.currentPageLabel = evt.value; + PDFViewerApplication.pdfLinkService.goToPage(evt.value); } // Ensure that the page number input displays the correct value, even if the diff --git a/web/base_viewer.js b/web/base_viewer.js index 1a8250787..e9bcd08d9 100644 --- a/web/base_viewer.js +++ b/web/base_viewer.js @@ -787,6 +787,22 @@ class BaseViewer { this._scrollIntoView({ pageDiv: pageView.div }); } + /** + * @param {string} label - The page label. + * @returns {number|null} The page number corresponding to the page label, + * or `null` when no page labels exist and/or the input is invalid. + */ + pageLabelToPageNumber(label) { + if (!this._pageLabels) { + return null; + } + const i = this._pageLabels.indexOf(label); + if (i < 0) { + return null; + } + return i + 1; + } + /** * @typedef ScrollPageIntoViewParameters * @property {number} pageNumber - The page number. diff --git a/web/interfaces.js b/web/interfaces.js index f13b11e5f..62d7b13eb 100644 --- a/web/interfaces.js +++ b/web/interfaces.js @@ -59,9 +59,9 @@ class IPDFLinkService { async goToDestination(dest) {} /** - * @param {number} pageNumber - The page number. + * @param {number|string} val - The page number, or page label. */ - goToPage(pageNumber) {} + goToPage(val) {} /** * @param dest - The PDF destination object. diff --git a/web/pdf_link_service.js b/web/pdf_link_service.js index 9809aa073..c484d9f5d 100644 --- a/web/pdf_link_service.js +++ b/web/pdf_link_service.js @@ -206,12 +206,15 @@ class PDFLinkService { /** * This method will, when available, also update the browser history. * - * @param {number} pageNumber - The page number. + * @param {number|string} val - The page number, or page label. */ - goToPage(pageNumber) { + goToPage(val) { if (!this.pdfDocument) { return; } + const pageNumber = + (typeof val === "string" && this.pdfViewer.pageLabelToPageNumber(val)) || + val | 0; if ( !( Number.isInteger(pageNumber) && @@ -219,9 +222,7 @@ class PDFLinkService { pageNumber <= this.pagesCount ) ) { - console.error( - `PDFLinkService.goToPage: "${pageNumber}" is not a valid page number.` - ); + console.error(`PDFLinkService.goToPage: "${val}" is not a valid page.`); return; } @@ -566,9 +567,9 @@ class SimpleLinkService { async goToDestination(dest) {} /** - * @param {number} pageNumber - The page number. + * @param {number|string} val - The page number, or page label. */ - goToPage(pageNumber) {} + goToPage(val) {} /** * @param dest - The PDF destination object.