← back to Dw Domain Fleet
TK-11538: gridControls appendChild off the prototype (consistency with catalogPage)
1d92019a0ab9283d24ea40ba43771a4ee4dad26e · 2026-09-14 10:40:06 -0700 · Steve Abrams
Closes the residual hardening sub-item. The titled bug (bare localStorage read
throwing in Safari private mode, killing sort+density) was already fixed in 8be45e2
and is verified LIVE on the fleet. This 1-line change makes gridControls' card
reorder use Node.prototype.appendChild.call(g,c) to match catalogPage's guarded
form append. Defense-in-depth only: a <div>'s appendChild is not DOM-clobberable
by its children the way a <form>'s named controls clobber the form. Rides the next
natural fleet deploy; no dedicated deploy warranted.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RcYGzMCFaJXH6nSLLrL4EQ
Files touched
Diff
commit 1d92019a0ab9283d24ea40ba43771a4ee4dad26e
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Mon Sep 14 10:40:06 2026 -0700
TK-11538: gridControls appendChild off the prototype (consistency with catalogPage)
Closes the residual hardening sub-item. The titled bug (bare localStorage read
throwing in Safari private mode, killing sort+density) was already fixed in 8be45e2
and is verified LIVE on the fleet. This 1-line change makes gridControls' card
reorder use Node.prototype.appendChild.call(g,c) to match catalogPage's guarded
form append. Defense-in-depth only: a <div>'s appendChild is not DOM-clobberable
by its children the way a <form>'s named controls clobber the form. Rides the next
natural fleet deploy; no dedicated deploy warranted.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RcYGzMCFaJXH6nSLLrL4EQ
---
shared/render.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/shared/render.js b/shared/render.js
index 20a028b..d9c0eab 100644
--- a/shared/render.js
+++ b/shared/render.js
@@ -723,7 +723,7 @@ function gridControls(cfg){
if(k==='dark-light')return val(a,'color')[1]-val(b,'color')[1];
var av=val(a,k),bv=val(b,k);return av<bv?-1:av>bv?1:0;
});
- arr.forEach(function(c){g.appendChild(c);});
+ arr.forEach(function(c){Node.prototype.appendChild.call(g,c);});// off the prototype for consistency with catalogPage (defense-in-depth; a <div>'s appendChild isn't clobberable by children the way a <form>'s named controls clobber the form)
}
var saved=read(sk);
if(saved){var ok=Array.prototype.some.call(s.options,function(o){return o.value===saved;});if(ok){s.value=saved;sortBy(saved);}}
← 1decd1b auto-data-snapshot: 2026-09-14T09:19:35 (4 data files) — sit
·
back to Dw Domain Fleet
·
content drip: +4 fresh article(s) — etciemurals.com, fabricf e5dcb36 →