Skip to content

Commit 5b14602

Browse files
committed
fix(ui): guard setHidden save/restore with 'in' operator
ComfyUI freshly-created widgets can already have computeSize === undefined before any custom save, so the old '!== undefined' guard would skip saving and then later call the non-existent original. Replace with 'in' operator checks so the save/restore cycle is clean regardless of initial state.
1 parent 5957b97 commit 5b14602

1 file changed

Lines changed: 27 additions & 16 deletions

File tree

js/_widget_visibility.js

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,43 +16,54 @@
1616
export function setWidgetVisible(widget, visible) {
1717
if (!widget) return;
1818
if (visible) {
19-
if (widget.__mec_origType !== undefined) {
20-
widget.type = widget.__mec_origType;
19+
if ("__mec_origType" in widget) {
20+
const t = widget.__mec_origType;
21+
if (t === undefined) delete widget.type; else widget.type = t;
2122
delete widget.__mec_origType;
2223
}
23-
if (widget.__mec_origComputeSize !== undefined) {
24-
widget.computeSize = widget.__mec_origComputeSize;
24+
if ("__mec_origComputeSize" in widget) {
25+
const cs = widget.__mec_origComputeSize;
26+
if (cs === undefined) delete widget.computeSize; else widget.computeSize = cs;
2527
delete widget.__mec_origComputeSize;
28+
} else {
29+
// No saved original: drop any forced [0,-4] so the prototype default returns.
30+
delete widget.computeSize;
2631
}
2732
widget.hidden = false;
2833
const el = widget.element;
2934
if (el) {
30-
el.style.display = widget.__mec_origElDisplay ?? "";
31-
delete widget.__mec_origElDisplay;
35+
if ("__mec_origElDisplay" in widget) {
36+
const d = widget.__mec_origElDisplay;
37+
el.style.display = d ?? "";
38+
delete widget.__mec_origElDisplay;
39+
} else {
40+
el.style.display = "";
41+
}
3242
const wrap = el.parentElement;
3343
if (wrap && wrap.classList?.contains("dom-widget")) {
34-
wrap.style.display = widget.__mec_origWrapDisplay ?? "";
35-
delete widget.__mec_origWrapDisplay;
44+
if ("__mec_origWrapDisplay" in widget) {
45+
const d = widget.__mec_origWrapDisplay;
46+
wrap.style.display = d ?? "";
47+
delete widget.__mec_origWrapDisplay;
48+
} else {
49+
wrap.style.display = "";
50+
}
3651
}
3752
}
3853
delete widget.__mec_hidden;
3954
} else {
40-
if (widget.__mec_origType === undefined) widget.__mec_origType = widget.type;
41-
if (widget.__mec_origComputeSize === undefined) widget.__mec_origComputeSize = widget.computeSize;
55+
if (!("__mec_origType" in widget)) widget.__mec_origType = widget.type;
56+
if (!("__mec_origComputeSize" in widget)) widget.__mec_origComputeSize = widget.computeSize;
4257
widget.type = "hidden";
4358
widget.computeSize = () => [0, -4];
4459
widget.hidden = true;
4560
const el = widget.element;
4661
if (el) {
47-
if (widget.__mec_origElDisplay === undefined) {
48-
widget.__mec_origElDisplay = el.style.display || "";
49-
}
62+
if (!("__mec_origElDisplay" in widget)) widget.__mec_origElDisplay = el.style.display;
5063
el.style.display = "none";
5164
const wrap = el.parentElement;
5265
if (wrap && wrap.classList?.contains("dom-widget")) {
53-
if (widget.__mec_origWrapDisplay === undefined) {
54-
widget.__mec_origWrapDisplay = wrap.style.display || "";
55-
}
66+
if (!("__mec_origWrapDisplay" in widget)) widget.__mec_origWrapDisplay = wrap.style.display;
5667
wrap.style.display = "none";
5768
}
5869
}

0 commit comments

Comments
 (0)