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.
- package/CODE_OF_CONDUCT.md +15 -0
- package/README.md +4 -0
- package/bower.json +1 -1
- package/build/pdf.js +8286 -14230
- package/build/pdf.js.map +1 -1
- package/build/pdf.min.js +22 -1
- package/build/pdf.worker.entry.js +5 -3
- package/build/pdf.worker.js +25500 -26628
- package/build/pdf.worker.js.map +1 -1
- package/build/pdf.worker.min.js +22 -1
- package/es5/build/pdf.js +25473 -0
- package/es5/build/pdf.js.map +1 -0
- package/{lib/shared/global_scope.js → es5/build/pdf.worker.entry.js} +5 -10
- package/es5/build/pdf.worker.js +57878 -0
- package/es5/build/pdf.worker.js.map +1 -0
- package/es5/web/images/annotation-check.svg +11 -0
- package/es5/web/images/annotation-comment.svg +16 -0
- package/es5/web/images/annotation-help.svg +26 -0
- package/es5/web/images/annotation-insert.svg +10 -0
- package/es5/web/images/annotation-key.svg +11 -0
- package/es5/web/images/annotation-newparagraph.svg +11 -0
- package/es5/web/images/annotation-noicon.svg +7 -0
- package/es5/web/images/annotation-note.svg +42 -0
- package/es5/web/images/annotation-paragraph.svg +16 -0
- package/es5/web/images/loading-icon.gif +0 -0
- package/es5/web/images/shadow.png +0 -0
- package/es5/web/images/texture.png +0 -0
- package/es5/web/pdf_viewer.css +407 -0
- package/es5/web/pdf_viewer.js +7757 -0
- package/es5/web/pdf_viewer.js.map +1 -0
- package/image_decoders/pdf.image_decoders.js +2887 -4094
- package/image_decoders/pdf.image_decoders.js.map +1 -1
- package/image_decoders/pdf.image_decoders.min.js +22 -1
- package/lib/README.md +7 -0
- package/lib/core/annotation.js +855 -778
- package/lib/core/arithmetic_decoder.js +325 -311
- package/lib/core/bidi.js +117 -50
- package/lib/core/ccitt.js +251 -89
- package/lib/core/ccitt_stream.js +26 -16
- package/lib/core/cff_parser.js +525 -197
- package/lib/core/charsets.js +6 -5
- package/lib/core/chunked_stream.js +541 -406
- package/lib/core/cmap.js +368 -253
- package/lib/core/colorspace.js +781 -800
- package/lib/core/core_utils.js +152 -0
- package/lib/core/crypto.js +609 -422
- package/lib/core/document.js +649 -481
- package/lib/core/encodings.js +33 -24
- package/lib/core/evaluator.js +1471 -736
- package/lib/core/font_renderer.js +289 -149
- package/lib/core/fonts.js +1067 -413
- package/lib/core/function.js +517 -287
- package/lib/core/glyphlist.js +4529 -4527
- package/lib/core/image.js +232 -114
- package/lib/core/image_utils.js +94 -0
- package/lib/core/jbig2.js +711 -342
- package/lib/core/jbig2_stream.js +31 -19
- package/lib/core/jpeg_stream.js +151 -26
- package/lib/core/jpg.js +433 -181
- package/lib/core/jpx.js +551 -143
- package/lib/core/jpx_stream.js +40 -28
- package/lib/core/metrics.js +2931 -2931
- package/lib/core/murmurhash3.js +104 -97
- package/lib/core/obj.js +1561 -1053
- package/lib/core/operator_list.js +192 -64
- package/lib/core/parser.js +1162 -864
- package/lib/core/pattern.js +224 -75
- package/lib/core/pdf_manager.js +154 -285
- package/lib/core/primitives.js +145 -69
- package/lib/core/ps_parser.js +212 -162
- package/lib/core/standard_fonts.js +245 -244
- package/lib/core/stream.js +353 -81
- package/lib/core/type1_parser.js +218 -68
- package/lib/core/unicode.js +1682 -1655
- package/lib/core/worker.js +233 -302
- package/lib/core/worker_stream.js +168 -0
- package/lib/display/annotation_layer.js +808 -862
- package/lib/display/api.js +1778 -1462
- package/lib/display/api_compatibility.js +14 -9
- package/lib/display/canvas.js +463 -140
- package/lib/display/content_disposition.js +86 -58
- package/lib/display/display_utils.js +524 -0
- package/lib/display/fetch_stream.js +202 -274
- package/lib/display/font_loader.js +311 -333
- package/lib/display/metadata.js +98 -88
- package/lib/display/network.js +343 -347
- package/lib/display/network_utils.js +46 -26
- package/lib/display/node_stream.js +326 -404
- package/lib/display/pattern_helper.js +168 -69
- package/lib/display/svg.js +1296 -885
- package/lib/display/text_layer.js +229 -103
- package/lib/display/transport_stream.js +290 -250
- package/lib/display/webgl.js +116 -83
- package/lib/display/worker_options.js +6 -5
- package/lib/display/xml_parser.js +358 -337
- package/lib/examples/node/domstubs.js +95 -39
- package/lib/pdf.js +49 -31
- package/lib/pdf.worker.js +7 -5
- package/lib/shared/compatibility.js +3 -145
- package/lib/shared/is_node.js +8 -7
- package/lib/shared/message_handler.js +367 -314
- package/lib/shared/util.js +421 -415
- package/lib/test/unit/annotation_spec.js +1570 -690
- package/lib/test/unit/api_spec.js +855 -493
- package/lib/test/unit/bidi_spec.js +12 -12
- package/lib/test/unit/cff_parser_spec.js +88 -61
- package/lib/test/unit/clitests_helper.js +9 -12
- package/lib/test/unit/cmap_spec.js +140 -88
- package/lib/test/unit/colorspace_spec.js +204 -152
- package/lib/test/unit/core_utils_spec.js +211 -0
- package/lib/test/unit/crypto_spec.js +194 -182
- package/lib/test/unit/custom_spec.js +50 -64
- package/lib/test/unit/display_svg_spec.js +53 -38
- package/lib/test/unit/display_utils_spec.js +263 -0
- package/lib/test/unit/document_spec.js +17 -22
- package/lib/test/unit/encodings_spec.js +15 -57
- package/lib/test/unit/evaluator_spec.js +90 -83
- package/lib/test/unit/fetch_stream_spec.js +111 -0
- package/lib/test/unit/function_spec.js +219 -205
- package/lib/test/unit/jasmine-boot.js +68 -39
- package/lib/test/unit/message_handler_spec.js +187 -160
- package/lib/test/unit/metadata_spec.js +87 -34
- package/lib/test/unit/murmurhash3_spec.js +13 -13
- package/lib/test/unit/network_spec.js +26 -59
- package/lib/test/unit/network_utils_spec.js +187 -121
- package/lib/test/unit/node_stream_spec.js +98 -90
- package/lib/test/unit/parser_spec.js +173 -131
- package/lib/test/unit/pdf_find_controller_spec.js +148 -67
- package/lib/test/unit/pdf_find_utils_spec.js +35 -34
- package/lib/test/unit/pdf_history_spec.js +45 -33
- package/lib/test/unit/primitives_spec.js +161 -126
- package/lib/test/unit/stream_spec.js +22 -15
- package/lib/test/unit/test_utils.js +149 -98
- package/lib/test/unit/testreporter.js +36 -18
- package/lib/test/unit/type1_parser_spec.js +46 -44
- package/lib/test/unit/ui_utils_spec.js +388 -372
- package/lib/test/unit/unicode_spec.js +49 -46
- package/lib/test/unit/util_spec.js +144 -248
- package/lib/web/annotation_layer_builder.js +75 -95
- package/lib/web/app.js +1538 -1147
- package/lib/web/app_options.js +116 -104
- package/lib/web/base_viewer.js +950 -775
- package/lib/web/chromecom.js +217 -225
- package/lib/web/debugger.js +236 -148
- package/lib/web/download_manager.js +50 -50
- package/lib/web/firefox_print_service.js +51 -33
- package/lib/web/firefoxcom.js +225 -352
- package/lib/web/genericcom.js +30 -93
- package/lib/web/genericl10n.js +26 -143
- package/lib/web/grab_to_pan.js +57 -33
- package/lib/web/interfaces.js +105 -232
- package/lib/web/overlay_manager.js +73 -227
- package/lib/web/password_prompt.js +44 -62
- package/lib/web/pdf_attachment_viewer.js +118 -123
- package/lib/web/pdf_cursor_tools.js +89 -93
- package/lib/web/pdf_document_properties.js +242 -281
- package/lib/web/pdf_find_bar.js +157 -163
- package/lib/web/pdf_find_controller.js +598 -454
- package/lib/web/pdf_find_utils.js +32 -16
- package/lib/web/pdf_history.js +481 -355
- package/lib/web/pdf_link_service.js +355 -323
- package/lib/web/pdf_outline_viewer.js +167 -152
- package/lib/web/pdf_page_view.js +511 -457
- package/lib/web/pdf_presentation_mode.js +347 -335
- package/lib/web/pdf_print_service.js +133 -103
- package/lib/web/pdf_rendering_queue.js +98 -100
- package/lib/web/pdf_sidebar.js +323 -299
- package/lib/web/pdf_sidebar_resizer.js +107 -108
- package/lib/web/pdf_single_page_viewer.js +94 -146
- package/lib/web/pdf_thumbnail_view.js +319 -269
- package/lib/web/pdf_thumbnail_viewer.js +219 -199
- package/lib/web/pdf_viewer.component.js +111 -32
- package/lib/web/pdf_viewer.js +61 -101
- package/lib/web/preferences.js +87 -272
- package/lib/web/secondary_toolbar.js +207 -220
- package/lib/web/text_layer_builder.js +322 -322
- package/lib/web/toolbar.js +227 -180
- package/lib/web/ui_utils.js +476 -421
- package/lib/web/view_history.js +59 -208
- package/lib/web/viewer_compatibility.js +9 -6
- package/package.json +2 -9
- package/web/pdf_viewer.css +36 -22
- package/web/pdf_viewer.js +4407 -4516
- package/web/pdf_viewer.js.map +1 -1
- package/webpack.js +14 -5
- package/external/streams/streams-lib.js +0 -3962
- package/external/url/url-lib.js +0 -627
- package/lib/display/dom_utils.js +0 -441
- package/lib/shared/streams_polyfill.js +0 -39
- package/lib/shared/url_polyfill.js +0 -50
- package/lib/test/unit/dom_utils_spec.js +0 -89
- package/lib/web/dom_events.js +0 -140
package/lib/web/debugger.js
CHANGED
@@ -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 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,146 +19,160 @@
|
|
19
19
|
* @licend The above is the entire license notice for the
|
20
20
|
* Javascript code in this page
|
21
21
|
*/
|
22
|
-
|
23
|
-
|
24
|
-
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; };
|
22
|
+
"use strict";
|
25
23
|
|
26
24
|
var FontInspector = function FontInspectorClosure() {
|
27
|
-
var fonts
|
25
|
+
var fonts;
|
28
26
|
var active = false;
|
29
|
-
var fontAttribute =
|
27
|
+
var fontAttribute = "data-font-name";
|
28
|
+
|
30
29
|
function removeSelection() {
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
div.className =
|
30
|
+
const divs = document.querySelectorAll(`span[${fontAttribute}]`);
|
31
|
+
|
32
|
+
for (const div of divs) {
|
33
|
+
div.className = "";
|
35
34
|
}
|
36
35
|
}
|
36
|
+
|
37
37
|
function resetSelection() {
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
div.className =
|
38
|
+
const divs = document.querySelectorAll(`span[${fontAttribute}]`);
|
39
|
+
|
40
|
+
for (const div of divs) {
|
41
|
+
div.className = "debuggerHideText";
|
42
42
|
}
|
43
43
|
}
|
44
|
+
|
44
45
|
function selectFont(fontName, show) {
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
div.className = show ?
|
46
|
+
const divs = document.querySelectorAll(`span[${fontAttribute}=${fontName}]`);
|
47
|
+
|
48
|
+
for (const div of divs) {
|
49
|
+
div.className = show ? "debuggerShowText" : "debuggerHideText";
|
49
50
|
}
|
50
51
|
}
|
52
|
+
|
51
53
|
function textLayerClick(e) {
|
52
|
-
if (!e.target.dataset.fontName || e.target.tagName.toUpperCase() !==
|
54
|
+
if (!e.target.dataset.fontName || e.target.tagName.toUpperCase() !== "SPAN") {
|
53
55
|
return;
|
54
56
|
}
|
57
|
+
|
55
58
|
var fontName = e.target.dataset.fontName;
|
56
|
-
var selects = document.getElementsByTagName(
|
59
|
+
var selects = document.getElementsByTagName("input");
|
60
|
+
|
57
61
|
for (var i = 0; i < selects.length; ++i) {
|
58
62
|
var select = selects[i];
|
63
|
+
|
59
64
|
if (select.dataset.fontName !== fontName) {
|
60
65
|
continue;
|
61
66
|
}
|
67
|
+
|
62
68
|
select.checked = !select.checked;
|
63
69
|
selectFont(fontName, select.checked);
|
64
70
|
select.scrollIntoView();
|
65
71
|
}
|
66
72
|
}
|
73
|
+
|
67
74
|
return {
|
68
|
-
id:
|
69
|
-
name:
|
75
|
+
id: "FontInspector",
|
76
|
+
name: "Font Inspector",
|
70
77
|
panel: null,
|
71
78
|
manager: null,
|
72
79
|
init: function init(pdfjsLib) {
|
73
80
|
var panel = this.panel;
|
74
|
-
|
75
|
-
|
76
|
-
tmp.
|
77
|
-
tmp.textContent = 'Refresh';
|
81
|
+
var tmp = document.createElement("button");
|
82
|
+
tmp.addEventListener("click", resetSelection);
|
83
|
+
tmp.textContent = "Refresh";
|
78
84
|
panel.appendChild(tmp);
|
79
|
-
fonts = document.createElement(
|
85
|
+
fonts = document.createElement("div");
|
80
86
|
panel.appendChild(fonts);
|
81
|
-
createObjectURL = pdfjsLib.createObjectURL;
|
82
87
|
},
|
83
88
|
cleanup: function cleanup() {
|
84
|
-
fonts.textContent =
|
89
|
+
fonts.textContent = "";
|
85
90
|
},
|
86
91
|
enabled: false,
|
92
|
+
|
87
93
|
get active() {
|
88
94
|
return active;
|
89
95
|
},
|
96
|
+
|
90
97
|
set active(value) {
|
91
98
|
active = value;
|
99
|
+
|
92
100
|
if (active) {
|
93
|
-
document.body.addEventListener(
|
101
|
+
document.body.addEventListener("click", textLayerClick, true);
|
94
102
|
resetSelection();
|
95
103
|
} else {
|
96
|
-
document.body.removeEventListener(
|
104
|
+
document.body.removeEventListener("click", textLayerClick, true);
|
97
105
|
removeSelection();
|
98
106
|
}
|
99
107
|
},
|
100
|
-
fontAdded: function fontAdded(fontObj, url) {
|
101
|
-
var _this = this;
|
102
108
|
|
109
|
+
fontAdded: function fontAdded(fontObj, url) {
|
103
110
|
function properties(obj, list) {
|
104
|
-
var moreInfo = document.createElement(
|
111
|
+
var moreInfo = document.createElement("table");
|
112
|
+
|
105
113
|
for (var i = 0; i < list.length; i++) {
|
106
|
-
var tr = document.createElement(
|
107
|
-
var td1 = document.createElement(
|
114
|
+
var tr = document.createElement("tr");
|
115
|
+
var td1 = document.createElement("td");
|
108
116
|
td1.textContent = list[i];
|
109
117
|
tr.appendChild(td1);
|
110
|
-
var td2 = document.createElement(
|
118
|
+
var td2 = document.createElement("td");
|
111
119
|
td2.textContent = obj[list[i]].toString();
|
112
120
|
tr.appendChild(td2);
|
113
121
|
moreInfo.appendChild(tr);
|
114
122
|
}
|
123
|
+
|
115
124
|
return moreInfo;
|
116
125
|
}
|
117
|
-
|
118
|
-
var
|
119
|
-
|
120
|
-
var
|
126
|
+
|
127
|
+
var moreInfo = properties(fontObj, ["name", "type"]);
|
128
|
+
const fontName = fontObj.loadedName;
|
129
|
+
var font = document.createElement("div");
|
130
|
+
var name = document.createElement("span");
|
121
131
|
name.textContent = fontName;
|
122
|
-
var download = document.createElement(
|
132
|
+
var download = document.createElement("a");
|
133
|
+
|
123
134
|
if (url) {
|
124
135
|
url = /url\(['"]?([^\)"']+)/.exec(url);
|
125
136
|
download.href = url[1];
|
126
137
|
} else if (fontObj.data) {
|
127
|
-
download.href = createObjectURL(fontObj.data,
|
138
|
+
download.href = URL.createObjectURL(new Blob([fontObj.data], {
|
139
|
+
type: fontObj.mimeType
|
140
|
+
}));
|
128
141
|
}
|
129
|
-
|
130
|
-
|
131
|
-
logIt
|
132
|
-
logIt.
|
133
|
-
logIt.
|
142
|
+
|
143
|
+
download.textContent = "Download";
|
144
|
+
var logIt = document.createElement("a");
|
145
|
+
logIt.href = "";
|
146
|
+
logIt.textContent = "Log";
|
147
|
+
logIt.addEventListener("click", function (event) {
|
134
148
|
event.preventDefault();
|
135
149
|
console.log(fontObj);
|
136
150
|
});
|
137
|
-
|
138
|
-
select.setAttribute(
|
151
|
+
const select = document.createElement("input");
|
152
|
+
select.setAttribute("type", "checkbox");
|
139
153
|
select.dataset.fontName = fontName;
|
140
|
-
select.addEventListener(
|
141
|
-
|
142
|
-
|
143
|
-
};
|
144
|
-
}(select, fontName));
|
154
|
+
select.addEventListener("click", function () {
|
155
|
+
selectFont(fontName, select.checked);
|
156
|
+
});
|
145
157
|
font.appendChild(select);
|
146
158
|
font.appendChild(name);
|
147
|
-
font.appendChild(document.createTextNode(
|
159
|
+
font.appendChild(document.createTextNode(" "));
|
148
160
|
font.appendChild(download);
|
149
|
-
font.appendChild(document.createTextNode(
|
161
|
+
font.appendChild(document.createTextNode(" "));
|
150
162
|
font.appendChild(logIt);
|
151
163
|
font.appendChild(moreInfo);
|
152
164
|
fonts.appendChild(font);
|
153
|
-
setTimeout(
|
154
|
-
if (
|
165
|
+
setTimeout(() => {
|
166
|
+
if (this.active) {
|
155
167
|
resetSelection();
|
156
168
|
}
|
157
169
|
}, 2000);
|
158
170
|
}
|
159
171
|
};
|
160
172
|
}();
|
173
|
+
|
161
174
|
var opMap;
|
175
|
+
|
162
176
|
var StepperManager = function StepperManagerClosure() {
|
163
177
|
var steppers = [];
|
164
178
|
var stepperDiv = null;
|
@@ -166,70 +180,79 @@ var StepperManager = function StepperManagerClosure() {
|
|
166
180
|
var stepperChooser = null;
|
167
181
|
var breakPoints = Object.create(null);
|
168
182
|
return {
|
169
|
-
id:
|
170
|
-
name:
|
183
|
+
id: "Stepper",
|
184
|
+
name: "Stepper",
|
171
185
|
panel: null,
|
172
186
|
manager: null,
|
173
187
|
init: function init(pdfjsLib) {
|
174
188
|
var self = this;
|
175
|
-
|
176
|
-
|
177
|
-
stepperChooser
|
178
|
-
stepperChooser.addEventListener('change', function (event) {
|
189
|
+
stepperControls = document.createElement("div");
|
190
|
+
stepperChooser = document.createElement("select");
|
191
|
+
stepperChooser.addEventListener("change", function (event) {
|
179
192
|
self.selectStepper(this.value);
|
180
193
|
});
|
181
194
|
stepperControls.appendChild(stepperChooser);
|
182
|
-
stepperDiv = document.createElement(
|
195
|
+
stepperDiv = document.createElement("div");
|
183
196
|
this.panel.appendChild(stepperControls);
|
184
197
|
this.panel.appendChild(stepperDiv);
|
185
|
-
|
186
|
-
|
198
|
+
|
199
|
+
if (sessionStorage.getItem("pdfjsBreakPoints")) {
|
200
|
+
breakPoints = JSON.parse(sessionStorage.getItem("pdfjsBreakPoints"));
|
187
201
|
}
|
202
|
+
|
188
203
|
opMap = Object.create(null);
|
204
|
+
|
189
205
|
for (var key in pdfjsLib.OPS) {
|
190
206
|
opMap[pdfjsLib.OPS[key]] = key;
|
191
207
|
}
|
192
208
|
},
|
193
209
|
cleanup: function cleanup() {
|
194
|
-
stepperChooser.textContent =
|
195
|
-
stepperDiv.textContent =
|
210
|
+
stepperChooser.textContent = "";
|
211
|
+
stepperDiv.textContent = "";
|
196
212
|
steppers = [];
|
197
213
|
},
|
198
214
|
enabled: false,
|
199
215
|
active: false,
|
200
216
|
create: function create(pageIndex) {
|
201
|
-
var debug = document.createElement(
|
202
|
-
debug.id =
|
203
|
-
debug.setAttribute(
|
204
|
-
debug.className =
|
217
|
+
var debug = document.createElement("div");
|
218
|
+
debug.id = "stepper" + pageIndex;
|
219
|
+
debug.setAttribute("hidden", true);
|
220
|
+
debug.className = "stepper";
|
205
221
|
stepperDiv.appendChild(debug);
|
206
|
-
var b = document.createElement(
|
207
|
-
b.textContent =
|
222
|
+
var b = document.createElement("option");
|
223
|
+
b.textContent = "Page " + (pageIndex + 1);
|
208
224
|
b.value = pageIndex;
|
209
225
|
stepperChooser.appendChild(b);
|
210
226
|
var initBreakPoints = breakPoints[pageIndex] || [];
|
211
227
|
var stepper = new Stepper(debug, pageIndex, initBreakPoints);
|
212
228
|
steppers.push(stepper);
|
229
|
+
|
213
230
|
if (steppers.length === 1) {
|
214
231
|
this.selectStepper(pageIndex, false);
|
215
232
|
}
|
233
|
+
|
216
234
|
return stepper;
|
217
235
|
},
|
218
236
|
selectStepper: function selectStepper(pageIndex, selectPanel) {
|
219
237
|
var i;
|
220
238
|
pageIndex = pageIndex | 0;
|
239
|
+
|
221
240
|
if (selectPanel) {
|
222
241
|
this.manager.selectPanel(this);
|
223
242
|
}
|
243
|
+
|
224
244
|
for (i = 0; i < steppers.length; ++i) {
|
225
245
|
var stepper = steppers[i];
|
246
|
+
|
226
247
|
if (stepper.pageIndex === pageIndex) {
|
227
|
-
stepper.panel.removeAttribute(
|
248
|
+
stepper.panel.removeAttribute("hidden");
|
228
249
|
} else {
|
229
|
-
stepper.panel.setAttribute(
|
250
|
+
stepper.panel.setAttribute("hidden", true);
|
230
251
|
}
|
231
252
|
}
|
253
|
+
|
232
254
|
var options = stepperChooser.options;
|
255
|
+
|
233
256
|
for (i = 0; i < options.length; ++i) {
|
234
257
|
var option = options[i];
|
235
258
|
option.selected = (option.value | 0) === pageIndex;
|
@@ -237,45 +260,58 @@ var StepperManager = function StepperManagerClosure() {
|
|
237
260
|
},
|
238
261
|
saveBreakPoints: function saveBreakPoints(pageIndex, bps) {
|
239
262
|
breakPoints[pageIndex] = bps;
|
240
|
-
sessionStorage.setItem(
|
263
|
+
sessionStorage.setItem("pdfjsBreakPoints", JSON.stringify(breakPoints));
|
241
264
|
}
|
242
265
|
};
|
243
266
|
}();
|
267
|
+
|
244
268
|
var Stepper = function StepperClosure() {
|
245
269
|
function c(tag, textContent) {
|
246
270
|
var d = document.createElement(tag);
|
271
|
+
|
247
272
|
if (textContent) {
|
248
273
|
d.textContent = textContent;
|
249
274
|
}
|
275
|
+
|
250
276
|
return d;
|
251
277
|
}
|
278
|
+
|
252
279
|
function simplifyArgs(args) {
|
253
|
-
if (typeof args ===
|
280
|
+
if (typeof args === "string") {
|
254
281
|
var MAX_STRING_LENGTH = 75;
|
255
|
-
return args.length <= MAX_STRING_LENGTH ? args : args.substring(0, MAX_STRING_LENGTH) +
|
282
|
+
return args.length <= MAX_STRING_LENGTH ? args : args.substring(0, MAX_STRING_LENGTH) + "...";
|
256
283
|
}
|
257
|
-
|
284
|
+
|
285
|
+
if (typeof args !== "object" || args === null) {
|
258
286
|
return args;
|
259
287
|
}
|
260
|
-
|
288
|
+
|
289
|
+
if ("length" in args) {
|
261
290
|
var simpleArgs = [],
|
262
291
|
i,
|
263
292
|
ii;
|
264
293
|
var MAX_ITEMS = 10;
|
294
|
+
|
265
295
|
for (i = 0, ii = Math.min(MAX_ITEMS, args.length); i < ii; i++) {
|
266
296
|
simpleArgs.push(simplifyArgs(args[i]));
|
267
297
|
}
|
298
|
+
|
268
299
|
if (i < args.length) {
|
269
|
-
simpleArgs.push(
|
300
|
+
simpleArgs.push("...");
|
270
301
|
}
|
302
|
+
|
271
303
|
return simpleArgs;
|
272
304
|
}
|
305
|
+
|
273
306
|
var simpleObj = {};
|
307
|
+
|
274
308
|
for (var key in args) {
|
275
309
|
simpleObj[key] = simplifyArgs(args[key]);
|
276
310
|
}
|
311
|
+
|
277
312
|
return simpleObj;
|
278
313
|
}
|
314
|
+
|
279
315
|
function Stepper(panel, pageIndex, initialBreakPoints) {
|
280
316
|
this.panel = panel;
|
281
317
|
this.breakPoint = 0;
|
@@ -285,89 +321,106 @@ var Stepper = function StepperClosure() {
|
|
285
321
|
this.currentIdx = -1;
|
286
322
|
this.operatorListIdx = 0;
|
287
323
|
}
|
324
|
+
|
288
325
|
Stepper.prototype = {
|
289
326
|
init: function init(operatorList) {
|
290
327
|
var panel = this.panel;
|
291
|
-
var content = c(
|
292
|
-
var table = c(
|
328
|
+
var content = c("div", "c=continue, s=step");
|
329
|
+
var table = c("table");
|
293
330
|
content.appendChild(table);
|
294
331
|
table.cellSpacing = 0;
|
295
|
-
var headerRow = c(
|
332
|
+
var headerRow = c("tr");
|
296
333
|
table.appendChild(headerRow);
|
297
|
-
headerRow.appendChild(c(
|
298
|
-
headerRow.appendChild(c(
|
299
|
-
headerRow.appendChild(c(
|
300
|
-
headerRow.appendChild(c(
|
334
|
+
headerRow.appendChild(c("th", "Break"));
|
335
|
+
headerRow.appendChild(c("th", "Idx"));
|
336
|
+
headerRow.appendChild(c("th", "fn"));
|
337
|
+
headerRow.appendChild(c("th", "args"));
|
301
338
|
panel.appendChild(content);
|
302
339
|
this.table = table;
|
303
340
|
this.updateOperatorList(operatorList);
|
304
341
|
},
|
305
342
|
updateOperatorList: function updateOperatorList(operatorList) {
|
306
343
|
var self = this;
|
344
|
+
|
307
345
|
function cboxOnClick() {
|
308
346
|
var x = +this.dataset.idx;
|
347
|
+
|
309
348
|
if (this.checked) {
|
310
349
|
self.breakPoints.push(x);
|
311
350
|
} else {
|
312
351
|
self.breakPoints.splice(self.breakPoints.indexOf(x), 1);
|
313
352
|
}
|
353
|
+
|
314
354
|
StepperManager.saveBreakPoints(self.pageIndex, self.breakPoints);
|
315
355
|
}
|
356
|
+
|
316
357
|
var MAX_OPERATORS_COUNT = 15000;
|
358
|
+
|
317
359
|
if (this.operatorListIdx > MAX_OPERATORS_COUNT) {
|
318
360
|
return;
|
319
361
|
}
|
362
|
+
|
320
363
|
var chunk = document.createDocumentFragment();
|
321
364
|
var operatorsToDisplay = Math.min(MAX_OPERATORS_COUNT, operatorList.fnArray.length);
|
365
|
+
|
322
366
|
for (var i = this.operatorListIdx; i < operatorsToDisplay; i++) {
|
323
|
-
var line = c(
|
324
|
-
line.className =
|
367
|
+
var line = c("tr");
|
368
|
+
line.className = "line";
|
325
369
|
line.dataset.idx = i;
|
326
370
|
chunk.appendChild(line);
|
327
371
|
var checked = this.breakPoints.includes(i);
|
328
372
|
var args = operatorList.argsArray[i] || [];
|
329
|
-
var breakCell = c(
|
330
|
-
var cbox = c(
|
331
|
-
cbox.type =
|
332
|
-
cbox.className =
|
373
|
+
var breakCell = c("td");
|
374
|
+
var cbox = c("input");
|
375
|
+
cbox.type = "checkbox";
|
376
|
+
cbox.className = "points";
|
333
377
|
cbox.checked = checked;
|
334
378
|
cbox.dataset.idx = i;
|
335
379
|
cbox.onclick = cboxOnClick;
|
336
380
|
breakCell.appendChild(cbox);
|
337
381
|
line.appendChild(breakCell);
|
338
|
-
line.appendChild(c(
|
382
|
+
line.appendChild(c("td", i.toString()));
|
339
383
|
var fn = opMap[operatorList.fnArray[i]];
|
340
384
|
var decArgs = args;
|
341
|
-
|
385
|
+
|
386
|
+
if (fn === "showText") {
|
342
387
|
var glyphs = args[0];
|
343
388
|
var newArgs = [];
|
344
389
|
var str = [];
|
390
|
+
|
345
391
|
for (var j = 0; j < glyphs.length; j++) {
|
346
392
|
var glyph = glyphs[j];
|
347
|
-
|
393
|
+
|
394
|
+
if (typeof glyph === "object" && glyph !== null) {
|
348
395
|
str.push(glyph.fontChar);
|
349
396
|
} else {
|
350
397
|
if (str.length > 0) {
|
351
|
-
newArgs.push(str.join(
|
398
|
+
newArgs.push(str.join(""));
|
352
399
|
str = [];
|
353
400
|
}
|
401
|
+
|
354
402
|
newArgs.push(glyph);
|
355
403
|
}
|
356
404
|
}
|
405
|
+
|
357
406
|
if (str.length > 0) {
|
358
|
-
newArgs.push(str.join(
|
407
|
+
newArgs.push(str.join(""));
|
359
408
|
}
|
409
|
+
|
360
410
|
decArgs = [newArgs];
|
361
411
|
}
|
362
|
-
|
363
|
-
line.appendChild(c(
|
412
|
+
|
413
|
+
line.appendChild(c("td", fn));
|
414
|
+
line.appendChild(c("td", JSON.stringify(simplifyArgs(decArgs))));
|
364
415
|
}
|
416
|
+
|
365
417
|
if (operatorsToDisplay < operatorList.fnArray.length) {
|
366
|
-
line = c(
|
367
|
-
var lastCell = c(
|
418
|
+
line = c("tr");
|
419
|
+
var lastCell = c("td", "...");
|
368
420
|
lastCell.colspan = 4;
|
369
421
|
chunk.appendChild(lastCell);
|
370
422
|
}
|
423
|
+
|
371
424
|
this.operatorListIdx = operatorList.fnArray.length;
|
372
425
|
this.table.appendChild(chunk);
|
373
426
|
},
|
@@ -375,11 +428,13 @@ var Stepper = function StepperClosure() {
|
|
375
428
|
this.breakPoints.sort(function (a, b) {
|
376
429
|
return a - b;
|
377
430
|
});
|
431
|
+
|
378
432
|
for (var i = 0; i < this.breakPoints.length; i++) {
|
379
433
|
if (this.breakPoints[i] > this.currentIdx) {
|
380
434
|
return this.breakPoints[i];
|
381
435
|
}
|
382
436
|
}
|
437
|
+
|
383
438
|
return null;
|
384
439
|
},
|
385
440
|
breakIt: function breakIt(idx, callback) {
|
@@ -387,16 +442,18 @@ var Stepper = function StepperClosure() {
|
|
387
442
|
var self = this;
|
388
443
|
var dom = document;
|
389
444
|
self.currentIdx = idx;
|
390
|
-
|
445
|
+
|
446
|
+
var listener = function (e) {
|
391
447
|
switch (e.keyCode) {
|
392
448
|
case 83:
|
393
|
-
dom.removeEventListener(
|
449
|
+
dom.removeEventListener("keydown", listener);
|
394
450
|
self.nextBreakPoint = self.currentIdx + 1;
|
395
451
|
self.goTo(-1);
|
396
452
|
callback();
|
397
453
|
break;
|
454
|
+
|
398
455
|
case 67:
|
399
|
-
dom.removeEventListener(
|
456
|
+
dom.removeEventListener("keydown", listener);
|
400
457
|
var breakPoint = self.getNextBreakPoint();
|
401
458
|
self.nextBreakPoint = breakPoint;
|
402
459
|
self.goTo(-1);
|
@@ -404,15 +461,18 @@ var Stepper = function StepperClosure() {
|
|
404
461
|
break;
|
405
462
|
}
|
406
463
|
};
|
407
|
-
|
464
|
+
|
465
|
+
dom.addEventListener("keydown", listener);
|
408
466
|
self.goTo(idx);
|
409
467
|
},
|
410
468
|
goTo: function goTo(idx) {
|
411
|
-
var allRows = this.panel.getElementsByClassName(
|
469
|
+
var allRows = this.panel.getElementsByClassName("line");
|
470
|
+
|
412
471
|
for (var x = 0, xx = allRows.length; x < xx; ++x) {
|
413
472
|
var row = allRows[x];
|
473
|
+
|
414
474
|
if ((row.dataset.idx | 0) === idx) {
|
415
|
-
row.style.backgroundColor =
|
475
|
+
row.style.backgroundColor = "rgb(251,250,207)";
|
416
476
|
row.scrollIntoView();
|
417
477
|
} else {
|
418
478
|
row.style.backgroundColor = null;
|
@@ -422,87 +482,104 @@ var Stepper = function StepperClosure() {
|
|
422
482
|
};
|
423
483
|
return Stepper;
|
424
484
|
}();
|
485
|
+
|
425
486
|
var Stats = function Stats() {
|
426
487
|
var stats = [];
|
488
|
+
|
427
489
|
function clear(node) {
|
428
490
|
while (node.hasChildNodes()) {
|
429
491
|
node.removeChild(node.lastChild);
|
430
492
|
}
|
431
493
|
}
|
494
|
+
|
432
495
|
function getStatIndex(pageNumber) {
|
433
496
|
for (var i = 0, ii = stats.length; i < ii; ++i) {
|
434
497
|
if (stats[i].pageNumber === pageNumber) {
|
435
498
|
return i;
|
436
499
|
}
|
437
500
|
}
|
501
|
+
|
438
502
|
return false;
|
439
503
|
}
|
504
|
+
|
440
505
|
return {
|
441
|
-
id:
|
442
|
-
name:
|
506
|
+
id: "Stats",
|
507
|
+
name: "Stats",
|
443
508
|
panel: null,
|
444
509
|
manager: null,
|
445
|
-
|
446
|
-
|
447
|
-
},
|
510
|
+
|
511
|
+
init(pdfjsLib) {},
|
448
512
|
|
449
513
|
enabled: false,
|
450
514
|
active: false,
|
451
|
-
|
515
|
+
|
516
|
+
add(pageNumber, stat) {
|
452
517
|
if (!stat) {
|
453
518
|
return;
|
454
519
|
}
|
520
|
+
|
455
521
|
var statsIndex = getStatIndex(pageNumber);
|
522
|
+
|
456
523
|
if (statsIndex !== false) {
|
457
|
-
|
524
|
+
const b = stats[statsIndex];
|
458
525
|
this.panel.removeChild(b.div);
|
459
526
|
stats.splice(statsIndex, 1);
|
460
527
|
}
|
461
|
-
|
462
|
-
wrapper
|
463
|
-
|
464
|
-
title
|
465
|
-
title.
|
466
|
-
|
528
|
+
|
529
|
+
var wrapper = document.createElement("div");
|
530
|
+
wrapper.className = "stats";
|
531
|
+
var title = document.createElement("div");
|
532
|
+
title.className = "title";
|
533
|
+
title.textContent = "Page: " + pageNumber;
|
534
|
+
var statsDiv = document.createElement("div");
|
467
535
|
statsDiv.textContent = stat.toString();
|
468
536
|
wrapper.appendChild(title);
|
469
537
|
wrapper.appendChild(statsDiv);
|
470
538
|
stats.push({
|
471
|
-
pageNumber
|
539
|
+
pageNumber,
|
472
540
|
div: wrapper
|
473
541
|
});
|
474
542
|
stats.sort(function (a, b) {
|
475
543
|
return a.pageNumber - b.pageNumber;
|
476
544
|
});
|
477
545
|
clear(this.panel);
|
546
|
+
|
478
547
|
for (var i = 0, ii = stats.length; i < ii; ++i) {
|
479
548
|
this.panel.appendChild(stats[i].div);
|
480
549
|
}
|
481
550
|
},
|
482
|
-
|
551
|
+
|
552
|
+
cleanup() {
|
483
553
|
stats = [];
|
484
554
|
clear(this.panel);
|
485
555
|
}
|
556
|
+
|
486
557
|
};
|
487
558
|
}();
|
559
|
+
|
488
560
|
window.PDFBug = function PDFBugClosure() {
|
489
561
|
var panelWidth = 300;
|
490
562
|
var buttons = [];
|
491
563
|
var activePanel = null;
|
492
564
|
return {
|
493
565
|
tools: [FontInspector, StepperManager, Stats],
|
494
|
-
|
566
|
+
|
567
|
+
enable(ids) {
|
495
568
|
var all = false,
|
496
569
|
tools = this.tools;
|
497
|
-
|
570
|
+
|
571
|
+
if (ids.length === 1 && ids[0] === "all") {
|
498
572
|
all = true;
|
499
573
|
}
|
574
|
+
|
500
575
|
for (var i = 0; i < tools.length; ++i) {
|
501
576
|
var tool = tools[i];
|
577
|
+
|
502
578
|
if (all || ids.includes(tool.id)) {
|
503
579
|
tool.enabled = true;
|
504
580
|
}
|
505
581
|
}
|
582
|
+
|
506
583
|
if (!all) {
|
507
584
|
tools.sort(function (a, b) {
|
508
585
|
var indexA = ids.indexOf(a.id);
|
@@ -513,25 +590,27 @@ window.PDFBug = function PDFBugClosure() {
|
|
513
590
|
});
|
514
591
|
}
|
515
592
|
},
|
516
|
-
|
517
|
-
|
518
|
-
ui
|
519
|
-
|
520
|
-
controls.
|
593
|
+
|
594
|
+
init(pdfjsLib, container) {
|
595
|
+
var ui = document.createElement("div");
|
596
|
+
ui.id = "PDFBug";
|
597
|
+
var controls = document.createElement("div");
|
598
|
+
controls.setAttribute("class", "controls");
|
521
599
|
ui.appendChild(controls);
|
522
|
-
var panels = document.createElement(
|
523
|
-
panels.setAttribute(
|
600
|
+
var panels = document.createElement("div");
|
601
|
+
panels.setAttribute("class", "panels");
|
524
602
|
ui.appendChild(panels);
|
525
603
|
container.appendChild(ui);
|
526
|
-
container.style.right = panelWidth +
|
604
|
+
container.style.right = panelWidth + "px";
|
527
605
|
var tools = this.tools;
|
528
606
|
var self = this;
|
607
|
+
|
529
608
|
for (var i = 0; i < tools.length; ++i) {
|
530
609
|
var tool = tools[i];
|
531
|
-
var panel = document.createElement(
|
532
|
-
var panelButton = document.createElement(
|
610
|
+
var panel = document.createElement("div");
|
611
|
+
var panelButton = document.createElement("button");
|
533
612
|
panelButton.textContent = tool.name;
|
534
|
-
panelButton.addEventListener(
|
613
|
+
panelButton.addEventListener("click", function (selected) {
|
535
614
|
return function (event) {
|
536
615
|
event.preventDefault();
|
537
616
|
self.selectPanel(selected);
|
@@ -541,42 +620,51 @@ window.PDFBug = function PDFBugClosure() {
|
|
541
620
|
panels.appendChild(panel);
|
542
621
|
tool.panel = panel;
|
543
622
|
tool.manager = this;
|
623
|
+
|
544
624
|
if (tool.enabled) {
|
545
625
|
tool.init(pdfjsLib);
|
546
626
|
} else {
|
547
|
-
panel.textContent = tool.name +
|
627
|
+
panel.textContent = tool.name + " is disabled. To enable add " + ' "' + tool.id + '" to the pdfBug parameter ' + "and refresh (separate multiple by commas).";
|
548
628
|
}
|
629
|
+
|
549
630
|
buttons.push(panelButton);
|
550
631
|
}
|
632
|
+
|
551
633
|
this.selectPanel(0);
|
552
634
|
},
|
553
|
-
|
635
|
+
|
636
|
+
cleanup() {
|
554
637
|
for (var i = 0, ii = this.tools.length; i < ii; i++) {
|
555
638
|
if (this.tools[i].enabled) {
|
556
639
|
this.tools[i].cleanup();
|
557
640
|
}
|
558
641
|
}
|
559
642
|
},
|
560
|
-
|
561
|
-
|
643
|
+
|
644
|
+
selectPanel(index) {
|
645
|
+
if (typeof index !== "number") {
|
562
646
|
index = this.tools.indexOf(index);
|
563
647
|
}
|
648
|
+
|
564
649
|
if (index === activePanel) {
|
565
650
|
return;
|
566
651
|
}
|
652
|
+
|
567
653
|
activePanel = index;
|
568
654
|
var tools = this.tools;
|
655
|
+
|
569
656
|
for (var j = 0; j < tools.length; ++j) {
|
570
657
|
if (j === index) {
|
571
|
-
buttons[j].setAttribute(
|
658
|
+
buttons[j].setAttribute("class", "active");
|
572
659
|
tools[j].active = true;
|
573
|
-
tools[j].panel.removeAttribute(
|
660
|
+
tools[j].panel.removeAttribute("hidden");
|
574
661
|
} else {
|
575
|
-
buttons[j].setAttribute(
|
662
|
+
buttons[j].setAttribute("class", "");
|
576
663
|
tools[j].active = false;
|
577
|
-
tools[j].panel.setAttribute(
|
664
|
+
tools[j].panel.setAttribute("hidden", "true");
|
578
665
|
}
|
579
666
|
}
|
580
667
|
}
|
668
|
+
|
581
669
|
};
|
582
670
|
}();
|