/** * File: debug.js * Project: comfy_DZ * Author: Mel Massadian * * Copyright (c) 2023 Mel Massadian * */ import { app } from '../../scripts/app.js' import * as shared from './dz_comfy_shared.js' import { log } from './dz_comfy_shared.js' import { DZWidgets } from './dz_DZ_widgets.js' // TODO: respect inputs order... function escapeHtml(unsafe) { return unsafe .replace(/&/g, '&') .replace(//g, '>') .replace(/"/g, '"') .replace(/'/g, ''') } app.registerExtension({ name: 'DZ.Debug', async beforeRegisterNodeDef(nodeType, nodeData, app) { if (nodeData.name === 'Debug (DZ)') { const onConnectionsChange = nodeType.prototype.onConnectionsChange nodeType.prototype.onConnectionsChange = function ( type, index, connected, link_info ) { const r = onConnectionsChange ? onConnectionsChange.apply(this, arguments) : undefined // TODO: remove all widgets on disconnect once computed shared.dynamic_connection(this, index, connected, 'anything_', '*') //- infer type if (link_info) { const fromNode = this.graph._nodes.find( (otherNode) => otherNode.id == link_info.origin_id ) const type = fromNode.outputs[link_info.origin_slot].type this.inputs[index].type = type // this.inputs[index].label = type.toLowerCase() } //- restore dynamic input if (!connected) { this.inputs[index].type = '*' this.inputs[index].label = `anything_${index + 1}` } } const onExecuted = nodeType.prototype.onExecuted nodeType.prototype.onExecuted = function (message) { onExecuted?.apply(this, arguments) const prefix = 'anything_' if (this.widgets) { // const pos = this.widgets.findIndex((w) => w.name === "anything_1"); // if (pos !== -1) { for (let i = 0; i < this.widgets.length; i++) { this.widgets[i].onRemoved?.() } this.widgets.length = 0 } let widgetI = 1 if (message.text) { for (const txt of message.text) { const w = this.addCustomWidget( DZWidgets.DEBUG_STRING(`${prefix}_${widgetI}`, escapeHtml(txt)) ) w.parent = this widgetI++ } } if (message.b64_images) { for (const img of message.b64_images) { const w = this.addCustomWidget( DZWidgets.DEBUG_IMG(`${prefix}_${widgetI}`, img) ) w.parent = this widgetI++ } // this.onResize?.(this.size); // this.resize?.(this.size) } this.setSize(this.computeSize()) this.onRemoved = function () { // When removing this node we need to remove the input from the DOM for (let y in this.widgets) { if (this.widgets[y].canvas) { this.widgets[y].canvas.remove() } this.widgets[y].onRemoved?.() } } } } }, })