88 lines
2.7 KiB
TypeScript
88 lines
2.7 KiB
TypeScript
import TabManager from "./ui/TabManager";
|
|
import sections from "./ui/sections";
|
|
import { nextAnimationFrame } from "./utils";
|
|
import { searchBox } from "./scripts/search";
|
|
|
|
// @ts-expect-error: Parcel image import
|
|
import unknown from "~/assets/images/tab-icons/unknown.svg";
|
|
import { bindFunctions } from "./scripts/index";
|
|
|
|
async function load() {
|
|
const sectionListContainer = document.getElementById("section-list");
|
|
const tabListContainer = document.getElementById("tab-list");
|
|
const tabContentContainer = document.getElementById("tabs");
|
|
const manager = new TabManager(
|
|
sectionListContainer,
|
|
tabListContainer,
|
|
tabContentContainer
|
|
);
|
|
manager.setLoading(true);
|
|
|
|
await nextAnimationFrame();
|
|
|
|
// Add loading "bar"
|
|
const spinnerContainer = document.querySelector("#tabs > .speen");
|
|
const icons = document.createElement("div");
|
|
icons.className = "loading-icons";
|
|
sections.forEach((section) =>
|
|
section.tabs.forEach((tab) => {
|
|
const iconElement = document.createElement("img");
|
|
iconElement.dataset.tab = tab.page;
|
|
iconElement.src = tab.icon || unknown;
|
|
iconElement.title = tab.page.replace(/_/gi, " ");
|
|
icons.appendChild(iconElement);
|
|
})
|
|
);
|
|
spinnerContainer.appendChild(icons);
|
|
|
|
const promises = sections.flatMap((section) => {
|
|
manager.createSection(section.name);
|
|
|
|
return section.tabs.map(async (tab) => {
|
|
// Load page
|
|
await manager.openTab(section.name, tab.page, {
|
|
icon: tab.icon,
|
|
text: tab.text,
|
|
});
|
|
// Remove icon from loading
|
|
icons.removeChild(icons.querySelector(`img[data-tab=${tab.page}]`));
|
|
});
|
|
});
|
|
|
|
manager.showSection("Medical");
|
|
// DEV: If you only need one page just comment the block above and uncomment this:
|
|
// manager.createSection("Medical");
|
|
// const promises = [manager.openTab("Medical", "Infections", {})];
|
|
|
|
const welcome = document.getElementById("Welcome");
|
|
bindFunctions(welcome, "$Welcome");
|
|
|
|
Promise.all(promises).then(() => {
|
|
// Remove app-wide loading
|
|
manager.setLoading(false);
|
|
welcome.classList.add("active");
|
|
});
|
|
}
|
|
if ("serviceWorker" in navigator) {
|
|
const x = process.env.SUBPATH ? `${process.env.SUBPATH}/sw.js` : "sw.js";
|
|
navigator.serviceWorker
|
|
.register(x)
|
|
.then((registration) => {
|
|
console.log("Registration successful, scope is:", registration.scope);
|
|
})
|
|
.catch((error) => {
|
|
console.log("Service worker registration failed, error:", error);
|
|
});
|
|
}
|
|
|
|
// Start loading pages
|
|
load();
|
|
|
|
// Add search box
|
|
document.body.appendChild(searchBox());
|
|
|
|
// Add revision info
|
|
document
|
|
.getElementById("tgh-version")
|
|
.appendChild(document.createTextNode(process.env.REVISION || "unknown"));
|