Make GenAsset manager button independent
This commit is contained in:
@@ -2,6 +2,9 @@ name: Publish to Comfy registry
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
tags:
|
||||
- "v*"
|
||||
|
||||
jobs:
|
||||
publish-node:
|
||||
|
||||
@@ -8,7 +8,7 @@ ComfyUI nodes for saving, loading, and versioning image generations in **GenAsse
|
||||
|
||||
GenAsset keeps the output image together with the recipe (prompt, model, seed, sampler/scheduler, workflow JSON, metadata), so teams and agents can reproduce and reuse results reliably.
|
||||
|
||||
Current package version: **v1.0.17**.
|
||||
Current package version: **v1.0.18**.
|
||||
|
||||
## Start Free
|
||||
|
||||
|
||||
+53
-3
@@ -1783,6 +1783,55 @@ function managerButtonCandidates() {
|
||||
});
|
||||
}
|
||||
|
||||
function buttonCandidatesMatching(pattern) {
|
||||
return [...document.querySelectorAll("button")].filter((button) => {
|
||||
const label = [button.getAttribute("aria-label"), button.getAttribute("title"), button.textContent]
|
||||
.filter(Boolean)
|
||||
.join(" ")
|
||||
.trim();
|
||||
return pattern.test(label) && isVisibleElement(button);
|
||||
});
|
||||
}
|
||||
|
||||
function stableToolbarContainers() {
|
||||
const selectors = [
|
||||
".comfyui-menu",
|
||||
".comfyui-menu-right",
|
||||
".comfyui-menu-actions",
|
||||
".comfyui-queue-button",
|
||||
".comfyui-button-group",
|
||||
".comfyui-body-top",
|
||||
".comfyui-topbar",
|
||||
".comfyui-top-bar",
|
||||
".topbar",
|
||||
".p-toolbar",
|
||||
];
|
||||
const containers = [];
|
||||
for (const selector of selectors) {
|
||||
for (const element of document.querySelectorAll(selector)) {
|
||||
if (element instanceof HTMLElement && isVisibleElement(element)) containers.push(element);
|
||||
}
|
||||
}
|
||||
return containers;
|
||||
}
|
||||
|
||||
function toolbarAnchorCandidate() {
|
||||
const managerButton = managerButtonCandidates()[0];
|
||||
if (managerButton?.parentElement) {
|
||||
return { container: managerButton.parentElement, before: managerButton, mode: "manager" };
|
||||
}
|
||||
|
||||
const runButton = buttonCandidatesMatching(/\brun\b/i)[0];
|
||||
if (runButton?.parentElement) {
|
||||
return { container: runButton.parentElement, before: runButton, mode: "run" };
|
||||
}
|
||||
|
||||
const container = stableToolbarContainers()[0];
|
||||
if (container) return { container, before: null, mode: "container" };
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
function createToolbarButton() {
|
||||
const button = document.createElement("button");
|
||||
button.className = "genasset-toolbar-button";
|
||||
@@ -1978,10 +2027,11 @@ function installToolbarButton() {
|
||||
const existingButtons = [...document.querySelectorAll(".genasset-toolbar-button")];
|
||||
if (existingButtons.some(isVisibleElement)) return true;
|
||||
for (const existing of existingButtons) existing.remove();
|
||||
const managerButton = managerButtonCandidates()[0];
|
||||
if (!managerButton || !managerButton.parentElement) return false;
|
||||
const anchor = toolbarAnchorCandidate();
|
||||
if (!anchor?.container) return false;
|
||||
const button = createToolbarButton();
|
||||
managerButton.parentElement.insertBefore(button, managerButton);
|
||||
if (anchor.mode !== "manager") button.dataset.genassetAnchor = anchor.mode;
|
||||
anchor.container.insertBefore(button, anchor.before || null);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
[project]
|
||||
name = "genasset"
|
||||
version = "1.0.17"
|
||||
version = "1.0.18"
|
||||
description = "ComfyUI nodes for saving, loading, and versioning GenAsset generations."
|
||||
license = { file = "LICENSE" }
|
||||
requires-python = ">=3.10"
|
||||
|
||||
Reference in New Issue
Block a user