diff --git a/public/js/script.js b/public/js/script.js
new file mode 100644
index 0000000..35aa59e
--- /dev/null
+++ b/public/js/script.js
@@ -0,0 +1,395 @@
+ // index.html
+
+ // Funktion, um die WEB_NAME-Variable abzurufen und einzufügen
+ document.addEventListener('DOMContentLoaded', () => {
+ fetch('/api/web-name')
+ .then(response => response.json())
+ .then(data => {
+ const webName = data.name;
+ // Ersetze den Text im h1- und title-Tag
+ document.getElementById('welcome-title').textContent = `Willkommen bei ${webName}`;
+ document.getElementById('web-title').textContent = webName;
+ })
+ .catch(error => console.error('Fehler beim Abrufen des Web-Namens:', error));
+});
+
+
+// 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",
+ "Darkmode 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)."
+ ]
+}
+]
+};
+
+
+ // 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 = `
+ Version ${entry.version} (${entry.date}):
+
+ ${entry.changes.map(change => `- ${change}
`).join('')}
+
+ `;
+ 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
+ }
+ });
+});
+
+
+
+//wunsch html
+
+
+
+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));
+
+
+ // Handle form submission
+ document.getElementById('wunsch-form').addEventListener('submit', function(event) {
+ event.preventDefault();
+ const wunsch = document.getElementById('wunsch').value;
+ const type = document.getElementById('type').value;
+
+ fetch('/api/telegram-wunsch', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({ wunsch, type })
+ })
+ .then(response => response.json())
+ .then(data => {
+ document.getElementById('response-message').textContent = data.message;
+ })
+ .catch(error => {
+ document.getElementById('response-message').textContent = 'Fehler beim Senden des Wunsches: ' + error;
+ });
+ });
+});
+
+// Darkmode umschalten
+const toggle = document.getElementById('dark-mode-toggle');
+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);
+ localStorage.setItem('darkMode', isChecked);
+});
+
+
+
+//faq html
+ // Funktion zum Abrufen der FAQs
+ function fetchFaqs() {
+ fetch('/api/faqs')
+ .then(response => response.json())
+ .then(data => {
+ const faqSection = document.getElementById('faq-section');
+ faqSection.innerHTML = ''; // Leere den Inhalt zuerst
+
+ if (data.length === 0) {
+ faqSection.innerHTML = 'Es gibt derzeit keine FAQs.
';
+ } else {
+ data.forEach((faq, index) => {
+ const faqItem = document.createElement('div');
+ faqItem.classList.add('faq-item');
+
+ const faqToggle = document.createElement('div');
+ faqToggle.classList.add('faq-toggle');
+ faqToggle.innerHTML = `${index + 1}. ${faq.question}
+ `;
+ faqItem.appendChild(faqToggle);
+
+ const faqAnswer = document.createElement('p');
+ faqAnswer.classList.add('faq-answer');
+ faqAnswer.innerText = faq.answer;
+ faqItem.appendChild(faqAnswer);
+
+ // Event-Listener hinzufügen, um die Antwort anzuzeigen oder auszublenden
+ faqToggle.addEventListener('click', () => {
+ faqAnswer.classList.toggle('show');
+ const arrow = faqToggle.querySelector('.arrow');
+ arrow.style.transform = faqAnswer.classList.contains('show') ? 'rotate(180deg)' : 'rotate(0deg)';
+ });
+
+ faqSection.appendChild(faqItem);
+ });
+ }
+ })
+ .catch(error => console.error('Fehler beim Abrufen der FAQs:', error));
+ }
+
+ document.addEventListener('DOMContentLoaded', () => {
+ // FAQs beim Laden der Seite abrufen
+ fetchFaqs();
+
+
+ });
+
+
+//kontakt html
+
+// Kontaktinformationen aus .env abrufen
+document.addEventListener('DOMContentLoaded', () => {
+ fetch('/api/contact-info') // API-Endpunkt zum Abrufen der Kontaktinformationen
+ .then(response => response.json())
+ .then(data => {
+ document.getElementById('contact-email').href = `mailto:${data.email}`;
+ document.getElementById('contact-email').textContent = data.email;
+ document.getElementById('contact-telegram').href = data.telegram;
+ document.getElementById('contact-telegram').textContent = data.telegram.split('/').pop(); // Extrahiere den Benutzernamen aus der URL
+ })
+ .catch(error => console.error('Fehler beim Abrufen der Kontaktinformationen:', error));
+});
+
+
+//Report html
+
+document.getElementById('report-form').addEventListener('submit', function(event) {
+ event.preventDefault();
+
+ const type = document.getElementById('report-type').value;
+ const user = { name: document.getElementById('username').value };
+ const message = document.getElementById('message').value;
+
+ fetch('/api/submit-report', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({ type, user, message })
+ })
+ .then(response => response.json())
+ .then(data => {
+ // Bestätigung anzeigen
+ document.getElementById('confirmation').style.display = 'block';
+
+ // Formular leeren
+ document.getElementById('report-form').reset();
+
+ // Bestätigung nach 5 Sekunden ausblenden
+ setTimeout(() => {
+ document.getElementById('confirmation').style.display = 'none';
+ }, 5000);
+ })
+ .catch(error => {
+ console.error('Fehler beim Übermitteln des Berichts:', error);
+ alert('Es gab ein Problem beim Senden des Berichts. Bitte versuche es später erneut.');
+ });
+});
+
+
+toggle.addEventListener('change', () => {
+ const isChecked = toggle.checked;
+ document.body.classList.toggle('dark-mode', isChecked);
+ // Speichere den Zustand in localStorage
+ localStorage.setItem('darkMode', isChecked);
+});
+
+
+//link html --> keine Scripte
+
+//funktionen html --> keine Scripte