pdfjs-dist 2.5.207 → 2.6.347
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 +867 -216
- package/build/pdf.js.map +1 -1
- package/build/pdf.min.js +1 -1
- package/build/pdf.worker.js +10214 -8547
- package/build/pdf.worker.js.map +1 -1
- package/build/pdf.worker.min.js +1 -1
- package/es5/build/pdf.js +2023 -1046
- package/es5/build/pdf.js.map +1 -1
- package/es5/build/pdf.min.js +22 -0
- package/es5/build/pdf.worker.js +11136 -8144
- package/es5/build/pdf.worker.js.map +1 -1
- package/es5/build/pdf.worker.min.js +22 -0
- package/es5/image_decoders/pdf.image_decoders.js +12529 -0
- package/es5/image_decoders/pdf.image_decoders.js.map +1 -0
- package/es5/image_decoders/pdf.image_decoders.min.js +22 -0
- package/es5/web/images/shadow.png +0 -0
- package/es5/web/pdf_viewer.css +8 -5
- package/es5/web/pdf_viewer.js +195 -51
- package/es5/web/pdf_viewer.js.map +1 -1
- package/image_decoders/pdf.image_decoders.js +24 -16
- package/image_decoders/pdf.image_decoders.js.map +1 -1
- package/image_decoders/pdf.image_decoders.min.js +1 -1
- package/lib/core/annotation.js +479 -43
- package/lib/core/cff_parser.js +643 -615
- package/lib/core/chunked_stream.js +64 -50
- package/lib/core/colorspace.js +126 -104
- package/lib/core/crypto.js +37 -0
- package/lib/core/document.js +128 -75
- package/lib/core/evaluator.js +3015 -2754
- package/lib/core/fonts.js +47 -46
- package/lib/core/function.js +79 -6
- package/lib/core/image.js +364 -357
- package/lib/core/image_utils.js +109 -8
- package/lib/core/jpg.js +8 -3
- package/lib/core/obj.js +255 -34
- package/lib/core/operator_list.js +17 -15
- package/lib/core/parser.js +40 -3
- package/lib/core/pattern.js +24 -11
- package/lib/core/primitives.js +112 -53
- package/lib/core/type1_parser.js +2 -0
- package/lib/core/worker.js +102 -37
- package/lib/core/writer.js +242 -0
- package/lib/display/annotation_layer.js +51 -10
- package/lib/display/annotation_storage.js +89 -0
- package/lib/display/api.js +140 -54
- package/lib/display/canvas.js +215 -46
- package/lib/display/display_utils.js +55 -18
- package/lib/display/fetch_stream.js +6 -0
- package/lib/display/font_loader.js +26 -15
- package/lib/display/metadata.js +1 -7
- package/lib/display/network.js +0 -14
- package/lib/display/node_utils.js +87 -0
- package/lib/display/optional_content_config.js +184 -0
- package/lib/display/svg.js +1 -1
- package/lib/display/text_layer.js +4 -1
- package/lib/pdf.js +2 -2
- package/lib/pdf.worker.js +2 -2
- package/lib/shared/is_node.js +1 -1
- package/lib/shared/util.js +13 -10
- package/lib/test/unit/annotation_spec.js +520 -50
- package/lib/test/unit/annotation_storage_spec.js +83 -0
- package/lib/test/unit/api_spec.js +16 -6
- package/lib/test/unit/cmap_spec.js +4 -4
- package/lib/test/unit/colorspace_spec.js +216 -24
- package/lib/test/unit/crypto_spec.js +51 -4
- package/lib/test/unit/custom_spec.js +129 -1
- package/lib/test/unit/document_spec.js +112 -1
- package/lib/test/unit/evaluator_spec.js +29 -10
- package/lib/test/unit/jasmine-boot.js +1 -1
- package/lib/test/unit/metadata_spec.js +3 -3
- package/lib/test/unit/primitives_spec.js +242 -63
- package/lib/test/unit/test_utils.js +42 -89
- package/lib/test/unit/testreporter.js +17 -6
- package/lib/test/unit/util_spec.js +13 -12
- package/lib/test/unit/writer_spec.js +84 -0
- package/lib/web/annotation_layer_builder.js +13 -9
- package/lib/web/app.js +231 -26
- package/lib/web/app_options.js +1 -6
- package/lib/web/base_tree_viewer.js +100 -0
- package/lib/web/base_viewer.js +53 -4
- package/lib/web/download_manager.js +3 -10
- package/lib/web/firefox_print_service.js +32 -12
- package/lib/web/firefoxcom.js +20 -6
- package/lib/web/interfaces.js +1 -1
- package/lib/web/pdf_attachment_viewer.js +80 -38
- package/lib/web/pdf_find_controller.js +2 -1
- package/lib/web/pdf_layer_viewer.js +208 -0
- package/lib/web/pdf_outline_viewer.js +24 -57
- package/lib/web/pdf_page_view.js +29 -6
- package/lib/web/pdf_print_service.js +13 -11
- package/lib/web/pdf_sidebar.js +46 -25
- package/lib/web/pdf_thumbnail_view.js +16 -3
- package/lib/web/pdf_thumbnail_viewer.js +17 -1
- package/lib/web/pdf_viewer.component.js +2 -2
- package/lib/web/preferences.js +1 -1
- package/lib/web/toolbar.js +1 -1
- package/lib/web/ui_utils.js +7 -1
- package/package.json +3 -1
- package/types/display/annotation_layer.d.ts +61 -0
- package/types/display/annotation_storage.d.ts +36 -0
- package/types/display/api.d.ts +1107 -0
- package/types/display/api_compatibility.d.ts +1 -0
- package/types/display/canvas.d.ts +4 -0
- package/types/display/content_disposition.d.ts +7 -0
- package/types/display/display_utils.d.ts +243 -0
- package/types/display/fetch_stream.d.ts +67 -0
- package/types/display/font_loader.d.ts +19 -0
- package/types/display/metadata.d.ts +9 -0
- package/types/display/network.d.ts +80 -0
- package/types/display/network_utils.d.ts +14 -0
- package/types/display/node_stream.d.ts +72 -0
- package/types/display/node_utils.d.ts +6 -0
- package/types/display/optional_content_config.d.ts +12 -0
- package/types/display/pattern_helper.d.ts +5 -0
- package/types/display/svg.d.ts +2 -0
- package/types/display/text_layer.d.ts +83 -0
- package/types/display/transport_stream.d.ts +57 -0
- package/types/display/webgl.d.ts +20 -0
- package/types/display/worker_options.d.ts +27 -0
- package/types/display/xml_parser.d.ts +35 -0
- package/types/pdf.d.ts +33 -0
- package/types/shared/compatibility.d.ts +1 -0
- package/types/shared/is_node.d.ts +1 -0
- package/types/shared/message_handler.d.ts +62 -0
- package/types/shared/util.d.ts +421 -0
- package/web/images/shadow.png +0 -0
- package/web/pdf_viewer.css +8 -5
- package/web/pdf_viewer.js +109 -33
- package/web/pdf_viewer.js.map +1 -1
- package/webpack.js +1 -9
- package/es5/web/images/texture.png +0 -0
- package/web/images/texture.png +0 -0
@@ -0,0 +1,242 @@
|
|
1
|
+
/**
|
2
|
+
* @licstart The following is the entire license notice for the
|
3
|
+
* Javascript code in this page
|
4
|
+
*
|
5
|
+
* Copyright 2020 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
|
+
Object.defineProperty(exports, "__esModule", {
|
25
|
+
value: true
|
26
|
+
});
|
27
|
+
exports.writeDict = writeDict;
|
28
|
+
exports.incrementalUpdate = incrementalUpdate;
|
29
|
+
|
30
|
+
var _util = require("../shared/util.js");
|
31
|
+
|
32
|
+
var _primitives = require("./primitives.js");
|
33
|
+
|
34
|
+
var _crypto = require("./crypto.js");
|
35
|
+
|
36
|
+
function writeDict(dict, buffer, transform) {
|
37
|
+
buffer.push("<<");
|
38
|
+
|
39
|
+
for (const key of dict.getKeys()) {
|
40
|
+
buffer.push(` /${key} `);
|
41
|
+
writeValue(dict.getRaw(key), buffer, transform);
|
42
|
+
}
|
43
|
+
|
44
|
+
buffer.push(">>");
|
45
|
+
}
|
46
|
+
|
47
|
+
function writeStream(stream, buffer, transform) {
|
48
|
+
writeDict(stream.dict, buffer, transform);
|
49
|
+
buffer.push(" stream\n");
|
50
|
+
let string = (0, _util.bytesToString)(stream.getBytes());
|
51
|
+
|
52
|
+
if (transform !== null) {
|
53
|
+
string = transform.encryptString(string);
|
54
|
+
}
|
55
|
+
|
56
|
+
buffer.push(string);
|
57
|
+
buffer.push("\nendstream\n");
|
58
|
+
}
|
59
|
+
|
60
|
+
function writeArray(array, buffer, transform) {
|
61
|
+
buffer.push("[");
|
62
|
+
let first = true;
|
63
|
+
|
64
|
+
for (const val of array) {
|
65
|
+
if (!first) {
|
66
|
+
buffer.push(" ");
|
67
|
+
} else {
|
68
|
+
first = false;
|
69
|
+
}
|
70
|
+
|
71
|
+
writeValue(val, buffer, transform);
|
72
|
+
}
|
73
|
+
|
74
|
+
buffer.push("]");
|
75
|
+
}
|
76
|
+
|
77
|
+
function numberToString(value) {
|
78
|
+
if (Number.isInteger(value)) {
|
79
|
+
return value.toString();
|
80
|
+
}
|
81
|
+
|
82
|
+
const roundedValue = Math.round(value * 100);
|
83
|
+
|
84
|
+
if (roundedValue % 100 === 0) {
|
85
|
+
return (roundedValue / 100).toString();
|
86
|
+
}
|
87
|
+
|
88
|
+
if (roundedValue % 10 === 0) {
|
89
|
+
return value.toFixed(1);
|
90
|
+
}
|
91
|
+
|
92
|
+
return value.toFixed(2);
|
93
|
+
}
|
94
|
+
|
95
|
+
function writeValue(value, buffer, transform) {
|
96
|
+
if ((0, _primitives.isName)(value)) {
|
97
|
+
buffer.push(`/${value.name}`);
|
98
|
+
} else if ((0, _primitives.isRef)(value)) {
|
99
|
+
buffer.push(`${value.num} ${value.gen} R`);
|
100
|
+
} else if (Array.isArray(value)) {
|
101
|
+
writeArray(value, buffer, transform);
|
102
|
+
} else if (typeof value === "string") {
|
103
|
+
if (transform !== null) {
|
104
|
+
value = transform.encryptString(value);
|
105
|
+
}
|
106
|
+
|
107
|
+
buffer.push(`(${(0, _util.escapeString)(value)})`);
|
108
|
+
} else if (typeof value === "number") {
|
109
|
+
buffer.push(numberToString(value));
|
110
|
+
} else if ((0, _primitives.isDict)(value)) {
|
111
|
+
writeDict(value, buffer, transform);
|
112
|
+
} else if ((0, _primitives.isStream)(value)) {
|
113
|
+
writeStream(value, buffer, transform);
|
114
|
+
}
|
115
|
+
}
|
116
|
+
|
117
|
+
function writeInt(number, size, offset, buffer) {
|
118
|
+
for (let i = size + offset - 1; i > offset - 1; i--) {
|
119
|
+
buffer[i] = number & 0xff;
|
120
|
+
number >>= 8;
|
121
|
+
}
|
122
|
+
|
123
|
+
return offset + size;
|
124
|
+
}
|
125
|
+
|
126
|
+
function writeString(string, offset, buffer) {
|
127
|
+
for (let i = 0, len = string.length; i < len; i++) {
|
128
|
+
buffer[offset + i] = string.charCodeAt(i) & 0xff;
|
129
|
+
}
|
130
|
+
}
|
131
|
+
|
132
|
+
function computeMD5(filesize, xrefInfo) {
|
133
|
+
const time = Math.floor(Date.now() / 1000);
|
134
|
+
const filename = xrefInfo.filename || "";
|
135
|
+
const md5Buffer = [time.toString(), filename, filesize.toString()];
|
136
|
+
let md5BufferLen = md5Buffer.reduce((a, str) => a + str.length, 0);
|
137
|
+
|
138
|
+
for (const value of Object.values(xrefInfo.info)) {
|
139
|
+
md5Buffer.push(value);
|
140
|
+
md5BufferLen += value.length;
|
141
|
+
}
|
142
|
+
|
143
|
+
const array = new Uint8Array(md5BufferLen);
|
144
|
+
let offset = 0;
|
145
|
+
|
146
|
+
for (const str of md5Buffer) {
|
147
|
+
writeString(str, offset, array);
|
148
|
+
offset += str.length;
|
149
|
+
}
|
150
|
+
|
151
|
+
return (0, _util.bytesToString)((0, _crypto.calculateMD5)(array));
|
152
|
+
}
|
153
|
+
|
154
|
+
function incrementalUpdate(originalData, xrefInfo, newRefs) {
|
155
|
+
const newXref = new _primitives.Dict(null);
|
156
|
+
const refForXrefTable = xrefInfo.newRef;
|
157
|
+
let buffer, baseOffset;
|
158
|
+
const lastByte = originalData[originalData.length - 1];
|
159
|
+
|
160
|
+
if (lastByte === 0x0a || lastByte === 0x0d) {
|
161
|
+
buffer = [];
|
162
|
+
baseOffset = originalData.length;
|
163
|
+
} else {
|
164
|
+
buffer = ["\n"];
|
165
|
+
baseOffset = originalData.length + 1;
|
166
|
+
}
|
167
|
+
|
168
|
+
newXref.set("Size", refForXrefTable.num + 1);
|
169
|
+
newXref.set("Prev", xrefInfo.startXRef);
|
170
|
+
newXref.set("Type", _primitives.Name.get("XRef"));
|
171
|
+
|
172
|
+
if (xrefInfo.rootRef !== null) {
|
173
|
+
newXref.set("Root", xrefInfo.rootRef);
|
174
|
+
}
|
175
|
+
|
176
|
+
if (xrefInfo.infoRef !== null) {
|
177
|
+
newXref.set("Info", xrefInfo.infoRef);
|
178
|
+
}
|
179
|
+
|
180
|
+
if (xrefInfo.encrypt !== null) {
|
181
|
+
newXref.set("Encrypt", xrefInfo.encrypt);
|
182
|
+
}
|
183
|
+
|
184
|
+
newRefs.push({
|
185
|
+
ref: refForXrefTable,
|
186
|
+
data: ""
|
187
|
+
});
|
188
|
+
newRefs = newRefs.sort((a, b) => {
|
189
|
+
return a.ref.num - b.ref.num;
|
190
|
+
});
|
191
|
+
const xrefTableData = [[0, 1, 0xffff]];
|
192
|
+
const indexes = [0, 1];
|
193
|
+
let maxOffset = 0;
|
194
|
+
|
195
|
+
for (const {
|
196
|
+
ref,
|
197
|
+
data
|
198
|
+
} of newRefs) {
|
199
|
+
maxOffset = Math.max(maxOffset, baseOffset);
|
200
|
+
xrefTableData.push([1, baseOffset, Math.min(ref.gen, 0xffff)]);
|
201
|
+
baseOffset += data.length;
|
202
|
+
indexes.push(ref.num);
|
203
|
+
indexes.push(1);
|
204
|
+
buffer.push(data);
|
205
|
+
}
|
206
|
+
|
207
|
+
newXref.set("Index", indexes);
|
208
|
+
|
209
|
+
if (xrefInfo.fileIds.length !== 0) {
|
210
|
+
const md5 = computeMD5(baseOffset, xrefInfo);
|
211
|
+
newXref.set("ID", [xrefInfo.fileIds[0], md5]);
|
212
|
+
}
|
213
|
+
|
214
|
+
const offsetSize = Math.ceil(Math.log2(maxOffset) / 8);
|
215
|
+
const sizes = [1, offsetSize, 2];
|
216
|
+
const structSize = sizes[0] + sizes[1] + sizes[2];
|
217
|
+
const tableLength = structSize * xrefTableData.length;
|
218
|
+
newXref.set("W", sizes);
|
219
|
+
newXref.set("Length", tableLength);
|
220
|
+
buffer.push(`${refForXrefTable.num} ${refForXrefTable.gen} obj\n`);
|
221
|
+
writeDict(newXref, buffer, null);
|
222
|
+
buffer.push(" stream\n");
|
223
|
+
const bufferLen = buffer.reduce((a, str) => a + str.length, 0);
|
224
|
+
const footer = `\nendstream\nendobj\nstartxref\n${baseOffset}\n%%EOF\n`;
|
225
|
+
const array = new Uint8Array(originalData.length + bufferLen + tableLength + footer.length);
|
226
|
+
array.set(originalData);
|
227
|
+
let offset = originalData.length;
|
228
|
+
|
229
|
+
for (const str of buffer) {
|
230
|
+
writeString(str, offset, array);
|
231
|
+
offset += str.length;
|
232
|
+
}
|
233
|
+
|
234
|
+
for (const [type, objOffset, gen] of xrefTableData) {
|
235
|
+
offset = writeInt(type, sizes[0], offset, array);
|
236
|
+
offset = writeInt(objOffset, sizes[1], offset, array);
|
237
|
+
offset = writeInt(gen, sizes[2], offset, array);
|
238
|
+
}
|
239
|
+
|
240
|
+
writeString(footer, offset, array);
|
241
|
+
return array;
|
242
|
+
}
|
@@ -30,6 +30,8 @@ var _display_utils = require("./display_utils.js");
|
|
30
30
|
|
31
31
|
var _util = require("../shared/util.js");
|
32
32
|
|
33
|
+
var _annotation_storage = require("./annotation_storage.js");
|
34
|
+
|
33
35
|
class AnnotationElementFactory {
|
34
36
|
static create(parameters) {
|
35
37
|
const subtype = parameters.data.annotationType;
|
@@ -127,6 +129,7 @@ class AnnotationElement {
|
|
127
129
|
this.imageResourcesPath = parameters.imageResourcesPath;
|
128
130
|
this.renderInteractiveForms = parameters.renderInteractiveForms;
|
129
131
|
this.svgFactory = parameters.svgFactory;
|
132
|
+
this.annotationStorage = parameters.annotationStorage;
|
130
133
|
|
131
134
|
if (isRenderable) {
|
132
135
|
this.container = this._createContainer(ignoreBorder);
|
@@ -333,19 +336,26 @@ class TextWidgetAnnotationElement extends WidgetAnnotationElement {
|
|
333
336
|
|
334
337
|
render() {
|
335
338
|
const TEXT_ALIGNMENT = ["left", "center", "right"];
|
339
|
+
const storage = this.annotationStorage;
|
340
|
+
const id = this.data.id;
|
336
341
|
this.container.className = "textWidgetAnnotation";
|
337
342
|
let element = null;
|
338
343
|
|
339
344
|
if (this.renderInteractiveForms) {
|
345
|
+
const textContent = storage.getOrCreateValue(id, this.data.fieldValue);
|
346
|
+
|
340
347
|
if (this.data.multiLine) {
|
341
348
|
element = document.createElement("textarea");
|
342
|
-
element.textContent =
|
349
|
+
element.textContent = textContent;
|
343
350
|
} else {
|
344
351
|
element = document.createElement("input");
|
345
352
|
element.type = "text";
|
346
|
-
element.setAttribute("value",
|
353
|
+
element.setAttribute("value", textContent);
|
347
354
|
}
|
348
355
|
|
356
|
+
element.addEventListener("input", function (event) {
|
357
|
+
storage.setValue(id, event.target.value);
|
358
|
+
});
|
349
359
|
element.disabled = this.data.readOnly;
|
350
360
|
element.name = this.data.fieldName;
|
351
361
|
|
@@ -413,16 +423,23 @@ class CheckboxWidgetAnnotationElement extends WidgetAnnotationElement {
|
|
413
423
|
}
|
414
424
|
|
415
425
|
render() {
|
426
|
+
const storage = this.annotationStorage;
|
427
|
+
const data = this.data;
|
428
|
+
const id = data.id;
|
429
|
+
const value = storage.getOrCreateValue(id, data.fieldValue && data.fieldValue !== "Off");
|
416
430
|
this.container.className = "buttonWidgetAnnotation checkBox";
|
417
431
|
const element = document.createElement("input");
|
418
|
-
element.disabled =
|
432
|
+
element.disabled = data.readOnly;
|
419
433
|
element.type = "checkbox";
|
420
434
|
element.name = this.data.fieldName;
|
421
435
|
|
422
|
-
if (
|
436
|
+
if (value) {
|
423
437
|
element.setAttribute("checked", true);
|
424
438
|
}
|
425
439
|
|
440
|
+
element.addEventListener("change", function (event) {
|
441
|
+
storage.setValue(id, event.target.checked);
|
442
|
+
});
|
426
443
|
this.container.appendChild(element);
|
427
444
|
return this.container;
|
428
445
|
}
|
@@ -436,15 +453,30 @@ class RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement {
|
|
436
453
|
|
437
454
|
render() {
|
438
455
|
this.container.className = "buttonWidgetAnnotation radioButton";
|
456
|
+
const storage = this.annotationStorage;
|
457
|
+
const data = this.data;
|
458
|
+
const id = data.id;
|
459
|
+
const value = storage.getOrCreateValue(id, data.fieldValue === data.buttonValue);
|
439
460
|
const element = document.createElement("input");
|
440
|
-
element.disabled =
|
461
|
+
element.disabled = data.readOnly;
|
441
462
|
element.type = "radio";
|
442
|
-
element.name =
|
463
|
+
element.name = data.fieldName;
|
443
464
|
|
444
|
-
if (
|
465
|
+
if (value) {
|
445
466
|
element.setAttribute("checked", true);
|
446
467
|
}
|
447
468
|
|
469
|
+
element.addEventListener("change", function (event) {
|
470
|
+
const name = event.target.name;
|
471
|
+
|
472
|
+
for (const radio of document.getElementsByName(name)) {
|
473
|
+
if (radio !== event.target) {
|
474
|
+
storage.setValue(radio.parentNode.getAttribute("data-annotation-id"), false);
|
475
|
+
}
|
476
|
+
}
|
477
|
+
|
478
|
+
storage.setValue(id, event.target.checked);
|
479
|
+
});
|
448
480
|
this.container.appendChild(element);
|
449
481
|
return this.container;
|
450
482
|
}
|
@@ -467,6 +499,9 @@ class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement {
|
|
467
499
|
|
468
500
|
render() {
|
469
501
|
this.container.className = "choiceWidgetAnnotation";
|
502
|
+
const storage = this.annotationStorage;
|
503
|
+
const id = this.data.id;
|
504
|
+
storage.getOrCreateValue(id, this.data.fieldValue.length > 0 ? this.data.fieldValue[0] : null);
|
470
505
|
const selectElement = document.createElement("select");
|
471
506
|
selectElement.disabled = this.data.readOnly;
|
472
507
|
selectElement.name = this.data.fieldName;
|
@@ -484,13 +519,18 @@ class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement {
|
|
484
519
|
optionElement.textContent = option.displayValue;
|
485
520
|
optionElement.value = option.exportValue;
|
486
521
|
|
487
|
-
if (this.data.fieldValue.includes(option.
|
522
|
+
if (this.data.fieldValue.includes(option.exportValue)) {
|
488
523
|
optionElement.setAttribute("selected", true);
|
489
524
|
}
|
490
525
|
|
491
526
|
selectElement.appendChild(optionElement);
|
492
527
|
}
|
493
528
|
|
529
|
+
selectElement.addEventListener("input", function (event) {
|
530
|
+
const options = event.target.options;
|
531
|
+
const value = options[options.selectedIndex].value;
|
532
|
+
storage.setValue(id, value);
|
533
|
+
});
|
494
534
|
this.container.appendChild(selectElement);
|
495
535
|
return this.container;
|
496
536
|
}
|
@@ -1024,8 +1064,9 @@ class AnnotationLayer {
|
|
1024
1064
|
linkService: parameters.linkService,
|
1025
1065
|
downloadManager: parameters.downloadManager,
|
1026
1066
|
imageResourcesPath: parameters.imageResourcesPath || "",
|
1027
|
-
renderInteractiveForms: parameters.renderInteractiveForms
|
1028
|
-
svgFactory: new _display_utils.DOMSVGFactory()
|
1067
|
+
renderInteractiveForms: typeof parameters.renderInteractiveForms === "boolean" ? parameters.renderInteractiveForms : true,
|
1068
|
+
svgFactory: new _display_utils.DOMSVGFactory(),
|
1069
|
+
annotationStorage: parameters.annotationStorage || new _annotation_storage.AnnotationStorage()
|
1029
1070
|
});
|
1030
1071
|
|
1031
1072
|
if (element.isRenderable) {
|
@@ -0,0 +1,89 @@
|
|
1
|
+
/**
|
2
|
+
* @licstart The following is the entire license notice for the
|
3
|
+
* Javascript code in this page
|
4
|
+
*
|
5
|
+
* Copyright 2020 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
|
+
Object.defineProperty(exports, "__esModule", {
|
25
|
+
value: true
|
26
|
+
});
|
27
|
+
exports.AnnotationStorage = void 0;
|
28
|
+
|
29
|
+
class AnnotationStorage {
|
30
|
+
constructor() {
|
31
|
+
this._storage = new Map();
|
32
|
+
this._modified = false;
|
33
|
+
this.onSetModified = null;
|
34
|
+
this.onResetModified = null;
|
35
|
+
}
|
36
|
+
|
37
|
+
getOrCreateValue(key, defaultValue) {
|
38
|
+
if (this._storage.has(key)) {
|
39
|
+
return this._storage.get(key);
|
40
|
+
}
|
41
|
+
|
42
|
+
this._storage.set(key, defaultValue);
|
43
|
+
|
44
|
+
return defaultValue;
|
45
|
+
}
|
46
|
+
|
47
|
+
setValue(key, value) {
|
48
|
+
if (this._storage.get(key) !== value) {
|
49
|
+
this._setModified();
|
50
|
+
}
|
51
|
+
|
52
|
+
this._storage.set(key, value);
|
53
|
+
}
|
54
|
+
|
55
|
+
getAll() {
|
56
|
+
if (this._storage.size === 0) {
|
57
|
+
return null;
|
58
|
+
}
|
59
|
+
|
60
|
+
return Object.fromEntries(this._storage);
|
61
|
+
}
|
62
|
+
|
63
|
+
get size() {
|
64
|
+
return this._storage.size;
|
65
|
+
}
|
66
|
+
|
67
|
+
_setModified() {
|
68
|
+
if (!this._modified) {
|
69
|
+
this._modified = true;
|
70
|
+
|
71
|
+
if (typeof this.onSetModified === "function") {
|
72
|
+
this.onSetModified();
|
73
|
+
}
|
74
|
+
}
|
75
|
+
}
|
76
|
+
|
77
|
+
resetModified() {
|
78
|
+
if (this._modified) {
|
79
|
+
this._modified = false;
|
80
|
+
|
81
|
+
if (typeof this.onResetModified === "function") {
|
82
|
+
this.onResetModified();
|
83
|
+
}
|
84
|
+
}
|
85
|
+
}
|
86
|
+
|
87
|
+
}
|
88
|
+
|
89
|
+
exports.AnnotationStorage = AnnotationStorage;
|