/** * Hydrate #lead section from live Pulse /api/articles?limit=1 * Syncs read-aloud voice when article edition changes. */ (function () { var section = document.getElementById('lead'); if (!section) return; var headline = section.querySelector('.lead-headline'); var deck = section.querySelector('.lead-deck'); var byline = section.querySelector('.lead-byline'); var flag = section.querySelector('.lead-flag'); var body = section.querySelector('.article-text'); var readBtn = section.querySelector('button[onclick*="vbSpeak"]'); function esc(s) { return String(s || '') .replace(/&/g, '&') .replace(//g, '>'); } function formatDate(iso) { if (!iso) return ''; try { return new Date(iso).toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric', }); } catch (_) { return ''; } } function syncLeadVoice(art) { if (!art || !window.GMIIEVoiceSync) return; var scripts = window.GMIIEVoiceSync.getScripts(); if (scripts.lead && scripts.lead.article_id === art.id) return; window.GMIIEVoiceSync.refresh(); } function isXml(str) { var s = String(str || '').trim().toLowerCase(); return s.indexOf('([\s\S]*?)<\/item>/i); var searchIn = itemMatch ? itemMatch[1] : xmlStr; var titleMatch = searchIn.match(/
' + esc(p) + '
'; }) .join(''); } } if (readBtn && art.title) { readBtn.setAttribute('aria-label', 'Read aloud: ' + art.title); readBtn.setAttribute('data-voice-article-id', art.id || ''); } var mintHost = section.querySelector('.lead-mint-host'); if (!mintHost) { mintHost = document.createElement('div'); mintHost.className = 'lead-mint-host'; if (readBtn && readBtn.parentNode) { readBtn.parentNode.insertBefore(mintHost, readBtn.nextSibling); } else { section.appendChild(mintHost); } } mintHost.innerHTML = ''; if (window.GMIIELpsMint && art.id) { window.GMIIELpsMint.renderButton(mintHost, { briefId: art.id, title: art.title, lps1Id: art.lps1_registration_id, }); } section.setAttribute('data-lead-hydrated', '1'); section.setAttribute('data-lead-article-id', art.id || ''); if (art.sha256) section.setAttribute('data-lead-sha256', art.sha256); syncLeadVoice(art); } function fetchAndHydrateLead(options) { var url = '/api/articles?limit=10'; var fetchOpts = { cache: 'no-store' }; if (options && options.signal) { fetchOpts.signal = options.signal; } return fetch(url, fetchOpts) .then(function (r) { return r.ok ? r.json() : null; }) .then(function (data) { var articles = (data && data.articles) || []; var leadArt = null; for (var i = 0; i < articles.length; i++) { var a = articles[i]; if ( a && (a.lane === 'lead' || a.id === 'catchup-cme-perps-suit-2026') && a.summary && a.summary.length > 500 && !a.id.startsWith('scrape-') ) { leadArt = a; break; } } if (leadArt) { hydrateArticle(leadArt); } else { section.setAttribute('data-lead-hydrated', 'static-fallback'); } }) .catch(function () { section.setAttribute('data-lead-hydrated', 'static-fallback'); }); } fetchAndHydrateLead({ signal: AbortSignal.timeout(12000) }); window.addEventListener('gmiie-voice-updated', function () { var artId = section.getAttribute('data-lead-article-id'); var scripts = window.GMIIEVoiceSync && window.GMIIEVoiceSync.getScripts(); if (scripts && scripts.lead && scripts.lead.article_id && artId && scripts.lead.article_id !== artId) { fetchAndHydrateLead(); } }); })();