Files
griptape-ai-ComfyUI-Griptape/js/CodeExecutionNode.js
T

61 lines
2.1 KiB
JavaScript

import { ComfyWidgets } from "../../../scripts/widgets.js";
import { fitHeight } from "./utils.js";
import { formatAndDisplayJSON } from "./gtUIUtils.js";
import { hideWidget, showWidget } from "./utils.js";
import { app } from "../../../scripts/app.js";
import { code_execution_templates } from "./CodeExecutionNodeTemplates.js";
// make a list of the keys in the code_execution_templates object
const code_execution_template_keys = Object.keys(code_execution_templates);
export function setupCodeExecutionNode(nodeType, nodeData, app) {
if (nodeData.name.includes("Run Python"))
{
// Add menu items to examples dropdown
const onNodeCreated = nodeType.prototype.onNodeCreated;
nodeType.prototype.onNodeCreated = async function () {
onNodeCreated?.apply(this, arguments);
const examples_widget = this.widgets.find(w => w.name === 'examples');
examples_widget.options.values = code_execution_template_keys;
examples_widget.callback = async() => {
const code_widget = this.widgets.find(w => w.name === 'code');
code_widget.value = code_execution_templates[examples_widget.value];
}
}
const original_getExtraMenuOptions = nodeType.prototype.getExtraMenuOptions;
nodeType.prototype.getExtraMenuOptions = function(_, options) {
original_getExtraMenuOptions?.apply(this, arguments);
options.push({
content: "Griptape Code Execution Templates",
has_submenu: true,
callback: make_code_execution_templates_submenu
}
)
}
}
}
function make_code_execution_templates_submenu(value, options, e, menu, node) {
const submenu = new LiteGraph.ContextMenu(
code_execution_template_keys,
{
event: e,
callback: function (v) {
const code_widget = node.widgets.find(w => w.name === 'code');
code_widget.value = code_execution_templates[v];
// do something with v (=="option x")
},
parentMenu: menu,
node:node
}
)
}