@pie-element/math-inline 10.0.1-next.0 → 10.0.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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pie-element/math-inline-configure",
3
3
  "private": true,
4
- "version": "9.0.1",
4
+ "version": "9.0.2",
5
5
  "description": "",
6
6
  "main": "lib/index.js",
7
7
  "module": "src/index.js",
@@ -11,12 +11,12 @@
11
11
  "@material-ui/icons": "^3.0.1",
12
12
  "@pie-framework/mathquill": "^1.1.3",
13
13
  "@pie-framework/pie-configure-events": "^1.3.0",
14
- "@pie-lib/config-ui": "^11.25.0",
15
- "@pie-lib/editable-html": "^11.17.0",
16
- "@pie-lib/math-rendering": "^3.18.0",
17
- "@pie-lib/math-toolbar": "^1.27.0",
18
- "@pie-lib/render-ui": "^4.31.0",
19
- "@pie-lib/test-utils": "^0.18.0",
14
+ "@pie-lib/config-ui": "^11.26.0",
15
+ "@pie-lib/editable-html": "^11.18.0",
16
+ "@pie-lib/math-rendering": "^3.19.0",
17
+ "@pie-lib/math-toolbar": "^1.28.0",
18
+ "@pie-lib/render-ui": "^4.32.0",
19
+ "@pie-lib/test-utils": "^0.19.0",
20
20
  "classnames": "^2.2.5",
21
21
  "debug": "^3.1.0",
22
22
  "prop-types": "^15.6.2",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pie-element/math-inline-controller",
3
3
  "private": true,
4
- "version": "8.0.1",
4
+ "version": "8.0.2",
5
5
  "description": "",
6
6
  "main": "lib/index.js",
7
7
  "module": "src/index.js",
@@ -10,8 +10,8 @@
10
10
  },
11
11
  "dependencies": {
12
12
  "@pie-framework/math-validation": "^1.4.2",
13
- "@pie-lib/feedback": "^0.20.0",
14
- "@pie-lib/translator": "^2.19.0",
13
+ "@pie-lib/feedback": "^0.21.0",
14
+ "@pie-lib/translator": "^2.20.0",
15
15
  "debug": "^3.1.0",
16
16
  "lodash": "^4.17.15"
17
17
  },
