diff --git a/assets/js/modules/agenda-fullcalendar.js b/assets/js/modules/agenda-fullcalendar.js index dea987d..e11f761 100644 --- a/assets/js/modules/agenda-fullcalendar.js +++ b/assets/js/modules/agenda-fullcalendar.js @@ -685,7 +685,9 @@ export function initializeCalendar() { // Déterminer la couleur pour le popover (utiliser la même logique que pour l'événement) const popoverColor = bgColor || '#6c757d'; - const popoverTextColor = txtColor || '#ffffff'; + // Recalculer la couleur du texte en fonction de la luminosité du fond du popover + // pour éviter un texte blanc sur fond blanc pour les permanences non attribuées + const popoverTextColor = getTextColor(popoverColor); console.log('🎨 [POPOVER] Couleurs déterminées:', { eventId: event.id, @@ -725,6 +727,47 @@ export function initializeCalendar() { return statutConfig ? statutConfig.couleur : '#6c757d'; } + // Fonction pour obtenir le statut et sa couleur avec gestion des cas spéciaux + function getStatutDisplay(statut, eventType) { + let displayText = statut; + let displayColor = '#6c757d'; // Gris par défaut + + // Cas spécial : permanence non attribuée + if (!statut && eventType === 'permanence') { + displayText = 'Non attribué'; + displayColor = '#6c757d'; // Gris + return { text: displayText, color: displayColor }; + } + + // Si pas de statut, retourner une valeur par défaut + if (!statut) { + displayText = 'Non défini'; + return { text: displayText, color: displayColor }; + } + + // Normaliser le statut (enlever accents et mettre en minuscules pour comparaison) + const statutLower = statut.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, ""); + + // Déterminer la couleur selon le statut + if (statutLower.includes('absent')) { + displayColor = '#ffb3ba'; // Rouge pastel + } else if (statutLower.includes('present')) { + displayColor = '#90ee90'; // Vert clair + } else if (statutLower.includes('prevu')) { + displayColor = '#add8e6'; // Bleu clair + } else { + // Essayer de récupérer depuis les données ACF + if (crviACFData && crviACFData.statuts) { + const statutConfig = crviACFData.statuts[statut]; + if (statutConfig && statutConfig.couleur) { + displayColor = statutConfig.couleur; + } + } + } + + return { text: displayText, color: displayColor }; + } + // Fonction utilitaire pour extraire le nom complet d'une entité function getEntityDisplayName(entity, entityType = '') { if (!entity) return ''; @@ -757,6 +800,9 @@ export function initializeCalendar() { console.log('eventProps:', eventProps); + // Obtenir le statut formaté avec sa couleur + const statutDisplay = getStatutDisplay(eventProps.statut, eventProps.type); + // Créer le contenu du popover avec titre coloré const popoverContent = `