@pie-element/hotspot 9.0.2-esm.0 → 9.2.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,344 +0,0 @@
1
- import debug from 'debug';
2
- import isEmpty from 'lodash/isEmpty';
3
- import { partialScoring } from '@pie-lib/controller-utils';
4
- import isEqual from 'lodash/isEqual';
5
-
6
- function _extends() {
7
- _extends = Object.assign || function (target) {
8
- for (var i = 1; i < arguments.length; i++) {
9
- var source = arguments[i];
10
-
11
- for (var key in source) {
12
- if (Object.prototype.hasOwnProperty.call(source, key)) {
13
- target[key] = source[key];
14
- }
15
- }
16
- }
17
-
18
- return target;
19
- };
20
-
21
- return _extends.apply(this, arguments);
22
- }
23
-
24
- function _objectWithoutPropertiesLoose(source, excluded) {
25
- if (source == null) return {};
26
- var target = {};
27
- var sourceKeys = Object.keys(source);
28
- var key, i;
29
-
30
- for (i = 0; i < sourceKeys.length; i++) {
31
- key = sourceKeys[i];
32
- if (excluded.indexOf(key) >= 0) continue;
33
- target[key] = source[key];
34
- }
35
-
36
- return target;
37
- }
38
-
39
- const getCorrectResponse = choices => choices.filter(c => c.correct).map(c => c.id).sort();
40
- const isResponseCorrect = (question, session) => {
41
- const {
42
- shapes: {
43
- rectangles = [],
44
- polygons = [],
45
- circles = []
46
- }
47
- } = question;
48
- const choices = [...rectangles, ...polygons, ...circles];
49
- let correctResponseIds = getCorrectResponse(choices);
50
-
51
- if (!session || isEmpty(session)) {
52
- return false;
53
- }
54
-
55
- if (session.answers && session.answers.length) {
56
- let answerIds = (session.answers || []).map(a => a.id);
57
- return isEqual(answerIds.sort(), correctResponseIds);
58
- } else if (!(correctResponseIds && correctResponseIds.length)) {
59
- return true;
60
- }
61
-
62
- return false;
63
- };
64
-
65
- var defaults = {
66
- dimensions: {
67
- height: 0,
68
- width: 0
69
- },
70
- hotspotColor: 'rgba(137, 183, 244, 0.25)',
71
- hotspotList: ['rgba(137, 183, 244, 0.25)'],
72
- imageUrl: '',
73
- multipleCorrect: true,
74
- outlineColor: 'blue',
75
- outlineList: ['blue'],
76
- partialScoring: false,
77
- prompt: '',
78
- promptEnabled: true,
79
- rationaleEnabled: true,
80
- shapes: {
81
- rectangles: [],
82
- polygons: [],
83
- circles: []
84
- },
85
- strokeWidth: 5,
86
- studentInstructionsEnabled: true,
87
- teacherInstructions: '',
88
- teacherInstructionsEnabled: true,
89
- toolbarEditorPosition: 'bottom'
90
- };
91
-
92
- const _excluded = ["index", "correct"],
93
- _excluded2 = ["index", "correct"],
94
- _excluded3 = ["index", "correct"];
95
- const log = debug('pie-elements:hotspot:controller');
96
- const normalize = question => _extends({}, defaults, question);
97
- function model(question, session, env) {
98
- const normalizedQuestion = normalize(question);
99
- const {
100
- imageUrl,
101
- dimensions,
102
- hotspotColor,
103
- hoverOutlineColor,
104
- selectedHotspotColor,
105
- multipleCorrect,
106
- outlineColor,
107
- partialScoring,
108
- prompt,
109
- shapes,
110
- language,
111
- fontSizeFactor,
112
- autoplayAudioEnabled,
113
- completeAudioEnabled,
114
- customAudioButton
115
- } = normalizedQuestion;
116
- const {
117
- rectangles,
118
- polygons,
119
- circles
120
- } = shapes || {};
121
- const shouldIncludeCorrectResponse = env.mode === 'evaluate' || env.role === 'instructor' && env.mode === 'view';
122
- return new Promise(resolve => {
123
- const out = {
124
- disabled: env.mode !== 'gather',
125
- mode: env.mode,
126
- dimensions,
127
- imageUrl,
128
- outlineColor,
129
- hotspotColor,
130
- hoverOutlineColor,
131
- selectedHotspotColor,
132
- multipleCorrect,
133
- partialScoring,
134
- language,
135
- fontSizeFactor,
136
- autoplayAudioEnabled,
137
- completeAudioEnabled,
138
- customAudioButton,
139
- shapes: _extends({}, shapes, {
140
- // eslint-disable-next-line no-unused-vars
141
- rectangles: (rectangles || []).map(_ref => {
142
- let {
143
- correct
144
- } = _ref,
145
- rectProps = _objectWithoutPropertiesLoose(_ref, _excluded);
146
-
147
- return shouldIncludeCorrectResponse ? _extends({
148
- correct
149
- }, rectProps) : _extends({}, rectProps);
150
- }),
151
- // eslint-disable-next-line no-unused-vars
152
- polygons: (polygons || []).map(_ref2 => {
153
- let {
154
- correct
155
- } = _ref2,
156
- polyProps = _objectWithoutPropertiesLoose(_ref2, _excluded2);
157
-
158
- return shouldIncludeCorrectResponse ? _extends({
159
- correct
160
- }, polyProps) : _extends({}, polyProps);
161
- }),
162
- // eslint-disable-next-line no-unused-vars
163
- circles: (circles || []).map(_ref3 => {
164
- let {
165
- correct
166
- } = _ref3,
167
- circleProps = _objectWithoutPropertiesLoose(_ref3, _excluded3);
168
-
169
- return shouldIncludeCorrectResponse ? _extends({
170
- correct
171
- }, circleProps) : _extends({}, circleProps);
172
- })
173
- }),
174
- responseCorrect: env.mode === 'evaluate' ? isResponseCorrect(normalizedQuestion, session) : undefined,
175
- extraCSSRules: normalizedQuestion.extraCSSRules
176
- };
177
-
178
- if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {
179
- out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;
180
- out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled ? normalizedQuestion.teacherInstructions : null;
181
- } else {
182
- out.rationale = null;
183
- out.teacherInstructions = null;
184
- }
185
-
186
- out.prompt = normalizedQuestion.promptEnabled ? prompt : null;
187
- out.strokeWidth = normalizedQuestion.strokeWidth;
188
- resolve(out);
189
- });
190
- }
191
- const createDefaultModel = (model = {}) => new Promise(resolve => {
192
- resolve(_extends({}, defaults, model));
193
- });
194
-
195
- const getScore = (config, session, env = {}) => {
196
- const {
197
- answers
198
- } = session || {};
199
-
200
- if (!config.shapes || !config.shapes.rectangles && !config.shapes.polygons && !config.shapes.circles) {
201
- return 0;
202
- }
203
-
204
- const {
205
- shapes: {
206
- rectangles = [],
207
- polygons = [],
208
- circles = []
209
- } = {}
210
- } = config;
211
- const partialScoringEnabled = partialScoring.enabled(config, env);
212
-
213
- if (!partialScoringEnabled) {
214
- return isResponseCorrect(config, session) ? 1 : 0;
215
- }
216
-
217
- let correctAnswers = 0;
218
- let selectedChoices = 0;
219
- const choices = [...rectangles, ...polygons, ...circles];
220
- const correctChoices = choices.filter(choice => choice.correct);
221
- choices.forEach(shape => {
222
- const selected = answers && answers.filter(answer => answer.id === shape.id)[0];
223
- const correctlySelected = shape.correct && selected;
224
-
225
- if (selected) {
226
- selectedChoices += 1;
227
- }
228
-
229
- if (correctlySelected) {
230
- correctAnswers += 1;
231
- }
232
- });
233
- const extraAnswers = selectedChoices > correctChoices.length ? selectedChoices - correctChoices.length : 0;
234
- const total = correctChoices.length === 0 ? 1 : correctChoices.length;
235
- const str = ((correctAnswers - extraAnswers) / total).toFixed(2);
236
- return str < 0 ? 0 : parseFloat(str);
237
- };
238
-
239
- function outcome(config, session, env = {}) {
240
- return new Promise(resolve => {
241
- log('outcome...');
242
-
243
- if (!session || isEmpty(session)) {
244
- resolve({
245
- score: 0,
246
- empty: true
247
- });
248
- }
249
-
250
- if (session.answers) {
251
- const score = getScore(config, session, env);
252
- resolve({
253
- score
254
- });
255
- } else {
256
- resolve({
257
- score: 0,
258
- empty: true
259
- });
260
- }
261
- });
262
- }
263
-
264
- const returnShapesCorrect = shapes => {
265
- let answers = [];
266
- shapes.forEach(i => {
267
- const {
268
- correct,
269
- id
270
- } = i;
271
-
272
- if (correct) {
273
- answers.push({
274
- id
275
- });
276
- }
277
- });
278
- return answers;
279
- };
280
-
281
- const createCorrectResponseSession = (question, env) => {
282
- return new Promise(resolve => {
283
- if (env.mode !== 'evaluate' && env.role === 'instructor') {
284
- const {
285
- shapes: {
286
- rectangles = [],
287
- circles = [],
288
- polygons = {}
289
- } = {}
290
- } = question;
291
- const rectangleCorrect = returnShapesCorrect(rectangles);
292
- const polygonsCorrect = returnShapesCorrect(polygons);
293
- const circlesCorrect = returnShapesCorrect(circles);
294
- resolve({
295
- answers: [...rectangleCorrect, ...polygonsCorrect, ...circlesCorrect],
296
- id: '1'
297
- });
298
- } else {
299
- resolve(null);
300
- }
301
- });
302
- }; // remove all html tags
303
-
304
-
305
- const getContent = html => (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');
306
-
307
- const validate = (model = {}, config = {}) => {
308
- const {
309
- shapes
310
- } = model;
311
- const {
312
- minShapes = 2,
313
- maxShapes,
314
- maxSelections
315
- } = config;
316
- const errors = {};
317
- ['teacherInstructions', 'prompt', 'rationale'].forEach(field => {
318
- var _config$field;
319
-
320
- if ((_config$field = config[field]) != null && _config$field.required && !getContent(model[field])) {
321
- errors[field] = 'This field is required.';
322
- }
323
- });
324
- const allShapes = Object.values(shapes || {}).reduce((acc, shape) => [...acc, ...shape], []);
325
- const nbOfSelections = (allShapes || []).reduce((acc, shape) => shape.correct ? acc + 1 : acc, 0);
326
- const nbOfShapes = (allShapes || []).length;
327
-
328
- if (nbOfShapes < minShapes) {
329
- errors.shapes = `There should be at least ${minShapes} shapes defined.`;
330
- } else if (nbOfShapes > maxShapes) {
331
- errors.shapes = `No more than ${maxShapes} shapes should be defined.`;
332
- }
333
-
334
- if (nbOfSelections < 1) {
335
- errors.selections = 'There should be at least 1 shape selected.';
336
- } else if (nbOfSelections > maxSelections) {
337
- errors.selections = `No more than ${maxSelections} shapes should be selected.`;
338
- }
339
-
340
- return errors;
341
- };
342
-
343
- export { createCorrectResponseSession, createDefaultModel, model, normalize, outcome, validate };
344
- //# 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":["import isEqual from 'lodash/isEqual';\nimport isEmpty from 'lodash/isEmpty';\n\nexport const getCorrectResponse = (choices) =>\n choices\n .filter((c) => c.correct)\n .map((c) => c.id)\n .sort();\n\nexport const isResponseCorrect = (question, session) => {\n const {\n shapes: { rectangles = [], polygons = [], circles = [] },\n } = question;\n const choices = [...rectangles, ...polygons, ...circles];\n let correctResponseIds = getCorrectResponse(choices);\n\n if (!session || isEmpty(session)) {\n return false;\n }\n\n if (session.answers && session.answers.length) {\n let answerIds = (session.answers || []).map((a) => a.id);\n\n return isEqual(answerIds.sort(), correctResponseIds);\n } else if (!(correctResponseIds && correctResponseIds.length)) {\n return true;\n }\n\n return false;\n};\n","export default {\n dimensions: { height: 0, width: 0 },\n hotspotColor: 'rgba(137, 183, 244, 0.25)',\n hotspotList: ['rgba(137, 183, 244, 0.25)'],\n imageUrl: '',\n multipleCorrect: true,\n outlineColor: 'blue',\n outlineList: ['blue'],\n partialScoring: false,\n prompt: '',\n promptEnabled: true,\n rationaleEnabled: true,\n shapes: { rectangles: [], polygons: [], circles: [] },\n strokeWidth: 5,\n studentInstructionsEnabled: true,\n teacherInstructions: '',\n teacherInstructionsEnabled: true,\n toolbarEditorPosition: 'bottom',\n};\n","import debug from 'debug';\nimport isEmpty from 'lodash/isEmpty';\nimport { partialScoring } from '@pie-lib/controller-utils';\n\nimport { isResponseCorrect } from './utils';\n\nimport defaults from './defaults';\n\nconst log = debug('pie-elements:hotspot:controller');\n\nexport const normalize = (question) => ({\n ...defaults,\n ...question,\n});\n\nexport function model(question, session, env) {\n const normalizedQuestion = normalize(question);\n const {\n imageUrl,\n dimensions,\n hotspotColor,\n hoverOutlineColor,\n selectedHotspotColor,\n multipleCorrect,\n outlineColor,\n partialScoring,\n prompt,\n shapes,\n language,\n fontSizeFactor,\n autoplayAudioEnabled,\n completeAudioEnabled,\n customAudioButton,\n } = normalizedQuestion;\n const { rectangles, polygons, circles } = shapes || {};\n\n const shouldIncludeCorrectResponse = env.mode === 'evaluate' || (env.role === 'instructor' && env.mode === 'view');\n\n return new Promise((resolve) => {\n const out = {\n disabled: env.mode !== 'gather',\n mode: env.mode,\n dimensions,\n imageUrl,\n outlineColor,\n hotspotColor,\n hoverOutlineColor,\n selectedHotspotColor,\n multipleCorrect,\n partialScoring,\n language,\n fontSizeFactor,\n autoplayAudioEnabled,\n completeAudioEnabled,\n customAudioButton,\n shapes: {\n ...shapes,\n // eslint-disable-next-line no-unused-vars\n rectangles: (rectangles || []).map(({ index, correct, ...rectProps }) =>\n shouldIncludeCorrectResponse ? { correct, ...rectProps } : { ...rectProps },\n ),\n // eslint-disable-next-line no-unused-vars\n polygons: (polygons || []).map(({ index, correct, ...polyProps }) =>\n shouldIncludeCorrectResponse ? { correct, ...polyProps } : { ...polyProps },\n ),\n // eslint-disable-next-line no-unused-vars\n circles: (circles || []).map(({ index, correct, ...circleProps }) =>\n shouldIncludeCorrectResponse ? { correct, ...circleProps } : { ...circleProps },\n ),\n },\n responseCorrect: env.mode === 'evaluate' ? isResponseCorrect(normalizedQuestion, session) : undefined,\n extraCSSRules: normalizedQuestion.extraCSSRules,\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 out.prompt = normalizedQuestion.promptEnabled ? prompt : null;\n out.strokeWidth = normalizedQuestion.strokeWidth;\n\n resolve(out);\n });\n}\n\nexport const createDefaultModel = (model = {}) =>\n new Promise((resolve) => {\n resolve({\n ...defaults,\n ...model,\n });\n });\n\nconst getScore = (config, session, env = {}) => {\n const { answers } = session || {};\n\n if (!config.shapes || (!config.shapes.rectangles && !config.shapes.polygons && !config.shapes.circles)) {\n return 0;\n }\n\n const { shapes: { rectangles = [], polygons = [], circles = [] } = {} } = config;\n const partialScoringEnabled = partialScoring.enabled(config, env);\n\n if (!partialScoringEnabled) {\n return isResponseCorrect(config, session) ? 1 : 0;\n }\n\n let correctAnswers = 0;\n let selectedChoices = 0;\n\n const choices = [...rectangles, ...polygons, ...circles];\n\n const correctChoices = choices.filter((choice) => choice.correct);\n\n choices.forEach((shape) => {\n const selected = answers && answers.filter((answer) => answer.id === shape.id)[0];\n const correctlySelected = shape.correct && selected;\n\n if (selected) {\n selectedChoices += 1;\n }\n\n if (correctlySelected) {\n correctAnswers += 1;\n }\n });\n\n const extraAnswers = selectedChoices > correctChoices.length ? selectedChoices - correctChoices.length : 0;\n\n const total = correctChoices.length === 0 ? 1 : correctChoices.length;\n const str = ((correctAnswers - extraAnswers) / total).toFixed(2);\n\n return str < 0 ? 0 : parseFloat(str);\n};\n\nexport function outcome(config, session, env = {}) {\n return new Promise((resolve) => {\n log('outcome...');\n\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n }\n\n if (session.answers) {\n const score = getScore(config, session, env);\n resolve({ score });\n } else {\n resolve({ score: 0, empty: true });\n }\n });\n}\n\nconst returnShapesCorrect = (shapes) => {\n let answers = [];\n\n shapes.forEach((i) => {\n const { correct, id } = i;\n if (correct) {\n answers.push({ id });\n }\n });\n return answers;\n};\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { shapes: { rectangles = [], circles = [], polygons = {} } = {} } = question;\n\n const rectangleCorrect = returnShapesCorrect(rectangles);\n const polygonsCorrect = returnShapesCorrect(polygons);\n const circlesCorrect = returnShapesCorrect(circles);\n\n resolve({\n answers: [...rectangleCorrect, ...polygonsCorrect, ...circlesCorrect],\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 { shapes } = model;\n const { minShapes = 2, maxShapes, maxSelections } = 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 allShapes = Object.values(shapes || {}).reduce((acc, shape) => [...acc, ...shape], []);\n\n const nbOfSelections = (allShapes || []).reduce((acc, shape) => (shape.correct ? acc + 1 : acc), 0);\n\n const nbOfShapes = (allShapes || []).length;\n\n if (nbOfShapes < minShapes) {\n errors.shapes = `There should be at least ${minShapes} shapes defined.`;\n } else if (nbOfShapes > maxShapes) {\n errors.shapes = `No more than ${maxShapes} shapes should be defined.`;\n }\n\n if (nbOfSelections < 1) {\n errors.selections = 'There should be at least 1 shape selected.';\n } else if (nbOfSelections > maxSelections) {\n errors.selections = `No more than ${maxSelections} shapes should be selected.`;\n }\n\n return errors;\n};\n"],"names":["getCorrectResponse","choices","filter","c","correct","map","id","sort","isResponseCorrect","question","session","shapes","rectangles","polygons","circles","correctResponseIds","isEmpty","answers","length","answerIds","a","isEqual","dimensions","height","width","hotspotColor","hotspotList","imageUrl","multipleCorrect","outlineColor","outlineList","partialScoring","prompt","promptEnabled","rationaleEnabled","strokeWidth","studentInstructionsEnabled","teacherInstructions","teacherInstructionsEnabled","toolbarEditorPosition","log","debug","normalize","defaults","model","env","normalizedQuestion","hoverOutlineColor","selectedHotspotColor","language","fontSizeFactor","autoplayAudioEnabled","completeAudioEnabled","customAudioButton","shouldIncludeCorrectResponse","mode","role","Promise","resolve","out","disabled","rectProps","polyProps","circleProps","responseCorrect","undefined","extraCSSRules","rationale","createDefaultModel","getScore","config","partialScoringEnabled","enabled","correctAnswers","selectedChoices","correctChoices","choice","forEach","shape","selected","answer","correctlySelected","extraAnswers","total","str","toFixed","parseFloat","outcome","score","empty","returnShapesCorrect","i","push","createCorrectResponseSession","rectangleCorrect","polygonsCorrect","circlesCorrect","getContent","html","replace","validate","minShapes","maxShapes","maxSelections","errors","field","required","allShapes","Object","values","reduce","acc","nbOfSelections","nbOfShapes","selections"],"mappings":"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"}