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,36 +19,50 @@
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.isDestArraysEqual = exports.isDestHashesEqual = exports.PDFHistory = undefined;
27
+ exports.isDestHashesEqual = isDestHashesEqual;
28
+ exports.isDestArraysEqual = isDestArraysEqual;
29
+ exports.PDFHistory = void 0;
30
+
31
+ var _ui_utils = require("./ui_utils");
28
32
 
29
- var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
33
+ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
30
34
 
31
- 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; }; }();
35
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }
32
36
 
33
- var _ui_utils = require('./ui_utils');
37
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }
34
38
 
35
- var _dom_events = require('./dom_events');
39
+ function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
40
+
41
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
36
42
 
37
43
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
38
44
 
45
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
46
+
47
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
48
+
39
49
  var HASH_CHANGE_TIMEOUT = 1000;
40
50
  var POSITION_UPDATED_THRESHOLD = 50;
41
51
  var UPDATE_VIEWAREA_TIMEOUT = 1000;
52
+
42
53
  function getCurrentHash() {
43
54
  return document.location.hash;
44
55
  }
56
+
45
57
  function parseCurrentHash(linkService) {
46
58
  var hash = unescape(getCurrentHash()).substring(1);
47
59
  var params = (0, _ui_utils.parseQueryString)(hash);
48
60
  var page = params.page | 0;
61
+
49
62
  if (!(Number.isInteger(page) && page > 0 && page <= linkService.pagesCount)) {
50
63
  page = null;
51
64
  }
65
+
52
66
  return {
53
67
  hash: hash,
54
68
  page: page,
@@ -56,7 +70,9 @@ function parseCurrentHash(linkService) {
56
70
  };
57
71
  }
58
72
 
59
- var PDFHistory = function () {
73
+ var PDFHistory =
74
+ /*#__PURE__*/
75
+ function () {
60
76
  function PDFHistory(_ref) {
61
77
  var _this = this;
62
78
 
@@ -66,7 +82,7 @@ var PDFHistory = function () {
66
82
  _classCallCheck(this, PDFHistory);
67
83
 
68
84
  this.linkService = linkService;
69
- this.eventBus = eventBus || (0, _dom_events.getGlobalEventBus)();
85
+ this.eventBus = eventBus || (0, _ui_utils.getGlobalEventBus)();
70
86
  this.initialized = false;
71
87
  this.initialBookmark = null;
72
88
  this.initialRotation = null;
@@ -82,19 +98,27 @@ var PDFHistory = function () {
82
98
  }
83
99
 
84
100
  _createClass(PDFHistory, [{
85
- key: 'initialize',
86
- value: function initialize(fingerprint) {
87
- var resetHistory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
101
+ key: "initialize",
102
+ value: function initialize(_ref2) {
103
+ var fingerprint = _ref2.fingerprint,
104
+ _ref2$resetHistory = _ref2.resetHistory,
105
+ resetHistory = _ref2$resetHistory === void 0 ? false : _ref2$resetHistory,
106
+ _ref2$updateUrl = _ref2.updateUrl,
107
+ updateUrl = _ref2$updateUrl === void 0 ? false : _ref2$updateUrl;
88
108
 
89
109
  if (!fingerprint || typeof fingerprint !== 'string') {
90
110
  console.error('PDFHistory.initialize: The "fingerprint" must be a non-empty string.');
91
111
  return;
92
112
  }
113
+
93
114
  var reInitialized = this.initialized && this.fingerprint !== fingerprint;
94
115
  this.fingerprint = fingerprint;
116
+ this._updateUrl = updateUrl === true;
117
+
95
118
  if (!this.initialized) {
96
119
  this._bindEvents();
97
120
  }
121
+
98
122
  var state = window.history.state;
99
123
  this.initialized = true;
100
124
  this.initialBookmark = null;
@@ -106,7 +130,8 @@ var PDFHistory = function () {
106
130
  this._uid = this._maxUid = 0;
107
131
  this._destination = null;
108
132
  this._position = null;
109
- if (!this._isValidState(state) || resetHistory) {
133
+
134
+ if (!this._isValidState(state, true) || resetHistory) {
110
135
  var _parseCurrentHash = parseCurrentHash(this.linkService),
111
136
  hash = _parseCurrentHash.hash,
112
137
  page = _parseCurrentHash.page,
@@ -114,68 +139,94 @@ var PDFHistory = function () {
114
139
 
115
140
  if (!hash || reInitialized || resetHistory) {
116
141
  this._pushOrReplaceState(null, true);
142
+
117
143
  return;
118
144
  }
145
+
119
146
  this._pushOrReplaceState({
120
147
  hash: hash,
121
148
  page: page,
122
149
  rotation: rotation
123
150
  }, true);
151
+
124
152
  return;
125
153
  }
154
+
126
155
  var destination = state.destination;
156
+
127
157
  this._updateInternalState(destination, state.uid, true);
158
+
128
159
  if (this._uid > this._maxUid) {
129
160
  this._maxUid = this._uid;
130
161
  }
162
+
131
163
  if (destination.rotation !== undefined) {
132
164
  this.initialRotation = destination.rotation;
133
165
  }
166
+
134
167
  if (destination.dest) {
135
168
  this.initialBookmark = JSON.stringify(destination.dest);
136
169
  this._destination.page = null;
137
170
  } else if (destination.hash) {
138
171
  this.initialBookmark = destination.hash;
139
172
  } else if (destination.page) {
140
- this.initialBookmark = 'page=' + destination.page;
173
+ this.initialBookmark = "page=".concat(destination.page);
141
174
  }
142
175
  }
143
176
  }, {
144
- key: 'push',
145
- value: function push(_ref2) {
177
+ key: "push",
178
+ value: function push(_ref3) {
146
179
  var _this2 = this;
147
180
 
148
- var namedDest = _ref2.namedDest,
149
- explicitDest = _ref2.explicitDest,
150
- pageNumber = _ref2.pageNumber;
181
+ var _ref3$namedDest = _ref3.namedDest,
182
+ namedDest = _ref3$namedDest === void 0 ? null : _ref3$namedDest,
183
+ explicitDest = _ref3.explicitDest,
184
+ pageNumber = _ref3.pageNumber;
151
185
 
152
186
  if (!this.initialized) {
153
187
  return;
154
188
  }
155
- if (namedDest && typeof namedDest !== 'string' || !(explicitDest instanceof Array) || !(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.linkService.pagesCount)) {
156
- console.error('PDFHistory.push: Invalid parameters.');
189
+
190
+ if (namedDest && typeof namedDest !== 'string') {
191
+ console.error('PDFHistory.push: ' + "\"".concat(namedDest, "\" is not a valid namedDest parameter."));
192
+ return;
193
+ } else if (!Array.isArray(explicitDest)) {
194
+ console.error('PDFHistory.push: ' + "\"".concat(explicitDest, "\" is not a valid explicitDest parameter."));
157
195
  return;
196
+ } else if (!(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.linkService.pagesCount)) {
197
+ if (pageNumber !== null || this._destination) {
198
+ console.error('PDFHistory.push: ' + "\"".concat(pageNumber, "\" is not a valid pageNumber parameter."));
199
+ return;
200
+ }
158
201
  }
202
+
159
203
  var hash = namedDest || JSON.stringify(explicitDest);
204
+
160
205
  if (!hash) {
161
206
  return;
162
207
  }
208
+
163
209
  var forceReplace = false;
210
+
164
211
  if (this._destination && (isDestHashesEqual(this._destination.hash, hash) || isDestArraysEqual(this._destination.dest, explicitDest))) {
165
212
  if (this._destination.page) {
166
213
  return;
167
214
  }
215
+
168
216
  forceReplace = true;
169
217
  }
218
+
170
219
  if (this._popStateInProgress && !forceReplace) {
171
220
  return;
172
221
  }
222
+
173
223
  this._pushOrReplaceState({
174
224
  dest: explicitDest,
175
225
  hash: hash,
176
226
  page: pageNumber,
177
227
  rotation: this.linkService.rotation
178
228
  }, forceReplace);
229
+
179
230
  if (!this._popStateInProgress) {
180
231
  this._popStateInProgress = true;
181
232
  Promise.resolve().then(function () {
@@ -184,109 +235,166 @@ var PDFHistory = function () {
184
235
  }
185
236
  }
186
237
  }, {
187
- key: 'pushCurrentPosition',
238
+ key: "pushCurrentPosition",
188
239
  value: function pushCurrentPosition() {
189
240
  if (!this.initialized || this._popStateInProgress) {
190
241
  return;
191
242
  }
243
+
192
244
  this._tryPushCurrentPosition();
193
245
  }
194
246
  }, {
195
- key: 'back',
247
+ key: "back",
196
248
  value: function back() {
197
249
  if (!this.initialized || this._popStateInProgress) {
198
250
  return;
199
251
  }
252
+
200
253
  var state = window.history.state;
254
+
201
255
  if (this._isValidState(state) && state.uid > 0) {
202
256
  window.history.back();
203
257
  }
204
258
  }
205
259
  }, {
206
- key: 'forward',
260
+ key: "forward",
207
261
  value: function forward() {
208
262
  if (!this.initialized || this._popStateInProgress) {
209
263
  return;
210
264
  }
265
+
211
266
  var state = window.history.state;
267
+
212
268
  if (this._isValidState(state) && state.uid < this._maxUid) {
213
269
  window.history.forward();
214
270
  }
215
271
  }
216
272
  }, {
217
- key: '_pushOrReplaceState',
273
+ key: "_pushOrReplaceState",
218
274
  value: function _pushOrReplaceState(destination) {
219
275
  var forceReplace = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
220
-
221
276
  var shouldReplace = forceReplace || !this._destination;
222
277
  var newState = {
223
278
  fingerprint: this.fingerprint,
224
279
  uid: shouldReplace ? this._uid : this._uid + 1,
225
280
  destination: destination
226
281
  };
282
+
227
283
  this._updateInternalState(destination, newState.uid);
284
+
285
+ var newUrl;
286
+
287
+ if (this._updateUrl && destination && destination.hash) {
288
+ var baseUrl = document.location.href.split('#')[0];
289
+
290
+ if (!baseUrl.startsWith('file://')) {
291
+ newUrl = "".concat(baseUrl, "#").concat(destination.hash);
292
+ }
293
+ }
294
+
228
295
  if (shouldReplace) {
229
- window.history.replaceState(newState, '');
296
+ if (newUrl) {
297
+ window.history.replaceState(newState, '', newUrl);
298
+ } else {
299
+ window.history.replaceState(newState, '');
300
+ }
230
301
  } else {
231
302
  this._maxUid = this._uid;
232
- window.history.pushState(newState, '');
303
+
304
+ if (newUrl) {
305
+ window.history.pushState(newState, '', newUrl);
306
+ } else {
307
+ window.history.pushState(newState, '');
308
+ }
233
309
  }
234
310
  }
235
311
  }, {
236
- key: '_tryPushCurrentPosition',
312
+ key: "_tryPushCurrentPosition",
237
313
  value: function _tryPushCurrentPosition() {
238
314
  var temporary = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
239
315
 
240
316
  if (!this._position) {
241
317
  return;
242
318
  }
319
+
243
320
  var position = this._position;
321
+
244
322
  if (temporary) {
245
- position = (0, _ui_utils.cloneObj)(this._position);
323
+ position = Object.assign(Object.create(null), this._position);
246
324
  position.temporary = true;
247
325
  }
326
+
248
327
  if (!this._destination) {
249
328
  this._pushOrReplaceState(position);
329
+
250
330
  return;
251
331
  }
332
+
252
333
  if (this._destination.temporary) {
253
334
  this._pushOrReplaceState(position, true);
335
+
254
336
  return;
255
337
  }
338
+
256
339
  if (this._destination.hash === position.hash) {
257
340
  return;
258
341
  }
342
+
259
343
  if (!this._destination.page && (POSITION_UPDATED_THRESHOLD <= 0 || this._numPositionUpdates <= POSITION_UPDATED_THRESHOLD)) {
260
344
  return;
261
345
  }
346
+
262
347
  var forceReplace = false;
263
- if (this._destination.page === position.first || this._destination.page === position.page) {
348
+
349
+ if (this._destination.page >= position.first && this._destination.page <= position.page) {
264
350
  if (this._destination.dest || !this._destination.first) {
265
351
  return;
266
352
  }
353
+
267
354
  forceReplace = true;
268
355
  }
356
+
269
357
  this._pushOrReplaceState(position, forceReplace);
270
358
  }
271
359
  }, {
272
- key: '_isValidState',
360
+ key: "_isValidState",
273
361
  value: function _isValidState(state) {
362
+ var checkReload = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
363
+
274
364
  if (!state) {
275
365
  return false;
276
366
  }
367
+
277
368
  if (state.fingerprint !== this.fingerprint) {
278
- return false;
369
+ if (checkReload) {
370
+ if (typeof state.fingerprint !== 'string' || state.fingerprint.length !== this.fingerprint.length) {
371
+ return false;
372
+ }
373
+
374
+ var _performance$getEntri = performance.getEntriesByType('navigation'),
375
+ _performance$getEntri2 = _slicedToArray(_performance$getEntri, 1),
376
+ perfEntry = _performance$getEntri2[0];
377
+
378
+ if (!perfEntry || perfEntry.type !== 'reload') {
379
+ return false;
380
+ }
381
+ } else {
382
+ return false;
383
+ }
279
384
  }
385
+
280
386
  if (!Number.isInteger(state.uid) || state.uid < 0) {
281
387
  return false;
282
388
  }
389
+
283
390
  if (state.destination === null || _typeof(state.destination) !== 'object') {
284
391
  return false;
285
392
  }
393
+
286
394
  return true;
287
395
  }
288
396
  }, {
289
- key: '_updateInternalState',
397
+ key: "_updateInternalState",
290
398
  value: function _updateInternalState(destination, uid) {
291
399
  var removeTemporary = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
292
400
 
@@ -294,55 +402,62 @@ var PDFHistory = function () {
294
402
  clearTimeout(this._updateViewareaTimeout);
295
403
  this._updateViewareaTimeout = null;
296
404
  }
405
+
297
406
  if (removeTemporary && destination && destination.temporary) {
298
407
  delete destination.temporary;
299
408
  }
409
+
300
410
  this._destination = destination;
301
411
  this._uid = uid;
302
412
  this._numPositionUpdates = 0;
303
413
  }
304
414
  }, {
305
- key: '_updateViewarea',
306
- value: function _updateViewarea(_ref3) {
415
+ key: "_updateViewarea",
416
+ value: function _updateViewarea(_ref4) {
307
417
  var _this3 = this;
308
418
 
309
- var location = _ref3.location;
419
+ var location = _ref4.location;
310
420
 
311
421
  if (this._updateViewareaTimeout) {
312
422
  clearTimeout(this._updateViewareaTimeout);
313
423
  this._updateViewareaTimeout = null;
314
424
  }
425
+
315
426
  this._position = {
316
- hash: this._isViewerInPresentationMode ? 'page=' + location.pageNumber : location.pdfOpenParams.substring(1),
427
+ hash: this._isViewerInPresentationMode ? "page=".concat(location.pageNumber) : location.pdfOpenParams.substring(1),
317
428
  page: this.linkService.page,
318
429
  first: location.pageNumber,
319
430
  rotation: location.rotation
320
431
  };
432
+
321
433
  if (this._popStateInProgress) {
322
434
  return;
323
435
  }
436
+
324
437
  if (POSITION_UPDATED_THRESHOLD > 0 && this._isPagesLoaded && this._destination && !this._destination.page) {
325
438
  this._numPositionUpdates++;
326
439
  }
440
+
327
441
  if (UPDATE_VIEWAREA_TIMEOUT > 0) {
328
442
  this._updateViewareaTimeout = setTimeout(function () {
329
443
  if (!_this3._popStateInProgress) {
330
444
  _this3._tryPushCurrentPosition(true);
331
445
  }
446
+
332
447
  _this3._updateViewareaTimeout = null;
333
448
  }, UPDATE_VIEWAREA_TIMEOUT);
334
449
  }
335
450
  }
336
451
  }, {
337
- key: '_popState',
338
- value: function _popState(_ref4) {
452
+ key: "_popState",
453
+ value: function _popState(_ref5) {
339
454
  var _this4 = this;
340
455
 
341
- var state = _ref4.state;
342
-
456
+ var state = _ref5.state;
343
457
  var newHash = getCurrentHash(),
344
458
  hashChanged = this._currentHash !== newHash;
345
459
  this._currentHash = newHash;
460
+
346
461
  if (!state || false) {
347
462
  this._uid++;
348
463
 
@@ -356,12 +471,16 @@ var PDFHistory = function () {
356
471
  page: page,
357
472
  rotation: rotation
358
473
  }, true);
474
+
359
475
  return;
360
476
  }
477
+
361
478
  if (!this._isValidState(state)) {
362
479
  return;
363
480
  }
481
+
364
482
  this._popStateInProgress = true;
483
+
365
484
  if (hashChanged) {
366
485
  this._blockHashChange++;
367
486
  (0, _ui_utils.waitOnEventOrTimeout)({
@@ -372,14 +491,19 @@ var PDFHistory = function () {
372
491
  _this4._blockHashChange--;
373
492
  });
374
493
  }
494
+
375
495
  var destination = state.destination;
496
+
376
497
  this._updateInternalState(destination, state.uid, true);
498
+
377
499
  if (this._uid > this._maxUid) {
378
500
  this._maxUid = this._uid;
379
501
  }
502
+
380
503
  if ((0, _ui_utils.isValidRotation)(destination.rotation)) {
381
504
  this.linkService.rotation = destination.rotation;
382
505
  }
506
+
383
507
  if (destination.dest) {
384
508
  this.linkService.navigateTo(destination.dest);
385
509
  } else if (destination.hash) {
@@ -387,31 +511,33 @@ var PDFHistory = function () {
387
511
  } else if (destination.page) {
388
512
  this.linkService.page = destination.page;
389
513
  }
514
+
390
515
  Promise.resolve().then(function () {
391
516
  _this4._popStateInProgress = false;
392
517
  });
393
518
  }
394
519
  }, {
395
- key: '_bindEvents',
520
+ key: "_bindEvents",
396
521
  value: function _bindEvents() {
397
522
  var _this5 = this;
398
523
 
399
524
  var _boundEvents = this._boundEvents,
400
525
  eventBus = this.eventBus;
401
-
402
526
  _boundEvents.updateViewarea = this._updateViewarea.bind(this);
403
527
  _boundEvents.popState = this._popState.bind(this);
528
+
404
529
  _boundEvents.pageHide = function (evt) {
405
530
  if (!_this5._destination || _this5._destination.temporary) {
406
531
  _this5._tryPushCurrentPosition();
407
532
  }
408
533
  };
534
+
409
535
  eventBus.on('updateviewarea', _boundEvents.updateViewarea);
410
536
  window.addEventListener('popstate', _boundEvents.popState);
411
537
  window.addEventListener('pagehide', _boundEvents.pageHide);
412
538
  }
413
539
  }, {
414
- key: 'popStateInProgress',
540
+ key: "popStateInProgress",
415
541
  get: function get() {
416
542
  return this.initialized && (this._popStateInProgress || this._blockHashChange > 0);
417
543
  }
@@ -420,10 +546,13 @@ var PDFHistory = function () {
420
546
  return PDFHistory;
421
547
  }();
422
548
 
549
+ exports.PDFHistory = PDFHistory;
550
+
423
551
  function isDestHashesEqual(destHash, pushHash) {
424
552
  if (typeof destHash !== 'string' || typeof pushHash !== 'string') {
425
553
  return false;
426
554
  }
555
+
427
556
  if (destHash === pushHash) {
428
557
  return true;
429
558
  }
@@ -434,42 +563,50 @@ function isDestHashesEqual(destHash, pushHash) {
434
563
  if (nameddest === pushHash) {
435
564
  return true;
436
565
  }
566
+
437
567
  return false;
438
568
  }
569
+
439
570
  function isDestArraysEqual(firstDest, secondDest) {
440
571
  function isEntryEqual(first, second) {
441
- if ((typeof first === 'undefined' ? 'undefined' : _typeof(first)) !== (typeof second === 'undefined' ? 'undefined' : _typeof(second))) {
572
+ if (_typeof(first) !== _typeof(second)) {
442
573
  return false;
443
574
  }
444
- if (first instanceof Array || second instanceof Array) {
575
+
576
+ if (Array.isArray(first) || Array.isArray(second)) {
445
577
  return false;
446
578
  }
447
- if (first !== null && (typeof first === 'undefined' ? 'undefined' : _typeof(first)) === 'object' && second !== null) {
579
+
580
+ if (first !== null && _typeof(first) === 'object' && second !== null) {
448
581
  if (Object.keys(first).length !== Object.keys(second).length) {
449
582
  return false;
450
583
  }
584
+
451
585
  for (var key in first) {
452
586
  if (!isEntryEqual(first[key], second[key])) {
453
587
  return false;
454
588
  }
455
589
  }
590
+
456
591
  return true;
457
592
  }
593
+
458
594
  return first === second || Number.isNaN(first) && Number.isNaN(second);
459
595
  }
460
- if (!(firstDest instanceof Array && secondDest instanceof Array)) {
596
+
597
+ if (!(Array.isArray(firstDest) && Array.isArray(secondDest))) {
461
598
  return false;
462
599
  }
600
+
463
601
  if (firstDest.length !== secondDest.length) {
464
602
  return false;
465
603
  }
604
+
466
605
  for (var i = 0, ii = firstDest.length; i < ii; i++) {
467
606
  if (!isEntryEqual(firstDest[i], secondDest[i])) {
468
607
  return false;
469
608
  }
470
609
  }
610
+
471
611
  return true;
472
- }
473
- exports.PDFHistory = PDFHistory;
474
- exports.isDestHashesEqual = isDestHashesEqual;
475
- exports.isDestArraysEqual = isDestArraysEqual;
612
+ }