Latest build deployed.

This commit is contained in:
2026-02-10 07:59:07 -05:00
parent b48c520d4b
commit 1be515cd2b
84 changed files with 2855 additions and 659 deletions
@@ -17,6 +17,14 @@ const stackstring = {
"api_correct":"Correct answers"
};
function wrap_math(content) {
// Wrap instances of \[ ... \] and \( ... \) into the tags configured to be processed by MathJax
// Here we make sure that the backslashes are not escaped like \\[
content = content.replace(/(?<!\\)(\\\(.*?(?<!\\)\\\))/g, "<span class=\"process-math\">$1</span>");
return content.replace(/(?<!\\)(\\\[.*?(?<!\\)\\\])/g, "<span class=\"process-math\">$1</span>");
}
// Create data for call to API.
async function collectData(qfile, qname, qprefix) {
let res = "";
@@ -95,6 +103,7 @@ function send(qfile, qname, qprefix) {
// This is a bit of a hack. The question render returns an <a href="..."> calling the download function with
// two arguments. We add the additional arguments that we need for context (question definition) here.
question = question.replace(/javascript:download\(([^,]+?),([^,]+?)\)/, `javascript:download($1,$2, '${qfile}', '${qname}', '${qprefix}', ${seed})`);
question = wrap_math(question);
if (input.samplesolutionrender && name !== 'remember') {
// Display render of answer and matching user input to produce the answer.
correctAnswers += `<p>
@@ -102,7 +111,7 @@ function send(qfile, qname, qprefix) {
${stackstring['api_which_typed']}: `;
for (const [name, solution] of Object.entries(input.samplesolution)) {
if (name.indexOf('_val') === -1) {
correctAnswers += `<span class='correct-answer'>${solution}</span>`;
correctAnswers += `<span class='correct-answer'>${wrap_math(solution)}</span>`;
}
}
correctAnswers += '.</p>';
@@ -147,7 +156,7 @@ function send(qfile, qname, qprefix) {
let sampleText = json.questionsamplesolutiontext;
if (sampleText) {
sampleText = replaceFeedbackTags(sampleText,qprefix);
document.getElementById(`${qprefix+'generalfeedback'}`).innerHTML = sampleText;
document.getElementById(`${qprefix+'generalfeedback'}`).innerHTML = wrap_math(sampleText);
document.getElementById(`${qprefix+'stackapi_generalfeedback'}`).style.display = 'block';
} else {
// If the question is updated, there may no longer be general feedback.
@@ -165,7 +174,7 @@ function send(qfile, qname, qprefix) {
document.getElementById(`${qprefix+'stackapi_correct'}`).style.display = 'none';
createIframes(json.iframes);
MathJax.Hub.Queue(["Typeset", MathJax.Hub]);
MathJax.typeset();
}
catch(e) {
console.log(e);
@@ -207,14 +216,14 @@ function validate(element, qfile, qname, qprefix) {
renameIframeHolders();
const validationHTML = json.validation;
const element = document.getElementsByName(`${qprefix+validationPrefix + answerName}`)[0];
element.innerHTML = validationHTML;
element.innerHTML = wrap_math(validationHTML);
if (validationHTML) {
element.classList.add('validation');
} else {
element.classList.remove('validation');
}
createIframes(json.iframes);
MathJax.Hub.Queue(["Typeset", MathJax.Hub]);
MathJax.typeset();
}
catch(e) {
document.getElementById(`${qprefix+'errors'}`).innerText = http.responseText;
@@ -274,7 +283,7 @@ function answer(qfile, qname, qprefix, seed) {
json.specificfeedback = json.specificfeedback.replace(name, getPlotUrl(file));
}
json.specificfeedback = replaceFeedbackTags(json.specificfeedback,qprefix);
specificFeedbackElement.innerHTML = json.specificfeedback;
specificFeedbackElement.innerHTML = wrap_math(json.specificfeedback);
specificFeedbackElement.classList.add('feedback');
} else {
specificFeedbackElement.classList.remove('feedback');
@@ -292,7 +301,7 @@ function answer(qfile, qname, qprefix, seed) {
${(json.scores[name] * json.scoreweights[name] * json.scoreweights.total).toFixed(2)}
/ ${(json.scoreweights[name] * json.scoreweights.total).toFixed(2)}.</div>`;
}
element.innerHTML = fb;
element.innerHTML = wrap_math(fb);
// if (fb) {
// element.classList.add('feedback');
// } else {
@@ -301,7 +310,7 @@ function answer(qfile, qname, qprefix, seed) {
}
}
createIframes(json.iframes);
MathJax.Hub.Queue(["Typeset", MathJax.Hub]);
MathJax.typeset();
}
catch(e) {
console.log(e);