← back to Dw Domain Fleet
TK-11538: guard gridControls() localStorage with try/catch (Safari private mode) + clamp saved density to range bounds
8be45e24a05424ebd9e8fbf2de58600e6c3ff7ce · 2026-09-12 07:39:44 -0700 · Steve Abrams
Files touched
Diff
commit 8be45e24a05424ebd9e8fbf2de58600e6c3ff7ce
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Sat Sep 12 07:39:44 2026 -0700
TK-11538: guard gridControls() localStorage with try/catch (Safari private mode) + clamp saved density to range bounds
---
shared/render.js | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/shared/render.js b/shared/render.js
index 73b4a49..20a028b 100644
--- a/shared/render.js
+++ b/shared/render.js
@@ -692,11 +692,14 @@ function gridControls(cfg){
var dk='${cfg.slug}_density',sk='${cfg.slug}_sort';
var g=document.getElementById('grid'),d=document.getElementById('densSel'),s=document.getElementById('sortSel');
if(!g||!d||!s)return;
+ // TK-11538: localStorage ACCESS itself throws in Safari private mode / blocked site data — guard it (matches catalogPage read()/save())
+ function read(k){try{return localStorage.getItem(k);}catch(e){return null;}}
+ function save(k,v){try{localStorage.setItem(k,v);}catch(e){}}
var cards=Array.prototype.slice.call(g.children);
cards.forEach(function(c,i){c.__i=i;}); // original "Featured" order
- var sv=localStorage.getItem(dk);if(sv)d.value=sv;
+ var sv=read(dk);if(sv!=null){d.value=sv;if(d.max!==''&&+sv>+d.max)d.value=d.max;if(d.min!==''&&+sv<+d.min)d.value=d.min;} // clamp saved density to the range's bounds
function applyD(){g.style.setProperty('--cols',d.value);}
- d.addEventListener('input',function(){applyD();localStorage.setItem(dk,d.value);});
+ d.addEventListener('input',function(){applyD();save(dk,d.value);});
applyD();
function hl(hex){var m=/([0-9a-f]{6})/i.exec(hex||'');if(!m)return[999,999];
var n=parseInt(m[1],16),r=(n>>16&255)/255,gg=(n>>8&255)/255,b=(n&255)/255;
@@ -722,9 +725,9 @@ function gridControls(cfg){
});
arr.forEach(function(c){g.appendChild(c);});
}
- var saved=localStorage.getItem(sk);
+ 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);}}
- s.addEventListener('change',function(){localStorage.setItem(sk,s.value);sortBy(s.value);});
+ s.addEventListener('change',function(){save(sk,s.value);sortBy(s.value);});
})();
</script>`;
}
← cbc272c chore: v1.0.2 (TK-11470 session close)
·
back to Dw Domain Fleet
·
TK-11537: declare scriptSrcAttr 'none' explicitly so read==s d20f426 →