07a0814395acd56cb31d966882e1468efb939c67
1 let socket
= null; //monitor answers in real time
6 password: "", //from password field
7 assessment: { }, //obtained after authentication
8 // Stage 0: unauthenticated (password),
9 // 1: authenticated (password hash validated), start monitoring
13 showSolution: true, //TODO: allow to hide, to let teachers search too
17 students: [ ], //to know their names
18 display: "assessment", //or student's answers
21 // TODO: redundant code, next 4 funcs already exist in course.js
22 toggleDisplay: function(area
) {
23 if (this.display
== area
)
28 studentList: function(group
) {
30 .filter( s
=> { return group
==0 || s
.group
== group
; })
31 .map( s
=> { return Object
.assign({}, s
); }) //not altering initial array
33 let res
= a
.name
.localeCompare(b
.name
);
35 res
+= a
.forename
.localeCompare(b
.forename
);
39 groupList: function() {
41 this.students
.forEach( s
=> {
45 return _
.range(1,maxGrp
+1);
47 groupId: function(group
, prefix
) {
48 return (prefix
|| "") + "group" + group
;
50 getColor: function(number
, qIdx
) {
51 // For the moment, green if correct and red if wrong; grey if unanswered yet
52 // TODO: in-between color for partially right (especially for multi-questions)
53 const paperIdx
= this.assessment
.papers
.findIndex( item
=> { return item
.number
== number
; });
55 return "grey"; //student didn't start yet
56 const inputIdx
= this.assessment
.papers
[paperIdx
].inputs
.findIndex( item
=> {
57 const qNum
= parseInt(item
.index
.split(".")[0]); //indexes separated by dots
62 if (_
.isEqual(this.assessment
.papers
[paperIdx
].inputs
[inputIdx
].input
, this.assessment
.questions
[qIdx
].answer
))
66 seeDetails: function(number
, i
) {
67 // UNIMPLEMENTED: see question details, with current answer(s)
70 startMonitoring: function() {
71 $.ajax("/start/monitoring", {
74 password: Sha1
.Compute(this.password
),
82 return alert(s
.errmsg
);
83 this.assessment
= s
.assessment
;
84 this.answers
.inputs
= s
.assessment
.questions
.map( q
=> {
85 let input
= _(q
.options
.length
).times( _
.constant(false) );
86 q
.answer
.forEach( idx
=> { input
[idx
] = true; });
89 this.students
= s
.students
;
91 socket
= io
.connect("/", {
92 query: "aid=" + this.assessment
._id
+ "&secret=" + s
.secret
94 socket
.on(message
.newAnswer
, m
=> {
95 let paperIdx
= this.assessment
.papers
.findIndex( item
=> {
96 return item
.number
== m
.number
;
101 paperIdx
= this.assessment
.papers
.length
;
102 this.assessment
.papers
.push({
104 inputs: [ ], //other fields irrelevant here
107 // TODO: notations not coherent (input / answer... when, which ?)
108 this.assessment
.papers
[paperIdx
].inputs
.push(m
.answer
); //input+index
113 endMonitoring: function() {
114 // In the end, send answers to students
117 { answers: this.assessment
.questions
.map( q
=> { return q
.answer
; }) }