/* ============ News — media coverage / press list ============ */ function formatNewsDate(d) { if (!d) return ""; const m = /^(\d{4})-(\d{2})-(\d{2})/.exec(d); return m ? `${m[1]}.${m[2]}.${m[3]}` : d; } function NewsCard({ n, idx }) { const [ref, seen] = useInView(); const hasLink = !!n.url; const Tag = hasLink ? "a" : "div"; const linkProps = hasLink ? { href: n.url, target: "_blank", rel: "noopener noreferrer" } : {}; return ( {n.image ? : } {n.type && {n.type}} {formatNewsDate(n.date)} {n.outlet && {n.outlet}} {n.title}{hasLink && READ →} {n.excerpt && {n.excerpt}} ); } function NewsSection() { const data = ((window.HASHBIT_DATA && window.HASHBIT_DATA.news) || []) .filter(n => n.published !== false) .slice() .sort((a, b) => (b.date || "").localeCompare(a.date || "")); if (!data.length) return null; return ( 04 News {String(data.length).padStart(2, "0")} ARTICLES {data.map((n, i) => )} ); } Object.assign(window, { NewsSection });
{n.excerpt}