Place ads in the middle of articles for better visibility

Modify the article display logic to split content and insert an AdSense InArticleAd component in the middle of the article body.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 517dfa7b-26ac-463d-a6e1-a58c6df97188
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: 22f71caf-1d79-45de-9f19-6c2e31b1cfff
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/f209e72a-0939-48fa-84fc-57854de71967/517dfa7b-26ac-463d-a6e1-a58c6df97188/VgutZ7W
Replit-Helium-Checkpoint-Created: true
This commit is contained in:
sebastjanartic 2026-03-01 18:40:33 +00:00
parent 64edf696ff
commit 39f825581d

View File

@ -10,7 +10,7 @@ import Header from "@/components/header";
import Footer from "@/components/footer";
import { InArticleAd } from "@/components/adsense";
import DOMPurify from "dompurify";
import { useEffect } from "react";
import { useEffect, useMemo } from "react";
const ALLOWED_IFRAME_DOMAINS = [
"iframe.mediadelivery.net",
@ -201,8 +201,13 @@ export default function ArticlePage() {
</div>
</div>
<article
className="prose prose-lg dark:prose-invert max-w-none
{(() => {
const sanitized = sanitizeContent(article.content);
const blocks = sanitized.split(/(?=<(?:p|h[2-4]|div)[\s>])/i).filter(Boolean);
const midPoint = Math.max(2, Math.floor(blocks.length / 2));
const firstHalf = blocks.slice(0, midPoint).join("");
const secondHalf = blocks.slice(midPoint).join("");
const proseClasses = `prose prose-lg dark:prose-invert max-w-none
prose-headings:text-foreground prose-headings:font-semibold
prose-p:text-foreground/85 prose-p:leading-relaxed
prose-a:text-primary prose-a:no-underline hover:prose-a:underline
@ -211,12 +216,23 @@ export default function ArticlePage() {
[&_iframe]:rounded-md [&_iframe]:my-6 [&_iframe]:max-w-full
[&_div[style]]:flex [&_div[style]]:justify-center
[&_blockquote:not(.instagram-media)]:border-l-primary [&_blockquote:not(.instagram-media)]:bg-accent/50 [&_blockquote:not(.instagram-media)]:rounded-r-md [&_blockquote:not(.instagram-media)]:py-1
[&_.instagram-media]:!bg-transparent [&_.instagram-media]:!border-0 [&_.instagram-media]:!shadow-none [&_.instagram-media]:!p-0 [&_.instagram-media]:mx-auto"
dangerouslySetInnerHTML={{ __html: sanitizeContent(article.content) }}
data-testid="article-content"
/>
<InArticleAd />
[&_.instagram-media]:!bg-transparent [&_.instagram-media]:!border-0 [&_.instagram-media]:!shadow-none [&_.instagram-media]:!p-0 [&_.instagram-media]:mx-auto`;
return (
<>
<article
className={proseClasses}
dangerouslySetInnerHTML={{ __html: firstHalf }}
data-testid="article-content"
/>
<InArticleAd />
<article
className={proseClasses}
dangerouslySetInnerHTML={{ __html: secondHalf }}
data-testid="article-content-continued"
/>
</>
);
})()}
<RelatedArticles currentSlug={slug || ""} />
</main>