// Tableau global JavaScript pour stocker les données let indicesData = []; function chargerDonnees() { // Appel de l'API située dans le dossier php/ fetch("./php/api_indices.php") .then((response) => response.json()) .then((result) => { if (result.status === "success") { // Stockage dans le tableau global JS indicesData = result.data; // Mise à jour de tous les affichages afficherSyntheseCartes(); afficherTableauDetails(); alimenterBandeauxTicker(); // Mise à jour du statut document.getElementById("statut").innerText = `Dernière mise à jour : ${new Date().toLocaleTimeString()}`; document.getElementById("counter").innerText = `${indicesData.length} enregistrements`; } else { console.error("Erreur API :", result.message); } }) .catch((error) => console.error("Erreur réseau :", error)); } function afficherSyntheseCartes() { const container = document.getElementById("cards-container"); container.innerHTML = ""; // Trouver les indices uniques présents dans le tableau const indicesUniques = [...new Set(indicesData.map((item) => item.indice))]; indicesUniques.forEach((nomIndice) => { // Récupère le premier élément (le plus récent) pour cet indice const dernier = indicesData.find((item) => item.indice === nomIndice); if (!dernier) return; const isPositive = parseFloat(dernier.variation_pct) >= 0; const badgeColor = isPositive ? "bg-emerald-500/10 text-emerald-400 border-emerald-500/20" : "bg-rose-500/10 text-rose-400 border-rose-500/20"; const sign = isPositive ? "+" : ""; container.innerHTML += `
${dernier.indice} ${sign}${parseFloat(dernier.variation_pct).toFixed(2)}%

${dernier.nom || dernier.indice}

${parseFloat(dernier.cours).toLocaleString("fr-FR")} ${dernier.date_cours}
`; }); } function afficherTableauDetails() { const tbody = document.getElementById("table-body"); tbody.innerHTML = ""; if (indicesData.length === 0) { tbody.innerHTML = `Aucune donnée disponible`; return; } indicesData.forEach((row) => { const isPositive = parseFloat(row.variation_pct) >= 0; const textColor = isPositive ? "text-emerald-400" : "text-rose-400"; const sign = isPositive ? "+" : ""; tbody.innerHTML += ` ${row.indice} ${row.nom || "-"} ${parseFloat(row.cours).toLocaleString("fr-FR")} ${sign}${parseFloat(row.variation_pct).toFixed(2)}% ${row.date_cours} `; }); } function alimenterBandeauxTicker() { const preparerDonneesTicker = (nomIndice) => { let liste = indicesData.filter((item) => item.indice === nomIndice); // Tri alphabétique liste.sort((a, b) => { let valA = (a.nom || a.indice).toLowerCase(); let valB = (b.nom || b.indice).toLowerCase(); return valA.localeCompare(valB); }); return liste; }; remplirUnBandeau("ticker-cac40", preparerDonneesTicker("CAC40")); remplirUnBandeau("ticker-ibex35", preparerDonneesTicker("IBEX35")); remplirUnBandeau("ticker-dowjones", preparerDonneesTicker("DOWJONES")); } function remplirUnBandeau(elementId, donneesTriees) { const container = document.getElementById(elementId); if (!container) { console.error("Élément introuvable :", elementId); return; } if (donneesTriees.length === 0) { container.innerHTML = `Aucune donnée disponible`; return; } let blocs = ""; donneesTriees.forEach((item) => { const isPositive = parseFloat(item.variation_pct) >= 0; const colorClass = isPositive ? "text-emerald-400" : "text-rose-400"; const sign = isPositive ? "+" : ""; const nomAffichage = item.nom || item.indice; const coursFormate = parseFloat(item.cours).toLocaleString("fr-FR"); const variationFormatee = parseFloat(item.variation_pct).toFixed(2); blocs += `
${nomAffichage} ${coursFormate} ${sign}${variationFormatee}%
`; }); // Duplication du contenu pour la boucle infinie fluide container.innerHTML = blocs + blocs; // Vitesse uniforme et lente const dureeParElement = 6; const dureeTotale = Math.max(30, donneesTriees.length * dureeParElement); container.style.animationDuration = `${dureeTotale}s`; } // Lancer le chargement des données au démarrage de la page chargerDonnees(); // Rafraîchir automatiquement toutes les 60 secondes setInterval(chargerDonnees, 60000);