Initial simple context menu for adding set/get

wip
This commit is contained in:
kijai 2023-10-19 11:08:17 +03:00
parent 26cdd07f52
commit 8202643f82

51
web/js/contextmenu.js Normal file
View File

@ -0,0 +1,51 @@
import { app } from "../../../scripts/app.js";
// Adds context menu entries, code from pyssssscustom-scripts
function addMenuHandler(nodeType, cb) {
const getOpts = nodeType.prototype.getExtraMenuOptions;
nodeType.prototype.getExtraMenuOptions = function () {
const r = getOpts.apply(this, arguments);
cb.apply(this, arguments);
return r;
};
}
function addNode(name, nextTo, options) {
options = { select: true, shiftY: 0, shiftX: 0, before: false, ...(options || {}) };
const node = LiteGraph.createNode(name);
app.graph.add(node);
node.pos = [
options.before ? nextTo.pos[0] - node.size[0] - 30 : nextTo.pos[0] + nextTo.size[0] + 30,
nextTo.pos[0] + options.shiftX,
nextTo.pos[1] + options.shiftY,
];
if (options.select) {
app.canvas.selectNode(node, false);
}
return node;
}
app.registerExtension({
name: "KJNodesContextmenu",
async beforeRegisterNodeDef(nodeType, nodeData, app) {
if (nodeData.input && nodeData.input.required) {
addMenuHandler(nodeType, function (_, options) {
options.unshift(
{
content: "Add GetNode",
callback: () => {addNode("GetNode", this, { shiftY: 0,shiftX: this.size[0] + 30 });}
},
{
content: "Add SetNode",
callback: () => {
addNode("SetNode", this);
},
});
});
}
},
});