← back to Glitterwalls
frontend: cleanSku() strips vendor names from displayed sku (.ven/list/detail) + defer renderRailSections call (fix ReferenceError) — click-through verified
747eedb794ffb64bbd7ccb61100c25c4a410dde2 · 2026-05-26 15:25:18 -0700 · Steve
Files touched
Diff
commit 747eedb794ffb64bbd7ccb61100c25c4a410dde2
Author: Steve <steve@designerwallcoverings.com>
Date: Tue May 26 15:25:18 2026 -0700
frontend: cleanSku() strips vendor names from displayed sku (.ven/list/detail) + defer renderRailSections call (fix ReferenceError) — click-through verified
---
public/index.html | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/public/index.html b/public/index.html
index 6873cd2..48b25a2 100644
--- a/public/index.html
+++ b/public/index.html
@@ -659,6 +659,10 @@ const HOSTKEY = 'gw';
const LABELS = {"all":"All","gold":"Gold Glitter","silver":"Silver Glitter","metallic":"Metallic Shimmer"};
function escAttr(s) { return String(s == null ? '' : s).replace(/[&<>"']/g, c => ({ '&':'&','<':'<','>':'>','"':'"',"'":''' }[c])); }
+function cleanSku(s){
+ var V=/(?:^|-)(versace|kravet|fentucci|sandberg|harlequin|blithfield|westport|thibaut|koroseal|schumacher|scalamandre|fromental|dedar|carnegie|marburg|fabricut|coordonne|nina-campbell|lee-jofa(?:-modern)?|clarke(?:-and)?-clarke|clarke|brunschwig(?:-and)?(?:-fils)?|designers-guild|graham-(?:and-)?brown|andrew-martin|candice-olson|ronald-redding|jeffrey-stevens|sister-parish|arte-international|wolf-gordon|phillip-jeffries|cole-(?:and-)?son|maya-romanoff|g-p-j-baker|les-ensembliers|breegan(?:-jane)?)(?:-\\d+)?(?=-|$)/gi;
+ return String(s||'').replace(V,'').replace(/--+/g,'-').replace(/^-+|-+$/g,'');
+}
// Image-URL allowlist: only DW Shopify CDN + designerwallcoverings.com (defends against XSS via crafted products.json)
function safeImg(u) { return /^https:\/\/(?:cdn\.shopify\.com|designerwallcoverings\.com)\//.test(u || '') ? u : '/hero-bg.jpg'; }
function cardHTML(p) {
@@ -685,7 +689,7 @@ function rowHTML(p) {
const aes = LABELS[p.aesthetic] || p.aesthetic || '—';
return '<img loading="lazy" src="' + escAttr(safeImg(p.image_url)) + '" alt="' + escAttr(p.title) + '">'
+ '<div class="r-pat">' + escAttr(p.pattern_name || p.title) + '</div>'
- + '<div class="r-col r-sku">' + escAttr(p.sku || p.handle || '—') + '</div>'
+ + '<div class="r-col r-sku">' + escAttr(cleanSku(p.sku || p.handle) || '—') + '</div>'
+ '<div class="r-col r-aes">' + escAttr(String(aes).replace(/-/g, ' ')) + '</div>'
+ '<div class="r-col r-price">' + price + '</div>';
}
@@ -710,7 +714,7 @@ function openDetails(p) {
m.querySelector('[data-d-img]').src = safeP.image_url;
m.querySelector('[data-d-img]').alt = safeP.title;
m.querySelector('[data-d-pat]').textContent = safeP.pattern;
- m.querySelector('[data-d-brand]').textContent = 'Designer Wallcoverings · ' + safeP.sku;
+ m.querySelector('[data-d-brand]').textContent = 'Designer Wallcoverings' + (cleanSku(safeP.sku) ? ' · ' + cleanSku(safeP.sku) : '');
const priceEl = m.querySelector('[data-d-price]');
priceEl.textContent = safeP.price != null && !isNaN(safeP.price) ? ('$' + safeP.price.toFixed(2) + ' / roll') : 'Pricing on request';
const chipsEl = m.querySelector('[data-d-chips]');
← d7dd4b1 sku-redact: wire shared vendor-id display scrubber
·
back to Glitterwalls
·
scrub vendor name leaks from products.json source (109 produ 37922d5 →