Use new frontend ComfyButton API for menu button

Adds button via app.menu.settingsGroup using ComfyButton with
bar-chart-2 icon. Falls back to legacy .comfy-menu DOM for
older ComfyUI versions.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-22 13:41:39 +01:00
parent 6b76879345
commit 6d0e5d55ed

View File

@@ -4,28 +4,34 @@ app.registerExtension({
name: "comfyui.nodes_stats", name: "comfyui.nodes_stats",
async setup() { async setup() {
const btn = document.createElement("button"); try {
btn.textContent = "Node Stats"; const { ComfyButton } = await import(
btn.style.cssText = "../../scripts/ui/components/button.js"
"font-size:14px;padding:4px 12px;cursor:pointer;border:none;border-radius:4px;background:#333;color:#fff;"; );
btn.addEventListener("click", () => showStatsDialog());
// Insert into ComfyUI menu bar const btn = new ComfyButton({
const menu = document.querySelector(".comfy-menu .comfy-menu-btns") || icon: "bar-chart-2",
document.querySelector(".comfy-menu"); content: "Node Stats",
if (menu) { tooltip: "Show node and package usage statistics",
menu.appendChild(btn); action: () => showStatsDialog(),
} else { classList: "comfyui-button comfyui-menu-mobile-collapse",
// Fallback: wait for menu to appear
const observer = new MutationObserver(() => {
const m = document.querySelector(".comfy-menu .comfy-menu-btns") ||
document.querySelector(".comfy-menu");
if (m) {
m.appendChild(btn);
observer.disconnect();
}
}); });
observer.observe(document.body, { childList: true, subtree: true });
app.menu?.settingsGroup.element.before(btn.element);
} catch (e) {
console.log(
"[nodes-stats] New menu API unavailable, falling back to legacy menu",
e
);
const btn = document.createElement("button");
btn.textContent = "Node Stats";
btn.onclick = () => showStatsDialog();
const menu = document.querySelector(".comfy-menu");
if (menu) {
menu.append(btn);
}
} }
}, },
}); });