From 9f34700e0d242fa4d24a16564014ed0f8bee08c6 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Thu, 14 Jul 2016 12:04:16 +0200 Subject: [PATCH] Ensure that we don't reset the current page view if the user inputs an invalid page number (PR 7289 follow-up) After PR 7289, we'll now reset the current page view in cases where I don't think we should. To avoid this, this patch ensures that we'll not modify the position when the page number is out-of-bounds. **STR:** 1. Open http://mozilla.github.io/pdf.js/web/viewer.html#page=1&zoom=auto,-98,696 2. Enter an invalid number, e.g. `1000`, in the `pageNumber` input. **ER:** The current position in the document shouldn't change, since the page number wasn't valid. **AR:** The document resets to the top of the page `1`. --- web/pdf_viewer.js | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/web/pdf_viewer.js b/web/pdf_viewer.js index 7fa5f654d..0207c6f78 100644 --- a/web/pdf_viewer.js +++ b/web/pdf_viewer.js @@ -155,22 +155,34 @@ var PDFViewer = (function pdfViewer() { return this._pages[index]; }, + /** + * @returns {number} + */ get currentPageNumber() { return this._currentPageNumber; }, + /** + * @param {number} val - The page number. + */ set currentPageNumber(val) { if (!this.pdfDocument) { this._currentPageNumber = val; return; } - this._setCurrentPageNumber(val); // The intent can be to just reset a scroll position and/or scale. - this._resetCurrentPageView(); + this._setCurrentPageNumber(val, /* resetCurrentPageView = */ true); }, - _setCurrentPageNumber: function pdfViewer_setCurrentPageNumber(val) { + /** + * @private + */ + _setCurrentPageNumber: + function pdfViewer_setCurrentPageNumber(val, resetCurrentPageView) { if (this._currentPageNumber === val) { + if (resetCurrentPageView) { + this._resetCurrentPageView(); + } return; } var arg; @@ -193,6 +205,10 @@ var PDFViewer = (function pdfViewer() { this._currentPageNumber = val; this.eventBus.dispatch('pagechanging', arg); this.eventBus.dispatch('pagechange', arg); + + if (resetCurrentPageView) { + this._resetCurrentPageView(); + } }, /** @@ -500,6 +516,7 @@ var PDFViewer = (function pdfViewer() { /** * Refreshes page view: scrolls to the current page and updates the scale. + * @private */ _resetCurrentPageView: function () { if (this.isInPresentationMode) { @@ -524,8 +541,7 @@ var PDFViewer = (function pdfViewer() { } if (this.isInPresentationMode || !dest) { - this._setCurrentPageNumber(pageNumber); - this._resetCurrentPageView(); + this._setCurrentPageNumber(pageNumber, /* resetCurrentPageView */ true); return; }