pdfjs-dist 2.0.943 → 2.4.456

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