77 lines
2.7 KiB
JavaScript
77 lines
2.7 KiB
JavaScript
import { app } from "../../scripts/app.js";
|
|
|
|
app.registerExtension({
|
|
name: "RaykoStudio.InsertCrop",
|
|
|
|
async beforeRegisterNodeDef(nodeType, nodeData, app) {
|
|
if (nodeData.name !== "RSInsertCropImage") return;
|
|
|
|
const onNodeCreated = nodeType.prototype.onNodeCreated;
|
|
nodeType.prototype.onNodeCreated = function() {
|
|
try {
|
|
onNodeCreated?.apply(this, arguments);
|
|
const node = this;
|
|
|
|
node.currentStatus = "Ready";
|
|
|
|
node.setSize([210, 100]);
|
|
|
|
const cropDataWidget = node.widgets?.find(w => w.name === "crop_data");
|
|
if (cropDataWidget) {
|
|
cropDataWidget.computeSize = function(w) {
|
|
return [w, 28];
|
|
};
|
|
|
|
cropDataWidget.hidden = false;
|
|
|
|
cropDataWidget.serializeValue = () => {
|
|
const value = cropDataWidget.value;
|
|
if (typeof value === 'string' && value.trim()) {
|
|
return value;
|
|
}
|
|
return "{}";
|
|
};
|
|
}
|
|
|
|
node.onResize = function(size) {
|
|
if (size[1] < 100) {
|
|
this.setSize([size[0], 100]);
|
|
}
|
|
};
|
|
|
|
node.onExecuted = function(message) {
|
|
this.currentStatus = "✅ Inserted";
|
|
this.setDirtyCanvas(true, true);
|
|
};
|
|
|
|
const onDrawForeground = node.onDrawForeground;
|
|
node.onDrawForeground = function(ctx) {
|
|
if (!this.flags.collapsed) {
|
|
const [w, h] = this.size;
|
|
|
|
ctx.fillStyle = "#888";
|
|
ctx.font = "11px Arial";
|
|
ctx.textAlign = "center";
|
|
ctx.fillText(this.currentStatus, w / 2, h - 20);
|
|
}
|
|
};
|
|
|
|
} catch (error) {
|
|
console.error("[RS Insert Crop 🦊] Critical Error:", error);
|
|
}
|
|
};
|
|
},
|
|
|
|
setup(app) {
|
|
app.api.addEventListener("executing", (event) => {
|
|
const nodeId = event.detail;
|
|
if (nodeId) {
|
|
const node = app.graph.getNodeById(nodeId);
|
|
if (node && node.comfyClass === "RSInsertCropImage") {
|
|
node.currentStatus = "⏳ Processing...";
|
|
node.setDirtyCanvas(true, true);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}); |