UNPKG

28.4 kBJavaScriptView Raw
1/**
2 * @licstart The following is the entire license notice for the
3 * Javascript code in this page
4 *
5 * Copyright 2017 Mozilla Foundation
6 *
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 *
19 * @licend The above is the entire license notice for the
20 * Javascript code in this page
21 */
22'use strict';
23
24Object.defineProperty(exports, "__esModule", {
25 value: true
26});
27exports.BaseViewer = undefined;
28
29var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
30
31var _ui_utils = require('./ui_utils');
32
33var _pdf_rendering_queue = require('./pdf_rendering_queue');
34
35var _annotation_layer_builder = require('./annotation_layer_builder');
36
37var _pdf = require('../pdf');
38
39var _dom_events = require('./dom_events');
40
41var _pdf_page_view = require('./pdf_page_view');
42
43var _pdf_link_service = require('./pdf_link_service');
44
45var _text_layer_builder = require('./text_layer_builder');
46
47function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
48
49var DEFAULT_CACHE_SIZE = 10;
50function PDFPageViewBuffer(size) {
51 var data = [];
52 this.push = function (view) {
53 var i = data.indexOf(view);
54 if (i >= 0) {
55 data.splice(i, 1);
56 }
57 data.push(view);
58 if (data.length > size) {
59 data.shift().destroy();
60 }
61 };
62 this.resize = function (newSize) {
63 size = newSize;
64 while (data.length > size) {
65 data.shift().destroy();
66 }
67 };
68}
69function isSameScale(oldScale, newScale) {
70 if (newScale === oldScale) {
71 return true;
72 }
73 if (Math.abs(newScale - oldScale) < 1e-15) {
74 return true;
75 }
76 return false;
77}
78
79var BaseViewer = function () {
80 function BaseViewer(options) {
81 _classCallCheck(this, BaseViewer);
82
83 if (this.constructor === BaseViewer) {
84 throw new Error('Cannot initialize BaseViewer.');
85 }
86 this._name = this.constructor.name;
87 this.container = options.container;
88 this.viewer = options.viewer || options.container.firstElementChild;
89 this.eventBus = options.eventBus || (0, _dom_events.getGlobalEventBus)();
90 this.linkService = options.linkService || new _pdf_link_service.SimpleLinkService();
91 this.downloadManager = options.downloadManager || null;
92 this.removePageBorders = options.removePageBorders || false;
93 this.textLayerMode = Number.isInteger(options.textLayerMode) ? options.textLayerMode : _ui_utils.TextLayerMode.ENABLE;
94 this.enhanceTextSelection = options.enhanceTextSelection || false;
95 this.imageResourcesPath = options.imageResourcesPath || '';
96 this.renderInteractiveForms = options.renderInteractiveForms || false;
97 this.enablePrintAutoRotate = options.enablePrintAutoRotate || false;
98 this.renderer = options.renderer || _ui_utils.RendererType.CANVAS;
99 this.enableWebGL = options.enableWebGL || false;
100 this.useOnlyCssZoom = options.useOnlyCssZoom || false;
101 this.maxCanvasPixels = options.maxCanvasPixels;
102 this.l10n = options.l10n || _ui_utils.NullL10n;
103 this.defaultRenderingQueue = !options.renderingQueue;
104 if (this.defaultRenderingQueue) {
105 this.renderingQueue = new _pdf_rendering_queue.PDFRenderingQueue();
106 this.renderingQueue.setViewer(this);
107 } else {
108 this.renderingQueue = options.renderingQueue;
109 }
110 this.scroll = (0, _ui_utils.watchScroll)(this.container, this._scrollUpdate.bind(this));
111 this.presentationModeState = _ui_utils.PresentationModeState.UNKNOWN;
112 this._resetView();
113 if (this.removePageBorders) {
114 this.viewer.classList.add('removePageBorders');
115 }
116 }
117
118 _createClass(BaseViewer, [{
119 key: 'getPageView',
120 value: function getPageView(index) {
121 return this._pages[index];
122 }
123 }, {
124 key: '_setCurrentPageNumber',
125 value: function _setCurrentPageNumber(val) {
126 var resetCurrentPageView = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
127
128 if (this._currentPageNumber === val) {
129 if (resetCurrentPageView) {
130 this._resetCurrentPageView();
131 }
132 return;
133 }
134 if (!(0 < val && val <= this.pagesCount)) {
135 console.error(this._name + '._setCurrentPageNumber: "' + val + '" is out of bounds.');
136 return;
137 }
138 var arg = {
139 source: this,
140 pageNumber: val,
141 pageLabel: this._pageLabels && this._pageLabels[val - 1]
142 };
143 this._currentPageNumber = val;
144 this.eventBus.dispatch('pagechanging', arg);
145 this.eventBus.dispatch('pagechange', arg);
146 if (resetCurrentPageView) {
147 this._resetCurrentPageView();
148 }
149 }
150 }, {
151 key: 'setDocument',
152 value: function setDocument(pdfDocument) {
153 var _this = this;
154
155 if (this.pdfDocument) {
156 this._cancelRendering();
157 this._resetView();
158 }
159 this.pdfDocument = pdfDocument;
160 if (!pdfDocument) {
161 return;
162 }
163 var pagesCount = pdfDocument.numPages;
164 var pagesCapability = (0, _pdf.createPromiseCapability)();
165 this.pagesPromise = pagesCapability.promise;
166 pagesCapability.promise.then(function () {
167 _this._pageViewsReady = true;
168 _this.eventBus.dispatch('pagesloaded', {
169 source: _this,
170 pagesCount: pagesCount
171 });
172 });
173 var isOnePageRenderedResolved = false;
174 var onePageRenderedCapability = (0, _pdf.createPromiseCapability)();
175 this.onePageRendered = onePageRenderedCapability.promise;
176 var bindOnAfterAndBeforeDraw = function bindOnAfterAndBeforeDraw(pageView) {
177 pageView.onBeforeDraw = function () {
178 _this._buffer.push(pageView);
179 };
180 pageView.onAfterDraw = function () {
181 if (!isOnePageRenderedResolved) {
182 isOnePageRenderedResolved = true;
183 onePageRenderedCapability.resolve();
184 }
185 };
186 };
187 var firstPagePromise = pdfDocument.getPage(1);
188 this.firstPagePromise = firstPagePromise;
189 firstPagePromise.then(function (pdfPage) {
190 var scale = _this.currentScale;
191 var viewport = pdfPage.getViewport(scale * _ui_utils.CSS_UNITS);
192 for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) {
193 var textLayerFactory = null;
194 if (_this.textLayerMode !== _ui_utils.TextLayerMode.DISABLE) {
195 textLayerFactory = _this;
196 }
197 var pageView = new _pdf_page_view.PDFPageView({
198 container: _this._setDocumentViewerElement,
199 eventBus: _this.eventBus,
200 id: pageNum,
201 scale: scale,
202 defaultViewport: viewport.clone(),
203 renderingQueue: _this.renderingQueue,
204 textLayerFactory: textLayerFactory,
205 textLayerMode: _this.textLayerMode,
206 annotationLayerFactory: _this,
207 imageResourcesPath: _this.imageResourcesPath,
208 renderInteractiveForms: _this.renderInteractiveForms,
209 renderer: _this.renderer,
210 enableWebGL: _this.enableWebGL,
211 useOnlyCssZoom: _this.useOnlyCssZoom,
212 maxCanvasPixels: _this.maxCanvasPixels,
213 l10n: _this.l10n
214 });
215 bindOnAfterAndBeforeDraw(pageView);
216 _this._pages.push(pageView);
217 }
218 onePageRenderedCapability.promise.then(function () {
219 if (pdfDocument.loadingParams['disableAutoFetch']) {
220 pagesCapability.resolve();
221 return;
222 }
223 var getPagesLeft = pagesCount;
224
225 var _loop = function _loop(_pageNum) {
226 pdfDocument.getPage(_pageNum).then(function (pdfPage) {
227 var pageView = _this._pages[_pageNum - 1];
228 if (!pageView.pdfPage) {
229 pageView.setPdfPage(pdfPage);
230 }
231 _this.linkService.cachePageRef(_pageNum, pdfPage.ref);
232 if (--getPagesLeft === 0) {
233 pagesCapability.resolve();
234 }
235 }, function (reason) {
236 console.error('Unable to get page ' + _pageNum + ' to initialize viewer', reason);
237 if (--getPagesLeft === 0) {
238 pagesCapability.resolve();
239 }
240 });
241 };
242
243 for (var _pageNum = 1; _pageNum <= pagesCount; ++_pageNum) {
244 _loop(_pageNum);
245 }
246 });
247 _this.eventBus.dispatch('pagesinit', { source: _this });
248 if (_this.defaultRenderingQueue) {
249 _this.update();
250 }
251 if (_this.findController) {
252 _this.findController.resolveFirstPage();
253 }
254 }).catch(function (reason) {
255 console.error('Unable to initialize viewer', reason);
256 });
257 }
258 }, {
259 key: 'setPageLabels',
260 value: function setPageLabels(labels) {
261 if (!this.pdfDocument) {
262 return;
263 }
264 if (!labels) {
265 this._pageLabels = null;
266 } else if (!(labels instanceof Array && this.pdfDocument.numPages === labels.length)) {
267 this._pageLabels = null;
268 console.error(this._name + '.setPageLabels: Invalid page labels.');
269 } else {
270 this._pageLabels = labels;
271 }
272 for (var i = 0, ii = this._pages.length; i < ii; i++) {
273 var pageView = this._pages[i];
274 var label = this._pageLabels && this._pageLabels[i];
275 pageView.setPageLabel(label);
276 }
277 }
278 }, {
279 key: '_resetView',
280 value: function _resetView() {
281 this._pages = [];
282 this._currentPageNumber = 1;
283 this._currentScale = _ui_utils.UNKNOWN_SCALE;
284 this._currentScaleValue = null;
285 this._pageLabels = null;
286 this._buffer = new PDFPageViewBuffer(DEFAULT_CACHE_SIZE);
287 this._location = null;
288 this._pagesRotation = 0;
289 this._pagesRequests = [];
290 this._pageViewsReady = false;
291 this.viewer.textContent = '';
292 }
293 }, {
294 key: '_scrollUpdate',
295 value: function _scrollUpdate() {
296 if (this.pagesCount === 0) {
297 return;
298 }
299 this.update();
300 }
301 }, {
302 key: '_scrollIntoView',
303 value: function _scrollIntoView(_ref) {
304 var pageDiv = _ref.pageDiv,
305 _ref$pageSpot = _ref.pageSpot,
306 pageSpot = _ref$pageSpot === undefined ? null : _ref$pageSpot,
307 _ref$pageNumber = _ref.pageNumber,
308 pageNumber = _ref$pageNumber === undefined ? null : _ref$pageNumber;
309
310 throw new Error('Not implemented: _scrollIntoView');
311 }
312 }, {
313 key: '_setScaleDispatchEvent',
314 value: function _setScaleDispatchEvent(newScale, newValue) {
315 var preset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
316
317 var arg = {
318 source: this,
319 scale: newScale,
320 presetValue: preset ? newValue : undefined
321 };
322 this.eventBus.dispatch('scalechanging', arg);
323 this.eventBus.dispatch('scalechange', arg);
324 }
325 }, {
326 key: '_setScaleUpdatePages',
327 value: function _setScaleUpdatePages(newScale, newValue) {
328 var noScroll = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
329 var preset = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
330
331 this._currentScaleValue = newValue.toString();
332 if (isSameScale(this._currentScale, newScale)) {
333 if (preset) {
334 this._setScaleDispatchEvent(newScale, newValue, true);
335 }
336 return;
337 }
338 for (var i = 0, ii = this._pages.length; i < ii; i++) {
339 this._pages[i].update(newScale);
340 }
341 this._currentScale = newScale;
342 if (!noScroll) {
343 var page = this._currentPageNumber,
344 dest = void 0;
345 if (this._location && !(this.isInPresentationMode || this.isChangingPresentationMode)) {
346 page = this._location.pageNumber;
347 dest = [null, { name: 'XYZ' }, this._location.left, this._location.top, null];
348 }
349 this.scrollPageIntoView({
350 pageNumber: page,
351 destArray: dest,
352 allowNegativeOffset: true
353 });
354 }
355 this._setScaleDispatchEvent(newScale, newValue, preset);
356 if (this.defaultRenderingQueue) {
357 this.update();
358 }
359 }
360 }, {
361 key: '_setScale',
362 value: function _setScale(value) {
363 var noScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
364
365 var scale = parseFloat(value);
366 if (scale > 0) {
367 this._setScaleUpdatePages(scale, value, noScroll, false);
368 } else {
369 var currentPage = this._pages[this._currentPageNumber - 1];
370 if (!currentPage) {
371 return;
372 }
373 var hPadding = this.isInPresentationMode || this.removePageBorders ? 0 : _ui_utils.SCROLLBAR_PADDING;
374 var vPadding = this.isInPresentationMode || this.removePageBorders ? 0 : _ui_utils.VERTICAL_PADDING;
375 var pageWidthScale = (this.container.clientWidth - hPadding) / currentPage.width * currentPage.scale;
376 var pageHeightScale = (this.container.clientHeight - vPadding) / currentPage.height * currentPage.scale;
377 switch (value) {
378 case 'page-actual':
379 scale = 1;
380 break;
381 case 'page-width':
382 scale = pageWidthScale;
383 break;
384 case 'page-height':
385 scale = pageHeightScale;
386 break;
387 case 'page-fit':
388 scale = Math.min(pageWidthScale, pageHeightScale);
389 break;
390 case 'auto':
391 var horizontalScale = (0, _ui_utils.isPortraitOrientation)(currentPage) ? pageWidthScale : Math.min(pageHeightScale, pageWidthScale);
392 scale = Math.min(_ui_utils.MAX_AUTO_SCALE, horizontalScale);
393 break;
394 default:
395 console.error(this._name + '._setScale: "' + value + '" is an unknown zoom value.');
396 return;
397 }
398 this._setScaleUpdatePages(scale, value, noScroll, true);
399 }
400 }
401 }, {
402 key: '_resetCurrentPageView',
403 value: function _resetCurrentPageView() {
404 if (this.isInPresentationMode) {
405 this._setScale(this._currentScaleValue, true);
406 }
407 var pageView = this._pages[this._currentPageNumber - 1];
408 this._scrollIntoView({ pageDiv: pageView.div });
409 }
410 }, {
411 key: 'scrollPageIntoView',
412 value: function scrollPageIntoView(params) {
413 if (!this.pdfDocument) {
414 return;
415 }
416 var pageNumber = params.pageNumber || 0;
417 var dest = params.destArray || null;
418 var allowNegativeOffset = params.allowNegativeOffset || false;
419 if (this.isInPresentationMode || !dest) {
420 this._setCurrentPageNumber(pageNumber, true);
421 return;
422 }
423 var pageView = this._pages[pageNumber - 1];
424 if (!pageView) {
425 console.error(this._name + '.scrollPageIntoView: Invalid "pageNumber" parameter.');
426 return;
427 }
428 var x = 0,
429 y = 0;
430 var width = 0,
431 height = 0,
432 widthScale = void 0,
433 heightScale = void 0;
434 var changeOrientation = pageView.rotation % 180 === 0 ? false : true;
435 var pageWidth = (changeOrientation ? pageView.height : pageView.width) / pageView.scale / _ui_utils.CSS_UNITS;
436 var pageHeight = (changeOrientation ? pageView.width : pageView.height) / pageView.scale / _ui_utils.CSS_UNITS;
437 var scale = 0;
438 switch (dest[1].name) {
439 case 'XYZ':
440 x = dest[2];
441 y = dest[3];
442 scale = dest[4];
443 x = x !== null ? x : 0;
444 y = y !== null ? y : pageHeight;
445 break;
446 case 'Fit':
447 case 'FitB':
448 scale = 'page-fit';
449 break;
450 case 'FitH':
451 case 'FitBH':
452 y = dest[2];
453 scale = 'page-width';
454 if (y === null && this._location) {
455 x = this._location.left;
456 y = this._location.top;
457 }
458 break;
459 case 'FitV':
460 case 'FitBV':
461 x = dest[2];
462 width = pageWidth;
463 height = pageHeight;
464 scale = 'page-height';
465 break;
466 case 'FitR':
467 x = dest[2];
468 y = dest[3];
469 width = dest[4] - x;
470 height = dest[5] - y;
471 var hPadding = this.removePageBorders ? 0 : _ui_utils.SCROLLBAR_PADDING;
472 var vPadding = this.removePageBorders ? 0 : _ui_utils.VERTICAL_PADDING;
473 widthScale = (this.container.clientWidth - hPadding) / width / _ui_utils.CSS_UNITS;
474 heightScale = (this.container.clientHeight - vPadding) / height / _ui_utils.CSS_UNITS;
475 scale = Math.min(Math.abs(widthScale), Math.abs(heightScale));
476 break;
477 default:
478 console.error(this._name + '.scrollPageIntoView: "' + dest[1].name + '" ' + 'is not a valid destination type.');
479 return;
480 }
481 if (scale && scale !== this._currentScale) {
482 this.currentScaleValue = scale;
483 } else if (this._currentScale === _ui_utils.UNKNOWN_SCALE) {
484 this.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE;
485 }
486 if (scale === 'page-fit' && !dest[4]) {
487 this._scrollIntoView({
488 pageDiv: pageView.div,
489 pageNumber: pageNumber
490 });
491 return;
492 }
493 var boundingRect = [pageView.viewport.convertToViewportPoint(x, y), pageView.viewport.convertToViewportPoint(x + width, y + height)];
494 var left = Math.min(boundingRect[0][0], boundingRect[1][0]);
495 var top = Math.min(boundingRect[0][1], boundingRect[1][1]);
496 if (!allowNegativeOffset) {
497 left = Math.max(left, 0);
498 top = Math.max(top, 0);
499 }
500 this._scrollIntoView({
501 pageDiv: pageView.div,
502 pageSpot: {
503 left: left,
504 top: top
505 },
506 pageNumber: pageNumber
507 });
508 }
509 }, {
510 key: '_resizeBuffer',
511 value: function _resizeBuffer(numVisiblePages) {
512 var suggestedCacheSize = Math.max(DEFAULT_CACHE_SIZE, 2 * numVisiblePages + 1);
513 this._buffer.resize(suggestedCacheSize);
514 }
515 }, {
516 key: '_updateLocation',
517 value: function _updateLocation(firstPage) {
518 var currentScale = this._currentScale;
519 var currentScaleValue = this._currentScaleValue;
520 var normalizedScaleValue = parseFloat(currentScaleValue) === currentScale ? Math.round(currentScale * 10000) / 100 : currentScaleValue;
521 var pageNumber = firstPage.id;
522 var pdfOpenParams = '#page=' + pageNumber;
523 pdfOpenParams += '&zoom=' + normalizedScaleValue;
524 var currentPageView = this._pages[pageNumber - 1];
525 var container = this.container;
526 var topLeft = currentPageView.getPagePoint(container.scrollLeft - firstPage.x, container.scrollTop - firstPage.y);
527 var intLeft = Math.round(topLeft[0]);
528 var intTop = Math.round(topLeft[1]);
529 pdfOpenParams += ',' + intLeft + ',' + intTop;
530 this._location = {
531 pageNumber: pageNumber,
532 scale: normalizedScaleValue,
533 top: intTop,
534 left: intLeft,
535 rotation: this._pagesRotation,
536 pdfOpenParams: pdfOpenParams
537 };
538 }
539 }, {
540 key: 'update',
541 value: function update() {
542 throw new Error('Not implemented: update');
543 }
544 }, {
545 key: 'containsElement',
546 value: function containsElement(element) {
547 return this.container.contains(element);
548 }
549 }, {
550 key: 'focus',
551 value: function focus() {
552 this.container.focus();
553 }
554 }, {
555 key: '_getVisiblePages',
556 value: function _getVisiblePages() {
557 throw new Error('Not implemented: _getVisiblePages');
558 }
559 }, {
560 key: 'cleanup',
561 value: function cleanup() {
562 for (var i = 0, ii = this._pages.length; i < ii; i++) {
563 if (this._pages[i] && this._pages[i].renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED) {
564 this._pages[i].reset();
565 }
566 }
567 }
568 }, {
569 key: '_cancelRendering',
570 value: function _cancelRendering() {
571 for (var i = 0, ii = this._pages.length; i < ii; i++) {
572 if (this._pages[i]) {
573 this._pages[i].cancelRendering();
574 }
575 }
576 }
577 }, {
578 key: '_ensurePdfPageLoaded',
579 value: function _ensurePdfPageLoaded(pageView) {
580 var _this2 = this;
581
582 if (pageView.pdfPage) {
583 return Promise.resolve(pageView.pdfPage);
584 }
585 var pageNumber = pageView.id;
586 if (this._pagesRequests[pageNumber]) {
587 return this._pagesRequests[pageNumber];
588 }
589 var promise = this.pdfDocument.getPage(pageNumber).then(function (pdfPage) {
590 if (!pageView.pdfPage) {
591 pageView.setPdfPage(pdfPage);
592 }
593 _this2._pagesRequests[pageNumber] = null;
594 return pdfPage;
595 }).catch(function (reason) {
596 console.error('Unable to get page for page view', reason);
597 _this2._pagesRequests[pageNumber] = null;
598 });
599 this._pagesRequests[pageNumber] = promise;
600 return promise;
601 }
602 }, {
603 key: 'forceRendering',
604 value: function forceRendering(currentlyVisiblePages) {
605 var _this3 = this;
606
607 var visiblePages = currentlyVisiblePages || this._getVisiblePages();
608 var pageView = this.renderingQueue.getHighestPriority(visiblePages, this._pages, this.scroll.down);
609 if (pageView) {
610 this._ensurePdfPageLoaded(pageView).then(function () {
611 _this3.renderingQueue.renderView(pageView);
612 });
613 return true;
614 }
615 return false;
616 }
617 }, {
618 key: 'getPageTextContent',
619 value: function getPageTextContent(pageIndex) {
620 return this.pdfDocument.getPage(pageIndex + 1).then(function (page) {
621 return page.getTextContent({ normalizeWhitespace: true });
622 });
623 }
624 }, {
625 key: 'createTextLayerBuilder',
626 value: function createTextLayerBuilder(textLayerDiv, pageIndex, viewport) {
627 var enhanceTextSelection = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
628
629 return new _text_layer_builder.TextLayerBuilder({
630 textLayerDiv: textLayerDiv,
631 eventBus: this.eventBus,
632 pageIndex: pageIndex,
633 viewport: viewport,
634 findController: this.isInPresentationMode ? null : this.findController,
635 enhanceTextSelection: this.isInPresentationMode ? false : enhanceTextSelection
636 });
637 }
638 }, {
639 key: 'createAnnotationLayerBuilder',
640 value: function createAnnotationLayerBuilder(pageDiv, pdfPage) {
641 var imageResourcesPath = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
642 var renderInteractiveForms = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
643 var l10n = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : _ui_utils.NullL10n;
644
645 return new _annotation_layer_builder.AnnotationLayerBuilder({
646 pageDiv: pageDiv,
647 pdfPage: pdfPage,
648 imageResourcesPath: imageResourcesPath,
649 renderInteractiveForms: renderInteractiveForms,
650 linkService: this.linkService,
651 downloadManager: this.downloadManager,
652 l10n: l10n
653 });
654 }
655 }, {
656 key: 'setFindController',
657 value: function setFindController(findController) {
658 this.findController = findController;
659 }
660 }, {
661 key: 'getPagesOverview',
662 value: function getPagesOverview() {
663 var pagesOverview = this._pages.map(function (pageView) {
664 var viewport = pageView.pdfPage.getViewport(1);
665 return {
666 width: viewport.width,
667 height: viewport.height,
668 rotation: viewport.rotation
669 };
670 });
671 if (!this.enablePrintAutoRotate) {
672 return pagesOverview;
673 }
674 var isFirstPagePortrait = (0, _ui_utils.isPortraitOrientation)(pagesOverview[0]);
675 return pagesOverview.map(function (size) {
676 if (isFirstPagePortrait === (0, _ui_utils.isPortraitOrientation)(size)) {
677 return size;
678 }
679 return {
680 width: size.height,
681 height: size.width,
682 rotation: (size.rotation + 90) % 360
683 };
684 });
685 }
686 }, {
687 key: 'pagesCount',
688 get: function get() {
689 return this._pages.length;
690 }
691 }, {
692 key: 'pageViewsReady',
693 get: function get() {
694 return this._pageViewsReady;
695 }
696 }, {
697 key: 'currentPageNumber',
698 get: function get() {
699 return this._currentPageNumber;
700 },
701 set: function set(val) {
702 if (!Number.isInteger(val)) {
703 throw new Error('Invalid page number.');
704 }
705 if (!this.pdfDocument) {
706 return;
707 }
708 this._setCurrentPageNumber(val, true);
709 }
710 }, {
711 key: 'currentPageLabel',
712 get: function get() {
713 return this._pageLabels && this._pageLabels[this._currentPageNumber - 1];
714 },
715 set: function set(val) {
716 var pageNumber = val | 0;
717 if (this._pageLabels) {
718 var i = this._pageLabels.indexOf(val);
719 if (i >= 0) {
720 pageNumber = i + 1;
721 }
722 }
723 this.currentPageNumber = pageNumber;
724 }
725 }, {
726 key: 'currentScale',
727 get: function get() {
728 return this._currentScale !== _ui_utils.UNKNOWN_SCALE ? this._currentScale : _ui_utils.DEFAULT_SCALE;
729 },
730 set: function set(val) {
731 if (isNaN(val)) {
732 throw new Error('Invalid numeric scale');
733 }
734 if (!this.pdfDocument) {
735 return;
736 }
737 this._setScale(val, false);
738 }
739 }, {
740 key: 'currentScaleValue',
741 get: function get() {
742 return this._currentScaleValue;
743 },
744 set: function set(val) {
745 if (!this.pdfDocument) {
746 return;
747 }
748 this._setScale(val, false);
749 }
750 }, {
751 key: 'pagesRotation',
752 get: function get() {
753 return this._pagesRotation;
754 },
755 set: function set(rotation) {
756 if (!(0, _ui_utils.isValidRotation)(rotation)) {
757 throw new Error('Invalid pages rotation angle.');
758 }
759 if (!this.pdfDocument) {
760 return;
761 }
762 if (this._pagesRotation === rotation) {
763 return;
764 }
765 this._pagesRotation = rotation;
766 var pageNumber = this._currentPageNumber;
767 for (var i = 0, ii = this._pages.length; i < ii; i++) {
768 var pageView = this._pages[i];
769 pageView.update(pageView.scale, rotation);
770 }
771 if (this._currentScaleValue) {
772 this._setScale(this._currentScaleValue, true);
773 }
774 this.eventBus.dispatch('rotationchanging', {
775 source: this,
776 pagesRotation: rotation,
777 pageNumber: pageNumber
778 });
779 if (this.defaultRenderingQueue) {
780 this.update();
781 }
782 }
783 }, {
784 key: '_setDocumentViewerElement',
785 get: function get() {
786 throw new Error('Not implemented: _setDocumentViewerElement');
787 }
788 }, {
789 key: 'isInPresentationMode',
790 get: function get() {
791 return this.presentationModeState === _ui_utils.PresentationModeState.FULLSCREEN;
792 }
793 }, {
794 key: 'isChangingPresentationMode',
795 get: function get() {
796 return this.presentationModeState === _ui_utils.PresentationModeState.CHANGING;
797 }
798 }, {
799 key: 'isHorizontalScrollbarEnabled',
800 get: function get() {
801 return this.isInPresentationMode ? false : this.container.scrollWidth > this.container.clientWidth;
802 }
803 }, {
804 key: 'hasEqualPageSizes',
805 get: function get() {
806 var firstPageView = this._pages[0];
807 for (var i = 1, ii = this._pages.length; i < ii; ++i) {
808 var pageView = this._pages[i];
809 if (pageView.width !== firstPageView.width || pageView.height !== firstPageView.height) {
810 return false;
811 }
812 }
813 return true;
814 }
815 }]);
816
817 return BaseViewer;
818}();
819
820exports.BaseViewer = BaseViewer;
\No newline at end of file