dropflow
Version:
A small CSS2 document renderer built from specifications
37 lines (36 loc) • 1.37 kB
JavaScript
import { environment, defaultEnvironment } from './environment.js';
if (environment.registerFont === defaultEnvironment.registerFont) {
environment.registerFont = function (face) {
const buffer = face.getBuffer();
const domFace = new FontFace(face.uniqueFamily, buffer);
document.fonts.add(domFace);
return () => document.fonts.remove(domFace);
};
}
if (environment.resolveUrlSync === defaultEnvironment.resolveUrlSync) {
environment.resolveUrlSync = function (url) {
throw new Error(`Cannot load synchronously: ${url}`);
};
}
if (environment.resolveUrl === defaultEnvironment.resolveUrl) {
environment.resolveUrl = async function (url) {
const res = await fetch(url);
if (!res.ok)
throw new Error(res.statusText);
return await res.arrayBuffer();
};
}
if (environment.createDecodedImage === defaultEnvironment.createDecodedImage) {
environment.createDecodedImage = async (image) => {
const img = new Image();
img.src = URL.createObjectURL(new Blob([image.buffer]));
await img.decode();
return img;
};
}
if (environment.destroyDecodedImage === defaultEnvironment.destroyDecodedImage) {
environment.destroyDecodedImage = (handle) => {
URL.revokeObjectURL(handle.src);
};
}
// wasm locator must be manually configured