pdf.js/src/pdf.js
Jonas Jenwald 346afd1e1c [api-minor] Fix the AnnotationStorage usage properly in the viewer/tests (PR 12107 and 12143 follow-up)
*The [api-minor] label probably ought to have been added to the original PR, given the changes to the `createAnnotationLayerBuilder` signature (if nothing else).*

This patch fixes the following things:
 - Let the `AnnotationLayer.render` method create an `AnnotationStorage`-instance if none was provided, thus making the parameter *properly* optional. This not only fixes the reference tests, it also prevents issues when the viewer components are used.
 - Stop exporting `AnnotationStorage` in the official API, i.e. the `src/pdf.js` file, since it's no longer necessary given the change above. Generally speaking, unless absolutely necessary we probably shouldn't export unused things in the API.
 - Fix a number of JSDocs `typedef`s, in `src/display/` and `web/` code, to actually account for the new `annotationStorage` parameter.
 - Update `web/interfaces.js` to account for the changes in `createAnnotationLayerBuilder`.
 - Initialize the storage, in `AnnotationStorage`, using `Object.create(null)` rather than `{}` (which is the PDF.js default).
2020-07-31 16:32:46 +02:00

168 lines
5.0 KiB
JavaScript

/* Copyright 2012 Mozilla Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import {
addLinkAttributes,
getFilenameFromUrl,
isFetchSupported,
isValidFetchUrl,
LinkTarget,
loadScript,
PDFDateString,
RenderingCancelledException,
} from "./display/display_utils.js";
import {
build,
getDocument,
LoopbackPort,
PDFDataRangeTransport,
PDFWorker,
setPDFNetworkStreamFactory,
version,
} from "./display/api.js";
import {
CMapCompressionType,
createObjectURL,
createPromiseCapability,
createValidAbsoluteUrl,
InvalidPDFException,
MissingPDFException,
OPS,
PasswordResponses,
PermissionFlag,
removeNullCharacters,
shadow,
UnexpectedResponseException,
UNSUPPORTED_FEATURES,
Util,
VerbosityLevel,
} from "./shared/util.js";
import { AnnotationLayer } from "./display/annotation_layer.js";
import { apiCompatibilityParams } from "./display/api_compatibility.js";
import { GlobalWorkerOptions } from "./display/worker_options.js";
import { renderTextLayer } from "./display/text_layer.js";
import { SVGGraphics } from "./display/svg.js";
/* eslint-disable-next-line no-unused-vars */
const pdfjsVersion =
typeof PDFJSDev !== "undefined" ? PDFJSDev.eval("BUNDLE_VERSION") : void 0;
/* eslint-disable-next-line no-unused-vars */
const pdfjsBuild =
typeof PDFJSDev !== "undefined" ? PDFJSDev.eval("BUNDLE_BUILD") : void 0;
if (typeof PDFJSDev === "undefined" || !PDFJSDev.test("PRODUCTION")) {
const streamsPromise = Promise.all([
import("pdfjs/display/network.js"),
import("pdfjs/display/fetch_stream.js"),
]);
setPDFNetworkStreamFactory(params => {
return streamsPromise.then(streams => {
const [{ PDFNetworkStream }, { PDFFetchStream }] = streams;
if (isFetchSupported() && isValidFetchUrl(params.url)) {
return new PDFFetchStream(params);
}
return new PDFNetworkStream(params);
});
});
} else if (PDFJSDev.test("GENERIC")) {
const { isNodeJS } = require("./shared/is_node.js");
if (isNodeJS) {
const PDFNodeStream = require("./display/node_stream.js").PDFNodeStream;
setPDFNetworkStreamFactory(params => {
return new PDFNodeStream(params);
});
} else {
const PDFNetworkStream = require("./display/network.js").PDFNetworkStream;
let PDFFetchStream;
if (isFetchSupported()) {
PDFFetchStream = require("./display/fetch_stream.js").PDFFetchStream;
}
setPDFNetworkStreamFactory(params => {
if (PDFFetchStream && isValidFetchUrl(params.url)) {
return new PDFFetchStream(params);
}
return new PDFNetworkStream(params);
});
}
} else if (PDFJSDev.test("CHROME")) {
const PDFNetworkStream = require("./display/network.js").PDFNetworkStream;
let PDFFetchStream;
const isChromeWithFetchCredentials = function () {
// fetch does not include credentials until Chrome 61.0.3138.0 and later.
// https://chromium.googlesource.com/chromium/src/+/2e231cf052ca5e68e22baf0008ac9e5e29121707
try {
// Indexed properties on window are read-only in Chrome 61.0.3151.0+
// https://chromium.googlesource.com/chromium/src.git/+/58ab4a971b06dec13e4edf9de8382ca6847f6190
window[999] = 123; // should throw. Note: JS strict mode MUST be enabled.
delete window[999];
return false;
} catch (e) {
return true;
}
};
if (isFetchSupported() && isChromeWithFetchCredentials()) {
PDFFetchStream = require("./display/fetch_stream.js").PDFFetchStream;
}
setPDFNetworkStreamFactory(params => {
if (PDFFetchStream && isValidFetchUrl(params.url)) {
return new PDFFetchStream(params);
}
return new PDFNetworkStream(params);
});
}
export {
// From "./display/display_utils.js":
addLinkAttributes,
getFilenameFromUrl,
LinkTarget,
loadScript,
PDFDateString,
RenderingCancelledException,
// From "./display/api.js":
build,
getDocument,
LoopbackPort,
PDFDataRangeTransport,
PDFWorker,
version,
// From "./shared/util.js":
CMapCompressionType,
createObjectURL,
createPromiseCapability,
createValidAbsoluteUrl,
InvalidPDFException,
MissingPDFException,
OPS,
PasswordResponses,
PermissionFlag,
removeNullCharacters,
shadow,
UnexpectedResponseException,
UNSUPPORTED_FEATURES,
Util,
VerbosityLevel,
// From "./display/annotation_layer.js":
AnnotationLayer,
// From "./display/api_compatibility.js":
apiCompatibilityParams,
// From "./display/worker_options.js":
GlobalWorkerOptions,
// From "./display/text_layer.js":
renderTextLayer,
// From "./display/svg.js":
SVGGraphics,
};