@pie-element/math-inline 10.0.1 → 10.1.0
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 +8 -0
- package/configure/CHANGELOG.md +8 -0
- package/configure/package.json +7 -7
- package/controller/CHANGELOG.md +8 -0
- package/controller/package.json +3 -3
- package/package.json +10 -13
- package/esm/controller.js +0 -468
- package/esm/controller.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,14 @@
|
|
|
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
|
+
# [10.1.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/math-inline@9.0.0...@pie-element/math-inline@10.1.0) (2025-10-07)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @pie-element/math-inline
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
6
14
|
# [10.0.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/math-inline@8.8.11...@pie-element/math-inline@10.0.0) (2025-10-02)
|
|
7
15
|
|
|
8
16
|
|
package/configure/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,14 @@
|
|
|
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
|
+
# [9.1.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/math-inline-configure@9.0.0...@pie-element/math-inline-configure@9.1.0) (2025-10-07)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @pie-element/math-inline-configure
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
6
14
|
## [9.0.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/math-inline-configure@8.7.0...@pie-element/math-inline-configure@9.0.1) (2025-10-02)
|
|
7
15
|
|
|
8
16
|
**Note:** Version bump only for package @pie-element/math-inline-configure
|
package/configure/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-element/math-inline-configure",
|
|
3
3
|
"private": true,
|
|
4
|
-
"version": "9.0
|
|
4
|
+
"version": "9.1.0",
|
|
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.
|
|
15
|
-
"@pie-lib/editable-html": "^11.
|
|
16
|
-
"@pie-lib/math-rendering": "^3.
|
|
17
|
-
"@pie-lib/math-toolbar": "^1.
|
|
18
|
-
"@pie-lib/render-ui": "^4.
|
|
19
|
-
"@pie-lib/test-utils": "^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",
|
|
20
20
|
"classnames": "^2.2.5",
|
|
21
21
|
"debug": "^3.1.0",
|
|
22
22
|
"prop-types": "^15.6.2",
|
package/controller/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,14 @@
|
|
|
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
|
+
# [8.1.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/math-inline-controller@8.0.0...@pie-element/math-inline-controller@8.1.0) (2025-10-07)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @pie-element/math-inline-controller
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
6
14
|
## [8.0.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/math-inline-controller@7.4.11...@pie-element/math-inline-controller@8.0.1) (2025-10-02)
|
|
7
15
|
|
|
8
16
|
**Note:** Version bump only for package @pie-element/math-inline-controller
|
package/controller/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-element/math-inline-controller",
|
|
3
3
|
"private": true,
|
|
4
|
-
"version": "8.0
|
|
4
|
+
"version": "8.1.0",
|
|
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.
|
|
14
|
-
"@pie-lib/translator": "^2.
|
|
13
|
+
"@pie-lib/feedback": "^0.20.0",
|
|
14
|
+
"@pie-lib/translator": "^2.19.0",
|
|
15
15
|
"debug": "^3.1.0",
|
|
16
16
|
"lodash": "^4.17.15"
|
|
17
17
|
},
|
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
|
|
7
|
+
"version": "10.1.0",
|
|
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.
|
|
18
|
-
"@pie-lib/math-input": "^6.
|
|
19
|
-
"@pie-lib/math-rendering": "^3.
|
|
20
|
-
"@pie-lib/math-toolbar": "^1.
|
|
21
|
-
"@pie-lib/render-ui": "^4.
|
|
22
|
-
"@pie-lib/translator": "^2.
|
|
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",
|
|
23
23
|
"classnames": "^2.2.5",
|
|
24
24
|
"debug": "^4.1.1",
|
|
25
25
|
"lodash": "^4.17.10",
|
|
@@ -29,13 +29,10 @@
|
|
|
29
29
|
},
|
|
30
30
|
"author": "",
|
|
31
31
|
"license": "ISC",
|
|
32
|
-
"gitHead": "
|
|
32
|
+
"gitHead": "e6dde692b33cb1d42c6b2958fff7520dc40ca82c",
|
|
33
33
|
"module": "src/index.js",
|
|
34
34
|
"exports": {
|
|
35
|
-
"
|
|
36
|
-
|
|
37
|
-
"require": "./controller/lib/index.js",
|
|
38
|
-
"default": "./esm/controller.js"
|
|
39
|
-
}
|
|
35
|
+
".": "./src/index.js",
|
|
36
|
+
"./print": "./src/print.js"
|
|
40
37
|
}
|
|
41
38
|
}
|
package/esm/controller.js
DELETED
|
@@ -1,468 +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 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
|
package/esm/controller.js.map
DELETED
|
@@ -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","_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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"}
|