@pie-element/math-inline 7.21.1-next.0 → 7.21.1-next.4
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 +24 -27
- package/controller/lib/index.js.map +1 -1
- package/module/controller.js +31 -39
- package/package.json +2 -2
package/controller/lib/index.js
CHANGED
|
@@ -154,16 +154,14 @@ exports.outcome = outcome;
|
|
|
154
154
|
|
|
155
155
|
var normalize = function normalize(question) {
|
|
156
156
|
// making sure that defaults are set
|
|
157
|
-
if (!(
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
}
|
|
166
|
-
|
|
157
|
+
// if (!isEmpty(question.responses)) {
|
|
158
|
+
// question.responses = question.responses.map((correctResponse) => ({
|
|
159
|
+
// ...correctResponse,
|
|
160
|
+
// validation: correctResponse.validation || question.validationDefault,
|
|
161
|
+
// allowTrailingZeros: correctResponse.allowTrailingZeros || question.allowTrailingZerosDefault,
|
|
162
|
+
// ignoreOrder: correctResponse.ignoreOrder || question.ignoreOrderDefault,
|
|
163
|
+
// }));
|
|
164
|
+
// }
|
|
167
165
|
return _objectSpread(_objectSpread({}, _defaults["default"]), {}, {
|
|
168
166
|
feedbackEnabled: false,
|
|
169
167
|
promptEnabled: true,
|
|
@@ -177,33 +175,32 @@ exports.normalize = normalize;
|
|
|
177
175
|
|
|
178
176
|
var model = function model(question, session, env) {
|
|
179
177
|
return new Promise(function (resolve) {
|
|
180
|
-
var
|
|
178
|
+
var normalizedQuestion = normalize(question); // const correctness = getCorrectness(normalizedQuestion, env, session);
|
|
181
179
|
|
|
182
|
-
var normalizedQuestion = normalize(question);
|
|
183
|
-
var correctness = getCorrectness(normalizedQuestion, env, session);
|
|
184
180
|
var responses = normalizedQuestion.responses,
|
|
185
181
|
language = normalizedQuestion.language,
|
|
186
182
|
config = (0, _objectWithoutProperties2["default"])(normalizedQuestion, _excluded);
|
|
187
|
-
config.responses = config.responseType === _utils.ResponseTypes.simple ? responses.slice(0, 1) : responses;
|
|
188
|
-
|
|
183
|
+
config.responses = config.responseType === _utils.ResponseTypes.simple ? responses.slice(0, 1) : responses; // const feedback =
|
|
184
|
+
// env.mode === 'evaluate' && normalizedQuestion.feedbackEnabled
|
|
185
|
+
// ? getActualFeedbackForCorrectness(correctness?.correctness, normalizedQuestion.feedback)
|
|
186
|
+
// : undefined;
|
|
187
|
+
|
|
189
188
|
var out = {
|
|
190
189
|
config: config,
|
|
191
|
-
|
|
192
|
-
|
|
190
|
+
// correctness,
|
|
191
|
+
// feedback,
|
|
193
192
|
disabled: env.mode !== 'gather',
|
|
194
193
|
view: env.mode === 'view'
|
|
195
|
-
};
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
});
|
|
194
|
+
}; // const note = normalizedQuestion.note || translator.t('mathInline.primaryCorrectWithAlternates', { lng: language });
|
|
195
|
+
// const showNote =
|
|
196
|
+
// config?.responses?.length > 1 ||
|
|
197
|
+
// (config?.responses || []).some(
|
|
198
|
+
// (response) => response.validation === 'symbolic' || Object.keys(response.alternates || {}).length > 0,
|
|
199
|
+
// );
|
|
202
200
|
|
|
203
201
|
if (env.mode === 'evaluate') {
|
|
204
|
-
out.correctResponse = {};
|
|
205
|
-
out.config.
|
|
206
|
-
out.config.note = note;
|
|
202
|
+
out.correctResponse = {}; // out.config.showNote = showNote;
|
|
203
|
+
// out.config.note = note;
|
|
207
204
|
} else {
|
|
208
205
|
out.config.responses = [];
|
|
209
206
|
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","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"}
|
|
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"}
|
package/module/controller.js
CHANGED
|
@@ -2,10 +2,6 @@ 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
|
-
|
|
9
5
|
/** Used for built-in method references. */
|
|
10
6
|
|
|
11
7
|
var objectProto$6 = Object.prototype;
|
|
@@ -1195,10 +1191,10 @@ const ResponseTypes = {
|
|
|
1195
1191
|
simple: 'Simple',
|
|
1196
1192
|
};
|
|
1197
1193
|
|
|
1198
|
-
var translator$2 = {};
|
|
1199
|
-
|
|
1200
1194
|
var translator$1 = {};
|
|
1201
1195
|
|
|
1196
|
+
var translator = {};
|
|
1197
|
+
|
|
1202
1198
|
var _typeof$1 = {exports: {}};
|
|
1203
1199
|
|
|
1204
1200
|
(function (module) {
|
|
@@ -1948,7 +1944,7 @@ function _objectSpread$4(target) { for (var i = 1; i < arguments.length; i++) {
|
|
|
1948
1944
|
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); }; }
|
|
1949
1945
|
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; } }
|
|
1950
1946
|
var checkedLoadedFor = {};
|
|
1951
|
-
var Translator
|
|
1947
|
+
var Translator = function (_EventEmitter) {
|
|
1952
1948
|
_inherits__default["default"](Translator, _EventEmitter);
|
|
1953
1949
|
var _super = _createSuper$2(Translator);
|
|
1954
1950
|
function Translator(services) {
|
|
@@ -3557,7 +3553,7 @@ var I18n = function (_EventEmitter) {
|
|
|
3557
3553
|
s.i18nFormat = createClassOnDemand(this.modules.i18nFormat);
|
|
3558
3554
|
if (s.i18nFormat.init) s.i18nFormat.init(this);
|
|
3559
3555
|
}
|
|
3560
|
-
this.translator = new Translator
|
|
3556
|
+
this.translator = new Translator(this.services, this.options);
|
|
3561
3557
|
this.translator.on('*', function (event) {
|
|
3562
3558
|
for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
|
|
3563
3559
|
args[_key2 - 1] = arguments[_key2];
|
|
@@ -3917,7 +3913,7 @@ var I18n = function (_EventEmitter) {
|
|
|
3917
3913
|
clone.services.utils = {
|
|
3918
3914
|
hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)
|
|
3919
3915
|
};
|
|
3920
|
-
clone.translator = new Translator
|
|
3916
|
+
clone.translator = new Translator(clone.services, clone.options);
|
|
3921
3917
|
clone.translator.on('*', function (event) {
|
|
3922
3918
|
for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {
|
|
3923
3919
|
args[_key4 - 1] = arguments[_key4];
|
|
@@ -4199,7 +4195,7 @@ var _default = {
|
|
|
4199
4195
|
};
|
|
4200
4196
|
exports["default"] = _default;
|
|
4201
4197
|
|
|
4202
|
-
}(translator
|
|
4198
|
+
}(translator));
|
|
4203
4199
|
|
|
4204
4200
|
(function (exports) {
|
|
4205
4201
|
|
|
@@ -4216,14 +4212,12 @@ Object.defineProperty(exports, "Translator", {
|
|
|
4216
4212
|
});
|
|
4217
4213
|
exports["default"] = void 0;
|
|
4218
4214
|
|
|
4219
|
-
var _translator = _interopRequireDefault(translator
|
|
4215
|
+
var _translator = _interopRequireDefault(translator);
|
|
4220
4216
|
|
|
4221
4217
|
var _default = _translator["default"];
|
|
4222
4218
|
exports["default"] = _default;
|
|
4223
4219
|
|
|
4224
|
-
}(translator$
|
|
4225
|
-
|
|
4226
|
-
var Translator = /*@__PURE__*/getDefaultExportFromCjs(translator$2);
|
|
4220
|
+
}(translator$1));
|
|
4227
4221
|
|
|
4228
4222
|
var defaults = {
|
|
4229
4223
|
responseType: ResponseTypes.advanced,
|
|
@@ -4249,8 +4243,6 @@ var defaults = {
|
|
|
4249
4243
|
customKeys: [],
|
|
4250
4244
|
};
|
|
4251
4245
|
|
|
4252
|
-
const { translator } = Translator;
|
|
4253
|
-
|
|
4254
4246
|
const getResponseCorrectness = (model, answerItem, isOutcome) => {
|
|
4255
4247
|
const correctResponses = model.responses;
|
|
4256
4248
|
const isAdvanced = model.responseType === ResponseTypes.advanced;
|
|
@@ -4362,14 +4354,14 @@ const outcome = (question, session, env) => {
|
|
|
4362
4354
|
|
|
4363
4355
|
const normalize = (question) => {
|
|
4364
4356
|
// making sure that defaults are set
|
|
4365
|
-
if (!
|
|
4366
|
-
|
|
4367
|
-
|
|
4368
|
-
|
|
4369
|
-
|
|
4370
|
-
|
|
4371
|
-
|
|
4372
|
-
}
|
|
4357
|
+
// if (!isEmpty(question.responses)) {
|
|
4358
|
+
// question.responses = question.responses.map((correctResponse) => ({
|
|
4359
|
+
// ...correctResponse,
|
|
4360
|
+
// validation: correctResponse.validation || question.validationDefault,
|
|
4361
|
+
// allowTrailingZeros: correctResponse.allowTrailingZeros || question.allowTrailingZerosDefault,
|
|
4362
|
+
// ignoreOrder: correctResponse.ignoreOrder || question.ignoreOrderDefault,
|
|
4363
|
+
// }));
|
|
4364
|
+
// }
|
|
4373
4365
|
|
|
4374
4366
|
return {
|
|
4375
4367
|
...defaults,
|
|
@@ -4385,35 +4377,35 @@ const normalize = (question) => {
|
|
|
4385
4377
|
const model = (question, session, env) =>
|
|
4386
4378
|
new Promise((resolve) => {
|
|
4387
4379
|
const normalizedQuestion = normalize(question);
|
|
4388
|
-
const correctness = getCorrectness(normalizedQuestion, env, session);
|
|
4380
|
+
// const correctness = getCorrectness(normalizedQuestion, env, session);
|
|
4389
4381
|
const { responses, language, ...config } = normalizedQuestion;
|
|
4390
4382
|
|
|
4391
4383
|
config.responses = config.responseType === ResponseTypes.simple ? responses.slice(0, 1) : responses;
|
|
4392
4384
|
|
|
4393
|
-
const feedback =
|
|
4394
|
-
|
|
4395
|
-
|
|
4396
|
-
|
|
4385
|
+
// const feedback =
|
|
4386
|
+
// env.mode === 'evaluate' && normalizedQuestion.feedbackEnabled
|
|
4387
|
+
// ? getActualFeedbackForCorrectness(correctness?.correctness, normalizedQuestion.feedback)
|
|
4388
|
+
// : undefined;
|
|
4397
4389
|
|
|
4398
4390
|
const out = {
|
|
4399
4391
|
config,
|
|
4400
|
-
correctness,
|
|
4401
|
-
feedback,
|
|
4392
|
+
// correctness,
|
|
4393
|
+
// feedback,
|
|
4402
4394
|
disabled: env.mode !== 'gather',
|
|
4403
4395
|
view: env.mode === 'view',
|
|
4404
4396
|
};
|
|
4405
4397
|
|
|
4406
|
-
const note = normalizedQuestion.note || translator.t('mathInline.primaryCorrectWithAlternates', { lng: language });
|
|
4407
|
-
const showNote =
|
|
4408
|
-
|
|
4409
|
-
|
|
4410
|
-
|
|
4411
|
-
|
|
4398
|
+
// const note = normalizedQuestion.note || translator.t('mathInline.primaryCorrectWithAlternates', { lng: language });
|
|
4399
|
+
// const showNote =
|
|
4400
|
+
// config?.responses?.length > 1 ||
|
|
4401
|
+
// (config?.responses || []).some(
|
|
4402
|
+
// (response) => response.validation === 'symbolic' || Object.keys(response.alternates || {}).length > 0,
|
|
4403
|
+
// );
|
|
4412
4404
|
|
|
4413
4405
|
if (env.mode === 'evaluate') {
|
|
4414
4406
|
out.correctResponse = {};
|
|
4415
|
-
out.config.showNote = showNote;
|
|
4416
|
-
out.config.note = note;
|
|
4407
|
+
// out.config.showNote = showNote;
|
|
4408
|
+
// out.config.note = note;
|
|
4417
4409
|
} else {
|
|
4418
4410
|
out.config.responses = [];
|
|
4419
4411
|
out.config.showNote = false;
|
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.4+7fb2c7aaf",
|
|
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": "7fb2c7aafd9e948f1f47444fff4e34ce96813267",
|
|
28
28
|
"module": "src/index.js",
|
|
29
29
|
"exports": {
|
|
30
30
|
".": "./src/index.js",
|