keycloak_theme/src/lib/tools/appendHead.ts

53 lines
1.3 KiB
TypeScript

import { Deferred } from "evt/tools/Deferred";
export function appendHead(
params:
| {
type: "css";
href: string;
}
| {
type: "javascript";
src: string;
},
) {
const htmlElement = document.createElement(
(() => {
switch (params.type) {
case "css":
return "link";
case "javascript":
return "script";
}
})(),
);
const dLoaded = new Deferred<void>();
htmlElement.addEventListener("load", () => dLoaded.resolve());
Object.assign(
htmlElement,
(() => {
switch (params.type) {
case "css":
return {
"href": params.href,
"type": "text/css",
"rel": "stylesheet",
"media": "screen,print",
};
case "javascript":
return {
"src": params.src,
"type": "text/javascript",
};
}
})(),
);
document.getElementsByTagName("head")[0].appendChild(htmlElement);
return dLoaded.pr;
}