window.App = window.App || {}; // --- Navigation et démarrage de la partie --- App.startGameIfStarted = () => { const userData = getUserData(); if (userData.partie_commencee) loadPage('combat'); else if (userData.partie_commencee_weekend) loadPage('combat-weekend'); }; App.startGameIfStarted(); // Constantes globales pour les sujets App.subjectDefinitions = { TE: "Test", SO: "Correction", PR: "Problème", BO: "Bogue", AN: "Annonce", NM: "Nouvelle Màj", NS: "Nouvelle Saison", ER: "Erreur", }; App.subjectColors = { TE: "#FFD700", SO: "#32CD32", PR: "#FF6347", BO: "#FF4500", AN: "#1E90FF", NM: "#8A2BE2", NS: "#FF1493", ER: "#DC143C", }; /************ Gestion des actualités ************/ // Fonction utilitaire pour créer un élément news App.createNewsItem = function ({id, title, content, date, time}) { const newsItem = document.createElement("div"); newsItem.className = "news-item"; const subjectKey = id.substring(2, 4); const subject = App.subjectDefinitions[subjectKey] || "Inconnu"; const subjectColor = App.subjectColors[subjectKey] || "#000"; const subjectBox = document.createElement("div"); subjectBox.textContent = subject; subjectBox.style.position = "absolute"; subjectBox.style.top = "5px"; subjectBox.style.right = "5px"; subjectBox.style.padding = "5px 10px"; subjectBox.style.backgroundColor = subjectColor; subjectBox.style.color = "#fff"; subjectBox.style.borderRadius = "5px"; subjectBox.style.fontSize = "0.8em"; subjectBox.style.fontWeight = "bold"; const titleElement = document.createElement("div"); titleElement.className = "news-title"; titleElement.textContent = title; const dateElement = document.createElement("div"); dateElement.textContent = `Publié le ${date} à ${time}`; dateElement.style.fontSize = "0.9em"; dateElement.style.color = "#666"; const contentElement = document.createElement("div"); contentElement.textContent = content; newsItem.appendChild(subjectBox); newsItem.appendChild(titleElement); newsItem.appendChild(dateElement); newsItem.appendChild(contentElement); return newsItem; } // Fonction principale pour récupérer et afficher les actualités récentes App.fetchNews = function () { const newsRef = database.ref("news/"); newsRef.on("value", (snapshot) => { const newsData = snapshot.val(); const newsContainer = document.getElementById("news"); newsContainer.innerHTML = ""; if (!newsData) { console.log("Aucune donnée trouvée."); return; } const now = new Date(); const oneWeekAgo = new Date(now); oneWeekAgo.setDate(now.getDate() - 7); const newsArray = Object.entries(newsData).map(([id, details]) => ({ id, ...details, })); // Trier par date décroissante newsArray.sort((a, b) => { const dateTimeA = new Date( a.date.split("/").reverse().join("-") + "T" + a.time ); const dateTimeB = new Date( b.date.split("/").reverse().join("-") + "T" + b.time ); return dateTimeB - dateTimeA; }); // Afficher les actualités de la dernière semaine newsArray.forEach((news) => { const newsDateTime = new Date( news.date.split("/").reverse().join("-") + "T" + news.time ); if (newsDateTime > oneWeekAgo && newsDateTime <= now) { newsContainer.appendChild(App.createNewsItem(news)); } }); // Bouton pour afficher les anciennes infos const seeOldNewsButton = document.createElement("button"); seeOldNewsButton.textContent = "Voir les anciennes infos"; seeOldNewsButton.style.marginTop = "20px"; seeOldNewsButton.style.padding = "10px"; seeOldNewsButton.style.backgroundColor = "#1E90FF"; seeOldNewsButton.style.color = "#fff"; seeOldNewsButton.style.border = "none"; seeOldNewsButton.style.borderRadius = "5px"; seeOldNewsButton.addEventListener("click", () => App.displayOldNews(newsArray, oneWeekAgo, seeOldNewsButton) ); newsContainer.appendChild(seeOldNewsButton); }); } // Fonction pour afficher les actualités plus anciennes que la semaine écoulée App.displayOldNews = function (newsArray, cutoffDate, seeOldNewsButton) { const newsContainer = document.getElementById("news"); newsContainer.innerHTML = ""; const oldNews = newsArray.filter(({date, time}) => { const newsDateTime = new Date(date.split("/").reverse().join("-") + "T" + time); return newsDateTime <= cutoffDate; }); oldNews.forEach((news) => { newsContainer.appendChild(App.createNewsItem(news)); }); const returnToCurrentNewsButton = document.createElement("button"); returnToCurrentNewsButton.textContent = "Retour aux infos actuelles"; returnToCurrentNewsButton.style.marginTop = "20px"; returnToCurrentNewsButton.style.padding = "10px"; returnToCurrentNewsButton.style.backgroundColor = "#1E90FF"; returnToCurrentNewsButton.style.color = "#fff"; returnToCurrentNewsButton.style.border = "none"; returnToCurrentNewsButton.style.borderRadius = "5px"; returnToCurrentNewsButton.addEventListener("click", () => { App.fetchNews(); returnToCurrentNewsButton.style.display = "none"; seeOldNewsButton.style.display = "inline-block"; }); newsContainer.appendChild(returnToCurrentNewsButton); seeOldNewsButton.style.display = "none"; } // Lancement de la récupération des actualités App.fetchNews();