pdfjs-dist 2.1.266 → 2.5.207

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pdfjs-dist might be problematic. Click here for more details.

Files changed (191) hide show
  1. package/CODE_OF_CONDUCT.md +15 -0
  2. package/README.md +4 -0
  3. package/bower.json +1 -1
  4. package/build/pdf.js +8382 -18492
  5. package/build/pdf.js.map +1 -1
  6. package/build/pdf.min.js +22 -1
  7. package/build/pdf.worker.entry.js +5 -3
  8. package/build/pdf.worker.js +20417 -29816
  9. package/build/pdf.worker.js.map +1 -1
  10. package/build/pdf.worker.min.js +22 -1
  11. package/es5/build/pdf.js +25688 -0
  12. package/es5/build/pdf.js.map +1 -0
  13. package/{lib/shared/global_scope.js → es5/build/pdf.worker.entry.js} +5 -10
  14. package/es5/build/pdf.worker.js +58239 -0
  15. package/es5/build/pdf.worker.js.map +1 -0
  16. package/es5/web/images/annotation-check.svg +11 -0
  17. package/es5/web/images/annotation-comment.svg +16 -0
  18. package/es5/web/images/annotation-help.svg +26 -0
  19. package/es5/web/images/annotation-insert.svg +10 -0
  20. package/es5/web/images/annotation-key.svg +11 -0
  21. package/es5/web/images/annotation-newparagraph.svg +11 -0
  22. package/es5/web/images/annotation-noicon.svg +7 -0
  23. package/es5/web/images/annotation-note.svg +42 -0
  24. package/es5/web/images/annotation-paragraph.svg +16 -0
  25. package/es5/web/images/loading-icon.gif +0 -0
  26. package/es5/web/images/shadow.png +0 -0
  27. package/es5/web/images/texture.png +0 -0
  28. package/es5/web/pdf_viewer.css +403 -0
  29. package/es5/web/pdf_viewer.js +7742 -0
  30. package/es5/web/pdf_viewer.js.map +1 -0
  31. package/image_decoders/pdf.image_decoders.js +1475 -4897
  32. package/image_decoders/pdf.image_decoders.js.map +1 -1
  33. package/image_decoders/pdf.image_decoders.min.js +22 -1
  34. package/lib/README.md +7 -0
  35. package/lib/core/annotation.js +750 -899
  36. package/lib/core/arithmetic_decoder.js +81 -97
  37. package/lib/core/bidi.js +54 -46
  38. package/lib/core/ccitt.js +88 -81
  39. package/lib/core/ccitt_stream.js +15 -14
  40. package/lib/core/cff_parser.js +235 -183
  41. package/lib/core/charsets.js +4 -4
  42. package/lib/core/chunked_stream.js +447 -542
  43. package/lib/core/cmap.js +222 -264
  44. package/lib/core/colorspace.js +699 -863
  45. package/lib/core/core_utils.js +152 -0
  46. package/lib/core/crypto.js +379 -437
  47. package/lib/core/document.js +573 -660
  48. package/lib/core/encodings.js +15 -15
  49. package/lib/core/evaluator.js +1103 -868
  50. package/lib/core/font_renderer.js +135 -178
  51. package/lib/core/fonts.js +570 -491
  52. package/lib/core/function.js +291 -288
  53. package/lib/core/glyphlist.js +4527 -4526
  54. package/lib/core/image.js +145 -149
  55. package/lib/core/image_utils.js +170 -0
  56. package/lib/core/jbig2.js +325 -316
  57. package/lib/core/jbig2_stream.js +18 -17
  58. package/lib/core/jpeg_stream.js +21 -26
  59. package/lib/core/jpg.js +284 -232
  60. package/lib/core/jpx.js +161 -143
  61. package/lib/core/jpx_stream.js +28 -28
  62. package/lib/core/metrics.js +2929 -2929
  63. package/lib/core/murmurhash3.js +90 -101
  64. package/lib/core/obj.js +1183 -1157
  65. package/lib/core/operator_list.js +99 -67
  66. package/lib/core/parser.js +972 -911
  67. package/lib/core/pattern.js +87 -70
  68. package/lib/core/pdf_manager.js +150 -315
  69. package/lib/core/primitives.js +83 -56
  70. package/lib/core/ps_parser.js +175 -214
  71. package/lib/core/standard_fonts.js +237 -236
  72. package/lib/core/stream.js +94 -74
  73. package/lib/core/type1_parser.js +87 -69
  74. package/lib/core/unicode.js +1654 -1654
  75. package/lib/core/worker.js +193 -390
  76. package/lib/core/worker_stream.js +168 -0
  77. package/lib/display/annotation_layer.js +741 -972
  78. package/lib/display/api.js +1500 -1791
  79. package/lib/display/api_compatibility.js +12 -17
  80. package/lib/display/canvas.js +165 -165
  81. package/lib/display/content_disposition.js +40 -59
  82. package/lib/display/display_utils.js +515 -0
  83. package/lib/display/fetch_stream.js +183 -298
  84. package/lib/display/font_loader.js +273 -413
  85. package/lib/display/metadata.js +86 -98
  86. package/lib/display/network.js +266 -359
  87. package/lib/display/network_utils.js +25 -18
  88. package/lib/display/node_stream.js +285 -458
  89. package/lib/display/pattern_helper.js +113 -65
  90. package/lib/display/svg.js +1166 -901
  91. package/lib/display/text_layer.js +156 -132
  92. package/lib/display/transport_stream.js +262 -278
  93. package/lib/display/webgl.js +70 -83
  94. package/lib/display/worker_options.js +3 -3
  95. package/lib/display/xml_parser.js +303 -392
  96. package/lib/examples/node/domstubs.js +40 -37
  97. package/lib/pdf.js +226 -59
  98. package/lib/pdf.worker.js +14 -6
  99. package/lib/shared/compatibility.js +3 -246
  100. package/lib/shared/is_node.js +7 -6
  101. package/lib/shared/message_handler.js +327 -332
  102. package/lib/shared/util.js +266 -416
  103. package/lib/test/unit/annotation_spec.js +1555 -701
  104. package/lib/test/unit/api_spec.js +802 -604
  105. package/lib/test/unit/bidi_spec.js +7 -7
  106. package/lib/test/unit/cff_parser_spec.js +84 -69
  107. package/lib/test/unit/clitests_helper.js +7 -9
  108. package/lib/test/unit/cmap_spec.js +74 -76
  109. package/lib/test/unit/colorspace_spec.js +166 -161
  110. package/lib/test/unit/core_utils_spec.js +211 -0
  111. package/lib/test/unit/crypto_spec.js +181 -181
  112. package/lib/test/unit/custom_spec.js +20 -22
  113. package/lib/test/unit/display_svg_spec.js +34 -39
  114. package/lib/test/unit/display_utils_spec.js +263 -0
  115. package/lib/test/unit/document_spec.js +16 -21
  116. package/lib/test/unit/encodings_spec.js +12 -34
  117. package/lib/test/unit/evaluator_spec.js +83 -83
  118. package/lib/test/unit/fetch_stream_spec.js +111 -0
  119. package/lib/test/unit/function_spec.js +206 -204
  120. package/lib/test/unit/jasmine-boot.js +46 -30
  121. package/lib/test/unit/message_handler_spec.js +173 -159
  122. package/lib/test/unit/metadata_spec.js +69 -69
  123. package/lib/test/unit/murmurhash3_spec.js +12 -12
  124. package/lib/test/unit/network_spec.js +13 -61
  125. package/lib/test/unit/network_utils_spec.js +183 -119
  126. package/lib/test/unit/node_stream_spec.js +78 -92
  127. package/lib/test/unit/parser_spec.js +172 -114
  128. package/lib/test/unit/pdf_find_controller_spec.js +55 -86
  129. package/lib/test/unit/pdf_find_utils_spec.js +32 -32
  130. package/lib/test/unit/pdf_history_spec.js +32 -32
  131. package/lib/test/unit/primitives_spec.js +140 -125
  132. package/lib/test/unit/stream_spec.js +16 -14
  133. package/lib/test/unit/test_utils.js +131 -143
  134. package/lib/test/unit/testreporter.js +19 -19
  135. package/lib/test/unit/type1_parser_spec.js +42 -42
  136. package/lib/test/unit/ui_utils_spec.js +297 -459
  137. package/lib/test/unit/unicode_spec.js +38 -38
  138. package/lib/test/unit/util_spec.js +121 -305
  139. package/lib/web/annotation_layer_builder.js +66 -103
  140. package/lib/web/app.js +1328 -1214
  141. package/lib/web/app_options.js +105 -107
  142. package/lib/web/base_viewer.js +824 -838
  143. package/lib/web/chromecom.js +165 -252
  144. package/lib/web/debugger.js +149 -205
  145. package/lib/web/download_manager.js +39 -55
  146. package/lib/web/firefox_print_service.js +37 -27
  147. package/lib/web/firefoxcom.js +212 -363
  148. package/lib/web/genericcom.js +26 -108
  149. package/lib/web/genericl10n.js +24 -153
  150. package/lib/web/grab_to_pan.js +32 -30
  151. package/lib/web/interfaces.js +80 -254
  152. package/lib/web/overlay_manager.js +70 -246
  153. package/lib/web/password_prompt.js +38 -64
  154. package/lib/web/pdf_attachment_viewer.js +113 -131
  155. package/lib/web/pdf_cursor_tools.js +75 -102
  156. package/lib/web/pdf_document_properties.js +221 -306
  157. package/lib/web/pdf_find_bar.js +136 -170
  158. package/lib/web/pdf_find_controller.js +491 -548
  159. package/lib/web/pdf_find_utils.js +13 -13
  160. package/lib/web/pdf_history.js +397 -406
  161. package/lib/web/pdf_link_service.js +304 -348
  162. package/lib/web/pdf_outline_viewer.js +140 -175
  163. package/lib/web/pdf_page_view.js +452 -523
  164. package/lib/web/pdf_presentation_mode.js +308 -357
  165. package/lib/web/pdf_print_service.js +90 -104
  166. package/lib/web/pdf_rendering_queue.js +84 -108
  167. package/lib/web/pdf_sidebar.js +276 -306
  168. package/lib/web/pdf_sidebar_resizer.js +92 -119
  169. package/lib/web/pdf_single_page_viewer.js +77 -126
  170. package/lib/web/pdf_thumbnail_view.js +276 -297
  171. package/lib/web/pdf_thumbnail_viewer.js +186 -206
  172. package/lib/web/pdf_viewer.component.js +20 -21
  173. package/lib/web/pdf_viewer.js +55 -115
  174. package/lib/web/preferences.js +82 -286
  175. package/lib/web/secondary_toolbar.js +164 -196
  176. package/lib/web/text_layer_builder.js +282 -339
  177. package/lib/web/toolbar.js +217 -210
  178. package/lib/web/ui_utils.js +267 -420
  179. package/lib/web/view_history.js +52 -226
  180. package/lib/web/viewer_compatibility.js +21 -6
  181. package/package.json +2 -9
  182. package/web/pdf_viewer.css +35 -25
  183. package/web/pdf_viewer.js +3489 -4855
  184. package/web/pdf_viewer.js.map +1 -1
  185. package/webpack.js +14 -5
  186. package/external/streams/streams-lib.js +0 -3962
  187. package/external/url/url-lib.js +0 -627
  188. package/lib/display/dom_utils.js +0 -494
  189. package/lib/shared/streams_polyfill.js +0 -43
  190. package/lib/shared/url_polyfill.js +0 -56
  191. package/lib/test/unit/dom_utils_spec.js +0 -89
