OUAREDAEK commited on
Commit
b33e03f
·
verified ·
1 Parent(s): 2120c1d

Upload static/script.txt with huggingface_hub

Browse files
Files changed (1) hide show
  1. static/script.txt +167 -0
static/script.txt ADDED
@@ -0,0 +1,167 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ console.log("✅ script.js chargé");
2
+
3
+ // =====================================================
4
+ // Données apprenant (exemple)
5
+ // =====================================================
6
+ const learnerData = {
7
+ intention: "Améliorer mon écriture académique",
8
+ difficulty: "Je me sens parfois bloqué pour structurer mes idées",
9
+
10
+ profile: { engagement: "moyen", risk: "modéré" },
11
+
12
+ domains: { discours: 65, texte: 52, phrase: 78, mot: 82 },
13
+
14
+ activity: { errorsRate: 35 }
15
+ };
16
+
17
+ // =====================================================
18
+ // Radar professionnel – Indicateurs décideur
19
+ // =====================================================
20
+ const radarMetrics = [
21
+ { label: "Démarrage des activités", value: 85 },
22
+ { label: "Éléments de connaissance validés", value: 72 },
23
+ { label: "Niveau moyen de compétence", value: 68 },
24
+ { label: "Taux d’erreur (inversé)", value: 65 },
25
+ { label: "Achèvement des activités", value: 74 },
26
+ { label: "Interactions avec les ressources", value: 80 },
27
+ { label: "Score PIX (performance)", value: 70 },
28
+ { label: "Domaines de compétence", value: 78 }
29
+ ];
30
+
31
+ // =====================================================
32
+ // Trust metrics
33
+ // =====================================================
34
+ const trustMetrics = { RA: 0, EA: 0, RE: 0, MCS: 0, MS: 0 };
35
+ const trustWeights = { RA: 0.30, EA: 0.20, RE: 0.20, MCS: 0.10, MS: 0.20 };
36
+
37
+ // =====================================================
38
+ // Initialisation
39
+ // =====================================================
40
+ document.addEventListener("DOMContentLoaded", () => {
41
+
42
+ document.getElementById("intent").textContent = learnerData.intention;
43
+ document.getElementById("difficulty").textContent = learnerData.difficulty;
44
+
45
+ setBar("discours", learnerData.domains.discours);
46
+ setBar("texte", learnerData.domains.texte);
47
+ setBar("phrase", learnerData.domains.phrase);
48
+ setBar("mot", learnerData.domains.mot);
49
+
50
+ const riskValue = learnerData.profile.risk === "élevé" ? 80 :
51
+ learnerData.profile.risk === "modéré" ? 50 : 20;
52
+ setBar("risk", riskValue, true);
53
+
54
+ drawRadar();
55
+ generateEmpathicFeedback();
56
+ initTrustStars();
57
+ });
58
+
59
+ // =====================================================
60
+ // UI helpers
61
+ // =====================================================
62
+ function setBar(id, value, isRisk = false) {
63
+ const el = document.getElementById(id);
64
+ el.style.width = value + "%";
65
+ el.textContent = value + "%";
66
+ if (isRisk) el.style.background = value > 70 ? "#E53935" : value > 40 ? "#FB8C00" : "#43A047";
67
+ }
68
+
69
+ // =====================================================
70
+ // Radar professionnel
71
+ // =====================================================
72
+ function drawRadar() {
73
+ const canvas = document.getElementById("radar");
74
+ const ctx = canvas.getContext("2d");
75
+ const cx = canvas.width / 2, cy = canvas.height / 2;
76
+ const radius = 200, levels = 5, count = radarMetrics.length;
77
+
78
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
79
+ ctx.font = "12px Arial";
80
+
81
+ for (let l = 1; l <= levels; l++) {
82
+ ctx.beginPath();
83
+ ctx.arc(cx, cy, (radius / levels) * l, 0, 2 * Math.PI);
84
+ ctx.strokeStyle = "#e0e0e0";
85
+ ctx.stroke();
86
+ }
87
+
88
+ radarMetrics.forEach((m, i) => {
89
+ const angle = (2 * Math.PI / count) * i - Math.PI / 2;
90
+ ctx.beginPath();
91
+ ctx.moveTo(cx, cy);
92
+ ctx.lineTo(cx + radius * Math.cos(angle), cy + radius * Math.sin(angle));
93
+ ctx.strokeStyle = "#cfd8dc";
94
+ ctx.stroke();
95
+
96
+ ctx.fillText(m.label,
97
+ cx + (radius + 18) * Math.cos(angle) - 50,
98
+ cy + (radius + 18) * Math.sin(angle)
99
+ );
100
+ });
101
+
102
+ ctx.beginPath();
103
+ radarMetrics.forEach((m, i) => {
104
+ const angle = (2 * Math.PI / count) * i - Math.PI / 2;
105
+ const r = radius * (m.value / 100);
106
+ const x = cx + r * Math.cos(angle);
107
+ const y = cy + r * Math.sin(angle);
108
+ i === 0 ? ctx.moveTo(x, y) : ctx.lineTo(x, y);
109
+ });
110
+ ctx.closePath();
111
+ ctx.fillStyle = "rgba(25,118,210,0.25)";
112
+ ctx.strokeStyle = "#1976D2";
113
+ ctx.lineWidth = 2;
114
+ ctx.fill();
115
+ ctx.stroke();
116
+ }
117
+
118
+ // =====================================================
119
+ // Feedback empathique
120
+ // =====================================================
121
+ function generateEmpathicFeedback() {
122
+ let msg = "Il est normal de rencontrer des difficultés dans l’écriture académique. ";
123
+
124
+ if (learnerData.domains.texte < 60)
125
+ msg += "Les indicateurs montrent que la structuration du texte reste un défi important. ";
126
+
127
+ if (learnerData.activity.errorsRate > 30)
128
+ msg += "Un taux d’erreurs élevé peut provoquer frustration et doute, ce qui est compréhensible. ";
129
+
130
+ msg += "Vos compétences linguistiques constituent cependant une base solide. ";
131
+ msg += "En planifiant vos activités et en progressant étape par étape, vous pouvez renforcer votre confiance.";
132
+
133
+ document.getElementById("feedback").textContent = msg;
134
+ }
135
+
136
+ // =====================================================
137
+ // Trust metrics UI
138
+ // =====================================================
139
+ function initTrustStars() {
140
+ document.querySelectorAll(".stars").forEach(container => {
141
+ const metric = container.dataset.metric;
142
+ for (let i = 1; i <= 5; i++) {
143
+ const star = document.createElement("span");
144
+ star.textContent = "★";
145
+ star.classList.add("inactive");
146
+ star.onclick = () => {
147
+ trustMetrics[metric] = i;
148
+ [...container.children].forEach((s, idx) => s.classList.toggle("inactive", idx >= i));
149
+ updateTrustScore();
150
+ };
151
+ container.appendChild(star);
152
+ }
153
+ });
154
+ }
155
+
156
+ function updateTrustScore() {
157
+ let T = 0, max = 0;
158
+ for (const m in trustMetrics) {
159
+ T += trustMetrics[m] * trustWeights[m];
160
+ max += 5 * trustWeights[m];
161
+ }
162
+ const score = Math.round((T / max) * 100);
163
+ const bar = document.getElementById("trust-bar");
164
+ bar.style.width = score + "%";
165
+ bar.textContent = score + "%";
166
+ bar.style.background = score < 40 ? "#E53935" : score < 70 ? "#FB8C00" : "#43A047";
167
+ }