mirror of
https://github.com/hrfee/jfa-go.git
synced 2024-11-09 20:00:12 +00:00
Harvey Tindall
1e6bbc7bbc
when switching tabs, the url path changes. Accessing these urls directly will load the corresponding tab.
41 lines
1.4 KiB
TypeScript
41 lines
1.4 KiB
TypeScript
export class Tabs implements Tabs {
|
|
private _current: string = "";
|
|
tabs: Array<Tab>;
|
|
|
|
constructor() {
|
|
this.tabs = [];
|
|
}
|
|
|
|
addTab = (tabID: string, preFunc = () => void {}, postFunc = () => void {}) => {
|
|
let tab = {} as Tab;
|
|
tab.tabID = tabID;
|
|
tab.tabEl = document.getElementById("tab-" + tabID) as HTMLDivElement;
|
|
tab.buttonEl = document.getElementById("button-tab-" + tabID) as HTMLSpanElement;
|
|
tab.buttonEl.onclick = () => { this.switch(tabID); };
|
|
tab.preFunc = preFunc;
|
|
tab.postFunc = postFunc;
|
|
this.tabs.push(tab);
|
|
}
|
|
|
|
get current(): string { return this._current; }
|
|
set current(tabID: string) { this.switch(tabID); }
|
|
|
|
switch = (tabID: string, noRun: boolean = false) => {
|
|
this._current = tabID;
|
|
for (let t of this.tabs) {
|
|
if (t.tabID == tabID) {
|
|
t.buttonEl.classList.add("active", "~urge");
|
|
if (t.preFunc && !noRun) { t.preFunc(); }
|
|
t.tabEl.classList.remove("unfocused");
|
|
if (t.postFunc && !noRun) { t.postFunc(); }
|
|
document.dispatchEvent(new CustomEvent("tab-change", { detail: tabID }));
|
|
} else {
|
|
t.buttonEl.classList.remove("active");
|
|
t.buttonEl.classList.remove("~urge");
|
|
t.tabEl.classList.add("unfocused");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|