<!DOCTYPE html> <html lang="de"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="css/styles.css"> <link rel="icon" type="image/png" href="img/Viper-plex-logo.png"> <title>Viper-Plex</title> </head> <body> <!-- Logo separat einfügen --> <div class="logo-container"> <a href="index.html"> <img src="img/Viper-plex-logo.png" alt="Viper-Plex Logo" class="logo"> </a> </div> <div class="welcome-box"> <h1>Willkommen bei Viper-Plex</h1> <nav class="navbar"> <div class="navbar-container"> <a href="index.html" class="navbar-link">Home</a> <a href="wunsch.html" class="navbar-link">Film & Serien Wunsch</a> <a href="anleitung.html" class="navbar-link">Anleitung</a> <a href="funktionen.html" class="navbar-link">Funktionen</a> <a href="faq.html" class="navbar-link">FAQs</a> <a href="kontakt.html" class="navbar-link">Kontakt</a> <a href="link.html" class="navbar-link">Links</a> <a href="report.html" class="navbar-link">Meldungen</a> <a href="admin.html" class="navbar-link">Admin</a> </div> </nav> <label class="switch"> <input type="checkbox" id="dark-mode-toggle"> <span class="slider"></span> </label> </div> <div class="container"> <main> <div class="movies-box"> <h2>Neueste Filme</h2> <ul id="movies-list"></ul> </div> </main> <aside class="sidebar"> <div class="newsletter-box"> <h2>Newsletter Anmeldung</h2> <form id="subscribe-form"> <input type="email" id="email" placeholder="E-Mail-Adresse" required> <input type="text" id="username" placeholder="Benutzername" required> <button type="submit">Anmelden</button> </form> </div> <div class="gitea-box"> <p>Sieh dir den Code auf <a href="https://git.viper.ipv64.net/M_Viper/Plex-Telegram-Bot" target="_blank">Gitea</a> an!</p> <p>Aktuelle Version: <span id="bot-version"></span></p> <div class="telegram-connect-box"> <p>Verbinde dich mit unserem Telegram-Bot!</p> <a id="telegram-link" href="#" target="_blank">Jetzt verbinden</a> </div> </div> </aside> </div> <footer class="footer"> <p>© 2024 Viper-Plex. Alle Rechte vorbehalten.</p> <span id="changelog-icon" style="cursor: pointer;">❓</span> </footer> <div id="changelog-popup" class="popup"> <div class="popup-content"> <span class="close" id="close-popup">×</span> <h2>Changelog</h2> <ul id="changelog-list"></ul> </div> </div> <script> // Funktion, um die Umgebungsvariablen abzurufen const fetchEnvVariables = async () => { const response = await fetch('/api/env'); const data = await response.json(); document.getElementById('bot-alias').textContent = data.botAlias; document.getElementById('telegram-link').href = data.telegramLink; }; document.addEventListener('DOMContentLoaded', () => { fetch('/api/telegram-link') // API-Endpunkt zum Abrufen des Telegram-Links .then(response => response.json()) .then(data => { const telegramLink = document.getElementById('telegram-link'); telegramLink.href = data.link; // Setze den Link im Anchor-Tag }) .catch(error => console.error('Fehler beim Abrufen des Telegram-Links:', error)); // Version abrufen fetch('/api/bot-version') .then(response => response.json()) .then(data => { const botVersion = document.getElementById('bot-version'); botVersion.textContent = data.version; // Setze die Versionsnummer }) .catch(error => console.error('Fehler beim Abrufen der Bot-Version:', error)); // Funktion, um die neuesten Filme abzurufen async function fetchLatestMovies() { try { const response = await fetch('/api/latest-movies'); // API-URL const movies = await response.json(); // Filme abrufen const moviesList = document.getElementById('movies-list'); // Leere die Liste, bevor du neue Filme hinzufügst moviesList.innerHTML = ''; // Füge die neuesten Filme zur Liste hinzu movies.forEach(movie => { const listItem = document.createElement('li'); listItem.classList.add('movie-item'); // Füge Klasse hinzu für CSS // Erstelle das Coverbild const coverImage = document.createElement('img'); coverImage.src = movie.coverImage; // URL des Coverbilds coverImage.alt = movie.title; // Alternativtext für das Bild // Überprüfen, ob das Bild geladen werden kann coverImage.onerror = () => { console.error(`Konnte das Bild für ${movie.title} nicht laden: ${coverImage.src}`); coverImage.src = 'fallback-image-url.jpg'; // Fallback-Bild, wenn das Bild nicht geladen werden kann }; // Füge das Bild zur Liste hinzu listItem.appendChild(coverImage); moviesList.appendChild(listItem); }); // Animation für das Einblenden der Filme requestAnimationFrame(() => { moviesList.childNodes.forEach((item, index) => { setTimeout(() => { item.style.opacity = 1; // Opazität für sanftes Einblenden }, index * 100); // Verzögerung für jeden Film }); }); } catch (error) { console.error('Fehler beim Abrufen der Filme:', error); } } // Event-Listener für das Formular document.getElementById('subscribe-form').addEventListener('submit', function(event) { event.preventDefault(); const email = document.getElementById('email').value; const username = document.getElementById('username').value; // Generiere eine Dummy-Chat-ID const chatId = Math.floor(Math.random() * 1000000); // Zufällige Zahl zwischen 0 und 999999 fetch('/subscribe', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email, chatId, username }) }) .then(response => response.text()) .then(data => alert(data)) .catch(error => alert('Fehler: ' + error)); }); // Darkmode umschalten const toggle = document.getElementById('dark-mode-toggle'); // Darkmode-Zustand beim Laden der Seite überprüfen und anwenden const darkModeEnabled = localStorage.getItem('darkMode') === 'true'; toggle.checked = darkModeEnabled; if (darkModeEnabled) { document.body.classList.add('dark-mode'); } toggle.addEventListener('change', () => { const isChecked = toggle.checked; document.body.classList.toggle('dark-mode', isChecked); // Speichere den Zustand in localStorage localStorage.setItem('darkMode', isChecked); }); // Beim Laden der Seite die neuesten Filme abrufen window.onload = fetchLatestMovies; // Aktualisiere die Filme jede Minute (60000 Millisekunden) setInterval(fetchLatestMovies, 60000); // Changelog-Daten const changelogData = { "changelog": [ { "version": "1.8.5", "date": "2024-10-18", "changes": [ "Dev-Report Filme können jetzt gemeldet werden", "Backend Notification für Dev-Melungen hinzugefügt", "Diverse kleinere Bugfix" ] }, { "version": "1.8.4", "date": "2024-10-17", "changes": [ "Backups Passwort schutz", "Verbesserter Passwort schutz für Admin Bereich" ] }, { "version": "1.8.3", "date": "2024-10-17", "changes": [ "Logout Timer hinzugefügt.", "Automatisches Logout bei Inaktivität", "Login-Seite überarbeitet für bessere Benutzerfreundlichkeit.", "Darkmode im Adminbereich hinzugefügt." ] }, { "version": "1.8.2", "date": "2024-10-16", "changes": [ "Neue FAQ-Seite für Benutzer hinzugefügt.", "Benutzerfreundliche Darstellung der FAQs.", "Verbesserte Performance bei der Datenabfrage.", "Diverse kleinere Fehlerbehebungen." ] }, { "version": "1.8.1", "date": "2024-10-16", "changes": [ "Bugfix mit Darkmode.", "Dev-Report hinzugefügt (Bug-Report & Funktionswünsche)." ] }, { "version": "1.8.0", "date": "2024-10-14", "changes": [ "Neue Funktionen hinzugefügt.", "Verbesserte Benutzeroberfläche für die Admin-Seite.", "Optimierungen im Bot für schnellere Reaktionen." ] }, { "version": "1.7.9", "date": "2024-10-10", "changes": [ "Fehlerbehebungen und Optimierungen.", "Verbesserte Sicherheit der Benutzerdaten.", "Aktualisierte Dokumentation." ] } ] }; // Changelog im Popup anzeigen const changelogList = document.getElementById('changelog-list'); changelogData.changelog.forEach(entry => { const changelogItem = document.createElement('div'); changelogItem.classList.add('changelog-entry'); // Füge eine Klasse für das Styling hinzu changelogItem.innerHTML = ` <strong>Version ${entry.version} (${entry.date}):</strong> <ul> ${entry.changes.map(change => `<li>${change}</li>`).join('')} </ul> `; changelogList.appendChild(changelogItem); }); // Changelog-Popup-Elemente const changelogIcon = document.getElementById('changelog-icon'); const popup = document.getElementById('changelog-popup'); const closePopup = document.getElementById('close-popup'); // Popup öffnen changelogIcon.addEventListener('click', () => { popup.style.display = 'block'; document.body.classList.toggle('dark-mode', toggle.checked); // Darkmode bei Popup-Anzeige aktivieren }); // Popup schließen closePopup.addEventListener('click', () => { popup.style.display = 'none'; document.body.classList.toggle('dark-mode', toggle.checked); // Darkmode wieder zurücksetzen }); // Klick außerhalb des Popups schließt es window.addEventListener('click', (event) => { if (event.target === popup) { popup.style.display = 'none'; document.body.classList.toggle('dark-mode', toggle.checked); // Darkmode wieder zurücksetzen } }); }); </script> </body> </html>