214 lines
5.6 KiB
JavaScript
214 lines
5.6 KiB
JavaScript
import { app } from "/scripts/app.js";
|
|
import { api } from "/scripts/api.js"
|
|
const MultilineSymbol = Symbol();
|
|
const MultilineResizeSymbol = Symbol();
|
|
|
|
function getStyles(name) {
|
|
//console.log("getStyles called " + name);
|
|
|
|
return api.fetchApi('/nsuite/styles')
|
|
.then(response => response.json())
|
|
.then(data => {
|
|
// Eseguire l'elaborazione dei dati
|
|
const styles = data.styles;
|
|
//console.log('Styles:', styles);
|
|
let positive_prompt = "";
|
|
let negative_prompt = "";
|
|
|
|
// Funzione per ottenere positive_prompt e negative_prompt dato il name
|
|
for (let i = 0; i < styles[0].length; i++) {
|
|
const style = styles[0][i];
|
|
if (style.name === name) {
|
|
positive_prompt = style.prompt;
|
|
negative_prompt = style.negative_prompt;
|
|
//console.log('Style:', style.name);
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (positive_prompt !== "") {
|
|
//console.log("Positive prompt:", positive_prompt);
|
|
//console.log("Negative prompt:", negative_prompt);
|
|
return { positive_prompt: positive_prompt, negative_prompt: negative_prompt };
|
|
} else {
|
|
return { positive_prompt: "", negative_prompt: "" };
|
|
}
|
|
})
|
|
.catch(error => {
|
|
console.error('Error:', error);
|
|
throw error; // Rilancia l'errore per consentire al chiamante di gestirlo
|
|
});
|
|
}
|
|
|
|
function addStyles(name, positive_prompt, negative_prompt) {
|
|
return api.fetchApi('/nsuite/styles/add', {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
body: JSON.stringify({
|
|
name: name,
|
|
positive_prompt: positive_prompt,
|
|
negative_prompt: negative_prompt
|
|
}),
|
|
|
|
})
|
|
}
|
|
|
|
function updateStyles(name, positive_prompt, negative_prompt) {
|
|
return api.fetchApi('/nsuite/styles/update', {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
body: JSON.stringify({
|
|
name: name,
|
|
positive_prompt: positive_prompt,
|
|
negative_prompt: negative_prompt
|
|
}),
|
|
})
|
|
}
|
|
|
|
function removeStyles(name) {
|
|
//confirmation
|
|
let ok = confirm("Are you sure you want to remove this style?");
|
|
if (!ok) {
|
|
return;
|
|
}
|
|
|
|
return api.fetchApi('/nsuite/styles/remove', {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
body: JSON.stringify({
|
|
name: name
|
|
}),
|
|
})
|
|
}
|
|
|
|
app.registerExtension({
|
|
name: "n.CLIPTextEncodeAdvancedNSuite",
|
|
async beforeRegisterNodeDef(nodeType, nodeData, app) {
|
|
|
|
const onAdded = nodeType.prototype.onAdded;
|
|
if (nodeData.name === "CLIPTextEncodeAdvancedNSuite [n-suite]") {
|
|
nodeType.prototype.onAdded = function () {
|
|
onAdded?.apply(this, arguments);
|
|
const styles = this.widgets.find((w) => w.name === "styles");
|
|
const p_prompt = this.widgets.find((w) => w.name === "positive_prompt");
|
|
const n_prompt = this.widgets.find((w) => w.name === "negative_prompt");
|
|
const cb = nodeData.callback;
|
|
let addedd_positive_prompt = "";
|
|
let addedd_negative_prompt = "";
|
|
styles.callback = function () {
|
|
let index = styles.options.values.indexOf(styles.value);
|
|
|
|
|
|
if (addedd_positive_prompt == "" && addedd_negative_prompt == "") {
|
|
getStyles(styles.options.values[index-1]).then(style_prompts => {
|
|
//wait 4 seconds
|
|
|
|
console.log(style_prompts);
|
|
|
|
addedd_positive_prompt = style_prompts.positive_prompt;
|
|
addedd_negative_prompt = style_prompts.negative_prompt;
|
|
//alert("Addedd positive prompt: " + addedd_positive_prompt + "\nAddedd negative prompt: " + addedd_negative_prompt);
|
|
})
|
|
}
|
|
|
|
|
|
let current_positive_prompt = p_prompt.value;
|
|
let current_negative_prompt = n_prompt.value;
|
|
|
|
getStyles(styles.value).then(style_prompts => {
|
|
//console.log(style_prompts)
|
|
|
|
if ((current_positive_prompt.trim() != addedd_positive_prompt.trim() || current_negative_prompt.trim() != addedd_negative_prompt.trim())) {
|
|
|
|
let ok = confirm("Style has been changed. Do you want to change style without saving?");
|
|
|
|
|
|
if (!ok) {
|
|
if (styles.value === styles.options.values[0]) {
|
|
value = styles.options.values[0];
|
|
}
|
|
styles.value = styles.options.values[index-1];
|
|
|
|
|
|
return;
|
|
}
|
|
}
|
|
|
|
// add the addedd prompt to the current prompt
|
|
p_prompt.value = style_prompts.positive_prompt;
|
|
n_prompt.value = style_prompts.negative_prompt;
|
|
|
|
|
|
addedd_positive_prompt = style_prompts.positive_prompt;
|
|
addedd_negative_prompt = style_prompts.negative_prompt;
|
|
if (cb) {
|
|
return cb.apply(this, arguments);
|
|
}
|
|
})
|
|
.catch(error => {
|
|
console.error('Error:', error);
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
let savestyle;
|
|
let replacestyle;
|
|
let deletestyle;
|
|
|
|
|
|
// Create the button widget for selecting the files
|
|
savestyle = this.addWidget("button", "New", "image", () => {
|
|
////console.log("Save called");
|
|
//ask input name style
|
|
let inputName = prompt("Enter a name for the style:", styles.value);
|
|
if (inputName === null) {
|
|
return;
|
|
}
|
|
|
|
|
|
addStyles(inputName, p_prompt.value, n_prompt.value);
|
|
// Add the file to the dropdown list and update the widget value
|
|
|
|
if (!styles.options.values.includes(inputName)) {
|
|
styles.options.values.push(inputName);
|
|
}
|
|
|
|
},{
|
|
cursor: "grab",
|
|
},);
|
|
replacestyle = this.addWidget("button", "Replace", "image", () => {
|
|
//console.log("Replace called");
|
|
updateStyles(styles.value, p_prompt.value, n_prompt.value);
|
|
},{
|
|
cursor: "grab",
|
|
},);
|
|
deletestyle = this.addWidget("button", "Delete", "image", () => {
|
|
//console.log("Delete called");
|
|
removeStyles(styles.value);
|
|
|
|
// Remove the file from the dropdown list
|
|
styles.options.values = styles.options.values.filter((value) => value !== styles.value);
|
|
},{
|
|
cursor: "grab",
|
|
},);
|
|
savestyle.serialize = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
},
|
|
});
|