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