@pie-element/math-templated 6.1.1-next.5 → 6.2.0-next.1

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/CHANGELOG.md CHANGED
@@ -3,6 +3,22 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [6.2.0-next.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/math-templated@6.2.0-next.0...@pie-element/math-templated@6.2.0-next.1) (2026-03-19)
7
+
8
+ ### Features
9
+
10
+ - bump libs PD-5669, PD-5530, PD-5496,PD-5501, PD-5790, PD-5622, PD-5811, PD-5590, PD-5510 ([1c7cfc4](https://github.com/pie-framework/pie-elements/commit/1c7cfc4ea91dfd631b9e2ca23810b65a4a4585cf))
11
+
12
+ # [6.2.0-next.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/math-templated@6.1.1-next.5...@pie-element/math-templated@6.2.0-next.0) (2026-03-18)
13
+
14
+ ### Bug Fixes
15
+
16
+ - remove extra space ([55be82c](https://github.com/pie-framework/pie-elements/commit/55be82c9ecc2cd00881fcaad732ae8403637486f))
17
+
18
+ ### Features
19
+
20
+ - **math-templated:** add scoring trace in outcome function PD-5468 ([8e80d77](https://github.com/pie-framework/pie-elements/commit/8e80d77babf46784d62a5b11b1575d6a8d433691))
21
+
6
22
  ## [6.1.1-next.5](https://github.com/pie-framework/pie-elements/compare/@pie-element/math-templated@6.1.1-next.4...@pie-element/math-templated@6.1.1-next.5) (2026-03-12)
7
23
 
8
24
  ### Bug Fixes
@@ -3,6 +3,12 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [4.2.0-next.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/math-templated-configure@4.1.1-next.4...@pie-element/math-templated-configure@4.2.0-next.0) (2026-03-19)
7
+
8
+ ### Features
9
+
10
+ - bump libs PD-5669, PD-5530, PD-5496,PD-5501, PD-5790, PD-5622, PD-5811, PD-5590, PD-5510 ([1c7cfc4](https://github.com/pie-framework/pie-elements/commit/1c7cfc4ea91dfd631b9e2ca23810b65a4a4585cf))
11
+
6
12
  ## [4.1.1-next.4](https://github.com/pie-framework/pie-elements/compare/@pie-element/math-templated-configure@4.1.1-next.3...@pie-element/math-templated-configure@4.1.1-next.4) (2026-03-12)
7
13
 
8
14
  ### Bug Fixes
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pie-element/math-templated-configure",
3
3
  "private": true,
4
- "version": "4.1.1-next.4",
4
+ "version": "4.2.0-next.0",
5
5
  "description": "",
6
6
  "main": "lib/index.js",
7
7
  "module": "src/index.js",
@@ -11,10 +11,10 @@
11
11
  "@mui/icons-material": "^7.3.4",
12
12
  "@mui/material": "^7.3.4",
13
13
  "@pie-framework/pie-configure-events": "^1.3.0",
14
- "@pie-lib/config-ui": "12.2.0-next.17",
15
- "@pie-lib/editable-html-tip-tap": "1.2.0-next.16",
16
- "@pie-lib/math-toolbar": "2.2.0-next.9",
17
- "@pie-lib/render-ui": "5.2.0-next.4",
14
+ "@pie-lib/config-ui": "12.2.0-next.20",
15
+ "@pie-lib/editable-html-tip-tap": "1.2.0-next.19",
16
+ "@pie-lib/math-toolbar": "2.2.0-next.11",
17
+ "@pie-lib/render-ui": "5.2.0-next.6",
18
18
  "debug": "^4.1.1",
19
19
  "lodash-es": "^4.17.23",
20
20
  "prop-types": "^15.8.1",
@@ -3,6 +3,16 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [5.2.0-next.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/math-templated-controller@5.1.1-next.1...@pie-element/math-templated-controller@5.2.0-next.0) (2026-03-18)
7
+
8
+ ### Bug Fixes
9
+
10
+ - remove extra space ([55be82c](https://github.com/pie-framework/pie-elements/commit/55be82c9ecc2cd00881fcaad732ae8403637486f))
11
+
12
+ ### Features
13
+
14
+ - **math-templated:** add scoring trace in outcome function PD-5468 ([8e80d77](https://github.com/pie-framework/pie-elements/commit/8e80d77babf46784d62a5b11b1575d6a8d433691))
15
+
6
16
  ## [5.1.1-next.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/math-templated-controller@5.1.0-next.2...@pie-element/math-templated-controller@5.1.1-next.1) (2026-02-26)
7
17
 
8
18
  **Note:** Version bump only for package @pie-element/math-templated-controller
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.validate = exports.prepareVal = exports.outcome = exports.normalizeSession = exports.model = exports.getPartialScore = exports.getCorrectness = exports.createDefaultModel = exports.createCorrectResponseSession = void 0;
7
+ exports.validate = exports.prepareVal = exports.outcome = exports.normalizeSession = exports.model = exports.getPartialScore = exports.getLogTrace = exports.getCorrectness = exports.createDefaultModel = exports.createCorrectResponseSession = void 0;
8
8
  var _debug = _interopRequireDefault(require("debug"));
9
9
  var _lodashEs = require("lodash-es");
10
10
  var _translator = _interopRequireDefault(require("@pie-lib/translator"));
@@ -87,26 +87,97 @@ const getPartialScore = (question, session) => {
87
87
  }
88
88
  return 1;
89
89
  };
90
+
91
+ /**
92
+ * Generates detailed trace log for math-templated scoring evaluation
93
+ * @param {Object} question
94
+ * @param {Object} session
95
+ * @param {Object} env
96
+ * @returns {Array<string>} traceLog
97
+ */
90
98
  exports.getPartialScore = getPartialScore;
99
+ const getLogTrace = (question, session, env) => {
100
+ const traceLog = [];
101
+ if (!session || !session.answers || Object.keys(session.answers).length === 0) {
102
+ traceLog.push('Student did not enter a response.');
103
+ return traceLog;
104
+ }
105
+ const answers = session.answers;
106
+ const responseIds = Object.keys(question.responses || {});
107
+ const totalAreas = responseIds.length;
108
+ traceLog.push(`${totalAreas} response area(s) defined in this question.`);
109
+ let answeredCount = 0;
110
+ let correctCount = 0;
111
+ responseIds.forEach((responseId, index) => {
112
+ const answerItem = answers[`r${responseId}`];
113
+ const studentValue = answerItem?.value?.trim();
114
+ const correctResponse = question.responses[responseId] || {};
115
+ const cleanStudentAnswer = studentValue ? studentValue.replace(/\\/g, '') : '';
116
+ if (studentValue) {
117
+ answeredCount++;
118
+ traceLog.push(`Response area ${index + 1}: student entered ${cleanStudentAnswer}.`);
119
+ } else {
120
+ traceLog.push(`Response area ${index + 1}: no response entered.`);
121
+ }
122
+ const validation = correctResponse.validation || question.validationDefault;
123
+ traceLog.push(`Validation mode: ${validation}.`);
124
+ if (validation === 'literal') {
125
+ const allowTrailingZeros = correctResponse.allowTrailingZeros || false;
126
+ const ignoreOrder = correctResponse.ignoreOrder || false;
127
+ traceLog.push(`Allow trailing zeros: ${allowTrailingZeros ? 'enabled' : 'disabled'}.`);
128
+ traceLog.push(`Ignore order: ${ignoreOrder ? 'enabled' : 'disabled'}.`);
129
+ }
130
+ const acceptedValues = [correctResponse.answer].concat(Object.values(correctResponse.alternates || {}));
131
+ if (acceptedValues.length > 1) {
132
+ traceLog.push(`Accepted answers: ${acceptedValues.length} (including alternates).`);
133
+ }
134
+ if (studentValue) {
135
+ const isCorrect = getIsAnswerCorrect(correctResponse, answerItem);
136
+ if (isCorrect) {
137
+ correctCount++;
138
+ traceLog.push(`Response area ${index + 1} is correct.`);
139
+ } else {
140
+ traceLog.push(`Response area ${index + 1} is incorrect.`);
141
+ }
142
+ }
143
+ });
144
+ traceLog.push(`${correctCount} out of ${totalAreas} response area(s) are correct.`);
145
+ const partialScoringEnabled = _controllerUtils.partialScoring.enabled(question, env);
146
+ traceLog.push(`Scoring method: ${partialScoringEnabled ? 'partial scoring' : 'all-or-nothing scoring'}.`);
147
+ if (partialScoringEnabled) {
148
+ traceLog.push('Each correct response area contributes to the score.');
149
+ } else {
150
+ traceLog.push('Student must answer all response areas correctly to receive full credit.');
151
+ }
152
+ const correctness = getCorrectness(question, env, session);
153
+ traceLog.push(`Overall correctness: ${correctness.correctness}.`);
154
+ traceLog.push(`Final score: ${correctness.score}.`);
155
+ return traceLog;
156
+ };
157
+ exports.getLogTrace = getLogTrace;
91
158
  const outcome = (question, session, env) => new Promise(resolve => {
92
159
  if (!session || (0, _lodashEs.isEmpty)(session)) {
93
160
  resolve({
94
161
  score: 0,
95
- empty: true
162
+ empty: true,
163
+ logTrace: ['Student did not enter a response.']
96
164
  });
165
+ return;
97
166
  }
98
167
  const partialScoringEnabled = _controllerUtils.partialScoring.enabled(question, env);
99
168
  session = normalizeSession(session);
100
169
  if (env.mode !== 'evaluate') {
101
170
  resolve({
102
171
  score: undefined,
103
- completed: undefined
172
+ completed: undefined,
173
+ logTrace: []
104
174
  });
105
175
  } else {
106
176
  const correctness = getCorrectness(question, env, session, true);
107
177
  const score = correctness.score;
108
178
  resolve({
109
- score: partialScoringEnabled ? score : score === 1 ? 1 : 0
179
+ score: partialScoringEnabled ? score : score === 1 ? 1 : 0,
180
+ logTrace: getLogTrace(question, session, env)
110
181
  });
111
182
  }
112
183
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_debug","_interopRequireDefault","require","_lodashEs","_translator","mv","_interopRequireWildcard","_defaults","_controllerUtils","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","translator","Translator","log","debug","getFeedback","value","getContent","html","replace","getIsAnswerCorrect","correctResponse","answerItem","answerCorrect","opts","mode","validation","defaults","validationDefault","literal","allowTrailingZeros","ignoreOrder","acceptedValues","answer","values","alternates","latexEqual","getResponseCorrectness","question","sessionResponse","correctResponses","responses","correctness","score","correct","correctAnswers","correctResponsesCount","keys","length","forEach","responseId","fullyCorrect","Number","toFixed","getCorrectness","env","session","answers","exports","getPartialScore","isEmpty","outcome","Promise","resolve","empty","partialScoringEnabled","partialScoring","enabled","normalizeSession","undefined","completed","createDefaultModel","model","allowTrailingZerosDefault","ignoreOrderDefault","updatedResponses","reduce","acc","s","getTextFromHTML","prepareVal","trim","normalizedQuestion","language","note","showNote","lng","out","prompt","promptEnabled","markup","equationEditor","customKeys","disabled","view","extraCSSRules","feedback","role","rationale","rationaleEnabled","teacherInstructions","teacherInstructionsEnabled","createCorrectResponseSession","id","validate","config","maxResponseAreas","responsesErrors","errors","field","required","entries","key","response","index","reversedAlternates","reverse","alternatesErrors","responseError","identicalAnswer","slice","some","val","nbOfResponseAreas","match","responseAreas"],"sources":["../src/index.js"],"sourcesContent":["import debug from 'debug';\nimport { isEmpty } from 'lodash-es';\nimport Translator from '@pie-lib/translator';\nimport * as mv from '@pie-framework/math-validation';\n\nimport defaults from './defaults';\nimport { partialScoring } from '@pie-lib/controller-utils';\n\nconst { translator } = Translator;\nconst log = debug('@pie-element:math-templated:controller');\n\nconst getFeedback = (value) => (value ? 'correct' : 'incorrect');\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');\n\nconst getIsAnswerCorrect = (correctResponse, answerItem) => {\n let answerCorrect = false;\n\n const opts = {\n mode: correctResponse.validation || defaults.validationDefault,\n ...(correctResponse.validation === 'literal' && {\n literal: {\n allowTrailingZeros: correctResponse.allowTrailingZeros || false,\n ignoreOrder: correctResponse.ignoreOrder || false,\n },\n }),\n };\n\n if (!answerCorrect) {\n const acceptedValues = [correctResponse.answer, ...Object.values(correctResponse.alternates || {})];\n\n try {\n for (const value of acceptedValues) {\n answerCorrect = mv.latexEqual(answerItem.value, value, opts);\n if (answerCorrect) break;\n }\n } catch (e) {\n log('Parse failure when evaluating math', e, correctResponse, answerItem);\n answerCorrect = false;\n }\n }\n\n return answerCorrect;\n};\n\nconst getResponseCorrectness = (question, sessionResponse) => {\n const correctResponses = question.responses;\n\n if (!sessionResponse) {\n return {\n correctness: 'unanswered',\n score: 0,\n correct: false,\n };\n } else {\n let correctAnswers = 0;\n let score = 0;\n const correctResponsesCount = Object.keys(correctResponses || {}).length;\n\n Object.keys(correctResponses).forEach((responseId) => {\n const answerItem = sessionResponse['r' + responseId];\n const correctResponse = correctResponses[responseId] || {};\n\n const answerCorrect = getIsAnswerCorrect(correctResponse, answerItem);\n if (answerCorrect) {\n correctAnswers++;\n }\n });\n\n const fullyCorrect = correctAnswers === correctResponsesCount;\n\n // partial credit scoring: each correct answer is worth 1 / total answers point\n // dichotomous scoring: for credit to be awarded, a correct answer must be entered for every response area\n score = Number((correctAnswers / Object.keys(correctResponses).length).toFixed(2));\n\n return {\n correctness: getFeedback(fullyCorrect),\n score: correctAnswers > 0 ? score : 0,\n correct: fullyCorrect,\n };\n }\n};\n\nexport const getCorrectness = (question, env, session) => {\n if (env.mode === 'evaluate') {\n return getResponseCorrectness(question, session && session.answers);\n }\n};\n\nexport const getPartialScore = (question, session) => {\n if (!session || isEmpty(session)) {\n return 0;\n }\n\n return 1;\n};\n\nexport const outcome = (question, session, env) =>\n new Promise((resolve) => {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n }\n const partialScoringEnabled = partialScoring.enabled(question, env);\n session = normalizeSession(session);\n\n if (env.mode !== 'evaluate') {\n resolve({ score: undefined, completed: undefined });\n } else {\n const correctness = getCorrectness(question, env, session, true);\n const score = correctness.score;\n\n resolve({ score: partialScoringEnabled ? score : score === 1 ? 1 : 0 });\n }\n });\n\nexport const createDefaultModel = (model = {}) => {\n const { validationDefault, allowTrailingZerosDefault, ignoreOrderDefault, responses = {} } = model;\n\n const updatedResponses = Object.keys(responses).reduce((acc, responseId) => {\n const correctResponse = responses[responseId];\n\n acc[responseId] = {\n ...correctResponse,\n validation: correctResponse.validation || validationDefault,\n allowTrailingZeros: correctResponse.allowTrailingZeros || allowTrailingZerosDefault,\n ignoreOrder: correctResponse.ignoreOrder || ignoreOrderDefault,\n };\n\n return acc;\n }, {});\n\n return {\n ...defaults.model,\n ...model,\n responses: updatedResponses,\n };\n};\n\nexport const normalizeSession = (s) => ({ ...s });\n\nconst getTextFromHTML = (html) => (html || '').replace(/<\\/?[^>]+(>|$)/g, '');\n\nexport const prepareVal = (html) => getTextFromHTML(html).trim();\n\nexport const model = (question, session, env) => {\n return new Promise((resolve) => {\n session = session || {};\n const normalizedQuestion = createDefaultModel(question);\n const correctness = getCorrectness(normalizedQuestion, env, session);\n const { responses, language } = normalizedQuestion;\n let { note } = normalizedQuestion;\n let showNote = false;\n\n // check if there is at least one alternate response or if the validation for at least one response is not literal\n Object.keys(responses).forEach((responseId) => {\n const correctResponse = responses[responseId] || {};\n if (correctResponse.alternates && Object.keys(correctResponse.alternates).length > 0) {\n showNote = true;\n } else if (correctResponse.validation !== 'literal') {\n showNote = true;\n }\n });\n\n if (!note) {\n note = translator.t('mathInline.primaryCorrectWithAlternates', { lng: language });\n }\n\n const out = {\n prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null,\n markup: normalizedQuestion.markup,\n responses: env.mode === 'gather' ? null : normalizedQuestion.responses,\n language: normalizedQuestion.language,\n equationEditor: normalizedQuestion.equationEditor,\n customKeys: normalizedQuestion.customKeys,\n disabled: env.mode !== 'gather',\n view: env.mode === 'view',\n correctness,\n env,\n extraCSSRules: normalizedQuestion.extraCSSRules,\n };\n\n const { answers = {} } = session || {};\n let feedback = {};\n\n if (env.mode === 'evaluate') {\n Object.keys(responses).forEach((responseId) => {\n const answerItem = answers['r' + responseId];\n const correctResponse = responses[responseId];\n feedback[responseId] = getIsAnswerCorrect(correctResponse, answerItem);\n });\n }\n\n if (env.mode === 'evaluate') {\n out.correctResponse = {};\n out.showNote = showNote;\n out.note = note;\n out.feedback = feedback;\n } else {\n out.responses = {};\n out.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 }\n\n log('out: ', out);\n resolve(out);\n });\n};\n\nexport const createCorrectResponseSession = (question, env) =>\n new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const correctResponse = Object.keys(question.responses).reduce((acc, responseId) => {\n acc['r' + responseId] = { value: question.responses[responseId].answer };\n return acc;\n }, {});\n\n resolve({ id: '1', answers: correctResponse });\n } else {\n resolve(null);\n }\n });\n\nexport const validate = (model = {}, config = {}) => {\n const { responses, markup } = 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 Object.entries(responses || {}).forEach(([key, 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 const nbOfResponseAreas = (markup.match(/\\{\\{(\\d+)\\}\\}/g) || []).length;\n\n if (nbOfResponseAreas > maxResponseAreas) {\n errors.responseAreas = `No more than ${maxResponseAreas} response areas should be defined.`;\n } else if (nbOfResponseAreas < 1) {\n errors.responseAreas = 'There should be at least 1 response area defined.';\n }\n\n if (!isEmpty(responsesErrors)) {\n errors.responses = responsesErrors;\n }\n\n return errors;\n};\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,SAAA,GAAAD,OAAA;AACA,IAAAE,WAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,EAAA,GAAAC,uBAAA,CAAAJ,OAAA;AAEA,IAAAK,SAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,gBAAA,GAAAN,OAAA;AAA2D,SAAAI,wBAAAG,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAL,uBAAA,YAAAA,CAAAG,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAE3D,MAAM;EAAEkB;AAAW,CAAC,GAAGC,mBAAU;AACjC,MAAMC,GAAG,GAAG,IAAAC,cAAK,EAAC,wCAAwC,CAAC;AAE3D,MAAMC,WAAW,GAAIC,KAAK,IAAMA,KAAK,GAAG,SAAS,GAAG,WAAY;AAChE,MAAMC,UAAU,GAAIC,IAAI,IAAK,CAACA,IAAI,IAAI,EAAE,EAAEC,OAAO,CAAC,oCAAoC,EAAE,EAAE,CAAC;AAE3F,MAAMC,kBAAkB,GAAGA,CAACC,eAAe,EAAEC,UAAU,KAAK;EAC1D,IAAIC,aAAa,GAAG,KAAK;EAEzB,MAAMC,IAAI,GAAG;IACXC,IAAI,EAAEJ,eAAe,CAACK,UAAU,IAAIC,iBAAQ,CAACC,iBAAiB;IAC9D,IAAIP,eAAe,CAACK,UAAU,KAAK,SAAS,IAAI;MAC9CG,OAAO,EAAE;QACPC,kBAAkB,EAAET,eAAe,CAACS,kBAAkB,IAAI,KAAK;QAC/DC,WAAW,EAAEV,eAAe,CAACU,WAAW,IAAI;MAC9C;IACF,CAAC;EACH,CAAC;EAED,IAAI,CAACR,aAAa,EAAE;IAClB,MAAMS,cAAc,GAAG,CAACX,eAAe,CAACY,MAAM,EAAE,GAAGzB,MAAM,CAAC0B,MAAM,CAACb,eAAe,CAACc,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC;IAEnG,IAAI;MACF,KAAK,MAAMnB,KAAK,IAAIgB,cAAc,EAAE;QAClCT,aAAa,GAAGnC,EAAE,CAACgD,UAAU,CAACd,UAAU,CAACN,KAAK,EAAEA,KAAK,EAAEQ,IAAI,CAAC;QAC5D,IAAID,aAAa,EAAE;MACrB;IACF,CAAC,CAAC,OAAO/B,CAAC,EAAE;MACVqB,GAAG,CAAC,oCAAoC,EAAErB,CAAC,EAAE6B,eAAe,EAAEC,UAAU,CAAC;MACzEC,aAAa,GAAG,KAAK;IACvB;EACF;EAEA,OAAOA,aAAa;AACtB,CAAC;AAED,MAAMc,sBAAsB,GAAGA,CAACC,QAAQ,EAAEC,eAAe,KAAK;EAC5D,MAAMC,gBAAgB,GAAGF,QAAQ,CAACG,SAAS;EAE3C,IAAI,CAACF,eAAe,EAAE;IACpB,OAAO;MACLG,WAAW,EAAE,YAAY;MACzBC,KAAK,EAAE,CAAC;MACRC,OAAO,EAAE;IACX,CAAC;EACH,CAAC,MAAM;IACL,IAAIC,cAAc,GAAG,CAAC;IACtB,IAAIF,KAAK,GAAG,CAAC;IACb,MAAMG,qBAAqB,GAAGtC,MAAM,CAACuC,IAAI,CAACP,gBAAgB,IAAI,CAAC,CAAC,CAAC,CAACQ,MAAM;IAExExC,MAAM,CAACuC,IAAI,CAACP,gBAAgB,CAAC,CAACS,OAAO,CAAEC,UAAU,IAAK;MACpD,MAAM5B,UAAU,GAAGiB,eAAe,CAAC,GAAG,GAAGW,UAAU,CAAC;MACpD,MAAM7B,eAAe,GAAGmB,gBAAgB,CAACU,UAAU,CAAC,IAAI,CAAC,CAAC;MAE1D,MAAM3B,aAAa,GAAGH,kBAAkB,CAACC,eAAe,EAAEC,UAAU,CAAC;MACrE,IAAIC,aAAa,EAAE;QACjBsB,cAAc,EAAE;MAClB;IACF,CAAC,CAAC;IAEF,MAAMM,YAAY,GAAGN,cAAc,KAAKC,qBAAqB;;IAE7D;IACA;IACAH,KAAK,GAAGS,MAAM,CAAC,CAACP,cAAc,GAAGrC,MAAM,CAACuC,IAAI,CAACP,gBAAgB,CAAC,CAACQ,MAAM,EAAEK,OAAO,CAAC,CAAC,CAAC,CAAC;IAElF,OAAO;MACLX,WAAW,EAAE3B,WAAW,CAACoC,YAAY,CAAC;MACtCR,KAAK,EAAEE,cAAc,GAAG,CAAC,GAAGF,KAAK,GAAG,CAAC;MACrCC,OAAO,EAAEO;IACX,CAAC;EACH;AACF,CAAC;AAEM,MAAMG,cAAc,GAAGA,CAAChB,QAAQ,EAAEiB,GAAG,EAAEC,OAAO,KAAK;EACxD,IAAID,GAAG,CAAC9B,IAAI,KAAK,UAAU,EAAE;IAC3B,OAAOY,sBAAsB,CAACC,QAAQ,EAAEkB,OAAO,IAAIA,OAAO,CAACC,OAAO,CAAC;EACrE;AACF,CAAC;AAACC,OAAA,CAAAJ,cAAA,GAAAA,cAAA;AAEK,MAAMK,eAAe,GAAGA,CAACrB,QAAQ,EAAEkB,OAAO,KAAK;EACpD,IAAI,CAACA,OAAO,IAAI,IAAAI,iBAAO,EAACJ,OAAO,CAAC,EAAE;IAChC,OAAO,CAAC;EACV;EAEA,OAAO,CAAC;AACV,CAAC;AAACE,OAAA,CAAAC,eAAA,GAAAA,eAAA;AAEK,MAAME,OAAO,GAAGA,CAACvB,QAAQ,EAAEkB,OAAO,EAAED,GAAG,KAC5C,IAAIO,OAAO,CAAEC,OAAO,IAAK;EACvB,IAAI,CAACP,OAAO,IAAI,IAAAI,iBAAO,EAACJ,OAAO,CAAC,EAAE;IAChCO,OAAO,CAAC;MAAEpB,KAAK,EAAE,CAAC;MAAEqB,KAAK,EAAE;IAAK,CAAC,CAAC;EACpC;EACA,MAAMC,qBAAqB,GAAGC,+BAAc,CAACC,OAAO,CAAC7B,QAAQ,EAAEiB,GAAG,CAAC;EACnEC,OAAO,GAAGY,gBAAgB,CAACZ,OAAO,CAAC;EAEnC,IAAID,GAAG,CAAC9B,IAAI,KAAK,UAAU,EAAE;IAC3BsC,OAAO,CAAC;MAAEpB,KAAK,EAAE0B,SAAS;MAAEC,SAAS,EAAED;IAAU,CAAC,CAAC;EACrD,CAAC,MAAM;IACL,MAAM3B,WAAW,GAAGY,cAAc,CAAChB,QAAQ,EAAEiB,GAAG,EAAEC,OAAO,EAAE,IAAI,CAAC;IAChE,MAAMb,KAAK,GAAGD,WAAW,CAACC,KAAK;IAE/BoB,OAAO,CAAC;MAAEpB,KAAK,EAAEsB,qBAAqB,GAAGtB,KAAK,GAAGA,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG;IAAE,CAAC,CAAC;EACzE;AACF,CAAC,CAAC;AAACe,OAAA,CAAAG,OAAA,GAAAA,OAAA;AAEE,MAAMU,kBAAkB,GAAGA,CAACC,KAAK,GAAG,CAAC,CAAC,KAAK;EAChD,MAAM;IAAE5C,iBAAiB;IAAE6C,yBAAyB;IAAEC,kBAAkB;IAAEjC,SAAS,GAAG,CAAC;EAAE,CAAC,GAAG+B,KAAK;EAElG,MAAMG,gBAAgB,GAAGnE,MAAM,CAACuC,IAAI,CAACN,SAAS,CAAC,CAACmC,MAAM,CAAC,CAACC,GAAG,EAAE3B,UAAU,KAAK;IAC1E,MAAM7B,eAAe,GAAGoB,SAAS,CAACS,UAAU,CAAC;IAE7C2B,GAAG,CAAC3B,UAAU,CAAC,GAAG;MAChB,GAAG7B,eAAe;MAClBK,UAAU,EAAEL,eAAe,CAACK,UAAU,IAAIE,iBAAiB;MAC3DE,kBAAkB,EAAET,eAAe,CAACS,kBAAkB,IAAI2C,yBAAyB;MACnF1C,WAAW,EAAEV,eAAe,CAACU,WAAW,IAAI2C;IAC9C,CAAC;IAED,OAAOG,GAAG;EACZ,CAAC,EAAE,CAAC,CAAC,CAAC;EAEN,OAAO;IACL,GAAGlD,iBAAQ,CAAC6C,KAAK;IACjB,GAAGA,KAAK;IACR/B,SAAS,EAAEkC;EACb,CAAC;AACH,CAAC;AAACjB,OAAA,CAAAa,kBAAA,GAAAA,kBAAA;AAEK,MAAMH,gBAAgB,GAAIU,CAAC,KAAM;EAAE,GAAGA;AAAE,CAAC,CAAC;AAACpB,OAAA,CAAAU,gBAAA,GAAAA,gBAAA;AAElD,MAAMW,eAAe,GAAI7D,IAAI,IAAK,CAACA,IAAI,IAAI,EAAE,EAAEC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC;AAEtE,MAAM6D,UAAU,GAAI9D,IAAI,IAAK6D,eAAe,CAAC7D,IAAI,CAAC,CAAC+D,IAAI,CAAC,CAAC;AAACvB,OAAA,CAAAsB,UAAA,GAAAA,UAAA;AAE1D,MAAMR,KAAK,GAAGA,CAAClC,QAAQ,EAAEkB,OAAO,EAAED,GAAG,KAAK;EAC/C,OAAO,IAAIO,OAAO,CAAEC,OAAO,IAAK;IAC9BP,OAAO,GAAGA,OAAO,IAAI,CAAC,CAAC;IACvB,MAAM0B,kBAAkB,GAAGX,kBAAkB,CAACjC,QAAQ,CAAC;IACvD,MAAMI,WAAW,GAAGY,cAAc,CAAC4B,kBAAkB,EAAE3B,GAAG,EAAEC,OAAO,CAAC;IACpE,MAAM;MAAEf,SAAS;MAAE0C;IAAS,CAAC,GAAGD,kBAAkB;IAClD,IAAI;MAAEE;IAAK,CAAC,GAAGF,kBAAkB;IACjC,IAAIG,QAAQ,GAAG,KAAK;;IAEpB;IACA7E,MAAM,CAACuC,IAAI,CAACN,SAAS,CAAC,CAACQ,OAAO,CAAEC,UAAU,IAAK;MAC7C,MAAM7B,eAAe,GAAGoB,SAAS,CAACS,UAAU,CAAC,IAAI,CAAC,CAAC;MACnD,IAAI7B,eAAe,CAACc,UAAU,IAAI3B,MAAM,CAACuC,IAAI,CAAC1B,eAAe,CAACc,UAAU,CAAC,CAACa,MAAM,GAAG,CAAC,EAAE;QACpFqC,QAAQ,GAAG,IAAI;MACjB,CAAC,MAAM,IAAIhE,eAAe,CAACK,UAAU,KAAK,SAAS,EAAE;QACnD2D,QAAQ,GAAG,IAAI;MACjB;IACF,CAAC,CAAC;IAEF,IAAI,CAACD,IAAI,EAAE;MACTA,IAAI,GAAGzE,UAAU,CAAClB,CAAC,CAAC,yCAAyC,EAAE;QAAE6F,GAAG,EAAEH;MAAS,CAAC,CAAC;IACnF;IAEA,MAAMI,GAAG,GAAG;MACVC,MAAM,EAAEN,kBAAkB,CAACO,aAAa,GAAGP,kBAAkB,CAACM,MAAM,GAAG,IAAI;MAC3EE,MAAM,EAAER,kBAAkB,CAACQ,MAAM;MACjCjD,SAAS,EAAEc,GAAG,CAAC9B,IAAI,KAAK,QAAQ,GAAG,IAAI,GAAGyD,kBAAkB,CAACzC,SAAS;MACtE0C,QAAQ,EAAED,kBAAkB,CAACC,QAAQ;MACrCQ,cAAc,EAAET,kBAAkB,CAACS,cAAc;MACjDC,UAAU,EAAEV,kBAAkB,CAACU,UAAU;MACzCC,QAAQ,EAAEtC,GAAG,CAAC9B,IAAI,KAAK,QAAQ;MAC/BqE,IAAI,EAAEvC,GAAG,CAAC9B,IAAI,KAAK,MAAM;MACzBiB,WAAW;MACXa,GAAG;MACHwC,aAAa,EAAEb,kBAAkB,CAACa;IACpC,CAAC;IAED,MAAM;MAAEtC,OAAO,GAAG,CAAC;IAAE,CAAC,GAAGD,OAAO,IAAI,CAAC,CAAC;IACtC,IAAIwC,QAAQ,GAAG,CAAC,CAAC;IAEjB,IAAIzC,GAAG,CAAC9B,IAAI,KAAK,UAAU,EAAE;MAC3BjB,MAAM,CAACuC,IAAI,CAACN,SAAS,CAAC,CAACQ,OAAO,CAAEC,UAAU,IAAK;QAC7C,MAAM5B,UAAU,GAAGmC,OAAO,CAAC,GAAG,GAAGP,UAAU,CAAC;QAC5C,MAAM7B,eAAe,GAAGoB,SAAS,CAACS,UAAU,CAAC;QAC7C8C,QAAQ,CAAC9C,UAAU,CAAC,GAAG9B,kBAAkB,CAACC,eAAe,EAAEC,UAAU,CAAC;MACxE,CAAC,CAAC;IACJ;IAEA,IAAIiC,GAAG,CAAC9B,IAAI,KAAK,UAAU,EAAE;MAC3B8D,GAAG,CAAClE,eAAe,GAAG,CAAC,CAAC;MACxBkE,GAAG,CAACF,QAAQ,GAAGA,QAAQ;MACvBE,GAAG,CAACH,IAAI,GAAGA,IAAI;MACfG,GAAG,CAACS,QAAQ,GAAGA,QAAQ;IACzB,CAAC,MAAM;MACLT,GAAG,CAAC9C,SAAS,GAAG,CAAC,CAAC;MAClB8C,GAAG,CAACF,QAAQ,GAAG,KAAK;IACtB;IAEA,IAAI9B,GAAG,CAAC0C,IAAI,KAAK,YAAY,KAAK1C,GAAG,CAAC9B,IAAI,KAAK,MAAM,IAAI8B,GAAG,CAAC9B,IAAI,KAAK,UAAU,CAAC,EAAE;MACjF8D,GAAG,CAACW,SAAS,GAAGhB,kBAAkB,CAACiB,gBAAgB,GAAGjB,kBAAkB,CAACgB,SAAS,GAAG,IAAI;MACzFX,GAAG,CAACa,mBAAmB,GAAGlB,kBAAkB,CAACmB,0BAA0B,GACnEnB,kBAAkB,CAACkB,mBAAmB,GACtC,IAAI;IACV,CAAC,MAAM;MACLb,GAAG,CAACW,SAAS,GAAG,IAAI;MACpBX,GAAG,CAACa,mBAAmB,GAAG,IAAI;IAChC;IAEAvF,GAAG,CAAC,OAAO,EAAE0E,GAAG,CAAC;IACjBxB,OAAO,CAACwB,GAAG,CAAC;EACd,CAAC,CAAC;AACJ,CAAC;AAAC7B,OAAA,CAAAc,KAAA,GAAAA,KAAA;AAEK,MAAM8B,4BAA4B,GAAGA,CAAChE,QAAQ,EAAEiB,GAAG,KACxD,IAAIO,OAAO,CAAEC,OAAO,IAAK;EACvB,IAAIR,GAAG,CAAC9B,IAAI,KAAK,UAAU,IAAI8B,GAAG,CAAC0C,IAAI,KAAK,YAAY,EAAE;IACxD,MAAM5E,eAAe,GAAGb,MAAM,CAACuC,IAAI,CAACT,QAAQ,CAACG,SAAS,CAAC,CAACmC,MAAM,CAAC,CAACC,GAAG,EAAE3B,UAAU,KAAK;MAClF2B,GAAG,CAAC,GAAG,GAAG3B,UAAU,CAAC,GAAG;QAAElC,KAAK,EAAEsB,QAAQ,CAACG,SAAS,CAACS,UAAU,CAAC,CAACjB;MAAO,CAAC;MACxE,OAAO4C,GAAG;IACZ,CAAC,EAAE,CAAC,CAAC,CAAC;IAENd,OAAO,CAAC;MAAEwC,EAAE,EAAE,GAAG;MAAE9C,OAAO,EAAEpC;IAAgB,CAAC,CAAC;EAChD,CAAC,MAAM;IACL0C,OAAO,CAAC,IAAI,CAAC;EACf;AACF,CAAC,CAAC;AAACL,OAAA,CAAA4C,4BAAA,GAAAA,4BAAA;AAEE,MAAME,QAAQ,GAAGA,CAAChC,KAAK,GAAG,CAAC,CAAC,EAAEiC,MAAM,GAAG,CAAC,CAAC,KAAK;EACnD,MAAM;IAAEhE,SAAS;IAAEiD;EAAO,CAAC,GAAGlB,KAAK;EACnC,MAAM;IAAEkC;EAAiB,CAAC,GAAGD,MAAM;EACnC,MAAME,eAAe,GAAG,CAAC,CAAC;EAC1B,MAAMC,MAAM,GAAG,CAAC,CAAC;EAEjB,CAAC,qBAAqB,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC3D,OAAO,CAAE4D,KAAK,IAAK;IAChE,IAAIJ,MAAM,CAACI,KAAK,CAAC,EAAEC,QAAQ,IAAI,CAAC7F,UAAU,CAACuD,KAAK,CAACqC,KAAK,CAAC,CAAC,EAAE;MACxDD,MAAM,CAACC,KAAK,CAAC,GAAG,yBAAyB;IAC3C;EACF,CAAC,CAAC;EAEFrG,MAAM,CAACuG,OAAO,CAACtE,SAAS,IAAI,CAAC,CAAC,CAAC,CAACQ,OAAO,CAAC,CAAC,CAAC+D,GAAG,EAAEC,QAAQ,CAAC,EAAEC,KAAK,KAAK;IAClE,MAAM;MAAEjF;IAAO,CAAC,GAAGgF,QAAQ;IAC3B,MAAME,kBAAkB,GAAG,CAAC,GAAG3G,MAAM,CAACuG,OAAO,CAACE,QAAQ,CAAC9E,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,CAACiF,OAAO,CAAC,CAAC;IACnF,MAAMC,gBAAgB,GAAG,CAAC,CAAC;IAC3B,MAAMC,aAAa,GAAG,CAAC,CAAC;IAExB,IAAIrF,MAAM,KAAK,EAAE,EAAE;MACjBqF,aAAa,CAACrF,MAAM,GAAG,8BAA8B;IACvD;IAEAkF,kBAAkB,CAAClE,OAAO,CAAC,CAAC,CAAC+D,GAAG,EAAEhG,KAAK,CAAC,EAAEkG,KAAK,KAAK;MAClD,IAAIlG,KAAK,KAAK,EAAE,EAAE;QAChBqG,gBAAgB,CAACL,GAAG,CAAC,GAAG,8BAA8B;MACxD,CAAC,MAAM;QACL,MAAMO,eAAe,GACnBtF,MAAM,KAAKjB,KAAK,IAAImG,kBAAkB,CAACK,KAAK,CAACN,KAAK,GAAG,CAAC,CAAC,CAACO,IAAI,CAAC,CAAC,GAAGC,GAAG,CAAC,KAAKA,GAAG,KAAK1G,KAAK,CAAC;QAE1F,IAAIuG,eAAe,EAAE;UACnBF,gBAAgB,CAACL,GAAG,CAAC,GAAG,2BAA2B;QACrD;MACF;IACF,CAAC,CAAC;IAEF,IAAI,CAAC,IAAApD,iBAAO,EAAC0D,aAAa,CAAC,IAAI,CAAC,IAAA1D,iBAAO,EAACyD,gBAAgB,CAAC,EAAE;MACzDV,eAAe,CAACO,KAAK,CAAC,GAAG;QAAE,GAAGI,aAAa;QAAE,GAAGD;MAAiB,CAAC;IACpE;EACF,CAAC,CAAC;EAEF,MAAMM,iBAAiB,GAAG,CAACjC,MAAM,CAACkC,KAAK,CAAC,gBAAgB,CAAC,IAAI,EAAE,EAAE5E,MAAM;EAEvE,IAAI2E,iBAAiB,GAAGjB,gBAAgB,EAAE;IACxCE,MAAM,CAACiB,aAAa,GAAG,gBAAgBnB,gBAAgB,oCAAoC;EAC7F,CAAC,MAAM,IAAIiB,iBAAiB,GAAG,CAAC,EAAE;IAChCf,MAAM,CAACiB,aAAa,GAAG,mDAAmD;EAC5E;EAEA,IAAI,CAAC,IAAAjE,iBAAO,EAAC+C,eAAe,CAAC,EAAE;IAC7BC,MAAM,CAACnE,SAAS,GAAGkE,eAAe;EACpC;EAEA,OAAOC,MAAM;AACf,CAAC;AAAClD,OAAA,CAAA8C,QAAA,GAAAA,QAAA","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_debug","_interopRequireDefault","require","_lodashEs","_translator","mv","_interopRequireWildcard","_defaults","_controllerUtils","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","translator","Translator","log","debug","getFeedback","value","getContent","html","replace","getIsAnswerCorrect","correctResponse","answerItem","answerCorrect","opts","mode","validation","defaults","validationDefault","literal","allowTrailingZeros","ignoreOrder","acceptedValues","answer","values","alternates","latexEqual","getResponseCorrectness","question","sessionResponse","correctResponses","responses","correctness","score","correct","correctAnswers","correctResponsesCount","keys","length","forEach","responseId","fullyCorrect","Number","toFixed","getCorrectness","env","session","answers","exports","getPartialScore","isEmpty","getLogTrace","traceLog","push","responseIds","totalAreas","answeredCount","correctCount","index","studentValue","trim","cleanStudentAnswer","concat","isCorrect","partialScoringEnabled","partialScoring","enabled","outcome","Promise","resolve","empty","logTrace","normalizeSession","undefined","completed","createDefaultModel","model","allowTrailingZerosDefault","ignoreOrderDefault","updatedResponses","reduce","acc","s","getTextFromHTML","prepareVal","normalizedQuestion","language","note","showNote","lng","out","prompt","promptEnabled","markup","equationEditor","customKeys","disabled","view","extraCSSRules","feedback","role","rationale","rationaleEnabled","teacherInstructions","teacherInstructionsEnabled","createCorrectResponseSession","id","validate","config","maxResponseAreas","responsesErrors","errors","field","required","entries","key","response","reversedAlternates","reverse","alternatesErrors","responseError","identicalAnswer","slice","some","val","nbOfResponseAreas","match","responseAreas"],"sources":["../src/index.js"],"sourcesContent":["import debug from 'debug';\nimport { isEmpty } from 'lodash-es';\nimport Translator from '@pie-lib/translator';\nimport * as mv from '@pie-framework/math-validation';\n\nimport defaults from './defaults';\nimport { partialScoring } from '@pie-lib/controller-utils';\n\nconst { translator } = Translator;\nconst log = debug('@pie-element:math-templated:controller');\n\nconst getFeedback = (value) => (value ? 'correct' : 'incorrect');\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');\n\nconst getIsAnswerCorrect = (correctResponse, answerItem) => {\n let answerCorrect = false;\n\n const opts = {\n mode: correctResponse.validation || defaults.validationDefault,\n ...(correctResponse.validation === 'literal' && {\n literal: {\n allowTrailingZeros: correctResponse.allowTrailingZeros || false,\n ignoreOrder: correctResponse.ignoreOrder || false,\n },\n }),\n };\n\n if (!answerCorrect) {\n const acceptedValues = [correctResponse.answer, ...Object.values(correctResponse.alternates || {})];\n\n try {\n for (const value of acceptedValues) {\n answerCorrect = mv.latexEqual(answerItem.value, value, opts);\n if (answerCorrect) break;\n }\n } catch (e) {\n log('Parse failure when evaluating math', e, correctResponse, answerItem);\n answerCorrect = false;\n }\n }\n\n return answerCorrect;\n};\n\nconst getResponseCorrectness = (question, sessionResponse) => {\n const correctResponses = question.responses;\n\n if (!sessionResponse) {\n return {\n correctness: 'unanswered',\n score: 0,\n correct: false,\n };\n } else {\n let correctAnswers = 0;\n let score = 0;\n const correctResponsesCount = Object.keys(correctResponses || {}).length;\n\n Object.keys(correctResponses).forEach((responseId) => {\n const answerItem = sessionResponse['r' + responseId];\n const correctResponse = correctResponses[responseId] || {};\n\n const answerCorrect = getIsAnswerCorrect(correctResponse, answerItem);\n if (answerCorrect) {\n correctAnswers++;\n }\n });\n\n const fullyCorrect = correctAnswers === correctResponsesCount;\n\n // partial credit scoring: each correct answer is worth 1 / total answers point\n // dichotomous scoring: for credit to be awarded, a correct answer must be entered for every response area\n score = Number((correctAnswers / Object.keys(correctResponses).length).toFixed(2));\n\n return {\n correctness: getFeedback(fullyCorrect),\n score: correctAnswers > 0 ? score : 0,\n correct: fullyCorrect,\n };\n }\n};\n\nexport const getCorrectness = (question, env, session) => {\n if (env.mode === 'evaluate') {\n return getResponseCorrectness(question, session && session.answers);\n }\n};\n\nexport const getPartialScore = (question, session) => {\n if (!session || isEmpty(session)) {\n return 0;\n }\n\n return 1;\n};\n\n/**\n * Generates detailed trace log for math-templated scoring evaluation\n * @param {Object} question\n * @param {Object} session\n * @param {Object} env\n * @returns {Array<string>} traceLog\n */\nexport const getLogTrace = (question, session, env) => {\n const traceLog = [];\n\n if (!session || !session.answers || Object.keys(session.answers).length === 0) {\n traceLog.push('Student did not enter a response.');\n return traceLog;\n }\n\n const answers = session.answers;\n const responseIds = Object.keys(question.responses || {});\n const totalAreas = responseIds.length;\n\n traceLog.push(`${totalAreas} response area(s) defined in this question.`);\n\n let answeredCount = 0;\n let correctCount = 0;\n\n responseIds.forEach((responseId, index) => {\n const answerItem = answers[`r${responseId}`];\n const studentValue = answerItem?.value?.trim();\n const correctResponse = question.responses[responseId] || {};\n\n const cleanStudentAnswer = studentValue ? studentValue.replace(/\\\\/g, '') : '';\n\n if (studentValue) {\n answeredCount++;\n traceLog.push(`Response area ${index + 1}: student entered ${cleanStudentAnswer}.`);\n } else {\n traceLog.push(`Response area ${index + 1}: no response entered.`);\n }\n\n const validation = correctResponse.validation || question.validationDefault;\n traceLog.push(`Validation mode: ${validation}.`);\n \n if (validation === 'literal') {\n const allowTrailingZeros = correctResponse.allowTrailingZeros || false;\n const ignoreOrder = correctResponse.ignoreOrder || false;\n \n traceLog.push(`Allow trailing zeros: ${allowTrailingZeros ? 'enabled' : 'disabled'}.`);\n traceLog.push(`Ignore order: ${ignoreOrder ? 'enabled' : 'disabled'}.`);\n }\n \n const acceptedValues = [correctResponse.answer].concat(\n Object.values(correctResponse.alternates || {})\n );\n \n if (acceptedValues.length > 1) {\n traceLog.push(`Accepted answers: ${acceptedValues.length} (including alternates).`);\n }\n\n if (studentValue) {\n const isCorrect = getIsAnswerCorrect(correctResponse, answerItem);\n if (isCorrect) {\n correctCount++;\n traceLog.push(`Response area ${index + 1} is correct.`);\n } else {\n traceLog.push(`Response area ${index + 1} is incorrect.`);\n }\n }\n });\n\n traceLog.push(`${correctCount} out of ${totalAreas} response area(s) are correct.`);\n\n const partialScoringEnabled = partialScoring.enabled(question, env);\n traceLog.push(\n `Scoring method: ${partialScoringEnabled ? 'partial scoring' : 'all-or-nothing scoring'}.`\n );\n\n if (partialScoringEnabled) {\n traceLog.push('Each correct response area contributes to the score.');\n } else {\n traceLog.push('Student must answer all response areas correctly to receive full credit.');\n }\n\n const correctness = getCorrectness(question, env, session);\n traceLog.push(`Overall correctness: ${correctness.correctness}.`);\n traceLog.push(`Final score: ${correctness.score}.`);\n\n return traceLog;\n};\n\nexport const outcome = (question, session, env) =>\n new Promise((resolve) => {\n if (!session || isEmpty(session)) {\n resolve({ \n score: 0, \n empty: true, \n logTrace: ['Student did not enter a response.'] \n });\n return;\n }\n \n const partialScoringEnabled = partialScoring.enabled(question, env);\n session = normalizeSession(session);\n\n if (env.mode !== 'evaluate') {\n resolve({ score: undefined, completed: undefined, logTrace: [] });\n } else {\n const correctness = getCorrectness(question, env, session, true);\n const score = correctness.score;\n\n resolve({ \n score: partialScoringEnabled ? score : score === 1 ? 1 : 0,\n logTrace: getLogTrace(question, session, env)\n });\n }\n });\n\nexport const createDefaultModel = (model = {}) => {\n const { validationDefault, allowTrailingZerosDefault, ignoreOrderDefault, responses = {} } = model;\n\n const updatedResponses = Object.keys(responses).reduce((acc, responseId) => {\n const correctResponse = responses[responseId];\n\n acc[responseId] = {\n ...correctResponse,\n validation: correctResponse.validation || validationDefault,\n allowTrailingZeros: correctResponse.allowTrailingZeros || allowTrailingZerosDefault,\n ignoreOrder: correctResponse.ignoreOrder || ignoreOrderDefault,\n };\n\n return acc;\n }, {});\n\n return {\n ...defaults.model,\n ...model,\n responses: updatedResponses,\n };\n};\n\nexport const normalizeSession = (s) => ({ ...s });\n\nconst getTextFromHTML = (html) => (html || '').replace(/<\\/?[^>]+(>|$)/g, '');\n\nexport const prepareVal = (html) => getTextFromHTML(html).trim();\n\nexport const model = (question, session, env) => {\n return new Promise((resolve) => {\n session = session || {};\n const normalizedQuestion = createDefaultModel(question);\n const correctness = getCorrectness(normalizedQuestion, env, session);\n const { responses, language } = normalizedQuestion;\n let { note } = normalizedQuestion;\n let showNote = false;\n\n // check if there is at least one alternate response or if the validation for at least one response is not literal\n Object.keys(responses).forEach((responseId) => {\n const correctResponse = responses[responseId] || {};\n if (correctResponse.alternates && Object.keys(correctResponse.alternates).length > 0) {\n showNote = true;\n } else if (correctResponse.validation !== 'literal') {\n showNote = true;\n }\n });\n\n if (!note) {\n note = translator.t('mathInline.primaryCorrectWithAlternates', { lng: language });\n }\n\n const out = {\n prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null,\n markup: normalizedQuestion.markup,\n responses: env.mode === 'gather' ? null : normalizedQuestion.responses,\n language: normalizedQuestion.language,\n equationEditor: normalizedQuestion.equationEditor,\n customKeys: normalizedQuestion.customKeys,\n disabled: env.mode !== 'gather',\n view: env.mode === 'view',\n correctness,\n env,\n extraCSSRules: normalizedQuestion.extraCSSRules,\n };\n\n const { answers = {} } = session || {};\n let feedback = {};\n\n if (env.mode === 'evaluate') {\n Object.keys(responses).forEach((responseId) => {\n const answerItem = answers['r' + responseId];\n const correctResponse = responses[responseId];\n feedback[responseId] = getIsAnswerCorrect(correctResponse, answerItem);\n });\n }\n\n if (env.mode === 'evaluate') {\n out.correctResponse = {};\n out.showNote = showNote;\n out.note = note;\n out.feedback = feedback;\n } else {\n out.responses = {};\n out.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 }\n\n log('out: ', out);\n resolve(out);\n });\n};\n\nexport const createCorrectResponseSession = (question, env) =>\n new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const correctResponse = Object.keys(question.responses).reduce((acc, responseId) => {\n acc['r' + responseId] = { value: question.responses[responseId].answer };\n return acc;\n }, {});\n\n resolve({ id: '1', answers: correctResponse });\n } else {\n resolve(null);\n }\n });\n\nexport const validate = (model = {}, config = {}) => {\n const { responses, markup } = 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 Object.entries(responses || {}).forEach(([key, 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 const nbOfResponseAreas = (markup.match(/\\{\\{(\\d+)\\}\\}/g) || []).length;\n\n if (nbOfResponseAreas > maxResponseAreas) {\n errors.responseAreas = `No more than ${maxResponseAreas} response areas should be defined.`;\n } else if (nbOfResponseAreas < 1) {\n errors.responseAreas = 'There should be at least 1 response area defined.';\n }\n\n if (!isEmpty(responsesErrors)) {\n errors.responses = responsesErrors;\n }\n\n return errors;\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pie-element/math-templated-controller",
3
3
  "private": true,
4
- "version": "5.1.1-next.1",
4
+ "version": "5.2.0-next.0",
5
5
  "description": "",
6
6
  "main": "lib/index.js",
7
7
  "module": "src/index.js",
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
7
- "version": "6.1.1-next.5",
7
+ "version": "6.2.0-next.1",
8
8
  "description": "",
9
9
  "dependencies": {
10
10
  "@emotion/react": "^11.14.0",
@@ -12,18 +12,18 @@
12
12
  "@mui/icons-material": "^7.3.4",
13
13
  "@mui/material": "^7.3.4",
14
14
  "@pie-framework/pie-player-events": "^0.1.0",
15
- "@pie-lib/correct-answer-toggle": "3.2.0-next.4",
16
- "@pie-lib/mask-markup": "2.2.0-next.17",
17
- "@pie-lib/math-input": "7.2.0-next.8",
15
+ "@pie-lib/correct-answer-toggle": "3.2.0-next.6",
16
+ "@pie-lib/mask-markup": "2.2.0-next.20",
17
+ "@pie-lib/math-input": "7.2.0-next.9",
18
18
  "@pie-lib/math-rendering": "4.2.0-next.3",
19
- "@pie-lib/render-ui": "5.2.0-next.4",
19
+ "@pie-lib/render-ui": "5.2.0-next.6",
20
20
  "prop-types": "^15.8.1",
21
21
  "react": "18.3.1",
22
22
  "react-dom": "18.3.1"
23
23
  },
24
24
  "author": "",
25
25
  "license": "ISC",
26
- "gitHead": "40a7ed35e8d7ede93ebb571fff94e0539294403f",
26
+ "gitHead": "d1fbd8c1e27606d50d58f5e0f6f43f0b67a21b18",
27
27
  "scripts": {
28
28
  "postpublish": "../../scripts/postpublish"
29
29
  },