import { isDataUrl } from "../../utils/string.js";

/**
 * parse/preload a font face
 * @param {loader.Asset} data - asset data
 * @param {Function} [onload] - function to be called when the asset is loaded
 * @param {Function} [onerror] - function to be called in case of error
 * @returns {number} the amount of corresponding resource parsed/preloaded
 * @ignore
 * @example
 * preloadFontFace(
 *     name: "'kenpixel'", type: "fontface",  src: "url('data/font/kenvector_future.woff2')"
 * ]);
 */
export function preloadFontFace(data, onload, onerror) {

    if (isDataUrl(data.src) === true) {
        // make sure it in the `url(data:[<mediatype>][;base64],<data>)` format as expected by FontFace
        if (!data.src.startsWith("url(")) {
            data.src = "url(" + data.src + ")";
        }
    }

    let font = new FontFace(data.name, data.src);

    // loading promise
    font.load().then(() => {
        // apply the font after the font has finished downloading
        globalThis.document.fonts.add(font);
        globalThis.document.body.style.fontFamily = data.name;
        if (typeof onload === "function") {
            // onloaded callback
            onload();
        }
    }, () => {
        if (typeof onerror === "function") {
            // rejected
            onerror(data.name);
        }
    });

    return 1;
}

Powered by webdoc!