| 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 | }); |