keycloak_theme/src/lib/tools/headInsert.ts

71 lines
1.9 KiB
TypeScript
Raw Normal View History

2021-10-22 18:10:32 +02:00
import "./HTMLElement.prototype.prepend";
2021-03-04 13:56:51 +01:00
import { Deferred } from "evt/tools/Deferred";
2021-10-22 18:10:32 +02:00
export function headInsert(
params:
| {
type: "css";
href: string;
2021-10-22 18:10:32 +02:00
position: "append" | "prepend";
}
| {
type: "javascript";
src: string;
},
2021-03-04 13:56:51 +01:00
) {
const htmlElement = document.createElement(
(() => {
switch (params.type) {
case "css":
return "link";
case "javascript":
return "script";
2021-03-04 13:56:51 +01:00
}
})(),
2021-03-04 13:56:51 +01:00
);
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",
};
2021-03-04 13:56:51 +01:00
}
})(),
2021-03-04 13:56:51 +01:00
);
2021-10-22 18:10:32 +02:00
document.getElementsByTagName("head")[0][
(() => {
switch (params.type) {
case "javascript":
return "appendChild";
case "css":
return (() => {
switch (params.position) {
case "append":
return "appendChild";
case "prepend":
return "prepend";
}
})();
}
})()
](htmlElement);
2021-03-04 13:56:51 +01:00
return dLoaded.pr;
}