@pie-element/math-inline 11.0.5-esm.1 → 11.1.2-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.
Files changed (55) hide show
  1. package/CHANGELOG.md +1191 -2718
  2. package/configure/CHANGELOG.md +984 -2344
  3. package/configure/lib/configure.js +162 -240
  4. package/configure/lib/configure.js.map +1 -1
  5. package/configure/lib/defaults.js +8 -8
  6. package/configure/lib/defaults.js.map +1 -1
  7. package/configure/lib/general-config-block.js +447 -564
  8. package/configure/lib/general-config-block.js.map +1 -1
  9. package/configure/lib/index.js +111 -176
  10. package/configure/lib/index.js.map +1 -1
  11. package/configure/lib/response.js +330 -388
  12. package/configure/lib/response.js.map +1 -1
  13. package/configure/lib/utils.js +15 -30
  14. package/configure/lib/utils.js.map +1 -1
  15. package/configure/package.json +14 -12
  16. package/controller/CHANGELOG.md +721 -1739
  17. package/controller/lib/defaults.js +5 -8
  18. package/controller/lib/defaults.js.map +1 -1
  19. package/controller/lib/index.js +189 -278
  20. package/controller/lib/index.js.map +1 -1
  21. package/controller/lib/utils.js +1 -2
  22. package/controller/lib/utils.js.map +1 -1
  23. package/controller/package.json +7 -7
  24. package/lib/index.js +72 -125
  25. package/lib/index.js.map +1 -1
  26. package/lib/main.js +784 -889
  27. package/lib/main.js.map +1 -1
  28. package/lib/print.js +43 -84
  29. package/lib/print.js.map +1 -1
  30. package/lib/simple-question-block.js +125 -162
  31. package/lib/simple-question-block.js.map +1 -1
  32. package/lib/utils.js +1 -2
  33. package/lib/utils.js.map +1 -1
  34. package/package.json +18 -33
  35. package/esm/configure.css +0 -847
  36. package/esm/configure.js +0 -1769
  37. package/esm/configure.js.map +0 -1
  38. package/esm/controller.css +0 -847
  39. package/esm/controller.js +0 -416
  40. package/esm/controller.js.map +0 -1
  41. package/esm/element.css +0 -847
  42. package/esm/element.js +0 -1476
  43. package/esm/element.js.map +0 -1
  44. package/esm/print.css +0 -847
  45. package/esm/print.js +0 -1288
  46. package/esm/print.js.map +0 -1
  47. package/module/configure.js +0 -1
  48. package/module/controller.js +0 -4320
  49. package/module/demo.js +0 -66
  50. package/module/element.js +0 -1
  51. package/module/index.html +0 -21
  52. package/module/manifest.json +0 -14
  53. package/module/print-demo.js +0 -104
  54. package/module/print.html +0 -18
  55. package/module/print.js +0 -1
