Upload templates/index.html with huggingface_hub
Browse files- templates/index.html +38 -4
templates/index.html
CHANGED
|
@@ -1650,7 +1650,7 @@ textarea:focus {
|
|
| 1650 |
|
| 1651 |
<!-- HEATMAP COMPACTE -->
|
| 1652 |
<div class="compact-heatmap-and-indicators">
|
| 1653 |
-
<h3>🔥 Heatmap d'activité - Analyse de
|
| 1654 |
|
| 1655 |
<div class="compact-heatmap-container">
|
| 1656 |
<!-- Colonne gauche : Heatmap et contrôles -->
|
|
@@ -1703,7 +1703,7 @@ textarea:focus {
|
|
| 1703 |
<!-- Colonne droite : Indicateurs de persévérance -->
|
| 1704 |
<div class="compact-heatmap-right">
|
| 1705 |
<div class="compact-persistence-analysis" id="compact-persistenceAnalysis">
|
| 1706 |
-
<h5>
|
| 1707 |
<div class="compact-persistence-indicators">
|
| 1708 |
<div class="compact-indicator">
|
| 1709 |
<span class="compact-indicator-dot" style="background:#FF6B6B;"></span>
|
|
@@ -2860,12 +2860,24 @@ function drawRadar() {
|
|
| 2860 |
|
| 2861 |
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
| 2862 |
|
| 2863 |
-
// Dessiner
|
| 2864 |
for (let i = 1; i <= 5; i++) {
|
| 2865 |
ctx.beginPath();
|
| 2866 |
ctx.arc(cx, cy, (radius / 5) * i, 0, 2 * Math.PI);
|
| 2867 |
ctx.strokeStyle = "#e0e0e0";
|
| 2868 |
ctx.stroke();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2869 |
}
|
| 2870 |
|
| 2871 |
// Dessiner les axes
|
|
@@ -2912,17 +2924,39 @@ function drawRadar() {
|
|
| 2912 |
ctx.lineWidth = 2;
|
| 2913 |
ctx.stroke();
|
| 2914 |
|
| 2915 |
-
// Dessiner les points
|
| 2916 |
radarMetrics.forEach((m, i) => {
|
| 2917 |
const angle = (2 * Math.PI * i) / n - Math.PI / 2;
|
| 2918 |
const r = radius * (m.value / 100);
|
| 2919 |
const x = cx + r * Math.cos(angle);
|
| 2920 |
const y = cy + r * Math.sin(angle);
|
| 2921 |
|
|
|
|
| 2922 |
ctx.beginPath();
|
| 2923 |
ctx.arc(x, y, 4, 0, 2 * Math.PI);
|
| 2924 |
ctx.fillStyle = "#1976D2";
|
| 2925 |
ctx.fill();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2926 |
});
|
| 2927 |
}
|
| 2928 |
|
|
|
|
| 1650 |
|
| 1651 |
<!-- HEATMAP COMPACTE -->
|
| 1652 |
<div class="compact-heatmap-and-indicators">
|
| 1653 |
+
<h3>🔥 Heatmap d'activité - Analyse de Persévérance</h3>
|
| 1654 |
|
| 1655 |
<div class="compact-heatmap-container">
|
| 1656 |
<!-- Colonne gauche : Heatmap et contrôles -->
|
|
|
|
| 1703 |
<!-- Colonne droite : Indicateurs de persévérance -->
|
| 1704 |
<div class="compact-heatmap-right">
|
| 1705 |
<div class="compact-persistence-analysis" id="compact-persistenceAnalysis">
|
| 1706 |
+
<h5>🎯 Indicateurs de Persévérance</h5>
|
| 1707 |
<div class="compact-persistence-indicators">
|
| 1708 |
<div class="compact-indicator">
|
| 1709 |
<span class="compact-indicator-dot" style="background:#FF6B6B;"></span>
|
|
|
|
| 2860 |
|
| 2861 |
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
| 2862 |
|
| 2863 |
+
// Dessiner les cercles concentriques avec pourcentages
|
| 2864 |
for (let i = 1; i <= 5; i++) {
|
| 2865 |
ctx.beginPath();
|
| 2866 |
ctx.arc(cx, cy, (radius / 5) * i, 0, 2 * Math.PI);
|
| 2867 |
ctx.strokeStyle = "#e0e0e0";
|
| 2868 |
ctx.stroke();
|
| 2869 |
+
|
| 2870 |
+
// Ajouter les pourcentages sur les cercles
|
| 2871 |
+
if (i % 2 === 0 || i === 1 || i === 5) { // Afficher 0%, 20%, 40%, 60%, 80%, 100%
|
| 2872 |
+
const percent = (i * 20) + "%";
|
| 2873 |
+
ctx.save();
|
| 2874 |
+
ctx.font = "10px Arial";
|
| 2875 |
+
ctx.fillStyle = "#666";
|
| 2876 |
+
ctx.textAlign = "center";
|
| 2877 |
+
ctx.textBaseline = "middle";
|
| 2878 |
+
ctx.fillText(percent, cx, cy - (radius / 5) * i - 5);
|
| 2879 |
+
ctx.restore();
|
| 2880 |
+
}
|
| 2881 |
}
|
| 2882 |
|
| 2883 |
// Dessiner les axes
|
|
|
|
| 2924 |
ctx.lineWidth = 2;
|
| 2925 |
ctx.stroke();
|
| 2926 |
|
| 2927 |
+
// Dessiner les points avec les pourcentages
|
| 2928 |
radarMetrics.forEach((m, i) => {
|
| 2929 |
const angle = (2 * Math.PI * i) / n - Math.PI / 2;
|
| 2930 |
const r = radius * (m.value / 100);
|
| 2931 |
const x = cx + r * Math.cos(angle);
|
| 2932 |
const y = cy + r * Math.sin(angle);
|
| 2933 |
|
| 2934 |
+
// Dessiner le point
|
| 2935 |
ctx.beginPath();
|
| 2936 |
ctx.arc(x, y, 4, 0, 2 * Math.PI);
|
| 2937 |
ctx.fillStyle = "#1976D2";
|
| 2938 |
ctx.fill();
|
| 2939 |
+
|
| 2940 |
+
// Ajouter le pourcentage à côté du point
|
| 2941 |
+
ctx.save();
|
| 2942 |
+
ctx.font = "bold 11px Arial";
|
| 2943 |
+
ctx.fillStyle = "#1976D2";
|
| 2944 |
+
ctx.textAlign = "center";
|
| 2945 |
+
ctx.textBaseline = "middle";
|
| 2946 |
+
|
| 2947 |
+
// Positionner le pourcentage légèrement décalé
|
| 2948 |
+
const labelOffset = 15;
|
| 2949 |
+
const labelX = x + labelOffset * Math.cos(angle);
|
| 2950 |
+
const labelY = y + labelOffset * Math.sin(angle);
|
| 2951 |
+
|
| 2952 |
+
// Ajouter un fond pour une meilleure lisibilité
|
| 2953 |
+
ctx.fillStyle = "rgba(255, 255, 255, 0.8)";
|
| 2954 |
+
ctx.fillRect(labelX - 15, labelY - 8, 30, 16);
|
| 2955 |
+
|
| 2956 |
+
// Écrire le pourcentage
|
| 2957 |
+
ctx.fillStyle = "#1976D2";
|
| 2958 |
+
ctx.fillText(m.value + "%", labelX, labelY);
|
| 2959 |
+
ctx.restore();
|
| 2960 |
});
|
| 2961 |
}
|
| 2962 |
|