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(
|
2021-10-11 21:35:40 +02:00
|
|
|
params:
|
|
|
|
| {
|
|
|
|
type: "css";
|
|
|
|
href: string;
|
2021-10-22 18:10:32 +02:00
|
|
|
position: "append" | "prepend";
|
2021-10-11 21:35:40 +02:00
|
|
|
}
|
|
|
|
| {
|
|
|
|
type: "javascript";
|
|
|
|
src: string;
|
2022-08-20 11:44:48 +07:00
|
|
|
}
|
2023-04-19 03:20:22 +02:00
|
|
|
): { remove: () => void; prLoaded: Promise<void> } {
|
2021-03-04 13:56:51 +01:00
|
|
|
const htmlElement = document.createElement(
|
|
|
|
(() => {
|
|
|
|
switch (params.type) {
|
2021-10-11 21:35:40 +02:00
|
|
|
case "css":
|
|
|
|
return "link";
|
|
|
|
case "javascript":
|
|
|
|
return "script";
|
2021-03-04 13:56:51 +01:00
|
|
|
}
|
2022-08-20 11:44:48 +07: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) {
|
2021-10-11 21:35:40 +02:00
|
|
|
case "css":
|
|
|
|
return {
|
|
|
|
"href": params.href,
|
|
|
|
"type": "text/css",
|
|
|
|
"rel": "stylesheet",
|
2022-08-20 11:44:48 +07:00
|
|
|
"media": "screen,print"
|
2021-10-11 21:35:40 +02:00
|
|
|
};
|
|
|
|
case "javascript":
|
|
|
|
return {
|
|
|
|
"src": params.src,
|
2022-08-20 11:44:48 +07:00
|
|
|
"type": "text/javascript"
|
2021-10-11 21:35:40 +02:00
|
|
|
};
|
2021-03-04 13:56:51 +01:00
|
|
|
}
|
2022-08-20 11:44:48 +07: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
|
|
|
|
2023-04-19 03:20:22 +02:00
|
|
|
return {
|
|
|
|
"prLoaded": dLoaded.pr,
|
|
|
|
"remove": () => htmlElement.remove()
|
|
|
|
};
|
2021-10-11 21:35:40 +02:00
|
|
|
}
|