- Delete 7 dead-squat widgets (registered UI only for other packs' nodes: UniRig/SAM3D/Mocap/FBXPreview/BVH/pointcloud) + their 6 orphaned viewer HTMLs + the entire unused js/viewer tree (21 files, imported by nothing; only ui/styles.css survives) + unused utils barrel. - Rename namespace geompack -> geometrypack (= DisplayName, lowercased); all 17 surviving extensions now geometrypack.*. - Add event.source provenance guards to every message listener (2 inline, 2 factory handlers via new iframe param). - Stop touching document.body: upload file input stays detached (click() works detached in modern browsers); folder autocomplete dropdown becomes a manual popover inside the widget's own DOM (top layer escapes canvas transforms without shared-DOM appends). Passes comfy-test's javascript isolation lint with 0 errors.
54 lines
1.9 KiB
JavaScript
54 lines
1.9 KiB
JavaScript
// Preview Mesh Batch Render: show the edge_opacity widget only when show_edges
|
|
// is enabled (collapse it otherwise).
|
|
import { app } from "../../../scripts/app.js";
|
|
|
|
const TAG = "[PreviewMeshBatchRender]";
|
|
console.log(`${TAG} script loaded`);
|
|
|
|
const findW = (node, name) => (node.widgets || []).find((w) => w.name === name);
|
|
|
|
function toggleWidget(w, show) {
|
|
if (!w) return;
|
|
if (!w.__gpOrig) w.__gpOrig = { type: w.type, computeSize: w.computeSize };
|
|
if (show) {
|
|
w.type = w.__gpOrig.type;
|
|
w.computeSize = w.__gpOrig.computeSize;
|
|
} else {
|
|
w.type = "geometrypack_hidden"; // unknown type -> not drawn
|
|
w.computeSize = () => [0, -4]; // collapse (cancels the 4px row gap)
|
|
}
|
|
}
|
|
|
|
app.registerExtension({
|
|
name: "geometrypack.previewmeshbatchrender.ui",
|
|
async beforeRegisterNodeDef(nodeType, nodeData) {
|
|
if (nodeData.name !== "GeomPackPreviewMeshBatchRender") return;
|
|
console.log(`${TAG} registering for GeomPackPreviewMeshBatchRender`);
|
|
|
|
const onCreated = nodeType.prototype.onNodeCreated;
|
|
nodeType.prototype.onNodeCreated = function () {
|
|
const r = onCreated?.apply(this, arguments);
|
|
const node = this;
|
|
const showEdges = findW(node, "show_edges");
|
|
const edgeOpacity = findW(node, "edge_opacity");
|
|
|
|
const update = () => {
|
|
toggleWidget(edgeOpacity, !!(showEdges && showEdges.value));
|
|
node.setSize(node.computeSize());
|
|
node.setDirtyCanvas(true, true);
|
|
};
|
|
|
|
if (showEdges) {
|
|
const cb = showEdges.callback;
|
|
showEdges.callback = function () {
|
|
const ret = cb?.apply(this, arguments);
|
|
update();
|
|
return ret;
|
|
};
|
|
}
|
|
setTimeout(update, 0); // apply initial state (edges off -> hidden)
|
|
return r;
|
|
};
|
|
},
|
|
});
|