diff --git a/serienfans-releasegroup-filter.user.js b/serienfans-releasegroup-filter.user.js index db4b337..82d8bc3 100644 --- a/serienfans-releasegroup-filter.user.js +++ b/serienfans-releasegroup-filter.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @name Serienfans/Filmfans Releasegruppen Filter // @namespace https://git.ponywave.de/Akamaru/Userscripts -// @version 1.1 +// @version 1.2 // @description Blende Uploads bestimmter Releasegruppen aus // @author Akamaru // @match https://serienfans.org/* @@ -19,7 +19,7 @@ (function() { 'use strict'; - // CSS für Block-Button + // CSS für Block-Button und Modal GM_addStyle(` .block-group-btn { display: inline; @@ -34,6 +34,153 @@ min-width: 0; vertical-align: middle; } + + #blacklist-modal { + display: none; + position: fixed; + z-index: 10000; + left: 0; + top: 0; + width: 100%; + height: 100%; + background-color: rgba(0,0,0,0.6); + animation: fadeIn 0.2s; + } + + @keyframes fadeIn { + from { opacity: 0; } + to { opacity: 1; } + } + + #blacklist-modal-content { + background-color: #1a1a1a; + margin: 5% auto; + padding: 30px; + border: 1px solid #333; + border-radius: 8px; + width: 90%; + max-width: 600px; + box-shadow: 0 4px 20px rgba(0,0,0,0.5); + color: #fff; + } + + #blacklist-modal h2 { + margin-top: 0; + color: #fff; + font-size: 24px; + margin-bottom: 20px; + } + + #blacklist-items { + max-height: 400px; + overflow-y: auto; + margin: 20px 0; + background: #2a2a2a; + border-radius: 4px; + padding: 10px; + } + + .blacklist-item { + display: flex; + justify-content: space-between; + align-items: center; + padding: 10px; + margin: 5px 0; + background: #333; + border-radius: 4px; + transition: background 0.2s; + } + + .blacklist-item:hover { + background: #3a3a3a; + } + + .blacklist-item-name { + flex-grow: 1; + font-size: 16px; + } + + .blacklist-item-remove { + background: #d32f2f; + color: white; + border: none; + padding: 5px 12px; + border-radius: 4px; + cursor: pointer; + font-size: 14px; + transition: background 0.2s; + } + + .blacklist-item-remove:hover { + background: #b71c1c; + } + + #blacklist-add-container { + display: flex; + gap: 10px; + margin: 20px 0; + } + + #blacklist-add-input { + flex-grow: 1; + padding: 10px; + border: 1px solid #444; + border-radius: 4px; + background: #2a2a2a; + color: #fff; + font-size: 14px; + } + + #blacklist-add-input:focus { + outline: none; + border-color: #666; + } + + #blacklist-add-btn, #blacklist-close-btn { + padding: 10px 20px; + border: none; + border-radius: 4px; + cursor: pointer; + font-size: 14px; + font-weight: 500; + transition: background 0.2s; + } + + #blacklist-add-btn { + background: #4caf50; + color: white; + } + + #blacklist-add-btn:hover { + background: #45a049; + } + + #blacklist-close-btn { + background: #666; + color: white; + width: 100%; + margin-top: 10px; + } + + #blacklist-close-btn:hover { + background: #777; + } + + .blacklist-empty { + text-align: center; + padding: 30px; + color: #888; + font-style: italic; + } + + #blacklist-menu-btn { + cursor: pointer; + transition: opacity 0.2s; + } + + #blacklist-menu-btn:hover { + opacity: 0.8; + } `); // Standard-Blacklist (kann über das Menü bearbeitet werden) @@ -126,23 +273,140 @@ }); } - // Funktion zum Bearbeiten der Blacklist - function editBlacklist() { - const currentList = blacklist.join(', '); - const newList = prompt('Releasegruppen zum Ausblenden (kommagetrennt):\n\nBeispiel: SURCODE, WATCHABLE, ENDSTATiON', currentList); + // Funktion zum Erstellen des Modal-Fensters + function createBlacklistModal() { + const modal = document.createElement('div'); + modal.id = 'blacklist-modal'; + modal.innerHTML = ` +
+

