From 2a79bcbe453dfa077412474c118c2febd22ddac0 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Wed, 24 Oct 2018 12:29:56 +0200 Subject: [PATCH] Add a helper method for `_getVisiblePages`, in `BaseViewer`, for the case where only a single page is displayed in the viewer This is relevant for e.g. `PDFSinglePageViewer`, and `PDFViewer` with Presentation Mode active. By moving this code to a helper method in `BaseViewer`, it's thus possible to reduce the amount of duplicate code that currently needed in `PDFViewer` and `PDFSinglePageViewer`. --- web/base_viewer.js | 24 ++++++++++++++++++++++++ web/pdf_single_page_viewer.js | 16 +--------------- web/pdf_viewer.js | 6 ++---- 3 files changed, 27 insertions(+), 19 deletions(-) diff --git a/web/base_viewer.js b/web/base_viewer.js index d97ff24a2..52ae96ca2 100644 --- a/web/base_viewer.js +++ b/web/base_viewer.js @@ -855,6 +855,30 @@ class BaseViewer { false : (this.container.scrollHeight > this.container.clientHeight)); } + /** + * Helper method for `this._getVisiblePages`. Should only ever be used when + * the viewer can only display a single page at a time, for example in: + * - `PDFSinglePageViewer`. + * - `PDFViewer` with Presentation Mode active. + */ + _getCurrentVisiblePage() { + if (!this.pagesCount) { + return { views: [], }; + } + const pageView = this._pages[this._currentPageNumber - 1]; + // NOTE: Compute the `x` and `y` properties of the current view, + // since `this._updateLocation` depends of them being available. + const element = pageView.div; + + const view = { + id: pageView.id, + x: element.offsetLeft + element.clientLeft, + y: element.offsetTop + element.clientTop, + view: pageView, + }; + return { first: view, last: view, views: [view], }; + } + _getVisiblePages() { throw new Error('Not implemented: _getVisiblePages'); } diff --git a/web/pdf_single_page_viewer.js b/web/pdf_single_page_viewer.js index 575b485e8..e6dfd2697 100644 --- a/web/pdf_single_page_viewer.js +++ b/web/pdf_single_page_viewer.js @@ -108,21 +108,7 @@ class PDFSinglePageViewer extends BaseViewer { } _getVisiblePages() { - if (!this.pagesCount) { - return { views: [], }; - } - let pageView = this._pages[this._currentPageNumber - 1]; - // NOTE: Compute the `x` and `y` properties of the current view, - // since `this._updateLocation` depends of them being available. - let element = pageView.div; - - let view = { - id: pageView.id, - x: element.offsetLeft + element.clientLeft, - y: element.offsetTop + element.clientTop, - view: pageView, - }; - return { first: view, last: view, views: [view], }; + return this._getCurrentVisiblePage(); } update() { diff --git a/web/pdf_viewer.js b/web/pdf_viewer.js index 659c8db76..58c880903 100644 --- a/web/pdf_viewer.js +++ b/web/pdf_viewer.js @@ -40,11 +40,9 @@ class PDFViewer extends BaseViewer { return getVisibleElements(this.container, this._pages, true, this._scrollMode === ScrollMode.HORIZONTAL); } - // The algorithm in getVisibleElements doesn't work in all browsers and + // The algorithm in `getVisibleElements` doesn't work in all browsers and // configurations when presentation mode is active. - let currentPage = this._pages[this._currentPageNumber - 1]; - let visible = [{ id: currentPage.id, view: currentPage, }]; - return { first: currentPage, last: currentPage, views: visible, }; + return this._getCurrentVisiblePage(); } update() {