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

Commit 2678110

Browse files
committed
updates to select toggle syntax
1 parent b2a8b90 commit 2678110

2 files changed

Lines changed: 30 additions & 21 deletions

File tree

runestone/selectquestion/js/selectone.js

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ export default class SelectOne extends RunestoneBase {
3939
this.selector_id = $(opts.orig).first().attr("id");
4040
this.primaryOnly = $(opts.orig).data("primary");
4141
this.ABExperiment = $(opts.orig).data("ab");
42-
this.toggle = $(opts.orig).data("toggle");
4342
this.toggleOptions = $(opts.orig).data("toggleoptions");
43+
this.toggleLabels = $(opts.orig).data("togglelabels");
4444
opts.orig.id = this.selector_id;
4545
}
4646
/**
@@ -82,12 +82,12 @@ export default class SelectOne extends RunestoneBase {
8282
if (this.timedWrapper) {
8383
data.timedWrapper = this.timedWrapper;
8484
}
85-
if (this.toggle) {
86-
data.toggle = this.toggle;
87-
}
8885
if (this.toggleOptions) {
8986
data.toggleOptions = this.toggleOptions;
9087
}
88+
if (this.toggleLabels) {
89+
data.toggleLabels = this.toggleLabels;
90+
}
9191
let opts = this.origOpts;
9292
let selectorId = this.selector_id;
9393
console.log("getting question source");
@@ -125,12 +125,9 @@ export default class SelectOne extends RunestoneBase {
125125
self.containerDiv = res.question.containerDiv;
126126
self.realComponent.selectorId = selectorId;
127127
} else {
128-
if (data.toggle) {
129-
var toggleOptions = data.toggleOptions;
130-
var toggleLabels;
131-
if (toggleOptions.includes("labels{")) {
132-
toggleLabels = toggleOptions.slice(toggleOptions.indexOf("labels{") + 7, toggleOptions.indexOf("}"));
133-
toggleOptions = toggleOptions.replace(toggleLabels, "");
128+
if (data.toggleOptions) {
129+
var toggleLabels = data.toggleLabels.replace("togglelabels:", "").trim();
130+
if (toggleLabels) {
134131
toggleLabels = toggleLabels.split(",");
135132
for (var t = 0; t < toggleLabels.length; t++) {
136133
toggleLabels[t] = toggleLabels[t].trim();
@@ -213,7 +210,7 @@ export default class SelectOne extends RunestoneBase {
213210
" - " +
214211
toggleQuestions[i];
215212
}
216-
if ((i == 0) && (toggleOptions.includes("lock"))) {
213+
if ((i == 0) && (data.toggleOptions.includes("lock"))) {
217214
toggleUI += " (only this question will be graded)";
218215
}
219216
toggleUI += "</option>";
@@ -231,7 +228,7 @@ export default class SelectOne extends RunestoneBase {
231228
selector_id: selectorId,
232229
useRunestoneServices: true,
233230
});
234-
if (data.toggle) {
231+
if (data.toggleOptions) {
235232
$("#component-preview").hide();
236233
var toggleQuestionSelect = document.getElementById(
237234
selectorId + "-toggleQuestion"
@@ -257,7 +254,7 @@ export default class SelectOne extends RunestoneBase {
257254
async function () {
258255
await this.togglePreview(
259256
toggleQuestionSelect.parentElement.id,
260-
toggleOptions,
257+
data.toggleOptions,
261258
toggleQuestionTypes
262259
);
263260
}.bind(this)
@@ -289,7 +286,7 @@ export default class SelectOne extends RunestoneBase {
289286
toggleQuestionSelect.options[toggleQuestionSelect.selectedIndex]
290287
.value;
291288
var htmlsrc = await this.getToggleSrc(selectedQuestion);
292-
let res = renderRunestoneComponent(htmlsrc, "toggle-preview", {
289+
renderRunestoneComponent(htmlsrc, "toggle-preview", {
293290
selector_id: "toggle-preview",
294291
useRunestoneServices: true,
295292
});
@@ -346,7 +343,7 @@ export default class SelectOne extends RunestoneBase {
346343
var selectorId = parentID + "-toggleSelectedQuestion";
347344
var toggleQuestionSelect = document.getElementById(parentID).getElementsByTagName("select")[0];
348345
document.getElementById(selectorId).innerHTML = ""; // need to check whether this is even necessary
349-
let res = renderRunestoneComponent(htmlsrc, selectorId, {
346+
renderRunestoneComponent(htmlsrc, selectorId, {
350347
selector_id: selectorId,
351348
useRunestoneServices: true,
352349
});
@@ -357,7 +354,7 @@ export default class SelectOne extends RunestoneBase {
357354
selectedQuestion,
358355
{}
359356
);
360-
let response = await fetch(request);
357+
await fetch(request);
361358
$("#toggle-preview").html("");
362359
$("#" + parentID).data("toggle_current", selectedQuestion);
363360
$("#" + parentID).data("toggle_current_type", toggleQuestionTypes[toggleQuestionSelect.selectedIndex]);

runestone/selectquestion/selectone.py

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848

4949
TEMPLATE = """
5050
<div class="runestone alert alert-warning sqcontainer">
51-
<div data-component="selectquestion" id={component_id} {selector} {points} {proficiency} {min_difficulty} {max_difficulty} {autogradable} {not_seen_ever} {primary} {AB} {toggle} {toggle_options}>
51+
<div data-component="selectquestion" id={component_id} {selector} {points} {proficiency} {min_difficulty} {max_difficulty} {autogradable} {not_seen_ever} {primary} {AB} {toggle_options} {toggle_labels}>
5252
<p>Loading ...</p>
5353
</div>
5454
</div>
@@ -72,6 +72,7 @@ class SelectQuestion(RunestoneIdDirective):
7272
:max_difficulty: maximum difficulty level
7373
:ab: experiment_name
7474
:toggle: allow student to choose which question to answer from the given list, with first question in fromid list being rendered first
75+
:togglelabels: relabel each question in the fromid list according to input here; blank will revert to a default label
7576
7677
Difficulty is measured in one of two ways. For things like multiple choice and
7778
fill in the blank, we can use the % of students that get the answer correct on
@@ -95,6 +96,7 @@ class SelectQuestion(RunestoneIdDirective):
9596
"primary": directives.flag,
9697
"ab": directives.unchanged,
9798
"toggle": directives.unchanged,
99+
"togglelabels": directives.unchanged,
98100
}
99101
)
100102

@@ -182,14 +184,24 @@ def run(self):
182184
else:
183185
self.options["AB"] = ""
184186

185-
if "toggle" in self.options:
187+
if ("toggle" in self.options) or ("togglelabels" in self.options):
186188
self.options[
187189
"toggle_options"
188-
] = f"data-toggleoptions=\"{self.options['toggle']}\""
189-
self.options["toggle"] = "data-toggle=true"
190+
] = "data-toggleoptions=\"toggle\""
191+
self.options[
192+
"toggle_labels"
193+
] = "data-togglelabels=\"togglelabels:\""
194+
if "toggle" in self.options:
195+
self.options[
196+
"toggle_options"
197+
] = "data-toggleoptions=\"toggle, " + f"{self.options['toggle']}" + "\""
198+
if "togglelabels" in self.options:
199+
self.options[
200+
"toggle_labels"
201+
] = "data-togglelabels=\"togglelabels: " + f"{self.options['togglelabels']}" + "\""
190202
else:
191203
self.options["toggle_options"] = ""
192-
self.options["toggle"] = ""
204+
self.options["toggle_labels"] = ""
193205

194206
maybeAddToAssignment(self)
195207

0 commit comments

Comments
 (0)