|
|
import { app } from "../../../scripts/app.js";
|
|
|
import { addMenuHandler } from "./common/utils.js";
|
|
|
|
|
|
function replaceNode(oldNode, newNodeName) {
|
|
|
const newNode = LiteGraph.createNode(newNodeName);
|
|
|
if (!newNode) {
|
|
|
return;
|
|
|
}
|
|
|
app.graph.add(newNode);
|
|
|
|
|
|
newNode.pos = oldNode.pos.slice();
|
|
|
|
|
|
|
|
|
|
|
|
if(["XY Plot", "AnimateDiff Script"].includes(oldNode.type)) {
|
|
|
if (oldNode.outputs[0] && oldNode.outputs[0].links) {
|
|
|
oldNode.outputs[0].links.forEach(link => {
|
|
|
const targetLinkInfo = oldNode.graph.links[link];
|
|
|
if (targetLinkInfo) {
|
|
|
const targetNode = oldNode.graph.getNodeById(targetLinkInfo.target_id);
|
|
|
if (targetNode) {
|
|
|
newNode.connect(0, targetNode, targetLinkInfo.target_slot);
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
} else {
|
|
|
|
|
|
if (oldNode.inputs[0] && oldNode.inputs[0].link !== null) {
|
|
|
const originLinkInfo = oldNode.graph.links[oldNode.inputs[0].link];
|
|
|
if (originLinkInfo) {
|
|
|
const originNode = oldNode.graph.getNodeById(originLinkInfo.origin_id);
|
|
|
if (originNode) {
|
|
|
originNode.connect(originLinkInfo.origin_slot, newNode, 0);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (oldNode.outputs[0] && oldNode.outputs[0].links) {
|
|
|
oldNode.outputs[0].links.forEach(link => {
|
|
|
const targetLinkInfo = oldNode.graph.links[link];
|
|
|
if (targetLinkInfo) {
|
|
|
const targetNode = oldNode.graph.getNodeById(targetLinkInfo.target_id);
|
|
|
if (targetNode) {
|
|
|
newNode.connect(0, targetNode, targetLinkInfo.target_slot);
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
app.graph.remove(oldNode);
|
|
|
}
|
|
|
|
|
|
function replaceNodeMenuCallback(currentNode, targetNodeName) {
|
|
|
return function() {
|
|
|
replaceNode(currentNode, targetNodeName);
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function showSwapMenu(value, options, e, menu, node) {
|
|
|
const scriptNodes = [
|
|
|
"XY Plot",
|
|
|
"Noise Control Script",
|
|
|
"HighRes-Fix Script",
|
|
|
"Tiled Upscaler Script",
|
|
|
"AnimateDiff Script"
|
|
|
];
|
|
|
|
|
|
const swapOptions = scriptNodes.filter(n => n !== node.type).map(n => ({
|
|
|
content: n,
|
|
|
callback: replaceNodeMenuCallback(node, n)
|
|
|
}));
|
|
|
|
|
|
new LiteGraph.ContextMenu(swapOptions, {
|
|
|
event: e,
|
|
|
callback: null,
|
|
|
parentMenu: menu,
|
|
|
node: node
|
|
|
});
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
|
|
|
app.registerExtension({
|
|
|
name: "efficiency.SwapScripts",
|
|
|
async beforeRegisterNodeDef(nodeType, nodeData, app) {
|
|
|
if (["XY Plot", "Noise Control Script", "HighRes-Fix Script", "Tiled Upscaler Script", "AnimateDiff Script"].includes(nodeData.name)) {
|
|
|
addMenuHandler(nodeType, function (insertOption) {
|
|
|
insertOption({
|
|
|
content: "๐ Swap with...",
|
|
|
has_submenu: true,
|
|
|
callback: showSwapMenu
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
},
|
|
|
});
|
|
|
|