@@ -2,7 +2,7 @@
2
2
  * @licstart The following is the entire license notice for the
3
3
  * Javascript code in this page
4
4
  *
5
- * Copyright 2018 Mozilla Foundation
5
+ * Copyright 2020 Mozilla Foundation
6
6
  *
7
7
  * Licensed under the Apache License, Version 2.0 (the "License");
8
8
  * you may not use this file except in compliance with the License.
@@ -26,33 +26,27 @@ Object.defineProperty(exports, "__esModule", {
26
26
  });
27
27
  exports.BaseViewer = void 0;
28
28
 
29
- var _ui_utils = require("./ui_utils");
29
+ var _ui_utils = require("./ui_utils.js");
30
30
 
31
- var _pdf_rendering_queue = require("./pdf_rendering_queue");
31
+ var _pdf_rendering_queue = require("./pdf_rendering_queue.js");
32
32
 
33
- var _annotation_layer_builder = require("./annotation_layer_builder");
33
+ var _annotation_layer_builder = require("./annotation_layer_builder.js");
34
34
 
35
35
  var _pdf = require("../pdf");
36
36
 
37
- var _pdf_page_view = require("./pdf_page_view");
37
+ var _pdf_page_view = require("./pdf_page_view.js");
38
38
 
39
- var _pdf_link_service = require("./pdf_link_service");
39
+ var _pdf_link_service = require("./pdf_link_service.js");
40
40
 
41
- var _text_layer_builder = require("./text_layer_builder");
41
+ var _text_layer_builder = require("./text_layer_builder.js");
42
42
 
43
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
44
-
45
- 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); } }
46
-
47
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
48
-
49
- var DEFAULT_CACHE_SIZE = 10;
43
+ const DEFAULT_CACHE_SIZE = 10;
50
44
 
