diff --git a/pyproject.toml b/pyproject.toml
index 302036e..e46fdba 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,7 +1,7 @@
[project]
name = "kaytool"
description ="KayTool enhances ComfyUI workflow efficiency with practical tools, including: image processing (resize, color, blur, expand, merge, crop), background/mask tasks via BiRefNet/RemBG, wireless data transfer (Get & Out), AI translation (Tencent/Baidu), dynamic math operations, flexible text handling, precision sliders, metadata/color profile-supported image saving, batch processing via image folder loading, canvas workflow node map export as PNG with embedded metadata, quick Run options via right-click (Run Group/Node), node alignment toolbar with custom styled styles, and custom ComfyUI logo integration."
-version = "0.50.2"
+version = "0.50.3"
license = {file = "LICENSE"}
dependencies = ["rembg, timm"]
diff --git a/web/nodealign.js b/web/nodealign.js
index 2499f84..bfb9ba3 100644
--- a/web/nodealign.js
+++ b/web/nodealign.js
@@ -11,7 +11,6 @@ const kayAlignTopSvg = ``;
const kayEqualHeightSvg = ``;
-
const KayNodeAlignmentManager = {
isInitialized: false,
toolbarContainer: null,
@@ -40,8 +39,8 @@ const KayNodeAlignmentManager = {
this.setupToolbar();
requestAnimationFrame(() => this.restorePosition());
const displayMode = app.ui.settings.getSettingValue("KayTool.NodeAlignDisplayMode") || "permanent";
- console.log(`Initial display mode: ${displayMode}`);
this.updateDisplayMode(displayMode);
+ this.bindCanvasEvents();
});
} catch (error) {
console.error("Error in KayNodeAlignmentManager.init:", error);
@@ -552,17 +551,14 @@ const KayNodeAlignmentManager = {
updateDisplayMode(mode) {
try {
const effectiveMode = mode || "permanent";
- console.log(`Updating display mode to: ${effectiveMode}`);
+ this.isPermanent = effectiveMode === "permanent";
+
if (effectiveMode === "disabled") {
this.hide();
- return;
- }
- this.isPermanent = effectiveMode === "permanent";
- if (this.isPermanent) {
+ } else if (effectiveMode === "permanent") {
this.show();
} else if (effectiveMode === "on-select") {
const selectedNodes = this.getSelectedNodes();
- console.log(`Selected nodes count: ${selectedNodes.length}`);
if (selectedNodes.length >= 2) {
this.show();
} else {
@@ -574,10 +570,21 @@ const KayNodeAlignmentManager = {
}
},
+ bindCanvasEvents() {
+ if (!this.canvas) return;
+ this.canvas.removeEventListener('click', this.handleCanvasClick);
+ this.handleCanvasClick = () => {
+ const currentMode = app.ui.settings.getSettingValue("KayTool.NodeAlignDisplayMode") || "permanent";
+ this.updateDisplayMode(currentMode);
+ };
+ this.canvas.addEventListener('click', this.handleCanvasClick);
+ },
+
cleanup() {
document.removeEventListener('mousemove', this.onDragging);
document.removeEventListener('mouseup', this.onDragEnd);
document.removeEventListener('selectstart', e => this.dragState.isDragging && e.preventDefault());
+ if (this.canvas) this.canvas.removeEventListener('click', this.handleCanvasClick);
if (this.toolbarContainer) this.toolbarContainer.remove();
if (this.insertionIndicator) this.insertionIndicator.remove();
this.isInitialized = false;
@@ -587,19 +594,11 @@ const KayNodeAlignmentManager = {
function initializeKayNodeAlignment() {
try {
const displayMode = app.ui.settings.getSettingValue("KayTool.NodeAlignDisplayMode") || "permanent";
- console.log(`Initializing with display mode: ${displayMode}`);
if (displayMode === "disabled") return;
const canvas = document.querySelector('canvas#graph-canvas');
if (canvas) {
KayNodeAlignmentManager.init();
-
- canvas.addEventListener('click', () => {
- const currentMode = app.ui.settings.getSettingValue("KayTool.NodeAlignDisplayMode") || "permanent";
- if (currentMode === "on-select") {
- KayNodeAlignmentManager.updateDisplayMode(currentMode);
- }
- });
} else {
console.log("Canvas not found, retrying in 1s...");
setTimeout(initializeKayNodeAlignment, 1000);
@@ -614,9 +613,10 @@ app.registerExtension({
name: "KayTool.NodeAlign",
init() {
try {
- console.log("Starting KayTool.NodeAlign init");
initializeKayNodeAlignment();
- console.log("KayTool.NodeAlign init completed");
+ // 将全局引用暴露给 settings.js
+ window.KayNodeAlignmentManager = KayNodeAlignmentManager;
+ window.initializeKayNodeAlignment = initializeKayNodeAlignment;
} catch (error) {
console.error("Error in extension init:", error);
throw error;
diff --git a/web/settings.js b/web/settings.js
index 162d8df..b81e125 100644
--- a/web/settings.js
+++ b/web/settings.js
@@ -95,22 +95,20 @@ app.registerExtension({
category: ["KayTool", "NodeAlignment", "DisplayMode"],
tooltip: "Controls when the node alignment toolbar is displayed.",
onChange: (value) => {
- if (window.KayNodeAlignmentManager) {
- if (value === "disabled") {
- if (KayNodeAlignmentManager.isInitialized) {
- KayNodeAlignmentManager.cleanup();
- }
- } else if (!KayNodeAlignmentManager.isInitialized) {
- const initFn = window.initializeKayNodeAlignment;
- if (initFn) initFn();
+ const manager = window.KayNodeAlignmentManager;
+ const initFn = window.initializeKayNodeAlignment;
+ if (!manager || !initFn) return;
+
+ if (value === "disabled") {
+ if (manager.isInitialized) {
+ manager.cleanup();
+ }
+ } else {
+ if (!manager.isInitialized) {
+ initFn();
} else {
- KayNodeAlignmentManager.updateDisplayMode(value);
- const selectedNodes = KayNodeAlignmentManager.getSelectedNodes();
- if (value === "on-select") {
- selectedNodes.length >= 2 ? KayNodeAlignmentManager.show() : KayNodeAlignmentManager.hide();
- } else {
- KayNodeAlignmentManager.show();
- }
+ manager.updateDisplayMode(value);
+ manager.bindCanvasEvents(); // 确保事件绑定
}
}
}