Revela-v4/src/components/ThemeLoader.astro

38 lines
1.1 KiB
Text

<script>
import IDBManager from "@components/ts/IDBManager";
function switchTheme() {
const currentTheme = Alu.store.get("theme");
document.documentElement.setAttribute("data-theme", currentTheme.value);
}
switchTheme();
document.addEventListener("astro:after-swap", switchTheme);
const idb = IDBManager.loadIDB("AluDB", 1);
idb.onsuccess = () => {
const store = IDBManager.GetStore("InstalledExtensions", "readonly");
store.getAll().onsuccess = (event) => {
const result = (event.target as IDBRequest).result;
if (result) {
result.forEach((extension: ExtensionMetadata) => {
if (extension.type === "theme" && extension.themeName) {
// Load theme CSS
loadStyleFromAtob(atob(extension.scriptCopy!));
document.addEventListener("astro:after-swap", () => {
loadStyleFromAtob(atob(extension.scriptCopy!));
});
}
});
}
};
};
function loadStyleFromAtob(style: string) {
const styleEl = document.createElement("style");
styleEl.textContent = style;
document.head.appendChild(styleEl);
}
</script>