/** * Wiederverwendbares Meldungs-Modul. * Bietet openMeldungDialog(zielTyp, zielId) und renderMeldenBtn(zielTyp, zielId). */ (function () { // Dialog einmalig in den DOM einfügen if (!document.getElementById('meldungDialog')) { document.body.insertAdjacentHTML('beforeend', `

Inhalt melden

`); document.getElementById('meldungAbbrechen').addEventListener('click', () => closeMeldungDialog()); document.getElementById('meldungDialog').addEventListener('click', function (e) { if (e.target === this) closeMeldungDialog(); }); } let _zielTyp = null, _zielId = null; window.openMeldungDialog = function (zielTyp, zielId) { _zielTyp = zielTyp; _zielId = zielId; document.getElementById('meldungGrund').value = ''; document.getElementById('meldungMsg').style.display = 'none'; document.getElementById('meldungDialogLabel').textContent = zielTyp === 'PROFIL' ? 'Profil melden' : 'Post melden'; document.getElementById('meldungDialog').style.display = 'flex'; document.getElementById('meldungSenden').onclick = async function () { const grund = document.getElementById('meldungGrund').value.trim(); const r = await fetch('/meldung', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ zielTyp: _zielTyp, zielId: _zielId, grund: grund || null }) }); const msg = document.getElementById('meldungMsg'); msg.style.display = 'block'; if (r.status === 201) { msg.style.color = 'var(--color-success, #2ecc71)'; msg.textContent = 'Meldung wurde übermittelt.'; setTimeout(closeMeldungDialog, 1500); } else if (r.status === 409) { msg.style.color = 'var(--color-primary)'; msg.textContent = 'Du hast diesen Inhalt bereits gemeldet.'; } else { msg.style.color = 'var(--color-primary)'; msg.textContent = 'Fehler beim Senden.'; } }; }; window.closeMeldungDialog = function () { document.getElementById('meldungDialog').style.display = 'none'; }; /** * Erzeugt einen kleinen "Melden"-Button-HTML-String. * Verwendung: in innerHTML-Templates, wo onclick genutzt werden kann. */ window.renderMeldenBtn = function (zielTyp, zielId) { return ``; }; })();