SSR: Repost ohne JS, return_to in Formularen, Werbebanner entfernt
Letzter vollständiger SSR-Stand vor dem Rückbau auf reine SPA. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TiXsPUqw7oeomZ8wZrQW5q
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
c66df283d1
commit
eccddcebe6
+1
-2
@@ -78,8 +78,7 @@ registerForm.addEventListener("submit", async (e) => {
|
||||
const feed = createFeed(
|
||||
document.getElementById("feed"),
|
||||
document.getElementById("sentinel"),
|
||||
(page) => `/entry/feed/${page}`,
|
||||
{ adEvery: 5 }
|
||||
(page) => `/entry/feed/${page}`
|
||||
);
|
||||
|
||||
// --- Neuer Beitrag ---
|
||||
|
||||
+3
-31
@@ -261,35 +261,12 @@ function setupReport(el, pid) {
|
||||
});
|
||||
}
|
||||
|
||||
// renderAd baut einen In-Feed-Werbeslot: das Banner (selbst gehostet, sonst
|
||||
// würde die CSP default-src 'self' es blocken), darunter der Pflicht-Hinweis
|
||||
// "Werbung" und der Link zur Eigenvermarktung. rel="sponsored nofollow" macht
|
||||
// den bezahlten Charakter für Suchmaschinen kenntlich.
|
||||
function renderAd() {
|
||||
const el = document.createElement("aside");
|
||||
el.className = "ad";
|
||||
el.innerHTML = `
|
||||
<a class="ad-banner" href="/werben" rel="sponsored nofollow noopener">
|
||||
<img src="/static/ads/placeholder.png" alt="Werbung" loading="lazy">
|
||||
</a>
|
||||
<div class="ad-meta muted">
|
||||
<span>Werbung</span>
|
||||
<a href="/werben">Auf dem Kontrollverlust werben</a>
|
||||
</div>
|
||||
`;
|
||||
return el;
|
||||
}
|
||||
|
||||
// createFeed hängt Infinite-Scroll an feedEl/sentinelEl und lädt Seiten über
|
||||
// urlFor(page). opts.adEvery (>0) blendet nach je N Beiträgen einen
|
||||
// Werbebanner ein — nur im Top-Level-Feed, nicht in User-/Thread-Feeds.
|
||||
// Gibt { reset } zurück, um den Feed neu zu laden.
|
||||
function createFeed(feedEl, sentinelEl, urlFor, opts = {}) {
|
||||
const adEvery = opts.adEvery || 0;
|
||||
// urlFor(page). Gibt { reset } zurück, um den Feed neu zu laden.
|
||||
function createFeed(feedEl, sentinelEl, urlFor) {
|
||||
let page = 0;
|
||||
let loading = false;
|
||||
let done = false;
|
||||
let shown = 0; // fortlaufende Beitragszahl über Seitengrenzen hinweg
|
||||
|
||||
async function loadMore() {
|
||||
if (loading || done) return;
|
||||
@@ -303,11 +280,7 @@ function createFeed(feedEl, sentinelEl, urlFor, opts = {}) {
|
||||
end.textContent = "YOU REACHED THE END!";
|
||||
feedEl.appendChild(end);
|
||||
} else {
|
||||
entries.forEach((e) => {
|
||||
feedEl.appendChild(renderEntry(e));
|
||||
shown++;
|
||||
if (adEvery && shown % adEvery === 0) feedEl.appendChild(renderAd());
|
||||
});
|
||||
entries.forEach((e) => feedEl.appendChild(renderEntry(e)));
|
||||
page++;
|
||||
}
|
||||
loading = false;
|
||||
@@ -326,7 +299,6 @@ function createFeed(feedEl, sentinelEl, urlFor, opts = {}) {
|
||||
function reset() {
|
||||
page = 0;
|
||||
done = false;
|
||||
shown = 0;
|
||||
feedEl.innerHTML = "";
|
||||
loadMore();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user