[object Object]

← back to Sku Check Skill

ui: add rel=noopener noreferrer to all target=_blank anchors

46a693f9b3ccff924e204f88da5f246a4a4b96c8 · 2026-05-19 18:34:24 -0700 · Steve Abrams

Files touched

Diff

commit 46a693f9b3ccff924e204f88da5f246a4a4b96c8
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Tue May 19 18:34:24 2026 -0700

    ui: add rel=noopener noreferrer to all target=_blank anchors
---
 public/index.html | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/public/index.html b/public/index.html
index a31099f..b662266 100644
--- a/public/index.html
+++ b/public/index.html
@@ -318,9 +318,9 @@ function xfetch(url,opts){return new Promise(function(resolve,reject){var x=new
           <tr id="row-${r.dw_sku}">
             <td>
               <strong style="font-size:14px">${r.dw_sku_dash || r.dw_sku}</strong>
-              ${r.shopify_handle ? `<br><a href="https://www.designerwallcoverings.com/products/${r.shopify_handle}" target="_blank" style="font-size:11px">View on site</a>` : ''}
-              ${r.shopify_product_id ? `<br><a href="https://admin.shopify.com/store/designer-laboratory-sandbox/products/${r.shopify_product_id}" target="_blank" style="font-size:11px;color:#d29922">Admin</a>` : ''}
-              ${r.vendor_url ? `<br><a href="${r.vendor_url}" target="_blank" style="font-size:11px;color:#0891b2" title="View ${r.mfr_sku} on manufacturer website">MFR Site</a>` : ''}
+              ${r.shopify_handle ? `<br><a href="https://www.designerwallcoverings.com/products/${r.shopify_handle}" target="_blank" rel="noopener noreferrer" style="font-size:11px">View on site</a>` : ''}
+              ${r.shopify_product_id ? `<br><a href="https://admin.shopify.com/store/designer-laboratory-sandbox/products/${r.shopify_product_id}" target="_blank" rel="noopener noreferrer" style="font-size:11px;color:#d29922">Admin</a>` : ''}
+              ${r.vendor_url ? `<br><a href="${r.vendor_url}" target="_blank" rel="noopener noreferrer" style="font-size:11px;color:#0891b2" title="View ${r.mfr_sku} on manufacturer website">MFR Site</a>` : ''}
             </td>
             <td>
               <span style="font-weight:600">${r.mfr_sku || '-'}</span>
@@ -414,7 +414,7 @@ function xfetch(url,opts){return new Promise(function(resolve,reject){var x=new
       ].filter(([,v]) => v);
       let html = `<div class="detail-section"><h4>Specs from Catalog</h4>`;
       fields.forEach(([k,v]) => { html += `<div class="field"><span class="fk">${k}</span><span class="fv">${v}</span></div>`; });
-      if (s.productUrl) html += `<div style="margin-top:8px"><a href="${s.productUrl}" target="_blank" style="font-size:11px">View on vendor site</a></div>`;
+      if (s.productUrl) html += `<div style="margin-top:8px"><a href="${s.productUrl}" target="_blank" rel="noopener noreferrer" style="font-size:11px">View on vendor site</a></div>`;
       if (s.imageUrl) html += `<div style="margin-top:8px"><img src="${s.imageUrl}" style="max-width:120px;border-radius:4px;border:1px solid #30363d" /></div>`;
       html += `</div>`;
       return html;
@@ -423,9 +423,9 @@ function xfetch(url,opts){return new Promise(function(resolve,reject){var x=new
     function renderImagesResult(data) {
       if (!data.images || data.images.length === 0) return `<div style="color:#8b949e;padding:8px">${data.message || 'No images found'}</div>`;
       let html = `<div class="detail-section"><h4>Images (${data.images.length})</h4><div class="detail-images">`;
-      data.images.forEach(url => { html += `<a href="${url}" target="_blank"><img src="${url}" /></a>`; });
+      data.images.forEach(url => { html += `<a href="${url}" target="_blank" rel="noopener noreferrer"><img src="${url}" /></a>`; });
       html += '</div>';
-      if (data.productUrl) html += `<div style="margin-top:8px"><a href="${data.productUrl}" target="_blank" style="font-size:11px">Vendor product page</a></div>`;
+      if (data.productUrl) html += `<div style="margin-top:8px"><a href="${data.productUrl}" target="_blank" rel="noopener noreferrer" style="font-size:11px">Vendor product page</a></div>`;
       html += '</div>';
       return html;
     }

← 1f37fd0 server: 404-guard for .bak/.pre-/.orig/.swp paths before sta  ·  back to Sku Check Skill  ·  security: strip hardcoded dw_admin DSN password -> env-first 008f261 →