1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 | 'use strict';
|
23 |
|
24 | Object.defineProperty(exports, "__esModule", {
|
25 | value: true
|
26 | });
|
27 | exports.BaseViewer = undefined;
|
28 |
|
29 | var _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 |
|
31 | var _ui_utils = require('./ui_utils');
|
32 |
|
33 | var _pdf_rendering_queue = require('./pdf_rendering_queue');
|
34 |
|
35 | var _annotation_layer_builder = require('./annotation_layer_builder');
|
36 |
|
37 | var _pdf = require('../pdf');
|
38 |
|
39 | var _dom_events = require('./dom_events');
|
40 |
|
41 | var _pdf_page_view = require('./pdf_page_view');
|
42 |
|
43 | var _pdf_link_service = require('./pdf_link_service');
|
44 |
|
45 | var _text_layer_builder = require('./text_layer_builder');
|
46 |
|
47 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
48 |
|
49 | var DEFAULT_CACHE_SIZE = 10;
|
50 | function 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 | }
|
69 | function 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 |
|
79 | var 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 |
|
820 | exports.BaseViewer = BaseViewer; |
\ | No newline at end of file |