Upload templates/index.html with huggingface_hub
Browse files- templates/index.html +74 -11
templates/index.html
CHANGED
|
@@ -1667,7 +1667,7 @@ textarea:focus {
|
|
| 1667 |
</div>
|
| 1668 |
|
| 1669 |
<!-- Canvas pour le heatmap -->
|
| 1670 |
-
<canvas id="heatmap" width="800" height="
|
| 1671 |
|
| 1672 |
<!-- Légende des niveaux d'activité compacte -->
|
| 1673 |
<div class="compact-enriched-legend">
|
|
@@ -2777,9 +2777,10 @@ function drawCompactEnrichedHeatmap(scenario) {
|
|
| 2777 |
if (!canvas) return;
|
| 2778 |
|
| 2779 |
const ctx = canvas.getContext("2d");
|
| 2780 |
-
const cellSize =
|
| 2781 |
-
const padding =
|
| 2782 |
const days = ["L", "M", "M", "J", "V", "S", "D"];
|
|
|
|
| 2783 |
const weeks = 4;
|
| 2784 |
const totalDays = weeks * 7;
|
| 2785 |
|
|
@@ -2866,18 +2867,45 @@ function drawCompactEnrichedHeatmap(scenario) {
|
|
| 2866 |
pattern: "Schéma à analyser"
|
| 2867 |
};
|
| 2868 |
|
| 2869 |
-
ctx.font = "bold
|
| 2870 |
ctx.fillStyle = "#1976D2";
|
| 2871 |
ctx.textAlign = "center";
|
| 2872 |
-
ctx.fillText(`${scenarioInfo.emoji} ${scenarioInfo.title}`, canvas.width / 2,
|
| 2873 |
|
| 2874 |
-
ctx.font = "
|
| 2875 |
ctx.fillStyle = "#666";
|
| 2876 |
-
ctx.fillText(`${scenarioInfo.pattern}`, canvas.width / 2,
|
| 2877 |
|
| 2878 |
// Générer les données d'activité selon le scénario
|
| 2879 |
const activityData = generateCompactPersistenceData(scenario.id, totalDays);
|
| 2880 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2881 |
// Dessiner la heatmap
|
| 2882 |
const colors = ["#EBEDF0", "#C6E48B", "#7BC96F", "#239A3B", "#196127"];
|
| 2883 |
|
|
@@ -2885,8 +2913,8 @@ function drawCompactEnrichedHeatmap(scenario) {
|
|
| 2885 |
const week = Math.floor(day / 7);
|
| 2886 |
const weekday = day % 7;
|
| 2887 |
|
| 2888 |
-
const x =
|
| 2889 |
-
const y =
|
| 2890 |
|
| 2891 |
const intensity = activityData[day];
|
| 2892 |
|
|
@@ -2894,17 +2922,52 @@ function drawCompactEnrichedHeatmap(scenario) {
|
|
| 2894 |
ctx.fillStyle = colors[intensity];
|
| 2895 |
ctx.fillRect(x, y, cellSize, cellSize);
|
| 2896 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2897 |
// Bordure avec indication des échéances (vendredi = jour important)
|
| 2898 |
if (weekday === 4) { // Vendredi
|
| 2899 |
ctx.strokeStyle = "#FF6B6B";
|
| 2900 |
-
ctx.lineWidth =
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2901 |
} else {
|
| 2902 |
ctx.strokeStyle = intensity > 0 ? "#239A3B" : "#eee";
|
| 2903 |
ctx.lineWidth = 0.5;
|
|
|
|
| 2904 |
}
|
| 2905 |
-
ctx.strokeRect(x, y, cellSize, cellSize);
|
| 2906 |
}
|
| 2907 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2908 |
// Analyser et afficher les métriques de persévérance compactes
|
| 2909 |
analyzeCompactPersistenceMetrics(activityData, scenario.id);
|
| 2910 |
}
|
|
|
|
| 1667 |
</div>
|
| 1668 |
|
| 1669 |
<!-- Canvas pour le heatmap -->
|
| 1670 |
+
<canvas id="heatmap" width="800" height="300" style="max-width: 100%; height: auto;"></canvas>
|
| 1671 |
|
| 1672 |
<!-- Légende des niveaux d'activité compacte -->
|
| 1673 |
<div class="compact-enriched-legend">
|
|
|
|
| 2777 |
if (!canvas) return;
|
| 2778 |
|
| 2779 |
const ctx = canvas.getContext("2d");
|
| 2780 |
+
const cellSize = 18;
|
| 2781 |
+
const padding = 2;
|
| 2782 |
const days = ["L", "M", "M", "J", "V", "S", "D"];
|
| 2783 |
+
const dayNames = ["Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"];
|
| 2784 |
const weeks = 4;
|
| 2785 |
const totalDays = weeks * 7;
|
| 2786 |
|
|
|
|
| 2867 |
pattern: "Schéma à analyser"
|
| 2868 |
};
|
| 2869 |
|
| 2870 |
+
ctx.font = "bold 16px Arial";
|
| 2871 |
ctx.fillStyle = "#1976D2";
|
| 2872 |
ctx.textAlign = "center";
|
| 2873 |
+
ctx.fillText(`${scenarioInfo.emoji} ${scenarioInfo.title}`, canvas.width / 2, 25);
|
| 2874 |
|
| 2875 |
+
ctx.font = "14px Arial";
|
| 2876 |
ctx.fillStyle = "#666";
|
| 2877 |
+
ctx.fillText(`${scenarioInfo.pattern}`, canvas.width / 2, 45);
|
| 2878 |
|
| 2879 |
// Générer les données d'activité selon le scénario
|
| 2880 |
const activityData = generateCompactPersistenceData(scenario.id, totalDays);
|
| 2881 |
|
| 2882 |
+
// Labels des semaines
|
| 2883 |
+
ctx.font = "bold 12px Arial";
|
| 2884 |
+
ctx.fillStyle = "#333";
|
| 2885 |
+
ctx.textAlign = "center";
|
| 2886 |
+
ctx.textBaseline = "middle";
|
| 2887 |
+
|
| 2888 |
+
for (let week = 0; week < weeks; week++) {
|
| 2889 |
+
const x = 60 + week * (cellSize * 7 + padding * 7) + (cellSize * 7) / 2;
|
| 2890 |
+
const y = 90;
|
| 2891 |
+
ctx.fillText(`Semaine ${week + 1}`, x, y);
|
| 2892 |
+
}
|
| 2893 |
+
|
| 2894 |
+
// Labels des jours
|
| 2895 |
+
ctx.font = "bold 11px Arial";
|
| 2896 |
+
ctx.fillStyle = "#555";
|
| 2897 |
+
|
| 2898 |
+
for (let day = 0; day < 7; day++) {
|
| 2899 |
+
const y = 120 + day * (cellSize + padding) + cellSize / 2;
|
| 2900 |
+
ctx.textAlign = "right";
|
| 2901 |
+
ctx.fillText(`${days[day]}`, 55, y);
|
| 2902 |
+
|
| 2903 |
+
// Version complète au survol (tooltip serait mieux)
|
| 2904 |
+
ctx.font = "9px Arial";
|
| 2905 |
+
ctx.fillStyle = "#888";
|
| 2906 |
+
ctx.fillText(`(${dayNames[day]})`, 55, y + 10);
|
| 2907 |
+
}
|
| 2908 |
+
|
| 2909 |
// Dessiner la heatmap
|
| 2910 |
const colors = ["#EBEDF0", "#C6E48B", "#7BC96F", "#239A3B", "#196127"];
|
| 2911 |
|
|
|
|
| 2913 |
const week = Math.floor(day / 7);
|
| 2914 |
const weekday = day % 7;
|
| 2915 |
|
| 2916 |
+
const x = 60 + week * (cellSize * 7 + padding * 7) + weekday * (cellSize + padding);
|
| 2917 |
+
const y = 110 + weekday * (cellSize + padding);
|
| 2918 |
|
| 2919 |
const intensity = activityData[day];
|
| 2920 |
|
|
|
|
| 2922 |
ctx.fillStyle = colors[intensity];
|
| 2923 |
ctx.fillRect(x, y, cellSize, cellSize);
|
| 2924 |
|
| 2925 |
+
// Ajouter un indicateur de caractère dans la cellule
|
| 2926 |
+
ctx.font = "bold 10px Arial";
|
| 2927 |
+
ctx.fillStyle = intensity < 2 ? "#666" : "white";
|
| 2928 |
+
ctx.textAlign = "center";
|
| 2929 |
+
ctx.textBaseline = "middle";
|
| 2930 |
+
|
| 2931 |
+
// Caractère selon l'intensité
|
| 2932 |
+
let char = "";
|
| 2933 |
+
switch(intensity) {
|
| 2934 |
+
case 0: char = "∅"; break; // Aucune
|
| 2935 |
+
case 1: char = "·"; break; // Faible
|
| 2936 |
+
case 2: char = "○"; break; // Modérée
|
| 2937 |
+
case 3: char = "●"; break; // Élevée
|
| 2938 |
+
case 4: char = "■"; break; // Intense
|
| 2939 |
+
}
|
| 2940 |
+
|
| 2941 |
+
// Dessiner le caractère au centre de la cellule
|
| 2942 |
+
ctx.fillText(char, x + cellSize/2, y + cellSize/2);
|
| 2943 |
+
|
| 2944 |
// Bordure avec indication des échéances (vendredi = jour important)
|
| 2945 |
if (weekday === 4) { // Vendredi
|
| 2946 |
ctx.strokeStyle = "#FF6B6B";
|
| 2947 |
+
ctx.lineWidth = 2;
|
| 2948 |
+
ctx.strokeRect(x, y, cellSize, cellSize);
|
| 2949 |
+
|
| 2950 |
+
// Indicateur spécial pour vendredi
|
| 2951 |
+
ctx.fillStyle = "#FF6B6B";
|
| 2952 |
+
ctx.font = "bold 8px Arial";
|
| 2953 |
+
ctx.fillText("V", x + cellSize - 6, y + 8);
|
| 2954 |
} else {
|
| 2955 |
ctx.strokeStyle = intensity > 0 ? "#239A3B" : "#eee";
|
| 2956 |
ctx.lineWidth = 0.5;
|
| 2957 |
+
ctx.strokeRect(x, y, cellSize, cellSize);
|
| 2958 |
}
|
|
|
|
| 2959 |
}
|
| 2960 |
|
| 2961 |
+
// Légende des caractères en bas
|
| 2962 |
+
ctx.font = "10px Arial";
|
| 2963 |
+
ctx.fillStyle = "#666";
|
| 2964 |
+
ctx.textAlign = "center";
|
| 2965 |
+
|
| 2966 |
+
const legendChars = ["∅ Aucune", "· Faible", "○ Modérée", "● Élevée", "■ Intense"];
|
| 2967 |
+
const legendX = canvas.width / 2;
|
| 2968 |
+
const legendY = canvas.height - 15;
|
| 2969 |
+
|
| 2970 |
+
|
| 2971 |
// Analyser et afficher les métriques de persévérance compactes
|
| 2972 |
analyzeCompactPersistenceMetrics(activityData, scenario.id);
|
| 2973 |
}
|