61 lines
2 KiB
Text
61 lines
2 KiB
Text
<script>
|
|
import IDBManager from "@components/ts/IDBManager";
|
|
const tempDB = await IDBManager.loadIDBPromise("AluDB", 1);
|
|
if (tempDB instanceof Event) {
|
|
// Something has gone wrong, and the IDB can't be loaded, so we'll delete it and recreate it.
|
|
IDBManager.DeleteIDB("AluDB");
|
|
throw new Error("IDB has failed to load - It has been deleted and will be recreated when you refresh the page.");
|
|
}
|
|
if (!IDBManager.ValidateStoreExists("InstalledExtensions")) {
|
|
IDBManager.CreateStore("InstalledExtensions", { keyPath: "slug" });
|
|
}
|
|
|
|
function switchTheme() {
|
|
let currentTheme = localStorage.getItem("alu__selectedTheme");
|
|
|
|
if (currentTheme) {
|
|
document.documentElement.setAttribute("data-theme", JSON.parse(currentTheme).value.toLowerCase());
|
|
let footer = document.getElementById("footer");
|
|
if (footer) {
|
|
footer.dataset.theme = JSON.parse(currentTheme).value.toLowerCase();
|
|
}
|
|
} else {
|
|
localStorage.setItem("alu__selectedTheme", JSON.stringify({ name: "Alu", value: "alu" }));
|
|
switchTheme();
|
|
}
|
|
}
|
|
|
|
switchTheme();
|
|
|
|
document.addEventListener("astro:after-swap", switchTheme);
|
|
|
|
const idb = IDBManager.loadIDB("AluDB", 1);
|
|
|
|
idb.onsuccess = () => {
|
|
const db = idb.result;
|
|
IDBManager.SetIDB(db);
|
|
|
|
let store = IDBManager.GetStore("InstalledExtensions", "readonly");
|
|
store.getAll().onsuccess = (event) => {
|
|
const result = (event.target as IDBRequest).result;
|
|
if (result) {
|
|
result.forEach((extension: IExtensionMetadata) => {
|
|
if (extension.type === "theme" && extension.themeName) {
|
|
// Load theme CSS
|
|
window.loadedThemeAtob = atob(extension.scriptCopy!);
|
|
loadStyleFromAtob();
|
|
|
|
document.addEventListener("astro:after-swap", () => {
|
|
loadStyleFromAtob();
|
|
});
|
|
}
|
|
});
|
|
}
|
|
};
|
|
};
|
|
function loadStyleFromAtob() {
|
|
const style = document.createElement("style");
|
|
style.textContent = window.loadedThemeAtob;
|
|
document.head.appendChild(style);
|
|
}
|
|
</script>
|