@pie-element/drag-in-the-blank 8.0.1 → 8.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/esm/controller.js DELETED
@@ -1,328 +0,0 @@
1
- import isEmpty from 'lodash/isEmpty';
2
- import cloneDeep from 'lodash/cloneDeep';
3
- import reduce from 'lodash/reduce';
4
- import { partialScoring, lockChoices, getShuffledChoices } from '@pie-lib/controller-utils';
5
-
6
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
7
- try {
8
- var info = gen[key](arg);
9
- var value = info.value;
10
- } catch (error) {
11
- reject(error);
12
- return;
13
- }
14
-
15
- if (info.done) {
16
- resolve(value);
17
- } else {
18
- Promise.resolve(value).then(_next, _throw);
19
- }
20
- }
21
-
22
- function _asyncToGenerator(fn) {
23
- return function () {
24
- var self = this,
25
- args = arguments;
26
- return new Promise(function (resolve, reject) {
27
- var gen = fn.apply(self, args);
28
-
29
- function _next(value) {
30
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
31
- }
32
-
33
- function _throw(err) {
34
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
35
- }
36
-
37
- _next(undefined);
38
- });
39
- };
40
- }
41
-
42
- function _defineProperty(obj, key, value) {
43
- if (key in obj) {
44
- Object.defineProperty(obj, key, {
45
- value: value,
46
- enumerable: true,
47
- configurable: true,
48
- writable: true
49
- });
50
- } else {
51
- obj[key] = value;
52
- }
53
-
54
- return obj;
55
- }
56
-
57
- var replaceHtmlRegex = /<(?!img)[^>]*>?/gm;
58
- var getAllCorrectResponses = _ref => {
59
- var {
60
- correctResponse,
61
- alternateResponses
62
- } = _ref;
63
- return reduce(correctResponse || {}, (obj, val, key) => {
64
- obj.possibleResponses[key] = [val];
65
-
66
- if (alternateResponses && alternateResponses[key]) {
67
- obj.possibleResponses[key] = [...obj.possibleResponses[key], ...cloneDeep(alternateResponses[key])];
68
- }
69
-
70
- if (obj.numberOfPossibleResponses === undefined || obj.numberOfPossibleResponses > obj.possibleResponses[key].length) {
71
- obj.numberOfPossibleResponses = obj.possibleResponses[key].length;
72
- }
73
-
74
- return obj;
75
- }, {
76
- possibleResponses: {},
77
- numberOfPossibleResponses: undefined
78
- });
79
- };
80
- var choiceIsEmpty = choice => {
81
- if (choice) {
82
- var {
83
- value = ''
84
- } = choice;
85
- var withoutEmptyTags = value.replace(replaceHtmlRegex, '') || '';
86
- return withoutEmptyTags.trim() === '';
87
- }
88
-
89
- return false;
90
- };
91
-
92
- var defaults = {
93
- choices: [],
94
- choicesPosition: 'below',
95
- correctResponse: {},
96
- disabled: false,
97
- duplicates: true,
98
- markup: '',
99
- mode: 'gather',
100
- prompt: '',
101
- promptEnabled: true,
102
- rationale: '',
103
- rationaleEnabled: true,
104
- studentInstructionsEnabled: true,
105
- teacherInstructions: '',
106
- teacherInstructionsEnabled: true,
107
- toolbarEditorPosition: 'bottom'
108
- };
109
-
110
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
111
-
112
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
113
- var normalize = question => _objectSpread(_objectSpread({}, defaults), question);
114
- /**
115
- *
116
- * @param {*} question
117
- * @param {*} session
118
- * @param {*} env
119
- * @param {*} updateSession - optional - a function that will set the properties passed into it on the session.
120
- */
121
-
122
- function model(question, session, env, updateSession) {
123
- return new Promise( /*#__PURE__*/function () {
124
- var _ref = _asyncToGenerator(function* (resolve) {
125
- var normalizedQuestion = normalize(question);
126
- var feedback = {};
127
-
128
- if (env.mode === 'evaluate') {
129
- (function () {
130
- var responses = getAllCorrectResponses(normalizedQuestion) || {};
131
- var allCorrectResponses = responses.possibleResponses;
132
- var numberOfPossibleResponses = responses.numberOfPossibleResponses || 0;
133
- var correctResponses = undefined;
134
- var {
135
- value
136
- } = session || {};
137
-
138
- var _loop = function _loop(i) {
139
- var result = Object.keys(allCorrectResponses).reduce((obj, key) => {
140
- var choices = allCorrectResponses[key];
141
- var answer = value && value[key] || '';
142
- obj.feedback[key] = choices[i] === answer;
143
-
144
- if (obj.feedback[key]) {
145
- obj.correctResponses += 1;
146
- }
147
-
148
- return obj;
149
- }, {
150
- correctResponses: 0,
151
- feedback: {}
152
- });
153
-
154
- if (correctResponses === undefined || result.correctResponses > correctResponses) {
155
- correctResponses = result.correctResponses;
156
- feedback = result.feedback;
157
- }
158
- };
159
-
160
- for (var i = 0; i < numberOfPossibleResponses; i++) {
161
- _loop(i);
162
- }
163
- })();
164
- }
165
-
166
- var choices = normalizedQuestion.choices && normalizedQuestion.choices.filter(choice => !choiceIsEmpty(choice));
167
- var lockChoiceOrder = lockChoices(normalizedQuestion, session, env);
168
-
169
- if (!lockChoiceOrder) {
170
- choices = yield getShuffledChoices(choices, session, updateSession, 'id');
171
- }
172
-
173
- var shouldIncludeCorrectResponse = env.mode === 'evaluate';
174
-
175
- var out = _objectSpread(_objectSpread({}, normalizedQuestion), {}, {
176
- prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null,
177
- choices,
178
- feedback,
179
- mode: env.mode,
180
- disabled: env.mode !== 'gather',
181
- responseCorrect: shouldIncludeCorrectResponse ? getScore(normalizedQuestion, session) === 1 : undefined,
182
- correctResponse: shouldIncludeCorrectResponse ? normalizedQuestion.correctResponse : undefined
183
- });
184
-
185
- if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {
186
- out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;
187
- out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled ? normalizedQuestion.teacherInstructions : null;
188
- } else {
189
- out.rationale = null;
190
- out.teacherInstructions = null;
191
- }
192
-
193
- resolve(out);
194
- });
195
-
196
- return function (_x) {
197
- return _ref.apply(this, arguments);
198
- };
199
- }());
200
- }
201
- var getScore = (config, session) => {
202
- var responses = getAllCorrectResponses(config);
203
- var allCorrectResponses = responses.possibleResponses;
204
- var maxScore = Object.keys(config.correctResponse).length;
205
- var numberOfPossibleResponses = responses.numberOfPossibleResponses || 0;
206
- var correctCount = 0;
207
- var {
208
- value
209
- } = session || {};
210
-
211
- var _loop2 = function _loop2(i) {
212
- var result = Object.keys(allCorrectResponses).reduce((total, key) => {
213
- var choices = allCorrectResponses[key];
214
- var answer = value && value[key] || '';
215
-
216
- if (choices[i] === answer) {
217
- return total;
218
- }
219
-
220
- return total - 1;
221
- }, maxScore);
222
-
223
- if (result > correctCount) {
224
- correctCount = result;
225
- }
226
-
227
- if (result === maxScore) {
228
- return "break";
229
- }
230
- };
231
-
232
- for (var i = 0; i < numberOfPossibleResponses; i++) {
233
- var _ret = _loop2(i);
234
-
235
- if (_ret === "break") break;
236
- }
237
-
238
- var str = maxScore ? (correctCount / maxScore).toFixed(2) : 0;
239
- return parseFloat(str);
240
- };
241
- /**
242
- *
243
- * The score is partial by default for checkbox mode, allOrNothing for radio mode.
244
- * To disable partial scoring for checkbox mode you either set model.partialScoring = false or env.partialScoring =
245
- * false. the value in `env` will override the value in `model`.
246
- * @param {Object} model - the main model
247
- * @param {boolean} model.partialScoring - is partial scoring enabled (if undefined set to to true)
248
- * @param {*} session
249
- * @param {Object} env
250
- * @param {boolean} env.partialScoring - is partial scoring enabled (if undefined default to true) This overrides
251
- * `model.partialScoring`.
252
- */
253
-
254
- function outcome(model, session) {
255
- var env = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
256
- return new Promise(resolve => {
257
- var partialScoringEnabled = partialScoring.enabled(model, env);
258
- var score = getScore(model, session);
259
- resolve({
260
- score: partialScoringEnabled ? score : score === 1 ? 1 : 0,
261
- empty: !session || isEmpty(session)
262
- });
263
- });
264
- }
265
- var createCorrectResponseSession = (question, env) => {
266
- return new Promise(resolve => {
267
- if (env.mode !== 'evaluate' && env.role === 'instructor') {
268
- resolve({
269
- value: question.correctResponse,
270
- id: '1'
271
- });
272
- } else {
273
- resolve(null);
274
- }
275
- });
276
- }; // remove all html tags
277
-
278
-
279
- var getContent = html => (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');
280
-
281
- var validate = function validate() {
282
- var _Object$values;
283
-
284
- var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
285
- var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
286
- var {
287
- choices,
288
- correctResponse,
289
- markup
290
- } = model;
291
- var {
292
- minChoices = 2,
293
- maxChoices,
294
- maxResponseAreas
295
- } = config;
296
- var errors = {};
297
- ['teacherInstructions', 'prompt', 'rationale'].forEach(field => {
298
- var _config$field;
299
-
300
- if ((_config$field = config[field]) !== null && _config$field !== void 0 && _config$field.required && !getContent(model[field])) {
301
- errors[field] = 'This field is required.';
302
- }
303
- });
304
- var nbOfResponseAreas = ((markup || '').match(/\{\{(\d+)\}\}/g) || []).length;
305
- var nbOfChoices = (choices || []).length;
306
- var emptyResponseAreas = (_Object$values = Object.values(correctResponse)) === null || _Object$values === void 0 ? void 0 : _Object$values.filter(response => !response);
307
-
308
- if (emptyResponseAreas.length) {
309
- errors.correctResponseError = 'There should be a choice defined for each response area.';
310
- }
311
-
312
- if (nbOfResponseAreas > maxResponseAreas) {
313
- errors.responseAreasError = "No more than ".concat(maxResponseAreas, " response areas should be defined.");
314
- } else if (nbOfResponseAreas < 1) {
315
- errors.responseAreasError = 'There should be at least 1 response area defined.';
316
- }
317
-
318
- if (nbOfChoices < minChoices) {
319
- errors.choicesError = "There should be at least ".concat(minChoices, " tokens defined.");
320
- } else if (nbOfChoices > maxChoices) {
321
- errors.choicesError = "No more than ".concat(maxChoices, " tokens should be defined.");
322
- }
323
-
324
- return errors;
325
- };
326
-
327
- export { createCorrectResponseSession, getScore, model, normalize, outcome, validate };
328
- //# sourceMappingURL=controller.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"controller.js","sources":["../../../node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../controller/src/utils.js","../controller/src/defaults.js","../controller/src/index.js"],"sourcesContent":["function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","import cloneDeep from 'lodash/cloneDeep';\nimport reduce from 'lodash/reduce';\n\nconst replaceHtmlRegex = /<(?!img)[^>]*>?/gm;\n\nexport const getAllCorrectResponses = ({ correctResponse, alternateResponses }) => {\n return reduce(\n correctResponse || {},\n (obj, val, key) => {\n obj.possibleResponses[key] = [val];\n\n if (alternateResponses && alternateResponses[key]) {\n obj.possibleResponses[key] = [...obj.possibleResponses[key], ...cloneDeep(alternateResponses[key])];\n }\n\n if (\n obj.numberOfPossibleResponses === undefined ||\n obj.numberOfPossibleResponses > obj.possibleResponses[key].length\n ) {\n obj.numberOfPossibleResponses = obj.possibleResponses[key].length;\n }\n\n return obj;\n },\n {\n possibleResponses: {},\n numberOfPossibleResponses: undefined,\n },\n );\n};\n\nexport const choiceIsEmpty = (choice) => {\n if (choice) {\n const { value = '' } = choice;\n const withoutEmptyTags = value.replace(replaceHtmlRegex, '') || '';\n\n return withoutEmptyTags.trim() === '';\n }\n\n return false;\n};\n","export default {\n choices: [],\n choicesPosition: 'below',\n correctResponse: {},\n disabled: false,\n duplicates: true,\n markup: '',\n mode: 'gather',\n prompt: '',\n promptEnabled: true,\n rationale: '',\n rationaleEnabled: true,\n studentInstructionsEnabled: true,\n teacherInstructions: '',\n teacherInstructionsEnabled: true,\n toolbarEditorPosition: 'bottom',\n};\n","import isEmpty from 'lodash/isEmpty';\nimport { getAllCorrectResponses, choiceIsEmpty } from './utils';\nimport { lockChoices, getShuffledChoices, partialScoring } from '@pie-lib/controller-utils';\nimport defaults from './defaults';\n\nexport const normalize = (question) => ({\n ...defaults,\n ...question,\n});\n\n/**\n *\n * @param {*} question\n * @param {*} session\n * @param {*} env\n * @param {*} updateSession - optional - a function that will set the properties passed into it on the session.\n */\nexport function model(question, session, env, updateSession) {\n return new Promise(async (resolve) => {\n const normalizedQuestion = normalize(question);\n let feedback = {};\n\n if (env.mode === 'evaluate') {\n const responses = getAllCorrectResponses(normalizedQuestion) || {};\n const allCorrectResponses = responses.possibleResponses;\n const numberOfPossibleResponses = responses.numberOfPossibleResponses || 0;\n let correctResponses = undefined;\n const { value } = session || {};\n\n for (let i = 0; i < numberOfPossibleResponses; i++) {\n const result = Object.keys(allCorrectResponses).reduce(\n (obj, key) => {\n const choices = allCorrectResponses[key];\n const answer = (value && value[key]) || '';\n\n obj.feedback[key] = choices[i] === answer;\n\n if (obj.feedback[key]) {\n obj.correctResponses += 1;\n }\n\n return obj;\n },\n { correctResponses: 0, feedback: {} },\n );\n\n if (correctResponses === undefined || result.correctResponses > correctResponses) {\n correctResponses = result.correctResponses;\n feedback = result.feedback;\n }\n }\n }\n\n let choices = normalizedQuestion.choices && normalizedQuestion.choices.filter((choice) => !choiceIsEmpty(choice));\n\n const lockChoiceOrder = lockChoices(normalizedQuestion, session, env);\n\n if (!lockChoiceOrder) {\n choices = await getShuffledChoices(choices, session, updateSession, 'id');\n }\n\n const shouldIncludeCorrectResponse = env.mode === 'evaluate';\n\n const out = {\n ...normalizedQuestion,\n prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null,\n choices,\n feedback,\n mode: env.mode,\n disabled: env.mode !== 'gather',\n responseCorrect: shouldIncludeCorrectResponse ? getScore(normalizedQuestion, session) === 1 : undefined,\n correctResponse: shouldIncludeCorrectResponse ? normalizedQuestion.correctResponse : undefined,\n };\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;\n out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n }\n\n resolve(out);\n });\n}\n\nexport const getScore = (config, session) => {\n const responses = getAllCorrectResponses(config);\n const allCorrectResponses = responses.possibleResponses;\n const maxScore = Object.keys(config.correctResponse).length;\n const numberOfPossibleResponses = responses.numberOfPossibleResponses || 0;\n let correctCount = 0;\n const { value } = session || {};\n\n for (let i = 0; i < numberOfPossibleResponses; i++) {\n const result = Object.keys(allCorrectResponses).reduce((total, key) => {\n const choices = allCorrectResponses[key];\n const answer = (value && value[key]) || '';\n\n if (choices[i] === answer) {\n return total;\n }\n\n return total - 1;\n }, maxScore);\n\n if (result > correctCount) {\n correctCount = result;\n }\n\n if (result === maxScore) {\n break;\n }\n }\n\n const str = maxScore ? (correctCount / maxScore).toFixed(2) : 0;\n\n return parseFloat(str);\n};\n\n/**\n *\n * The score is partial by default for checkbox mode, allOrNothing for radio mode.\n * To disable partial scoring for checkbox mode you either set model.partialScoring = false or env.partialScoring =\n * false. the value in `env` will override the value in `model`.\n * @param {Object} model - the main model\n * @param {boolean} model.partialScoring - is partial scoring enabled (if undefined set to to true)\n * @param {*} session\n * @param {Object} env\n * @param {boolean} env.partialScoring - is partial scoring enabled (if undefined default to true) This overrides\n * `model.partialScoring`.\n */\nexport function outcome(model, session, env = {}) {\n return new Promise((resolve) => {\n const partialScoringEnabled = partialScoring.enabled(model, env);\n const score = getScore(model, session);\n\n resolve({\n score: partialScoringEnabled ? score : score === 1 ? 1 : 0,\n empty: !session || isEmpty(session),\n });\n });\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n resolve({\n value: question.correctResponse,\n id: '1',\n });\n } else {\n resolve(null);\n }\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 { choices, correctResponse, markup } = model;\n const { minChoices = 2, maxChoices, maxResponseAreas } = config;\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 const nbOfResponseAreas = ((markup || '').match(/\\{\\{(\\d+)\\}\\}/g) || []).length;\n const nbOfChoices = (choices || []).length;\n const emptyResponseAreas = Object.values(correctResponse)?.filter((response) => !response);\n\n if (emptyResponseAreas.length) {\n errors.correctResponseError = 'There should be a choice defined for each response area.';\n }\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 if (nbOfChoices < minChoices) {\n errors.choicesError = `There should be at least ${minChoices} tokens defined.`;\n } else if (nbOfChoices > maxChoices) {\n errors.choicesError = `No more than ${maxChoices} tokens should be defined.`;\n }\n\n return errors;\n};\n"],"names":["replaceHtmlRegex","getAllCorrectResponses","correctResponse","alternateResponses","reduce","obj","val","key","possibleResponses","cloneDeep","numberOfPossibleResponses","undefined","length","choiceIsEmpty","choice","value","withoutEmptyTags","replace","trim","choices","choicesPosition","disabled","duplicates","markup","mode","prompt","promptEnabled","rationale","rationaleEnabled","studentInstructionsEnabled","teacherInstructions","teacherInstructionsEnabled","toolbarEditorPosition","normalize","question","defaults","model","session","env","updateSession","Promise","resolve","normalizedQuestion","feedback","responses","allCorrectResponses","correctResponses","i","result","Object","keys","answer","filter","lockChoiceOrder","lockChoices","getShuffledChoices","shouldIncludeCorrectResponse","out","responseCorrect","getScore","role","config","maxScore","correctCount","total","str","toFixed","parseFloat","outcome","partialScoringEnabled","partialScoring","enabled","score","empty","isEmpty","createCorrectResponseSession","id","getContent","html","validate","minChoices","maxChoices","maxResponseAreas","errors","forEach","field","required","nbOfResponseAreas","match","nbOfChoices","emptyResponseAreas","values","response","correctResponseError","responseAreasError","choicesError"],"mappings":"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"}