195 lines
6.3 KiB
JavaScript
195 lines
6.3 KiB
JavaScript
import { api } from "../../../scripts/api.js";
|
|
import { app } from "../../../scripts/app.js";
|
|
import { allow_debug } from "./js_shared.js";
|
|
|
|
const _id = "iToolsPromptStylerExtra";
|
|
|
|
async function send_request_templates_for_file(file_name) {
|
|
const body = new FormData();
|
|
body.append("file_name", file_name);
|
|
const r = await api.fetchApi("/itools/request_templates_for_file", {
|
|
method: "POST",
|
|
body,
|
|
});
|
|
return r.json();
|
|
}
|
|
|
|
app.registerExtension({
|
|
name: "makadi." + _id,
|
|
async beforeRegisterNodeDef(nodeType, nodeData, app) {
|
|
if (nodeData.name !== _id) {
|
|
return;
|
|
}
|
|
//alert("iTools Prompt Styler Extra registered");
|
|
|
|
const onNodeCreated = nodeType.prototype.onNodeCreated;
|
|
nodeType.prototype.onNodeCreated = function () {
|
|
const me = onNodeCreated?.apply(this);
|
|
if (allow_debug) {
|
|
console.log("iToolsPromptStylerExtra", this);
|
|
}
|
|
|
|
const base_file = this.widgets.find((w) => w.name == "base_file");
|
|
base_file.callback = async () => {
|
|
this.widgets[3]["value"] = "loading ...";
|
|
const options = await send_request_templates_for_file(base_file.value);
|
|
this.widgets[3]["options"]["values"] = options.templates;
|
|
this.widgets[3]["value"] = options.templates[0];
|
|
this.setDirtyCanvas(true, true);
|
|
};
|
|
|
|
const second_file = this.widgets.find((w) => w.name == "second_file");
|
|
second_file.callback = async () => {
|
|
this.widgets[5]["value"] = "loading ...";
|
|
const options = await send_request_templates_for_file(
|
|
second_file.value
|
|
);
|
|
this.widgets[5]["options"]["values"] = options.templates;
|
|
this.widgets[5]["value"] = options.templates[0];
|
|
this.setDirtyCanvas(true, true);
|
|
};
|
|
|
|
const third_file = this.widgets.find((w) => w.name == "third_file");
|
|
third_file.callback = async () => {
|
|
this.widgets[7]["value"] = "loading ...";
|
|
const options = await send_request_templates_for_file(third_file.value);
|
|
this.widgets[7]["options"]["values"] = options.templates;
|
|
this.widgets[7]["value"] = options.templates[0];
|
|
this.setDirtyCanvas(true, true);
|
|
};
|
|
|
|
const fourth_file = this.widgets.find((w) => w.name == "fourth_file");
|
|
fourth_file.callback = async () => {
|
|
this.widgets[9]["value"] = "loading ...";
|
|
const options = await send_request_templates_for_file(
|
|
fourth_file.value
|
|
);
|
|
this.widgets[9]["options"]["values"] = options.templates;
|
|
this.widgets[9]["value"] = options.templates[0];
|
|
this.setDirtyCanvas(true, true);
|
|
};
|
|
|
|
fix_start_up_init(this, base_file, second_file, third_file, fourth_file);
|
|
this.addWidget("button", "reset all", null, () => {
|
|
reset_func(this, fourth_file);
|
|
});
|
|
return me;
|
|
};
|
|
},
|
|
});
|
|
|
|
async function reset_func(node, fourth_file) {
|
|
if (allow_debug) {
|
|
console.log(node, this);
|
|
}
|
|
await waitForInitialization(node, fourth_file);
|
|
|
|
node.widgets[2]["value"] = "basic.yaml";
|
|
node.widgets[3]["value"] = "none";
|
|
|
|
node.widgets[4]["value"] = "camera.yaml";
|
|
node.widgets[5]["value"] = "none";
|
|
|
|
node.widgets[6]["value"] = "artist.yaml";
|
|
node.widgets[7]["value"] = "none";
|
|
|
|
node.widgets[8]["value"] = "mood.yaml";
|
|
node.widgets[9]["value"] = "none";
|
|
|
|
const options = await send_request_templates_for_file("basic.yaml");
|
|
const options2 = await send_request_templates_for_file("camera.yaml");
|
|
const options3 = await send_request_templates_for_file("artist.yaml");
|
|
const options4 = await send_request_templates_for_file("mood.yaml");
|
|
|
|
node.widgets[3]["options"]["values"] = options.templates;
|
|
node.widgets[5]["options"]["values"] = options2.templates;
|
|
node.widgets[7]["options"]["values"] = options3.templates;
|
|
node.widgets[9]["options"]["values"] = options4.templates;
|
|
|
|
this.setDirtyCanvas(true, true);
|
|
}
|
|
|
|
async function fix_start_up_init(node, base, s1, s2, s3) {
|
|
// Wait until node and style are fully initialized
|
|
await waitForInitialization(node, s3);
|
|
if ((node.size[0] <= 300) | (node.size[1] <= 420)) {
|
|
node.setSize([300, 420]);
|
|
}
|
|
const options = await send_request_templates_for_file(base.value);
|
|
if (options) {
|
|
node.widgets[3]["options"]["values"] = options.templates;
|
|
}
|
|
const options2 = await send_request_templates_for_file(s1.value);
|
|
if (options2) {
|
|
node.widgets[5]["options"]["values"] = options2.templates;
|
|
}
|
|
const options3 = await send_request_templates_for_file(s2.value);
|
|
if (options3) {
|
|
node.widgets[7]["options"]["values"] = options3.templates;
|
|
}
|
|
const options4 = await send_request_templates_for_file(s3.value);
|
|
if (options4) {
|
|
node.widgets[9]["options"]["values"] = options4.templates;
|
|
}
|
|
}
|
|
|
|
async function waitForInitialization(node, style) {
|
|
// Poll until both node and style are initialized
|
|
while (
|
|
!node ||
|
|
!node.widgets ||
|
|
node.widgets.length < 4 ||
|
|
!style ||
|
|
!style.value
|
|
) {
|
|
await new Promise((resolve) => setTimeout(resolve, 100)); // Wait 100ms before checking again
|
|
}
|
|
}
|
|
|
|
// not used yet functions
|
|
function injectBackgroundColor(me, nodeData, app) {
|
|
if (allow_debug) {
|
|
console.log("iToolsPromptStylerExtra", me);
|
|
console.log("iToolsPromptStylerExtra nodeData", nodeData);
|
|
console.log("iToolsPromptStylerExtra app", app);
|
|
}
|
|
// Select all elements with the class 'comfy-multiline-input'
|
|
const elements = document.querySelectorAll(".comfy-multiline-input");
|
|
elements.forEach((element) => {
|
|
if (element.getAttribute("placeholder") === "text_positive") {
|
|
// Inject the background color style
|
|
element.style.backgroundColor = "rgba(0, 255, 0, 0.07)";
|
|
}
|
|
if (element.getAttribute("placeholder") === "text_negative") {
|
|
// Inject the background color style
|
|
element.style.backgroundColor = "rgba(255, 0, 0, 0.07)";
|
|
}
|
|
});
|
|
}
|
|
|
|
// not used
|
|
function executeAfterDelay(func, delay) {
|
|
if (allow_debug) {
|
|
console.log(my_node, my_file);
|
|
}
|
|
setTimeout(() => {
|
|
func();
|
|
}, delay);
|
|
}
|
|
|
|
// not used
|
|
async function send_style_message_multi(base, s1, s2, s3) {
|
|
const request_body = new FormData();
|
|
|
|
body.append("base", base);
|
|
body.append("s1", s1);
|
|
body.append("s2", s2);
|
|
body.append("s3", s3);
|
|
|
|
const respond = await api.fetchApi("/itools/style_change_multi", {
|
|
method: "POST",
|
|
request_body,
|
|
});
|
|
return respond.json();
|
|
}
|