@@ -0,0 +1,468 @@
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 ownKeys(object, enumerableOnly) {
8
+ var keys = Object.keys(object);
9
+
10
+ if (Object.getOwnPropertySymbols) {
11
+ var symbols = Object.getOwnPropertySymbols(object);
12
+ enumerableOnly && (symbols = symbols.filter(function (sym) {
13
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
14
+ })), keys.push.apply(keys, symbols);
15
+ }
16
+
17
+ return keys;
18
+ }
19
+
20
+ function _objectSpread2(target) {
21
+ for (var i = 1; i < arguments.length; i++) {
22
+ var source = null != arguments[i] ? arguments[i] : {};
23
+ i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {
24
+ _defineProperty(target, key, source[key]);
25
+ }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {
26
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
27
+ });
28
+ }
29
+
30
+ return target;
31
+ }
32
+
33
+ function _defineProperty(obj, key, value) {
34
+ if (key in obj) {
35
+ Object.defineProperty(obj, key, {
36
+ value: value,
37
+ enumerable: true,
38
+ configurable: true,
39
+ writable: true
40
+ });
41
+ } else {
42
+ obj[key] = value;
43
+ }
44
+
45
+ return obj;
46
+ }
47
+
48
+ function _objectWithoutPropertiesLoose(source, excluded) {
49
+ if (source == null) return {};
50
+ var target = {};
51
+ var sourceKeys = Object.keys(source);
52
+ var key, i;
53
+
54
+ for (i = 0; i < sourceKeys.length; i++) {
55
+ key = sourceKeys[i];
56
+ if (excluded.indexOf(key) >= 0) continue;
57
+ target[key] = source[key];
58
+ }
59
+
60
+ return target;
61
+ }
62
+
63
+ function _objectWithoutProperties(source, excluded) {
64
+ if (source == null) return {};
65
+
66
+ var target = _objectWithoutPropertiesLoose(source, excluded);
67
+
68
+ var key, i;
69
+
70
+ if (Object.getOwnPropertySymbols) {
71
+ var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
72
+
73
+ for (i = 0; i < sourceSymbolKeys.length; i++) {
74
+ key = sourceSymbolKeys[i];
75
+ if (excluded.indexOf(key) >= 0) continue;
76
+ if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
77
+ target[key] = source[key];
78
+ }
79
+ }
80
+
81
+ return target;
82
+ }
83
+
84
+ var ResponseTypes = {
85
+ advanced: 'Advanced Multi',
86
+ simple: 'Simple'
87
+ };
88
+
89
+ var defaults = {
90
+ allowTrailingZerosDefault: false,
91
+ customKeys: [],
92
+ equationEditor: '8',
93
+ expression: '',
94
+ feedback: {
95
+ correct: {
96
+ default: 'Correct',
97
+ type: 'none'
98
+ },
99
+ incorrect: {
100
+ default: 'Incorrect',
101
+ type: 'none'
102
+ },
103
+ partial: {
104
+ default: 'Nearly',
105
+ type: 'none'
106
+ }
107
+ },
108
+ feedbackEnabled: false,
109
+ ignoreOrderDefault: false,
110
+ partialScoring: true,
111
+ prompt: '',
112
+ promptEnabled: true,
113
+ rationale: '',
114
+ rationaleEnabled: true,
115
+ responseType: ResponseTypes.advanced,
116
+ responses: [],
117
+ scoringType: 'auto',
118
+ studentInstructionsEnabled: true,
119
+ teacherInstructions: '',
120
+ teacherInstructionsEnabled: true,
121
+ toolbarEditorPosition: 'bottom',
122
+ validationDefault: 'literal'
123
+ };
124
+
125
+ var _excluded = ["extraCSSRules", "responses", "language"];
126
+ var {
127
+ translator
128
+ } = Translator;
129
+ var log = debug('@pie-element:math-inline:controller');
130
+
131
+ var getResponseCorrectness = (model, answerItem, isOutcome) => {
132
+ var correctResponses = model.responses;
133
+ var isAdvanced = model.responseType === ResponseTypes.advanced;
134
+
135
+ if (!answerItem) {
136
+ return {
137
+ correctness: 'unanswered',
138
+ score: isOutcome ? 0 : '0%',
139
+ correct: false
140
+ };
141
+ }
142
+
143
+ var isAnswerCorrect = getIsAnswerCorrect(isAdvanced ? correctResponses : correctResponses.slice(0, 1), answerItem);
144
+ var correctnessObject = {
145
+ correctness: 'incorrect',
146
+ score: isOutcome ? 0 : '0%',
147
+ correct: false
148
+ };
149
+
150
+ if (isAnswerCorrect) {
151
+ correctnessObject.correctness = 'correct';
152
+ correctnessObject.score = isOutcome ? 1 : '100%';
153
+ correctnessObject.correct = true;
154
+ }
155
+
156
+ return correctnessObject;
157
+ };
158
+
159
+ function getIsAnswerCorrect(correctResponseItems, answerItem) {
160
+ var answerCorrect = false;
161
+ (correctResponseItems || []).forEach(correctResponse => {
162
+ if (answerCorrect) return;
163
+ var opts = {
164
+ mode: correctResponse.validation || defaults.validationDefault
165
+ };
166
+
167
+ if (opts.mode === 'literal') {
168
+ opts.literal = {
169
+ allowTrailingZeros: correctResponse.allowTrailingZeros || false,
170
+ ignoreOrder: correctResponse.ignoreOrder || false
171
+ };
172
+ }
173
+
174
+ var acceptedValues = [correctResponse.answer].concat(Object.keys(correctResponse.alternates || {}).map(alternateId => correctResponse.alternates[alternateId]));
175
+
176
+ for (var i = 0; i < acceptedValues.length; i++) {
177
+ try {
178
+ if (mv.latexEqual(answerItem, acceptedValues[i], opts)) {
179
+ answerCorrect = true;
180
+ break;
181
+ }
182
+ } catch (e) {
183
+ log('Parse failure when evaluating math', acceptedValues[i], answerItem, e);
184
+ continue;
185
+ }
186
+ }
187
+ });
188
+ return answerCorrect;
189
+ }
190
+
191
+ var getCorrectness = (question, env, session, isOutcome) => {
192
+ if (env.mode === 'evaluate') {
193
+ return getResponseCorrectness(question, question.responseType === ResponseTypes.advanced ? session && session.completeAnswer || '' : session && session.response, isOutcome);
194
+ }
195
+
196
+ return undefined;
197
+ };
198
+
199
+ function createDefaultModel() {
200
+ var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
201
+ return new Promise(resolve => {
202
+ resolve({
203
+ config: _objectSpread2(_objectSpread2({}, defaults), model)
204
+ });
205
+ });
206
+ }
207
+ var outcome = (question, session, env) => {
208
+ return new Promise(resolve => {
209
+ if (env.mode !== 'evaluate') {
210
+ resolve({
211
+ score: undefined,
212
+ completed: undefined
213
+ });
214
+ } else {
215
+ if (!session || isEmpty(session)) {
216
+ resolve({
217
+ score: 0,
218
+ empty: true
219
+ });
220
+ } else {
221
+ var correctness = getCorrectness(question, env, session, true);
222
+ resolve({
223
+ score: correctness.score
224
+ });
225
+ }
226
+ }
227
+ });
228
+ };
229
+ var normalize = question => {
230
+ // making sure that defaults are set
231
+ if (!isEmpty(question.responses)) {
232
+ question.responses = question.responses.map(correctResponse => _objectSpread2(_objectSpread2({}, correctResponse), {}, {
233
+ validation: correctResponse.validation || question.validationDefault,
234
+ allowTrailingZeros: correctResponse.allowTrailingZeros || question.allowTrailingZerosDefault,
235
+ ignoreOrder: correctResponse.ignoreOrder || question.ignoreOrderDefault
236
+ }));
237
+ }
238
+
239
+ return _objectSpread2(_objectSpread2({}, defaults), question);
240
+ };
241
+ var model = (question, session, env) => new Promise(resolve => {
242
+ var _config$responses;
243
+
244
+ var normalizedQuestion = normalize(question);
245
+ var correctness = getCorrectness(normalizedQuestion, env, session);
246
+
247
+ var {
248
+ extraCSSRules,
249
+ responses,
250
+ language
251
+ } = normalizedQuestion,
252
+ config = _objectWithoutProperties(normalizedQuestion, _excluded);
253
+
254
+ config.responses = config.responseType === ResponseTypes.simple ? responses.slice(0, 1) : responses;
255
+ var feedback = env.mode === 'evaluate' && normalizedQuestion.feedbackEnabled ? getActualFeedbackForCorrectness(correctness === null || correctness === void 0 ? void 0 : correctness.correctness, normalizedQuestion.feedback) : undefined;
256
+ var out = {
257
+ extraCSSRules,
258
+ config,
259
+ correctness,
260
+ feedback,
261
+ disabled: env.mode !== 'gather',
262
+ view: env.mode === 'view'
263
+ };
264
+ var note = normalizedQuestion.note || translator.t('mathInline.primaryCorrectWithAlternates', {
265
+ lng: language
266
+ });
267
+ var showNote = (config === null || config === void 0 ? void 0 : (_config$responses = config.responses) === null || _config$responses === void 0 ? void 0 : _config$responses.length) > 1 || ((config === null || config === void 0 ? void 0 : config.responses) || []).some(response => response.validation === 'symbolic' || Object.keys(response.alternates || {}).length > 0);
268
+
269
+ if (env.mode === 'evaluate') {
270
+ out.correctResponse = {};
271
+ out.config.showNote = showNote;
272
+ out.config.note = note;
273
+ } else {
274
+ out.config.responses = [];
275
+ out.config.showNote = false;
276
+ }
277
+
278
+ if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {
279
+ out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;
280
+ out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled ? normalizedQuestion.teacherInstructions : null;
281
+ } else {
282
+ out.rationale = null;
283
+ out.teacherInstructions = null;
284
+ out.config.rationale = null;
285
+ out.config.teacherInstructions = null;
286
+ }
287
+
288
+ out.config.env = env;
289
+ out.config.prompt = normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null;
290
+ out.language = language;
291
+ log('out: ', out);
292
+ resolve(out);
293
+ });
294
+
295
+ var escape = string => string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
296
+
297
+
298
+ var simpleSessionResponse = question => new Promise(resolve => {
299
+ var {
300
+ responses,
301
+ id
302
+ } = question;
303
+ var {
304
+ answer
305
+ } = responses && responses.length ? responses[0] : {};
306
+ resolve({
307
+ id,
308
+ response: answer || '',
309
+ completeAnswer: answer || ''
310
+ });
311
+ }); // use this for items like E672793
312
+
313
+
314
+ var removeTrailingEscape = str => str.endsWith('\\') ? str.slice(0, -1) : str;
315
+
316
+ var advancedSessionResponse = question => new Promise(resolve => {
317
+ var {
318
+ responses,
319
+ id
320
+ } = question;
321
+ var {
322
+ answer
323
+ } = responses && responses.length ? responses[0] : {};
324
+
325
+ if (!answer) {
326
+ resolve({
327
+ id,
328
+ answers: {},
329
+ completeAnswer: ''
330
+ });
331
+ return;
332
+ }
333
+
334
+ try {
335
+ var e = question.expression;
336
+ var RESPONSE_TOKEN = /\\{\\{\s*response\s*\\}\\}/g;
337
+ var o = escape(e).split(RESPONSE_TOKEN);
338
+ var to = o.map(t => t === '' ? t : t.replace(/\s+/g, () => '\\s*'));
339
+ var tt = to.join('(.*)');
340
+ var m = answer.match(new RegExp(tt));
341
+ var count = o.length - 1;
342
+
343
+ if (!m) {
344
+ resolve({
345
+ id,
346
+ answers: {},
347
+ completeAnswer: answer
348
+ }); // eslint-disable-next-line no-console
349
+
350
+ console.log("can not find match: ".concat(o, " in ").concat(answer));
351
+ return;
352
+ }
353
+
354
+ m.shift();
355
+ var answers = {};
356
+
357
+ for (var i = 0; i < count; i++) {
358
+ answers["r".concat(i + 1)] = {
359
+ value: removeTrailingEscape(m[i].trim())
360
+ };
361
+ }
362
+
363
+ resolve({
364
+ id,
365
+ answers,
366
+ completeAnswer: answer
367
+ });
368
+ } catch (e) {
369
+ resolve({
370
+ id,
371
+ answers: {},
372
+ completeAnswer: answer
373
+ }); // eslint-disable-next-line no-console
374
+
375
+ console.error(e.toString());
376
+ }
377
+ });
378
+
379
+ var createCorrectResponseSession = (question, env) => {
380
+ if (env.mode === 'evaluate' || env.role !== 'instructor') {
381
+ // eslint-disable-next-line no-console
382
+ console.error('can not create correct response session if mode is evaluate or role is not instructor');
383
+ return Promise.resolve(null);
384
+ }
385
+
386
+ if ((question.responseType || '').toLowerCase() === 'simple') {
387
+ return simpleSessionResponse(question);
388
+ } else {
389
+ return advancedSessionResponse(question);
390
+ }
391
+ }; // remove all html tags
392
+
393
+
394
+ var getContent = html => (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');
395
+
396
+ var validate = function validate() {
397
+ var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
398
+ var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
399
+ var {
400
+ expression = '',
401
+ responses,
402
+ responseType
403
+ } = model;
404
+ var {
405
+ maxResponseAreas
406
+ } = config;
407
+ var responsesErrors = {};
408
+ var errors = {};
409
+ ['teacherInstructions', 'prompt', 'rationale'].forEach(field => {
410
+ var _config$field;
411
+
412
+ if ((_config$field = config[field]) !== null && _config$field !== void 0 && _config$field.required && !getContent(model[field])) {
413
+ errors[field] = 'This field is required.';
414
+ }
415
+ });
416
+ (responses || []).forEach((response, index) => {
417
+ var {
418
+ answer
419
+ } = response;
420
+ var reversedAlternates = [...Object.entries(response.alternates || {})].reverse();
421
+ var alternatesErrors = {};
422
+ var responseError = {};
423
+
424
+ if (answer === '') {
425
+ responseError.answer = 'Content should not be empty.';
426
+ }
427
+
428
+ reversedAlternates.forEach((_ref, index) => {
429
+ var [key, value] = _ref;
430
+
431
+ if (value === '') {
432
+ alternatesErrors[key] = 'Content should not be empty.';
433
+ } else {
434
+ var identicalAnswer = answer === value || reversedAlternates.slice(index + 1).some(_ref2 => {
435
+ var [, val] = _ref2;
436
+ return val === value;
437
+ });
438
+
439
+ if (identicalAnswer) {
440
+ alternatesErrors[key] = 'Content should be unique.';
441
+ }
442
+ }
443
+ });
444
+
445
+ if (!isEmpty(responseError) || !isEmpty(alternatesErrors)) {
446
+ responsesErrors[index] = _objectSpread2(_objectSpread2({}, responseError), alternatesErrors);
447
+ }
448
+ });
449
+
450
+ if (responseType === 'Advanced Multi') {
451
+ var nbOfResponseAreas = (expression.match(/\{\{response\}\}/g) || []).length;
452
+
453
+ if (nbOfResponseAreas > maxResponseAreas) {
454
+ errors.responseAreasError = "No more than ".concat(maxResponseAreas, " response areas should be defined.");
455
+ } else if (nbOfResponseAreas < 1) {
456
+ errors.responseAreasError = 'There should be at least 1 response area defined.';
457
+ }
458
+ }
459
+
460
+ if (!isEmpty(responsesErrors)) {
461
+ errors.responsesErrors = responsesErrors;
462
+ }
463
+
464
+ return errors;
465
+ };
466
+
467
+ export { createCorrectResponseSession, createDefaultModel, model, normalize, outcome, validate };
468
+ //# sourceMappingURL=controller.js.map
@@ -0,0 +1 @@
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","_objectSpread","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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"}
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "access": "public"
5
5
  },