🚫 Releasegruppen-Filter

+
+ + +
+
+ +
+ `; + document.body.appendChild(modal); - if (newList !== null) { - blacklist = newList.split(',').map(item => item.trim()).filter(item => item !== ''); - GM_setValue('releasegroup_blacklist', blacklist); - alert('Blacklist gespeichert! Die Seite wird neu geladen.'); - location.reload(); + // Event Listeners + modal.addEventListener('click', (e) => { + if (e.target === modal) { + closeModal(); + } + }); + + document.getElementById('blacklist-close-btn').addEventListener('click', closeModal); + document.getElementById('blacklist-add-btn').addEventListener('click', addToBlacklist); + document.getElementById('blacklist-add-input').addEventListener('keypress', (e) => { + if (e.key === 'Enter') { + addToBlacklist(); + } + }); + + updateBlacklistDisplay(); + } + + // Funktion zum Aktualisieren der Blacklist-Anzeige + function updateBlacklistDisplay() { + const container = document.getElementById('blacklist-items'); + if (!container) return; + + if (blacklist.length === 0) { + container.innerHTML = '
Keine Releasegruppen geblockt
'; + return; + } + + container.innerHTML = blacklist.map(group => ` +
+ ${group} + +
+ `).join(''); + + // Event Listeners für Remove-Buttons + container.querySelectorAll('.blacklist-item-remove').forEach(btn => { + btn.addEventListener('click', (e) => { + const group = e.target.getAttribute('data-group'); + removeFromBlacklist(group); + }); + }); + } + + // Funktion zum Hinzufügen einer Releasegruppe + function addToBlacklist() { + const input = document.getElementById('blacklist-add-input'); + const group = input.value.trim(); + + if (group === '') return; + + if (blacklist.some(blocked => blocked.toLowerCase() === group.toLowerCase())) { + alert(`"${group}" ist bereits in der Blacklist!`); + return; + } + + blacklist.push(group); + GM_setValue('releasegroup_blacklist', blacklist); + input.value = ''; + updateBlacklistDisplay(); + filterReleasesAlternative(); + } + + // Funktion zum Entfernen einer Releasegruppe + function removeFromBlacklist(group) { + blacklist = blacklist.filter(item => item !== group); + GM_setValue('releasegroup_blacklist', blacklist); + updateBlacklistDisplay(); + location.reload(); + } + + // Funktion zum Öffnen des Modals + function openModal() { + const modal = document.getElementById('blacklist-modal'); + if (modal) { + modal.style.display = 'block'; + updateBlacklistDisplay(); + document.getElementById('blacklist-add-input').focus(); } } - // Registriere Menübefehl - GM_registerMenuCommand('Releasegruppen-Filter bearbeiten', editBlacklist); + // Funktion zum Schließen des Modals + function closeModal() { + const modal = document.getElementById('blacklist-modal'); + if (modal) { + modal.style.display = 'none'; + } + } - // Filtere beim Laden der Seite + // Funktion zum Hinzufügen des Buttons im Header + function addHeaderButton() { + const menu = document.getElementById('menu'); + if (!menu) return; + + const menuBtn = document.createElement('a'); + menuBtn.id = 'blacklist-menu-btn'; + menuBtn.textContent = '🚫 Filter'; + menuBtn.addEventListener('click', (e) => { + e.preventDefault(); + openModal(); + }); + + // Füge Button vor dem Settings-Link ein + const settingsLink = menu.querySelector('.settings'); + if (settingsLink) { + menu.insertBefore(menuBtn, settingsLink); + } else { + menu.appendChild(menuBtn); + } + } + + // Registriere Menübefehl (als Fallback) + GM_registerMenuCommand('Releasegruppen-Filter bearbeiten', openModal); + + // Initialisierung + addHeaderButton(); + createBlacklistModal(); filterReleasesAlternative(); // Beobachte Änderungen (falls Inhalte dynamisch nachgeladen werden)