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,42 +19,30 @@
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.DefaultTextLayerFactory = exports.TextLayerBuilder = undefined;
27
+ exports.DefaultTextLayerFactory = exports.TextLayerBuilder = 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 _dom_events = require('./dom_events');
31
+ var _pdf = require("../pdf");
32
32
 
33
- var _pdf = require('../pdf');
34
-
35
- var _ui_utils = require('./ui_utils');
36
-
37
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
38
-
39
- var EXPAND_DIVS_TIMEOUT = 300;
40
- var MATCH_SCROLL_OFFSET_TOP = -50;
41
- var MATCH_SCROLL_OFFSET_LEFT = -400;
42
-
43
- var TextLayerBuilder = function () {
44
- function TextLayerBuilder(_ref) {
45
- var textLayerDiv = _ref.textLayerDiv,
46
- eventBus = _ref.eventBus,
47
- pageIndex = _ref.pageIndex,
48
- viewport = _ref.viewport,
49
- _ref$findController = _ref.findController,
50
- findController = _ref$findController === undefined ? null : _ref$findController,
51
- _ref$enhanceTextSelec = _ref.enhanceTextSelection,
52
- enhanceTextSelection = _ref$enhanceTextSelec === undefined ? false : _ref$enhanceTextSelec;
53
-
54
- _classCallCheck(this, TextLayerBuilder);
33
+ const EXPAND_DIVS_TIMEOUT = 300;
55
34
 
35
+ class TextLayerBuilder {
36
+ constructor({
37
+ textLayerDiv,
38
+ eventBus,
39
+ pageIndex,
40
+ viewport,
41
+ findController = null,
42
+ enhanceTextSelection = false
43
+ }) {
56
44
  this.textLayerDiv = textLayerDiv;
57
- this.eventBus = eventBus || (0, _dom_events.getGlobalEventBus)();
45
+ this.eventBus = eventBus || (0, _ui_utils.getGlobalEventBus)();
58
46
  this.textContent = null;
59
47
  this.textContentItemsStr = [];
60
48
  this.textContentStream = null;
@@ -67,335 +55,347 @@ var TextLayerBuilder = function () {
67
55
  this.findController = findController;
68
56
  this.textLayerRenderTask = null;
69
57
  this.enhanceTextSelection = enhanceTextSelection;
70
- this._boundEvents = Object.create(null);
71
- this._bindEvents();
58
+ this._onUpdateTextLayerMatches = null;
59
+
72
60
  this._bindMouse();
73
61
  }
74
62
 
75
- _createClass(TextLayerBuilder, [{
76
- key: '_finishRendering',
77
- value: function _finishRendering() {
78
- this.renderingDone = true;
79
- if (!this.enhanceTextSelection) {
80
- var endOfContent = document.createElement('div');
81
- endOfContent.className = 'endOfContent';
82
- this.textLayerDiv.appendChild(endOfContent);
83
- }
84
- this.eventBus.dispatch('textlayerrendered', {
85
- source: this,
86
- pageNumber: this.pageNumber,
87
- numTextDivs: this.textDivs.length
88
- });
63
+ _finishRendering() {
64
+ this.renderingDone = true;
65
+
66
+ if (!this.enhanceTextSelection) {
67
+ const endOfContent = document.createElement("div");
68
+ endOfContent.className = "endOfContent";
69
+ this.textLayerDiv.appendChild(endOfContent);
89
70
  }
90
- }, {
91
- key: 'render',
92
- value: function render() {
93
- var _this = this;
94
71
 
95
- var timeout = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
72
+ this.eventBus.dispatch("textlayerrendered", {
73
+ source: this,
74
+ pageNumber: this.pageNumber,
75
+ numTextDivs: this.textDivs.length
76
+ });
77
+ }
96
78
 
97
- if (!(this.textContent || this.textContentStream) || this.renderingDone) {
98
- return;
99
- }
100
- this.cancel();
101
- this.textDivs = [];
102
- var textLayerFrag = document.createDocumentFragment();
103
- this.textLayerRenderTask = (0, _pdf.renderTextLayer)({
104
- textContent: this.textContent,
105
- textContentStream: this.textContentStream,
106
- container: textLayerFrag,
107
- viewport: this.viewport,
108
- textDivs: this.textDivs,
109
- textContentItemsStr: this.textContentItemsStr,
110
- timeout: timeout,
111
- enhanceTextSelection: this.enhanceTextSelection
112
- });
113
- this.textLayerRenderTask.promise.then(function () {
114
- _this.textLayerDiv.appendChild(textLayerFrag);
115
- _this._finishRendering();
116
- _this.updateMatches();
117
- }, function (reason) {});
79
+ render(timeout = 0) {
80
+ if (!(this.textContent || this.textContentStream) || this.renderingDone) {
81
+ return;
118
82
  }
119
- }, {
120
- key: 'cancel',
121
- value: function cancel() {
122
- if (this.textLayerRenderTask) {
123
- this.textLayerRenderTask.cancel();
124
- this.textLayerRenderTask = null;
125
- }
83
+
84
+ this.cancel();
85
+ this.textDivs = [];
86
+ const textLayerFrag = document.createDocumentFragment();
87
+ this.textLayerRenderTask = (0, _pdf.renderTextLayer)({
88
+ textContent: this.textContent,
89
+ textContentStream: this.textContentStream,
90
+ container: textLayerFrag,
91
+ viewport: this.viewport,
92
+ textDivs: this.textDivs,
93
+ textContentItemsStr: this.textContentItemsStr,
94
+ timeout,
95
+ enhanceTextSelection: this.enhanceTextSelection
96
+ });
97
+ this.textLayerRenderTask.promise.then(() => {
98
+ this.textLayerDiv.appendChild(textLayerFrag);
99
+
100
+ this._finishRendering();
101
+
102
+ this._updateMatches();
103
+ }, function (reason) {});
104
+
105
+ if (!this._onUpdateTextLayerMatches) {
106
+ this._onUpdateTextLayerMatches = evt => {
107
+ if (evt.pageIndex === this.pageIdx || evt.pageIndex === -1) {
108
+ this._updateMatches();
109
+ }
110
+ };
111
+
112
+ this.eventBus._on("updatetextlayermatches", this._onUpdateTextLayerMatches);
113
+ }
114
+ }
115
+
116
+ cancel() {
117
+ if (this.textLayerRenderTask) {
118
+ this.textLayerRenderTask.cancel();
119
+ this.textLayerRenderTask = null;
126
120
  }
127
- }, {
128
- key: 'setTextContentStream',
129
- value: function setTextContentStream(readableStream) {
130
- this.cancel();
131
- this.textContentStream = readableStream;
121
+
122
+ if (this._onUpdateTextLayerMatches) {
123
+ this.eventBus._off("updatetextlayermatches", this._onUpdateTextLayerMatches);
124
+
125
+ this._onUpdateTextLayerMatches = null;
132
126
  }
133
- }, {
134
- key: 'setTextContent',
135
- value: function setTextContent(textContent) {
136
- this.cancel();
137
- this.textContent = textContent;
127
+ }
128
+
129
+ setTextContentStream(readableStream) {
130
+ this.cancel();
131
+ this.textContentStream = readableStream;
132
+ }
133
+
134
+ setTextContent(textContent) {
135
+ this.cancel();
136
+ this.textContent = textContent;
137
+ }
138
+
139
+ _convertMatches(matches, matchesLength) {
140
+ if (!matches) {
141
+ return [];
138
142
  }
139
- }, {
140
- key: 'convertMatches',
141
- value: function convertMatches(matches, matchesLength) {
142
- var i = 0;
143
- var iIndex = 0;
144
- var textContentItemsStr = this.textContentItemsStr;
145
- var end = textContentItemsStr.length - 1;
146
- var queryLen = this.findController === null ? 0 : this.findController.state.query.length;
147
- var ret = [];
148
- if (!matches) {
149
- return ret;
143
+
144
+ const {
145
+ findController,
146
+ textContentItemsStr
147
+ } = this;
148
+ let i = 0,
149
+ iIndex = 0;
150
+ const end = textContentItemsStr.length - 1;
151
+ const queryLen = findController.state.query.length;
152
+ const result = [];
153
+
154
+ for (let m = 0, mm = matches.length; m < mm; m++) {
155
+ let matchIdx = matches[m];
156
+
157
+ while (i !== end && matchIdx >= iIndex + textContentItemsStr[i].length) {
158
+ iIndex += textContentItemsStr[i].length;
159
+ i++;
150
160
  }
151
- for (var m = 0, len = matches.length; m < len; m++) {
152
- var matchIdx = matches[m];
153
- while (i !== end && matchIdx >= iIndex + textContentItemsStr[i].length) {
154
- iIndex += textContentItemsStr[i].length;
155
- i++;
156
- }
157
- if (i === textContentItemsStr.length) {
158
- console.error('Could not find a matching mapping');
159
- }
160
- var match = {
161
- begin: {
162
- divIdx: i,
163
- offset: matchIdx - iIndex
164
- }
165
- };
166
- if (matchesLength) {
167
- matchIdx += matchesLength[m];
168
- } else {
169
- matchIdx += queryLen;
170
- }
171
- while (i !== end && matchIdx > iIndex + textContentItemsStr[i].length) {
172
- iIndex += textContentItemsStr[i].length;
173
- i++;
174
- }
175
- match.end = {
161
+
162
+ if (i === textContentItemsStr.length) {
163
+ console.error("Could not find a matching mapping");
164
+ }
165
+
166
+ const match = {
167
+ begin: {
176
168
  divIdx: i,
177
169
  offset: matchIdx - iIndex
178
- };
179
- ret.push(match);
170
+ }
171
+ };
172
+
173
+ if (matchesLength) {
174
+ matchIdx += matchesLength[m];
175
+ } else {
176
+ matchIdx += queryLen;
177
+ }
178
+
179
+ while (i !== end && matchIdx > iIndex + textContentItemsStr[i].length) {
180
+ iIndex += textContentItemsStr[i].length;
181
+ i++;
180
182
  }
181
- return ret;
183
+
184
+ match.end = {
185
+ divIdx: i,
186
+ offset: matchIdx - iIndex
187
+ };
188
+ result.push(match);
182
189
  }
183
- }, {
184
- key: 'renderMatches',
185
- value: function renderMatches(matches) {
186
- if (matches.length === 0) {
190
+
191
+ return result;
192
+ }
193
+
194
+ _renderMatches(matches) {
195
+ if (matches.length === 0) {
196
+ return;
197
+ }
198
+
199
+ const {
200
+ findController,
201
+ pageIdx,
202
+ textContentItemsStr,
203
+ textDivs
204
+ } = this;
205
+ const isSelectedPage = pageIdx === findController.selected.pageIdx;
206
+ const selectedMatchIdx = findController.selected.matchIdx;
207
+ const highlightAll = findController.state.highlightAll;
208
+ let prevEnd = null;
209
+ const infinity = {
210
+ divIdx: -1,
211
+ offset: undefined
212
+ };
213
+
214
+ function beginText(begin, className) {
215
+ const divIdx = begin.divIdx;
216
+ textDivs[divIdx].textContent = "";
217
+ appendTextToDiv(divIdx, 0, begin.offset, className);
218
+ }
219
+
220
+ function appendTextToDiv(divIdx, fromOffset, toOffset, className) {
221
+ const div = textDivs[divIdx];
222
+ const content = textContentItemsStr[divIdx].substring(fromOffset, toOffset);
223
+ const node = document.createTextNode(content);
224
+
225
+ if (className) {
226
+ const span = document.createElement("span");
227
+ span.className = className;
228
+ span.appendChild(node);
229
+ div.appendChild(span);
187
230
  return;
188
231
  }
189
- var textContentItemsStr = this.textContentItemsStr;
190
- var textDivs = this.textDivs;
191
- var prevEnd = null;
192
- var pageIdx = this.pageIdx;
193
- var isSelectedPage = this.findController === null ? false : pageIdx === this.findController.selected.pageIdx;
194
- var selectedMatchIdx = this.findController === null ? -1 : this.findController.selected.matchIdx;
195
- var highlightAll = this.findController === null ? false : this.findController.state.highlightAll;
196
- var infinity = {
197
- divIdx: -1,
198
- offset: undefined
199
- };
200
- function beginText(begin, className) {
201
- var divIdx = begin.divIdx;
202
- textDivs[divIdx].textContent = '';
203
- appendTextToDiv(divIdx, 0, begin.offset, className);
232
+
233
+ div.appendChild(node);
234
+ }
235
+
236
+ let i0 = selectedMatchIdx,
237
+ i1 = i0 + 1;
238
+
239
+ if (highlightAll) {
240
+ i0 = 0;
241
+ i1 = matches.length;
242
+ } else if (!isSelectedPage) {
243
+ return;
244
+ }
245
+
246
+ for (let i = i0; i < i1; i++) {
247
+ const match = matches[i];
248
+ const begin = match.begin;
249
+ const end = match.end;
250
+ const isSelected = isSelectedPage && i === selectedMatchIdx;
251
+ const highlightSuffix = isSelected ? " selected" : "";
252
+
253
+ if (isSelected) {
254
+ findController.scrollMatchIntoView({
255
+ element: textDivs[begin.divIdx],
256
+ pageIndex: pageIdx,
257
+ matchIndex: selectedMatchIdx
258
+ });
204
259
  }
205
- function appendTextToDiv(divIdx, fromOffset, toOffset, className) {
206
- var div = textDivs[divIdx];
207
- var content = textContentItemsStr[divIdx].substring(fromOffset, toOffset);
208
- var node = document.createTextNode(content);
209
- if (className) {
210
- var span = document.createElement('span');
211
- span.className = className;
212
- span.appendChild(node);
213
- div.appendChild(span);
214
- return;
260
+
261
+ if (!prevEnd || begin.divIdx !== prevEnd.divIdx) {
262
+ if (prevEnd !== null) {
263
+ appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset);
215
264
  }
216
- div.appendChild(node);
217
- }
218
- var i0 = selectedMatchIdx,
219
- i1 = i0 + 1;
220
- if (highlightAll) {
221
- i0 = 0;
222
- i1 = matches.length;
223
- } else if (!isSelectedPage) {
224
- return;
265
+
266
+ beginText(begin);
267
+ } else {
268
+ appendTextToDiv(prevEnd.divIdx, prevEnd.offset, begin.offset);
225
269
  }
226
- for (var i = i0; i < i1; i++) {
227
- var match = matches[i];
228
- var begin = match.begin;
229
- var end = match.end;
230
- var isSelected = isSelectedPage && i === selectedMatchIdx;
231
- var highlightSuffix = isSelected ? ' selected' : '';
232
- if (this.findController) {
233
- if (this.findController.selected.matchIdx === i && this.findController.selected.pageIdx === pageIdx) {
234
- var spot = {
235
- top: MATCH_SCROLL_OFFSET_TOP,
236
- left: MATCH_SCROLL_OFFSET_LEFT
237
- };
238
- (0, _ui_utils.scrollIntoView)(textDivs[begin.divIdx], spot, true);
239
- }
240
- }
241
- if (!prevEnd || begin.divIdx !== prevEnd.divIdx) {
242
- if (prevEnd !== null) {
243
- appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset);
244
- }
245
- beginText(begin);
246
- } else {
247
- appendTextToDiv(prevEnd.divIdx, prevEnd.offset, begin.offset);
248
- }
249
- if (begin.divIdx === end.divIdx) {
250
- appendTextToDiv(begin.divIdx, begin.offset, end.offset, 'highlight' + highlightSuffix);
251
- } else {
252
- appendTextToDiv(begin.divIdx, begin.offset, infinity.offset, 'highlight begin' + highlightSuffix);
253
- for (var n0 = begin.divIdx + 1, n1 = end.divIdx; n0 < n1; n0++) {
254
- textDivs[n0].className = 'highlight middle' + highlightSuffix;
255
- }
256
- beginText(end, 'highlight end' + highlightSuffix);
270
+
271
+ if (begin.divIdx === end.divIdx) {
272
+ appendTextToDiv(begin.divIdx, begin.offset, end.offset, "highlight" + highlightSuffix);
273
+ } else {
274
+ appendTextToDiv(begin.divIdx, begin.offset, infinity.offset, "highlight begin" + highlightSuffix);
275
+
276
+ for (let n0 = begin.divIdx + 1, n1 = end.divIdx; n0 < n1; n0++) {
277
+ textDivs[n0].className = "highlight middle" + highlightSuffix;
257
278
  }
258
- prevEnd = end;
259
- }
260
- if (prevEnd) {
261
- appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset);
279
+
280
+ beginText(end, "highlight end" + highlightSuffix);
262
281
  }
282
+
283
+ prevEnd = end;
263
284
  }
264
- }, {
265
- key: 'updateMatches',
266
- value: function updateMatches() {
267
- if (!this.renderingDone) {
268
- return;
285
+
286
+ if (prevEnd) {
287
+ appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset);
288
+ }
289
+ }
290
+
291
+ _updateMatches() {
292
+ if (!this.renderingDone) {
293
+ return;
294
+ }
295
+
296
+ const {
297
+ findController,
298
+ matches,
299
+ pageIdx,
300
+ textContentItemsStr,
301
+ textDivs
302
+ } = this;
303
+ let clearedUntilDivIdx = -1;
304
+
305
+ for (let i = 0, ii = matches.length; i < ii; i++) {
306
+ const match = matches[i];
307
+ const begin = Math.max(clearedUntilDivIdx, match.begin.divIdx);
308
+
309
+ for (let n = begin, end = match.end.divIdx; n <= end; n++) {
310
+ const div = textDivs[n];
311
+ div.textContent = textContentItemsStr[n];
312
+ div.className = "";
269
313
  }
270
- var matches = this.matches;
271
- var textDivs = this.textDivs;
272
- var textContentItemsStr = this.textContentItemsStr;
273
- var clearedUntilDivIdx = -1;
274
- for (var i = 0, len = matches.length; i < len; i++) {
275
- var match = matches[i];
276
- var begin = Math.max(clearedUntilDivIdx, match.begin.divIdx);
277
- for (var n = begin, end = match.end.divIdx; n <= end; n++) {
278
- var div = textDivs[n];
279
- div.textContent = textContentItemsStr[n];
280
- div.className = '';
314
+
315
+ clearedUntilDivIdx = match.end.divIdx + 1;
316
+ }
317
+
318
+ if (!findController || !findController.highlightMatches) {
319
+ return;
320
+ }
321
+
322
+ const pageMatches = findController.pageMatches[pageIdx] || null;
323
+ const pageMatchesLength = findController.pageMatchesLength[pageIdx] || null;
324
+ this.matches = this._convertMatches(pageMatches, pageMatchesLength);
325
+
326
+ this._renderMatches(this.matches);
327
+ }
328
+
329
+ _bindMouse() {
330
+ const div = this.textLayerDiv;
331
+ let expandDivsTimer = null;
332
+ div.addEventListener("mousedown", evt => {
333
+ if (this.enhanceTextSelection && this.textLayerRenderTask) {
334
+ this.textLayerRenderTask.expandTextDivs(true);
335
+
336
+ if (expandDivsTimer) {
337
+ clearTimeout(expandDivsTimer);
338
+ expandDivsTimer = null;
281
339
  }
282
- clearedUntilDivIdx = match.end.divIdx + 1;
283
- }
284
- if (!this.findController || !this.findController.highlightMatches) {
340
+
285
341
  return;
286
342
  }
287
- var pageMatches = void 0,
288
- pageMatchesLength = void 0;
289
- if (this.findController !== null) {
290
- pageMatches = this.findController.pageMatches[this.pageIdx] || null;
291
- pageMatchesLength = this.findController.pageMatchesLength ? this.findController.pageMatchesLength[this.pageIdx] || null : null;
343
+
344
+ const end = div.querySelector(".endOfContent");
345
+
346
+ if (!end) {
347
+ return;
292
348
  }
293
- this.matches = this.convertMatches(pageMatches, pageMatchesLength);
294
- this.renderMatches(this.matches);
295
- }
296
- }, {
297
- key: '_bindEvents',
298
- value: function _bindEvents() {
299
- var _this2 = this;
300
349
 
301
- var eventBus = this.eventBus,
302
- _boundEvents = this._boundEvents;
350
+ let adjustTop = evt.target !== div;
351
+ adjustTop = adjustTop && window.getComputedStyle(end).getPropertyValue("-moz-user-select") !== "none";
303
352
 
304
- _boundEvents.pageCancelled = function (evt) {
305
- if (evt.pageNumber !== _this2.pageNumber) {
306
- return;
307
- }
308
- if (_this2.textLayerRenderTask) {
309
- console.error('TextLayerBuilder._bindEvents: `this.cancel()` should ' + 'have been called when the page was reset, or rendering cancelled.');
310
- return;
311
- }
312
- for (var name in _boundEvents) {
313
- eventBus.off(name.toLowerCase(), _boundEvents[name]);
314
- delete _boundEvents[name];
315
- }
316
- };
317
- _boundEvents.updateTextLayerMatches = function (evt) {
318
- if (evt.pageIndex !== _this2.pageIdx && evt.pageIndex !== -1) {
319
- return;
320
- }
321
- _this2.updateMatches();
322
- };
323
- eventBus.on('pagecancelled', _boundEvents.pageCancelled);
324
- eventBus.on('updatetextlayermatches', _boundEvents.updateTextLayerMatches);
325
- }
326
- }, {
327
- key: '_bindMouse',
328
- value: function _bindMouse() {
329
- var _this3 = this;
330
-
331
- var div = this.textLayerDiv;
332
- var expandDivsTimer = null;
333
- div.addEventListener('mousedown', function (evt) {
334
- if (_this3.enhanceTextSelection && _this3.textLayerRenderTask) {
335
- _this3.textLayerRenderTask.expandTextDivs(true);
336
- if (expandDivsTimer) {
337
- clearTimeout(expandDivsTimer);
338
- expandDivsTimer = null;
353
+ if (adjustTop) {
354
+ const divBounds = div.getBoundingClientRect();
355
+ const r = Math.max(0, (evt.pageY - divBounds.top) / divBounds.height);
356
+ end.style.top = (r * 100).toFixed(2) + "%";
357
+ }
358
+
359
+ end.classList.add("active");
360
+ });
361
+ div.addEventListener("mouseup", () => {
362
+ if (this.enhanceTextSelection && this.textLayerRenderTask) {
363
+ expandDivsTimer = setTimeout(() => {
364
+ if (this.textLayerRenderTask) {
365
+ this.textLayerRenderTask.expandTextDivs(false);
339
366
  }
340
- return;
341
- }
342
- var end = div.querySelector('.endOfContent');
343
- if (!end) {
344
- return;
345
- }
346
- var adjustTop = evt.target !== div;
347
- adjustTop = adjustTop && window.getComputedStyle(end).getPropertyValue('-moz-user-select') !== 'none';
348
- if (adjustTop) {
349
- var divBounds = div.getBoundingClientRect();
350
- var r = Math.max(0, (evt.pageY - divBounds.top) / divBounds.height);
351
- end.style.top = (r * 100).toFixed(2) + '%';
352
- }
353
- end.classList.add('active');
354
- });
355
- div.addEventListener('mouseup', function () {
356
- if (_this3.enhanceTextSelection && _this3.textLayerRenderTask) {
357
- expandDivsTimer = setTimeout(function () {
358
- if (_this3.textLayerRenderTask) {
359
- _this3.textLayerRenderTask.expandTextDivs(false);
360
- }
361
- expandDivsTimer = null;
362
- }, EXPAND_DIVS_TIMEOUT);
363
- return;
364
- }
365
- var end = div.querySelector('.endOfContent');
366
- if (!end) {
367
- return;
368
- }
369
- end.style.top = '';
370
- end.classList.remove('active');
371
- });
372
- }
373
- }]);
374
367
 
375
- return TextLayerBuilder;
376
- }();
368
+ expandDivsTimer = null;
369
+ }, EXPAND_DIVS_TIMEOUT);
370
+ return;
371
+ }
377
372
 
378
- var DefaultTextLayerFactory = function () {
379
- function DefaultTextLayerFactory() {
380
- _classCallCheck(this, DefaultTextLayerFactory);
381
- }
373
+ const end = div.querySelector(".endOfContent");
382
374
 
383
- _createClass(DefaultTextLayerFactory, [{
384
- key: 'createTextLayerBuilder',
385
- value: function createTextLayerBuilder(textLayerDiv, pageIndex, viewport) {
386
- var enhanceTextSelection = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
387
-
388
- return new TextLayerBuilder({
389
- textLayerDiv: textLayerDiv,
390
- pageIndex: pageIndex,
391
- viewport: viewport,
392
- enhanceTextSelection: enhanceTextSelection
393
- });
394
- }
395
- }]);
375
+ if (!end) {
376
+ return;
377
+ }
378
+
379
+ end.style.top = "";
380
+ end.classList.remove("active");
381
+ });
382
+ }
396
383
 
397
- return DefaultTextLayerFactory;
398
- }();
384
+ }
399
385
 
400
386
  exports.TextLayerBuilder = TextLayerBuilder;
387
+
388
+ class DefaultTextLayerFactory {
389
+ createTextLayerBuilder(textLayerDiv, pageIndex, viewport, enhanceTextSelection = false, eventBus) {
390
+ return new TextLayerBuilder({
391
+ textLayerDiv,
392
+ pageIndex,
393
+ viewport,
394
+ enhanceTextSelection,
395
+ eventBus
396
+ });
397
+ }
398
+
399
+ }
400
+
401
401
  exports.DefaultTextLayerFactory = DefaultTextLayerFactory;