Noch keine Nachrichten.
' + (d.message || 'Konto gelöscht.') + '
' ); setTimeout(function () { window.location.href = d.redirect || WBF.forum_url || '/'; }, 2500); }, function (d) { showMsg($msg, d.message || 'Fehler.', false); $btn.prop('disabled', false).html(' Konto endgültig löschen'); }); }); /* ══════════════════════════════════════════════════════════ FEATURE: Spam-Schutz — Formzeit + Honeypot ══════════════════════════════════════════════════════════ */ // Sende Honeypot + Zeitstempel mit Registrierung $(document).on('click', '.wbf-reg-submit-btn', function() { var $box = $(this).closest('.wbf-auth-box'); $box.find('[name="wbf_website"]').val(''); // Honeypot immer leer lassen }); /* ══════════════════════════════════════════════════════════ FIX: Modal Teleport — verschiebe alle Modals zu damit kein Stacking-Context (sticky/transform) das position:fixed Overlay blockieren kann. ══════════════════════════════════════════════════════════ */ $(function() { // CSS-Variablen aus .wbf-wrap auf die teleportierten Modals übertragen var wrapStyle = document.querySelector('.wbf-wrap'); $('.wbf-modal').each(function() { var $modal = $(this); // Klone den computed style für CSS-Variablen if (wrapStyle) { var vars = [ '--c-surface','--c-primary','--c-primary-l','--c-accent', '--c-text','--c-text-dim','--c-muted','--c-border', '--c-danger','--c-green','--c-warning','--radius','--radius-sm', '--c-bg','--c-bg2','--c-surface2' ]; vars.forEach(function(v) { var val = getComputedStyle(wrapStyle).getPropertyValue(v); if (val) $modal[0].style.setProperty(v, val.trim()); }); } $modal.appendTo('body'); }); }); /* ── E-Mail-Adresse ändern ──────────────────────────────────────────── */ $(document).on('click', '#wbfSaveEmail', function () { var $btn = $(this); var email = $('#wbfNewEmail').val().trim(); var password = $('#wbfEmailPassword').val(); var $msg = $('#wbfEmailMsg'); if (!email) { $msg.removeClass('wbf-ok').addClass('wbf-err').text('Bitte E-Mail eingeben.'); return; } if (!password) { $msg.removeClass('wbf-ok').addClass('wbf-err').text('Bitte Passwort eingeben.'); return; } $btn.prop('disabled', true); wbfPost('wbf_change_email', { new_email: email, password: password }, function (d) { $msg.removeClass('wbf-err').addClass('wbf-ok').text(d.message || 'E-Mail geaendert.'); $('#wbfNewEmail').val(''); $('#wbfEmailPassword').val(''); $btn.prop('disabled', false); }, function (d) { $msg.removeClass('wbf-ok').addClass('wbf-err').text(d.message || 'Fehler.'); $btn.prop('disabled', false); }); }); /* ── Toggle-Switch (Notification Prefs) ─────────────────────────────── */ $(document).on('click', '.wbf-toggle', function () { var $t = $(this); var on = String($t.data('state')) === '1'; var val = on ? '0' : '1'; $t.data('state', val).attr('data-state', val); if (val === '1') { $t.addClass('wbf-toggle--on'); } else { $t.removeClass('wbf-toggle--on'); } }); /* ── Benachrichtigungs-Einstellungen speichern ───────────────────────── */ $(document).on('click', '#wbfSaveNotifPrefs', function () { var $btn = $(this); var $msg = $('#wbfNotifPrefsMsg'); $btn.prop('disabled', true); wbfPost('wbf_save_notification_prefs', { notify_reply: String($('#wbfNotifReply').data('state')) === '1' ? '1' : '0', notify_mention: String($('#wbfNotifMention').data('state')) === '1' ? '1' : '0', notify_message: String($('#wbfNotifMessage').data('state')) === '1' ? '1' : '0' }, function (d) { $msg.removeClass('wbf-err').addClass('wbf-ok').text(d.message || 'Gespeichert!'); $btn.prop('disabled', false); }, function (d) { $msg.removeClass('wbf-ok').addClass('wbf-err').text(d.message || 'Fehler.'); $btn.prop('disabled', false); }); }); /* ── Lesezeichen ────────────────────────────────────────────────────── */ $(document).on('click', '.wbf-bookmark-btn', function () { var $btn = $(this); var threadId = $btn.data('thread'); wbfPost('wbf_toggle_bookmark', { thread_id: threadId }, function (d) { if (d.bookmarked) { $btn.addClass('wbf-bookmarked').attr('title', 'Lesezeichen entfernen'); $btn.find('i').removeClass('far').addClass('fas'); } else { $btn.removeClass('wbf-bookmarked').attr('title', 'Lesezeichen hinzufügen'); $btn.find('i').removeClass('fas').addClass('far'); } }); }); /* ── Nutzer ignorieren / Ignorierung aufheben ────────────────────────── */ $(document).on('click', '.wbf-ignore-btn', function () { var $btn = $(this); var ignoredId = parseInt($btn.data('id'), 10); var name = $btn.data('name') || 'diesen Nutzer'; var isIgnored = String($btn.data('ignored')) === '1'; // Bestätigung nur beim Ignorieren, nicht beim Entblocken if (!isIgnored) { if (!confirm(name + ' ignorieren?\n\nDessen Beiträge werden in Threads ausgeblendet und DMs werden blockiert.')) { return; } } $btn.prop('disabled', true); wbfPost('wbf_toggle_ignore', { ignored_id: ignoredId }, function (d) { var nowIgnored = d.ignored; // Alle Buttons mit dieser User-ID auf der Seite aktualisieren $('.wbf-ignore-btn[data-id="' + ignoredId + '"]').each(function () { var $b = $(this); $b.data('ignored', nowIgnored ? '1' : '0'); $b.attr('data-ignored', nowIgnored ? '1' : '0'); // Icon + Label aktualisieren $b.find('i').attr('class', 'fas fa-' + (nowIgnored ? 'eye' : 'eye-slash')); // Button-Variante (Post-Footer, klein ohne wbf-btn) if (!$b.hasClass('wbf-btn')) { $b.text(''); $b.append(' ' + (nowIgnored ? 'Entblocken' : 'Ignorieren')); } else { // Profil-Variante mit wbf-btn $b.html(' ' + (nowIgnored ? 'Ignorierung aufheben' : 'Nutzer ignorieren')); } $b.prop('disabled', false); }); // Posts des Users auf der aktuellen Seite ein-/ausblenden $('.wbf-post, .wbf-post--op').each(function () { var $post = $(this); // Buttons innerhalb dieses Posts mit der User-ID suchen var $ib = $post.find('.wbf-ignore-btn[data-id="' + ignoredId + '"]'); if (!$ib.length) return; if (nowIgnored) { // Ignoriert → Overlay zeigen wenn noch nicht vorhanden if (!$post.find('.wbf-ignored-bar').length) { var barHtml = '' + '