diff --git a/web/js/contextmenu.js b/web/js/contextmenu.js new file mode 100644 index 0000000..a977548 --- /dev/null +++ b/web/js/contextmenu.js @@ -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); + }, + + }); + }); + + } + }, +});