← Commit history

adom-stock: identify the widget's own reads (vendor lookups run only for a person loading it) and explain budget states

Colby Knox ·85c0af366d ·28d ago ·parent 47527fa
1 file changed +3−2
widgets/stock-widget.js+3−2
@@ -23,7 +23,7 @@ tr+tr td{border-top:1px solid var(--border)}td.num{font-variant-numeric:tabular-       const inline = this.querySelector('script[type="application/json"]');       if (inline) { try { data = JSON.parse(inline.textContent); } catch (e) { err = 'bad inline data'; } }       const src = this.getAttribute('src');-      if (!data && src) { try { const r = await fetch(src, { credentials: 'include' }); data = await r.json(); if (!r.ok) err = data && data.error ? data.error : `stock route answered ${r.status}`; } catch (e) { err = 'could not load stock'; } }+      if (!data && src) { try { const r = await fetch(src, { credentials: 'include', headers: { 'X-Adom-Widget': 'stock' } }); data = await r.json(); if (!r.ok) err = data && data.error ? data.error : `stock route answered ${r.status}`; } catch (e) { err = 'could not load stock'; } }       this.render(data, err);     }     render(d, err) {@@ -31,10 +31,11 @@ tr+tr td{border-top:1px solid var(--border)}td.num{font-variant-numeric:tabular-       const body = wrap.querySelector('.note') || wrap.querySelector('table');       if (err || !d) { when.textContent = ''; body.outerHTML = `<div class="note">${esc(err || 'no data')}</div>`; return; }       if (d.unavailable || d.skipped) { when.textContent = ''; body.outerHTML = `<div class="note">${esc(d.unavailable || d.skipped)}</div>`; return; }+      const budget = Object.values(d.vendors || {}).some(r => r && r.error && /budget/.test(r.error));       const rows = VENDORS.filter(v => d.vendors && d.vendors[v] !== undefined).map(v => {         const r = d.vendors[v]; const label = r && r.label || v;         if (!r) return `<tr><td>${esc(label)}</td><td class="out" colspan="3">not asked yet</td><td></td></tr>`;-        if (r.error) return `<tr><td>${esc(label)}</td><td class="out" colspan="3">lookup failed</td><td></td></tr>`;+        if (r.error) return `<tr><td>${esc(label)}</td><td class="out" colspan="3">${/budget/.test(r.error) ? 'daily lookups used up, try tomorrow' : /PARTS_API_KEY/.test(r.error) ? 'lookups not configured' : 'lookup failed'}</td><td></td></tr>`;         if (!r.found) return `<tr><td>${esc(label)}</td><td class="out" colspan="3">not listed</td><td></td></tr>`;         const link = r.product_url ? `<a href="${esc(r.product_url)}" target="_blank" rel="noopener">open</a>` : '';         return `<tr><td>${esc(label)}<br><span class="pn">${esc(r.part || r.mpn || '')}</span></td><td class="num ${r.stock > 0 ? 'in' : 'out'}">${r.stock > 0 ? num(r.stock) + ' in stock' : 'out of stock'}</td><td class="num">${esc(r.unit_price || '')}</td><td class="num">${esc(r.price_100 || '')}</td><td>${link}</td></tr>`;