// ============================================================ // Tribeca Lisboa — NEWS ARTICLE resolver // Reads ?id= from the URL, looks the article up in STORE, and // exposes ARTICLE / NEWS_RELATED_EVENTS / NEWS_RELATED_SPEAKERS. // ============================================================ (function () { const a = NEWS_BY_ID[getParam('id')] || NEWS[0]; window.ARTICLE = { id: a.id, cat: a.cat, kicker: a.kicker, hero: a.img, title: a.title, titleEn: a.titleEn, date: a.date, dateEn: a.dateEn, readTime: a.readTime, readTimeEn: a.readTimeEn, author: a.author, authorEn: a.authorEn, dek: a.dek, dekEn: a.dekEn, external: a.external, body: a.body, }; window.NEWS_RELATED_EVENTS = (a.relatedEvents || []).map((id) => { const r = EVENTS_BY_ID[id]; return { id: r.id, cat: r.cat, title: r.title, titleEn: r.titleEn, date: r.date, venue: r.venue, img: r.img }; }); window.NEWS_RELATED_SPEAKERS = (a.relatedSpeakers || []).map((key) => { const s = SPEAKERS[key]; // role label drawn from any event where this speaker appears (fallback generic) let role = 'Convidado', roleEn = 'Guest'; for (const ev of EVENTS) { const g = (ev.guests || []).find((x) => x.id === s.id); if (g) { role = g.role; roleEn = g.roleEn; break; } } return { id: s.id, name: s.name, img: s.img, role, roleEn }; }); })();