public/js/script.js aktualisiert

This commit is contained in:
M_Viper 2024-10-22 16:27:30 +00:00
parent b1cecc7baf
commit 8244ac1858
1 changed files with 424 additions and 395 deletions

View File

@ -1,395 +1,424 @@
// index.html // index.html
// Funktion, um die WEB_NAME-Variable abzurufen und einzufügen // Funktion, um die WEB_NAME-Variable abzurufen und einzufügen
document.addEventListener('DOMContentLoaded', () => { document.addEventListener('DOMContentLoaded', () => {
fetch('/api/web-name') fetch('/api/web-name')
.then(response => response.json()) .then(response => response.json())
.then(data => { .then(data => {
const webName = data.name; const webName = data.name;
// Ersetze den Text im h1- und title-Tag // Ersetze den Text im h1- und title-Tag
document.getElementById('welcome-title').textContent = `Willkommen bei ${webName}`; document.getElementById('welcome-title').textContent = `Willkommen bei ${webName}`;
document.getElementById('web-title').textContent = webName; document.getElementById('web-title').textContent = webName;
}) })
.catch(error => console.error('Fehler beim Abrufen des Web-Namens:', error)); .catch(error => console.error('Fehler beim Abrufen des Web-Namens:', error));
}); });
// Funktion, um die Umgebungsvariablen abzurufen // Funktion, um die Umgebungsvariablen abzurufen
const fetchEnvVariables = async () => { const fetchEnvVariables = async () => {
const response = await fetch('/api/env'); const response = await fetch('/api/env');
const data = await response.json(); const data = await response.json();
document.getElementById('bot-alias').textContent = data.botAlias; document.getElementById('bot-alias').textContent = data.botAlias;
document.getElementById('telegram-link').href = data.telegramLink; document.getElementById('telegram-link').href = data.telegramLink;
}; };
document.addEventListener('DOMContentLoaded', () => { document.addEventListener('DOMContentLoaded', () => {
fetch('/api/telegram-link') // API-Endpunkt zum Abrufen des Telegram-Links fetch('/api/telegram-link') // API-Endpunkt zum Abrufen des Telegram-Links
.then(response => response.json()) .then(response => response.json())
.then(data => { .then(data => {
const telegramLink = document.getElementById('telegram-link'); const telegramLink = document.getElementById('telegram-link');
telegramLink.href = data.link; // Setze den Link im Anchor-Tag telegramLink.href = data.link; // Setze den Link im Anchor-Tag
}) })
.catch(error => console.error('Fehler beim Abrufen des Telegram-Links:', error)); .catch(error => console.error('Fehler beim Abrufen des Telegram-Links:', error));
// Version abrufen // Version abrufen
fetch('/api/bot-version') fetch('/api/bot-version')
.then(response => response.json()) .then(response => response.json())
.then(data => { .then(data => {
const botVersion = document.getElementById('bot-version'); const botVersion = document.getElementById('bot-version');
botVersion.textContent = data.version; // Setze die Versionsnummer botVersion.textContent = data.version; // Setze die Versionsnummer
}) })
.catch(error => console.error('Fehler beim Abrufen der Bot-Version:', error)); .catch(error => console.error('Fehler beim Abrufen der Bot-Version:', error));
// Funktion, um die neuesten Filme abzurufen async function fetchLatestMovies() {
async function fetchLatestMovies() { try {
try { const response = await fetch('/api/latest-movies'); // API-URL
const response = await fetch('/api/latest-movies'); // API-URL const movies = await response.json(); // Filme abrufen
const movies = await response.json(); // Filme abrufen const moviesList = document.getElementById('movies-list');
const moviesList = document.getElementById('movies-list');
// Leere die Liste, bevor du neue Filme hinzufügst
// Leere die Liste, bevor du neue Filme hinzufügst moviesList.innerHTML = '';
moviesList.innerHTML = '';
// Füge die neuesten Filme zur Liste hinzu
// Füge die neuesten Filme zur Liste hinzu movies.forEach(movie => {
movies.forEach(movie => { const listItem = document.createElement('li');
const listItem = document.createElement('li'); listItem.classList.add('movie-item'); // Füge Klasse hinzu für CSS
listItem.classList.add('movie-item'); // Füge Klasse hinzu für CSS
// Erstelle das Coverbild
// Erstelle das Coverbild const coverImage = document.createElement('img');
const coverImage = document.createElement('img'); coverImage.src = movie.coverImage; // URL des Coverbilds
coverImage.src = movie.coverImage; // URL des Coverbilds coverImage.alt = movie.title; // Alternativtext für das Bild
coverImage.alt = movie.title; // Alternativtext für das Bild
// Überprüfen, ob das Bild geladen werden kann
// Überprüfen, ob das Bild geladen werden kann coverImage.onerror = () => {
coverImage.onerror = () => { console.error(`Konnte das Bild für ${movie.title} nicht laden: ${coverImage.src}`);
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
coverImage.src = 'fallback-image-url.jpg'; // Fallback-Bild, wenn das Bild nicht geladen werden kann };
};
// Füge ein Klick-Event hinzu, um das Popup zu öffnen
// Füge das Bild zur Liste hinzu coverImage.addEventListener('click', () => {
listItem.appendChild(coverImage); openMoviePopup(movie); // Popup mit Filminformationen öffnen
moviesList.appendChild(listItem); });
});
// Füge das Bild zur Liste hinzu
// Animation für das Einblenden der Filme listItem.appendChild(coverImage);
requestAnimationFrame(() => { moviesList.appendChild(listItem);
moviesList.childNodes.forEach((item, index) => { });
setTimeout(() => {
item.style.opacity = 1; // Opazität für sanftes Einblenden // Animation für das Einblenden der Filme
}, index * 100); // Verzögerung für jeden Film requestAnimationFrame(() => {
}); moviesList.childNodes.forEach((item, index) => {
}); setTimeout(() => {
item.style.opacity = 1; // Opazität für sanftes Einblenden
} catch (error) { }, index * 100); // Verzögerung für jeden Film
console.error('Fehler beim Abrufen der Filme:', error); });
} });
}
} catch (error) {
// Event-Listener für das Formular console.error('Fehler beim Abrufen der Filme:', error);
document.getElementById('subscribe-form').addEventListener('submit', function(event) { }
event.preventDefault(); }
const email = document.getElementById('email').value;
const username = document.getElementById('username').value; // Funktion zum Öffnen des Popups mit Filmdetails
function openMoviePopup(movie) {
// Generiere eine Dummy-Chat-ID document.getElementById('popup-title').innerText = movie.title; // Titel
const chatId = Math.floor(Math.random() * 1000000); // Zufällige Zahl zwischen 0 und 999999 document.getElementById('popup-cover').src = movie.coverImage; // Cover
document.getElementById('popup-summary').innerText = movie.summary || "Keine Zusammenfassung verfügbar."; // Zusammenfassung
fetch('/subscribe', {
method: 'POST', // Popup anzeigen
headers: { 'Content-Type': 'application/json' }, document.getElementById('movie-popup').style.display = 'block';
body: JSON.stringify({ email, chatId, username }) }
})
.then(response => response.text()) // Event Listener zum Schließen des Popups
.then(data => alert(data)) document.getElementById('close-popup').addEventListener('click', () => {
.catch(error => alert('Fehler: ' + error)); document.getElementById('movie-popup').style.display = 'none';
}); });
// Darkmode umschalten // Event Listener zum Schließen des Popups, wenn außerhalb des Inhalts geklickt wird
const toggle = document.getElementById('dark-mode-toggle'); window.addEventListener('click', (event) => {
const popup = document.getElementById('movie-popup');
// Darkmode-Zustand beim Laden der Seite überprüfen und anwenden if (event.target === popup) {
const darkModeEnabled = localStorage.getItem('darkMode') === 'true'; popup.style.display = 'none';
toggle.checked = darkModeEnabled; }
if (darkModeEnabled) { });
document.body.classList.add('dark-mode');
} // Event-Listener für das Formular
document.getElementById('subscribe-form').addEventListener('submit', function(event) {
toggle.addEventListener('change', () => { event.preventDefault();
const isChecked = toggle.checked; const email = document.getElementById('email').value;
document.body.classList.toggle('dark-mode', isChecked); const username = document.getElementById('username').value;
// Speichere den Zustand in localStorage
localStorage.setItem('darkMode', isChecked); // Generiere eine Dummy-Chat-ID
}); const chatId = Math.floor(Math.random() * 1000000); // Zufällige Zahl zwischen 0 und 999999
// Beim Laden der Seite die neuesten Filme abrufen fetch('/subscribe', {
window.onload = fetchLatestMovies; method: 'POST',
headers: { 'Content-Type': 'application/json' },
// Aktualisiere die Filme jede Minute (60000 Millisekunden) body: JSON.stringify({ email, chatId, username })
setInterval(fetchLatestMovies, 60000); })
.then(response => response.text())
// Changelog-Daten .then(data => alert(data))
const changelogData = { .catch(error => alert('Fehler: ' + error));
"changelog": [ });
{
"version": "1.8.5", // Darkmode umschalten
"date": "2024-10-18", const toggle = document.getElementById('dark-mode-toggle');
"changes": [
"Dev-Report Filme können jetzt gemeldet werden", // Darkmode-Zustand beim Laden der Seite überprüfen und anwenden
"Backend Notification für Dev-Melungen hinzugefügt", const darkModeEnabled = localStorage.getItem('darkMode') === 'true';
"Diverse kleinere Bugfix", toggle.checked = darkModeEnabled;
"Darkmode Bugfix" if (darkModeEnabled) {
] document.body.classList.add('dark-mode');
}, }
{
"version": "1.8.4", toggle.addEventListener('change', () => {
"date": "2024-10-17", const isChecked = toggle.checked;
"changes": [ document.body.classList.toggle('dark-mode', isChecked);
"Backups Passwort schutz", // Speichere den Zustand in localStorage
"Verbesserter Passwort schutz für Admin Bereich" localStorage.setItem('darkMode', isChecked);
] });
},
{ // Beim Laden der Seite die neuesten Filme abrufen
"version": "1.8.3", window.onload = fetchLatestMovies;
"date": "2024-10-17",
"changes": [ // Aktualisiere die Filme jede Minute (60000 Millisekunden)
"Logout Timer hinzugefügt.", setInterval(fetchLatestMovies, 60000);
"Automatisches Logout bei Inaktivität",
"Login-Seite überarbeitet für bessere Benutzerfreundlichkeit.", // Changelog-Daten
"Darkmode im Adminbereich hinzugefügt." const changelogData = {
] "changelog": [
}, {
{ "version": "1.8.8", // Hinzugefügte Version
"version": "1.8.2", "date": "2024-10-21", // Aktuelles Datum
"date": "2024-10-16", "changes": [
"changes": [ "Mehrere Bugfix",
"Neue FAQ-Seite für Benutzer hinzugefügt.", "Genre im Profil hinzugefügt",
"Benutzerfreundliche Darstellung der FAQs.", "Nachtmodus Zeit in Profil eingebaut"
"Verbesserte Performance bei der Datenabfrage.", ]
"Diverse kleinere Fehlerbehebungen." },
] {
}, "version": "1.8.7", // Hinzugefügte Version
{ "date": "2024-10-20", // Aktuelles Datum
"version": "1.8.1", "changes": [
"date": "2024-10-16", "Fehlerbehebung mit Profil.",
"changes": [ "Nachtmodus komplett überarbeitet.",
"Bugfix mit Darkmode.", "Fehler beim Wunsch behoben.",
"Dev-Report hinzugefügt (Bug-Report & Funktionswünsche)." "Benutzerlevel erweitert"
] ]
} },
] {
}; "version": "1.8.6", // Neue Version hinzufügen
"date": "2024-10-19", // Aktuelles Datum
"changes": [
// Changelog im Popup anzeigen "Neue Popup-Funktionalität für Filmcover hinzugefügt.",
const changelogList = document.getElementById('changelog-list'); "Cursor wechselt zu Handzeiger über Filmcover.",
"Rahmenfarbe für das Popup hinzugefügt.",
changelogData.changelog.forEach(entry => { "Verschiedene kleinere Bugfixes."
const changelogItem = document.createElement('div'); ]
changelogItem.classList.add('changelog-entry'); // Füge eine Klasse für das Styling hinzu },
{
changelogItem.innerHTML = ` "version": "1.8.5",
<strong>Version ${entry.version} (${entry.date}):</strong> "date": "2024-10-18",
<ul> "changes": [
${entry.changes.map(change => `<li>${change}</li>`).join('')} "Dev-Report Filme können jetzt gemeldet werden",
</ul> "Backend Notification für Dev-Melungen hinzugefügt",
`; "Diverse kleinere Bugfix",
changelogList.appendChild(changelogItem); "Darkmode Bugfix"
}); ]
},
// Changelog-Popup-Elemente {
const changelogIcon = document.getElementById('changelog-icon'); "version": "1.8.4",
const popup = document.getElementById('changelog-popup'); "date": "2024-10-17",
const closePopup = document.getElementById('close-popup'); "changes": [
"Backups Passwort schutz",
// Popup öffnen "Verbesserter Passwort schutz für Admin Bereich"
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'; // Changelog im Popup anzeigen
document.body.classList.toggle('dark-mode', toggle.checked); // Darkmode wieder zurücksetzen const changelogList = document.getElementById('changelog-list');
});
changelogData.changelog.forEach(entry => {
// Klick außerhalb des Popups schließt es const changelogItem = document.createElement('div');
window.addEventListener('click', (event) => { changelogItem.classList.add('changelog-entry'); // Füge eine Klasse für das Styling hinzu
if (event.target === popup) {
popup.style.display = 'none'; changelogItem.innerHTML = `
document.body.classList.toggle('dark-mode', toggle.checked); // Darkmode wieder zurücksetzen <strong>Version ${entry.version} (${entry.date}):</strong>
} <ul>
}); ${entry.changes.map(change => `<li>${change}</li>`).join('')}
}); </ul>
`;
changelogList.appendChild(changelogItem);
});
//wunsch html
// Changelog-Popup-Elemente
const changelogIcon = document.getElementById('changelog-icon');
const popup = document.getElementById('changelog-popup');
document.addEventListener('DOMContentLoaded', () => { const closePopup = document.getElementById('close-popup');
fetch('/api/telegram-link') // API-Endpunkt zum Abrufen des Telegram-Links
.then(response => response.json()) // Popup öffnen
.then(data => { changelogIcon.addEventListener('click', () => {
const telegramLink = document.getElementById('telegram-link'); popup.style.display = 'block';
telegramLink.href = data.link; // Setze den Link im Anchor-Tag document.body.classList.toggle('dark-mode', toggle.checked); // Darkmode bei Popup-Anzeige aktivieren
}) });
.catch(error => console.error('Fehler beim Abrufen des Telegram-Links:', error));
// Popup schließen
// Version abrufen closePopup.addEventListener('click', () => {
fetch('/api/bot-version') popup.style.display = 'none';
.then(response => response.json()) document.body.classList.toggle('dark-mode', toggle.checked); // Darkmode wieder zurücksetzen
.then(data => { });
const botVersion = document.getElementById('bot-version');
botVersion.textContent = data.version; // Setze die Versionsnummer // Klick außerhalb des Popups schließt es
}) window.addEventListener('click', (event) => {
.catch(error => console.error('Fehler beim Abrufen der Bot-Version:', error)); if (event.target === popup) {
popup.style.display = 'none';
document.body.classList.toggle('dark-mode', toggle.checked); // Darkmode wieder zurücksetzen
// 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;
//wunsch html
fetch('/api/telegram-wunsch', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ wunsch, type }) document.addEventListener('DOMContentLoaded', () => {
}) fetch('/api/telegram-link') // API-Endpunkt zum Abrufen des Telegram-Links
.then(response => response.json()) .then(response => response.json())
.then(data => { .then(data => {
document.getElementById('response-message').textContent = data.message; const telegramLink = document.getElementById('telegram-link');
}) telegramLink.href = data.link; // Setze den Link im Anchor-Tag
.catch(error => { })
document.getElementById('response-message').textContent = 'Fehler beim Senden des Wunsches: ' + error; .catch(error => console.error('Fehler beim Abrufen des Telegram-Links:', error));
});
}); // Version abrufen
}); fetch('/api/bot-version')
.then(response => response.json())
// Darkmode umschalten .then(data => {
const toggle = document.getElementById('dark-mode-toggle'); const botVersion = document.getElementById('bot-version');
const darkModeEnabled = localStorage.getItem('darkMode') === 'true'; botVersion.textContent = data.version; // Setze die Versionsnummer
toggle.checked = darkModeEnabled; })
if (darkModeEnabled) document.body.classList.add('dark-mode'); .catch(error => console.error('Fehler beim Abrufen der Bot-Version:', error));
toggle.addEventListener('change', () => {
const isChecked = toggle.checked; // Handle form submission
document.body.classList.toggle('dark-mode', isChecked); document.getElementById('wunsch-form').addEventListener('submit', function(event) {
localStorage.setItem('darkMode', isChecked); event.preventDefault();
}); const wunsch = document.getElementById('wunsch').value;
const type = document.getElementById('type').value;
fetch('/api/telegram-wunsch', {
//faq html method: 'POST',
// Funktion zum Abrufen der FAQs headers: { 'Content-Type': 'application/json' },
function fetchFaqs() { body: JSON.stringify({ wunsch, type })
fetch('/api/faqs') })
.then(response => response.json()) .then(response => response.json())
.then(data => { .then(data => {
const faqSection = document.getElementById('faq-section'); document.getElementById('response-message').textContent = data.message;
faqSection.innerHTML = ''; // Leere den Inhalt zuerst })
.catch(error => {
if (data.length === 0) { document.getElementById('response-message').textContent = 'Fehler beim Senden des Wunsches: ' + error;
faqSection.innerHTML = '<p><h3>Es gibt derzeit keine FAQs.</h3></p>'; });
} else { });
data.forEach((faq, index) => { });
const faqItem = document.createElement('div');
faqItem.classList.add('faq-item'); // Darkmode umschalten
const toggle = document.getElementById('dark-mode-toggle');
const faqToggle = document.createElement('div'); const darkModeEnabled = localStorage.getItem('darkMode') === 'true';
faqToggle.classList.add('faq-toggle'); toggle.checked = darkModeEnabled;
faqToggle.innerHTML = `<h3 class="faq-question">${index + 1}. ${faq.question}</h3> if (darkModeEnabled) document.body.classList.add('dark-mode');
<i class="fas fa-chevron-down arrow"></i>`;
faqItem.appendChild(faqToggle); toggle.addEventListener('change', () => {
const isChecked = toggle.checked;
const faqAnswer = document.createElement('p'); document.body.classList.toggle('dark-mode', isChecked);
faqAnswer.classList.add('faq-answer'); localStorage.setItem('darkMode', isChecked);
faqAnswer.innerText = faq.answer; });
faqItem.appendChild(faqAnswer);
// Event-Listener hinzufügen, um die Antwort anzuzeigen oder auszublenden
faqToggle.addEventListener('click', () => { //faq html
faqAnswer.classList.toggle('show'); // Funktion zum Abrufen der FAQs
const arrow = faqToggle.querySelector('.arrow'); function fetchFaqs() {
arrow.style.transform = faqAnswer.classList.contains('show') ? 'rotate(180deg)' : 'rotate(0deg)'; fetch('/api/faqs')
}); .then(response => response.json())
.then(data => {
faqSection.appendChild(faqItem); const faqSection = document.getElementById('faq-section');
}); faqSection.innerHTML = ''; // Leere den Inhalt zuerst
}
}) if (data.length === 0) {
.catch(error => console.error('Fehler beim Abrufen der FAQs:', error)); faqSection.innerHTML = '<p><h3>Es gibt derzeit keine FAQs.</h3></p>';
} } else {
data.forEach((faq, index) => {
document.addEventListener('DOMContentLoaded', () => { const faqItem = document.createElement('div');
// FAQs beim Laden der Seite abrufen faqItem.classList.add('faq-item');
fetchFaqs();
const faqToggle = document.createElement('div');
faqToggle.classList.add('faq-toggle');
}); faqToggle.innerHTML = `<h3 class="faq-question">${index + 1}. ${faq.question}</h3>
<i class="fas fa-chevron-down arrow"></i>`;
faqItem.appendChild(faqToggle);
//kontakt html
const faqAnswer = document.createElement('p');
// Kontaktinformationen aus .env abrufen faqAnswer.classList.add('faq-answer');
document.addEventListener('DOMContentLoaded', () => { faqAnswer.innerText = faq.answer;
fetch('/api/contact-info') // API-Endpunkt zum Abrufen der Kontaktinformationen faqItem.appendChild(faqAnswer);
.then(response => response.json())
.then(data => { // Event-Listener hinzufügen, um die Antwort anzuzeigen oder auszublenden
document.getElementById('contact-email').href = `mailto:${data.email}`; faqToggle.addEventListener('click', () => {
document.getElementById('contact-email').textContent = data.email; faqAnswer.classList.toggle('show');
document.getElementById('contact-telegram').href = data.telegram; const arrow = faqToggle.querySelector('.arrow');
document.getElementById('contact-telegram').textContent = data.telegram.split('/').pop(); // Extrahiere den Benutzernamen aus der URL arrow.style.transform = faqAnswer.classList.contains('show') ? 'rotate(180deg)' : 'rotate(0deg)';
}) });
.catch(error => console.error('Fehler beim Abrufen der Kontaktinformationen:', error));
}); faqSection.appendChild(faqItem);
});
}
//Report html })
.catch(error => console.error('Fehler beim Abrufen der FAQs:', error));
document.getElementById('report-form').addEventListener('submit', function(event) { }
event.preventDefault();
document.addEventListener('DOMContentLoaded', () => {
const type = document.getElementById('report-type').value; // FAQs beim Laden der Seite abrufen
const user = { name: document.getElementById('username').value }; fetchFaqs();
const message = document.getElementById('message').value;
fetch('/api/submit-report', { });
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ type, user, message }) //kontakt html
})
.then(response => response.json()) // Kontaktinformationen aus .env abrufen
.then(data => { document.addEventListener('DOMContentLoaded', () => {
// Bestätigung anzeigen fetch('/api/contact-info') // API-Endpunkt zum Abrufen der Kontaktinformationen
document.getElementById('confirmation').style.display = 'block'; .then(response => response.json())
.then(data => {
// Formular leeren document.getElementById('contact-email').href = `mailto:${data.email}`;
document.getElementById('report-form').reset(); document.getElementById('contact-email').textContent = data.email;
document.getElementById('contact-telegram').href = data.telegram;
// Bestätigung nach 5 Sekunden ausblenden document.getElementById('contact-telegram').textContent = data.telegram.split('/').pop(); // Extrahiere den Benutzernamen aus der URL
setTimeout(() => { })
document.getElementById('confirmation').style.display = 'none'; .catch(error => console.error('Fehler beim Abrufen der Kontaktinformationen:', error));
}, 5000); });
})
.catch(error => {
console.error('Fehler beim Übermitteln des Berichts:', error); //Report html
alert('Es gab ein Problem beim Senden des Berichts. Bitte versuche es später erneut.');
}); document.getElementById('report-form').addEventListener('submit', function(event) {
}); event.preventDefault();
const type = document.getElementById('report-type').value;
toggle.addEventListener('change', () => { const user = { name: document.getElementById('username').value };
const isChecked = toggle.checked; const message = document.getElementById('message').value;
document.body.classList.toggle('dark-mode', isChecked);
// Speichere den Zustand in localStorage fetch('/api/submit-report', {
localStorage.setItem('darkMode', isChecked); method: 'POST',
}); headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ type, user, message })
})
//link html --> keine Scripte .then(response => response.json())
.then(data => {
//funktionen html --> keine Scripte // 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