Files
Bjornulf_custom_nodes/web/js/loop_lines_sequential.js
justumen 0673c134d5 0.57
2024-11-22 12:30:00 +01:00

193 lines
6.1 KiB
JavaScript

import { app } from "../../../scripts/app.js";
import { api } from "../../../scripts/api.js";
app.registerExtension({
name: "Bjornulf.LoopLinesSequential",
async nodeCreated(node) {
if (node.comfyClass !== "Bjornulf_LoopLinesSequential") return;
// Hide seed widget
const seedWidget = node.widgets.find((w) => w.name === "seed");
if (seedWidget) {
seedWidget.visible = false;
}
// Add line number display
const lineNumberWidget = node.addWidget("html", "Current Line: --", null, {
callback: () => {},
});
// Function to update the Reset Button text
const updateResetButtonTextNode = () => {
fetch("/get_current_line_number", {
method: "POST",
})
.then((response) => response.json())
.then((data) => {
if (data.success) {
const jumpWidget = node.widgets.find((w) => w.name === "jump");
if (data.value === 0) {
resetButton.name =
"Reset Counter (Empty, next: " + jumpWidget.value + ")";
} else {
//Add to data.value, the current jump value
let next_value = data.value + jumpWidget.value;
// console.log(jumpWidget);
resetButton.name = `Reset Counter (next: ${next_value})`;
}
} else {
console.error("Error in context size:", data.error);
resetButton.name = "Reset Counter (Error)";
}
})
.catch((error) => {
console.error("Error fetching context size:", error);
resetButton.name = "Reset Counter (Error)";
});
};
// Add reset button
const resetButton = node.addWidget("button", "Reset Counter", null, () => {
fetch("/reset_lines_counter", {
method: "POST",
})
.then((response) => response.json())
.then((data) => {
if (data.success) {
// updateLineNumber();
updateResetButtonTextNode();
app.ui.toast("Counter reset successfully!", { duration: 5000 });
} else {
app.ui.toast(
`Failed to reset counter: ${data.error || "Unknown error"}`,
{ type: "error", duration: 5000 }
);
}
})
.catch((error) => {
console.error("Error:", error);
app.ui.toast("An error occurred while resetting the counter.", {
type: "error",
duration: 5000,
});
});
});
// Add increment button
const incrementButton = node.addWidget("button", "+1", null, () => {
fetch("/increment_lines_counter", {
method: "POST",
})
.then((response) => response.json())
.then((data) => {
if (data.success) {
updateResetButtonTextNode();
app.ui.toast("Counter incremented", { duration: 3000 });
} else {
app.ui.toast(
`Failed to increment counter: ${data.error || "Unknown error"}`,
{ type: "error", duration: 5000 }
);
}
})
.catch((error) => {
console.error("Error:", error);
app.ui.toast("An error occurred while incrementing the counter.", {
type: "error",
duration: 5000,
});
});
});
// Add decrement button
const decrementButton = node.addWidget("button", "-1", null, () => {
fetch("/decrement_lines_counter", {
method: "POST",
})
.then((response) => response.json())
.then((data) => {
if (data.success) {
updateResetButtonTextNode();
app.ui.toast("Counter decremented", { duration: 3000 });
} else {
app.ui.toast(
`Failed to decrement counter: ${data.error || "Unknown error"}`,
{ type: "error", duration: 5000 }
);
}
})
.catch((error) => {
console.error("Error:", error);
app.ui.toast("An error occurred while decrementing the counter.", {
type: "error",
duration: 5000,
});
});
});
// Add reset button
// const resetButton = node.addWidget("button", "Reset Counter", null, () => {
// fetch("/reset_lines_counter", {
// method: "POST",
// })
// .then((response) => response.json())
// .then((data) => {
// if (data.success) {
// updateLineNumber();
// app.ui.toast("Counter reset successfully!", { duration: 5000 });
// } else {
// app.ui.toast(
// `Failed to reset counter: ${data.error || "Unknown error"}`,
// { type: "error", duration: 5000 }
// );
// }
// })
// .catch((error) => {
// console.error("Error:", error);
// app.ui.toast("An error occurred while resetting the counter.", {
// type: "error",
// duration: 5000,
// });
// });
// });
// Update line number periodically
setTimeout(updateResetButtonTextNode, 0);
// Listen for node execution events
api.addEventListener("executed", async () => {
updateResetButtonTextNode();
});
// Add a handler for the jump widget
const waitingWidget = node.widgets.find((w) => w.name === "jump");
if (waitingWidget) {
const originalOnChange = waitingWidget.callback;
waitingWidget.callback = function (v) {
if (originalOnChange) {
originalOnChange.call(this, v);
}
updateResetButtonTextNode();
};
}
// Override the original execute function
const originalExecute = node.execute;
node.execute = function () {
const result = originalExecute.apply(this, arguments);
if (result instanceof Promise) {
return result.catch((error) => {
if (error.message.includes("Counter has reached its limit")) {
app.ui.toast(`Execution blocked: ${error.message}`, {
type: "error",
duration: 5000,
});
}
throw error;
});
}
return result;
};
},
});