From 9f68e3f1bc38cc18191976f309becb94f70f7239 Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Wed, 4 May 2016 11:06:07 -0500 Subject: [PATCH] Disable pagechange event if page is not changing. --- web/dom_events.js | 1 - web/pdf_viewer.js | 56 +++++++++++++++++++++++------------------------ 2 files changed, 27 insertions(+), 30 deletions(-) diff --git a/web/dom_events.js b/web/dom_events.js index 64c190005..ff048c87f 100644 --- a/web/dom_events.js +++ b/web/dom_events.js @@ -52,7 +52,6 @@ eventBus.on('pagechange', function (e) { var event = document.createEvent('UIEvents'); event.initUIEvent('pagechange', true, true, window, 0); - event.updateInProgress = e.updateInProgress; event.pageNumber = e.pageNumber; event.previousPageNumber = e.previousPageNumber; e.source.container.dispatchEvent(event); diff --git a/web/pdf_viewer.js b/web/pdf_viewer.js index 3f6d7786a..1a79b3745 100644 --- a/web/pdf_viewer.js +++ b/web/pdf_viewer.js @@ -138,7 +138,6 @@ var PDFViewer = (function pdfViewer() { } this.scroll = watchScroll(this.container, this._scrollUpdate.bind(this)); - this.updateInProgress = false; this.presentationModeState = PresentationModeState.UNKNOWN; this._resetView(); @@ -165,12 +164,19 @@ var PDFViewer = (function pdfViewer() { this._currentPageNumber = val; return; } + this._setCurrentPageNumber(val); + // The intent can be to just reset a scroll position and/or scale. + this._resetCurrentPageView(); + }, + _setCurrentPageNumber: function pdfViewer_setCurrentPageNumber(val) { + if (this._currentPageNumber === val) { + return; + } var arg; if (!(0 < val && val <= this.pagesCount)) { arg = { source: this, - updateInProgress: this.updateInProgress, pageNumber: this._currentPageNumber, previousPageNumber: val }; @@ -181,19 +187,12 @@ var PDFViewer = (function pdfViewer() { arg = { source: this, - updateInProgress: this.updateInProgress, pageNumber: val, previousPageNumber: this._currentPageNumber }; - this.eventBus.dispatch('pagechanging', arg); this._currentPageNumber = val; + this.eventBus.dispatch('pagechanging', arg); this.eventBus.dispatch('pagechange', arg); - - // Check if the caller is `PDFViewer_update`, to avoid breaking scrolling. - if (this.updateInProgress) { - return; - } - this.scrollPageIntoView(val); }, /** @@ -499,6 +498,19 @@ var PDFViewer = (function pdfViewer() { } }, + /** + * Refreshes page view: scrolls to the current page and updates the scale. + */ + _resetCurrentPageView: function () { + if (this.isInPresentationMode) { + // Fixes the case when PDF has different page sizes. + this._setScale(this._currentScaleValue, true); + } + + var pageView = this._pages[this._currentPageNumber - 1]; + scrollIntoView(pageView.div); + }, + /** * Scrolls page into view. * @param {number} pageNumber @@ -511,23 +523,13 @@ var PDFViewer = (function pdfViewer() { return; } - var pageView = this._pages[pageNumber - 1]; - - if (this.isInPresentationMode) { - if (this._currentPageNumber !== pageView.id) { - // Avoid breaking getVisiblePages in presentation mode. - this.currentPageNumber = pageView.id; - return; - } - dest = null; - // Fixes the case when PDF has different page sizes. - this._setScale(this._currentScaleValue, true); - } - if (!dest) { - scrollIntoView(pageView.div); + if (this.isInPresentationMode || !dest) { + this._setCurrentPageNumber(pageNumber); + this._resetCurrentPageView(); return; } + var pageView = this._pages[pageNumber - 1]; var x = 0, y = 0; var width = 0, height = 0, widthScale, heightScale; var changeOrientation = (pageView.rotation % 180 === 0 ? false : true); @@ -644,8 +646,6 @@ var PDFViewer = (function pdfViewer() { return; } - this.updateInProgress = true; - var suggestedCacheSize = Math.max(DEFAULT_CACHE_SIZE, 2 * visiblePages.length + 1); this._buffer.resize(suggestedCacheSize); @@ -673,13 +673,11 @@ var PDFViewer = (function pdfViewer() { } if (!this.isInPresentationMode) { - this.currentPageNumber = currentId; + this._setCurrentPageNumber(currentId); } this._updateLocation(firstPage); - this.updateInProgress = false; - this.eventBus.dispatch('updateviewarea', { source: this, location: this._location