/* global React */ function CaseHero({ data }) { const cover = (typeof caseAsset === "function") ? caseAsset(data.cover) : data.cover; const cat = data.cat || data.categoryDisplay; return (
{cat} · {data.year}

{data.title}

{data.lede}

); } function CaseFacts({ data }) { return ( ); } function isVideoSrc(src) { return /\.(mp4|mov|webm|m4v)(\?|$)/i.test(src || ""); } function CaseGallery({ photos }) { const noContext = (e) => e.preventDefault(); const photoItems = (photos || []).filter(p => !isVideoSrc(p.src)); const videoItems = (photos || []).filter(p => isVideoSrc(p.src)); return (
{photoItems.length > 0 && (
{videoItems.length > 0 &&

Photos · {photoItems.length}

}
{photoItems.map((p, i) => (
)} {videoItems.length > 0 && (
{photoItems.length > 0 &&

Vidéos · {videoItems.length}

}
{videoItems.map((p, i) => (
))}
)}
); } function CaseQuote({ quote, author, role }) { return (

« {quote} »

— {author}
{role}

); } function CaseResults({ stats }) { return (
Résultats organiques
{stats.map((s, i) => (
{s.n}
{s.label}
))}
); } // Path-resolver: in the case-study sub-folder, assets sit one level up. // Lets editors store "assets/foo.jpg" everywhere and we just prepend "../" here. function caseAsset(p) { if (!p) return p; if (/^(https?:|data:|\.\.|\/)/.test(p)) return p; return "../" + p; } // Generic block renderer for case studies. Supports: heading, subheading, text, // image, gallery, results/numbers, quote, divider. function CaseBlocks({ blocks }) { return (
{blocks.map((b, i) => { switch (b.type) { case "heading": return

{b.text}

; case "subheading": return

{b.text}

; case "text": return

{b.text}

; case "divider": return
; case "image": return (
{b.cap {b.cap &&
{b.cap}
}
); case "gallery": return (
({ ...p, src: caseAsset(p.src) }))}/>
); case "results": case "numbers": return ; case "quote": return ; default: return null; } })}
); } window.CaseHero = CaseHero; window.CaseFacts = CaseFacts; window.CaseGallery = CaseGallery; window.CaseQuote = CaseQuote; window.CaseResults = CaseResults; window.CaseBlocks = CaseBlocks; window.caseAsset = caseAsset;