(function () { var keyTimer = null; function fmtDist(v) { if (v === null || v === undefined) return '--'; return Number(v).toFixed(2); } function pollKeyPrices() { var list = document.getElementById('key-monitor-list'); if (!list || !list.querySelector('.key-item')) return; fetch('/api/key_prices') .then(function (r) { return r.json(); }) .then(function (rows) { rows.forEach(function (row) { var el = list.querySelector('.key-item[data-key-id="' + row.id + '"]'); if (!el) return; var priceEl = el.querySelector('.live-price'); var upEl = el.querySelector('.dist-up'); var downEl = el.querySelector('.dist-down'); if (priceEl) priceEl.textContent = row.price != null ? row.price : '--'; if (upEl) upEl.textContent = fmtDist(row.dist_upper); if (downEl) downEl.textContent = fmtDist(row.dist_lower); }); }) .catch(function () { /* ignore */ }); } document.addEventListener('DOMContentLoaded', function () { pollKeyPrices(); keyTimer = setInterval(pollKeyPrices, 1000); }); })();