@pie-element/math-inline 7.21.1-next.4 → 7.21.1-next.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/controller/lib/index.js +27 -24
- package/controller/lib/index.js.map +1 -1
- package/module/configure.js +1 -1
- package/module/controller.js +39 -31
- package/module/element.js +1 -1
- package/module/manifest.json +1 -1
- package/module/print.js +1 -1
- package/package.json +2 -2
package/controller/lib/index.js
CHANGED
|
@@ -154,14 +154,16 @@ exports.outcome = outcome;
|
|
|
154
154
|
|
|
155
155
|
var normalize = function normalize(question) {
|
|
156
156
|
// making sure that defaults are set
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
157
|
+
if (!(0, _isEmpty["default"])(question.responses)) {
|
|
158
|
+
question.responses = question.responses.map(function (correctResponse) {
|
|
159
|
+
return _objectSpread(_objectSpread({}, correctResponse), {}, {
|
|
160
|
+
validation: correctResponse.validation || question.validationDefault,
|
|
161
|
+
allowTrailingZeros: correctResponse.allowTrailingZeros || question.allowTrailingZerosDefault,
|
|
162
|
+
ignoreOrder: correctResponse.ignoreOrder || question.ignoreOrderDefault
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
|
|
165
167
|
return _objectSpread(_objectSpread({}, _defaults["default"]), {}, {
|
|
166
168
|
feedbackEnabled: false,
|
|
167
169
|
promptEnabled: true,
|
|
@@ -175,32 +177,33 @@ exports.normalize = normalize;
|
|
|
175
177
|
|
|
176
178
|
var model = function model(question, session, env) {
|
|
177
179
|
return new Promise(function (resolve) {
|
|
178
|
-
var
|
|
180
|
+
var _config$responses;
|
|
179
181
|
|
|
182
|
+
var normalizedQuestion = normalize(question);
|
|
183
|
+
var correctness = getCorrectness(normalizedQuestion, env, session);
|
|
180
184
|
var responses = normalizedQuestion.responses,
|
|
181
185
|
language = normalizedQuestion.language,
|
|
182
186
|
config = (0, _objectWithoutProperties2["default"])(normalizedQuestion, _excluded);
|
|
183
|
-
config.responses = config.responseType === _utils.ResponseTypes.simple ? responses.slice(0, 1) : responses;
|
|
184
|
-
|
|
185
|
-
// ? getActualFeedbackForCorrectness(correctness?.correctness, normalizedQuestion.feedback)
|
|
186
|
-
// : undefined;
|
|
187
|
-
|
|
187
|
+
config.responses = config.responseType === _utils.ResponseTypes.simple ? responses.slice(0, 1) : responses;
|
|
188
|
+
var feedback = env.mode === 'evaluate' && normalizedQuestion.feedbackEnabled ? (0, _feedback.getActualFeedbackForCorrectness)(correctness === null || correctness === void 0 ? void 0 : correctness.correctness, normalizedQuestion.feedback) : undefined;
|
|
188
189
|
var out = {
|
|
189
190
|
config: config,
|
|
190
|
-
|
|
191
|
-
|
|
191
|
+
correctness: correctness,
|
|
192
|
+
feedback: feedback,
|
|
192
193
|
disabled: env.mode !== 'gather',
|
|
193
194
|
view: env.mode === 'view'
|
|
194
|
-
};
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
195
|
+
};
|
|
196
|
+
var note = normalizedQuestion.note || translator.t('mathInline.primaryCorrectWithAlternates', {
|
|
197
|
+
lng: language
|
|
198
|
+
});
|
|
199
|
+
var showNote = (config === null || config === void 0 ? void 0 : (_config$responses = config.responses) === null || _config$responses === void 0 ? void 0 : _config$responses.length) > 1 || ((config === null || config === void 0 ? void 0 : config.responses) || []).some(function (response) {
|
|
200
|
+
return response.validation === 'symbolic' || Object.keys(response.alternates || {}).length > 0;
|
|
201
|
+
});
|
|
200
202
|
|
|
201
203
|
if (env.mode === 'evaluate') {
|
|
202
|
-
out.correctResponse = {};
|
|
203
|
-
|
|
204
|
+
out.correctResponse = {};
|
|
205
|
+
out.config.showNote = showNote;
|
|
206
|
+
out.config.note = note;
|
|
204
207
|
} else {
|
|
205
208
|
out.config.responses = [];
|
|
206
209
|
out.config.showNote = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.js"],"names":["translator","Translator","log","getResponseCorrectness","model","answerItem","isOutcome","correctResponses","responses","isAdvanced","responseType","ResponseTypes","advanced","correctness","score","correct","isAnswerCorrect","getIsAnswerCorrect","slice","correctnessObject","correctResponseItem","answerCorrect","forEach","correctResponse","opts","mode","validation","defaults","validationDefault","literal","allowTrailingZeros","ignoreOrder","acceptedValues","answer","concat","Object","keys","alternates","map","alternateId","i","length","mv","latexEqual","e","getCorrectness","question","env","session","completeAnswer","response","undefined","createDefaultModel","Promise","resolve","config","outcome","completed","empty","normalize","feedbackEnabled","promptEnabled","rationaleEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","normalizedQuestion","language","simple","out","disabled","view","showNote","role","rationale","teacherInstructions","prompt","escape","string","replace","simpleSessionResponse","id","removeTrailingEscape","str","endsWith","advancedSessionResponse","answers","expression","RESPONSE_TOKEN","o","split","to","t","tt","join","m","match","RegExp","count","console","shift","value","trim","error","toString","createCorrectResponseSession","toLowerCase","getInnerText","html","replaceAll","getContent","validate","maxResponseAreas","responsesErrors","errors","field","required","index","reversedAlternates","entries","reverse","alternatesErrors","responseError","key","identicalAnswer","some","val","nbOfResponseAreas","responseAreasError"],"mappings":"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","sourcesContent":["import debug from 'debug';\nimport isEmpty from 'lodash/isEmpty';\nimport { getActualFeedbackForCorrectness } from '@pie-lib/pie-toolbox/feedback';\n\nimport { ResponseTypes } from './utils';\nimport Translator from '@pie-lib/pie-toolbox/translator';\n\nconst { translator } = Translator;\nimport defaults from './defaults';\n\nimport * as mv from '@pie-framework/math-validation';\n\nconst log = debug('@pie-element:math-inline:controller');\n\nconst getResponseCorrectness = (model, answerItem, isOutcome) => {\n const correctResponses = model.responses;\n const isAdvanced = model.responseType === ResponseTypes.advanced;\n\n if (!answerItem) {\n return {\n correctness: 'unanswered',\n score: isOutcome ? 0 : '0%',\n correct: false,\n };\n }\n\n const isAnswerCorrect = getIsAnswerCorrect(isAdvanced ? correctResponses : correctResponses.slice(0, 1), answerItem);\n\n const correctnessObject = {\n correctness: 'incorrect',\n score: isOutcome ? 0 : '0%',\n correct: false,\n };\n\n if (isAnswerCorrect) {\n correctnessObject.correctness = 'correct';\n correctnessObject.score = isOutcome ? 1 : '100%';\n correctnessObject.correct = true;\n }\n\n return correctnessObject;\n};\n\nfunction getIsAnswerCorrect(correctResponseItem, answerItem) {\n let answerCorrect = false;\n\n (correctResponseItem || []).forEach((correctResponse) => {\n let opts = {\n mode: correctResponse.validation || defaults.validationDefault,\n };\n\n if (opts.mode == 'literal') {\n opts.literal = {\n allowTrailingZeros: correctResponse.allowTrailingZeros || false,\n ignoreOrder: correctResponse.ignoreOrder || false,\n };\n }\n\n if (!answerCorrect) {\n const acceptedValues =\n [correctResponse.answer].concat(\n Object.keys(correctResponse.alternates || {}).map((alternateId) => correctResponse.alternates[alternateId]),\n ) || [];\n\n try {\n for (let i = 0; i < acceptedValues.length; i++) {\n answerCorrect = mv.latexEqual(answerItem, acceptedValues[i], opts);\n\n if (answerCorrect) {\n break;\n }\n }\n } catch (e) {\n log('Parse failure when evaluating math', e, correctResponse, answerItem);\n\n answerCorrect = false;\n }\n }\n });\n\n return answerCorrect;\n}\n\nconst getCorrectness = (question, env, session, isOutcome) => {\n if (env.mode === 'evaluate') {\n return getResponseCorrectness(\n question,\n question.responseType === ResponseTypes.advanced\n ? (session && session.completeAnswer) || ''\n : session && session.response,\n isOutcome,\n );\n }\n\n return undefined;\n};\n\nexport function createDefaultModel(model = {}) {\n return new Promise((resolve) => {\n resolve({\n config: {\n ...defaults,\n ...model,\n },\n });\n });\n}\n\nexport const outcome = (question, session, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate') {\n resolve({ score: undefined, completed: undefined });\n } else {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n } else {\n const correctness = getCorrectness(question, env, session, true);\n\n resolve({ score: correctness.score });\n }\n }\n });\n};\n\nexport const normalize = (question) => {\n // making sure that defaults are set\n // if (!isEmpty(question.responses)) {\n // question.responses = question.responses.map((correctResponse) => ({\n // ...correctResponse,\n // validation: correctResponse.validation || question.validationDefault,\n // allowTrailingZeros: correctResponse.allowTrailingZeros || question.allowTrailingZerosDefault,\n // ignoreOrder: correctResponse.ignoreOrder || question.ignoreOrderDefault,\n // }));\n // }\n\n return {\n ...defaults,\n feedbackEnabled: false,\n promptEnabled: true,\n rationaleEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n ...question,\n };\n};\n\nexport const model = (question, session, env) =>\n new Promise((resolve) => {\n const normalizedQuestion = normalize(question);\n // const correctness = getCorrectness(normalizedQuestion, env, session);\n const { responses, language, ...config } = normalizedQuestion;\n\n config.responses = config.responseType === ResponseTypes.simple ? responses.slice(0, 1) : responses;\n\n // const feedback =\n // env.mode === 'evaluate' && normalizedQuestion.feedbackEnabled\n // ? getActualFeedbackForCorrectness(correctness?.correctness, normalizedQuestion.feedback)\n // : undefined;\n\n const out = {\n config,\n // correctness,\n // feedback,\n disabled: env.mode !== 'gather',\n view: env.mode === 'view',\n };\n\n // const note = normalizedQuestion.note || translator.t('mathInline.primaryCorrectWithAlternates', { lng: language });\n // const showNote =\n // config?.responses?.length > 1 ||\n // (config?.responses || []).some(\n // (response) => response.validation === 'symbolic' || Object.keys(response.alternates || {}).length > 0,\n // );\n\n if (env.mode === 'evaluate') {\n out.correctResponse = {};\n // out.config.showNote = showNote;\n // out.config.note = note;\n } else {\n out.config.responses = [];\n out.config.showNote = false;\n }\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;\n out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n out.config.rationale = null;\n out.config.teacherInstructions = null;\n }\n\n out.config.env = env;\n out.config.prompt = normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null;\n out.language = language;\n\n log('out: ', out);\n resolve(out);\n });\n\nconst escape = (string) => string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'); // $& means the whole matched string\n\nconst simpleSessionResponse = (question) =>\n new Promise((resolve) => {\n const { responses, id } = question;\n const { answer } = responses && responses.length ? responses[0] : {};\n\n resolve({\n id,\n response: answer || '',\n completeAnswer: answer || '',\n });\n });\n\n// use this for items like E672793\nconst removeTrailingEscape = (str) => (str.endsWith('\\\\') ? str.slice(0, -1) : str);\n\nconst advancedSessionResponse = (question) =>\n new Promise((resolve) => {\n const { responses, id } = question;\n const { answer } = responses && responses.length ? responses[0] : {};\n\n if (!answer) {\n resolve({\n id,\n answers: {},\n completeAnswer: '',\n });\n\n return;\n }\n\n try {\n const e = question.expression;\n const RESPONSE_TOKEN = /\\\\{\\\\{\\s*response\\s*\\\\}\\\\}/g;\n\n const o = escape(e).split(RESPONSE_TOKEN);\n const to = o.map((t) => (t === '' ? t : t.replace(/\\s+/g, () => '\\\\s*')));\n const tt = to.join('(.*)');\n\n const m = answer.match(new RegExp(tt));\n\n const count = o.length - 1;\n\n if (!m) {\n resolve({\n id,\n answers: {},\n completeAnswer: answer,\n });\n\n // eslint-disable-next-line no-console\n console.log(`can not find match: ${o} in ${answer}`);\n\n return;\n }\n\n m.shift();\n\n const answers = {};\n\n for (var i = 0; i < count; i++) {\n answers[`r${i + 1}`] = { value: removeTrailingEscape(m[i].trim()) };\n }\n\n resolve({\n id,\n answers,\n completeAnswer: answer,\n });\n } catch (e) {\n resolve({\n id,\n answers: {},\n completeAnswer: answer,\n });\n // eslint-disable-next-line no-console\n console.error(e.toString());\n }\n });\n\nexport const createCorrectResponseSession = (question, env) => {\n if (env.mode === 'evaluate' || env.role !== 'instructor') {\n // eslint-disable-next-line no-console\n console.error('can not create correct response session if mode is evaluate or role is not instructor');\n\n return Promise.resolve(null);\n }\n\n if ((question.responseType || '').toLowerCase() === 'simple') {\n return simpleSessionResponse(question, env);\n } else {\n return advancedSessionResponse(question, env);\n }\n};\n\n// remove all html tags\nconst getInnerText = (html) => (html || '').replaceAll(/<[^>]*>/g, '');\n\n// remove all html tags except img and iframe\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe)([^>]+)>)/gi, '');\n\nexport const validate = (model = {}, config = {}) => {\n const { expression = '', responses, responseType } = model;\n const { maxResponseAreas } = config;\n const responsesErrors = {};\n const errors = {};\n\n ['teacherInstructions', 'prompt', 'rationale'].forEach((field) => {\n if (config[field]?.required && !getContent(model[field])) {\n errors[field] = 'This field is required.';\n }\n });\n\n (responses || []).forEach((response, index) => {\n const { answer } = response;\n const reversedAlternates = [...Object.entries(response.alternates || {})].reverse();\n const alternatesErrors = {};\n const responseError = {};\n\n if (answer === '') {\n responseError.answer = 'Content should not be empty.';\n }\n\n reversedAlternates.forEach(([key, value], index) => {\n if (value === '') {\n alternatesErrors[key] = 'Content should not be empty.';\n } else {\n const identicalAnswer =\n answer === value || reversedAlternates.slice(index + 1).some(([, val]) => val === value);\n\n if (identicalAnswer) {\n alternatesErrors[key] = 'Content should be unique.';\n }\n }\n });\n\n if (!isEmpty(responseError) || !isEmpty(alternatesErrors)) {\n responsesErrors[index] = { ...responseError, ...alternatesErrors };\n }\n });\n\n if (responseType === 'Advanced Multi') {\n const nbOfResponseAreas = (expression.match(/\\{\\{response\\}\\}/g) || []).length;\n\n if (nbOfResponseAreas > maxResponseAreas) {\n errors.responseAreasError = `No more than ${maxResponseAreas} response areas should be defined.`;\n } else if (nbOfResponseAreas < 1) {\n errors.responseAreasError = 'There should be at least 1 response area defined.';\n }\n }\n\n if (!isEmpty(responsesErrors)) {\n errors.responsesErrors = responsesErrors;\n }\n\n return errors;\n};\n"],"file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../src/index.js"],"names":["translator","Translator","log","getResponseCorrectness","model","answerItem","isOutcome","correctResponses","responses","isAdvanced","responseType","ResponseTypes","advanced","correctness","score","correct","isAnswerCorrect","getIsAnswerCorrect","slice","correctnessObject","correctResponseItem","answerCorrect","forEach","correctResponse","opts","mode","validation","defaults","validationDefault","literal","allowTrailingZeros","ignoreOrder","acceptedValues","answer","concat","Object","keys","alternates","map","alternateId","i","length","mv","latexEqual","e","getCorrectness","question","env","session","completeAnswer","response","undefined","createDefaultModel","Promise","resolve","config","outcome","completed","empty","normalize","allowTrailingZerosDefault","ignoreOrderDefault","feedbackEnabled","promptEnabled","rationaleEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","normalizedQuestion","language","simple","feedback","out","disabled","view","note","t","lng","showNote","some","role","rationale","teacherInstructions","prompt","escape","string","replace","simpleSessionResponse","id","removeTrailingEscape","str","endsWith","advancedSessionResponse","answers","expression","RESPONSE_TOKEN","o","split","to","tt","join","m","match","RegExp","count","console","shift","value","trim","error","toString","createCorrectResponseSession","toLowerCase","getInnerText","html","replaceAll","getContent","validate","maxResponseAreas","responsesErrors","errors","field","required","index","reversedAlternates","entries","reverse","alternatesErrors","responseError","key","identicalAnswer","val","nbOfResponseAreas","responseAreasError"],"mappings":"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","sourcesContent":["import debug from 'debug';\nimport isEmpty from 'lodash/isEmpty';\nimport { getActualFeedbackForCorrectness } from '@pie-lib/pie-toolbox/feedback';\n\nimport { ResponseTypes } from './utils';\nimport Translator from '@pie-lib/pie-toolbox/translator';\n\nconst { translator } = Translator;\nimport defaults from './defaults';\n\nimport * as mv from '@pie-framework/math-validation';\n\nconst log = debug('@pie-element:math-inline:controller');\n\nconst getResponseCorrectness = (model, answerItem, isOutcome) => {\n const correctResponses = model.responses;\n const isAdvanced = model.responseType === ResponseTypes.advanced;\n\n if (!answerItem) {\n return {\n correctness: 'unanswered',\n score: isOutcome ? 0 : '0%',\n correct: false,\n };\n }\n\n const isAnswerCorrect = getIsAnswerCorrect(isAdvanced ? correctResponses : correctResponses.slice(0, 1), answerItem);\n\n const correctnessObject = {\n correctness: 'incorrect',\n score: isOutcome ? 0 : '0%',\n correct: false,\n };\n\n if (isAnswerCorrect) {\n correctnessObject.correctness = 'correct';\n correctnessObject.score = isOutcome ? 1 : '100%';\n correctnessObject.correct = true;\n }\n\n return correctnessObject;\n};\n\nfunction getIsAnswerCorrect(correctResponseItem, answerItem) {\n let answerCorrect = false;\n\n (correctResponseItem || []).forEach((correctResponse) => {\n let opts = {\n mode: correctResponse.validation || defaults.validationDefault,\n };\n\n if (opts.mode == 'literal') {\n opts.literal = {\n allowTrailingZeros: correctResponse.allowTrailingZeros || false,\n ignoreOrder: correctResponse.ignoreOrder || false,\n };\n }\n\n if (!answerCorrect) {\n const acceptedValues =\n [correctResponse.answer].concat(\n Object.keys(correctResponse.alternates || {}).map((alternateId) => correctResponse.alternates[alternateId]),\n ) || [];\n\n try {\n for (let i = 0; i < acceptedValues.length; i++) {\n answerCorrect = mv.latexEqual(answerItem, acceptedValues[i], opts);\n\n if (answerCorrect) {\n break;\n }\n }\n } catch (e) {\n log('Parse failure when evaluating math', e, correctResponse, answerItem);\n\n answerCorrect = false;\n }\n }\n });\n\n return answerCorrect;\n}\n\nconst getCorrectness = (question, env, session, isOutcome) => {\n if (env.mode === 'evaluate') {\n return getResponseCorrectness(\n question,\n question.responseType === ResponseTypes.advanced\n ? (session && session.completeAnswer) || ''\n : session && session.response,\n isOutcome,\n );\n }\n\n return undefined;\n};\n\nexport function createDefaultModel(model = {}) {\n return new Promise((resolve) => {\n resolve({\n config: {\n ...defaults,\n ...model,\n },\n });\n });\n}\n\nexport const outcome = (question, session, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate') {\n resolve({ score: undefined, completed: undefined });\n } else {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n } else {\n const correctness = getCorrectness(question, env, session, true);\n\n resolve({ score: correctness.score });\n }\n }\n });\n};\n\nexport const normalize = (question) => {\n // making sure that defaults are set\n if (!isEmpty(question.responses)) {\n question.responses = question.responses.map((correctResponse) => ({\n ...correctResponse,\n validation: correctResponse.validation || question.validationDefault,\n allowTrailingZeros: correctResponse.allowTrailingZeros || question.allowTrailingZerosDefault,\n ignoreOrder: correctResponse.ignoreOrder || question.ignoreOrderDefault,\n }));\n }\n\n return {\n ...defaults,\n feedbackEnabled: false,\n promptEnabled: true,\n rationaleEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n ...question,\n };\n};\n\nexport const model = (question, session, env) =>\n new Promise((resolve) => {\n const normalizedQuestion = normalize(question);\n const correctness = getCorrectness(normalizedQuestion, env, session);\n const { responses, language, ...config } = normalizedQuestion;\n\n config.responses = config.responseType === ResponseTypes.simple ? responses.slice(0, 1) : responses;\n\n const feedback =\n env.mode === 'evaluate' && normalizedQuestion.feedbackEnabled\n ? getActualFeedbackForCorrectness(correctness?.correctness, normalizedQuestion.feedback)\n : undefined;\n\n const out = {\n config,\n correctness,\n feedback,\n disabled: env.mode !== 'gather',\n view: env.mode === 'view',\n };\n\n const note = normalizedQuestion.note || translator.t('mathInline.primaryCorrectWithAlternates', { lng: language });\n const showNote =\n config?.responses?.length > 1 ||\n (config?.responses || []).some(\n (response) => response.validation === 'symbolic' || Object.keys(response.alternates || {}).length > 0,\n );\n\n if (env.mode === 'evaluate') {\n out.correctResponse = {};\n out.config.showNote = showNote;\n out.config.note = note;\n } else {\n out.config.responses = [];\n out.config.showNote = false;\n }\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;\n out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n out.config.rationale = null;\n out.config.teacherInstructions = null;\n }\n\n out.config.env = env;\n out.config.prompt = normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null;\n out.language = language;\n\n log('out: ', out);\n resolve(out);\n });\n\nconst escape = (string) => string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'); // $& means the whole matched string\n\nconst simpleSessionResponse = (question) =>\n new Promise((resolve) => {\n const { responses, id } = question;\n const { answer } = responses && responses.length ? responses[0] : {};\n\n resolve({\n id,\n response: answer || '',\n completeAnswer: answer || '',\n });\n });\n\n// use this for items like E672793\nconst removeTrailingEscape = (str) => (str.endsWith('\\\\') ? str.slice(0, -1) : str);\n\nconst advancedSessionResponse = (question) =>\n new Promise((resolve) => {\n const { responses, id } = question;\n const { answer } = responses && responses.length ? responses[0] : {};\n\n if (!answer) {\n resolve({\n id,\n answers: {},\n completeAnswer: '',\n });\n\n return;\n }\n\n try {\n const e = question.expression;\n const RESPONSE_TOKEN = /\\\\{\\\\{\\s*response\\s*\\\\}\\\\}/g;\n\n const o = escape(e).split(RESPONSE_TOKEN);\n const to = o.map((t) => (t === '' ? t : t.replace(/\\s+/g, () => '\\\\s*')));\n const tt = to.join('(.*)');\n\n const m = answer.match(new RegExp(tt));\n\n const count = o.length - 1;\n\n if (!m) {\n resolve({\n id,\n answers: {},\n completeAnswer: answer,\n });\n\n // eslint-disable-next-line no-console\n console.log(`can not find match: ${o} in ${answer}`);\n\n return;\n }\n\n m.shift();\n\n const answers = {};\n\n for (var i = 0; i < count; i++) {\n answers[`r${i + 1}`] = { value: removeTrailingEscape(m[i].trim()) };\n }\n\n resolve({\n id,\n answers,\n completeAnswer: answer,\n });\n } catch (e) {\n resolve({\n id,\n answers: {},\n completeAnswer: answer,\n });\n // eslint-disable-next-line no-console\n console.error(e.toString());\n }\n });\n\nexport const createCorrectResponseSession = (question, env) => {\n if (env.mode === 'evaluate' || env.role !== 'instructor') {\n // eslint-disable-next-line no-console\n console.error('can not create correct response session if mode is evaluate or role is not instructor');\n\n return Promise.resolve(null);\n }\n\n if ((question.responseType || '').toLowerCase() === 'simple') {\n return simpleSessionResponse(question, env);\n } else {\n return advancedSessionResponse(question, env);\n }\n};\n\n// remove all html tags\nconst getInnerText = (html) => (html || '').replaceAll(/<[^>]*>/g, '');\n\n// remove all html tags except img and iframe\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe)([^>]+)>)/gi, '');\n\nexport const validate = (model = {}, config = {}) => {\n const { expression = '', responses, responseType } = model;\n const { maxResponseAreas } = config;\n const responsesErrors = {};\n const errors = {};\n\n ['teacherInstructions', 'prompt', 'rationale'].forEach((field) => {\n if (config[field]?.required && !getContent(model[field])) {\n errors[field] = 'This field is required.';\n }\n });\n\n (responses || []).forEach((response, index) => {\n const { answer } = response;\n const reversedAlternates = [...Object.entries(response.alternates || {})].reverse();\n const alternatesErrors = {};\n const responseError = {};\n\n if (answer === '') {\n responseError.answer = 'Content should not be empty.';\n }\n\n reversedAlternates.forEach(([key, value], index) => {\n if (value === '') {\n alternatesErrors[key] = 'Content should not be empty.';\n } else {\n const identicalAnswer =\n answer === value || reversedAlternates.slice(index + 1).some(([, val]) => val === value);\n\n if (identicalAnswer) {\n alternatesErrors[key] = 'Content should be unique.';\n }\n }\n });\n\n if (!isEmpty(responseError) || !isEmpty(alternatesErrors)) {\n responsesErrors[index] = { ...responseError, ...alternatesErrors };\n }\n });\n\n if (responseType === 'Advanced Multi') {\n const nbOfResponseAreas = (expression.match(/\\{\\{response\\}\\}/g) || []).length;\n\n if (nbOfResponseAreas > maxResponseAreas) {\n errors.responseAreasError = `No more than ${maxResponseAreas} response areas should be defined.`;\n } else if (nbOfResponseAreas < 1) {\n errors.responseAreasError = 'There should be at least 1 response area defined.';\n }\n }\n\n if (!isEmpty(responsesErrors)) {\n errors.responsesErrors = responsesErrors;\n }\n\n return errors;\n};\n"],"file":"index.js"}
|
package/module/configure.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {_dll_react, _dll_prop_types, _dll_classnames, _dll_react_dom, _dll_lodash, _dll_pie_framework__mathquill, _dll_debug} from "../../../@pie-lib/pie-toolbox-math-rendering-module@1.
|
|
1
|
+
import {_dll_react, _dll_prop_types, _dll_classnames, _dll_react_dom, _dll_lodash, _dll_pie_framework__mathquill, _dll_debug} from "../../../@pie-lib/pie-toolbox-math-rendering-module@1.17.1/module/index.js";
|
|
2
2
|
import {_dll_pie_lib__pie_toolbox_config_ui, _dll_pie_lib__pie_toolbox_math_toolbar, _dll_pie_lib__pie_toolbox_editable_html} from "../../../@pie-lib/pie-toolbox-module@4.12.0/module/index.js";
|
|
3
3
|
var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
|
|
4
4
|
function getDefaultExportFromCjs(x) {
|
package/module/controller.js
CHANGED
|
@@ -2,6 +2,10 @@ import * as mv from '@pie-framework/math-validation';
|
|
|
2
2
|
|
|
3
3
|
var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
|
|
4
4
|
|
|
5
|
+
function getDefaultExportFromCjs (x) {
|
|
6
|
+
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
|
|
7
|
+
}
|
|
8
|
+
|
|
5
9
|
/** Used for built-in method references. */
|
|
6
10
|
|
|
7
11
|
var objectProto$6 = Object.prototype;
|
|
@@ -1191,9 +1195,9 @@ const ResponseTypes = {
|
|
|
1191
1195
|
simple: 'Simple',
|
|
1192
1196
|
};
|
|
1193
1197
|
|
|
1194
|
-
var translator$
|
|
1198
|
+
var translator$2 = {};
|
|
1195
1199
|
|
|
1196
|
-
var translator = {};
|
|
1200
|
+
var translator$1 = {};
|
|
1197
1201
|
|
|
1198
1202
|
var _typeof$1 = {exports: {}};
|
|
1199
1203
|
|
|
@@ -1944,7 +1948,7 @@ function _objectSpread$4(target) { for (var i = 1; i < arguments.length; i++) {
|
|
|
1944
1948
|
function _createSuper$2(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$2(); return function _createSuperInternal() { var Super = _getPrototypeOf__default["default"](Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf__default["default"](this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn__default["default"](this, result); }; }
|
|
1945
1949
|
function _isNativeReflectConstruct$2() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
1946
1950
|
var checkedLoadedFor = {};
|
|
1947
|
-
var Translator = function (_EventEmitter) {
|
|
1951
|
+
var Translator$1 = function (_EventEmitter) {
|
|
1948
1952
|
_inherits__default["default"](Translator, _EventEmitter);
|
|
1949
1953
|
var _super = _createSuper$2(Translator);
|
|
1950
1954
|
function Translator(services) {
|
|
@@ -3553,7 +3557,7 @@ var I18n = function (_EventEmitter) {
|
|
|
3553
3557
|
s.i18nFormat = createClassOnDemand(this.modules.i18nFormat);
|
|
3554
3558
|
if (s.i18nFormat.init) s.i18nFormat.init(this);
|
|
3555
3559
|
}
|
|
3556
|
-
this.translator = new Translator(this.services, this.options);
|
|
3560
|
+
this.translator = new Translator$1(this.services, this.options);
|
|
3557
3561
|
this.translator.on('*', function (event) {
|
|
3558
3562
|
for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
|
|
3559
3563
|
args[_key2 - 1] = arguments[_key2];
|
|
@@ -3913,7 +3917,7 @@ var I18n = function (_EventEmitter) {
|
|
|
3913
3917
|
clone.services.utils = {
|
|
3914
3918
|
hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)
|
|
3915
3919
|
};
|
|
3916
|
-
clone.translator = new Translator(clone.services, clone.options);
|
|
3920
|
+
clone.translator = new Translator$1(clone.services, clone.options);
|
|
3917
3921
|
clone.translator.on('*', function (event) {
|
|
3918
3922
|
for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {
|
|
3919
3923
|
args[_key4 - 1] = arguments[_key4];
|
|
@@ -4195,7 +4199,7 @@ var _default = {
|
|
|
4195
4199
|
};
|
|
4196
4200
|
exports["default"] = _default;
|
|
4197
4201
|
|
|
4198
|
-
}(translator));
|
|
4202
|
+
}(translator$1));
|
|
4199
4203
|
|
|
4200
4204
|
(function (exports) {
|
|
4201
4205
|
|
|
@@ -4212,12 +4216,14 @@ Object.defineProperty(exports, "Translator", {
|
|
|
4212
4216
|
});
|
|
4213
4217
|
exports["default"] = void 0;
|
|
4214
4218
|
|
|
4215
|
-
var _translator = _interopRequireDefault(translator);
|
|
4219
|
+
var _translator = _interopRequireDefault(translator$1);
|
|
4216
4220
|
|
|
4217
4221
|
var _default = _translator["default"];
|
|
4218
4222
|
exports["default"] = _default;
|
|
4219
4223
|
|
|
4220
|
-
}(translator$
|
|
4224
|
+
}(translator$2));
|
|
4225
|
+
|
|
4226
|
+
var Translator = /*@__PURE__*/getDefaultExportFromCjs(translator$2);
|
|
4221
4227
|
|
|
4222
4228
|
var defaults = {
|
|
4223
4229
|
responseType: ResponseTypes.advanced,
|
|
@@ -4243,6 +4249,8 @@ var defaults = {
|
|
|
4243
4249
|
customKeys: [],
|
|
4244
4250
|
};
|
|
4245
4251
|
|
|
4252
|
+
const { translator } = Translator;
|
|
4253
|
+
|
|
4246
4254
|
const getResponseCorrectness = (model, answerItem, isOutcome) => {
|
|
4247
4255
|
const correctResponses = model.responses;
|
|
4248
4256
|
const isAdvanced = model.responseType === ResponseTypes.advanced;
|
|
@@ -4354,14 +4362,14 @@ const outcome = (question, session, env) => {
|
|
|
4354
4362
|
|
|
4355
4363
|
const normalize = (question) => {
|
|
4356
4364
|
// making sure that defaults are set
|
|
4357
|
-
|
|
4358
|
-
|
|
4359
|
-
|
|
4360
|
-
|
|
4361
|
-
|
|
4362
|
-
|
|
4363
|
-
|
|
4364
|
-
|
|
4365
|
+
if (!isEmpty_1(question.responses)) {
|
|
4366
|
+
question.responses = question.responses.map((correctResponse) => ({
|
|
4367
|
+
...correctResponse,
|
|
4368
|
+
validation: correctResponse.validation || question.validationDefault,
|
|
4369
|
+
allowTrailingZeros: correctResponse.allowTrailingZeros || question.allowTrailingZerosDefault,
|
|
4370
|
+
ignoreOrder: correctResponse.ignoreOrder || question.ignoreOrderDefault,
|
|
4371
|
+
}));
|
|
4372
|
+
}
|
|
4365
4373
|
|
|
4366
4374
|
return {
|
|
4367
4375
|
...defaults,
|
|
@@ -4377,35 +4385,35 @@ const normalize = (question) => {
|
|
|
4377
4385
|
const model = (question, session, env) =>
|
|
4378
4386
|
new Promise((resolve) => {
|
|
4379
4387
|
const normalizedQuestion = normalize(question);
|
|
4380
|
-
|
|
4388
|
+
const correctness = getCorrectness(normalizedQuestion, env, session);
|
|
4381
4389
|
const { responses, language, ...config } = normalizedQuestion;
|
|
4382
4390
|
|
|
4383
4391
|
config.responses = config.responseType === ResponseTypes.simple ? responses.slice(0, 1) : responses;
|
|
4384
4392
|
|
|
4385
|
-
|
|
4386
|
-
|
|
4387
|
-
|
|
4388
|
-
|
|
4393
|
+
const feedback =
|
|
4394
|
+
env.mode === 'evaluate' && normalizedQuestion.feedbackEnabled
|
|
4395
|
+
? feedback$1.getActualFeedbackForCorrectness(correctness?.correctness, normalizedQuestion.feedback)
|
|
4396
|
+
: undefined;
|
|
4389
4397
|
|
|
4390
4398
|
const out = {
|
|
4391
4399
|
config,
|
|
4392
|
-
|
|
4393
|
-
|
|
4400
|
+
correctness,
|
|
4401
|
+
feedback,
|
|
4394
4402
|
disabled: env.mode !== 'gather',
|
|
4395
4403
|
view: env.mode === 'view',
|
|
4396
4404
|
};
|
|
4397
4405
|
|
|
4398
|
-
|
|
4399
|
-
|
|
4400
|
-
|
|
4401
|
-
|
|
4402
|
-
|
|
4403
|
-
|
|
4406
|
+
const note = normalizedQuestion.note || translator.t('mathInline.primaryCorrectWithAlternates', { lng: language });
|
|
4407
|
+
const showNote =
|
|
4408
|
+
config?.responses?.length > 1 ||
|
|
4409
|
+
(config?.responses || []).some(
|
|
4410
|
+
(response) => response.validation === 'symbolic' || Object.keys(response.alternates || {}).length > 0,
|
|
4411
|
+
);
|
|
4404
4412
|
|
|
4405
4413
|
if (env.mode === 'evaluate') {
|
|
4406
4414
|
out.correctResponse = {};
|
|
4407
|
-
|
|
4408
|
-
|
|
4415
|
+
out.config.showNote = showNote;
|
|
4416
|
+
out.config.note = note;
|
|
4409
4417
|
} else {
|
|
4410
4418
|
out.config.responses = [];
|
|
4411
4419
|
out.config.showNote = false;
|
package/module/element.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {_dll_react, _dll_prop_types, _dll_classnames, _dll_react_dom, _dll_pie_lib__pie_toolbox_math_rendering_accessible, _dll_lodash, _dll_pie_framework__mathquill, _dll_debug} from "../../../@pie-lib/pie-toolbox-math-rendering-module@1.
|
|
1
|
+
import {_dll_react, _dll_prop_types, _dll_classnames, _dll_react_dom, _dll_pie_lib__pie_toolbox_math_rendering_accessible, _dll_lodash, _dll_pie_framework__mathquill, _dll_debug} from "../../../@pie-lib/pie-toolbox-math-rendering-module@1.17.1/module/index.js";
|
|
2
2
|
import {_dll_pie_lib__pie_toolbox_math_toolbar, _dll_pie_lib__pie_toolbox_math_input, _dll_pie_lib__pie_toolbox_render_ui, _dll_pie_lib__pie_toolbox_correct_answer_toggle} from "../../../@pie-lib/pie-toolbox-module@4.12.0/module/index.js";
|
|
3
3
|
var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
|
|
4
4
|
function getDefaultExportFromCjs(x) {
|
package/module/manifest.json
CHANGED
package/module/print.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {_dll_react, _dll_prop_types, _dll_classnames, _dll_react_dom, _dll_pie_lib__pie_toolbox_math_rendering_accessible, _dll_lodash, _dll_pie_framework__mathquill, _dll_debug} from "../../../@pie-lib/pie-toolbox-math-rendering-module@1.
|
|
1
|
+
import {_dll_react, _dll_prop_types, _dll_classnames, _dll_react_dom, _dll_pie_lib__pie_toolbox_math_rendering_accessible, _dll_lodash, _dll_pie_framework__mathquill, _dll_debug} from "../../../@pie-lib/pie-toolbox-math-rendering-module@1.17.1/module/index.js";
|
|
2
2
|
import {_dll_pie_lib__pie_toolbox_math_toolbar, _dll_pie_lib__pie_toolbox_math_input, _dll_pie_lib__pie_toolbox_render_ui, _dll_pie_lib__pie_toolbox_correct_answer_toggle} from "../../../@pie-lib/pie-toolbox-module@4.12.0/module/index.js";
|
|
3
3
|
var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
|
|
4
4
|
function getDefaultExportFromCjs(x) {
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
6
|
"repository": "pie-framework/pie-elements",
|
|
7
|
-
"version": "7.21.1-next.
|
|
7
|
+
"version": "7.21.1-next.8+a30cc2523",
|
|
8
8
|
"main": "lib/index.js",
|
|
9
9
|
"description": "",
|
|
10
10
|
"scripts": {
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
},
|
|
25
25
|
"author": "",
|
|
26
26
|
"license": "ISC",
|
|
27
|
-
"gitHead": "
|
|
27
|
+
"gitHead": "a30cc25235069bb062e579bbba2d6aaf1ab7d59e",
|
|
28
28
|
"module": "src/index.js",
|
|
29
29
|
"exports": {
|
|
30
30
|
".": "./src/index.js",
|