Browse Source

Merge pull request #8636 from Snuffleupagus/es6-PDFViewer-class

Convert `PDFViewer` to an ES6 class
Jonas Jenwald 8 years ago committed by GitHub
parent
commit
5187f0fcbb
  1. 15
      web/app.js
  2. 320
      web/pdf_viewer.js

15
web/app.js

@ -977,7 +977,7 @@ let PDFViewerApplication = {
!initialParams.hash) { !initialParams.hash) {
return; return;
} }
if (this.hasEqualPageSizes) { if (pdfViewer.hasEqualPageSizes) {
return; return;
} }
this.initialDestination = initialParams.destination; this.initialDestination = initialParams.destination;
@ -1217,19 +1217,6 @@ let PDFViewerApplication = {
} }
}, },
// Whether all pages of the PDF have the same width and height.
get hasEqualPageSizes() {
let firstPage = this.pdfViewer.getPageView(0);
for (let i = 1, ii = this.pagesCount; i < ii; ++i) {
let pageView = this.pdfViewer.getPageView(i);
if (pageView.width !== firstPage.width ||
pageView.height !== firstPage.height) {
return false;
}
}
return true;
},
afterPrint: function pdfViewSetupAfterPrint() { afterPrint: function pdfViewSetupAfterPrint() {
if (this.printService) { if (this.printService) {
this.printService.destroy(); this.printService.destroy();

320
web/pdf_viewer.js

@ -26,14 +26,14 @@ import { PDFPageView } from './pdf_page_view';
import { SimpleLinkService } from './pdf_link_service'; import { SimpleLinkService } from './pdf_link_service';
import { TextLayerBuilder } from './text_layer_builder'; import { TextLayerBuilder } from './text_layer_builder';
var PresentationModeState = { const PresentationModeState = {
UNKNOWN: 0, UNKNOWN: 0,
NORMAL: 1, NORMAL: 1,
CHANGING: 2, CHANGING: 2,
FULLSCREEN: 3, FULLSCREEN: 3,
}; };
var DEFAULT_CACHE_SIZE = 10; const DEFAULT_CACHE_SIZE = 10;
/** /**
* @typedef {Object} PDFViewerOptions * @typedef {Object} PDFViewerOptions
@ -58,16 +58,10 @@ var DEFAULT_CACHE_SIZE = 10;
* @property {IL10n} l10n - Localization service. * @property {IL10n} l10n - Localization service.
*/ */
/**
* Simple viewer control to display PDF content/pages.
* @class
* @implements {IRenderableView}
*/
var PDFViewer = (function pdfViewer() {
function PDFPageViewBuffer(size) { function PDFPageViewBuffer(size) {
var data = []; let data = [];
this.push = function cachePush(view) { this.push = function cachePush(view) {
var i = data.indexOf(view); let i = data.indexOf(view);
if (i >= 0) { if (i >= 0) {
data.splice(i, 1); data.splice(i, 1);
} }
@ -101,10 +95,14 @@ var PDFViewer = (function pdfViewer() {
} }
/** /**
* @constructs PDFViewer * Simple viewer control to display PDF content/pages.
* @implements {IRenderableView}
*/
class PDFViewer {
/**
* @param {PDFViewerOptions} options * @param {PDFViewerOptions} options
*/ */
function PDFViewer(options) { constructor(options) {
this.container = options.container; this.container = options.container;
this.viewer = options.viewer || options.container.firstElementChild; this.viewer = options.viewer || options.container.firstElementChild;
this.eventBus = options.eventBus || getGlobalEventBus(); this.eventBus = options.eventBus || getGlobalEventBus();
@ -135,28 +133,27 @@ var PDFViewer = (function pdfViewer() {
} }
} }
PDFViewer.prototype = /** @lends PDFViewer.prototype */{
get pagesCount() { get pagesCount() {
return this._pages.length; return this._pages.length;
}, }
getPageView(index) { getPageView(index) {
return this._pages[index]; return this._pages[index];
}, }
/** /**
* @returns {boolean} true if all {PDFPageView} objects are initialized. * @returns {boolean} true if all {PDFPageView} objects are initialized.
*/ */
get pageViewsReady() { get pageViewsReady() {
return this._pageViewsReady; return this._pageViewsReady;
}, }
/** /**
* @returns {number} * @returns {number}
*/ */
get currentPageNumber() { get currentPageNumber() {
return this._currentPageNumber; return this._currentPageNumber;
}, }
/** /**
* @param {number} val - The page number. * @param {number} val - The page number.
@ -170,13 +167,12 @@ var PDFViewer = (function pdfViewer() {
} }
// The intent can be to just reset a scroll position and/or scale. // The intent can be to just reset a scroll position and/or scale.
this._setCurrentPageNumber(val, /* resetCurrentPageView = */ true); this._setCurrentPageNumber(val, /* resetCurrentPageView = */ true);
}, }
/** /**
* @private * @private
*/ */
_setCurrentPageNumber: _setCurrentPageNumber(val, resetCurrentPageView = false) {
function PDFViewer_setCurrentPageNumber(val, resetCurrentPageView) {
if (this._currentPageNumber === val) { if (this._currentPageNumber === val) {
if (resetCurrentPageView) { if (resetCurrentPageView) {
this._resetCurrentPageView(); this._resetCurrentPageView();
@ -185,12 +181,12 @@ var PDFViewer = (function pdfViewer() {
} }
if (!(0 < val && val <= this.pagesCount)) { if (!(0 < val && val <= this.pagesCount)) {
console.error('PDFViewer_setCurrentPageNumber: "' + val + console.error(
'" is out of bounds.'); `PDFViewer._setCurrentPageNumber: "${val}" is out of bounds.`);
return; return;
} }
var arg = { let arg = {
source: this, source: this,
pageNumber: val, pageNumber: val,
pageLabel: this._pageLabels && this._pageLabels[val - 1], pageLabel: this._pageLabels && this._pageLabels[val - 1],
@ -202,7 +198,7 @@ var PDFViewer = (function pdfViewer() {
if (resetCurrentPageView) { if (resetCurrentPageView) {
this._resetCurrentPageView(); this._resetCurrentPageView();
} }
}, }
/** /**
* @returns {string|null} Returns the current page label, * @returns {string|null} Returns the current page label,
@ -210,7 +206,7 @@ var PDFViewer = (function pdfViewer() {
*/ */
get currentPageLabel() { get currentPageLabel() {
return this._pageLabels && this._pageLabels[this._currentPageNumber - 1]; return this._pageLabels && this._pageLabels[this._currentPageNumber - 1];
}, }
/** /**
* @param {string} val - The page label. * @param {string} val - The page label.
@ -224,7 +220,7 @@ var PDFViewer = (function pdfViewer() {
} }
} }
this.currentPageNumber = pageNumber; this.currentPageNumber = pageNumber;
}, }
/** /**
* @returns {number} * @returns {number}
@ -232,7 +228,7 @@ var PDFViewer = (function pdfViewer() {
get currentScale() { get currentScale() {
return this._currentScale !== UNKNOWN_SCALE ? this._currentScale : return this._currentScale !== UNKNOWN_SCALE ? this._currentScale :
DEFAULT_SCALE; DEFAULT_SCALE;
}, }
/** /**
* @param {number} val - Scale of the pages in percents. * @param {number} val - Scale of the pages in percents.
@ -245,14 +241,14 @@ var PDFViewer = (function pdfViewer() {
return; return;
} }
this._setScale(val, false); this._setScale(val, false);
}, }
/** /**
* @returns {string} * @returns {string}
*/ */
get currentScaleValue() { get currentScaleValue() {
return this._currentScaleValue; return this._currentScaleValue;
}, }
/** /**
* @param val - The scale of the pages (in percent or predefined value). * @param val - The scale of the pages (in percent or predefined value).
@ -262,14 +258,14 @@ var PDFViewer = (function pdfViewer() {
return; return;
} }
this._setScale(val, false); this._setScale(val, false);
}, }
/** /**
* @returns {number} * @returns {number}
*/ */
get pagesRotation() { get pagesRotation() {
return this._pagesRotation; return this._pagesRotation;
}, }
/** /**
* @param {number} rotation - The rotation of the pages (0, 90, 180, 270). * @param {number} rotation - The rotation of the pages (0, 90, 180, 270).
@ -293,7 +289,7 @@ var PDFViewer = (function pdfViewer() {
if (this.defaultRenderingQueue) { if (this.defaultRenderingQueue) {
this.update(); this.update();
} }
}, }
/** /**
* @param pdfDocument {PDFDocument} * @param pdfDocument {PDFDocument}
@ -308,9 +304,9 @@ var PDFViewer = (function pdfViewer() {
if (!pdfDocument) { if (!pdfDocument) {
return; return;
} }
var pagesCount = pdfDocument.numPages; let pagesCount = pdfDocument.numPages;
var pagesCapability = createPromiseCapability(); let pagesCapability = createPromiseCapability();
this.pagesPromise = pagesCapability.promise; this.pagesPromise = pagesCapability.promise;
pagesCapability.promise.then(() => { pagesCapability.promise.then(() => {
@ -321,11 +317,11 @@ var PDFViewer = (function pdfViewer() {
}); });
}); });
var isOnePageRenderedResolved = false; let isOnePageRenderedResolved = false;
var onePageRenderedCapability = createPromiseCapability(); let onePageRenderedCapability = createPromiseCapability();
this.onePageRendered = onePageRenderedCapability.promise; this.onePageRendered = onePageRenderedCapability.promise;
var bindOnAfterAndBeforeDraw = (pageView) => { let bindOnAfterAndBeforeDraw = (pageView) => {
pageView.onBeforeDraw = () => { pageView.onBeforeDraw = () => {
// Add the page to the buffer at the start of drawing. That way it can // Add the page to the buffer at the start of drawing. That way it can
// be evicted from the buffer and destroyed even if we pause its // be evicted from the buffer and destroyed even if we pause its
@ -340,20 +336,20 @@ var PDFViewer = (function pdfViewer() {
}; };
}; };
var firstPagePromise = pdfDocument.getPage(1); let firstPagePromise = pdfDocument.getPage(1);
this.firstPagePromise = firstPagePromise; this.firstPagePromise = firstPagePromise;
// Fetch a single page so we can get a viewport that will be the default // Fetch a single page so we can get a viewport that will be the default
// viewport for all pages // viewport for all pages
return firstPagePromise.then((pdfPage) => { return firstPagePromise.then((pdfPage) => {
var scale = this.currentScale; let scale = this.currentScale;
var viewport = pdfPage.getViewport(scale * CSS_UNITS); let viewport = pdfPage.getViewport(scale * CSS_UNITS);
for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) { for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) {
var textLayerFactory = null; let textLayerFactory = null;
if (!PDFJS.disableTextLayer) { if (!PDFJS.disableTextLayer) {
textLayerFactory = this; textLayerFactory = this;
} }
var pageView = new PDFPageView({ let pageView = new PDFPageView({
container: this.viewer, container: this.viewer,
eventBus: this.eventBus, eventBus: this.eventBus,
id: pageNum, id: pageNum,
@ -380,10 +376,10 @@ var PDFViewer = (function pdfViewer() {
pagesCapability.resolve(); pagesCapability.resolve();
return; return;
} }
var getPagesLeft = pagesCount; let getPagesLeft = pagesCount;
for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) { for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) {
pdfDocument.getPage(pageNum).then((pdfPage) => { pdfDocument.getPage(pageNum).then((pdfPage) => {
var pageView = this._pages[pageNum - 1]; let pageView = this._pages[pageNum - 1];
if (!pageView.pdfPage) { if (!pageView.pdfPage) {
pageView.setPdfPage(pdfPage); pageView.setPdfPage(pdfPage);
} }
@ -405,12 +401,12 @@ var PDFViewer = (function pdfViewer() {
this.findController.resolveFirstPage(); this.findController.resolveFirstPage();
} }
}); });
}, }
/** /**
* @param {Array|null} labels * @param {Array|null} labels
*/ */
setPageLabels: function PDFViewer_setPageLabels(labels) { setPageLabels(labels) {
if (!this.pdfDocument) { if (!this.pdfDocument) {
return; return;
} }
@ -419,17 +415,17 @@ var PDFViewer = (function pdfViewer() {
} else if (!(labels instanceof Array && } else if (!(labels instanceof Array &&
this.pdfDocument.numPages === labels.length)) { this.pdfDocument.numPages === labels.length)) {
this._pageLabels = null; this._pageLabels = null;
console.error('PDFViewer_setPageLabels: Invalid page labels.'); console.error('PDFViewer.setPageLabels: Invalid page labels.');
} else { } else {
this._pageLabels = labels; this._pageLabels = labels;
} }
// Update all the `PDFPageView` instances. // Update all the `PDFPageView` instances.
for (var i = 0, ii = this._pages.length; i < ii; i++) { for (let i = 0, ii = this._pages.length; i < ii; i++) {
var pageView = this._pages[i]; let pageView = this._pages[i];
var label = this._pageLabels && this._pageLabels[i]; let label = this._pageLabels && this._pageLabels[i];
pageView.setPageLabel(label); pageView.setPageLabel(label);
} }
}, }
_resetView() { _resetView() {
this._pages = []; this._pages = [];
@ -445,28 +441,26 @@ var PDFViewer = (function pdfViewer() {
// Remove the pages from the DOM. // Remove the pages from the DOM.
this.viewer.textContent = ''; this.viewer.textContent = '';
}, }
_scrollUpdate() { _scrollUpdate() {
if (this.pagesCount === 0) { if (this.pagesCount === 0) {
return; return;
} }
this.update(); this.update();
}, }
_setScaleDispatchEvent: function pdfViewer_setScaleDispatchEvent( _setScaleDispatchEvent(newScale, newValue, preset = false) {
newScale, newValue, preset) { let arg = {
var arg = {
source: this, source: this,
scale: newScale, scale: newScale,
presetValue: preset ? newValue : undefined, presetValue: preset ? newValue : undefined,
}; };
this.eventBus.dispatch('scalechanging', arg); this.eventBus.dispatch('scalechanging', arg);
this.eventBus.dispatch('scalechange', arg); this.eventBus.dispatch('scalechange', arg);
}, }
_setScaleUpdatePages: function pdfViewer_setScaleUpdatePages( _setScaleUpdatePages(newScale, newValue, noScroll = false, preset = false) {
newScale, newValue, noScroll, preset) {
this._currentScaleValue = newValue.toString(); this._currentScaleValue = newValue.toString();
if (isSameScale(this._currentScale, newScale)) { if (isSameScale(this._currentScale, newScale)) {
@ -476,13 +470,13 @@ var PDFViewer = (function pdfViewer() {
return; return;
} }
for (var i = 0, ii = this._pages.length; i < ii; i++) { for (let i = 0, ii = this._pages.length; i < ii; i++) {
this._pages[i].update(newScale); this._pages[i].update(newScale);
} }
this._currentScale = newScale; this._currentScale = newScale;
if (!noScroll) { if (!noScroll) {
var page = this._currentPageNumber, dest; let page = this._currentPageNumber, dest;
if (this._location && !PDFJS.ignoreCurrentPositionOnZoom && if (this._location && !PDFJS.ignoreCurrentPositionOnZoom &&
!(this.isInPresentationMode || this.isChangingPresentationMode)) { !(this.isInPresentationMode || this.isChangingPresentationMode)) {
page = this._location.pageNumber; page = this._location.pageNumber;
@ -501,25 +495,25 @@ var PDFViewer = (function pdfViewer() {
if (this.defaultRenderingQueue) { if (this.defaultRenderingQueue) {
this.update(); this.update();
} }
}, }
_setScale: function PDFViewer_setScale(value, noScroll) { _setScale(value, noScroll = false) {
var scale = parseFloat(value); let scale = parseFloat(value);
if (scale > 0) { if (scale > 0) {
this._setScaleUpdatePages(scale, value, noScroll, false); this._setScaleUpdatePages(scale, value, noScroll, /* preset = */ false);
} else { } else {
var currentPage = this._pages[this._currentPageNumber - 1]; let currentPage = this._pages[this._currentPageNumber - 1];
if (!currentPage) { if (!currentPage) {
return; return;
} }
var hPadding = (this.isInPresentationMode || this.removePageBorders) ? let hPadding = (this.isInPresentationMode || this.removePageBorders) ?
0 : SCROLLBAR_PADDING; 0 : SCROLLBAR_PADDING;
var vPadding = (this.isInPresentationMode || this.removePageBorders) ? let vPadding = (this.isInPresentationMode || this.removePageBorders) ?
0 : VERTICAL_PADDING; 0 : VERTICAL_PADDING;
var pageWidthScale = (this.container.clientWidth - hPadding) / let pageWidthScale = (this.container.clientWidth - hPadding) /
currentPage.width * currentPage.scale; currentPage.width * currentPage.scale;
var pageHeightScale = (this.container.clientHeight - vPadding) / let pageHeightScale = (this.container.clientHeight - vPadding) /
currentPage.height * currentPage.scale; currentPage.height * currentPage.scale;
switch (value) { switch (value) {
case 'page-actual': case 'page-actual':
@ -535,21 +529,21 @@ var PDFViewer = (function pdfViewer() {
scale = Math.min(pageWidthScale, pageHeightScale); scale = Math.min(pageWidthScale, pageHeightScale);
break; break;
case 'auto': case 'auto':
var isLandscape = (currentPage.width > currentPage.height); let isLandscape = (currentPage.width > currentPage.height);
// For pages in landscape mode, fit the page height to the viewer // For pages in landscape mode, fit the page height to the viewer
// *unless* the page would thus become too wide to fit horizontally. // *unless* the page would thus become too wide to fit horizontally.
var horizontalScale = isLandscape ? let horizontalScale = isLandscape ?
Math.min(pageHeightScale, pageWidthScale) : pageWidthScale; Math.min(pageHeightScale, pageWidthScale) : pageWidthScale;
scale = Math.min(MAX_AUTO_SCALE, horizontalScale); scale = Math.min(MAX_AUTO_SCALE, horizontalScale);
break; break;
default: default:
console.error('PDFViewer_setScale: "' + value + console.error(
'" is an unknown zoom value.'); `PDFViewer._setScale: "${value}" is an unknown zoom value.`);
return; return;
} }
this._setScaleUpdatePages(scale, value, noScroll, true); this._setScaleUpdatePages(scale, value, noScroll, /* preset = */ true);
}
} }
},
/** /**
* Refreshes page view: scrolls to the current page and updates the scale. * Refreshes page view: scrolls to the current page and updates the scale.
@ -561,9 +555,9 @@ var PDFViewer = (function pdfViewer() {
this._setScale(this._currentScaleValue, true); this._setScale(this._currentScaleValue, true);
} }
var pageView = this._pages[this._currentPageNumber - 1]; let pageView = this._pages[this._currentPageNumber - 1];
scrollIntoView(pageView.div); scrollIntoView(pageView.div);
}, }
/** /**
* @typedef ScrollPageIntoViewParameters * @typedef ScrollPageIntoViewParameters
@ -578,14 +572,14 @@ var PDFViewer = (function pdfViewer() {
* Scrolls page into view. * Scrolls page into view.
* @param {ScrollPageIntoViewParameters} params * @param {ScrollPageIntoViewParameters} params
*/ */
scrollPageIntoView: function PDFViewer_scrollPageIntoView(params) { scrollPageIntoView(params) {
if (!this.pdfDocument) { if (!this.pdfDocument) {
return; return;
} }
if ((typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC')) && if ((typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC')) &&
(arguments.length > 1 || typeof params === 'number')) { (arguments.length > 1 || typeof params === 'number')) {
console.warn('Call of scrollPageIntoView() with obsolete signature.'); console.warn('Call of scrollPageIntoView() with obsolete signature.');
var paramObj = {}; let paramObj = {};
if (typeof params === 'number') { if (typeof params === 'number') {
paramObj.pageNumber = params; // pageNumber argument was found. paramObj.pageNumber = params; // pageNumber argument was found.
} }
@ -594,29 +588,29 @@ var PDFViewer = (function pdfViewer() {
} }
params = paramObj; params = paramObj;
} }
var pageNumber = params.pageNumber || 0; let pageNumber = params.pageNumber || 0;
var dest = params.destArray || null; let dest = params.destArray || null;
var allowNegativeOffset = params.allowNegativeOffset || false; let allowNegativeOffset = params.allowNegativeOffset || false;
if (this.isInPresentationMode || !dest) { if (this.isInPresentationMode || !dest) {
this._setCurrentPageNumber(pageNumber, /* resetCurrentPageView */ true); this._setCurrentPageNumber(pageNumber, /* resetCurrentPageView = */ true);
return; return;
} }
var pageView = this._pages[pageNumber - 1]; let pageView = this._pages[pageNumber - 1];
if (!pageView) { if (!pageView) {
console.error('PDFViewer_scrollPageIntoView: ' + console.error(
'Invalid "pageNumber" parameter.'); 'PDFViewer.scrollPageIntoView: Invalid "pageNumber" parameter.');
return; return;
} }
var x = 0, y = 0; let x = 0, y = 0;
var width = 0, height = 0, widthScale, heightScale; let width = 0, height = 0, widthScale, heightScale;
var changeOrientation = (pageView.rotation % 180 === 0 ? false : true); let changeOrientation = (pageView.rotation % 180 === 0 ? false : true);
var pageWidth = (changeOrientation ? pageView.height : pageView.width) / let pageWidth = (changeOrientation ? pageView.height : pageView.width) /
pageView.scale / CSS_UNITS; pageView.scale / CSS_UNITS;
var pageHeight = (changeOrientation ? pageView.width : pageView.height) / let pageHeight = (changeOrientation ? pageView.width : pageView.height) /
pageView.scale / CSS_UNITS; pageView.scale / CSS_UNITS;
var scale = 0; let scale = 0;
switch (dest[1].name) { switch (dest[1].name) {
case 'XYZ': case 'XYZ':
x = dest[2]; x = dest[2];
@ -656,8 +650,8 @@ var PDFViewer = (function pdfViewer() {
y = dest[3]; y = dest[3];
width = dest[4] - x; width = dest[4] - x;
height = dest[5] - y; height = dest[5] - y;
var hPadding = this.removePageBorders ? 0 : SCROLLBAR_PADDING; let hPadding = this.removePageBorders ? 0 : SCROLLBAR_PADDING;
var vPadding = this.removePageBorders ? 0 : VERTICAL_PADDING; let vPadding = this.removePageBorders ? 0 : VERTICAL_PADDING;
widthScale = (this.container.clientWidth - hPadding) / widthScale = (this.container.clientWidth - hPadding) /
width / CSS_UNITS; width / CSS_UNITS;
@ -666,8 +660,8 @@ var PDFViewer = (function pdfViewer() {
scale = Math.min(Math.abs(widthScale), Math.abs(heightScale)); scale = Math.min(Math.abs(widthScale), Math.abs(heightScale));
break; break;
default: default:
console.error('PDFViewer_scrollPageIntoView: \'' + dest[1].name + console.error(`PDFViewer.scrollPageIntoView: "${dest[1].name}" ` +
'\' is not a valid destination type.'); 'is not a valid destination type.');
return; return;
} }
@ -682,12 +676,12 @@ var PDFViewer = (function pdfViewer() {
return; return;
} }
var boundingRect = [ let boundingRect = [
pageView.viewport.convertToViewportPoint(x, y), pageView.viewport.convertToViewportPoint(x, y),
pageView.viewport.convertToViewportPoint(x + width, y + height) pageView.viewport.convertToViewportPoint(x + width, y + height)
]; ];
var left = Math.min(boundingRect[0][0], boundingRect[1][0]); let left = Math.min(boundingRect[0][0], boundingRect[1][0]);
var top = Math.min(boundingRect[0][1], boundingRect[1][1]); let top = Math.min(boundingRect[0][1], boundingRect[1][1]);
if (!allowNegativeOffset) { if (!allowNegativeOffset) {
// Some bad PDF generators will create destinations with e.g. top values // Some bad PDF generators will create destinations with e.g. top values
@ -697,25 +691,25 @@ var PDFViewer = (function pdfViewer() {
top = Math.max(top, 0); top = Math.max(top, 0);
} }
scrollIntoView(pageView.div, { left, top, }); scrollIntoView(pageView.div, { left, top, });
}, }
_updateLocation(firstPage) { _updateLocation(firstPage) {
var currentScale = this._currentScale; let currentScale = this._currentScale;
var currentScaleValue = this._currentScaleValue; let currentScaleValue = this._currentScaleValue;
var normalizedScaleValue = let normalizedScaleValue =
parseFloat(currentScaleValue) === currentScale ? parseFloat(currentScaleValue) === currentScale ?
Math.round(currentScale * 10000) / 100 : currentScaleValue; Math.round(currentScale * 10000) / 100 : currentScaleValue;
var pageNumber = firstPage.id; let pageNumber = firstPage.id;
var pdfOpenParams = '#page=' + pageNumber; let pdfOpenParams = '#page=' + pageNumber;
pdfOpenParams += '&zoom=' + normalizedScaleValue; pdfOpenParams += '&zoom=' + normalizedScaleValue;
var currentPageView = this._pages[pageNumber - 1]; let currentPageView = this._pages[pageNumber - 1];
var container = this.container; let container = this.container;
var topLeft = currentPageView.getPagePoint( let topLeft = currentPageView.getPagePoint(
(container.scrollLeft - firstPage.x), (container.scrollLeft - firstPage.x),
(container.scrollTop - firstPage.y)); (container.scrollTop - firstPage.y));
var intLeft = Math.round(topLeft[0]); let intLeft = Math.round(topLeft[0]);
var intTop = Math.round(topLeft[1]); let intTop = Math.round(topLeft[1]);
pdfOpenParams += ',' + intLeft + ',' + intTop; pdfOpenParams += ',' + intLeft + ',' + intTop;
this._location = { this._location = {
@ -725,27 +719,27 @@ var PDFViewer = (function pdfViewer() {
left: intLeft, left: intLeft,
pdfOpenParams, pdfOpenParams,
}; };
}, }
update: function PDFViewer_update() { update() {
var visible = this._getVisiblePages(); let visible = this._getVisiblePages();
var visiblePages = visible.views; let visiblePages = visible.views;
if (visiblePages.length === 0) { if (visiblePages.length === 0) {
return; return;
} }
var suggestedCacheSize = Math.max(DEFAULT_CACHE_SIZE, let suggestedCacheSize = Math.max(DEFAULT_CACHE_SIZE,
2 * visiblePages.length + 1); 2 * visiblePages.length + 1);
this._buffer.resize(suggestedCacheSize); this._buffer.resize(suggestedCacheSize);
this.renderingQueue.renderHighestPriority(visible); this.renderingQueue.renderHighestPriority(visible);
var currentId = this._currentPageNumber; let currentId = this._currentPageNumber;
var firstPage = visible.first; let firstPage = visible.first;
let stillFullyVisible = false;
for (var i = 0, ii = visiblePages.length, stillFullyVisible = false; for (let i = 0, ii = visiblePages.length; i < ii; ++i) {
i < ii; ++i) { let page = visiblePages[i];
var page = visiblePages[i];
if (page.percent < 100) { if (page.percent < 100) {
break; break;
@ -770,28 +764,28 @@ var PDFViewer = (function pdfViewer() {
source: this, source: this,
location: this._location, location: this._location,
}); });
}, }
containsElement(element) { containsElement(element) {
return this.container.contains(element); return this.container.contains(element);
}, }
focus() { focus() {
this.container.focus(); this.container.focus();
}, }
get isInPresentationMode() { get isInPresentationMode() {
return this.presentationModeState === PresentationModeState.FULLSCREEN; return this.presentationModeState === PresentationModeState.FULLSCREEN;
}, }
get isChangingPresentationMode() { get isChangingPresentationMode() {
return this.presentationModeState === PresentationModeState.CHANGING; return this.presentationModeState === PresentationModeState.CHANGING;
}, }
get isHorizontalScrollbarEnabled() { get isHorizontalScrollbarEnabled() {
return (this.isInPresentationMode ? return (this.isInPresentationMode ?
false : (this.container.scrollWidth > this.container.clientWidth)); false : (this.container.scrollWidth > this.container.clientWidth));
}, }
_getVisiblePages() { _getVisiblePages() {
if (!this.isInPresentationMode) { if (!this.isInPresentationMode) {
@ -799,46 +793,46 @@ var PDFViewer = (function pdfViewer() {
} }
// 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. // configurations when presentation mode is active.
var visible = []; let visible = [];
var currentPage = this._pages[this._currentPageNumber - 1]; let currentPage = this._pages[this._currentPageNumber - 1];
visible.push({ id: currentPage.id, view: currentPage, }); visible.push({ id: currentPage.id, view: currentPage, });
return { first: currentPage, last: currentPage, views: visible, }; return { first: currentPage, last: currentPage, views: visible, };
}, }
cleanup() { cleanup() {
for (var i = 0, ii = this._pages.length; i < ii; i++) { for (let i = 0, ii = this._pages.length; i < ii; i++) {
if (this._pages[i] && if (this._pages[i] &&
this._pages[i].renderingState !== RenderingStates.FINISHED) { this._pages[i].renderingState !== RenderingStates.FINISHED) {
this._pages[i].reset(); this._pages[i].reset();
} }
} }
}, }
/** /**
* @private * @private
*/ */
_cancelRendering: function PDFViewer_cancelRendering() { _cancelRendering() {
for (var i = 0, ii = this._pages.length; i < ii; i++) { for (let i = 0, ii = this._pages.length; i < ii; i++) {
if (this._pages[i]) { if (this._pages[i]) {
this._pages[i].cancelRendering(); this._pages[i].cancelRendering();
} }
} }
}, }
/** /**
* @param {PDFPageView} pageView * @param {PDFPageView} pageView
* @returns {PDFPage} * @returns {Promise} Returns a promise containing a {PDFPageProxy} object.
* @private * @private
*/ */
_ensurePdfPageLoaded(pageView) { _ensurePdfPageLoaded(pageView) {
if (pageView.pdfPage) { if (pageView.pdfPage) {
return Promise.resolve(pageView.pdfPage); return Promise.resolve(pageView.pdfPage);
} }
var pageNumber = pageView.id; let pageNumber = pageView.id;
if (this._pagesRequests[pageNumber]) { if (this._pagesRequests[pageNumber]) {
return this._pagesRequests[pageNumber]; return this._pagesRequests[pageNumber];
} }
var promise = this.pdfDocument.getPage(pageNumber).then((pdfPage) => { let promise = this.pdfDocument.getPage(pageNumber).then((pdfPage) => {
if (!pageView.pdfPage) { if (!pageView.pdfPage) {
pageView.setPdfPage(pdfPage); pageView.setPdfPage(pdfPage);
} }
@ -847,11 +841,11 @@ var PDFViewer = (function pdfViewer() {
}); });
this._pagesRequests[pageNumber] = promise; this._pagesRequests[pageNumber] = promise;
return promise; return promise;
}, }
forceRendering(currentlyVisiblePages) { forceRendering(currentlyVisiblePages) {
var visiblePages = currentlyVisiblePages || this._getVisiblePages(); let visiblePages = currentlyVisiblePages || this._getVisiblePages();
var pageView = this.renderingQueue.getHighestPriority(visiblePages, let pageView = this.renderingQueue.getHighestPriority(visiblePages,
this._pages, this._pages,
this.scroll.down); this.scroll.down);
if (pageView) { if (pageView) {
@ -861,7 +855,7 @@ var PDFViewer = (function pdfViewer() {
return true; return true;
} }
return false; return false;
}, }
getPageTextContent(pageIndex) { getPageTextContent(pageIndex) {
return this.pdfDocument.getPage(pageIndex + 1).then(function(page) { return this.pdfDocument.getPage(pageIndex + 1).then(function(page) {
@ -869,7 +863,7 @@ var PDFViewer = (function pdfViewer() {
normalizeWhitespace: true, normalizeWhitespace: true,
}); });
}); });
}, }
/** /**
* @param {HTMLDivElement} textLayerDiv * @param {HTMLDivElement} textLayerDiv
@ -888,7 +882,7 @@ var PDFViewer = (function pdfViewer() {
enhanceTextSelection: this.isInPresentationMode ? false : enhanceTextSelection: this.isInPresentationMode ? false :
enhanceTextSelection, enhanceTextSelection,
}); });
}, }
/** /**
* @param {HTMLDivElement} pageDiv * @param {HTMLDivElement} pageDiv
@ -897,8 +891,7 @@ var PDFViewer = (function pdfViewer() {
* @param {IL10n} l10n * @param {IL10n} l10n
* @returns {AnnotationLayerBuilder} * @returns {AnnotationLayerBuilder}
*/ */
createAnnotationLayerBuilder(pageDiv, pdfPage, createAnnotationLayerBuilder(pageDiv, pdfPage, renderInteractiveForms = false,
renderInteractiveForms = false,
l10n = NullL10n) { l10n = NullL10n) {
return new AnnotationLayerBuilder({ return new AnnotationLayerBuilder({
pageDiv, pageDiv,
@ -908,19 +901,35 @@ var PDFViewer = (function pdfViewer() {
downloadManager: this.downloadManager, downloadManager: this.downloadManager,
l10n, l10n,
}); });
}, }
setFindController(findController) { setFindController(findController) {
this.findController = findController; this.findController = findController;
}, }
/**
* @returns {boolean} Whether all pages of the PDF document have identical
* widths and heights.
*/
get hasEqualPageSizes() {
let firstPageView = this._pages[0];
for (let i = 1, ii = this._pages.length; i < ii; ++i) {
let pageView = this._pages[i];
if (pageView.width !== firstPageView.width ||
pageView.height !== firstPageView.height) {
return false;
}
}
return true;
}
/** /**
* Returns sizes of the pages. * Returns sizes of the pages.
* @returns {Array} Array of objects with width/height/rotation fields. * @returns {Array} Array of objects with width/height/rotation fields.
*/ */
getPagesOverview() { getPagesOverview() {
var pagesOverview = this._pages.map(function (pageView) { let pagesOverview = this._pages.map(function(pageView) {
var viewport = pageView.pdfPage.getViewport(1); let viewport = pageView.pdfPage.getViewport(1);
return { return {
width: viewport.width, width: viewport.width,
height: viewport.height, height: viewport.height,
@ -930,7 +939,7 @@ var PDFViewer = (function pdfViewer() {
if (!this.enablePrintAutoRotate) { if (!this.enablePrintAutoRotate) {
return pagesOverview; return pagesOverview;
} }
var isFirstPagePortrait = isPortraitOrientation(pagesOverview[0]); let isFirstPagePortrait = isPortraitOrientation(pagesOverview[0]);
return pagesOverview.map(function (size) { return pagesOverview.map(function (size) {
if (isFirstPagePortrait === isPortraitOrientation(size)) { if (isFirstPagePortrait === isPortraitOrientation(size)) {
return size; return size;
@ -941,11 +950,8 @@ var PDFViewer = (function pdfViewer() {
rotation: (size.rotation + 90) % 360, rotation: (size.rotation + 90) % 360,
}; };
}); });
}, }
}; }
return PDFViewer;
})();
export { export {
PresentationModeState, PresentationModeState,

Loading…
Cancel
Save