const password=sessionStorage.getItem("teacherPassword")||"";let results=[]; const $=id=>document.getElementById(id); function formatAnswer(value){if(Array.isArray(value))return value.length?value.join(", "):"Нет ответа";return value||"Нет ответа";} function formatDate(value){ if(!value)return "Дата неизвестна"; const normalized=String(value).replace(/T(\d{2})-(\d{2})-(\d{2})$/,"T$1:$2:$3"); const date=new Date(normalized); return Number.isNaN(date.getTime())?value:date.toLocaleString("ru-RU"); } function escapeHtml(value){return String(value??"").replace(/[&<>"']/g,char=>({"&":"&","<":"<",">":">",'"':""","'":"'"}[char]));} function render(){ const student=$("student-filter").value.trim().toLowerCase(),topic=$("topic-filter").value; const filtered=results.filter(r=>(r.student||"").toLowerCase().includes(student)).map(r=>({...r,incorrect:r.incorrect.filter(q=>!topic||q.topic===topic)})).filter(r=>r.incorrect.length); $("summary").textContent=`Работ с ошибками: ${filtered.length} · Ошибок: ${filtered.reduce((sum,r)=>sum+r.incorrect.length,0)}`;$("results").innerHTML=""; if(!filtered.length){$("results").innerHTML='
По выбранным фильтрам неправильных ответов нет.
';return;} filtered.forEach(result=>{const card=document.createElement("details");card.className="card result-card";card.innerHTML=`${escapeHtml(result.student)}
${escapeHtml(formatDate(result.end_time))} · ${result.correct}/${result.total} правильных
${result.incorrect.length} ошибок · ${result.correct_percent}%
`;result.incorrect.forEach(q=>{const block=document.createElement("div");block.className="incorrect";block.innerHTML=`${escapeHtml(q.question)}

${escapeHtml(q.topic||"Без темы")}

Ответ студента
${escapeHtml(formatAnswer(q.student_answer))}
Правильный ответ
${escapeHtml(formatAnswer(q.correct_answer))}
`;card.appendChild(block);});$("results").appendChild(card);}); } async function loadResults(){if(!password){window.location.replace("index.html");return;}$("message").textContent="Загрузка...";const response=await fetch(`/teacher/results?password=${encodeURIComponent(password||"")}`),data=await response.json();if(!response.ok){sessionStorage.removeItem("teacherPassword");window.location.replace("index.html");return;}results=data;const topics=[...new Set(results.flatMap(r=>r.incorrect.map(q=>q.topic)).filter(Boolean))].sort(),all=document.createElement("option");all.value="";all.textContent="Все темы";$("topic-filter").replaceChildren(all,...topics.map(t=>{const option=document.createElement("option");option.value=t;option.textContent=t;return option;}));$("message").textContent="";$("message").className="message";render();} $("student-filter").oninput=render;$("topic-filter").onchange=render;$("reload").onclick=loadResults;loadResults();