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

Commit 9d26906

Browse files
committed
Merge branch 'bookserver' of github.com:RunestoneInteractive/RunestoneComponents into bookserver
2 parents bc803e0 + b200d23 commit 9d26906

2 files changed

Lines changed: 39 additions & 25 deletions

File tree

runestone/common/js/runestonebase.js

Lines changed: 38 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.replace("-toggleSelectedQuestion", "");
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,32 @@ export default class RunestoneBase {
129119
return post_return;
130120
}
131121

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

runestone/common/project_template/_templates/plugin_layouts/sphinx_bootstrap/layout.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@
243243
eBookConfig.isInstructor = {{ is_instructor }};
244244
eBookConfig.username = '{{ user_id}}';
245245
eBookConfig.readings = {{ readings}};
246-
eBookConfig.activities = {{ activity_info }}
246+
eBookConfig.activities = {{ activity_info|safe }}
247247
eBookConfig.downloadsEnabled = {{downloads_enabled}};
248248
eBookConfig.allow_pairs = {{allow_pairs}}
249249
eBookConfig.enableCompareMe = {{enable_compare_me}};

0 commit comments

Comments
 (0)