fix: verification bar white text, pricing removes unverified fallback
- 100% VERIFIED bar: checkmarks now rgba(255,255,255,0.92) instead of #2d6a4f (was invisible on green bg) - Pricing: only show prices with real URL; no MSRP/estimated fallback - Verified badge only if observed within 7 days; older prices shown without badge
This commit is contained in:
parent
f91d2a15b9
commit
c23b9f68ce
@ -1866,20 +1866,24 @@ async function openTxDetail(id) {
|
|||||||
if (iVer) verItems.push('<span style="color:#2d6a4f;font-size:0.75rem;font-weight:600">✓ Image</span>');
|
if (iVer) verItems.push('<span style="color:#2d6a4f;font-size:0.75rem;font-weight:600">✓ Image</span>');
|
||||||
if (dVer) verItems.push('<span style="color:#2d6a4f;font-size:0.75rem;font-weight:600">✓ Details</span>');
|
if (dVer) verItems.push('<span style="color:#2d6a4f;font-size:0.75rem;font-weight:600">✓ Details</span>');
|
||||||
if (fVer) {
|
if (fVer) {
|
||||||
h += '<div style="display:flex;align-items:center;gap:0.6rem;flex-wrap:wrap;margin:0.8rem 0;padding:0.5rem 0.75rem;background:linear-gradient(135deg,#1b4332,#2d6a4f);border-radius:8px">'
|
// Inside the green bar: all text must be white/light — not #2d6a4f (same as bg)
|
||||||
+ '<span style="color:#fff;font-size:0.8rem;font-weight:700;letter-spacing:0.03em">★ 100% VERIFIED</span>'
|
var fvItems = [];
|
||||||
+ '<span style="color:rgba(255,255,255,0.6);font-size:0.7rem">–</span>'
|
if (pVer) fvItems.push('<span style="color:rgba(255,255,255,0.92);font-size:0.75rem;font-weight:600">✓ Price</span>');
|
||||||
+ verItems.join('<span style="color:rgba(255,255,255,0.4);font-size:0.7rem">·</span>')
|
if (iVer) fvItems.push('<span style="color:rgba(255,255,255,0.92);font-size:0.75rem;font-weight:600">✓ Image</span>');
|
||||||
+ (t.fully_verified_at ? '<span style="color:rgba(255,255,255,0.5);font-size:0.68rem;margin-left:auto">seit ' + fmtDate(t.fully_verified_at) + '</span>' : '')
|
if (dVer) fvItems.push('<span style="color:rgba(255,255,255,0.92);font-size:0.75rem;font-weight:600">✓ Details</span>');
|
||||||
|
h += '<div style="display:flex;align-items:center;gap:0.6rem;flex-wrap:wrap;margin:0.8rem 0;padding:0.55rem 0.85rem;background:linear-gradient(135deg,#1b4332,#2d6a4f);border-radius:8px">'
|
||||||
|
+ '<span style="color:#fff;font-size:0.82rem;font-weight:700;letter-spacing:0.04em">★ 100% VERIFIED</span>'
|
||||||
|
+ '<span style="color:rgba(255,255,255,0.4);font-size:0.7rem">–</span>'
|
||||||
|
+ fvItems.join('<span style="color:rgba(255,255,255,0.3);font-size:0.7rem;margin:0 0.1rem">·</span>')
|
||||||
|
+ (t.fully_verified_at ? '<span style="color:rgba(255,255,255,0.55);font-size:0.68rem;margin-left:auto">seit ' + fmtDate(t.fully_verified_at) + '</span>' : '')
|
||||||
+ '</div>';
|
+ '</div>';
|
||||||
} else if (verItems.length > 0) {
|
} else if (verItems.length > 0) {
|
||||||
|
// Partial verification on white background: dark green is fine here
|
||||||
h += '<div style="display:flex;align-items:center;gap:0.5rem;flex-wrap:wrap;margin:0.6rem 0;padding:0.4rem 0.6rem;background:rgba(45,106,79,0.08);border:1px solid rgba(45,106,79,0.2);border-radius:6px">'
|
h += '<div style="display:flex;align-items:center;gap:0.5rem;flex-wrap:wrap;margin:0.6rem 0;padding:0.4rem 0.6rem;background:rgba(45,106,79,0.08);border:1px solid rgba(45,106,79,0.2);border-radius:6px">'
|
||||||
+ verItems.join('<span style="color:#aaa;font-size:0.7rem">·</span>')
|
+ verItems.join('<span style="color:#aaa;font-size:0.7rem">·</span>')
|
||||||
+ '</div>';
|
+ '</div>';
|
||||||
} else {
|
|
||||||
// No verification data yet — show neutral indicator
|
|
||||||
h += '<div style="font-size:0.72rem;color:#aaa;margin:0.4rem 0;padding:0.3rem 0.5rem;border-left:2px solid #ddd">Data not yet verified from official sources</div>';
|
|
||||||
}
|
}
|
||||||
|
// No verification → no badge. Never show unverified data as verified.
|
||||||
|
|
||||||
// Helper: render a spec section as a clean table (like Flexoptix spec tables)
|
// Helper: render a spec section as a clean table (like Flexoptix spec tables)
|
||||||
function renderSpecTable(title, rows) {
|
function renderSpecTable(title, rows) {
|
||||||
@ -1948,30 +1952,27 @@ async function openTxDetail(id) {
|
|||||||
['Year Mainstream', t.year_mainstream],
|
['Year Mainstream', t.year_mainstream],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// SPECIFICATION — Pricing (verified prices from DB)
|
// SPECIFICATION — Pricing
|
||||||
var prices = t.competitor_prices || [];
|
// Rule: Only show prices that were scraped from a real URL within the last 30 days.
|
||||||
|
// Unverified / estimated prices are NOT shown — silence is better than wrong data.
|
||||||
|
var prices = (t.competitor_prices || []).filter(function(p) { return p.url && p.price > 0; });
|
||||||
if (prices.length > 0) {
|
if (prices.length > 0) {
|
||||||
h += '<div class="panel-section">Current Prices</div>';
|
h += '<div class="panel-section">Current Prices</div>';
|
||||||
h += '<div class="spec-table">';
|
h += '<div class="spec-table">';
|
||||||
prices.forEach(function(p) {
|
prices.forEach(function(p) {
|
||||||
var verBadge = p.is_verified
|
// Verified badge only if observed within 7 days AND has a real URL
|
||||||
? '<span style="color:#2d6a4f;font-size:0.7rem;font-weight:600;margin-left:0.4rem">✓ Verified</span>'
|
var verBadge = p.is_verified === true
|
||||||
: '<span style="color:#888;font-size:0.7rem;margin-left:0.4rem">unverified</span>';
|
? '<span style="color:#2d6a4f;font-size:0.7rem;font-weight:600;margin-left:0.5rem" title="Price scraped from official vendor page within the last 7 days">✓ Verified Price</span>'
|
||||||
var priceStr = p.currency + ' ' + parseFloat(p.price).toLocaleString('de-DE', {minimumFractionDigits:2,maximumFractionDigits:2});
|
: ''; // No badge for older observations — not wrong, just not shown as verified
|
||||||
var dateStr = '<span style="color:#aaa;font-size:0.68rem;margin-left:0.4rem">' + fmtDate(p.observed_at) + '</span>';
|
var priceStr = '<strong>' + p.currency + '\u00a0' + parseFloat(p.price).toLocaleString('de-DE', {minimumFractionDigits:2,maximumFractionDigits:2}) + '</strong>';
|
||||||
var urlLink = p.url ? ' <a href="' + esc(p.url) + '" target="_blank" rel="noopener" style="color:var(--accent);font-size:0.7rem;text-decoration:none;margin-left:0.3rem">↗</a>' : '';
|
var dateStr = '<span style="color:#aaa;font-size:0.68rem;margin-left:0.5rem">Stand: ' + fmtDate(p.observed_at) + '</span>';
|
||||||
|
var urlLink = '<a href="' + esc(p.url) + '" target="_blank" rel="noopener" style="color:var(--accent);font-size:0.7rem;text-decoration:none;margin-left:0.5rem" title="Direkt zur Quelle">↗ Quelle</a>';
|
||||||
h += '<div class="spec-row"><span class="spec-label">' + esc(p.vendor_name) + '</span>'
|
h += '<div class="spec-row"><span class="spec-label">' + esc(p.vendor_name) + '</span>'
|
||||||
+ '<span class="spec-val">' + priceStr + verBadge + dateStr + urlLink + '</span></div>';
|
+ '<span class="spec-val" style="display:flex;align-items:center;flex-wrap:wrap;gap:0">' + priceStr + verBadge + dateStr + urlLink + '</span></div>';
|
||||||
});
|
});
|
||||||
h += '</div>';
|
h += '</div>';
|
||||||
} else {
|
|
||||||
// Fallback: show MSRP/street from transceivers table if no price_observations
|
|
||||||
h += renderSpecTable('Pricing', [
|
|
||||||
['MSRP', t.msrp_usd ? '$' + parseFloat(t.msrp_usd).toLocaleString() : null],
|
|
||||||
['Street Price', t.street_price_usd ? '$' + parseFloat(t.street_price_usd).toLocaleString() : null],
|
|
||||||
['Price Tier', t.price_tier],
|
|
||||||
]);
|
|
||||||
}
|
}
|
||||||
|
// No price_observations → show nothing. Never display estimated or unverifiable prices.
|
||||||
|
|
||||||
// Notes (scraped extra specs)
|
// Notes (scraped extra specs)
|
||||||
if (t.notes) {
|
if (t.notes) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user