Merge pull request #6 from MakkiShizu/main

重构 `dynamic_connection` 以修复 `text_concatenate_widget`
This commit is contained in:
TFL-TFL
2025-05-25 09:37:37 +08:00
committed by GitHub
2 changed files with 45 additions and 33 deletions
+2 -2
View File
@@ -1,5 +1,5 @@
import {app } from "../../scripts/app.js";
import { log, dynamic_connection, findWidgetByName, toggleWidget } from './ulits.js'
import { log, dynamic_connection, findWidgetByName, toggleWidget } from './utils.js'
app.registerExtension({
name: "TextTranslation.text",
@@ -25,7 +25,7 @@ function text_concatenate_widget(nodeType, nodeData, app) {
const onNodeCreated = nodeType.prototype.onNodeCreated;
nodeType.prototype.onNodeCreated = function () {
const onc = onNodeCreated?.apply(this, arguments);
this.addInput(`${input_name}`, "STRING");
this.addInput(`${input_name}1`, "STRING");
return onc;
};
+43 -31
View File
@@ -40,41 +40,53 @@ export const dynamic_connection = (
connectionType = 'PSDLAYER'
) => {
if (!connected && (node.inputs.length > 1)) {
const stackTrace = new Error().stack;
for (let i = 0; i < node.inputs.length -1; i++) {
if(!stackTrace.includes('LGraphNode.prototype.connect') &&
!stackTrace.includes('LGraphNode.connect') &&
!stackTrace.includes('loadGraphData') &&
!node.inputs[i].link) {
node.removeInput(i);
}
if (!node._isRestoring) {
node._dynamicInputs = new Set();
}
const removeUnusedInputs = () => {
for (let i = node.inputs.length - 1; i >= 0; i--) {
const input = node.inputs[i];
const isDynamic = node._dynamicInputs?.has(input.name);
if (input.link || (isDynamic && node._isRestoring)) {
continue;
}
}
let last_slot = node.inputs[node.inputs.length - 1];
if (last_slot.link != undefined) {
node.addInput(`${connectionPrefix}`, connectionType);
}
if (connected && (node.inputs.length > 1)) {
const stackTrace = new Error().stack;
for (let i = 0; i < node.inputs.length -1; i++) {
if(!stackTrace.includes('LGraphNode.prototype.connect') &&
!stackTrace.includes('LGraphNode.connect') &&
!stackTrace.includes('loadGraphData') &&
!node.inputs[i].link) {
node.removeInput(i);
}
if (isDynamic) {
node.removeInput(i);
node._dynamicInputs.delete(input.name);
}
}
};
const prevRestoring = node._isRestoring;
if (node._isRestoring) {
node._dynamicInputs = new Set(
node.inputs
.filter((input) => input.name.startsWith(connectionPrefix))
.map((input) => input.name)
);
}
if ((node.inputs.length > 1)) {
for (let i = 0; i < node.inputs.length -1; i++) {
node.inputs[i].name = `${connectionPrefix}${i + 1}`
node.inputs[i].label = `${connectionPrefix}${i + 1}`
}
removeUnusedInputs();
const lastInput = node.inputs[node.inputs.length - 1];
if (lastInput?.link && !node._isRestoring) {
const newIndex = node.inputs.length + 1;
const newName = `${connectionPrefix}${newIndex}`;
const newInput = node.addInput(newName, connectionType);
node._dynamicInputs.add(newName);
}
let validIndex = 1;
node.inputs.forEach((input) => {
if (input.name.startsWith(connectionPrefix)) {
input.name = `${connectionPrefix}${validIndex++}`;
input.label = input.name;
}
});
node._isRestoring = prevRestoring;
}
export const log = (...args) => {