groupId: function(group, prefix) {
return (prefix || "") + "group" + group;
},
+ togglePresence: function(s) {
+ s.present = !s.present;
+ },
+ allFinished: function() {
+ for (s of this.students)
+ {
+ if (!s.present)
+ continue;
+ const paperIdx = this.assessment.papers.findIndex( item => { return item.number == number; });
+ if (paperIdx === -1)
+ return false;
+ const paper = this.assessment.papers[paperIdx];
+ if (paper.inputs.length < this.assessment.questions.length)
+ return false;
+ }
+ return true;
+ },
getColor: function(number, qIdx) {
// For the moment, green if correct and red if wrong; grey if unanswered yet
// TODO: in-between color for partially right (especially for multi-questions)
return input;
});
this.students = s.students;
+ this.students.forEach( s => { s.present = true; }); //a priori...
this.stage = 1;
socket = io.connect("/", {
query: "aid=" + this.assessment._id + "&secret=" + s.secret
input#password(type="password" v-model="password" @keyup.enter="startMonitoring()")
button.waves-effect.waves-light.btn(@click="startMonitoring()") Send
#stage1(v-show="stage==1")
- button.waves-effect.waves-light.btn(@click="endMonitoring()") Send feedback
+ button.waves-effect.waves-light.btn(@click="endMonitoring()" :disabled="!allFinished()") Send feedback
h4.title(@click="toggleDisplay('answers')") Anwers
// TODO: aussi afficher stats, permettre tri par colonnes
.card(v-show="display=='answers'")
th(v-for="(q,i) in assessment.questions") Q.{{ (i+1) }}
tbody
tr.assessment(v-for="s in studentList(group)")
- td(:class="{blur:!!s.blur,resize:!!s.resize,disconnect:!!s.disco}") {{ s.name }}
+ td(:class="{blur:!!s.blur,resize:!!s.resize,disconnect:!!s.disco}" @click="togglePresence(s)") {{ s.name }}
td(v-for="(q,i) in assessment.questions" :style="{backgroundColor: getColor(s.number,i)}" @click="seeDetails(s.number,i)")
h4.title(@click="toggleDisplay('assessment')") Assessment
div(v-show="display=='assessment'")