mirror of
https://github.com/mozilla/pdf.js.git
synced 2025-04-23 08:38:06 +02:00
Re-factor how the GenericL10n
class fetches localization-data
- Re-factor the existing `fetchData` helper function such that it can fetch more types of data, and it now supports "arraybuffer", "json", and "text". This only needed minor adjustments in the `DOMCMapReaderFactory` and `DOMStandardFontDataFactory` classes.[1] - Expose the `fetchData` helper function in the API, such that the viewer is able to access it. - Use the `fetchData` helper function in the `GenericL10n` class, since this should allow fetching of localization-data even if the default viewer is run in an environment without support for the Fetch API. --- [1] While testing this I also noticed a minor inconsistency when handling standard font-data on the worker-thread.
This commit is contained in:
parent
44cde3ccca
commit
709d89420e
6 changed files with 45 additions and 20 deletions
|
@ -425,7 +425,7 @@ class PartialEvaluator {
|
|||
`fetchStandardFontData: failed to fetch file "${url}" with "${response.statusText}".`
|
||||
);
|
||||
} else {
|
||||
data = await response.arrayBuffer();
|
||||
data = new Uint8Array(await response.arrayBuffer());
|
||||
}
|
||||
} else {
|
||||
// Get the data on the main-thread instead.
|
||||
|
|
|
@ -387,7 +387,7 @@ class DOMCanvasFactory extends BaseCanvasFactory {
|
|||
}
|
||||
}
|
||||
|
||||
async function fetchData(url, asTypedArray = false) {
|
||||
async function fetchData(url, type = "text") {
|
||||
if (
|
||||
(typeof PDFJSDev !== "undefined" && PDFJSDev.test("MOZCENTRAL")) ||
|
||||
isValidFetchUrl(url, document.baseURI)
|
||||
|
@ -396,29 +396,35 @@ async function fetchData(url, asTypedArray = false) {
|
|||
if (!response.ok) {
|
||||
throw new Error(response.statusText);
|
||||
}
|
||||
return asTypedArray
|
||||
? new Uint8Array(await response.arrayBuffer())
|
||||
: stringToBytes(await response.text());
|
||||
switch (type) {
|
||||
case "arraybuffer":
|
||||
return response.arrayBuffer();
|
||||
case "json":
|
||||
return response.json();
|
||||
}
|
||||
return response.text();
|
||||
}
|
||||
|
||||
// The Fetch API is not supported.
|
||||
return new Promise((resolve, reject) => {
|
||||
const request = new XMLHttpRequest();
|
||||
request.open("GET", url, /* asTypedArray = */ true);
|
||||
request.open("GET", url, /* async = */ true);
|
||||
request.responseType = type;
|
||||
|
||||
if (asTypedArray) {
|
||||
request.responseType = "arraybuffer";
|
||||
}
|
||||
request.onreadystatechange = () => {
|
||||
if (request.readyState !== XMLHttpRequest.DONE) {
|
||||
return;
|
||||
}
|
||||
if (request.status === 200 || request.status === 0) {
|
||||
let data;
|
||||
if (asTypedArray && request.response) {
|
||||
data = new Uint8Array(request.response);
|
||||
} else if (!asTypedArray && request.responseText) {
|
||||
data = stringToBytes(request.responseText);
|
||||
switch (type) {
|
||||
case "arraybuffer":
|
||||
case "json":
|
||||
data = request.response;
|
||||
break;
|
||||
default:
|
||||
data = request.responseText;
|
||||
break;
|
||||
}
|
||||
if (data) {
|
||||
resolve(data);
|
||||
|
@ -437,8 +443,17 @@ class DOMCMapReaderFactory extends BaseCMapReaderFactory {
|
|||
* @ignore
|
||||
*/
|
||||
_fetchData(url, compressionType) {
|
||||
return fetchData(url, /* asTypedArray = */ this.isCompressed).then(data => {
|
||||
return { cMapData: data, compressionType };
|
||||
return fetchData(
|
||||
url,
|
||||
/* type = */ this.isCompressed ? "arraybuffer" : "text"
|
||||
).then(data => {
|
||||
return {
|
||||
cMapData:
|
||||
data instanceof ArrayBuffer
|
||||
? new Uint8Array(data)
|
||||
: stringToBytes(data),
|
||||
compressionType,
|
||||
};
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -448,7 +463,9 @@ class DOMStandardFontDataFactory extends BaseStandardFontDataFactory {
|
|||
* @ignore
|
||||
*/
|
||||
_fetchData(url) {
|
||||
return fetchData(url, /* asTypedArray = */ true);
|
||||
return fetchData(url, /* type = */ "arraybuffer").then(data => {
|
||||
return new Uint8Array(data);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -993,6 +1010,7 @@ export {
|
|||
DOMFilterFactory,
|
||||
DOMStandardFontDataFactory,
|
||||
DOMSVGFactory,
|
||||
fetchData,
|
||||
getColorValues,
|
||||
getCurrentTransform,
|
||||
getCurrentTransformInverse,
|
||||
|
|
|
@ -54,6 +54,7 @@ import {
|
|||
} from "./display/api.js";
|
||||
import {
|
||||
DOMSVGFactory,
|
||||
fetchData,
|
||||
getFilenameFromUrl,
|
||||
getPdfFilenameFromUrl,
|
||||
getXfaPageViewport,
|
||||
|
@ -92,6 +93,7 @@ export {
|
|||
createValidAbsoluteUrl,
|
||||
DOMSVGFactory,
|
||||
FeatureTest,
|
||||
fetchData,
|
||||
getDocument,
|
||||
getFilenameFromUrl,
|
||||
getPdfFilenameFromUrl,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue