ReflAgent-Eval / static /script.txt
OUAREDAEK's picture
Upload static/script.txt with huggingface_hub
4e29486 verified
Raw
History Blame Contribute Delete
6.07 kB
console.log("✅ script.js chargé");
// =====================================================
// Données apprenant (exemple)
// =====================================================
const learnerData = {
intention: "Améliorer mon écriture académique",
difficulty: "Je me sens parfois bloqué pour structurer mes idées",
profile: { engagement: "moyen", risk: "modéré" },
domains: { discours: 65, texte: 52, phrase: 78, mot: 82 },
activity: { errorsRate: 35 }
};
// =====================================================
// Radar professionnel – Indicateurs décideur
// =====================================================
const radarMetrics = [
{ label: "Démarrage des activités", value: 85 },
{ label: "Éléments de connaissance validés", value: 72 },
{ label: "Niveau moyen de compétence", value: 68 },
{ label: "Taux d’erreur (inversé)", value: 65 },
{ label: "Achèvement des activités", value: 74 },
{ label: "Interactions avec les ressources", value: 80 },
{ label: "Score PIX (performance)", value: 70 },
{ label: "Domaines de compétence", value: 78 }
];
// =====================================================
// Trust metrics
// =====================================================
const trustMetrics = { RA: 0, EA: 0, RE: 0, MCS: 0, MS: 0 };
const trustWeights = { RA: 0.30, EA: 0.20, RE: 0.20, MCS: 0.10, MS: 0.20 };
// =====================================================
// Initialisation
// =====================================================
document.addEventListener("DOMContentLoaded", () => {
document.getElementById("intent").textContent = learnerData.intention;
document.getElementById("difficulty").textContent = learnerData.difficulty;
setBar("discours", learnerData.domains.discours);
setBar("texte", learnerData.domains.texte);
setBar("phrase", learnerData.domains.phrase);
setBar("mot", learnerData.domains.mot);
const riskValue = learnerData.profile.risk === "élevé" ? 80 :
learnerData.profile.risk === "modéré" ? 50 : 20;
setBar("risk", riskValue, true);
drawRadar();
generateEmpathicFeedback();
initTrustStars();
});
// =====================================================
// UI helpers
// =====================================================
function setBar(id, value, isRisk = false) {
const el = document.getElementById(id);
el.style.width = value + "%";
el.textContent = value + "%";
if (isRisk) el.style.background = value > 70 ? "#E53935" : value > 40 ? "#FB8C00" : "#43A047";
}
// =====================================================
// Radar professionnel
// =====================================================
function drawRadar() {
const canvas = document.getElementById("radar");
const ctx = canvas.getContext("2d");
const cx = canvas.width / 2, cy = canvas.height / 2;
const radius = 200, levels = 5, count = radarMetrics.length;
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.font = "12px Arial";
for (let l = 1; l <= levels; l++) {
ctx.beginPath();
ctx.arc(cx, cy, (radius / levels) * l, 0, 2 * Math.PI);
ctx.strokeStyle = "#e0e0e0";
ctx.stroke();
}
radarMetrics.forEach((m, i) => {
const angle = (2 * Math.PI / count) * i - Math.PI / 2;
ctx.beginPath();
ctx.moveTo(cx, cy);
ctx.lineTo(cx + radius * Math.cos(angle), cy + radius * Math.sin(angle));
ctx.strokeStyle = "#cfd8dc";
ctx.stroke();
ctx.fillText(m.label,
cx + (radius + 18) * Math.cos(angle) - 50,
cy + (radius + 18) * Math.sin(angle)
);
});
ctx.beginPath();
radarMetrics.forEach((m, i) => {
const angle = (2 * Math.PI / count) * i - Math.PI / 2;
const r = radius * (m.value / 100);
const x = cx + r * Math.cos(angle);
const y = cy + r * Math.sin(angle);
i === 0 ? ctx.moveTo(x, y) : ctx.lineTo(x, y);
});
ctx.closePath();
ctx.fillStyle = "rgba(25,118,210,0.25)";
ctx.strokeStyle = "#1976D2";
ctx.lineWidth = 2;
ctx.fill();
ctx.stroke();
}
// =====================================================
// Feedback empathique
// =====================================================
function generateEmpathicFeedback() {
let msg = "Il est normal de rencontrer des difficultés dans l’écriture académique. ";
if (learnerData.domains.texte < 60)
msg += "Les indicateurs montrent que la structuration du texte reste un défi important. ";
if (learnerData.activity.errorsRate > 30)
msg += "Un taux d’erreurs élevé peut provoquer frustration et doute, ce qui est compréhensible. ";
msg += "Vos compétences linguistiques constituent cependant une base solide. ";
msg += "En planifiant vos activités et en progressant étape par étape, vous pouvez renforcer votre confiance.";
document.getElementById("feedback").textContent = msg;
}
// =====================================================
// Trust metrics UI
// =====================================================
function initTrustStars() {
document.querySelectorAll(".stars").forEach(container => {
const metric = container.dataset.metric;
for (let i = 1; i <= 5; i++) {
const star = document.createElement("span");
star.textContent = "★";
star.classList.add("inactive");
star.onclick = () => {
trustMetrics[metric] = i;
[...container.children].forEach((s, idx) => s.classList.toggle("inactive", idx >= i));
updateTrustScore();
};
container.appendChild(star);
}
});
}
function updateTrustScore() {
let T = 0, max = 0;
for (const m in trustMetrics) {
T += trustMetrics[m] * trustWeights[m];
max += 5 * trustWeights[m];
}
const score = Math.round((T / max) * 100);
const bar = document.getElementById("trust-bar");
bar.style.width = score + "%";
bar.textContent = score + "%";
bar.style.background = score < 40 ? "#E53935" : score < 70 ? "#FB8C00" : "#43A047";
}