51
45
  function PDFPageViewBuffer(size) {
52
- var data = [];
46
+ const data = [];
53
47
 
54
48
  this.push = function (view) {
55
- var i = data.indexOf(view);
49
+ const i = data.indexOf(view);
56
50
 
57
51
  if (i >= 0) {
58
52
  data.splice(i, 1);
@@ -69,9 +63,9 @@ function PDFPageViewBuffer(size) {
69
63
  size = newSize;
70
64
 
71
65
  if (pagesToKeep) {
72
- var pageIdsToKeep = new Set();
66
+ const pageIdsToKeep = new Set();
73
67
 
74
- for (var i = 0, iMax = pagesToKeep.length; i < iMax; ++i) {
68
+ for (let i = 0, iMax = pagesToKeep.length; i < iMax; ++i) {
75
69
  pageIdsToKeep.add(pagesToKeep[i].id);
76
70
  }
77
71
 
@@ -98,28 +92,22 @@ function isSameScale(oldScale, newScale) {
98
92
  return false;
99
93
  }
100
94
 
101
- var BaseViewer =
102
- /*#__PURE__*/
103
- function () {
104
- function BaseViewer(options) {
105
- var _this = this;
106
-
107
- _classCallCheck(this, BaseViewer);
108
-
95
+ class BaseViewer {
96
+ constructor(options) {
109
97
  if (this.constructor === BaseViewer) {
110
- throw new Error('Cannot initialize BaseViewer.');
98
+ throw new Error("Cannot initialize BaseViewer.");
111
99
  }
112
100
 
113
101
  this._name = this.constructor.name;
114
102
  this.container = options.container;
115
103
  this.viewer = options.viewer || options.container.firstElementChild;
116
- this.eventBus = options.eventBus || (0, _ui_utils.getGlobalEventBus)();
104
+ this.eventBus = options.eventBus;
117
105
  this.linkService = options.linkService || new _pdf_link_service.SimpleLinkService();
118
106
  this.downloadManager = options.downloadManager || null;
119
107
  this.findController = options.findController || null;
120
108
  this.removePageBorders = options.removePageBorders || false;
121
109
  this.textLayerMode = Number.isInteger(options.textLayerMode) ? options.textLayerMode : _ui_utils.TextLayerMode.ENABLE;
122
- this.imageResourcesPath = options.imageResourcesPath || '';
110
+ this.imageResourcesPath = options.imageResourcesPath || "";
123
111
  this.renderInteractiveForms = options.renderInteractiveForms || false;
124
112
  this.enablePrintAutoRotate = options.enablePrintAutoRotate || false;
125
113
  this.renderer = options.renderer || _ui_utils.RendererType.CANVAS;
@@ -138,1012 +126,1010 @@ function () {
138
126
 
139
127
  this.scroll = (0, _ui_utils.watchScroll)(this.container, this._scrollUpdate.bind(this));
140
128
  this.presentationModeState = _ui_utils.PresentationModeState.UNKNOWN;
129
+ this._onBeforeDraw = this._onAfterDraw = null;
141
130
 
142
131
  this._resetView();
143
132
 
144
133
  if (this.removePageBorders) {
145
- this.viewer.classList.add('removePageBorders');
134
+ this.viewer.classList.add("removePageBorders");
146
135
  }
147
136
 
148
- Promise.resolve().then(function () {
149
- _this.eventBus.dispatch('baseviewerinit', {
150
- source: _this
137
+ Promise.resolve().then(() => {
138
+ this.eventBus.dispatch("baseviewerinit", {
139
+ source: this
151
140
  });
152
141
  });
153
142
  }
154
143
 
155
- _createClass(BaseViewer, [{
156
- key: "getPageView",
157
- value: function getPageView(index) {
158
- return this._pages[index];
144
+ get pagesCount() {
145
+ return this._pages.length;
146
+ }
147
+
148
+ getPageView(index) {
149
+ return this._pages[index];
150
+ }
151
+
152
+ get pageViewsReady() {
153
+ if (!this._pagesCapability.settled) {
154
+ return false;
159
155
  }
160
- }, {
161
- key: "_setCurrentPageNumber",
162
- value: function _setCurrentPageNumber(val) {
163
- var resetCurrentPageView = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
164
156
 
165
- if (this._currentPageNumber === val) {
166
- if (resetCurrentPageView) {
167
- this._resetCurrentPageView();
168
- }
157
+ return this._pages.every(function (pageView) {
158
+ return pageView && pageView.pdfPage;
159
+ });
160
+ }
169
161
 
170
- return true;
171
- }
162
+ get currentPageNumber() {
163
+ return this._currentPageNumber;
164
+ }
172
165
 
173
- if (!(0 < val && val <= this.pagesCount)) {
174
- return false;
175
- }
166
+ set currentPageNumber(val) {
167
+ if (!Number.isInteger(val)) {
168
+ throw new Error("Invalid page number.");
169
+ }
176
170
 
177
- this._currentPageNumber = val;
178
- this.eventBus.dispatch('pagechanging', {
179
- source: this,
180
- pageNumber: val,
181
- pageLabel: this._pageLabels && this._pageLabels[val - 1]
182
- });
171
+ if (!this.pdfDocument) {
172
+ return;
173
+ }
174
+
175
+ if (!this._setCurrentPageNumber(val, true)) {
176
+ console.error(`${this._name}.currentPageNumber: "${val}" is not a valid page.`);
177
+ }
178
+ }
183
179
 
180
+ _setCurrentPageNumber(val, resetCurrentPageView = false) {
181
+ if (this._currentPageNumber === val) {
184
182
  if (resetCurrentPageView) {
185
183
  this._resetCurrentPageView();
186
184
  }
187
185
 
188
186
  return true;
189
187
  }
190
- }, {
191
- key: "setDocument",
192
- value: function setDocument(pdfDocument) {
193
- var _this2 = this;
194
188
 
195
- if (this.pdfDocument) {
196
- this._cancelRendering();
189
+ if (!(0 < val && val <= this.pagesCount)) {
190
+ return false;
191
+ }
197
192
 
198
- this._resetView();
193
+ this._currentPageNumber = val;
194
+ this.eventBus.dispatch("pagechanging", {
195
+ source: this,
196
+ pageNumber: val,
197
+ pageLabel: this._pageLabels && this._pageLabels[val - 1]
198
+ });
199
199
 
200
- if (this.findController) {
201
- this.findController.setDocument(null);
202
- }
203
- }
200
+ if (resetCurrentPageView) {
201
+ this._resetCurrentPageView();
202
+ }
204
203
 
205
- this.pdfDocument = pdfDocument;
204
+ return true;
205
+ }
206
206
 
207
- if (!pdfDocument) {
208
- return;
207
+ get currentPageLabel() {
208
+ return this._pageLabels && this._pageLabels[this._currentPageNumber - 1];
209
+ }
210
+
211
+ set currentPageLabel(val) {
212
+ if (!this.pdfDocument) {
213
+ return;
214
+ }
215
+
216
+ let page = val | 0;
217
+
218
+ if (this._pageLabels) {
219
+ const i = this._pageLabels.indexOf(val);
220
+
221
+ if (i >= 0) {
222
+ page = i + 1;
209
223
  }
224
+ }
210
225
 
211
- var pagesCount = pdfDocument.numPages;
212
- var pagesCapability = (0, _pdf.createPromiseCapability)();
213
- this.pagesPromise = pagesCapability.promise;
214
- pagesCapability.promise.then(function () {
215
- _this2._pageViewsReady = true;
226
+ if (!this._setCurrentPageNumber(page, true)) {
227
+ console.error(`${this._name}.currentPageLabel: "${val}" is not a valid page.`);
228
+ }
229
+ }
216
230
 
217
- _this2.eventBus.dispatch('pagesloaded', {
218
- source: _this2,
219
- pagesCount: pagesCount
220
- });
221
- });
222
- var onePageRenderedCapability = (0, _pdf.createPromiseCapability)();
223
- this.onePageRendered = onePageRenderedCapability.promise;
224
-
225
- var bindOnAfterAndBeforeDraw = function bindOnAfterAndBeforeDraw(pageView) {
226
- pageView.onBeforeDraw = function () {
227
- _this2._buffer.push(pageView);
228
- };
229
-
230
- pageView.onAfterDraw = function () {
231
- if (!onePageRenderedCapability.settled) {
232
- onePageRenderedCapability.resolve();
233
- }
234
- };
235
- };
231
+ get currentScale() {
232
+ return this._currentScale !== _ui_utils.UNKNOWN_SCALE ? this._currentScale : _ui_utils.DEFAULT_SCALE;
233
+ }
236
234
 
237
- var firstPagePromise = pdfDocument.getPage(1);
238
- this.firstPagePromise = firstPagePromise;
239
- firstPagePromise.then(function (pdfPage) {
240
- var scale = _this2.currentScale;
241
- var viewport = pdfPage.getViewport({
242
- scale: scale * _ui_utils.CSS_UNITS
243
- });
235
+ set currentScale(val) {
236
+ if (isNaN(val)) {
237
+ throw new Error("Invalid numeric scale.");
238
+ }
244
239
 
245
- for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) {
246
- var textLayerFactory = null;
247
-
248
- if (_this2.textLayerMode !== _ui_utils.TextLayerMode.DISABLE) {
249
- textLayerFactory = _this2;
250
- }
251
-
252
- var pageView = new _pdf_page_view.PDFPageView({
253
- container: _this2._setDocumentViewerElement,
254
- eventBus: _this2.eventBus,
255
- id: pageNum,
256
- scale: scale,
257
- defaultViewport: viewport.clone(),
258
- renderingQueue: _this2.renderingQueue,
259
- textLayerFactory: textLayerFactory,
260
- textLayerMode: _this2.textLayerMode,
261
- annotationLayerFactory: _this2,
262
- imageResourcesPath: _this2.imageResourcesPath,
263
- renderInteractiveForms: _this2.renderInteractiveForms,
264
- renderer: _this2.renderer,
265
- enableWebGL: _this2.enableWebGL,
266
- useOnlyCssZoom: _this2.useOnlyCssZoom,
267
- maxCanvasPixels: _this2.maxCanvasPixels,
268
- l10n: _this2.l10n
269
- });
270
- bindOnAfterAndBeforeDraw(pageView);
240
+ if (!this.pdfDocument) {
241
+ return;
242
+ }
271
243
 
272
- _this2._pages.push(pageView);
273
- }
244
+ this._setScale(val, false);
245
+ }
274
246
 
275
- if (_this2._spreadMode !== _ui_utils.SpreadMode.NONE) {
276
- _this2._updateSpreadMode();
277
- }
247
+ get currentScaleValue() {
248
+ return this._currentScaleValue;
249
+ }
278
250
 
279
- onePageRenderedCapability.promise.then(function () {
280
- if (pdfDocument.loadingParams['disableAutoFetch']) {
281
- pagesCapability.resolve();
282
- return;
283
- }
251
+ set currentScaleValue(val) {
252
+ if (!this.pdfDocument) {
253
+ return;
254
+ }
284
255
 
285
- var getPagesLeft = pagesCount;
256
+ this._setScale(val, false);
257
+ }
286
258
 
287
- var _loop = function _loop(_pageNum) {
288
- pdfDocument.getPage(_pageNum).then(function (pdfPage) {
289
- var pageView = _this2._pages[_pageNum - 1];
259
+ get pagesRotation() {
260
+ return this._pagesRotation;
261
+ }
290
262
 
291
- if (!pageView.pdfPage) {
292
- pageView.setPdfPage(pdfPage);
293
- }
263
+ set pagesRotation(rotation) {
264
+ if (!(0, _ui_utils.isValidRotation)(rotation)) {
265
+ throw new Error("Invalid pages rotation angle.");
266
+ }
294
267
 
295
- _this2.linkService.cachePageRef(_pageNum, pdfPage.ref);
268
+ if (!this.pdfDocument) {
269
+ return;
270
+ }
296
271
 
297
- if (--getPagesLeft === 0) {
298
- pagesCapability.resolve();
299
- }
300
- }, function (reason) {
301
- console.error("Unable to get page ".concat(_pageNum, " to initialize viewer"), reason);
272
+ if (this._pagesRotation === rotation) {
273
+ return;
274
+ }
302
275
 
303
- if (--getPagesLeft === 0) {
304
- pagesCapability.resolve();
305
- }
306
- });
307
- };
276
+ this._pagesRotation = rotation;
277
+ const pageNumber = this._currentPageNumber;
308
278
 
309
- for (var _pageNum = 1; _pageNum <= pagesCount; ++_pageNum) {
310
- _loop(_pageNum);
311
- }
312
- });
279
+ for (let i = 0, ii = this._pages.length; i < ii; i++) {
280
+ const pageView = this._pages[i];
281
+ pageView.update(pageView.scale, rotation);
282
+ }
313
283
 
314
- _this2.eventBus.dispatch('pagesinit', {
315
- source: _this2
316
- });
284
+ if (this._currentScaleValue) {
285
+ this._setScale(this._currentScaleValue, true);
286
+ }
317
287
 
318
- if (_this2.findController) {
319
- _this2.findController.setDocument(pdfDocument);
320
- }
288
+ this.eventBus.dispatch("rotationchanging", {
289
+ source: this,
290
+ pagesRotation: rotation,
291
+ pageNumber
292
+ });
321
293
 
322
- if (_this2.defaultRenderingQueue) {
323
- _this2.update();
324
- }
325
- }).catch(function (reason) {
326
- console.error('Unable to initialize viewer', reason);
327
- });
294
+ if (this.defaultRenderingQueue) {
295
+ this.update();
328
296
  }
329
- }, {
330
- key: "setPageLabels",
331
- value: function setPageLabels(labels) {
332
- if (!this.pdfDocument) {
333
- return;
334
- }
297
+ }
335
298
 
336
- if (!labels) {
337
- this._pageLabels = null;
338
- } else if (!(Array.isArray(labels) && this.pdfDocument.numPages === labels.length)) {
339
- this._pageLabels = null;
340
- console.error("".concat(this._name, ".setPageLabels: Invalid page labels."));
341
- } else {
342
- this._pageLabels = labels;
343
- }
299
+ get firstPagePromise() {
300
+ return this.pdfDocument ? this._firstPageCapability.promise : null;
301
+ }
344
302
 
345
- for (var i = 0, ii = this._pages.length; i < ii; i++) {
346
- var pageView = this._pages[i];
347
- var label = this._pageLabels && this._pageLabels[i];
348
- pageView.setPageLabel(label);
349
- }
303
+ get onePageRendered() {
304
+ return this.pdfDocument ? this._onePageRenderedCapability.promise : null;
305
+ }
306
+
307
+ get pagesPromise() {
308
+ return this.pdfDocument ? this._pagesCapability.promise : null;
309
+ }
310
+
311
+ get _viewerElement() {
312
+ throw new Error("Not implemented: _viewerElement");
313
+ }
314
+
315
+ _onePageRenderedOrForceFetch() {
316
+ if (!this.container.offsetParent || this._getVisiblePages().views.length === 0) {
317
+ return Promise.resolve();
350
318
  }
351
- }, {
352
- key: "_resetView",
353
- value: function _resetView() {
354
- this._pages = [];
355
- this._currentPageNumber = 1;
356
- this._currentScale = _ui_utils.UNKNOWN_SCALE;
357
- this._currentScaleValue = null;
358
- this._pageLabels = null;
359
- this._buffer = new PDFPageViewBuffer(DEFAULT_CACHE_SIZE);
360
- this._location = null;
361
- this._pagesRotation = 0;
362
- this._pagesRequests = [];
363
- this._pageViewsReady = false;
364
- this._scrollMode = _ui_utils.ScrollMode.VERTICAL;
365
- this._spreadMode = _ui_utils.SpreadMode.NONE;
366
- this.viewer.textContent = '';
367
-
368
- this._updateScrollMode();
369
- }
370
- }, {
371
- key: "_scrollUpdate",
372
- value: function _scrollUpdate() {
373
- if (this.pagesCount === 0) {
374
- return;
319
+
320
+ return this._onePageRenderedCapability.promise;
321
+ }
322
+
323
+ setDocument(pdfDocument) {
324
+ if (this.pdfDocument) {
325
+ this._cancelRendering();
326
+
327
+ this._resetView();
328
+
329
+ if (this.findController) {
330
+ this.findController.setDocument(null);
375
331
  }
332
+ }
376
333
 
377
- this.update();
334
+ this.pdfDocument = pdfDocument;
335
+
336
+ if (!pdfDocument) {
337
+ return;
378
338
  }
379
- }, {
380
- key: "_scrollIntoView",
381
- value: function _scrollIntoView(_ref) {
382
- var pageDiv = _ref.pageDiv,
383
- _ref$pageSpot = _ref.pageSpot,
384
- pageSpot = _ref$pageSpot === void 0 ? null : _ref$pageSpot,
385
- _ref$pageNumber = _ref.pageNumber,
386
- pageNumber = _ref$pageNumber === void 0 ? null : _ref$pageNumber;
387
- (0, _ui_utils.scrollIntoView)(pageDiv, pageSpot);
388
- }
389
- }, {
390
- key: "_setScaleUpdatePages",
391
- value: function _setScaleUpdatePages(newScale, newValue) {
392
- var noScroll = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
393
- var preset = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
394
- this._currentScaleValue = newValue.toString();
395
-
396
- if (isSameScale(this._currentScale, newScale)) {
397
- if (preset) {
398
- this.eventBus.dispatch('scalechanging', {
399
- source: this,
400
- scale: newScale,
401
- presetValue: newValue
402
- });
403
- }
404
339
 
340
+ const pagesCount = pdfDocument.numPages;
341
+ const firstPagePromise = pdfDocument.getPage(1);
342
+
343
+ this._pagesCapability.promise.then(() => {
344
+ this.eventBus.dispatch("pagesloaded", {
345
+ source: this,
346
+ pagesCount
347
+ });
348
+ });
349
+
350
+ this._onBeforeDraw = evt => {
351
+ const pageView = this._pages[evt.pageNumber - 1];
352
+
353
+ if (!pageView) {
405
354
  return;
406
355
  }
407
356
 
408
- for (var i = 0, ii = this._pages.length; i < ii; i++) {
409
- this._pages[i].update(newScale);
357
+ this._buffer.push(pageView);
358
+ };
359
+
360
+ this.eventBus._on("pagerender", this._onBeforeDraw);
361
+
362
+ this._onAfterDraw = evt => {
363
+ if (evt.cssTransform || this._onePageRenderedCapability.settled) {
364
+ return;
410
365
  }
411
366
 
412
- this._currentScale = newScale;
367
+ this._onePageRenderedCapability.resolve();
413
368
 
414
- if (!noScroll) {
415
- var page = this._currentPageNumber,
416
- dest;
369
+ this.eventBus._off("pagerendered", this._onAfterDraw);
417
370
 
418
- if (this._location && !(this.isInPresentationMode || this.isChangingPresentationMode)) {
419
- page = this._location.pageNumber;
420
- dest = [null, {
421
- name: 'XYZ'
422
- }, this._location.left, this._location.top, null];
423
- }
371
+ this._onAfterDraw = null;
372
+ };
373
+
374
+ this.eventBus._on("pagerendered", this._onAfterDraw);
424
375
 
425
- this.scrollPageIntoView({
426
- pageNumber: page,
427
- destArray: dest,
428
- allowNegativeOffset: true
376
+ firstPagePromise.then(firstPdfPage => {
377
+ this._firstPageCapability.resolve(firstPdfPage);
378
+
379
+ const scale = this.currentScale;
380
+ const viewport = firstPdfPage.getViewport({
381
+ scale: scale * _ui_utils.CSS_UNITS
382
+ });
383
+ const textLayerFactory = this.textLayerMode !== _ui_utils.TextLayerMode.DISABLE ? this : null;
384
+
385
+ for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) {
386
+ const pageView = new _pdf_page_view.PDFPageView({
387
+ container: this._viewerElement,
388
+ eventBus: this.eventBus,
389
+ id: pageNum,
390
+ scale,
391
+ defaultViewport: viewport.clone(),
392
+ renderingQueue: this.renderingQueue,
393
+ textLayerFactory,
394
+ textLayerMode: this.textLayerMode,
395
+ annotationLayerFactory: this,
396
+ imageResourcesPath: this.imageResourcesPath,
397
+ renderInteractiveForms: this.renderInteractiveForms,
398
+ renderer: this.renderer,
399
+ enableWebGL: this.enableWebGL,
400
+ useOnlyCssZoom: this.useOnlyCssZoom,
401
+ maxCanvasPixels: this.maxCanvasPixels,
402
+ l10n: this.l10n
429
403
  });
404
+
405
+ this._pages.push(pageView);
430
406
  }
431
407
 
432
- this.eventBus.dispatch('scalechanging', {
433
- source: this,
434
- scale: newScale,
435
- presetValue: preset ? newValue : undefined
436
- });
408
+ const firstPageView = this._pages[0];
437
409
 
438
- if (this.defaultRenderingQueue) {
439
- this.update();
410
+ if (firstPageView) {
411
+ firstPageView.setPdfPage(firstPdfPage);
412
+ this.linkService.cachePageRef(1, firstPdfPage.ref);
440
413
  }
441
- }
442
- }, {
443
- key: "_setScale",
444
- value: function _setScale(value) {
445
- var noScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
446
- var scale = parseFloat(value);
447
414
 
448
- if (scale > 0) {
449
- this._setScaleUpdatePages(scale, value, noScroll, false);
450
- } else {
451
- var currentPage = this._pages[this._currentPageNumber - 1];
415
+ if (this._spreadMode !== _ui_utils.SpreadMode.NONE) {
416
+ this._updateSpreadMode();
417
+ }
452
418
 
453
- if (!currentPage) {
454
- return;
419
+ this._onePageRenderedOrForceFetch().then(() => {
420
+ if (this.findController) {
421
+ this.findController.setDocument(pdfDocument);
455
422
  }
456
423
 
457
- var noPadding = this.isInPresentationMode || this.removePageBorders;
458
- var hPadding = noPadding ? 0 : _ui_utils.SCROLLBAR_PADDING;
459
- var vPadding = noPadding ? 0 : _ui_utils.VERTICAL_PADDING;
424
+ if (pdfDocument.loadingParams.disableAutoFetch || pagesCount > 7500) {
425
+ this._pagesCapability.resolve();
460
426
 
461
- if (!noPadding && this._isScrollModeHorizontal) {
462
- var _ref2 = [vPadding, hPadding];
463
- hPadding = _ref2[0];
464
- vPadding = _ref2[1];
427
+ return;
465
428
  }
466
429
 
467
- var pageWidthScale = (this.container.clientWidth - hPadding) / currentPage.width * currentPage.scale;
468
- var pageHeightScale = (this.container.clientHeight - vPadding) / currentPage.height * currentPage.scale;
430
+ let getPagesLeft = pagesCount - 1;
469
431
 
470
- switch (value) {
471
- case 'page-actual':
472
- scale = 1;
473
- break;
432
+ if (getPagesLeft <= 0) {
433
+ this._pagesCapability.resolve();
434
+
435
+ return;
436
+ }
474
437
 
475
- case 'page-width':
476
- scale = pageWidthScale;
477
- break;
438
+ for (let pageNum = 2; pageNum <= pagesCount; ++pageNum) {
439
+ pdfDocument.getPage(pageNum).then(pdfPage => {
440
+ const pageView = this._pages[pageNum - 1];
478
441
 
479
- case 'page-height':
480
- scale = pageHeightScale;
481
- break;
442
+ if (!pageView.pdfPage) {
443
+ pageView.setPdfPage(pdfPage);
444
+ }
482
445
 
483
- case 'page-fit':
484
- scale = Math.min(pageWidthScale, pageHeightScale);
485
- break;
446
+ this.linkService.cachePageRef(pageNum, pdfPage.ref);
486
447
 
487
- case 'auto':
488
- var horizontalScale = (0, _ui_utils.isPortraitOrientation)(currentPage) ? pageWidthScale : Math.min(pageHeightScale, pageWidthScale);
489
- scale = Math.min(_ui_utils.MAX_AUTO_SCALE, horizontalScale);
490
- break;
448
+ if (--getPagesLeft === 0) {
449
+ this._pagesCapability.resolve();
450
+ }
451
+ }, reason => {
452
+ console.error(`Unable to get page ${pageNum} to initialize viewer`, reason);
491
453
 
492
- default:
493
- console.error("".concat(this._name, "._setScale: \"").concat(value, "\" is an unknown zoom value."));
494
- return;
454
+ if (--getPagesLeft === 0) {
455
+ this._pagesCapability.resolve();
456
+ }
457
+ });
495
458
  }
459
+ });
460
+
461
+ this.eventBus.dispatch("pagesinit", {
462
+ source: this
463
+ });
496
464
 
497
- this._setScaleUpdatePages(scale, value, noScroll, true);
465
+ if (this.defaultRenderingQueue) {
466
+ this.update();
498
467
  }
468
+ }).catch(reason => {
469
+ console.error("Unable to initialize viewer", reason);
470
+ });
471
+ }
472
+
473
+ setPageLabels(labels) {
474
+ if (!this.pdfDocument) {
475
+ return;
476
+ }
477
+
478
+ if (!labels) {
479
+ this._pageLabels = null;
480
+ } else if (!(Array.isArray(labels) && this.pdfDocument.numPages === labels.length)) {
481
+ this._pageLabels = null;
482
+ console.error(`${this._name}.setPageLabels: Invalid page labels.`);
483
+ } else {
484
+ this._pageLabels = labels;
485
+ }
486
+
487
+ for (let i = 0, ii = this._pages.length; i < ii; i++) {
488
+ const pageView = this._pages[i];
489
+ const label = this._pageLabels && this._pageLabels[i];
490
+ pageView.setPageLabel(label);
491
+ }
492
+ }
493
+
494
+ _resetView() {
495
+ this._pages = [];
496
+ this._currentPageNumber = 1;
497
+ this._currentScale = _ui_utils.UNKNOWN_SCALE;
498
+ this._currentScaleValue = null;
499
+ this._pageLabels = null;
500
+ this._buffer = new PDFPageViewBuffer(DEFAULT_CACHE_SIZE);
501
+ this._location = null;
502
+ this._pagesRotation = 0;
503
+ this._pagesRequests = new WeakMap();
504
+ this._firstPageCapability = (0, _pdf.createPromiseCapability)();
505
+ this._onePageRenderedCapability = (0, _pdf.createPromiseCapability)();
506
+ this._pagesCapability = (0, _pdf.createPromiseCapability)();
507
+ this._scrollMode = _ui_utils.ScrollMode.VERTICAL;
508
+ this._spreadMode = _ui_utils.SpreadMode.NONE;
509
+
510
+ if (this._onBeforeDraw) {
511
+ this.eventBus._off("pagerender", this._onBeforeDraw);
512
+
513
+ this._onBeforeDraw = null;
514
+ }
515
+
516
+ if (this._onAfterDraw) {
517
+ this.eventBus._off("pagerendered", this._onAfterDraw);
518
+
519
+ this._onAfterDraw = null;
499
520
  }
500
- }, {
501
- key: "_resetCurrentPageView",
502
- value: function _resetCurrentPageView() {
503
- if (this.isInPresentationMode) {
504
- this._setScale(this._currentScaleValue, true);
521
+
522
+ this.viewer.textContent = "";
523
+
524
+ this._updateScrollMode();
525
+ }
526
+
527
+ _scrollUpdate() {
528
+ if (this.pagesCount === 0) {
529
+ return;
530
+ }
531
+
532
+ this.update();
533
+ }
534
+
535
+ _scrollIntoView({
536
+ pageDiv,
537
+ pageSpot = null,
538
+ pageNumber = null
539
+ }) {
540
+ (0, _ui_utils.scrollIntoView)(pageDiv, pageSpot);
541
+ }
542
+
543
+ _setScaleUpdatePages(newScale, newValue, noScroll = false, preset = false) {
544
+ this._currentScaleValue = newValue.toString();
545
+
546
+ if (isSameScale(this._currentScale, newScale)) {
547
+ if (preset) {
548
+ this.eventBus.dispatch("scalechanging", {
549
+ source: this,
550
+ scale: newScale,
551
+ presetValue: newValue
552
+ });
505
553
  }
506
554
 
507
- var pageView = this._pages[this._currentPageNumber - 1];
555
+ return;
556
+ }
508
557
 
509
- this._scrollIntoView({
510
- pageDiv: pageView.div
511
- });
558
+ for (let i = 0, ii = this._pages.length; i < ii; i++) {
559
+ this._pages[i].update(newScale);
512
560
  }
513
- }, {
514
- key: "scrollPageIntoView",
515
- value: function scrollPageIntoView(_ref3) {
516
- var pageNumber = _ref3.pageNumber,
517
- _ref3$destArray = _ref3.destArray,
518
- destArray = _ref3$destArray === void 0 ? null : _ref3$destArray,
519
- _ref3$allowNegativeOf = _ref3.allowNegativeOffset,
520
- allowNegativeOffset = _ref3$allowNegativeOf === void 0 ? false : _ref3$allowNegativeOf;
521
561
 
522
- if (!this.pdfDocument) {
523
- return;
562
+ this._currentScale = newScale;
563
+
564
+ if (!noScroll) {
565
+ let page = this._currentPageNumber,
566
+ dest;
567
+
568
+ if (this._location && !(this.isInPresentationMode || this.isChangingPresentationMode)) {
569
+ page = this._location.pageNumber;
570
+ dest = [null, {
571
+ name: "XYZ"
572
+ }, this._location.left, this._location.top, null];
524
573
  }
525
574
 
526
- var pageView = Number.isInteger(pageNumber) && this._pages[pageNumber - 1];
575
+ this.scrollPageIntoView({
576
+ pageNumber: page,
577
+ destArray: dest,
578
+ allowNegativeOffset: true
579
+ });
580
+ }
581
+
582
+ this.eventBus.dispatch("scalechanging", {
583
+ source: this,
584
+ scale: newScale,
585
+ presetValue: preset ? newValue : undefined
586
+ });
527
587
 
528
- if (!pageView) {
529
- console.error("".concat(this._name, ".scrollPageIntoView: ") + "\"".concat(pageNumber, "\" is not a valid pageNumber parameter."));
588
+ if (this.defaultRenderingQueue) {
589
+ this.update();
590
+ }
591
+ }
592
+
593
+ _setScale(value, noScroll = false) {
594
+ let scale = parseFloat(value);
595
+
596
+ if (scale > 0) {
597
+ this._setScaleUpdatePages(scale, value, noScroll, false);
598
+ } else {
599
+ const currentPage = this._pages[this._currentPageNumber - 1];
600
+
601
+ if (!currentPage) {
530
602
  return;
531
603
  }
532
604
 
533
- if (this.isInPresentationMode || !destArray) {
534
- this._setCurrentPageNumber(pageNumber, true);
605
+ const noPadding = this.isInPresentationMode || this.removePageBorders;
606
+ let hPadding = noPadding ? 0 : _ui_utils.SCROLLBAR_PADDING;
607
+ let vPadding = noPadding ? 0 : _ui_utils.VERTICAL_PADDING;
535
608
 
536
- return;
609
+ if (!noPadding && this._isScrollModeHorizontal) {
610
+ [hPadding, vPadding] = [vPadding, hPadding];
537
611
  }
538
612
 
539
- var x = 0,
540
- y = 0;
541
- var width = 0,
542
- height = 0,
543
- widthScale,
544
- heightScale;
545
- var changeOrientation = pageView.rotation % 180 === 0 ? false : true;
546
- var pageWidth = (changeOrientation ? pageView.height : pageView.width) / pageView.scale / _ui_utils.CSS_UNITS;
547
- var pageHeight = (changeOrientation ? pageView.width : pageView.height) / pageView.scale / _ui_utils.CSS_UNITS;
548
- var scale = 0;
549
-
550
- switch (destArray[1].name) {
551
- case 'XYZ':
552
- x = destArray[2];
553
- y = destArray[3];
554
- scale = destArray[4];
555
- x = x !== null ? x : 0;
556
- y = y !== null ? y : pageHeight;
557
- break;
613
+ const pageWidthScale = (this.container.clientWidth - hPadding) / currentPage.width * currentPage.scale;
614
+ const pageHeightScale = (this.container.clientHeight - vPadding) / currentPage.height * currentPage.scale;
558
615
 
559
- case 'Fit':
560
- case 'FitB':
561
- scale = 'page-fit';
616
+ switch (value) {
617
+ case "page-actual":
618
+ scale = 1;
562
619
  break;
563
620
 
564
- case 'FitH':
565
- case 'FitBH':
566
- y = destArray[2];
567
- scale = 'page-width';
568
-
569
- if (y === null && this._location) {
570
- x = this._location.left;
571
- y = this._location.top;
572
- }
621
+ case "page-width":
622
+ scale = pageWidthScale;
623
+ break;
573
624
 
625
+ case "page-height":
626
+ scale = pageHeightScale;
574
627
  break;
575
628
 
576
- case 'FitV':
577
- case 'FitBV':
578
- x = destArray[2];
579
- width = pageWidth;
580
- height = pageHeight;
581
- scale = 'page-height';
629
+ case "page-fit":
630
+ scale = Math.min(pageWidthScale, pageHeightScale);
582
631
  break;
583
632
 
584
- case 'FitR':
585
- x = destArray[2];
586
- y = destArray[3];
587
- width = destArray[4] - x;
588
- height = destArray[5] - y;
589
- var hPadding = this.removePageBorders ? 0 : _ui_utils.SCROLLBAR_PADDING;
590
- var vPadding = this.removePageBorders ? 0 : _ui_utils.VERTICAL_PADDING;
591
- widthScale = (this.container.clientWidth - hPadding) / width / _ui_utils.CSS_UNITS;
592
- heightScale = (this.container.clientHeight - vPadding) / height / _ui_utils.CSS_UNITS;
593
- scale = Math.min(Math.abs(widthScale), Math.abs(heightScale));
633
+ case "auto":
634
+ const horizontalScale = (0, _ui_utils.isPortraitOrientation)(currentPage) ? pageWidthScale : Math.min(pageHeightScale, pageWidthScale);
635
+ scale = Math.min(_ui_utils.MAX_AUTO_SCALE, horizontalScale);
594
636
  break;
595
637
 
596
638
  default:
597
- console.error("".concat(this._name, ".scrollPageIntoView: ") + "\"".concat(destArray[1].name, "\" is not a valid destination type."));
639
+ console.error(`${this._name}._setScale: "${value}" is an unknown zoom value.`);
598
640
  return;
599
641
  }
600
642
 
601
- if (scale && scale !== this._currentScale) {
602
- this.currentScaleValue = scale;
603
- } else if (this._currentScale === _ui_utils.UNKNOWN_SCALE) {
604
- this.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE;
605
- }
643
+ this._setScaleUpdatePages(scale, value, noScroll, true);
644
+ }
645
+ }
606
646
 
607
- if (scale === 'page-fit' && !destArray[4]) {
608
- this._scrollIntoView({
609
- pageDiv: pageView.div,
610
- pageNumber: pageNumber
611
- });
647
+ _resetCurrentPageView() {
648
+ if (this.isInPresentationMode) {
649
+ this._setScale(this._currentScaleValue, true);
650
+ }
612
651
 
613
- return;
614
- }
652
+ const pageView = this._pages[this._currentPageNumber - 1];
653
+
654
+ this._scrollIntoView({
655
+ pageDiv: pageView.div
656
+ });
657
+ }
615
658
 
616
- var boundingRect = [pageView.viewport.convertToViewportPoint(x, y), pageView.viewport.convertToViewportPoint(x + width, y + height)];
617
- var left = Math.min(boundingRect[0][0], boundingRect[1][0]);
618
- var top = Math.min(boundingRect[0][1], boundingRect[1][1]);
659
+ scrollPageIntoView({
660
+ pageNumber,
661
+ destArray = null,
662
+ allowNegativeOffset = false,
663
+ ignoreDestinationZoom = false
664
+ }) {
665
+ if (!this.pdfDocument) {
666
+ return;
667
+ }
619
668
 
620
- if (!allowNegativeOffset) {
621
- left = Math.max(left, 0);
622
- top = Math.max(top, 0);
669
+ const pageView = Number.isInteger(pageNumber) && this._pages[pageNumber - 1];
670
+
671
+ if (!pageView) {
672
+ console.error(`${this._name}.scrollPageIntoView: ` + `"${pageNumber}" is not a valid pageNumber parameter.`);
673
+ return;
674
+ }
675
+
676
+ if (this.isInPresentationMode || !destArray) {
677
+ this._setCurrentPageNumber(pageNumber, true);
678
+
679
+ return;
680
+ }
681
+
682
+ let x = 0,
683
+ y = 0;
684
+ let width = 0,
685
+ height = 0,
686
+ widthScale,
687
+ heightScale;
688
+ const changeOrientation = pageView.rotation % 180 !== 0;
689
+ const pageWidth = (changeOrientation ? pageView.height : pageView.width) / pageView.scale / _ui_utils.CSS_UNITS;
690
+ const pageHeight = (changeOrientation ? pageView.width : pageView.height) / pageView.scale / _ui_utils.CSS_UNITS;
691
+ let scale = 0;
692
+
693
+ switch (destArray[1].name) {
694
+ case "XYZ":
695
+ x = destArray[2];
696
+ y = destArray[3];
697
+ scale = destArray[4];
698
+ x = x !== null ? x : 0;
699
+ y = y !== null ? y : pageHeight;
700
+ break;
701
+
702
+ case "Fit":
703
+ case "FitB":
704
+ scale = "page-fit";
705
+ break;
706
+
707
+ case "FitH":
708
+ case "FitBH":
709
+ y = destArray[2];
710
+ scale = "page-width";
711
+
712
+ if (y === null && this._location) {
713
+ x = this._location.left;
714
+ y = this._location.top;
715
+ }
716
+
717
+ break;
718
+
719
+ case "FitV":
720
+ case "FitBV":
721
+ x = destArray[2];
722
+ width = pageWidth;
723
+ height = pageHeight;
724
+ scale = "page-height";
725
+ break;
726
+
727
+ case "FitR":
728
+ x = destArray[2];
729
+ y = destArray[3];
730
+ width = destArray[4] - x;
731
+ height = destArray[5] - y;
732
+ const hPadding = this.removePageBorders ? 0 : _ui_utils.SCROLLBAR_PADDING;
733
+ const vPadding = this.removePageBorders ? 0 : _ui_utils.VERTICAL_PADDING;
734
+ widthScale = (this.container.clientWidth - hPadding) / width / _ui_utils.CSS_UNITS;
735
+ heightScale = (this.container.clientHeight - vPadding) / height / _ui_utils.CSS_UNITS;
736
+ scale = Math.min(Math.abs(widthScale), Math.abs(heightScale));
737
+ break;
738
+
739
+ default:
740
+ console.error(`${this._name}.scrollPageIntoView: ` + `"${destArray[1].name}" is not a valid destination type.`);
741
+ return;
742
+ }
743
+
744
+ if (!ignoreDestinationZoom) {
745
+ if (scale && scale !== this._currentScale) {
746
+ this.currentScaleValue = scale;
747
+ } else if (this._currentScale === _ui_utils.UNKNOWN_SCALE) {
748
+ this.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE;
623
749
  }
750
+ }
624
751
 
752
+ if (scale === "page-fit" && !destArray[4]) {
625
753
  this._scrollIntoView({
626
754
  pageDiv: pageView.div,
627
- pageSpot: {
628
- left: left,
629
- top: top
630
- },
631
- pageNumber: pageNumber
755
+ pageNumber
632
756
  });
757
+
758
+ return;
633
759
  }
634
- }, {
635
- key: "_updateLocation",
636
- value: function _updateLocation(firstPage) {
637
- var currentScale = this._currentScale;
638
- var currentScaleValue = this._currentScaleValue;
639
- var normalizedScaleValue = parseFloat(currentScaleValue) === currentScale ? Math.round(currentScale * 10000) / 100 : currentScaleValue;
640
- var pageNumber = firstPage.id;
641
- var pdfOpenParams = '#page=' + pageNumber;
642
- pdfOpenParams += '&zoom=' + normalizedScaleValue;
643
- var currentPageView = this._pages[pageNumber - 1];
644
- var container = this.container;
645
- var topLeft = currentPageView.getPagePoint(container.scrollLeft - firstPage.x, container.scrollTop - firstPage.y);
646
- var intLeft = Math.round(topLeft[0]);
647
- var intTop = Math.round(topLeft[1]);
648
- pdfOpenParams += ',' + intLeft + ',' + intTop;
649
- this._location = {
650
- pageNumber: pageNumber,
651
- scale: normalizedScaleValue,
652
- top: intTop,
653
- left: intLeft,
654
- rotation: this._pagesRotation,
655
- pdfOpenParams: pdfOpenParams
656
- };
657
- }
658
- }, {
659
- key: "_updateHelper",
660
- value: function _updateHelper(visiblePages) {
661
- throw new Error('Not implemented: _updateHelper');
662
- }
663
- }, {
664
- key: "update",
665
- value: function update() {
666
- var visible = this._getVisiblePages();
667
760
 
668
- var visiblePages = visible.views,
669
- numVisiblePages = visiblePages.length;
761
+ const boundingRect = [pageView.viewport.convertToViewportPoint(x, y), pageView.viewport.convertToViewportPoint(x + width, y + height)];
762
+ let left = Math.min(boundingRect[0][0], boundingRect[1][0]);
763
+ let top = Math.min(boundingRect[0][1], boundingRect[1][1]);
670
764
 
671
- if (numVisiblePages === 0) {
672
- return;
673
- }
765
+ if (!allowNegativeOffset) {
766
+ left = Math.max(left, 0);
767
+ top = Math.max(top, 0);
768
+ }
674
769
 
675
- var newCacheSize = Math.max(DEFAULT_CACHE_SIZE, 2 * numVisiblePages + 1);
770
+ this._scrollIntoView({
771
+ pageDiv: pageView.div,
772
+ pageSpot: {
773
+ left,
774
+ top
775
+ },
776
+ pageNumber
777
+ });
778
+ }
676
779
 
677
- this._buffer.resize(newCacheSize, visiblePages);
780
+ _updateLocation(firstPage) {
781
+ const currentScale = this._currentScale;
782
+ const currentScaleValue = this._currentScaleValue;
783
+ const normalizedScaleValue = parseFloat(currentScaleValue) === currentScale ? Math.round(currentScale * 10000) / 100 : currentScaleValue;
784
+ const pageNumber = firstPage.id;
785
+ let pdfOpenParams = "#page=" + pageNumber;
786
+ pdfOpenParams += "&zoom=" + normalizedScaleValue;
787
+ const currentPageView = this._pages[pageNumber - 1];
788
+ const container = this.container;
789
+ const topLeft = currentPageView.getPagePoint(container.scrollLeft - firstPage.x, container.scrollTop - firstPage.y);
790
+ const intLeft = Math.round(topLeft[0]);
791
+ const intTop = Math.round(topLeft[1]);
792
+ pdfOpenParams += "," + intLeft + "," + intTop;
793
+ this._location = {
794
+ pageNumber,
795
+ scale: normalizedScaleValue,
796
+ top: intTop,
797
+ left: intLeft,
798
+ rotation: this._pagesRotation,
799
+ pdfOpenParams
800
+ };
801
+ }
678
802
 
679
- this.renderingQueue.renderHighestPriority(visible);
803
+ _updateHelper(visiblePages) {
804
+ throw new Error("Not implemented: _updateHelper");
805
+ }
680
806
 
681
- this._updateHelper(visiblePages);
807
+ update() {
808
+ const visible = this._getVisiblePages();
682
809
 
683
- this._updateLocation(visible.first);
810
+ const visiblePages = visible.views,
811
+ numVisiblePages = visiblePages.length;
684
812
 
685
- this.eventBus.dispatch('updateviewarea', {
686
- source: this,
687
- location: this._location
688
- });
813
+ if (numVisiblePages === 0) {
814
+ return;
689
815
  }
690
- }, {
691
- key: "containsElement",
692
- value: function containsElement(element) {
693
- return this.container.contains(element);
694
- }
695
- }, {
696
- key: "focus",
697
- value: function focus() {
698
- this.container.focus();
699
- }
700
- }, {
701
- key: "_getCurrentVisiblePage",
702
- value: function _getCurrentVisiblePage() {
703
- if (!this.pagesCount) {
704
- return {
705
- views: []
706
- };
707
- }
708
816
 
709
- var pageView = this._pages[this._currentPageNumber - 1];
710
- var element = pageView.div;
711
- var view = {
712
- id: pageView.id,
713
- x: element.offsetLeft + element.clientLeft,
714
- y: element.offsetTop + element.clientTop,
715
- view: pageView
716
- };
717
- return {
718
- first: view,
719
- last: view,
720
- views: [view]
721
- };
722
- }
723
- }, {
724
- key: "_getVisiblePages",
725
- value: function _getVisiblePages() {
726
- return (0, _ui_utils.getVisibleElements)(this.container, this._pages, true, this._isScrollModeHorizontal);
727
- }
728
- }, {
729
- key: "isPageVisible",
730
- value: function isPageVisible(pageNumber) {
731
- if (!this.pdfDocument) {
732
- return false;
733
- }
817
+ const newCacheSize = Math.max(DEFAULT_CACHE_SIZE, 2 * numVisiblePages + 1);
734
818
 
735
- if (this.pageNumber < 1 || pageNumber > this.pagesCount) {
736
- console.error("".concat(this._name, ".isPageVisible: \"").concat(pageNumber, "\" is out of bounds."));
737
- return false;
738
- }
819
+ this._buffer.resize(newCacheSize, visiblePages);
739
820
 
740
- return this._getVisiblePages().views.some(function (view) {
741
- return view.id === pageNumber;
742
- });
743
- }
744
- }, {
745
- key: "cleanup",
746
- value: function cleanup() {
747
- for (var i = 0, ii = this._pages.length; i < ii; i++) {
748
- if (this._pages[i] && this._pages[i].renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED) {
749
- this._pages[i].reset();
750
- }
751
- }
752
- }
753
- }, {
754
- key: "_cancelRendering",
755
- value: function _cancelRendering() {
756
- for (var i = 0, ii = this._pages.length; i < ii; i++) {
757
- if (this._pages[i]) {
758
- this._pages[i].cancelRendering();
759
- }
760
- }
761
- }
762
- }, {
763
- key: "_ensurePdfPageLoaded",
764
- value: function _ensurePdfPageLoaded(pageView) {
765
- var _this3 = this;
821
+ this.renderingQueue.renderHighestPriority(visible);
766
822
 
767
- if (pageView.pdfPage) {
768
- return Promise.resolve(pageView.pdfPage);
769
- }
823
+ this._updateHelper(visiblePages);
770
824
 
771
- var pageNumber = pageView.id;
825
+ this._updateLocation(visible.first);
772
826
 
773
- if (this._pagesRequests[pageNumber]) {
774
- return this._pagesRequests[pageNumber];
775
- }
827
+ this.eventBus.dispatch("updateviewarea", {
828
+ source: this,
829
+ location: this._location
830
+ });
831
+ }
776
832
 
777
- var promise = this.pdfDocument.getPage(pageNumber).then(function (pdfPage) {
778
- if (!pageView.pdfPage) {
779
- pageView.setPdfPage(pdfPage);
780
- }
833
+ containsElement(element) {
834
+ return this.container.contains(element);
835
+ }
781
836
 
782
- _this3._pagesRequests[pageNumber] = null;
783
- return pdfPage;
784
- }).catch(function (reason) {
785
- console.error('Unable to get page for page view', reason);
786
- _this3._pagesRequests[pageNumber] = null;
787
- });
788
- this._pagesRequests[pageNumber] = promise;
789
- return promise;
790
- }
791
- }, {
792
- key: "forceRendering",
793
- value: function forceRendering(currentlyVisiblePages) {
794
- var _this4 = this;
837
+ focus() {
838
+ this.container.focus();
839
+ }
840
+
841
+ get _isScrollModeHorizontal() {
842
+ return this.isInPresentationMode ? false : this._scrollMode === _ui_utils.ScrollMode.HORIZONTAL;
843
+ }
795
844
 
796
- var visiblePages = currentlyVisiblePages || this._getVisiblePages();
845
+ get isInPresentationMode() {
846
+ return this.presentationModeState === _ui_utils.PresentationModeState.FULLSCREEN;
847
+ }
797
848
 
798
- var scrollAhead = this._isScrollModeHorizontal ? this.scroll.right : this.scroll.down;
799
- var pageView = this.renderingQueue.getHighestPriority(visiblePages, this._pages, scrollAhead);
849
+ get isChangingPresentationMode() {
850
+ return this.presentationModeState === _ui_utils.PresentationModeState.CHANGING;
851
+ }
800
852
 
801
- if (pageView) {
802
- this._ensurePdfPageLoaded(pageView).then(function () {
803
- _this4.renderingQueue.renderView(pageView);
804
- });
853
+ get isHorizontalScrollbarEnabled() {
854
+ return this.isInPresentationMode ? false : this.container.scrollWidth > this.container.clientWidth;
855
+ }
805
856
 
806
- return true;
807
- }
857
+ get isVerticalScrollbarEnabled() {
858
+ return this.isInPresentationMode ? false : this.container.scrollHeight > this.container.clientHeight;
859
+ }
860
+
861
+ _getCurrentVisiblePage() {
862
+ if (!this.pagesCount) {
863
+ return {
864
+ views: []
865
+ };
866
+ }
867
+
868
+ const pageView = this._pages[this._currentPageNumber - 1];
869
+ const element = pageView.div;
870
+ const view = {
871
+ id: pageView.id,
872
+ x: element.offsetLeft + element.clientLeft,
873
+ y: element.offsetTop + element.clientTop,
874
+ view: pageView
875
+ };
876
+ return {
877
+ first: view,
878
+ last: view,
879
+ views: [view]
880
+ };
881
+ }
808
882
 
883
+ _getVisiblePages() {
884
+ return (0, _ui_utils.getVisibleElements)(this.container, this._pages, true, this._isScrollModeHorizontal);
885
+ }
886
+
887
+ isPageVisible(pageNumber) {
888
+ if (!this.pdfDocument) {
809
889
  return false;
810
890
  }
811
- }, {
812
- key: "createTextLayerBuilder",
813
- value: function createTextLayerBuilder(textLayerDiv, pageIndex, viewport) {
814
- var enhanceTextSelection = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
815
- return new _text_layer_builder.TextLayerBuilder({
816
- textLayerDiv: textLayerDiv,
817
- eventBus: this.eventBus,
818
- pageIndex: pageIndex,
819
- viewport: viewport,
820
- findController: this.isInPresentationMode ? null : this.findController,
821
- enhanceTextSelection: this.isInPresentationMode ? false : enhanceTextSelection
822
- });
891
+
892
+ if (pageNumber < 1 || pageNumber > this.pagesCount) {
893
+ console.error(`${this._name}.isPageVisible: "${pageNumber}" is out of bounds.`);
894
+ return false;
823
895
  }
824
- }, {
825
- key: "createAnnotationLayerBuilder",
826
- value: function createAnnotationLayerBuilder(pageDiv, pdfPage) {
827
- var imageResourcesPath = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
828
- var renderInteractiveForms = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
829
- var l10n = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : _ui_utils.NullL10n;
830
- return new _annotation_layer_builder.AnnotationLayerBuilder({
831
- pageDiv: pageDiv,
832
- pdfPage: pdfPage,
833
- imageResourcesPath: imageResourcesPath,
834
- renderInteractiveForms: renderInteractiveForms,
835
- linkService: this.linkService,
836
- downloadManager: this.downloadManager,
837
- l10n: l10n
838
- });
896
+
897
+ return this._getVisiblePages().views.some(function (view) {
898
+ return view.id === pageNumber;
899
+ });
900
+ }
901
+
902
+ cleanup() {
903
+ for (let i = 0, ii = this._pages.length; i < ii; i++) {
904
+ if (this._pages[i] && this._pages[i].renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED) {
905
+ this._pages[i].reset();
906
+ }
839
907
  }
840
- }, {
841
- key: "getPagesOverview",
842
- value: function getPagesOverview() {
843
- var pagesOverview = this._pages.map(function (pageView) {
844
- var viewport = pageView.pdfPage.getViewport({
845
- scale: 1
846
- });
847
- return {
848
- width: viewport.width,
849
- height: viewport.height,
850
- rotation: viewport.rotation
851
- };
852
- });
908
+ }
853
909
 
854
- if (!this.enablePrintAutoRotate) {
855
- return pagesOverview;
910
+ _cancelRendering() {
911
+ for (let i = 0, ii = this._pages.length; i < ii; i++) {
912
+ if (this._pages[i]) {
913
+ this._pages[i].cancelRendering();
856
914
  }
915
+ }
916
+ }
857
917
 
858
- var isFirstPagePortrait = (0, _ui_utils.isPortraitOrientation)(pagesOverview[0]);
859
- return pagesOverview.map(function (size) {
860
- if (isFirstPagePortrait === (0, _ui_utils.isPortraitOrientation)(size)) {
861
- return size;
862
- }
918
+ _ensurePdfPageLoaded(pageView) {
919
+ if (pageView.pdfPage) {
920
+ return Promise.resolve(pageView.pdfPage);
921
+ }
863
922
 
864
- return {
865
- width: size.height,
866
- height: size.width,
867
- rotation: (size.rotation + 90) % 360
868
- };
869
- });
923
+ if (this._pagesRequests.has(pageView)) {
924
+ return this._pagesRequests.get(pageView);
870
925
  }
871
- }, {
872
- key: "_updateScrollMode",
873
- value: function _updateScrollMode() {
874
- var pageNumber = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
875
- var scrollMode = this._scrollMode,
876
- viewer = this.viewer;
877
- viewer.classList.toggle('scrollHorizontal', scrollMode === _ui_utils.ScrollMode.HORIZONTAL);
878
- viewer.classList.toggle('scrollWrapped', scrollMode === _ui_utils.ScrollMode.WRAPPED);
879
926
 
880
- if (!this.pdfDocument || !pageNumber) {
881
- return;
927
+ const promise = this.pdfDocument.getPage(pageView.id).then(pdfPage => {
928
+ if (!pageView.pdfPage) {
929
+ pageView.setPdfPage(pdfPage);
882
930
  }
883
931
 
884
- if (this._currentScaleValue && isNaN(this._currentScaleValue)) {
885
- this._setScale(this._currentScaleValue, true);
886
- }
932
+ this._pagesRequests.delete(pageView);
887
933
 
888
- this._setCurrentPageNumber(pageNumber, true);
934
+ return pdfPage;
935
+ }).catch(reason => {
936
+ console.error("Unable to get page for page view", reason);
889
937
 
890
- this.update();
891
- }
892
- }, {
893
- key: "_updateSpreadMode",
894
- value: function _updateSpreadMode() {
895
- var pageNumber = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
938
+ this._pagesRequests.delete(pageView);
939
+ });
896
940
 
897
- if (!this.pdfDocument) {
898
- return;
899
- }
941
+ this._pagesRequests.set(pageView, promise);
900
942
 
901
- var viewer = this.viewer,
902
- pages = this._pages;
903
- viewer.textContent = '';
943
+ return promise;
944
+ }
904
945
 
905
- if (this._spreadMode === _ui_utils.SpreadMode.NONE) {
906
- for (var i = 0, iMax = pages.length; i < iMax; ++i) {
907
- viewer.appendChild(pages[i].div);
908
- }
909
- } else {
910
- var parity = this._spreadMode - 1;
911
- var spread = null;
912
-
913
- for (var _i = 0, _iMax = pages.length; _i < _iMax; ++_i) {
914
- if (spread === null) {
915
- spread = document.createElement('div');
916
- spread.className = 'spread';
917
- viewer.appendChild(spread);
918
- } else if (_i % 2 === parity) {
919
- spread = spread.cloneNode(false);
920
- viewer.appendChild(spread);
921
- }
922
-
923
- spread.appendChild(pages[_i].div);
924
- }
925
- }
946
+ forceRendering(currentlyVisiblePages) {
947
+ const visiblePages = currentlyVisiblePages || this._getVisiblePages();
926
948
 
927
- if (!pageNumber) {
928
- return;
929
- }
949
+ const scrollAhead = this._isScrollModeHorizontal ? this.scroll.right : this.scroll.down;
950
+ const pageView = this.renderingQueue.getHighestPriority(visiblePages, this._pages, scrollAhead);
930
951
 
931
- this._setCurrentPageNumber(pageNumber, true);
952
+ if (pageView) {
953
+ this._ensurePdfPageLoaded(pageView).then(() => {
954
+ this.renderingQueue.renderView(pageView);
955
+ });
932
956
 
933
- this.update();
957
+ return true;
934
958
  }
935
- }, {
936
- key: "pagesCount",
937
- get: function get() {
938
- return this._pages.length;
939
- }
940
- }, {
941
- key: "pageViewsReady",
942
- get: function get() {
943
- return this._pageViewsReady;
944
- }
945
- }, {
946
- key: "currentPageNumber",
947
- get: function get() {
948
- return this._currentPageNumber;
949
- },
950
- set: function set(val) {
951
- if (!Number.isInteger(val)) {
952
- throw new Error('Invalid page number.');
953
- }
954
959
 
955
- if (!this.pdfDocument) {
956
- return;
957
- }
960
+ return false;
961
+ }
958
962
 
959
- if (!this._setCurrentPageNumber(val, true)) {
960
- console.error("".concat(this._name, ".currentPageNumber: \"").concat(val, "\" is not a valid page."));
961
- }
962
- }
963
- }, {
964
- key: "currentPageLabel",
965
- get: function get() {
966
- return this._pageLabels && this._pageLabels[this._currentPageNumber - 1];
967
- },
968
- set: function set(val) {
969
- if (!this.pdfDocument) {
970
- return;
971
- }
963
+ createTextLayerBuilder(textLayerDiv, pageIndex, viewport, enhanceTextSelection = false, eventBus) {
964
+ return new _text_layer_builder.TextLayerBuilder({
965
+ textLayerDiv,
966
+ eventBus,
967
+ pageIndex,
968
+ viewport,
969
+ findController: this.isInPresentationMode ? null : this.findController,
970
+ enhanceTextSelection: this.isInPresentationMode ? false : enhanceTextSelection
971
+ });
972
+ }
972
973
 
973
- var page = val | 0;
974
+ createAnnotationLayerBuilder(pageDiv, pdfPage, imageResourcesPath = "", renderInteractiveForms = false, l10n = _ui_utils.NullL10n) {
975
+ return new _annotation_layer_builder.AnnotationLayerBuilder({
976
+ pageDiv,
977
+ pdfPage,
978
+ imageResourcesPath,
979
+ renderInteractiveForms,
980
+ linkService: this.linkService,
981
+ downloadManager: this.downloadManager,
982
+ l10n
983
+ });
984
+ }
974
985
 
975
- if (this._pageLabels) {
976
- var i = this._pageLabels.indexOf(val);
986
+ get hasEqualPageSizes() {
987
+ const firstPageView = this._pages[0];
977
988
 
978
- if (i >= 0) {
979
- page = i + 1;
980
- }
981
- }
989
+ for (let i = 1, ii = this._pages.length; i < ii; ++i) {
990
+ const pageView = this._pages[i];
982
991
 
983
- if (!this._setCurrentPageNumber(page, true)) {
984
- console.error("".concat(this._name, ".currentPageLabel: \"").concat(val, "\" is not a valid page."));
992
+ if (pageView.width !== firstPageView.width || pageView.height !== firstPageView.height) {
993
+ return false;
985
994
  }
986
995
  }
987
- }, {
988
- key: "currentScale",
989
- get: function get() {
990
- return this._currentScale !== _ui_utils.UNKNOWN_SCALE ? this._currentScale : _ui_utils.DEFAULT_SCALE;
991
- },
992
- set: function set(val) {
993
- if (isNaN(val)) {
994
- throw new Error('Invalid numeric scale.');
995
- }
996
996
 
997
- if (!this.pdfDocument) {
998
- return;
999
- }
997
+ return true;
998
+ }
999
+
1000
+ getPagesOverview() {
1001
+ const pagesOverview = this._pages.map(function (pageView) {
1002
+ const viewport = pageView.pdfPage.getViewport({
1003
+ scale: 1
1004
+ });
1005
+ return {
1006
+ width: viewport.width,
1007
+ height: viewport.height,
1008
+ rotation: viewport.rotation
1009
+ };
1010
+ });
1000
1011
 
1001
- this._setScale(val, false);
1012
+ if (!this.enablePrintAutoRotate) {
1013
+ return pagesOverview;
1002
1014
  }
1003
- }, {
1004
- key: "currentScaleValue",
1005
- get: function get() {
1006
- return this._currentScaleValue;
1007
- },
1008
- set: function set(val) {
1009
- if (!this.pdfDocument) {
1010
- return;
1015
+
1016
+ const isFirstPagePortrait = (0, _ui_utils.isPortraitOrientation)(pagesOverview[0]);
1017
+ return pagesOverview.map(function (size) {
1018
+ if (isFirstPagePortrait === (0, _ui_utils.isPortraitOrientation)(size)) {
1019
+ return size;
1011
1020
  }
1012
1021
 
1013
- this._setScale(val, false);
1022
+ return {
1023
+ width: size.height,
1024
+ height: size.width,
1025
+ rotation: (size.rotation + 90) % 360
1026
+ };
1027
+ });
1028
+ }
1029
+
1030
+ get scrollMode() {
1031
+ return this._scrollMode;
1032
+ }
1033
+
1034
+ set scrollMode(mode) {
1035
+ if (this._scrollMode === mode) {
1036
+ return;
1014
1037
  }
1015
- }, {
1016
- key: "pagesRotation",
1017
- get: function get() {
1018
- return this._pagesRotation;
1019
- },
1020
- set: function set(rotation) {
1021
- if (!(0, _ui_utils.isValidRotation)(rotation)) {
1022
- throw new Error('Invalid pages rotation angle.');
1023
- }
1024
1038
 
1025
- if (!this.pdfDocument) {
1026
- return;
1027
- }
1039
+ if (!(0, _ui_utils.isValidScrollMode)(mode)) {
1040
+ throw new Error(`Invalid scroll mode: ${mode}`);
1041
+ }
1028
1042
 
1029
- if (this._pagesRotation === rotation) {
1030
- return;
1031
- }
1043
+ this._scrollMode = mode;
1044
+ this.eventBus.dispatch("scrollmodechanged", {
1045
+ source: this,
1046
+ mode
1047
+ });
1032
1048
 
1033
- this._pagesRotation = rotation;
1034
- var pageNumber = this._currentPageNumber;
1049
+ this._updateScrollMode(this._currentPageNumber);
1050
+ }
1035
1051
 
1036
- for (var i = 0, ii = this._pages.length; i < ii; i++) {
1037
- var pageView = this._pages[i];
1038
- pageView.update(pageView.scale, rotation);
1039
- }
1052
+ _updateScrollMode(pageNumber = null) {
1053
+ const scrollMode = this._scrollMode,
1054
+ viewer = this.viewer;
1055
+ viewer.classList.toggle("scrollHorizontal", scrollMode === _ui_utils.ScrollMode.HORIZONTAL);
1056
+ viewer.classList.toggle("scrollWrapped", scrollMode === _ui_utils.ScrollMode.WRAPPED);
1040
1057
 
1041
- if (this._currentScaleValue) {
1042
- this._setScale(this._currentScaleValue, true);
1043
- }
1058
+ if (!this.pdfDocument || !pageNumber) {
1059
+ return;
1060
+ }
1044
1061
 
1045
- this.eventBus.dispatch('rotationchanging', {
1046
- source: this,
1047
- pagesRotation: rotation,
1048
- pageNumber: pageNumber
1049
- });
1062
+ if (this._currentScaleValue && isNaN(this._currentScaleValue)) {
1063
+ this._setScale(this._currentScaleValue, true);
1064
+ }
1050
1065
 
1051
- if (this.defaultRenderingQueue) {
1052
- this.update();
1053
- }
1066
+ this._setCurrentPageNumber(pageNumber, true);
1067
+
1068
+ this.update();
1069
+ }
1070
+
1071
+ get spreadMode() {
1072
+ return this._spreadMode;
1073
+ }
1074
+
1075
+ set spreadMode(mode) {
1076
+ if (this._spreadMode === mode) {
1077
+ return;
1054
1078
  }
1055
- }, {
1056
- key: "_setDocumentViewerElement",
1057
- get: function get() {
1058
- throw new Error('Not implemented: _setDocumentViewerElement');
1059
- }
1060
- }, {
1061
- key: "_isScrollModeHorizontal",
1062
- get: function get() {
1063
- return this.isInPresentationMode ? false : this._scrollMode === _ui_utils.ScrollMode.HORIZONTAL;
1064
- }
1065
- }, {
1066
- key: "isInPresentationMode",
1067
- get: function get() {
1068
- return this.presentationModeState === _ui_utils.PresentationModeState.FULLSCREEN;
1069
- }
1070
- }, {
1071
- key: "isChangingPresentationMode",
1072
- get: function get() {
1073
- return this.presentationModeState === _ui_utils.PresentationModeState.CHANGING;
1074
- }
1075
- }, {
1076
- key: "isHorizontalScrollbarEnabled",
1077
- get: function get() {
1078
- return this.isInPresentationMode ? false : this.container.scrollWidth > this.container.clientWidth;
1079
- }
1080
- }, {
1081
- key: "isVerticalScrollbarEnabled",
1082
- get: function get() {
1083
- return this.isInPresentationMode ? false : this.container.scrollHeight > this.container.clientHeight;
1084
- }
1085
- }, {
1086
- key: "hasEqualPageSizes",
1087
- get: function get() {
1088
- var firstPageView = this._pages[0];
1089
-
1090
- for (var i = 1, ii = this._pages.length; i < ii; ++i) {
1091
- var pageView = this._pages[i];
1092
-
1093
- if (pageView.width !== firstPageView.width || pageView.height !== firstPageView.height) {
1094
- return false;
1095
- }
1096
- }
1097
1079
 
1098
- return true;
1080
+ if (!(0, _ui_utils.isValidSpreadMode)(mode)) {
1081
+ throw new Error(`Invalid spread mode: ${mode}`);
1099
1082
  }
1100
- }, {
1101
- key: "scrollMode",
1102
- get: function get() {
1103
- return this._scrollMode;
1104
- },
1105
- set: function set(mode) {
1106
- if (this._scrollMode === mode) {
1107
- return;
1108
- }
1109
1083
 
1110
- if (!(0, _ui_utils.isValidScrollMode)(mode)) {
1111
- throw new Error("Invalid scroll mode: ".concat(mode));
1112
- }
1084
+ this._spreadMode = mode;
1085
+ this.eventBus.dispatch("spreadmodechanged", {
1086
+ source: this,
1087
+ mode
1088
+ });
1113
1089
 
1114
- this._scrollMode = mode;
1115
- this.eventBus.dispatch('scrollmodechanged', {
1116
- source: this,
1117
- mode: mode
1118
- });
1090
+ this._updateSpreadMode(this._currentPageNumber);
1091
+ }
1119
1092
 
1120
- this._updateScrollMode(this._currentPageNumber);
1093
+ _updateSpreadMode(pageNumber = null) {
1094
+ if (!this.pdfDocument) {
1095
+ return;
1121
1096
  }
1122
- }, {
1123
- key: "spreadMode",
1124
- get: function get() {
1125
- return this._spreadMode;
1126
- },
1127
- set: function set(mode) {
1128
- if (this._spreadMode === mode) {
1129
- return;
1130
- }
1131
1097
 
1132
- if (!(0, _ui_utils.isValidSpreadMode)(mode)) {
1133
- throw new Error("Invalid spread mode: ".concat(mode));
1098
+ const viewer = this.viewer,
1099
+ pages = this._pages;
1100
+ viewer.textContent = "";
1101
+
1102
+ if (this._spreadMode === _ui_utils.SpreadMode.NONE) {
1103
+ for (let i = 0, iMax = pages.length; i < iMax; ++i) {
1104
+ viewer.appendChild(pages[i].div);
1134
1105
  }
1106
+ } else {
1107
+ const parity = this._spreadMode - 1;
1108
+ let spread = null;
1109
+
1110
+ for (let i = 0, iMax = pages.length; i < iMax; ++i) {
1111
+ if (spread === null) {
1112
+ spread = document.createElement("div");
1113
+ spread.className = "spread";
1114
+ viewer.appendChild(spread);
1115
+ } else if (i % 2 === parity) {
1116
+ spread = spread.cloneNode(false);
1117
+ viewer.appendChild(spread);
1118
+ }
1135
1119
 
1136
- this._spreadMode = mode;
1137
- this.eventBus.dispatch('spreadmodechanged', {
1138
- source: this,
1139
- mode: mode
1140
- });
1120
+ spread.appendChild(pages[i].div);
1121
+ }
1122
+ }
1141
1123
 
1142
- this._updateSpreadMode(this._currentPageNumber);
1124
+ if (!pageNumber) {
1125
+ return;
1143
1126
  }
1144
- }]);
1145
1127
 
1146
- return BaseViewer;
1147
- }();
1128
+ this._setCurrentPageNumber(pageNumber, true);
1129
+
1130
+ this.update();
1131
+ }
1132
+
1133
+ }
1148
1134
 
1149
1135
  exports.BaseViewer = BaseViewer;