|
import { app } from "../../scripts/app.js";
|
|
import { IoDirection, addConnectionLayoutSupport, followConnectionUntilType } from "./utils.js";
|
|
import { RgthreeBaseServerNode } from "./base_node.js";
|
|
import { NodeTypesString } from "./constants.js";
|
|
import { removeUnusedInputsFromEnd } from "./utils_inputs_outputs.js";
|
|
import { debounce } from "../../rgthree/common/shared_utils.js";
|
|
class RgthreeAnySwitch extends RgthreeBaseServerNode {
|
|
constructor(title = RgthreeAnySwitch.title) {
|
|
super(title);
|
|
this.stabilizeBound = this.stabilize.bind(this);
|
|
this.nodeType = null;
|
|
this.addAnyInput(5);
|
|
}
|
|
onConnectionsChange(type, slotIndex, isConnected, linkInfo, ioSlot) {
|
|
var _a;
|
|
(_a = super.onConnectionsChange) === null || _a === void 0 ? void 0 : _a.call(this, type, slotIndex, isConnected, linkInfo, ioSlot);
|
|
this.scheduleStabilize();
|
|
}
|
|
onConnectionsChainChange() {
|
|
this.scheduleStabilize();
|
|
}
|
|
scheduleStabilize(ms = 64) {
|
|
return debounce(this.stabilizeBound, ms);
|
|
}
|
|
addAnyInput(num = 1) {
|
|
for (let i = 0; i < num; i++) {
|
|
this.addInput(`any_${String(this.inputs.length + 1).padStart(2, "0")}`, (this.nodeType || "*"));
|
|
}
|
|
}
|
|
stabilize() {
|
|
removeUnusedInputsFromEnd(this, 4);
|
|
this.addAnyInput();
|
|
let connectedType = followConnectionUntilType(this, IoDirection.INPUT, undefined, true);
|
|
if (!connectedType) {
|
|
connectedType = followConnectionUntilType(this, IoDirection.OUTPUT, undefined, true);
|
|
}
|
|
this.nodeType = (connectedType === null || connectedType === void 0 ? void 0 : connectedType.type) || "*";
|
|
for (const input of this.inputs) {
|
|
input.type = this.nodeType;
|
|
}
|
|
for (const output of this.outputs) {
|
|
output.type = this.nodeType;
|
|
output.label =
|
|
output.type === "RGTHREE_CONTEXT"
|
|
? "CONTEXT"
|
|
: Array.isArray(this.nodeType) || this.nodeType.includes(",")
|
|
? (connectedType === null || connectedType === void 0 ? void 0 : connectedType.label) || String(this.nodeType)
|
|
: String(this.nodeType);
|
|
}
|
|
}
|
|
static setUp(comfyClass, nodeData) {
|
|
RgthreeBaseServerNode.registerForOverride(comfyClass, nodeData, RgthreeAnySwitch);
|
|
addConnectionLayoutSupport(RgthreeAnySwitch, app, [
|
|
["Left", "Right"],
|
|
["Right", "Left"],
|
|
]);
|
|
}
|
|
}
|
|
RgthreeAnySwitch.title = NodeTypesString.ANY_SWITCH;
|
|
RgthreeAnySwitch.type = NodeTypesString.ANY_SWITCH;
|
|
RgthreeAnySwitch.comfyClass = NodeTypesString.ANY_SWITCH;
|
|
app.registerExtension({
|
|
name: "rgthree.AnySwitch",
|
|
async beforeRegisterNodeDef(nodeType, nodeData, app) {
|
|
if (nodeData.name === "Any Switch (rgthree)") {
|
|
RgthreeAnySwitch.setUp(nodeType, nodeData);
|
|
}
|
|
},
|
|
});
|
|
|