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(); // 确保事件绑定 } } }