package/esm/controller.js DELETED
@@ -1,416 +0,0 @@
1
- import debug from 'debug';
2
- import isEmpty from 'lodash/isEmpty';
3
- import { getActualFeedbackForCorrectness } from '@pie-lib/feedback';
4
- import Translator from '@pie-lib/translator';
5
- import * as mv from '@pie-framework/math-validation';
6
-
7
- function _extends() {
8
- _extends = Object.assign || function (target) {
9
- for (var i = 1; i < arguments.length; i++) {
10
- var source = arguments[i];
11
-
12
- for (var key in source) {
13
- if (Object.prototype.hasOwnProperty.call(source, key)) {
14
- target[key] = source[key];
15
- }
16
- }
17
- }
18
-
19
- return target;
20
- };
21
-
22
- return _extends.apply(this, arguments);
23
- }
24
-
25
- function _objectWithoutPropertiesLoose(source, excluded) {
26
- if (source == null) return {};
27
- var target = {};
28
- var sourceKeys = Object.keys(source);
29
- var key, i;
30
-
31
- for (i = 0; i < sourceKeys.length; i++) {
32
- key = sourceKeys[i];
33
- if (excluded.indexOf(key) >= 0) continue;
34
- target[key] = source[key];
35
- }
36
-
37
- return target;
38
- }
39
-
40
- const ResponseTypes = {
41
- advanced: 'Advanced Multi',
42
- simple: 'Simple'
43
- };
44
-
45
- var defaults = {
46
- allowTrailingZerosDefault: false,
47
- customKeys: [],
48
- equationEditor: '8',
49
- expression: '',
50
- feedback: {
51
- correct: {
52
- default: 'Correct',
53
- type: 'none'
54
- },
55
- incorrect: {
56
- default: 'Incorrect',
57
- type: 'none'
58
- },
59
- partial: {
60
- default: 'Nearly',
61
- type: 'none'
62
- }
63
- },
64
- feedbackEnabled: false,
65
- ignoreOrderDefault: false,
66
- partialScoring: true,
67
- prompt: '',
68
- promptEnabled: true,
69
- rationale: '',
70
- rationaleEnabled: true,
71
- responseType: ResponseTypes.advanced,
72
- responses: [],
73
- scoringType: 'auto',
74
- studentInstructionsEnabled: true,
75
- teacherInstructions: '',
76
- teacherInstructionsEnabled: true,
77
- toolbarEditorPosition: 'bottom',
78
- validationDefault: 'literal'
79
- };
80
-
81
- const _excluded = ["extraCSSRules", "responses", "language"];
82
- const {
83
- translator
84
- } = Translator;
85
- const log = debug('@pie-element:math-inline:controller');
86
-
87
- const getResponseCorrectness = (model, answerItem, isOutcome) => {
88
- const correctResponses = model.responses;
89
- const isAdvanced = model.responseType === ResponseTypes.advanced;
90
-
91
- if (!answerItem) {
92
- return {
93
- correctness: 'unanswered',
94
- score: isOutcome ? 0 : '0%',
95
- correct: false
96
- };
97
- }
98
-
99
- const isAnswerCorrect = getIsAnswerCorrect(isAdvanced ? correctResponses : correctResponses.slice(0, 1), answerItem);
100
- const correctnessObject = {
101
- correctness: 'incorrect',
102
- score: isOutcome ? 0 : '0%',
103
- correct: false
104
- };
105
-
106
- if (isAnswerCorrect) {
107
- correctnessObject.correctness = 'correct';
108
- correctnessObject.score = isOutcome ? 1 : '100%';
109
- correctnessObject.correct = true;
110
- }
111
-
112
- return correctnessObject;
113
- };
114
-
115
- function getIsAnswerCorrect(correctResponseItems, answerItem) {
116
- let answerCorrect = false;
117
- (correctResponseItems || []).forEach(correctResponse => {
118
- if (answerCorrect) return;
119
- const opts = {
120
- mode: correctResponse.validation || defaults.validationDefault
121
- };
122
-
123
- if (opts.mode === 'literal') {
124
- opts.literal = {
125
- allowTrailingZeros: correctResponse.allowTrailingZeros || false,
126
- ignoreOrder: correctResponse.ignoreOrder || false
127
- };
128
- }
129
-
130
- const acceptedValues = [correctResponse.answer].concat(Object.keys(correctResponse.alternates || {}).map(alternateId => correctResponse.alternates[alternateId]));
131
-
132
- for (let i = 0; i < acceptedValues.length; i++) {
133
- try {
134
- if (mv.latexEqual(answerItem, acceptedValues[i], opts)) {
135
- answerCorrect = true;
136
- break;
137
- }
138
- } catch (e) {
139
- log('Parse failure when evaluating math', acceptedValues[i], answerItem, e);
140
- continue;
141
- }
142
- }
143
- });
144
- return answerCorrect;
145
- }
146
-
147
- const getCorrectness = (question, env, session, isOutcome) => {
148
- if (env.mode === 'evaluate') {
149
- return getResponseCorrectness(question, question.responseType === ResponseTypes.advanced ? session && session.completeAnswer || '' : session && session.response, isOutcome);
150
- }
151
-
152
- return undefined;
153
- };
154
-
155
- function createDefaultModel(model = {}) {
156
- return new Promise(resolve => {
157
- resolve({
158
- config: _extends({}, defaults, model)
159
- });
160
- });
161
- }
162
- const outcome = (question, session, env) => {
163
- return new Promise(resolve => {
164
- if (env.mode !== 'evaluate') {
165
- resolve({
166
- score: undefined,
167
- completed: undefined
168
- });
169
- } else {
170
- if (!session || isEmpty(session)) {
171
- resolve({
172
- score: 0,
173
- empty: true
174
- });
175
- } else {
176
- const correctness = getCorrectness(question, env, session, true);
177
- resolve({
178
- score: correctness.score
179
- });
180
- }
181
- }
182
- });
183
- };
184
- const normalize = question => {
185
- // making sure that defaults are set
186
- if (!isEmpty(question.responses)) {
187
- question.responses = question.responses.map(correctResponse => _extends({}, correctResponse, {
188
- validation: correctResponse.validation || question.validationDefault,
189
- allowTrailingZeros: correctResponse.allowTrailingZeros || question.allowTrailingZerosDefault,
190
- ignoreOrder: correctResponse.ignoreOrder || question.ignoreOrderDefault
191
- }));
192
- }
193
-
194
- return _extends({}, defaults, question);
195
- };
196
- const model = (question, session, env) => new Promise(resolve => {
197
- var _config$responses;
198
-
199
- const normalizedQuestion = normalize(question);
200
- const correctness = getCorrectness(normalizedQuestion, env, session);
201
-
202
- const {
203
- extraCSSRules,
204
- responses,
205
- language
206
- } = normalizedQuestion,
207
- config = _objectWithoutPropertiesLoose(normalizedQuestion, _excluded);
208
-
209
- config.responses = config.responseType === ResponseTypes.simple ? responses.slice(0, 1) : responses;
210
- const feedback = env.mode === 'evaluate' && normalizedQuestion.feedbackEnabled ? getActualFeedbackForCorrectness(correctness == null ? void 0 : correctness.correctness, normalizedQuestion.feedback) : undefined;
211
- const out = {
212
- extraCSSRules,
213
- config,
214
- correctness,
215
- feedback,
216
- disabled: env.mode !== 'gather',
217
- view: env.mode === 'view'
218
- };
219
- const note = normalizedQuestion.note || translator.t('mathInline.primaryCorrectWithAlternates', {
220
- lng: language
221
- });
222
- const showNote = (config == null ? void 0 : (_config$responses = config.responses) == null ? void 0 : _config$responses.length) > 1 || ((config == null ? void 0 : config.responses) || []).some(response => response.validation === 'symbolic' || Object.keys(response.alternates || {}).length > 0);
223
-
224
- if (env.mode === 'evaluate') {
225
- out.correctResponse = {};
226
- out.config.showNote = showNote;
227
- out.config.note = note;
228
- } else {
229
- out.config.responses = [];
230
- out.config.showNote = false;
231
- }
232
-
233
- if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {
234
- out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;
235
- out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled ? normalizedQuestion.teacherInstructions : null;
236
- } else {
237
- out.rationale = null;
238
- out.teacherInstructions = null;
239
- out.config.rationale = null;
240
- out.config.teacherInstructions = null;
241
- }
242
-
243
- out.config.env = env;
244
- out.config.prompt = normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null;
245
- out.language = language;
246
- log('out: ', out);
247
- resolve(out);
248
- });
249
-
250
- const escape = string => string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
251
-
252
-
253
- const simpleSessionResponse = question => new Promise(resolve => {
254
- const {
255
- responses,
256
- id
257
- } = question;
258
- const {
259
- answer
260
- } = responses && responses.length ? responses[0] : {};
261
- resolve({
262
- id,
263
- response: answer || '',
264
- completeAnswer: answer || ''
265
- });
266
- }); // use this for items like E672793
267
-
268
-
269
- const removeTrailingEscape = str => str.endsWith('\\') ? str.slice(0, -1) : str;
270
-
271
- const advancedSessionResponse = question => new Promise(resolve => {
272
- const {
273
- responses,
274
- id
275
- } = question;
276
- const {
277
- answer
278
- } = responses && responses.length ? responses[0] : {};
279
-
280
- if (!answer) {
281
- resolve({
282
- id,
283
- answers: {},
284
- completeAnswer: ''
285
- });
286
- return;
287
- }
288
-
289
- try {
290
- const e = question.expression;
291
- const RESPONSE_TOKEN = /\\{\\{\s*response\s*\\}\\}/g;
292
- const o = escape(e).split(RESPONSE_TOKEN);
293
- const to = o.map(t => t === '' ? t : t.replace(/\s+/g, () => '\\s*'));
294
- const tt = to.join('(.*)');
295
- const m = answer.match(new RegExp(tt));
296
- const count = o.length - 1;
297
-
298
- if (!m) {
299
- resolve({
300
- id,
301
- answers: {},
302
- completeAnswer: answer
303
- }); // eslint-disable-next-line no-console
304
-
305
- console.log(`can not find match: ${o} in ${answer}`);
306
- return;
307
- }
308
-
309
- m.shift();
310
- const answers = {};
311
-
312
- for (var i = 0; i < count; i++) {
313
- answers[`r${i + 1}`] = {
314
- value: removeTrailingEscape(m[i].trim())
315
- };
316
- }
317
-
318
- resolve({
319
- id,
320
- answers,
321
- completeAnswer: answer
322
- });
323
- } catch (e) {
324
- resolve({
325
- id,
326
- answers: {},
327
- completeAnswer: answer
328
- }); // eslint-disable-next-line no-console
329
-
330
- console.error(e.toString());
331
- }
332
- });
333
-
334
- const createCorrectResponseSession = (question, env) => {
335
- if (env.mode === 'evaluate' || env.role !== 'instructor') {
336
- // eslint-disable-next-line no-console
337
- console.error('can not create correct response session if mode is evaluate or role is not instructor');
338
- return Promise.resolve(null);
339
- }
340
-
341
- if ((question.responseType || '').toLowerCase() === 'simple') {
342
- return simpleSessionResponse(question);
343
- } else {
344
- return advancedSessionResponse(question);
345
- }
346
- }; // remove all html tags
347
-
348
-
349
- const getContent = html => (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');
350
-
351
- const validate = (model = {}, config = {}) => {
352
- const {
353
- expression = '',
354
- responses,
355
- responseType
356
- } = model;
357
- const {
358
- maxResponseAreas
359
- } = config;
360
- const responsesErrors = {};
361
- const errors = {};
362
- ['teacherInstructions', 'prompt', 'rationale'].forEach(field => {
363
- var _config$field;
364
-
365
- if ((_config$field = config[field]) != null && _config$field.required && !getContent(model[field])) {
366
- errors[field] = 'This field is required.';
367
- }
368
- });
369
- (responses || []).forEach((response, index) => {
370
- const {
371
- answer
372
- } = response;
373
- const reversedAlternates = [...Object.entries(response.alternates || {})].reverse();
374
- const alternatesErrors = {};
375
- const responseError = {};
376
-
377
- if (answer === '') {
378
- responseError.answer = 'Content should not be empty.';
379
- }
380
-
381
- reversedAlternates.forEach(([key, value], index) => {
382
- if (value === '') {
383
- alternatesErrors[key] = 'Content should not be empty.';
384
- } else {
385
- const identicalAnswer = answer === value || reversedAlternates.slice(index + 1).some(([, val]) => val === value);
386
-
387
- if (identicalAnswer) {
388
- alternatesErrors[key] = 'Content should be unique.';
389
- }
390
- }
391
- });
392
-
393
- if (!isEmpty(responseError) || !isEmpty(alternatesErrors)) {
394
- responsesErrors[index] = _extends({}, responseError, alternatesErrors);
395
- }
396
- });
397
-
398
- if (responseType === 'Advanced Multi') {
399
- const nbOfResponseAreas = (expression.match(/\{\{response\}\}/g) || []).length;
400
-
401
- if (nbOfResponseAreas > maxResponseAreas) {
402
- errors.responseAreasError = `No more than ${maxResponseAreas} response areas should be defined.`;
403
- } else if (nbOfResponseAreas < 1) {
404
- errors.responseAreasError = 'There should be at least 1 response area defined.';
405
- }
406
- }
407
-
408
- if (!isEmpty(responsesErrors)) {
409
- errors.responsesErrors = responsesErrors;
410
- }
411
-
412
- return errors;
413
- };
414
-
415
- export { createCorrectResponseSession, createDefaultModel, model, normalize, outcome, validate };
416
- //# sourceMappingURL=controller.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"controller.js","sources":["../controller/src/utils.js","../controller/src/defaults.js","../controller/src/index.js"],"sourcesContent":["export const ResponseTypes = {\n advanced: 'Advanced Multi',\n simple: 'Simple',\n};\n","import { ResponseTypes } from './utils';\n\nexport default {\n allowTrailingZerosDefault: false,\n customKeys: [],\n equationEditor: '8',\n expression: '',\n feedback: {\n correct: { default: 'Correct', type: 'none' },\n incorrect: { default: 'Incorrect', type: 'none' },\n partial: { default: 'Nearly', type: 'none' },\n },\n feedbackEnabled: false,\n ignoreOrderDefault: false,\n partialScoring: true,\n prompt: '',\n promptEnabled: true,\n rationale: '',\n rationaleEnabled: true,\n responseType: ResponseTypes.advanced,\n responses: [],\n scoringType: 'auto',\n studentInstructionsEnabled: true,\n teacherInstructions: '',\n teacherInstructionsEnabled: true,\n toolbarEditorPosition: 'bottom',\n validationDefault: 'literal',\n};\n","import debug from 'debug';\nimport isEmpty from 'lodash/isEmpty';\nimport { getActualFeedbackForCorrectness } from '@pie-lib/feedback';\n\nimport { ResponseTypes } from './utils';\nimport Translator from '@pie-lib/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(correctResponseItems, answerItem) {\n let answerCorrect = false;\n\n (correctResponseItems || []).forEach((correctResponse) => {\n if (answerCorrect) return;\n\n const 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 const acceptedValues = [correctResponse.answer].concat(\n Object.keys(correctResponse.alternates || {}).map((alternateId) => correctResponse.alternates[alternateId]),\n );\n\n for (let i = 0; i < acceptedValues.length; i++) {\n try {\n if (mv.latexEqual(answerItem, acceptedValues[i], opts)) {\n answerCorrect = true;\n break;\n }\n } catch (e) {\n log('Parse failure when evaluating math', acceptedValues[i], answerItem, e);\n continue;\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 { ...defaults, ...question };\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 { extraCSSRules, 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 extraCSSRules,\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, iframe and source tag for audio\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/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"],"names":["ResponseTypes","advanced","simple","allowTrailingZerosDefault","customKeys","equationEditor","expression","feedback","correct","default","type","incorrect","partial","feedbackEnabled","ignoreOrderDefault","partialScoring","prompt","promptEnabled","rationale","rationaleEnabled","responseType","responses","scoringType","studentInstructionsEnabled","teacherInstructions","teacherInstructionsEnabled","toolbarEditorPosition","validationDefault","translator","Translator","log","debug","getResponseCorrectness","model","answerItem","isOutcome","correctResponses","isAdvanced","correctness","score","isAnswerCorrect","getIsAnswerCorrect","slice","correctnessObject","correctResponseItems","answerCorrect","forEach","correctResponse","opts","mode","validation","defaults","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","isEmpty","empty","normalize","normalizedQuestion","extraCSSRules","language","getActualFeedbackForCorrectness","out","disabled","view","note","t","lng","showNote","some","role","escape","string","replace","simpleSessionResponse","id","removeTrailingEscape","str","endsWith","advancedSessionResponse","answers","RESPONSE_TOKEN","o","split","to","tt","join","m","match","RegExp","count","console","shift","value","trim","error","toString","createCorrectResponseSession","toLowerCase","getContent","html","validate","maxResponseAreas","responsesErrors","errors","field","required","index","reversedAlternates","entries","reverse","alternatesErrors","responseError","key","identicalAnswer","val","nbOfResponseAreas","responseAreasError"],"mappings":"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"}