pdfjs-dist 2.0.487 → 2.1.266
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.
- package/bower.json +1 -1
- package/build/pdf.js +15564 -9476
- package/build/pdf.js.map +1 -1
- package/build/pdf.min.js +1 -1
- package/build/pdf.worker.js +46644 -36309
- package/build/pdf.worker.js.map +1 -1
- package/build/pdf.worker.min.js +1 -1
- package/external/url/url-lib.js +627 -0
- package/image_decoders/pdf.image_decoders.js +11430 -0
- package/image_decoders/pdf.image_decoders.js.map +1 -0
- package/image_decoders/pdf.image_decoders.min.js +1 -0
- package/lib/core/annotation.js +406 -131
- package/lib/core/arithmetic_decoder.js +275 -245
- package/lib/core/bidi.js +65 -6
- package/lib/core/ccitt.js +173 -18
- package/lib/core/ccitt_stream.js +15 -6
- package/lib/core/cff_parser.js +376 -53
- package/lib/core/charsets.js +5 -4
- package/lib/core/chunked_stream.js +387 -149
- package/lib/core/cmap.js +310 -75
- package/lib/core/colorspace.js +874 -594
- package/lib/core/crypto.js +290 -45
- package/lib/core/document.js +545 -260
- package/lib/core/encodings.js +19 -10
- package/lib/core/evaluator.js +725 -147
- package/lib/core/font_renderer.js +360 -91
- package/lib/core/fonts.js +791 -186
- package/lib/core/function.js +284 -71
- package/lib/core/glyphlist.js +3 -2
- package/lib/core/image.js +168 -61
- package/lib/core/jbig2.js +479 -66
- package/lib/core/jbig2_stream.js +19 -8
- package/lib/core/jpeg_stream.js +38 -13
- package/lib/core/jpg.js +252 -29
- package/lib/core/jpx.js +396 -6
- package/lib/core/jpx_stream.js +18 -6
- package/lib/core/metrics.js +4 -4
- package/lib/core/murmurhash3.js +24 -6
- package/lib/core/obj.js +1137 -475
- package/lib/core/operator_list.js +108 -6
- package/lib/core/parser.js +321 -68
- package/lib/core/pattern.js +145 -13
- package/lib/core/pdf_manager.js +321 -133
- package/lib/core/primitives.js +75 -22
- package/lib/core/ps_parser.js +134 -45
- package/lib/core/standard_fonts.js +10 -10
- package/lib/core/stream.js +313 -34
- package/lib/core/type1_parser.js +143 -13
- package/lib/core/unicode.js +31 -4
- package/lib/core/worker.js +210 -66
- package/lib/display/annotation_layer.js +361 -123
- package/lib/display/api.js +1454 -729
- package/lib/display/api_compatibility.js +11 -13
- package/lib/display/canvas.js +324 -29
- package/lib/display/content_disposition.js +83 -32
- package/lib/display/dom_utils.js +226 -41
- package/lib/display/fetch_stream.js +208 -84
- package/lib/display/font_loader.js +465 -236
- package/lib/display/metadata.js +38 -16
- package/lib/display/network.js +216 -51
- package/lib/display/network_utils.js +32 -19
- package/lib/display/node_stream.js +352 -169
- package/lib/display/pattern_helper.js +58 -7
- package/lib/display/svg.js +242 -29
- package/lib/display/text_layer.js +132 -18
- package/lib/display/transport_stream.js +171 -42
- package/lib/display/webgl.js +64 -18
- package/lib/display/worker_options.js +5 -4
- package/lib/display/xml_parser.js +166 -53
- package/lib/examples/node/domstubs.js +57 -4
- package/lib/pdf.js +21 -4
- package/lib/pdf.worker.js +5 -3
- package/lib/shared/compatibility.js +158 -564
- package/lib/shared/global_scope.js +2 -2
- package/lib/shared/is_node.js +4 -4
- package/lib/shared/message_handler.js +521 -0
- package/lib/shared/streams_polyfill.js +21 -17
- package/lib/shared/url_polyfill.js +56 -0
- package/lib/shared/util.js +295 -650
- package/lib/test/unit/annotation_spec.js +629 -345
- package/lib/test/unit/api_spec.js +555 -253
- package/lib/test/unit/bidi_spec.js +7 -7
- package/lib/test/unit/cff_parser_spec.js +40 -11
- package/lib/test/unit/clitests_helper.js +9 -7
- package/lib/test/unit/cmap_spec.js +80 -26
- package/lib/test/unit/colorspace_spec.js +99 -52
- package/lib/test/unit/crypto_spec.js +17 -5
- package/lib/test/unit/custom_spec.js +41 -53
- package/lib/test/unit/display_svg_spec.js +33 -17
- package/lib/test/unit/document_spec.js +3 -3
- package/lib/test/unit/dom_utils_spec.js +9 -9
- package/lib/test/unit/encodings_spec.js +25 -45
- package/lib/test/unit/evaluator_spec.js +34 -9
- package/lib/test/unit/function_spec.js +17 -5
- package/lib/test/unit/jasmine-boot.js +31 -18
- package/lib/test/unit/{util_stream_spec.js → message_handler_spec.js} +41 -69
- package/lib/test/unit/metadata_spec.js +71 -11
- package/lib/test/unit/murmurhash3_spec.js +3 -3
- package/lib/test/unit/network_spec.js +20 -5
- package/lib/test/unit/network_utils_spec.js +41 -14
- package/lib/test/unit/node_stream_spec.js +51 -27
- package/lib/test/unit/parser_spec.js +35 -8
- package/lib/test/unit/pdf_find_controller_spec.js +230 -0
- package/lib/test/unit/pdf_find_utils_spec.js +63 -0
- package/lib/test/unit/pdf_history_spec.js +21 -9
- package/lib/test/unit/primitives_spec.js +24 -4
- package/lib/test/unit/stream_spec.js +12 -4
- package/lib/test/unit/test_utils.js +90 -27
- package/lib/test/unit/testreporter.js +21 -3
- package/lib/test/unit/type1_parser_spec.js +8 -6
- package/lib/test/unit/ui_utils_spec.js +452 -14
- package/lib/test/unit/unicode_spec.js +14 -11
- package/lib/test/unit/util_spec.js +131 -9
- package/lib/web/annotation_layer_builder.js +39 -22
- package/lib/web/app.js +1240 -582
- package/lib/web/app_options.js +71 -41
- package/lib/web/base_viewer.js +508 -179
- package/lib/web/chromecom.js +261 -117
- package/lib/web/debugger.js +166 -22
- package/lib/web/download_manager.js +31 -13
- package/lib/web/firefox_print_service.js +17 -9
- package/lib/web/firefoxcom.js +283 -79
- package/lib/web/genericcom.js +89 -30
- package/lib/web/genericl10n.js +142 -30
- package/lib/web/grab_to_pan.js +26 -4
- package/lib/web/interfaces.js +170 -47
- package/lib/web/overlay_manager.js +235 -85
- package/lib/web/password_prompt.js +21 -13
- package/lib/web/pdf_attachment_viewer.js +38 -18
- package/lib/web/pdf_cursor_tools.js +39 -16
- package/lib/web/pdf_document_properties.js +80 -30
- package/lib/web/pdf_find_bar.js +84 -40
- package/lib/web/pdf_find_controller.js +495 -184
- package/lib/web/pdf_find_utils.js +111 -0
- package/lib/web/pdf_history.js +190 -53
- package/lib/web/pdf_link_service.js +137 -76
- package/lib/web/pdf_outline_viewer.js +73 -22
- package/lib/web/pdf_page_view.js +196 -63
- package/lib/web/pdf_presentation_mode.js +99 -34
- package/lib/web/pdf_print_service.js +57 -11
- package/lib/web/pdf_rendering_queue.js +27 -5
- package/lib/web/pdf_sidebar.js +120 -67
- package/lib/web/pdf_sidebar_resizer.js +42 -16
- package/lib/web/pdf_single_page_viewer.js +74 -66
- package/lib/web/pdf_thumbnail_view.js +103 -32
- package/lib/web/pdf_thumbnail_viewer.js +64 -24
- package/lib/web/pdf_viewer.component.js +112 -32
- package/lib/web/pdf_viewer.js +91 -52
- package/lib/web/preferences.js +275 -80
- package/lib/web/secondary_toolbar.js +165 -40
- package/lib/web/text_layer_builder.js +162 -65
- package/lib/web/toolbar.js +78 -43
- package/lib/web/ui_utils.js +462 -136
- package/lib/web/view_history.js +215 -67
- package/lib/web/viewer_compatibility.js +4 -13
- package/package.json +5 -4
- package/web/pdf_viewer.css +58 -1
- package/web/pdf_viewer.js +6346 -3919
- package/web/pdf_viewer.js.map +1 -1
- package/lib/test/unit/fonts_spec.js +0 -81
- 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
|
5
|
+
* Copyright 2018 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,25 +19,34 @@
|
|
19
19
|
* @licend The above is the entire license notice for the
|
20
20
|
* Javascript code in this page
|
21
21
|
*/
|
22
|
-
|
22
|
+
"use strict";
|
23
23
|
|
24
|
-
var
|
24
|
+
var _util = require("../../shared/util");
|
25
25
|
|
26
|
-
var
|
26
|
+
var _is_node = _interopRequireDefault(require("../../shared/is_node"));
|
27
27
|
|
28
|
-
var
|
28
|
+
var _node_stream = require("../../display/node_stream");
|
29
29
|
|
30
|
-
|
30
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
31
31
|
|
32
|
-
|
32
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }
|
33
33
|
|
34
|
-
function
|
34
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }
|
35
|
+
|
36
|
+
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; }
|
37
|
+
|
38
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
39
|
+
|
40
|
+
(0, _util.assert)((0, _is_node.default)());
|
35
41
|
|
36
|
-
(0, _util.assert)((0, _is_node2.default)());
|
37
42
|
var path = require('path');
|
43
|
+
|
38
44
|
var url = require('url');
|
45
|
+
|
39
46
|
var http = require('http');
|
47
|
+
|
40
48
|
var fs = require('fs');
|
49
|
+
|
41
50
|
describe('node_stream', function () {
|
42
51
|
var server = null;
|
43
52
|
var port = null;
|
@@ -49,9 +58,10 @@ describe('node_stream', function () {
|
|
49
58
|
fs.lstat(filePath, function (error, stat) {
|
50
59
|
if (error) {
|
51
60
|
response.writeHead(404);
|
52
|
-
response.end(
|
61
|
+
response.end("File ".concat(request.url, " not found!"));
|
53
62
|
return;
|
54
63
|
}
|
64
|
+
|
55
65
|
if (!request.headers['range']) {
|
56
66
|
var contentLength = stat.size;
|
57
67
|
var stream = fs.createReadStream(filePath);
|
@@ -73,7 +83,11 @@ describe('node_stream', function () {
|
|
73
83
|
start: start,
|
74
84
|
end: end
|
75
85
|
});
|
76
|
-
|
86
|
+
|
87
|
+
response.writeHead(206, {
|
88
|
+
'Content-Type': 'application/pdf'
|
89
|
+
});
|
90
|
+
|
77
91
|
_stream.pipe(response);
|
78
92
|
}
|
79
93
|
});
|
@@ -87,7 +101,7 @@ describe('node_stream', function () {
|
|
87
101
|
});
|
88
102
|
it('read both http(s) and filesystem pdf files', function (done) {
|
89
103
|
var stream1 = new _node_stream.PDFNodeStream({
|
90
|
-
url:
|
104
|
+
url: "http://127.0.0.1:".concat(port, "/tracemonkey.pdf"),
|
91
105
|
rangeChunkSize: 65536,
|
92
106
|
disableStream: true,
|
93
107
|
disableRange: true
|
@@ -100,38 +114,41 @@ describe('node_stream', function () {
|
|
100
114
|
});
|
101
115
|
var fullReader1 = stream1.getFullReader();
|
102
116
|
var fullReader2 = stream2.getFullReader();
|
103
|
-
var isStreamingSupported1
|
104
|
-
isRangeSupported1 = void 0;
|
117
|
+
var isStreamingSupported1, isRangeSupported1;
|
105
118
|
var promise1 = fullReader1.headersReady.then(function () {
|
106
119
|
isStreamingSupported1 = fullReader1.isStreamingSupported;
|
107
120
|
isRangeSupported1 = fullReader1.isRangeSupported;
|
108
121
|
});
|
109
|
-
var isStreamingSupported2
|
110
|
-
isRangeSupported2 = void 0;
|
122
|
+
var isStreamingSupported2, isRangeSupported2;
|
111
123
|
var promise2 = fullReader2.headersReady.then(function () {
|
112
124
|
isStreamingSupported2 = fullReader2.isStreamingSupported;
|
113
125
|
isRangeSupported2 = fullReader2.isRangeSupported;
|
114
126
|
});
|
115
127
|
var len1 = 0,
|
116
128
|
len2 = 0;
|
129
|
+
|
117
130
|
var read1 = function read1() {
|
118
131
|
return fullReader1.read().then(function (result) {
|
119
132
|
if (result.done) {
|
120
133
|
return;
|
121
134
|
}
|
135
|
+
|
122
136
|
len1 += result.value.byteLength;
|
123
137
|
return read1();
|
124
138
|
});
|
125
139
|
};
|
140
|
+
|
126
141
|
var read2 = function read2() {
|
127
142
|
return fullReader2.read().then(function (result) {
|
128
143
|
if (result.done) {
|
129
144
|
return;
|
130
145
|
}
|
146
|
+
|
131
147
|
len2 += result.value.byteLength;
|
132
148
|
return read2();
|
133
149
|
});
|
134
150
|
};
|
151
|
+
|
135
152
|
var readPromise = Promise.all([read1(), read2(), promise1, promise2]);
|
136
153
|
readPromise.then(function (result) {
|
137
154
|
expect(isStreamingSupported1).toEqual(false);
|
@@ -148,7 +165,7 @@ describe('node_stream', function () {
|
|
148
165
|
it('read custom ranges for both http(s) and filesystem urls', function (done) {
|
149
166
|
var rangeSize = 32768;
|
150
167
|
var stream1 = new _node_stream.PDFNodeStream({
|
151
|
-
url:
|
168
|
+
url: "http://127.0.0.1:".concat(port, "/tracemonkey.pdf"),
|
152
169
|
length: pdfLength,
|
153
170
|
rangeChunkSize: rangeSize,
|
154
171
|
disableStream: true,
|
@@ -163,12 +180,8 @@ describe('node_stream', function () {
|
|
163
180
|
});
|
164
181
|
var fullReader1 = stream1.getFullReader();
|
165
182
|
var fullReader2 = stream2.getFullReader();
|
166
|
-
var isStreamingSupported1
|
167
|
-
|
168
|
-
fullReaderCancelled1 = void 0;
|
169
|
-
var isStreamingSupported2 = void 0,
|
170
|
-
isRangeSupported2 = void 0,
|
171
|
-
fullReaderCancelled2 = void 0;
|
183
|
+
var isStreamingSupported1, isRangeSupported1, fullReaderCancelled1;
|
184
|
+
var isStreamingSupported2, isRangeSupported2, fullReaderCancelled2;
|
172
185
|
var promise1 = fullReader1.headersReady.then(function () {
|
173
186
|
isStreamingSupported1 = fullReader1.isStreamingSupported;
|
174
187
|
isRangeSupported1 = fullReader1.isRangeSupported;
|
@@ -186,19 +199,30 @@ describe('node_stream', function () {
|
|
186
199
|
var range12Reader = stream1.getRangeReader(pdfLength - tailSize, pdfLength);
|
187
200
|
var range21Reader = stream2.getRangeReader(pdfLength - tailSize - rangeSize, pdfLength - tailSize);
|
188
201
|
var range22Reader = stream2.getRangeReader(pdfLength - tailSize, pdfLength);
|
189
|
-
var result11 = {
|
190
|
-
|
191
|
-
|
192
|
-
|
202
|
+
var result11 = {
|
203
|
+
value: 0
|
204
|
+
},
|
205
|
+
result12 = {
|
206
|
+
value: 0
|
207
|
+
};
|
208
|
+
var result21 = {
|
209
|
+
value: 0
|
210
|
+
},
|
211
|
+
result22 = {
|
212
|
+
value: 0
|
213
|
+
};
|
214
|
+
|
193
215
|
var read = function read(reader, lenResult) {
|
194
216
|
return reader.read().then(function (result) {
|
195
217
|
if (result.done) {
|
196
218
|
return;
|
197
219
|
}
|
220
|
+
|
198
221
|
lenResult.value += result.value.byteLength;
|
199
222
|
return read(reader, lenResult);
|
200
223
|
});
|
201
224
|
};
|
225
|
+
|
202
226
|
var readPromises = Promise.all([read(range11Reader, result11), read(range12Reader, result12), read(range21Reader, result21), read(range22Reader, result22), promise1, promise2]);
|
203
227
|
readPromises.then(function () {
|
204
228
|
expect(result11.value).toEqual(rangeSize);
|
@@ -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
|
5
|
+
* Copyright 2018 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,13 +19,15 @@
|
|
19
19
|
* @licend The above is the entire license notice for the
|
20
20
|
* Javascript code in this page
|
21
21
|
*/
|
22
|
-
|
22
|
+
"use strict";
|
23
23
|
|
24
|
-
var _parser = require(
|
24
|
+
var _parser = require("../../core/parser");
|
25
25
|
|
26
|
-
var
|
26
|
+
var _util = require("../../shared/util");
|
27
27
|
|
28
|
-
var
|
28
|
+
var _primitives = require("../../core/primitives");
|
29
|
+
|
30
|
+
var _stream = require("../../core/stream");
|
29
31
|
|
30
32
|
describe('parser', function () {
|
31
33
|
describe('Lexer', function () {
|
@@ -37,6 +39,7 @@ describe('parser', function () {
|
|
37
39
|
});
|
38
40
|
it('should parse PostScript numbers', function () {
|
39
41
|
var numbers = ['-.002', '34.5', '-3.62', '123.6e10', '1E-5', '-1.', '0.0', '123', '-98', '43445', '0', '+17'];
|
42
|
+
|
40
43
|
for (var i = 0, ii = numbers.length; i < ii; i++) {
|
41
44
|
var num = numbers[i];
|
42
45
|
var input = new _stream.StringStream(num);
|
@@ -58,10 +61,31 @@ describe('parser', function () {
|
|
58
61
|
expect(result).toEqual(205.88);
|
59
62
|
});
|
60
63
|
it('should ignore line-breaks between operator and digit in number', function () {
|
61
|
-
var
|
64
|
+
var minusInput = new _stream.StringStream('-\r\n205.88');
|
65
|
+
var minusLexer = new _parser.Lexer(minusInput);
|
66
|
+
expect(minusLexer.getNumber()).toEqual(-205.88);
|
67
|
+
var plusInput = new _stream.StringStream('+\r\n205.88');
|
68
|
+
var plusLexer = new _parser.Lexer(plusInput);
|
69
|
+
expect(plusLexer.getNumber()).toEqual(205.88);
|
70
|
+
});
|
71
|
+
it('should treat a single decimal point as zero', function () {
|
72
|
+
var input = new _stream.StringStream('.');
|
62
73
|
var lexer = new _parser.Lexer(input);
|
63
|
-
|
64
|
-
|
74
|
+
expect(lexer.getNumber()).toEqual(0);
|
75
|
+
var numbers = ['..', '-.', '+.', '-\r\n.', '+\r\n.'];
|
76
|
+
|
77
|
+
var _loop = function _loop() {
|
78
|
+
var number = numbers[_i];
|
79
|
+
var input = new _stream.StringStream(number);
|
80
|
+
var lexer = new _parser.Lexer(input);
|
81
|
+
expect(function () {
|
82
|
+
return lexer.getNumber();
|
83
|
+
}).toThrowError(_util.FormatError, /^Invalid number:\s/);
|
84
|
+
};
|
85
|
+
|
86
|
+
for (var _i = 0; _i < numbers.length; _i++) {
|
87
|
+
_loop();
|
88
|
+
}
|
65
89
|
});
|
66
90
|
it('should handle glued numbers and operators', function () {
|
67
91
|
var input = new _stream.StringStream('123ET');
|
@@ -72,10 +96,12 @@ describe('parser', function () {
|
|
72
96
|
});
|
73
97
|
it('should stop parsing strings at the end of stream', function () {
|
74
98
|
var input = new _stream.StringStream('(1$4)');
|
99
|
+
|
75
100
|
input.getByte = function (super_getByte) {
|
76
101
|
var ch = super_getByte.call(input);
|
77
102
|
return ch === 0x24 ? -1 : ch;
|
78
103
|
}.bind(input, input.getByte);
|
104
|
+
|
79
105
|
var lexer = new _parser.Lexer(input);
|
80
106
|
var result = lexer.getString();
|
81
107
|
expect(result).toEqual('1');
|
@@ -95,6 +121,7 @@ describe('parser', function () {
|
|
95
121
|
it('should handle Names with invalid usage of NUMBER SIGN (#)', function () {
|
96
122
|
var inputNames = ['/# 680 0 R', '/#AQwerty', '/#A<</B'];
|
97
123
|
var expectedNames = ['#', '#AQwerty', '#A'];
|
124
|
+
|
98
125
|
for (var i = 0, ii = inputNames.length; i < ii; i++) {
|
99
126
|
var input = new _stream.StringStream(inputNames[i]);
|
100
127
|
var lexer = new _parser.Lexer(input);
|
@@ -0,0 +1,230 @@
|
|
1
|
+
/**
|
2
|
+
* @licstart The following is the entire license notice for the
|
3
|
+
* Javascript code in this page
|
4
|
+
*
|
5
|
+
* Copyright 2018 Mozilla Foundation
|
6
|
+
*
|
7
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
+
* you may not use this file except in compliance with the License.
|
9
|
+
* You may obtain a copy of the License at
|
10
|
+
*
|
11
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
*
|
13
|
+
* Unless required by applicable law or agreed to in writing, software
|
14
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
+
* See the License for the specific language governing permissions and
|
17
|
+
* limitations under the License.
|
18
|
+
*
|
19
|
+
* @licend The above is the entire license notice for the
|
20
|
+
* Javascript code in this page
|
21
|
+
*/
|
22
|
+
"use strict";
|
23
|
+
|
24
|
+
var _test_utils = require("./test_utils");
|
25
|
+
|
26
|
+
var _ui_utils = require("../../web/ui_utils");
|
27
|
+
|
28
|
+
var _api = require("../../display/api");
|
29
|
+
|
30
|
+
var _pdf_find_controller = require("../../web/pdf_find_controller");
|
31
|
+
|
32
|
+
var _pdf_link_service = require("../../web/pdf_link_service");
|
33
|
+
|
34
|
+
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); }
|
35
|
+
|
36
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
37
|
+
|
38
|
+
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); } }
|
39
|
+
|
40
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
41
|
+
|
42
|
+
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
|
43
|
+
|
44
|
+
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
45
|
+
|
46
|
+
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
47
|
+
|
48
|
+
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
49
|
+
|
50
|
+
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
51
|
+
|
52
|
+
var MockLinkService =
|
53
|
+
/*#__PURE__*/
|
54
|
+
function (_SimpleLinkService) {
|
55
|
+
_inherits(MockLinkService, _SimpleLinkService);
|
56
|
+
|
57
|
+
function MockLinkService() {
|
58
|
+
var _this;
|
59
|
+
|
60
|
+
_classCallCheck(this, MockLinkService);
|
61
|
+
|
62
|
+
_this = _possibleConstructorReturn(this, _getPrototypeOf(MockLinkService).call(this));
|
63
|
+
_this._page = 1;
|
64
|
+
_this._pdfDocument = null;
|
65
|
+
return _this;
|
66
|
+
}
|
67
|
+
|
68
|
+
_createClass(MockLinkService, [{
|
69
|
+
key: "setDocument",
|
70
|
+
value: function setDocument(pdfDocument) {
|
71
|
+
this._pdfDocument = pdfDocument;
|
72
|
+
}
|
73
|
+
}, {
|
74
|
+
key: "pagesCount",
|
75
|
+
get: function get() {
|
76
|
+
return this._pdfDocument.numPages;
|
77
|
+
}
|
78
|
+
}, {
|
79
|
+
key: "page",
|
80
|
+
get: function get() {
|
81
|
+
return this._page;
|
82
|
+
},
|
83
|
+
set: function set(value) {
|
84
|
+
this._page = value;
|
85
|
+
}
|
86
|
+
}]);
|
87
|
+
|
88
|
+
return MockLinkService;
|
89
|
+
}(_pdf_link_service.SimpleLinkService);
|
90
|
+
|
91
|
+
describe('pdf_find_controller', function () {
|
92
|
+
var eventBus;
|
93
|
+
var pdfFindController;
|
94
|
+
beforeEach(function (done) {
|
95
|
+
var loadingTask = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)('tracemonkey.pdf'));
|
96
|
+
loadingTask.promise.then(function (pdfDocument) {
|
97
|
+
eventBus = new _ui_utils.EventBus();
|
98
|
+
var linkService = new MockLinkService();
|
99
|
+
linkService.setDocument(pdfDocument);
|
100
|
+
pdfFindController = new _pdf_find_controller.PDFFindController({
|
101
|
+
linkService: linkService,
|
102
|
+
eventBus: eventBus
|
103
|
+
});
|
104
|
+
pdfFindController.setDocument(pdfDocument);
|
105
|
+
done();
|
106
|
+
});
|
107
|
+
});
|
108
|
+
afterEach(function () {
|
109
|
+
eventBus = null;
|
110
|
+
pdfFindController = null;
|
111
|
+
});
|
112
|
+
|
113
|
+
function testSearch(_ref) {
|
114
|
+
var parameters = _ref.parameters,
|
115
|
+
matchesPerPage = _ref.matchesPerPage,
|
116
|
+
selectedMatch = _ref.selectedMatch;
|
117
|
+
return new Promise(function (resolve) {
|
118
|
+
pdfFindController.executeCommand('find', parameters);
|
119
|
+
var totalPages = matchesPerPage.length;
|
120
|
+
|
121
|
+
for (var i = totalPages - 1; i >= 0; i--) {
|
122
|
+
if (matchesPerPage[i] > 0) {
|
123
|
+
totalPages = i + 1;
|
124
|
+
break;
|
125
|
+
}
|
126
|
+
}
|
127
|
+
|
128
|
+
var totalMatches = matchesPerPage.reduce(function (a, b) {
|
129
|
+
return a + b;
|
130
|
+
});
|
131
|
+
eventBus.on('updatefindmatchescount', function onUpdateFindMatchesCount(evt) {
|
132
|
+
if (pdfFindController.pageMatches.length !== totalPages) {
|
133
|
+
return;
|
134
|
+
}
|
135
|
+
|
136
|
+
eventBus.off('updatefindmatchescount', onUpdateFindMatchesCount);
|
137
|
+
expect(evt.matchesCount.total).toBe(totalMatches);
|
138
|
+
|
139
|
+
for (var _i = 0; _i < totalPages; _i++) {
|
140
|
+
expect(pdfFindController.pageMatches[_i].length).toEqual(matchesPerPage[_i]);
|
141
|
+
}
|
142
|
+
|
143
|
+
expect(pdfFindController.selected.pageIdx).toEqual(selectedMatch.pageIndex);
|
144
|
+
expect(pdfFindController.selected.matchIdx).toEqual(selectedMatch.matchIndex);
|
145
|
+
resolve();
|
146
|
+
});
|
147
|
+
});
|
148
|
+
}
|
149
|
+
|
150
|
+
it('performs a normal search', function (done) {
|
151
|
+
testSearch({
|
152
|
+
parameters: {
|
153
|
+
query: 'Dynamic',
|
154
|
+
caseSensitive: false,
|
155
|
+
entireWord: false,
|
156
|
+
phraseSearch: true,
|
157
|
+
findPrevious: false
|
158
|
+
},
|
159
|
+
matchesPerPage: [11, 5, 0, 3, 0, 0, 0, 1, 1, 1, 0, 3, 4, 4],
|
160
|
+
selectedMatch: {
|
161
|
+
pageIndex: 0,
|
162
|
+
matchIndex: 0
|
163
|
+
}
|
164
|
+
}).then(done);
|
165
|
+
});
|
166
|
+
it('performs a normal search and finds the previous result', function (done) {
|
167
|
+
testSearch({
|
168
|
+
parameters: {
|
169
|
+
query: 'conference',
|
170
|
+
caseSensitive: false,
|
171
|
+
entireWord: false,
|
172
|
+
phraseSearch: true,
|
173
|
+
findPrevious: true
|
174
|
+
},
|
175
|
+
matchesPerPage: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5],
|
176
|
+
selectedMatch: {
|
177
|
+
pageIndex: 13,
|
178
|
+
matchIndex: 4
|
179
|
+
}
|
180
|
+
}).then(done);
|
181
|
+
});
|
182
|
+
it('performs a case sensitive search', function (done) {
|
183
|
+
testSearch({
|
184
|
+
parameters: {
|
185
|
+
query: 'Dynamic',
|
186
|
+
caseSensitive: true,
|
187
|
+
entireWord: false,
|
188
|
+
phraseSearch: true,
|
189
|
+
findPrevious: false
|
190
|
+
},
|
191
|
+
matchesPerPage: [3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3],
|
192
|
+
selectedMatch: {
|
193
|
+
pageIndex: 0,
|
194
|
+
matchIndex: 0
|
195
|
+
}
|
196
|
+
}).then(done);
|
197
|
+
});
|
198
|
+
it('performs an entire word search', function (done) {
|
199
|
+
testSearch({
|
200
|
+
parameters: {
|
201
|
+
query: 'Government',
|
202
|
+
caseSensitive: false,
|
203
|
+
entireWord: true,
|
204
|
+
phraseSearch: true,
|
205
|
+
findPrevious: false
|
206
|
+
},
|
207
|
+
matchesPerPage: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0],
|
208
|
+
selectedMatch: {
|
209
|
+
pageIndex: 12,
|
210
|
+
matchIndex: 0
|
211
|
+
}
|
212
|
+
}).then(done);
|
213
|
+
});
|
214
|
+
it('performs a multiple term (no phrase) search', function (done) {
|
215
|
+
testSearch({
|
216
|
+
parameters: {
|
217
|
+
query: 'alternate solution',
|
218
|
+
caseSensitive: false,
|
219
|
+
entireWord: false,
|
220
|
+
phraseSearch: false,
|
221
|
+
findPrevious: false
|
222
|
+
},
|
223
|
+
matchesPerPage: [0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0],
|
224
|
+
selectedMatch: {
|
225
|
+
pageIndex: 5,
|
226
|
+
matchIndex: 0
|
227
|
+
}
|
228
|
+
}).then(done);
|
229
|
+
});
|
230
|
+
});
|
@@ -0,0 +1,63 @@
|
|
1
|
+
/**
|
2
|
+
* @licstart The following is the entire license notice for the
|
3
|
+
* Javascript code in this page
|
4
|
+
*
|
5
|
+
* Copyright 2018 Mozilla Foundation
|
6
|
+
*
|
7
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
+
* you may not use this file except in compliance with the License.
|
9
|
+
* You may obtain a copy of the License at
|
10
|
+
*
|
11
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
*
|
13
|
+
* Unless required by applicable law or agreed to in writing, software
|
14
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
+
* See the License for the specific language governing permissions and
|
17
|
+
* limitations under the License.
|
18
|
+
*
|
19
|
+
* @licend The above is the entire license notice for the
|
20
|
+
* Javascript code in this page
|
21
|
+
*/
|
22
|
+
"use strict";
|
23
|
+
|
24
|
+
var _pdf_find_utils = require("../../web/pdf_find_utils");
|
25
|
+
|
26
|
+
describe('pdf_find_utils', function () {
|
27
|
+
describe('getCharacterType', function () {
|
28
|
+
it('gets expected character types', function () {
|
29
|
+
var characters = {
|
30
|
+
'A': _pdf_find_utils.CharacterType.ALPHA_LETTER,
|
31
|
+
'a': _pdf_find_utils.CharacterType.ALPHA_LETTER,
|
32
|
+
'0': _pdf_find_utils.CharacterType.ALPHA_LETTER,
|
33
|
+
'5': _pdf_find_utils.CharacterType.ALPHA_LETTER,
|
34
|
+
'\xC4': _pdf_find_utils.CharacterType.ALPHA_LETTER,
|
35
|
+
'\xE4': _pdf_find_utils.CharacterType.ALPHA_LETTER,
|
36
|
+
'_': _pdf_find_utils.CharacterType.ALPHA_LETTER,
|
37
|
+
' ': _pdf_find_utils.CharacterType.SPACE,
|
38
|
+
'\t': _pdf_find_utils.CharacterType.SPACE,
|
39
|
+
'\r': _pdf_find_utils.CharacterType.SPACE,
|
40
|
+
'\n': _pdf_find_utils.CharacterType.SPACE,
|
41
|
+
'\xA0': _pdf_find_utils.CharacterType.SPACE,
|
42
|
+
'-': _pdf_find_utils.CharacterType.PUNCT,
|
43
|
+
',': _pdf_find_utils.CharacterType.PUNCT,
|
44
|
+
'.': _pdf_find_utils.CharacterType.PUNCT,
|
45
|
+
';': _pdf_find_utils.CharacterType.PUNCT,
|
46
|
+
':': _pdf_find_utils.CharacterType.PUNCT,
|
47
|
+
"\u2122": _pdf_find_utils.CharacterType.ALPHA_LETTER,
|
48
|
+
"\u0E25": _pdf_find_utils.CharacterType.THAI_LETTER,
|
49
|
+
"\u4000": _pdf_find_utils.CharacterType.HAN_LETTER,
|
50
|
+
"\uF950": _pdf_find_utils.CharacterType.HAN_LETTER,
|
51
|
+
"\u30C0": _pdf_find_utils.CharacterType.KATAKANA_LETTER,
|
52
|
+
"\u3050": _pdf_find_utils.CharacterType.HIRAGANA_LETTER,
|
53
|
+
"\uFF80": _pdf_find_utils.CharacterType.HALFWIDTH_KATAKANA_LETTER
|
54
|
+
};
|
55
|
+
|
56
|
+
for (var character in characters) {
|
57
|
+
var charCode = character.charCodeAt(0);
|
58
|
+
var type = characters[character];
|
59
|
+
expect((0, _pdf_find_utils.getCharacterType)(charCode)).toEqual(type);
|
60
|
+
}
|
61
|
+
});
|
62
|
+
});
|
63
|
+
});
|
@@ -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
|
5
|
+
* Copyright 2018 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,9 +19,9 @@
|
|
19
19
|
* @licend The above is the entire license notice for the
|
20
20
|
* Javascript code in this page
|
21
21
|
*/
|
22
|
-
|
22
|
+
"use strict";
|
23
23
|
|
24
|
-
var _pdf_history = require(
|
24
|
+
var _pdf_history = require("../../web/pdf_history");
|
25
25
|
|
26
26
|
describe('pdf_history', function () {
|
27
27
|
describe('isDestHashesEqual', function () {
|
@@ -34,7 +34,9 @@ describe('pdf_history', function () {
|
|
34
34
|
var destArrayString = JSON.stringify([{
|
35
35
|
num: 3757,
|
36
36
|
gen: 0
|
37
|
-
}, {
|
37
|
+
}, {
|
38
|
+
name: 'XYZ'
|
39
|
+
}, 92.918, 748.972, null]);
|
38
40
|
expect((0, _pdf_history.isDestHashesEqual)(destArrayString, 'page.157')).toEqual(false);
|
39
41
|
expect((0, _pdf_history.isDestHashesEqual)('page.157', destArrayString)).toEqual(false);
|
40
42
|
});
|
@@ -48,23 +50,33 @@ describe('pdf_history', function () {
|
|
48
50
|
var firstDest = [{
|
49
51
|
num: 1,
|
50
52
|
gen: 0
|
51
|
-
}, {
|
53
|
+
}, {
|
54
|
+
name: 'XYZ'
|
55
|
+
}, 0, 375, null];
|
52
56
|
var secondDest = [{
|
53
57
|
num: 5,
|
54
58
|
gen: 0
|
55
|
-
}, {
|
59
|
+
}, {
|
60
|
+
name: 'XYZ'
|
61
|
+
}, 0, 375, null];
|
56
62
|
var thirdDest = [{
|
57
63
|
num: 1,
|
58
64
|
gen: 0
|
59
|
-
}, {
|
65
|
+
}, {
|
66
|
+
name: 'XYZ'
|
67
|
+
}, 750, 0, null];
|
60
68
|
var fourthDest = [{
|
61
69
|
num: 1,
|
62
70
|
gen: 0
|
63
|
-
}, {
|
71
|
+
}, {
|
72
|
+
name: 'XYZ'
|
73
|
+
}, 0, 375, 1.0];
|
64
74
|
var fifthDest = [{
|
65
75
|
gen: 0,
|
66
76
|
num: 1
|
67
|
-
}, {
|
77
|
+
}, {
|
78
|
+
name: 'XYZ'
|
79
|
+
}, 0, 375, null];
|
68
80
|
it('should reject non-equal destination arrays', function () {
|
69
81
|
expect((0, _pdf_history.isDestArraysEqual)(firstDest, undefined)).toEqual(false);
|
70
82
|
expect((0, _pdf_history.isDestArraysEqual)(firstDest, [1, 2, 3, 4, 5])).toEqual(false);
|