cheetah-grid
Version:
Cheetah Grid is a high performance grid engine that works on canvas
78 lines (75 loc) • 2.12 kB
text/typescript
import type { AnyFunction } from "../ts-types";
import { isNode } from "./utils";
const loads: { [key: string]: boolean } = {};
let load: (font: string, testStr: string, callback: AnyFunction) => void;
let check: (font: string, testStr: string) => boolean;
if (isNode) {
load = function (
_font: string,
_testStr: string,
callback: AnyFunction
): void {
callback();
};
check = function (): boolean {
return false;
};
} else {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const fontFaceSet = (document as any).fonts;
const legacy = !fontFaceSet;
load = legacy
? function (font: string, testStr: string, callback: AnyFunction): void {
//for legacy(IE)
if (loads[`${font} @ ${testStr}`]) {
callback();
return;
}
// eslint-disable-next-line @typescript-eslint/no-var-requires
require("./legacy/fontwatch/FontWatchRunner").load(
font,
testStr,
() => {
loads[`${font} @ ${testStr}`] = true;
callback();
},
() => {
loads[`${font} @ ${testStr}`] = true;
callback();
}
);
}
: function (font: string, _testStr: string, callback: AnyFunction): void {
if (loads.all || loads[font]) {
callback();
return;
}
fontFaceSet.ready.then(() => {
loads.all = true;
});
fontFaceSet.load(font).then(() => {
loads[font] = true;
callback();
});
};
check = legacy
? function (font: string, testStr: string): boolean {
//for legacy(IE)
if (loads[`${font} @ ${testStr}`]) {
return true;
}
load(font, testStr, () => {});
return false;
}
: function (font: string, testStr: string): boolean {
if (loads.all || loads[font]) {
return true;
}
if (!fontFaceSet.check(font)) {
load(font, testStr, () => {});
return false;
}
return true;
};
}
export { check, load };