admin: tab system improvement, search: ?search qp
tab content classes (e.g. settingsList, activityList) can implement "AsTab", "Navigatable" and or "PageEventBindable", the first giving them a tab name, a subpath and a reloader function, the second an "isURL" and "navigate" function for loading resources, the last giving them bind/unbindPageEvent methods. These are looped through in ts/admin.ts still crudely, maybe tabs.ts could accept "AsTab" implementers directly. "Search" class now has a ?search query param which just encodes the search box content, set when you perform a server search (hit enter or press the button). ?user queries from the accounts or activity tab will be converted to this form on loading.
This commit is contained in:
+7
-6
@@ -112,7 +112,6 @@ export class HiddenInputField {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export interface RadioBasedTab {
|
||||
name: string;
|
||||
id?: string;
|
||||
@@ -135,7 +134,7 @@ export class RadioBasedTabSelector {
|
||||
private _container: HTMLElement;
|
||||
private _tabs: RadioBasedTabItem[];
|
||||
private _selected: string;
|
||||
constructor(container: HTMLElement, id: string, ...tabs: RadioBasedTab[]) {
|
||||
constructor(container: HTMLElement, id: string, ...tabs: RadioBasedTab[]) {
|
||||
this._container = container;
|
||||
this._container.classList.add("flex", "flex-row", "gap-2");
|
||||
this._tabs = [];
|
||||
@@ -143,7 +142,7 @@ export class RadioBasedTabSelector {
|
||||
let i = 0;
|
||||
const frag = document.createDocumentFragment();
|
||||
for (let tab of tabs) {
|
||||
if (!(tab.id)) tab.id = tab.name;
|
||||
if (!tab.id) tab.id = tab.name;
|
||||
const label = document.createElement("label");
|
||||
label.classList.add("grow");
|
||||
label.innerHTML = `
|
||||
@@ -153,7 +152,7 @@ export class RadioBasedTabSelector {
|
||||
let ft: RadioBasedTabItem = {
|
||||
tab: tab,
|
||||
input: label.getElementsByTagName("input")[0] as HTMLInputElement,
|
||||
button: label.getElementsByClassName("radio-tab-button")[0] as HTMLElement
|
||||
button: label.getElementsByClassName("radio-tab-button")[0] as HTMLElement,
|
||||
};
|
||||
ft.input.onclick = () => {
|
||||
ft.input.checked = true;
|
||||
@@ -185,8 +184,10 @@ export class RadioBasedTabSelector {
|
||||
}
|
||||
};
|
||||
|
||||
get selected(): string { return this._selected; }
|
||||
set selected(id: string|number) {
|
||||
get selected(): string {
|
||||
return this._selected;
|
||||
}
|
||||
set selected(id: string | number) {
|
||||
if (typeof id !== "string") {
|
||||
id = this._tabs[id as number].tab.id;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user