5d5f237c44db3fd38218dc81f32f24281a87b9da
[qomet.git] / public / javascripts / monitor.js
1 // TODO: onglets pour chaque groupe + section déroulante questionnaire (chargé avec réponses)
2 // NOM Prenom (par grp, puis alphabétique)
3 // réponse : vert si OK (+ choix), rouge si faux, gris si texte (clic pour voir)
4 // + temps total ?
5 // click sur en-tête de colonne : tri alphabétique, tri décroissant...
6 // Affiché si (hash du) mdp du cours est correctement entré
7 // Doit reprendre les données en base si refresh (sinon : sockets)
8
9 let socket = null; //monitor answers in real time
10
11 new Vue({
12 el: "#monitor",
13 data: {
14 password: "", //from password field
15 assessment: null, //obtained after authentication
16 // Stage 0: unauthenticated (password),
17 // 1: authenticated (password hash validated), start monitoring
18 stage: 0,
19 answers: {
20 displayAll: true,
21 showSolution: true, //TODO: allow to hide, to let teachers search too
22 inputs: [ ],
23 index : -1,
24 },
25 },
26 methods: {
27 // stage 0 --> 1
28 startMonitoring: function() {
29 $.ajax("/start/monitoring", {
30 method: "GET",
31 data: {
32 password: this.password,
33 aname: examName,
34 cname: courseName,
35 initials: initials,
36 },
37 dataType: "json",
38 success: s => {
39 if (!!s.errmsg)
40 return this.warning(s.errmsg);
41 this.assessment = JSON.parse(s.assessment);
42 this.stage = 1;
43 socket = io.connect("/", {
44 query: "aid=" + this.assessment._id + "&secret=" + s.secret
45 });
46 socket.on(message.newAnswer, m => {
47 let paperIdx = this.assessment.papers.findIndex( item => {
48 return item.number == m.number;
49 });
50 this.assessment.papers[paperIdx].inputs.push(m.input); //answer+index
51 });
52 },
53 });
54 },
55 },
56 });