Soft-Delete: Beiträge als [deleted] erhalten statt löschen
- entry.deleted; entrySelect LEFT JOIN + COALESCE(username)
- POST /entry/{pid}/delete: deleted=1, Inhalt/Bild/Autor geleert, Zeile bleibt
- Konto-Löschung soft-deletet die eigenen Beiträge (statt hartem DELETE),
damit fremde Antworten nicht verwaisen
- Frontend: [deleted]-Platzhalter im Feed, Löschen-Button auf Focus-Seite
- notes/migrations.md: ALTER TABLE deleted
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+13
-3
@@ -34,15 +34,25 @@ function renderEntry(e) {
|
||||
el.className = "card";
|
||||
|
||||
const when = new Date(e.created_at * 1000).toLocaleString("de-DE");
|
||||
const replyLabel =
|
||||
e.reply_count === 1 ? "1 Antwort" : `${e.reply_count} Antworten`;
|
||||
|
||||
// Soft-gelöschter Beitrag: nur Platzhalter, damit der Thread navigierbar bleibt.
|
||||
if (e.deleted) {
|
||||
el.innerHTML = `
|
||||
<div class="muted">[deleted] · ${when}</div>
|
||||
<div class="content">[deleted]</div>
|
||||
<div class="muted"><a href="/e/${e.pid}">${replyLabel}</a></div>
|
||||
`;
|
||||
return el;
|
||||
}
|
||||
|
||||
const user = encodeURIComponent(e.username);
|
||||
let media = "";
|
||||
if (e.filepath) {
|
||||
media = `<img src="/${e.filepath}" alt="" loading="lazy">`;
|
||||
}
|
||||
|
||||
const replyLabel =
|
||||
e.reply_count === 1 ? "1 Antwort" : `${e.reply_count} Antworten`;
|
||||
|
||||
el.innerHTML = `
|
||||
<div class="muted"><a href="/u/${user}">${escapeHtml(e.username)}</a> · ${when}</div>
|
||||
<div class="content">${linkify(e.content)}</div>
|
||||
|
||||
Reference in New Issue
Block a user