Skip to content
This repository was archived by the owner on Jun 7, 2023. It is now read-only.

Commit edfafbf

Browse files
committed
Fix: counting toggle questions
1 parent a30b1c0 commit edfafbf

1 file changed

Lines changed: 37 additions & 24 deletions

File tree

runestone/common/js/runestonebase.js

Lines changed: 37 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -93,32 +93,22 @@ export default class RunestoneBase {
9393
eventInfo.percent = this.percent;
9494
}
9595
if (eBookConfig.useRunestoneServices && eBookConfig.logLevel > 0) {
96-
let request = new Request(`${eBookConfig.new_server_prefix}/logger/bookevent`, {
97-
method: "POST",
98-
headers: this.jsonHeaders,
99-
body: JSON.stringify(eventInfo),
100-
});
101-
try {
102-
let response = await fetch(request);
103-
if (!response.ok) {
104-
let detail = await response.json();
105-
console.error(detail);
106-
throw new Error(`Failed to save the log entry ${detail}`);
107-
} else {
108-
post_return = response.json();
109-
}
110-
} catch (e) {
111-
if (this.isTimed) {
112-
alert(
113-
`Error: Your action was not saved! The error was ${e}`
114-
);
115-
}
116-
console.log(`Error: ${e}`);
117-
}
96+
post_return = this.postLogMessage(eventInfo)
11897
}
11998
if (!this.isTimed || eBookConfig.debug) {
12099
console.log("logging event " + JSON.stringify(eventInfo));
121100
}
101+
// When selectquestions are part of an assignment especially toggle questions
102+
// we need to count using the selector_id of the select question.
103+
// We also need to log an event for that selector so that we will know
104+
// that interaction has taken place. This is **independent** of how the
105+
// autograder will ultimately grade the question!
106+
if (this.selector_id) {
107+
eventInfo.div_id = this.selector_id;
108+
eventInfo.event = "selectquestion";
109+
eventInfo.act = "interaction"
110+
this.postLogMessage(eventInfo);
111+
}
122112
if (
123113
typeof pageProgressTracker.updateProgress === "function" &&
124114
eventInfo.act != "edit" &&
@@ -129,8 +119,31 @@ export default class RunestoneBase {
129119
return post_return;
130120
}
131121

132-
// -`logRunEvent`
133-
//---------------
122+
async postLogMessage(eventInfo) {
123+
let request = new Request(`${eBookConfig.new_server_prefix}/logger/bookevent`, {
124+
method: "POST",
125+
headers: this.jsonHeaders,
126+
body: JSON.stringify(eventInfo),
127+
});
128+
try {
129+
let response = await fetch(request);
130+
if (!response.ok) {
131+
throw new Error("Failed to save the log entry");
132+
}
133+
post_return = response.json();
134+
} catch (e) {
135+
if (this.isTimed) {
136+
alert(`Error: Your action was not saved! The error was ${e}`);
137+
}
138+
console.log(`Error: ${e}`);
139+
}
140+
return post_return;
141+
}
142+
143+
// .. _logRunEvent:
144+
//
145+
// logRunEvent
146+
// -----------
134147
// This function sends the provided ``eventInfo`` to the `runlog endpoint`. When awaited, this function returns the data (decoded from JSON) the server sent back.
135148
async logRunEvent(eventInfo) {
136149
let post_promise = "done";

0 commit comments

Comments
 (0)