Update from Git Manager GUI

This commit is contained in:
2026-03-22 00:40:17 +01:00
parent dfdc74bcf9
commit ead2f3a62a
2 changed files with 443 additions and 4 deletions

View File

@@ -148,15 +148,17 @@
border-color: var(--c-border-d);
}
.wbf-btn:hover { background: var(--c-surface); color: var(--c-text); border-color: var(--c-primary); }
.wbf-btn--primary {
background: var(--c-primary); color: #fff;
.wbf-btn--primary,
a.wbf-btn--primary {
background: var(--c-primary); color: #fff !important;
border-color: var(--c-primary);
box-shadow: 0 0 12px rgba(0,180,216,.3);
}
.wbf-btn--primary:hover {
.wbf-btn--primary:hover,
a.wbf-btn--primary:hover {
background: var(--c-primary-d); border-color: var(--c-primary-d);
box-shadow: 0 0 20px rgba(0,180,216,.45);
color: #fff;
color: #fff !important;
}
.wbf-btn--outline {
background: transparent; border-color: rgba(255,255,255,.18);
@@ -2832,3 +2834,285 @@ select.wbf-cf-input option { background: var(--c-surface2); color: var(--c-text)
color: #fbbf24;
background: rgba(251,191,36,.12);
}
/* ── Ignore / Block ────────────────────────────────────────────────────────── */
/* Eingeklappter Post-Wrapper */
.wbf-post--ignored {
background: transparent;
border: 1px solid rgba(148,163,184,.15);
border-radius: var(--radius-sm);
overflow: hidden;
}
/* Info-Bar die anstelle des Posts erscheint */
.wbf-ignored-bar {
display: flex;
align-items: center;
justify-content: space-between;
gap: .75rem;
padding: .6rem 1rem;
background: rgba(71,85,105,.18);
color: var(--c-muted);
font-size: .8rem;
flex-wrap: wrap;
}
.wbf-ignored-bar span {
display: flex;
align-items: center;
gap: .4rem;
}
.wbf-ignored-bar strong {
color: var(--c-text-dim);
}
/* "Trotzdem anzeigen"-Button in der ignored-bar */
.wbf-show-ignored-btn {
background: none;
border: 1px solid rgba(148,163,184,.3);
border-radius: var(--radius-sm);
color: var(--c-muted);
font-size: .75rem;
padding: 2px 8px;
cursor: pointer;
transition: var(--transition);
white-space: nowrap;
flex-shrink: 0;
}
.wbf-show-ignored-btn:hover {
border-color: var(--c-primary);
color: var(--c-primary);
}
/* Ignore-Button in Post-Footer */
.wbf-ignore-btn {
background: none;
border: none;
cursor: pointer;
color: var(--c-muted);
padding: 2px 6px;
border-radius: 4px;
font-size: .82rem;
transition: var(--transition);
display: inline-flex;
align-items: center;
gap: .3rem;
}
.wbf-ignore-btn:hover {
color: #f97316;
background: rgba(249,115,22,.08);
}
/* Profil-Button-Variante (mit Border via wbf-btn--sm) */
.wbf-btn.wbf-ignore-btn {
border: 1.5px solid rgba(148,163,184,.3);
padding: .35rem .75rem;
}
.wbf-btn.wbf-ignore-btn:hover,
.wbf-btn.wbf-ignore-btn[data-ignored="1"] {
border-color: #f97316;
color: #f97316;
background: rgba(249,115,22,.08);
}
/* Ignorierte-Nutzer-Liste im Profil */
.wbf-ignore-list {
display: flex;
flex-direction: column;
gap: .5rem;
}
.wbf-ignore-item {
display: flex;
align-items: center;
gap: .75rem;
padding: .6rem .75rem;
border-radius: var(--radius-sm);
background: rgba(255,255,255,.03);
border: 1px solid var(--c-border);
transition: var(--transition);
}
.wbf-ignore-item:hover {
background: rgba(255,255,255,.05);
}
.wbf-ignore-item__avatar {
flex-shrink: 0;
text-decoration: none;
}
.wbf-ignore-item__info {
display: flex;
flex-direction: column;
gap: .15rem;
min-width: 0;
}
.wbf-ignore-item__name {
font-size: .88rem;
font-weight: 600;
color: var(--c-text);
text-decoration: none;
}
.wbf-ignore-item__name:hover {
color: var(--c-primary);
}
.wbf-ignore-item__since {
font-size: .73rem;
color: var(--c-muted);
}
/* ── Profil-Tabs ─────────────────────────────────────────────────────────── */
.wbf-profile-tabs {
display: flex;
gap: 0;
margin-bottom: 1.5rem;
border-bottom: 2px solid var(--c-border);
padding: 0;
overflow-x: auto;
scrollbar-width: none;
}
.wbf-profile-tabs::-webkit-scrollbar { display: none; }
.wbf-profile-tab {
display: inline-flex;
align-items: center;
gap: .45rem;
padding: .7rem 1.1rem;
font-size: .88rem;
font-weight: 600;
color: var(--c-muted);
text-decoration: none;
border-bottom: 2px solid transparent;
margin-bottom: -2px;
transition: color .15s, border-color .15s;
white-space: nowrap;
letter-spacing: .01em;
}
.wbf-profile-tab:hover {
color: var(--c-text);
border-bottom-color: rgba(255,255,255,.2);
}
.wbf-profile-tab.active {
color: var(--c-primary);
border-bottom-color: var(--c-primary);
}
.wbf-profile-tab i {
font-size: .8rem;
}
@media (max-width: 480px) {
.wbf-profile-tab {
padding: .6rem .75rem;
font-size: .82rem;
}
}
/* ── Notification Preferences ────────────────────────────────────────────── */
.wbf-notif-pref-list {
display: flex;
flex-direction: column;
gap: .5rem;
}
.wbf-notif-pref {
display: flex;
align-items: center;
justify-content: space-between;
gap: 1rem;
padding: .75rem 1rem;
background: rgba(255,255,255,.03);
border: 1px solid var(--c-border);
border-radius: var(--radius-sm);
cursor: pointer;
transition: var(--transition);
}
.wbf-notif-pref:hover {
background: rgba(255,255,255,.05);
}
.wbf-notif-pref__info {
display: flex;
flex-direction: column;
gap: .2rem;
}
.wbf-notif-pref__info span {
font-size: .88rem;
font-weight: 600;
color: var(--c-text);
display: flex;
align-items: center;
gap: .4rem;
}
.wbf-notif-pref__info span i {
color: var(--c-primary);
font-size: .78rem;
}
.wbf-notif-pref__info small {
font-size: .75rem;
color: var(--c-muted);
}
/* ── Toggle-Switch ───────────────────────────────────────────────────────── */
.wbf-toggle {
position: relative;
width: 42px;
height: 24px;
background: rgba(148,163,184,.25);
border-radius: 12px;
transition: background .2s;
flex-shrink: 0;
cursor: pointer;
border: 1px solid rgba(148,163,184,.2);
}
.wbf-toggle--on {
background: var(--c-primary);
border-color: var(--c-primary);
}
.wbf-toggle__knob {
position: absolute;
top: 2px;
left: 2px;
width: 18px;
height: 18px;
background: #fff;
border-radius: 50%;
transition: transform .2s;
box-shadow: 0 1px 3px rgba(0,0,0,.3);
}
.wbf-toggle--on .wbf-toggle__knob {
transform: translateX(18px);
}
/* ── Profil-Sidebar: Online-Status & Zuletzt aktiv ──────────────────────── */
.wbf-profile-online-badge {
display: inline-flex;
align-items: center;
gap: .35rem;
font-size: .75rem;
font-weight: 700;
color: #22c55e;
margin-top: .25rem;
letter-spacing: .02em;
}
.wbf-profile-online-dot {
width: 8px;
height: 8px;
border-radius: 50%;
background: #22c55e;
box-shadow: 0 0 6px #22c55e;
animation: wbf-pulse-green 2s infinite;
flex-shrink: 0;
}
@keyframes wbf-pulse-green {
0%, 100% { opacity: 1; box-shadow: 0 0 6px #22c55e; }
50% { opacity: .7; box-shadow: 0 0 10px #22c55e; }
}
.wbf-profile-lastseen {
display: inline-flex;
align-items: center;
gap: .3rem;
font-size: .73rem;
color: var(--c-muted);
margin-top: .25rem;
}
.wbf-profile-lastseen i {
font-size: .68rem;
opacity: .7;
}

View File

@@ -1944,6 +1944,55 @@
});
});
/* ── 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);
@@ -1959,4 +2008,110 @@
});
});
/* ── 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('<i class="fas fa-' + (nowIgnored ? 'eye' : 'eye-slash') + '"></i> ' + (nowIgnored ? 'Entblocken' : 'Ignorieren'));
} else {
// Profil-Variante mit wbf-btn
$b.html('<i class="fas fa-' + (nowIgnored ? 'eye' : 'eye-slash') + '"></i> ' + (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 = '<div class="wbf-ignored-bar">' +
'<span><i class="fas fa-eye-slash"></i> Beitrag von ignoriertem Nutzer: <strong>' +
$('<span>').text(name).html() + '</strong></span>' +
'<button class="wbf-show-ignored-btn" type="button">Trotzdem anzeigen</button>' +
'</div>' +
'<div class="wbf-ignored-content" style="display:none">';
$post.addClass('wbf-post--ignored');
$post.prepend(barHtml);
// Restlichen Inhalt in ignored-content verschieben
$post.children(':not(.wbf-ignored-bar):not(.wbf-ignored-content)').wrapAll('<div class="wbf-ignored-content-inner">');
$post.find('.wbf-ignored-content').append($post.find('.wbf-ignored-content-inner').children());
$post.find('.wbf-ignored-content-inner').remove();
}
} else {
// Entblockt → Overlay entfernen
var $bar = $post.find('.wbf-ignored-bar');
var $content = $post.find('.wbf-ignored-content');
if ($bar.length) {
// Inhalt wieder nach oben holen
$content.children().unwrap();
$bar.remove();
$post.removeClass('wbf-post--ignored');
}
}
});
// Ignore-Liste im Profil aktualisieren (falls Nutzer auf eigener Profil-Seite)
if (!nowIgnored) {
// Eintrag aus der Liste entfernen
$('#wbf-ignore-item-' + ignoredId).fadeOut(300, function () {
$(this).remove();
var remaining = $('#wbfIgnoreList .wbf-ignore-item').length;
$('#wbfIgnoreCount').text(remaining);
if (remaining === 0) {
$('#wbfIgnoreList').replaceWith('<p class="wbf-profile-empty" id="wbfIgnoreEmpty">Du ignorierst niemanden.</p>');
}
});
}
// Toast-Meldung
var $t = $('<div class="wbf-toast">' + (d.message || (nowIgnored ? name + ' ignoriert.' : 'Ignorierung aufgehoben.')) + '</div>').appendTo('body');
setTimeout(function () { $t.remove(); }, 3000);
}, function () {
// Fehler-Callback
$('.wbf-ignore-btn[data-id="' + ignoredId + '"]').prop('disabled', false);
});
});
/* "Trotzdem anzeigen" — eingeklappten ignorierten Post aufdecken */
$(document).on('click', '.wbf-show-ignored-btn', function () {
var $bar = $(this).closest('.wbf-ignored-bar');
var $content = $bar.next('.wbf-ignored-content');
$content.slideDown(200);
$bar.hide();
});
}(jQuery));