From c317b65fd828025a3d7d92be786f9b43fe2bd80e Mon Sep 17 00:00:00 2001 From: pythongosssss <125205205+pythongosssss@users.noreply.github.com> Date: Sat, 6 May 2023 15:35:38 +0100 Subject: [PATCH] Renamed to node finder Added go to executing, and got to node via type --- follow-execution/followExecution.js | 35 ------------ node-finder/nodeFinder.js | 82 +++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+), 35 deletions(-) delete mode 100644 follow-execution/followExecution.js create mode 100644 node-finder/nodeFinder.js diff --git a/follow-execution/followExecution.js b/follow-execution/followExecution.js deleted file mode 100644 index 4072110..0000000 --- a/follow-execution/followExecution.js +++ /dev/null @@ -1,35 +0,0 @@ -import { app } from "/scripts/app.js"; -import { api } from "/scripts/api.js"; - -// Adds a menu option to toggle follow the executing node - -app.registerExtension({ - name: "pysssss.FollowExecution", - setup() { - let followExecution = false; - - const centerNode = (id) => { - if (!followExecution || !id) return; - const node = app.graph.getNodeById(id); - if (!node) return; - app.canvas.centerOnNode(node); - }; - - api.addEventListener("executing", ({ detail }) => centerNode(detail)); - - // Add canvas menu options - const orig = LGraphCanvas.prototype.getCanvasMenuOptions; - LGraphCanvas.prototype.getCanvasMenuOptions = function () { - const options = orig.apply(this, arguments); - options.push(null, { - content: followExecution ? "Stop following execution" : "Follow execution", - callback: () => { - if ((followExecution = !followExecution)) { - centerNode(app.runningNodeId); - } - }, - }); - return options; - }; - }, -}); diff --git a/node-finder/nodeFinder.js b/node-finder/nodeFinder.js new file mode 100644 index 0000000..62363a2 --- /dev/null +++ b/node-finder/nodeFinder.js @@ -0,0 +1,82 @@ +import { app } from "/scripts/app.js"; +import { api } from "/scripts/api.js"; + +// Adds a menu option to toggle follow the executing node +// Adds a menu option to go to the currently executing node +// Adds a menu option to go to a node by type + +app.registerExtension({ + name: "pysssss.NodeFinder", + setup() { + let followExecution = false; + + const centerNode = (id) => { + if (!followExecution || !id) return; + const node = app.graph.getNodeById(id); + if (!node) return; + app.canvas.centerOnNode(node); + }; + + api.addEventListener("executing", ({ detail }) => centerNode(detail)); + + // Add canvas menu options + const orig = LGraphCanvas.prototype.getCanvasMenuOptions; + LGraphCanvas.prototype.getCanvasMenuOptions = function () { + const options = orig.apply(this, arguments); + options.push(null, { + content: followExecution ? "Stop following execution" : "Follow execution", + callback: () => { + if ((followExecution = !followExecution)) { + centerNode(app.runningNodeId); + } + }, + }); + if (app.runningNodeId) { + options.push({ + content: "Show executing node", + callback: () => { + const node = app.graph.getNodeById(app.runningNodeId); + if (!node) return; + app.canvas.centerOnNode(node); + }, + }); + } + + const nodes = app.graph._nodes; + const types = nodes.reduce((p, n) => { + if (n.type in p) { + p[n.type].push(n); + } else { + p[n.type] = [n]; + } + return p; + }, {}); + options.push({ + content: "Go to node", + has_submenu: true, + submenu: { + options: Object.keys(types) + .sort() + .map((t) => ({ + content: t, + has_submenu: true, + submenu: { + options: types[t] + .sort((a, b) => { + return a.pos[0] - b.pos[0]; + }) + .map((n) => ({ + content: `${n.getTitle()} - #${n.id} (${n.pos[0]}, ${n.pos[1]})`, + callback: () => { + app.canvas.centerOnNode(n); + }, + })), + }, + })), + }, + }); + + return options; + }; + }, +});