new MultipleResponsePart(pathopt, question, parentPart, storeopt)
Multiple choice part - either pick one from a list, pick several from a list, or match choices with answers (2d grid, either pick one from each row or tick several from each row)
Types:
1_n_2
: pick one from a list. Represented as N answers, 1 choicem_n_2
: pick several from a list. Represented as N answers, 1 choicem_n_x
: match choices (rows) with answers (columns). Represented as N answers, X choices.
Parameters:
Name | Type | Attributes | Default | Description |
---|---|---|---|---|
path |
Numbas.parts.partpath |
<optional> |
'p0' | |
question |
Numbas.Question | |||
parentPart |
Numbas.parts.Part | |||
store |
Numbas.storage.BlankStorage |
<optional> |
Extends
Members
alternativeFeedbackMessage :string
Feedback message shown if this part is used as an alternative.
Type:
- Inherited From:
- Source:
answered :boolean
Has this part been answered?
Type:
- Inherited From:
- Source:
creditFraction :Numbas.math.Fraction
Credit as a fraction. Used to avoid simple floating point errors.
Type:
- Inherited From:
- Source:
customName :string
Custom name for this part, or null if none. Variables will be substituted into this string from the part's scope.
Type:
- Inherited From:
- Source:
display :Numbas.display.PartDisplay
Associated display object. It is not safe to assume this is always present - in the editor, parts have no display.
Type:
- Inherited From:
- Source:
doesMarking :boolean
Does this mark do any marking? False for information only parts.
Type:
- Inherited From:
- Source:
finalised_result :Numbas.marking.finalised_state
The result of the last marking run.
Type:
- Inherited From:
- Source:
flipped :boolean
Have choice and answers been swapped (because of the weird settings for 1_n_2 and m_n_2 parts)?
Type:
isDirty :boolean
Has the student changed their answer since last submitting?
Type:
- Inherited From:
- Source:
json :object
JSON defining this part.
Type:
- Inherited From:
- Source:
locked :boolean
Is this part locked? If false, the student can change and submit their answer.
Type:
- Inherited From:
- Source:
markingFeedback :Array.<Numbas.parts.feedbackmessage>
Messages explaining how marks were awarded.
Type:
- Inherited From:
- Source:
markingScript :Numbas.marking.MarkingScript
The script to mark this part - assign credit, and give messages and feedback.
Type:
- Inherited From:
- Source:
marks :number
Maximum marks available for this part.
Type:
- Inherited From:
- Source:
name :string
A readable name for this part, to show to the student.
Change it with Numbas.parts.Part#setName
.
Type:
- Inherited From:
- Source:
numAnswers :number
Number of answers.
Type:
numChoices :number
Number of choices - used by m_n_x
parts.
Type:
parentPart :Numbas.parts.Part
Reference to parent of this part, if this is a gap or a step.
Type:
- Inherited From:
- Source:
path :Numbas.parts.partpath
A question-wide unique 'address' for this part.
Type:
- Inherited From:
- Source:
revealed :boolean
Has the answer to this part been revealed?
Type:
- Inherited From:
- Source:
score :number
Student's score on this part.
Type:
- Inherited From:
- Source:
settings
Properties set when the part is generated.
Extends Numbas.parts.Part#settings
.
Properties:
Name | Type | Description |
---|---|---|
markingMethod |
string | The marking method to use for "choose several" or "match choices with answers" parts - one of |
maxMarksEnabled |
boolean | Is there a maximum number of marks the student can get? |
minAnswersString |
string | Minimum number of responses the student must select, without variables substituted in. |
maxAnswersString |
string | Maximum number of responses the student must select, without variables substituted in. |
minAnswers |
number | Minimum number of responses the student must select. Generated from |
maxAnswers |
number | Maximum number of responses the student must select. Generated from |
shuffleChoices |
string | Should the order of choices be randomised? |
shuffleAnswers |
string | Should the order of answers be randomised? |
matrix |
Array.<Array.<number>> | Marks for each answer/choice pair. Arranged as |
displayType |
string | How to display the response selectors. Can be |
displayColumns |
number | How many columns to use to display the choices. |
warningType |
string | What to do if the student picks the wrong number of responses? Either |
layoutType |
string | The kind of layout to use. See |
layoutExpression |
JME | Expression giving a 2d array or matrix describing the layout when |
- Overrides:
- Source:
shouldResubmit :boolean
True if this part should be resubmitted because another part it depended on has changed.
Type:
- Inherited From:
- Source:
signals :Numbas.schedule.SignalBox
Signals produced while loading this part.
Type:
- Inherited From:
- Source:
stagedAnswer :Array.<string>
Student's answers as visible on the screen (not necessarily yet submitted).
Type:
- Inherited From:
- Source:
stepsMarks :number
Marks available for the steps, if any.
Type:
- Inherited From:
- Source:
stepsOpen :boolean
Is the steps display open?
Type:
- Inherited From:
- Source:
stepsShown :boolean
Have the steps been show for this part?
Type:
- Inherited From:
- Source:
ticks :Array.<Array.<boolean>>
Student's last submitted answer/choice selections.
Type:
type :string
This part's type, e.g. "jme", "numberentry", ...
Type:
- Inherited From:
- Source:
useCustomName :boolean
Should a custom name be used?
Type:
- Inherited From:
- Source:
warnings :Array.<string>
Warnings shown next to the student's answer.
Type:
- Inherited From:
- Source:
xml :Element
XML defining this part.
Type:
- Inherited From:
- Source:
(static) layoutTypes :Object.<function()>
Layouts for multiple response types.
Type:
- Object.<function()>
Methods
addAlternative(alternative, index)
Add an alternative to this part.
Parameters:
Name | Type | Description |
---|---|---|
alternative |
Numbas.parts.Part | |
index |
number | Position of the alternative. |
Fires:
- Numbas.Part#event:addAlternative
- Inherited From:
- Source:
addCredit(credit, message)
Add an absolute value to credit
.
Parameters:
Name | Type | Description |
---|---|---|
credit |
number | Amount to add. |
message |
string | Message to show in feedback to explain this action. |
Fires:
- Numbas.Part#event:addCredit
- Inherited From:
- Source:
addStep(step, index)
Add a step to this part.
Parameters:
Name | Type | Description |
---|---|---|
step |
Numbas.parts.Part | |
index |
number | Position of the step. |
Fires:
- Numbas.Part#event:addStep
- Inherited From:
- Source:
addVariableReplacement(variable, part, must_go_first)
Add a variable replacement for this part's adaptive marking.
Parameters:
Name | Type | Description |
---|---|---|
variable |
string | The name of the variable to replace. |
part |
string | The path of the part to use. |
must_go_first |
boolean | Must the referred part be answered before this part can be marked? |
Fires:
- Numbas.Part#event:addVariableReplacement
- Inherited From:
- Source:
allChildren() → {Array.<Numbas.jme.parts.Part>}
All children of this part: all gaps and steps, but not alternatives.
Returns:
Type | Description |
---|---|
Array.<Numbas.jme.parts.Part> |
- Inherited From:
- Source:
applyScoreLimits()
Make sure the awarded score is between the minimum and maximum available.
- Inherited From:
- Source:
apply_feedback(feedback)
Apply a finalised list of feedback states to this part.
Parameters:
Name | Type | Description |
---|---|---|
feedback |
Array.<Numbas.marking.feedback_item> |
- Inherited From:
- Source:
- See:
assignName(index, siblings) → {boolean}
Assign a name to this part, and then assign names to its children.
Parameters:
Name | Type | Description |
---|---|---|
index |
number | The number of parts before this one that have names. |
siblings |
number | The number of siblings this part has. |
Fires:
- Numbas.Part#event:assignName
Returns:
Type | Description |
---|---|
boolean |
|
- Inherited From:
- Source:
availableMarks() → {number}
The total marks available for this part, after applying adaptive marking and steps penalties.
Returns:
Type | Description |
---|---|
number |
- Inherited From:
- Source:
availableNextParts() → {Array.<Numbas.parts.NextPart>}
Currently available next parts.
Returns:
Type | Description |
---|---|
Array.<Numbas.parts.NextPart> |
- Inherited From:
- Source:
baseMarkingScript() → {Numbas.marking.MarkingScript}
The script to mark this part - assign credit, and give messages and feedback.
Returns:
Type | Description |
---|---|
Numbas.marking.MarkingScript |
calculateScore()
Calculate the student's score based on their submitted answers.
Calls the parent part's calculateScore
method at the end.
Fires:
- Numbas.Part#event:calculateScore
- Inherited From:
- Source:
do_pre_submit_tasks(studentAnswer, scope, exec_path) → {object}
Do all of the pre-submit tasks before marking an answer.
Results are cached by exec_path
and studentAnswer
.
Parameters:
Name | Type | Description |
---|---|---|
studentAnswer |
Numbas.jme.token | |
scope |
Numbas.jme.Scope | |
exec_path |
string |
Fires:
- Numbas.Part#event:do_pre_submit_tasks
Returns:
Type | Description |
---|---|
object |
- Inherited From:
- Source:
error(message, args, originalErroropt)
Throw an error, with the part's identifier prepended to the message.
Parameters:
Name | Type | Attributes | Description |
---|---|---|---|
message |
string | ||
args |
object | Arguments for the error message. |
|
originalError |
Error |
<optional> |
If this is a re-thrown error, the original error object. |
Fires:
- Numbas.Part#event:error
Throws:
- Inherited From:
- Source:
errorCarriedForwardScope() → {Numbas.jme.Scope}
Replace variables with student's answers to previous parts.
Returns:
Type | Description |
---|---|
Numbas.jme.Scope |
- Inherited From:
- Source:
finaliseLoad()
Perform any tidying up or processing that needs to happen once the part's definition has been loaded.
- Overrides:
- Source:
getCorrectAnswer(scope) → {matrix}
Compute the correct answer, based on the given scope - a matrix filled with 1 for choices that should be selected, and 0 otherwise.
Parameters:
Name | Type | Description |
---|---|---|
scope |
Numbas.jme.Scope |
Returns:
Type | Description |
---|---|
matrix |
getErrorCarriedForwardReplacements() → {Array.<Numbas.parts.adaptive_variable_replacement_definition>}
Return the list of variable replacements to make for adaptive marking. For alternatives, the parent part is used, otherwise this part is used.
Returns:
Type | Description |
---|---|
Array.<Numbas.parts.adaptive_variable_replacement_definition> |
- Inherited From:
- Source:
getScope() → {Numbas.jme.Scope}
Get a JME scope for this part.
If this.question
is set, use the question's scope. Otherwise, use Numbas.jme.builtinScope
.
Returns:
Type | Description |
---|---|
Numbas.jme.Scope |
- Inherited From:
- Source:
giveWarning(warning)
Give the student a warning about this part.
Parameters:
Name | Type | Description |
---|---|---|
warning |
string |
Fires:
- Numbas.Part#event:giveWarning
- Inherited From:
- Source:
- See:
hasStagedAnswer() → {boolean}
Has the student entered an answer to this part?
Returns:
Type | Description |
---|---|
boolean |
- Inherited From:
- Source:
- See:
hideSteps()
Close the steps box. This doesn't affect the steps penalty.
Fires:
- Numbas.Part#event:hideSteps
- Inherited From:
- Source:
initDisplay()
Initialise this part's display object. Only called if the question this part belongs to has a display.
- Overrides:
- Source:
input_widget() → {string}
The name of the input widget this part uses, if any.
Returns:
Type | Description |
---|---|
string |
loadFromJSON(data)
Load the part's settings from a JSON object.
Parameters:
Name | Type | Description |
---|---|---|
data |
object |
- Overrides:
- Source:
loadFromXML(xml)
Load the part's settings from an XML <part>
node.
Parameters:
Name | Type | Description |
---|---|---|
xml |
Element |
- Overrides:
- Source:
lock()
Lock this part.
Fires:
- Numbas.Part#event:lock
- Inherited From:
- Source:
makeNextPart(np, indexopt)
Make an instance of the selected next part.
Parameters:
Name | Type | Attributes | Description |
---|---|---|---|
np |
Numbas.parts.NextPart | ||
index |
number |
<optional> |
The position of the part in the question's parts list (added to the end if not given). |
Fires:
- Numbas.Part#event:makeNextPart
- Inherited From:
- Source:
makeScope(parentScopeopt) → {Numbas.jme.Scope}
Make the scope for this part.
Parameters:
Name | Type | Attributes | Description |
---|---|---|---|
parentScope |
Numbas.jme.Scope |
<optional> |
An optional parent scope. If not given, the following are tried: a parent part, the question this part belongs to, |
Fires:
- Numbas.Part#event:makeScope
Returns:
Type | Description |
---|---|
Numbas.jme.Scope |
- Inherited From:
- Source:
mark(scope, exec_path) → {Numbas.parts.mark_result}
Function which marks the student's answer: run this.settings.markingScript
, which sets the credit for the student's answer to a number between 0 and 1 and produces a list of feedback messages and warnings.
If the question has been answered in a way that can be marked, this.answered
should be set to true
.
Parameters:
Name | Type | Description |
---|---|---|
scope |
Numbas.jme.Scope | |
exec_path |
string | A description of the path of execution, for caching pre-submit tasks. |
Fires:
- Numbas.Part#event:pre-mark
- Numbas.Part#event:post-mark
Returns:
Type | Description |
---|---|
Numbas.parts.mark_result |
- Inherited From:
- Source:
- See:
markAdaptive() → {Numbas.parts.marking_results}
Mark this part, using adaptive marking when appropriate.
Fires:
- Numbas.Part#event:pre-markAdaptive
- Numbas.Part#event:post-markAdaptive
Returns:
Type | Description |
---|---|
Numbas.parts.marking_results |
- Inherited From:
- Source:
markAgainstScope(scope, feedback, exec_path) → {Numbas.parts.marking_results}
Mark the student's answer against the given scope.
Parameters:
Name | Type | Description |
---|---|---|
scope |
Numbas.jme.Scope | Scope in which to calculate the correct answer. |
feedback |
Object.<Array.<string>> | Dictionary of existing |
exec_path |
string | A description of the path of execution, for caching pre-submit tasks. |
Fires:
- Numbas.Part#event:markAgainstScope
Returns:
Type | Description |
---|---|
Numbas.parts.marking_results |
- Inherited From:
- Source:
markAlternatives(scope, feedback, exec_path) → {Numbas.parts.markAlternatives_result}
Mark the student's answer against this part and its alternatives, and return the feedback corresponding to the alternative awarding the most credit.
Parameters:
Name | Type | Description |
---|---|---|
scope |
Numbas.jme.Scope | Scope in which to calculate the correct answer. |
feedback |
Object.<Array.<string>> | Dictionary of existing |
exec_path |
string | A description of the path of execution, for caching pre-submit tasks. |
Returns:
Type | Description |
---|---|
Numbas.parts.markAlternatives_result |
- Inherited From:
- Source:
mark_answer(studentAnswer, scope, exec_path) → {Numbas.marking.marking_script_result}
Run the marking script against the given answer. This does NOT apply the feedback and credit to the part object, it just returns it.
Parameters:
Name | Type | Description |
---|---|---|
studentAnswer |
Numbas.jme.token | |
scope |
Numbas.jme.Scope | |
exec_path |
string | A description of the path of execution, for caching pre-submit tasks. |
Fires:
- Numbas.Part#event:pre-mark_answer
- Numbas.Part#event:post-mark_answer
Returns:
Type | Description |
---|---|
Numbas.marking.marking_script_result |
- Inherited From:
- Source:
- See:
markingComment(message, reason, format)
Add a comment to the marking feedback.
Parameters:
Name | Type | Description |
---|---|---|
message |
string | |
reason |
string | |
format |
string | The format of the message: |
Fires:
- Numbas.Part#event:markingComment
- Inherited From:
- Source:
marking_parameters(studentAnswer, pre_submit_parameters, exec_path) → {Object.<Numbas.jme.token>}
Get JME parameters to pass to the marking script.
Parameters:
Name | Type | Description |
---|---|---|
studentAnswer |
Numbas.jme.token | The student's answer to the part. |
pre_submit_parameters |
Array.<Object.<Numbas.jme.token>> | |
exec_path |
string |
Returns:
Type | Description |
---|---|
Object.<Numbas.jme.token> |
- Overrides:
- Source:
multCredit(factor, message)
Multiply credit
by the given amount - use to apply penalties.
Parameters:
Name | Type | Description |
---|---|---|
factor |
number | |
message |
string | Message to show in feedback to explain this action. |
Fires:
- Numbas.Part#event:multCredit
- Inherited From:
- Source:
openSteps()
Open the steps, either because the student asked or the answers to the question are being revealed. This doesn't affect the steps penalty.
Fires:
- Numbas.Part#event:openSteps
- Inherited From:
- Source:
pleaseResubmit()
Called by another part when its marking means that the marking for this part might change (i.e., when this part replaces a variable with the answer from the other part). Sets this part as dirty, and gives a warning explaining why the student must resubmit.
- Inherited From:
- Source:
(abstract) rawStudentAnswerAsJME() → {Numbas.jme.token}
Get the student's answer as it was entered as a JME data type, to be used in the custom marking algorithm.
Returns:
Type | Description |
---|---|
Numbas.jme.token |
removeNextPart(np)
Remove the existing instance of the given next part.
Parameters:
Name | Type | Description |
---|---|---|
np |
Numbas.parts.NextPart |
Fires:
- Numbas.Part#event:removeNextPart
- Inherited From:
- Source:
removeWarnings()
Remove all warnings.
- Inherited From:
- Source:
- See:
restore_feedback(feedback)
Restore a set of feedback messages.
Parameters:
Name | Type | Description |
---|---|---|
feedback |
Object.<Array.<string>> | Dictionary of existing |
- Inherited From:
- Source:
resume()
Load saved data about this part from storage. The part is not resubmitted - you must do this afterwards, once any steps or gaps have been resumed.
Fires:
- Numbas.Part#event:resume
- Overrides:
- Source:
revealAnswer()
Reveal the correct answers, and any distractor messages for the student's choices.
Extends Numbas.parts.Part.revealAnswer
.
setCredit(credit, message, reason)
Set the credit
to an absolute value.
Parameters:
Name | Type | Description |
---|---|---|
credit |
number | |
message |
string | Message to show in feedback to explain this action. |
reason |
string | Why was the credit set to this value? If given, either 'correct' or 'incorrect'. |
Fires:
- Numbas.Part#event:setCredit
- Inherited From:
- Source:
setDirty(dirty)
Call when the student changes their answer, or submits - update Numbas.parts.Part.isDirty
.
Parameters:
Name | Type | Description |
---|---|---|
dirty |
boolean |
Fires:
- Numbas.Part#event:setDirty
- Inherited From:
- Source:
setMarkingScript(markingScriptString, extend_base)
Set this part's JME marking script.
Parameters:
Name | Type | Description |
---|---|---|
markingScriptString |
string | |
extend_base |
boolean | Does this script extend the built-in script? |
- Inherited From:
- Source:
setScript(name, order, script)
Set a custom JavaScript script.
Parameters:
Name | Type | Description |
---|---|---|
name |
string | The name of the method to override. |
order |
string | When should the script run? |
script |
string | The source code of the script. |
- Inherited From:
- Source:
- See:
setStudentAnswer()
Save a copy of the student's answer as entered on the page, for use in marking.
setWarnings(warnings)
Set the list of warnings.
Parameters:
Name | Type | Description |
---|---|---|
warnings |
Array.<string> |
- Inherited From:
- Source:
- See:
showSteps(dontStore)
Show the steps, as a result of the student asking to show them. If the answers have not been revealed, we should apply the steps penalty.
Parameters:
Name | Type | Description |
---|---|---|
dontStore |
boolean | Don't tell the storage that this is happening - use when loading from storage to avoid callback loops. |
Fires:
- Numbas.Part#event:showSteps
- Inherited From:
- Source:
storeAnswer(answer, dontStore)
Update the stored answer from the student (called when the student changes their answer, but before submitting).
Parameters:
Name | Type | Description |
---|---|---|
answer |
* | |
dontStore |
boolean | Don't tell the storage that this is happening - use when loading from storage to avoid callback loops. |
Fires:
- Numbas.Part#event:storeAnswer
- Inherited From:
- Source:
- See:
-
- {Numbas.parts.Part.stagedAnswer}
storeTick(answer)
Store the student's choices.
Parameters:
Name | Type | Description |
---|---|---|
answer |
object | Object with properties |
(abstract) studentAnswerAsJME() → {Numbas.jme.token}
Get the student's answer as a JME data type, to be used in error-carried-forward calculations.
Returns:
Type | Description |
---|---|
Numbas.jme.token |
subCredit(credit, message)
Subtract an absolute value from credit
.
Parameters:
Name | Type | Description |
---|---|---|
credit |
number | Amount to subtract. |
message |
string | Message to show in feedback to explain this action. |
Fires:
- Numbas.Part#event:subCredit
- Inherited From:
- Source:
submit()
Submit the student's answers to this part - remove warnings. save answer, calculate marks, update scores.
Fires:
- Numbas.Part#event:pre-submit
- Numbas.Part#event:post-submit
- Inherited From:
- Source:
submit_no_staged_answer()
Called when this part is submitted but it has no staged answer.
- Inherited From:
- Source:
wait_for_pre_submit(promise)
Wait for a promise to resolve before submitting.
Parameters:
Name | Type | Description |
---|---|---|
promise |
Promise |
Fires:
- Numbas.Part#event:waiting_for_pre_submit
- Numbas.Part#event:completed_pre_submit
- Inherited From:
- Source: