[object Object]

← back to Goldleafwallpaper

grid: persist sort + density slider to localStorage and hydrate on load (DW storefront rule)

7b0a1372b3db215edb8f263bb3dbf1c3167c54cb · 2026-05-18 20:46:00 -0700 · Steve Abrams

Files touched

Diff

commit 7b0a1372b3db215edb8f263bb3dbf1c3167c54cb
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Mon May 18 20:46:00 2026 -0700

    grid: persist sort + density slider to localStorage and hydrate on load (DW storefront rule)
---
 index.html | 31 ++++++++++++++++++++++++++++---
 1 file changed, 28 insertions(+), 3 deletions(-)

diff --git a/index.html b/index.html
index a11bd82..89a9461 100644
--- a/index.html
+++ b/index.html
@@ -813,6 +813,19 @@ let currentView = 'gallery';
 let currentPage = 1;
 const PAGE_SIZE = 60;
 
+// Hydrate sort from storage before the first applyAll()
+(function() {
+  let saved;
+  try { saved = localStorage.getItem('glw.grid.sort'); } catch(e) {}
+  if (saved) {
+    currentSort = saved;
+    const sel = document.getElementById('sortSelect');
+    if (sel && [].some.call(sel.options, function(o) { return o.value === saved; })) {
+      sel.value = saved;
+    }
+  }
+})();
+
 // === THEME TOGGLE ===
 const themeToggle = document.getElementById('themeToggle');
 themeToggle.addEventListener('click', function() {
@@ -848,14 +861,24 @@ themeToggle.addEventListener('click', function() {
   show();
 })();
 
-// === DENSITY SLIDER ===
+// === DENSITY SLIDER (persisted per corkwallcovering pattern) ===
 const slider = document.getElementById('densitySlider');
 const dlabel = document.getElementById('densityLabel');
-slider.addEventListener('input', function() {
-  const n = parseInt(this.value, 10);
+function applyDensity(n) {
   document.documentElement.style.setProperty('--cols', n);
   dlabel.textContent = n + ' cols';
+}
+slider.addEventListener('input', function() {
+  const n = parseInt(this.value, 10);
+  applyDensity(n);
+  try { localStorage.setItem('glw.grid.density', String(n)); } catch(e) {}
 });
+// Hydrate density from storage before first render
+(function() {
+  let saved;
+  try { saved = parseInt(localStorage.getItem('glw.grid.density'), 10); } catch(e) {}
+  if (saved >= 3 && saved <= 10) { slider.value = saved; applyDensity(saved); }
+})();
 
 // === FILTER / SORT / SEARCH ===
 function computeFilter(p) {
@@ -1004,6 +1027,7 @@ document.getElementById('searchInput').addEventListener('input', function(e) {
 
 document.getElementById('sortSelect').addEventListener('change', function(e) {
   currentSort = e.target.value;
+  try { localStorage.setItem('glw.grid.sort', currentSort); } catch(ex) {}
   applyAll();
 });
 
@@ -1035,6 +1059,7 @@ document.querySelectorAll('.table-view thead th[data-sort-key]').forEach(functio
     const nextDir = (curKey === key && curDir === 'asc') ? 'desc' : 'asc';
     currentSort = key + '-' + nextDir;
     document.getElementById('sortSelect').value = currentSort;
+    try { localStorage.setItem('glw.grid.sort', currentSort); } catch(ex) {}
     applyAll();
   });
 });

← 999827e server: 404 all .bak/.pre-* snapshot files so editor backups  ·  back to Goldleafwallpaper  ·  Embed _shared/corner-nav.js (logo UL + hamburger UR) on fron c1f3396 →