pdfjs-dist 2.0.489 → 2.2.228

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