pdfjs-dist 2.2.228 → 2.6.347

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