Refactor tab elements.
- Laying groundwork for overhaul of topbar.
This commit is contained in:
@@ -200,84 +200,6 @@ async function saveNotes(modelPath, newValue) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
class Tabs {
|
|
||||||
/** @type {Record<string, HTMLDivElement>} */
|
|
||||||
#head = {};
|
|
||||||
/** @type {Record<string, HTMLDivElement>} */
|
|
||||||
#body = {};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param {HTMLDivElement[]} tabs
|
|
||||||
*/
|
|
||||||
constructor(tabs) {
|
|
||||||
const head = [];
|
|
||||||
const body = [];
|
|
||||||
|
|
||||||
tabs.forEach((el, index) => {
|
|
||||||
const name = el.getAttribute("data-name");
|
|
||||||
|
|
||||||
/** @type {HTMLDivElement} */
|
|
||||||
const tag = $el(
|
|
||||||
"div.head-item",
|
|
||||||
{ onclick: () => this.active(name) },
|
|
||||||
[name]
|
|
||||||
);
|
|
||||||
|
|
||||||
if (index === 0) {
|
|
||||||
this.#active = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.#head[name] = tag;
|
|
||||||
head.push(tag);
|
|
||||||
this.#body[name] = el;
|
|
||||||
body.push(el);
|
|
||||||
});
|
|
||||||
|
|
||||||
this.element = $el("div.comfy-tabs", [
|
|
||||||
$el("div.comfy-tabs-head", head),
|
|
||||||
$el("div.comfy-tabs-body", body),
|
|
||||||
]);
|
|
||||||
|
|
||||||
this.active(this.#active);
|
|
||||||
}
|
|
||||||
|
|
||||||
#active = undefined;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param {string} name
|
|
||||||
*/
|
|
||||||
active(name) {
|
|
||||||
this.#active = name;
|
|
||||||
Object.keys(this.#head).forEach((key) => {
|
|
||||||
if (name === key) {
|
|
||||||
this.#head[key].classList.add("active");
|
|
||||||
this.#body[key].style.display = "";
|
|
||||||
} else {
|
|
||||||
this.#head[key].classList.remove("active");
|
|
||||||
this.#body[key].style.display = "none";
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param {Record<HTMLDivElement, Any>} tabs
|
|
||||||
* @returns {HTMLDivElement[]}
|
|
||||||
*/
|
|
||||||
function $tabs(tabs) {
|
|
||||||
const instance = new Tabs(tabs);
|
|
||||||
return instance.element;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param {string} name
|
|
||||||
* @param {HTMLDivElement[]} el
|
|
||||||
* @returns {HTMLDivElement}
|
|
||||||
*/
|
|
||||||
function $tab(name, el) {
|
|
||||||
return $el("div", { dataset: { name } }, el);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @returns {HTMLLabelElement}
|
* @returns {HTMLLabelElement}
|
||||||
*/
|
*/
|
||||||
@@ -3357,11 +3279,47 @@ class ModelManager extends ComfyDialog {
|
|||||||
const sidebarButtons = new SidebarButtons(this);
|
const sidebarButtons = new SidebarButtons(this);
|
||||||
this.#sidebarButtons = sidebarButtons;
|
this.#sidebarButtons = sidebarButtons;
|
||||||
|
|
||||||
const tabs = $tabs([
|
/** @type {Record<string, HTMLDivElement>} */
|
||||||
$tab("Download", [downloadTab.element]),
|
const head = {};
|
||||||
$tab("Models", [modelTab.element]),
|
|
||||||
$tab("Settings", [settingsTab.element]),
|
/** @type {Record<string, HTMLDivElement>} */
|
||||||
]);
|
const body = {};
|
||||||
|
|
||||||
|
/** @type {HTMLDivElement[]} */
|
||||||
|
const contents = [
|
||||||
|
$el("div", { dataset: { name: "Download" } }, [downloadTab.element]),
|
||||||
|
$el("div", { dataset: { name: "Models" } }, [modelTab.element]),
|
||||||
|
$el("div", { dataset: { name: "Settings" } }, [settingsTab.element]),
|
||||||
|
];
|
||||||
|
|
||||||
|
const tabs = contents.map((content) => {
|
||||||
|
const name = content.getAttribute("data-name");
|
||||||
|
/** @type {HTMLDivElement} */
|
||||||
|
const tab = $el(
|
||||||
|
"div.head-item",
|
||||||
|
{
|
||||||
|
onclick: () => {
|
||||||
|
const ACTIVE_TAB_CLASS = "active";
|
||||||
|
Object.keys(head).forEach((key) => {
|
||||||
|
if (name === key) {
|
||||||
|
head[key].classList.add(ACTIVE_TAB_CLASS);
|
||||||
|
body[key].style.display = "";
|
||||||
|
} else {
|
||||||
|
head[key].classList.remove(ACTIVE_TAB_CLASS);
|
||||||
|
body[key].style.display = "none";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
},
|
||||||
|
[
|
||||||
|
name,
|
||||||
|
],
|
||||||
|
);
|
||||||
|
head[name] = tab;
|
||||||
|
body[name] = content;
|
||||||
|
return tab;
|
||||||
|
});
|
||||||
|
tabs[0]?.click();
|
||||||
|
|
||||||
this.element = $el(
|
this.element = $el(
|
||||||
"div.comfy-modal.model-manager",
|
"div.comfy-modal.model-manager",
|
||||||
@@ -3387,7 +3345,10 @@ class ModelManager extends ComfyDialog {
|
|||||||
}),
|
}),
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
tabs,
|
$el("div.comfy-tabs", [
|
||||||
|
$el("div.comfy-tabs-head", tabs),
|
||||||
|
$el("div.comfy-tabs-body", contents),
|
||||||
|
]),
|
||||||
]),
|
]),
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
@@ -3400,9 +3361,8 @@ class ModelManager extends ComfyDialog {
|
|||||||
const managerRect = this.element.getBoundingClientRect();
|
const managerRect = this.element.getBoundingClientRect();
|
||||||
const isNarrow = managerRect.width < minWidth;
|
const isNarrow = managerRect.width < minWidth;
|
||||||
let texts = isNarrow ? ["⬇️", "📁", "⚙️"] : ["Download", "Models", "Settings"];
|
let texts = isNarrow ? ["⬇️", "📁", "⚙️"] : ["Download", "Models", "Settings"];
|
||||||
const tabHeaders = tabs.children[0];
|
|
||||||
texts.forEach((text, i) => {
|
texts.forEach((text, i) => {
|
||||||
tabHeaders.children[i].innerText = text;
|
tabs[i].innerText = text;
|
||||||
});
|
});
|
||||||
}).observe(this.element);
|
}).observe(this.element);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user