6
6
  "repository": "pie-framework/pie-elements",
7
- "version": "10.0.1-next.0+17e3b6c8d",
7
+ "version": "10.0.1",
8
8
  "main": "lib/index.js",
9
9
  "description": "",
10
10
  "scripts": {
@@ -14,12 +14,12 @@
14
14
  "@material-ui/core": "^3.9.2",
15
15
  "@pie-framework/mathquill": "^1.1.3",
16
16
  "@pie-framework/pie-player-events": "^0.1.0",
17
- "@pie-lib/correct-answer-toggle": "^2.21.0",
18
- "@pie-lib/math-input": "^6.27.0",
19
- "@pie-lib/math-rendering": "^3.18.0",
20
- "@pie-lib/math-toolbar": "^1.27.0",
21
- "@pie-lib/render-ui": "^4.31.0",
22
- "@pie-lib/translator": "^2.19.0",
17
+ "@pie-lib/correct-answer-toggle": "^2.22.0",
18
+ "@pie-lib/math-input": "^6.28.0",
19
+ "@pie-lib/math-rendering": "^3.19.0",
20
+ "@pie-lib/math-toolbar": "^1.28.0",
21
+ "@pie-lib/render-ui": "^4.32.0",
22
+ "@pie-lib/translator": "^2.20.0",
23
23
  "classnames": "^2.2.5",
24
24
  "debug": "^4.1.1",
25
25
  "lodash": "^4.17.10",
@@ -29,10 +29,13 @@
29
29
  },
30
30
  "author": "",
31
31
  "license": "ISC",
32
- "gitHead": "17e3b6c8d7cd3ad6a2698703e595dc03d51b9df9",
32
+ "gitHead": "d82bdaf60534197ec8675bb5ebba1ad314075e58",
33
33
  "module": "src/index.js",
34
34
  "exports": {
35
- ".": "./src/index.js",
36
- "./print": "./src/print.js"
35
+ "./controller": {
36
+ "import": "./esm/controller.js",
37
+ "require": "./controller/lib/index.js",
38
+ "default": "./esm/controller.js"
39
+ }
37
40
  }
38
41
  }