← back to New Import Viewer
index.html review fixes: map Shopify lowercase status (active/draft/archived) → app vocabulary after live action (chip styled + Publish button disables correctly); show staged-so-far count in bulk error; only emit vendor link for http(s) urls (block javascript:/data: from scraped p.url)
7be620765fdee4cf079b6f7493cb465f58ecf876 · 2026-06-10 08:22:33 -0700 · SteveStudio2
Files touched
Diff
commit 7be620765fdee4cf079b6f7493cb465f58ecf876
Author: SteveStudio2 <stevestudio2@SteveStacStudio.lan>
Date: Wed Jun 10 08:22:33 2026 -0700
index.html review fixes: map Shopify lowercase status (active/draft/archived) → app vocabulary after live action (chip styled + Publish button disables correctly); show staged-so-far count in bulk error; only emit vendor link for http(s) urls (block javascript:/data: from scraped p.url)
---
public/index.html | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/public/index.html b/public/index.html
index f1abadf..e0ba5b1 100644
--- a/public/index.html
+++ b/public/index.html
@@ -307,7 +307,7 @@ function card(p){
const kv=(k,v)=>v?`<div class="kv"><span class="k">${k}</span><span class="v">${esc(v)}</span></div>`:'';
const shopLink=p.handle?`<a class="lnk" href="${SHOP}${esc(p.handle)}" target="_blank" rel="noopener noreferrer">Shopify admin ↗</a>`
:(p.shopifyId?`<a class="lnk" href="${SHOP}${esc(p.shopifyId)}" target="_blank" rel="noopener noreferrer">Shopify admin ↗</a>`:'');
- const vendLink=p.url?`<a class="lnk" href="${esc(p.url)}" target="_blank" rel="noopener noreferrer">vendor ↗</a>`:'';
+ const vendLink=(p.url&&/^https?:\/\//i.test(p.url))?`<a class="lnk" href="${esc(p.url)}" target="_blank" rel="noopener noreferrer">vendor ↗</a>`:'';
const storeLink=p.handle?`<a class="lnk" href="https://www.designerwallcoverings.com/products/${esc(p.handle)}" target="_blank" rel="noopener noreferrer">storefront ↗</a>`:'';
const acts=buildActs(p.id,st,!!p.image);
// utility row — copy SKUs + every outbound link, always present in ⚙ actions
@@ -464,7 +464,7 @@ async function rowAction(id,spec,btn){
const d=await r.json(); if(d.error)throw new Error(d.error);
if(d.live){
const ap=d.applied||{}; const res=(d.results||[])[0]||{};
- if(res.ok){updateCardStatus(id,res.status?res.status.toUpperCase():ACTION_RESULT[action]||'UNPUBLISHED');
+ if(res.ok){updateCardStatus(id,(res.status&&{active:'PUBLISHED',draft:'UNPUBLISHED',archived:'ARCHIVED'}[res.status])||ACTION_RESULT[action]||'UNPUBLISHED');
if(msg)msg.textContent=`✅ LIVE ${action} → ${res.status||'done'} on ${d.store}`;}
else if(res.skipped){if(msg)msg.textContent=`↷ skipped — ${res.skipped}`;}
else{if(msg)msg.textContent=`✗ live ${action} failed — ${res.error||'unknown'}`;}
@@ -496,7 +496,7 @@ $('#bulkgo').onclick=async()=>{
const vents=Object.entries(byVendor);
const vlist=vents.slice(0,8).map(([v,n])=>`${v}:${n}`).join(', ')+(vents.length>8?` … +${vents.length-8} vendors`:'');
$('#bulkmsg').textContent=`✅ staged ${staged.toLocaleString()} ${action} — ${vlist}`+(blockedNoImg?` · 🚫 ${blockedNoImg.toLocaleString()} blocked (no image)`:'');
- }catch(e){$('#bulkmsg').textContent='✗ '+e.message;}
+ }catch(e){$('#bulkmsg').textContent=`✗ ${e.message}`+(staged?` (— ${staged.toLocaleString()} staged before error)`:'');}
$('#bulkgo').disabled=false;
};
addEventListener('scroll',()=>{if(innerHeight+scrollY>=document.body.offsetHeight-600)load(false);});
← 01ee7be review fixes (3-agent panel): consumer atomic ledger-before-
·
back to New Import Viewer
·
new-import-viewer: enforce 3-source NEVER-DUPLICATE in net-n 1fb9644 →