Spaces:
Sleeping
Sleeping
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); | |
} | |
}, | |
}); | |