@pie-element/hotspot 6.15.1 → 6.15.2-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/configure/package.json +1 -1
  2. package/controller/package.json +1 -1
  3. package/package.json +3 -3
  4. package/configure/lib/DeleteWidget.js +0 -79
  5. package/configure/lib/DeleteWidget.js.map +0 -1
  6. package/configure/lib/button.js +0 -61
  7. package/configure/lib/button.js.map +0 -1
  8. package/configure/lib/buttons/circle.js +0 -40
  9. package/configure/lib/buttons/circle.js.map +0 -1
  10. package/configure/lib/buttons/polygon.js +0 -46
  11. package/configure/lib/buttons/polygon.js.map +0 -1
  12. package/configure/lib/buttons/rectangle.js +0 -46
  13. package/configure/lib/buttons/rectangle.js.map +0 -1
  14. package/configure/lib/defaults.js +0 -143
  15. package/configure/lib/defaults.js.map +0 -1
  16. package/configure/lib/hotspot-circle.js +0 -246
  17. package/configure/lib/hotspot-circle.js.map +0 -1
  18. package/configure/lib/hotspot-container.js +0 -417
  19. package/configure/lib/hotspot-container.js.map +0 -1
  20. package/configure/lib/hotspot-drawable.js +0 -548
  21. package/configure/lib/hotspot-drawable.js.map +0 -1
  22. package/configure/lib/hotspot-palette.js +0 -154
  23. package/configure/lib/hotspot-palette.js.map +0 -1
  24. package/configure/lib/hotspot-polygon.js +0 -364
  25. package/configure/lib/hotspot-polygon.js.map +0 -1
  26. package/configure/lib/hotspot-rectangle.js +0 -240
  27. package/configure/lib/hotspot-rectangle.js.map +0 -1
  28. package/configure/lib/icons.js +0 -7
  29. package/configure/lib/icons.js.map +0 -1
  30. package/configure/lib/index.js +0 -254
  31. package/configure/lib/index.js.map +0 -1
  32. package/configure/lib/root.js +0 -418
  33. package/configure/lib/root.js.map +0 -1
  34. package/configure/lib/shapes/circle.js +0 -115
  35. package/configure/lib/shapes/circle.js.map +0 -1
  36. package/configure/lib/shapes/polygon.js +0 -111
  37. package/configure/lib/shapes/polygon.js.map +0 -1
  38. package/configure/lib/shapes/rectagle.js +0 -115
  39. package/configure/lib/shapes/rectagle.js.map +0 -1
  40. package/configure/lib/upload-control.js +0 -68
  41. package/configure/lib/upload-control.js.map +0 -1
  42. package/configure/lib/utils.js +0 -237
  43. package/configure/lib/utils.js.map +0 -1
  44. package/controller/lib/defaults.js +0 -33
  45. package/controller/lib/defaults.js.map +0 -1
  46. package/controller/lib/index.js +0 -289
  47. package/controller/lib/index.js.map +0 -1
  48. package/controller/lib/utils.js +0 -54
  49. package/controller/lib/utils.js.map +0 -1
  50. package/lib/hotspot/circle.js +0 -191
  51. package/lib/hotspot/circle.js.map +0 -1
  52. package/lib/hotspot/container.js +0 -282
  53. package/lib/hotspot/container.js.map +0 -1
  54. package/lib/hotspot/icons.js +0 -8
  55. package/lib/hotspot/icons.js.map +0 -1
  56. package/lib/hotspot/index.js +0 -209
  57. package/lib/hotspot/index.js.map +0 -1
  58. package/lib/hotspot/polygon.js +0 -225
  59. package/lib/hotspot/polygon.js.map +0 -1
  60. package/lib/hotspot/rectangle.js +0 -207
  61. package/lib/hotspot/rectangle.js.map +0 -1
  62. package/lib/index.js +0 -114
  63. package/lib/index.js.map +0 -1
  64. package/lib/session-updater.js +0 -30
  65. package/lib/session-updater.js.map +0 -1
@@ -1,289 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.createDefaultModel = exports.createCorrectResponseSession = void 0;
9
- exports.model = model;
10
- exports.normalize = void 0;
11
- exports.outcome = outcome;
12
- exports.validate = void 0;
13
-
14
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
15
-
16
- var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
17
-
18
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
19
-
20
- var _debug = _interopRequireDefault(require("debug"));
21
-
22
- var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
23
-
24
- var _controllerUtils = require("@pie-lib/pie-toolbox/controller-utils");
25
-
26
- var _utils = require("./utils");
27
-
28
- var _defaults = _interopRequireDefault(require("./defaults"));
29
-
30
- var _excluded = ["index"],
31
- _excluded2 = ["index"],
32
- _excluded3 = ["index"];
33
-
34
- 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; }
35
-
36
- 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) { (0, _defineProperty2["default"])(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; }
37
-
38
- var log = (0, _debug["default"])('pie-elements:hotspot:controller');
39
-
40
- var normalize = function normalize(question) {
41
- return _objectSpread(_objectSpread({}, _defaults["default"]), question);
42
- };
43
-
44
- exports.normalize = normalize;
45
-
46
- function model(question, session, env) {
47
- var normalizedQuestion = normalize(question);
48
- var imageUrl = normalizedQuestion.imageUrl,
49
- dimensions = normalizedQuestion.dimensions,
50
- hotspotColor = normalizedQuestion.hotspotColor,
51
- multipleCorrect = normalizedQuestion.multipleCorrect,
52
- outlineColor = normalizedQuestion.outlineColor,
53
- partialScoring = normalizedQuestion.partialScoring,
54
- prompt = normalizedQuestion.prompt,
55
- shapes = normalizedQuestion.shapes,
56
- language = normalizedQuestion.language;
57
-
58
- var _ref = shapes || {},
59
- rectangles = _ref.rectangles,
60
- polygons = _ref.polygons,
61
- circles = _ref.circles;
62
-
63
- return new Promise(function (resolve) {
64
- var out = {
65
- disabled: env.mode !== 'gather',
66
- mode: env.mode,
67
- dimensions: dimensions,
68
- imageUrl: imageUrl,
69
- outlineColor: outlineColor,
70
- hotspotColor: hotspotColor,
71
- multipleCorrect: multipleCorrect,
72
- partialScoring: partialScoring,
73
- language: language,
74
- shapes: _objectSpread(_objectSpread({}, shapes), {}, {
75
- // eslint-disable-next-line no-unused-vars
76
- rectangles: (rectangles || []).map(function (_ref2) {
77
- var index = _ref2.index,
78
- rectProps = (0, _objectWithoutProperties2["default"])(_ref2, _excluded);
79
- return _objectSpread({}, rectProps);
80
- }),
81
- // eslint-disable-next-line no-unused-vars
82
- polygons: (polygons || []).map(function (_ref3) {
83
- var index = _ref3.index,
84
- polyProps = (0, _objectWithoutProperties2["default"])(_ref3, _excluded2);
85
- return _objectSpread({}, polyProps);
86
- }),
87
- // eslint-disable-next-line no-unused-vars
88
- circles: (circles || []).map(function (_ref4) {
89
- var index = _ref4.index,
90
- circleProps = (0, _objectWithoutProperties2["default"])(_ref4, _excluded3);
91
- return _objectSpread({}, circleProps);
92
- })
93
- }),
94
- responseCorrect: env.mode === 'evaluate' ? (0, _utils.isResponseCorrect)(normalizedQuestion, session) : undefined
95
- };
96
-
97
- if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {
98
- out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;
99
- out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled ? normalizedQuestion.teacherInstructions : null;
100
- } else {
101
- out.rationale = null;
102
- out.teacherInstructions = null;
103
- }
104
-
105
- out.prompt = normalizedQuestion.promptEnabled ? prompt : null;
106
- out.strokeWidth = normalizedQuestion.strokeWidth; // console.log(out);
107
-
108
- resolve(out);
109
- });
110
- }
111
-
112
- var createDefaultModel = function createDefaultModel() {
113
- var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
114
- return new Promise(function (resolve) {
115
- resolve(_objectSpread(_objectSpread({}, _defaults["default"]), model));
116
- });
117
- };
118
-
119
- exports.createDefaultModel = createDefaultModel;
120
-
121
- var getScore = function getScore(config, session) {
122
- var env = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
123
-
124
- var _ref5 = session || {},
125
- answers = _ref5.answers;
126
-
127
- if (!config.shapes || !config.shapes.rectangles && !config.shapes.polygons && !config.shapes.circles) {
128
- return 0;
129
- }
130
-
131
- var _config$shapes = config.shapes;
132
- _config$shapes = _config$shapes === void 0 ? {} : _config$shapes;
133
- var _config$shapes$rectan = _config$shapes.rectangles,
134
- rectangles = _config$shapes$rectan === void 0 ? [] : _config$shapes$rectan,
135
- _config$shapes$polygo = _config$shapes.polygons,
136
- polygons = _config$shapes$polygo === void 0 ? [] : _config$shapes$polygo,
137
- _config$shapes$circle = _config$shapes.circles,
138
- circles = _config$shapes$circle === void 0 ? [] : _config$shapes$circle;
139
-
140
- var partialScoringEnabled = _controllerUtils.partialScoring.enabled(config, env);
141
-
142
- if (!partialScoringEnabled) {
143
- return (0, _utils.isResponseCorrect)(config, session) ? 1 : 0;
144
- }
145
-
146
- var correctAnswers = 0;
147
- var selectedChoices = 0;
148
- var choices = [].concat((0, _toConsumableArray2["default"])(rectangles), (0, _toConsumableArray2["default"])(polygons), (0, _toConsumableArray2["default"])(circles));
149
- var correctChoices = choices.filter(function (choice) {
150
- return choice.correct;
151
- });
152
- choices.forEach(function (shape) {
153
- var selected = answers && answers.filter(function (answer) {
154
- return answer.id === shape.id;
155
- })[0];
156
- var correctlySelected = shape.correct && selected;
157
-
158
- if (selected) {
159
- selectedChoices += 1;
160
- }
161
-
162
- if (correctlySelected) {
163
- correctAnswers += 1;
164
- }
165
- });
166
- var extraAnswers = selectedChoices > correctChoices.length ? selectedChoices - correctChoices.length : 0;
167
- var total = correctChoices.length === 0 ? 1 : correctChoices.length;
168
- var str = ((correctAnswers - extraAnswers) / total).toFixed(2);
169
- return str < 0 ? 0 : parseFloat(str);
170
- };
171
-
172
- function outcome(config, session) {
173
- var env = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
174
- return new Promise(function (resolve) {
175
- log('outcome...');
176
-
177
- if (!session || (0, _isEmpty["default"])(session)) {
178
- resolve({
179
- score: 0,
180
- empty: true
181
- });
182
- }
183
-
184
- if (session.answers) {
185
- var score = getScore(config, session, env);
186
- resolve({
187
- score: score
188
- });
189
- } else {
190
- resolve({
191
- score: 0,
192
- empty: true
193
- });
194
- }
195
- });
196
- }
197
-
198
- var returnShapesCorrect = function returnShapesCorrect(shapes) {
199
- var answers = [];
200
- shapes.forEach(function (i) {
201
- var correct = i.correct,
202
- id = i.id;
203
-
204
- if (correct) {
205
- answers.push({
206
- id: id
207
- });
208
- }
209
- });
210
- return answers;
211
- };
212
-
213
- var createCorrectResponseSession = function createCorrectResponseSession(question, env) {
214
- return new Promise(function (resolve) {
215
- if (env.mode !== 'evaluate' && env.role === 'instructor') {
216
- var _question$shapes = question.shapes;
217
- _question$shapes = _question$shapes === void 0 ? {} : _question$shapes;
218
- var _question$shapes$rect = _question$shapes.rectangles,
219
- rectangles = _question$shapes$rect === void 0 ? [] : _question$shapes$rect,
220
- _question$shapes$circ = _question$shapes.circles,
221
- circles = _question$shapes$circ === void 0 ? [] : _question$shapes$circ,
222
- _question$shapes$poly = _question$shapes.polygons,
223
- polygons = _question$shapes$poly === void 0 ? {} : _question$shapes$poly;
224
- var rectangleCorrect = returnShapesCorrect(rectangles);
225
- var polygonsCorrect = returnShapesCorrect(polygons);
226
- var circlesCorrect = returnShapesCorrect(circles);
227
- resolve({
228
- answers: [].concat((0, _toConsumableArray2["default"])(rectangleCorrect), (0, _toConsumableArray2["default"])(polygonsCorrect), (0, _toConsumableArray2["default"])(circlesCorrect)),
229
- id: '1'
230
- });
231
- } else {
232
- resolve(null);
233
- }
234
- });
235
- }; // remove all html tags
236
-
237
-
238
- exports.createCorrectResponseSession = createCorrectResponseSession;
239
-
240
- var getInnerText = function getInnerText(html) {
241
- return (html || '').replaceAll(/<[^>]*>/g, '');
242
- }; // remove all html tags except img and iframe
243
-
244
-
245
- var getContent = function getContent(html) {
246
- return (html || '').replace(/(<(?!img|iframe)([^>]+)>)/gi, '');
247
- };
248
-
249
- var validate = function validate() {
250
- var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
251
- var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
252
- var shapes = model.shapes;
253
- var _config$minShapes = config.minShapes,
254
- minShapes = _config$minShapes === void 0 ? 2 : _config$minShapes,
255
- maxShapes = config.maxShapes,
256
- maxSelections = config.maxSelections;
257
- var errors = {};
258
- ['teacherInstructions', 'prompt', 'rationale'].forEach(function (field) {
259
- var _config$field;
260
-
261
- if ((_config$field = config[field]) !== null && _config$field !== void 0 && _config$field.required && !getContent(model[field])) {
262
- errors[field] = 'This field is required.';
263
- }
264
- });
265
- var allShapes = Object.values(shapes || {}).reduce(function (acc, shape) {
266
- return [].concat((0, _toConsumableArray2["default"])(acc), (0, _toConsumableArray2["default"])(shape));
267
- }, []);
268
- var nbOfSelections = (allShapes || []).reduce(function (acc, shape) {
269
- return shape.correct ? acc + 1 : acc;
270
- }, 0);
271
- var nbOfShapes = (allShapes || []).length;
272
-
273
- if (nbOfShapes < minShapes) {
274
- errors.shapes = "There should be at least ".concat(minShapes, " shapes defined.");
275
- } else if (nbOfShapes > maxShapes) {
276
- errors.shapes = "No more than ".concat(maxShapes, " shapes should be defined.");
277
- }
278
-
279
- if (nbOfSelections < 1) {
280
- errors.selections = 'There should be at least 1 shape selected.';
281
- } else if (nbOfSelections > maxSelections) {
282
- errors.selections = "No more than ".concat(maxSelections, " shapes should be selected.");
283
- }
284
-
285
- return errors;
286
- };
287
-
288
- exports.validate = validate;
289
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/index.js"],"names":["log","normalize","question","defaults","model","session","env","normalizedQuestion","imageUrl","dimensions","hotspotColor","multipleCorrect","outlineColor","partialScoring","prompt","shapes","language","rectangles","polygons","circles","Promise","resolve","out","disabled","mode","map","index","rectProps","polyProps","circleProps","responseCorrect","undefined","role","rationale","rationaleEnabled","teacherInstructions","teacherInstructionsEnabled","promptEnabled","strokeWidth","createDefaultModel","getScore","config","answers","partialScoringEnabled","enabled","correctAnswers","selectedChoices","choices","correctChoices","filter","choice","correct","forEach","shape","selected","answer","id","correctlySelected","extraAnswers","length","total","str","toFixed","parseFloat","outcome","score","empty","returnShapesCorrect","i","push","createCorrectResponseSession","rectangleCorrect","polygonsCorrect","circlesCorrect","getInnerText","html","replaceAll","getContent","replace","validate","minShapes","maxShapes","maxSelections","errors","field","required","allShapes","Object","values","reduce","acc","nbOfSelections","nbOfShapes","selections"],"mappings":"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","sourcesContent":["import debug from 'debug';\nimport isEmpty from 'lodash/isEmpty';\nimport { partialScoring } from '@pie-lib/pie-toolbox/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 multipleCorrect,\n outlineColor,\n partialScoring,\n prompt,\n shapes,\n language,\n } = normalizedQuestion;\n const { rectangles, polygons, circles } = shapes || {};\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 multipleCorrect,\n partialScoring,\n language,\n shapes: {\n ...shapes,\n // eslint-disable-next-line no-unused-vars\n rectangles: (rectangles || []).map(({ index, ...rectProps }) => ({ ...rectProps })),\n // eslint-disable-next-line no-unused-vars\n polygons: (polygons || []).map(({ index, ...polyProps }) => ({ ...polyProps })),\n // eslint-disable-next-line no-unused-vars\n circles: (circles || []).map(({ index, ...circleProps }) => ({ ...circleProps })),\n },\n responseCorrect: env.mode === 'evaluate' ? isResponseCorrect(normalizedQuestion, session) : 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 out.prompt = normalizedQuestion.promptEnabled ? prompt : null;\n out.strokeWidth = normalizedQuestion.strokeWidth;\n\n // console.log(out);\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 and iframe\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe)([^>]+)>)/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"],"file":"index.js"}
@@ -1,54 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.isResponseCorrect = exports.getCorrectResponse = void 0;
9
-
10
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
-
12
- var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
13
-
14
- var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
15
-
16
- var getCorrectResponse = function getCorrectResponse(choices) {
17
- return choices.filter(function (c) {
18
- return c.correct;
19
- }).map(function (c) {
20
- return c.id;
21
- }).sort();
22
- };
23
-
24
- exports.getCorrectResponse = getCorrectResponse;
25
-
26
- var isResponseCorrect = function isResponseCorrect(question, session) {
27
- var _question$shapes = question.shapes,
28
- _question$shapes$rect = _question$shapes.rectangles,
29
- rectangles = _question$shapes$rect === void 0 ? [] : _question$shapes$rect,
30
- _question$shapes$poly = _question$shapes.polygons,
31
- polygons = _question$shapes$poly === void 0 ? [] : _question$shapes$poly,
32
- _question$shapes$circ = _question$shapes.circles,
33
- circles = _question$shapes$circ === void 0 ? [] : _question$shapes$circ;
34
- var choices = [].concat((0, _toConsumableArray2["default"])(rectangles), (0, _toConsumableArray2["default"])(polygons), (0, _toConsumableArray2["default"])(circles));
35
- var correctResponseIds = getCorrectResponse(choices);
36
-
37
- if (!session || (0, _isEmpty["default"])(session)) {
38
- return false;
39
- }
40
-
41
- if (session.answers && session.answers.length) {
42
- var answerIds = (session.answers || []).map(function (a) {
43
- return a.id;
44
- });
45
- return (0, _isEqual["default"])(answerIds.sort(), correctResponseIds);
46
- } else if (!(correctResponseIds && correctResponseIds.length)) {
47
- return true;
48
- }
49
-
50
- return false;
51
- };
52
-
53
- exports.isResponseCorrect = isResponseCorrect;
54
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/utils.js"],"names":["getCorrectResponse","choices","filter","c","correct","map","id","sort","isResponseCorrect","question","session","shapes","rectangles","polygons","circles","correctResponseIds","answers","length","answerIds","a"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AAEO,IAAMA,kBAAkB,GAAG,SAArBA,kBAAqB,CAACC,OAAD;AAAA,SAChCA,OAAO,CACJC,MADH,CACU,UAACC,CAAD;AAAA,WAAOA,CAAC,CAACC,OAAT;AAAA,GADV,EAEGC,GAFH,CAEO,UAACF,CAAD;AAAA,WAAOA,CAAC,CAACG,EAAT;AAAA,GAFP,EAGGC,IAHH,EADgC;AAAA,CAA3B;;;;AAMA,IAAMC,iBAAiB,GAAG,SAApBA,iBAAoB,CAACC,QAAD,EAAWC,OAAX,EAAuB;AACtD,yBAEID,QAFJ,CACEE,MADF;AAAA,+CACYC,UADZ;AAAA,MACYA,UADZ,sCACyB,EADzB;AAAA,+CAC6BC,QAD7B;AAAA,MAC6BA,QAD7B,sCACwC,EADxC;AAAA,+CAC4CC,OAD5C;AAAA,MAC4CA,OAD5C,sCACsD,EADtD;AAGA,MAAMb,OAAO,iDAAOW,UAAP,uCAAsBC,QAAtB,uCAAmCC,OAAnC,EAAb;AACA,MAAIC,kBAAkB,GAAGf,kBAAkB,CAACC,OAAD,CAA3C;;AAEA,MAAI,CAACS,OAAD,IAAY,yBAAQA,OAAR,CAAhB,EAAkC;AAChC,WAAO,KAAP;AACD;;AAED,MAAIA,OAAO,CAACM,OAAR,IAAmBN,OAAO,CAACM,OAAR,CAAgBC,MAAvC,EAA+C;AAC7C,QAAIC,SAAS,GAAG,CAACR,OAAO,CAACM,OAAR,IAAmB,EAApB,EAAwBX,GAAxB,CAA4B,UAACc,CAAD;AAAA,aAAOA,CAAC,CAACb,EAAT;AAAA,KAA5B,CAAhB;AAEA,WAAO,yBAAQY,SAAS,CAACX,IAAV,EAAR,EAA0BQ,kBAA1B,CAAP;AACD,GAJD,MAIO,IAAI,EAAEA,kBAAkB,IAAIA,kBAAkB,CAACE,MAA3C,CAAJ,EAAwD;AAC7D,WAAO,IAAP;AACD;;AAED,SAAO,KAAP;AACD,CApBM","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"],"file":"utils.js"}
@@ -1,191 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports["default"] = void 0;
9
-
10
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
-
12
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
-
14
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
15
-
16
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
17
-
18
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
19
-
20
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
21
-
22
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
23
-
24
- var _react = _interopRequireDefault(require("react"));
25
-
26
- var _propTypes = _interopRequireDefault(require("prop-types"));
27
-
28
- var _reactKonva = require("react-konva");
29
-
30
- var _styles = require("@material-ui/core/styles");
31
-
32
- var _icons = require("@pie-lib/pie-toolbox/icons");
33
-
34
- var _icons2 = require("./icons");
35
-
36
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
37
-
38
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
39
-
40
- var CircleComponent = /*#__PURE__*/function (_React$Component) {
41
- (0, _inherits2["default"])(CircleComponent, _React$Component);
42
-
43
- var _super = _createSuper(CircleComponent);
44
-
45
- function CircleComponent(props) {
46
- var _this;
47
-
48
- (0, _classCallCheck2["default"])(this, CircleComponent);
49
- _this = _super.call(this, props);
50
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleClick", function (e) {
51
- var _this$props = _this.props,
52
- onClick = _this$props.onClick,
53
- id = _this$props.id,
54
- selected = _this$props.selected,
55
- disabled = _this$props.disabled;
56
-
57
- if (!disabled) {
58
- e.cancelBubble = true;
59
- onClick({
60
- id: id,
61
- selected: !selected
62
- });
63
- }
64
- });
65
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleMouseEnter", function () {
66
- var disabled = _this.props.disabled;
67
-
68
- if (!disabled) {
69
- document.body.style.cursor = 'pointer';
70
- }
71
- });
72
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleMouseLeave", function () {
73
- document.body.style.cursor = 'default';
74
- });
75
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "getEvaluateOutlineColor", function (isCorrect, markAsCorrect, outlineColor) {
76
- return markAsCorrect ? 'green' : isCorrect ? outlineColor : 'red';
77
- });
78
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "getOutlineWidth", function (showCorrectEnabled, selected, markAsCorrect, strokeWidth) {
79
- return markAsCorrect || !markAsCorrect && !showCorrectEnabled && selected ? strokeWidth : 0;
80
- });
81
- return _this;
82
- }
83
-
84
- (0, _createClass2["default"])(CircleComponent, [{
85
- key: "render",
86
- value: function render() {
87
- var _this$props2 = this.props,
88
- classes = _this$props2.classes,
89
- radius = _this$props2.radius,
90
- hotspotColor = _this$props2.hotspotColor,
91
- isCorrect = _this$props2.isCorrect,
92
- isEvaluateMode = _this$props2.isEvaluateMode,
93
- outlineColor = _this$props2.outlineColor,
94
- selected = _this$props2.selected,
95
- x = _this$props2.x,
96
- y = _this$props2.y,
97
- evaluateText = _this$props2.evaluateText,
98
- strokeWidth = _this$props2.strokeWidth,
99
- scale = _this$props2.scale,
100
- markAsCorrect = _this$props2.markAsCorrect,
101
- showCorrectEnabled = _this$props2.showCorrectEnabled;
102
- var outlineColorParsed = isEvaluateMode ? this.getEvaluateOutlineColor(isCorrect, markAsCorrect, outlineColor) : outlineColor;
103
- var outlineWidth = this.getOutlineWidth(showCorrectEnabled, selected, markAsCorrect, strokeWidth);
104
- var iconX = x - 10;
105
- var iconY = y - 10; // Adjust position for the icon
106
-
107
- var iconSrc;
108
-
109
- if (showCorrectEnabled) {
110
- if (selected && isCorrect || !selected && !isCorrect) {
111
- iconSrc = _icons2.faCorrect;
112
- }
113
- } else {
114
- if (selected) {
115
- if (isCorrect) {
116
- iconSrc = _icons2.faCorrect;
117
- } else {
118
- iconSrc = _icons2.faWrong;
119
- }
120
- } else if (!isCorrect) {
121
- iconSrc = _icons2.faWrong;
122
- }
123
- }
124
-
125
- return /*#__PURE__*/_react["default"].createElement(_reactKonva.Group, {
126
- scaleX: scale,
127
- scaleY: scale
128
- }, /*#__PURE__*/_react["default"].createElement(_reactKonva.Circle, {
129
- classes: classes.base,
130
- radius: radius,
131
- fill: hotspotColor,
132
- onClick: this.handleClick,
133
- onTap: this.handleClick,
134
- draggable: false,
135
- stroke: outlineColorParsed,
136
- strokeWidth: outlineWidth,
137
- onMouseLeave: this.handleMouseLeave,
138
- onMouseEnter: this.handleMouseEnter,
139
- x: x,
140
- y: y
141
- }), isEvaluateMode && iconSrc ? /*#__PURE__*/_react["default"].createElement(_icons.ImageComponent, {
142
- src: iconSrc,
143
- x: iconX,
144
- y: iconY,
145
- tooltip: evaluateText
146
- }) : null);
147
- }
148
- }]);
149
- return CircleComponent;
150
- }(_react["default"].Component);
151
-
152
- var styles = function styles() {
153
- return {
154
- base: {
155
- cursor: 'pointer',
156
- opacity: 0.5,
157
- position: 'relative'
158
- }
159
- };
160
- };
161
-
162
- CircleComponent.propTypes = {
163
- classes: _propTypes["default"].object.isRequired,
164
- radius: _propTypes["default"].number.isRequired,
165
- hotspotColor: _propTypes["default"].string.isRequired,
166
- id: _propTypes["default"].string.isRequired,
167
- isCorrect: _propTypes["default"].oneOfType([_propTypes["default"].bool, _propTypes["default"].string]),
168
- isEvaluateMode: _propTypes["default"].bool.isRequired,
169
- disabled: _propTypes["default"].bool.isRequired,
170
- onClick: _propTypes["default"].func.isRequired,
171
- outlineColor: _propTypes["default"].string.isRequired,
172
- selected: _propTypes["default"].bool.isRequired,
173
- x: _propTypes["default"].number.isRequired,
174
- y: _propTypes["default"].number.isRequired,
175
- evaluateText: _propTypes["default"].string,
176
- strokeWidth: _propTypes["default"].number,
177
- scale: _propTypes["default"].number,
178
- markAsCorrect: _propTypes["default"].bool.isRequired,
179
- showCorrectEnabled: _propTypes["default"].bool.isRequired
180
- };
181
- CircleComponent.defaultProps = {
182
- isCorrect: false,
183
- evaluateText: null,
184
- strokeWidth: 5,
185
- scale: 1
186
- };
187
-
188
- var _default = (0, _styles.withStyles)(styles)(CircleComponent);
189
-
190
- exports["default"] = _default;
191
- //# sourceMappingURL=circle.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/hotspot/circle.jsx"],"names":["CircleComponent","props","e","onClick","id","selected","disabled","cancelBubble","document","body","style","cursor","isCorrect","markAsCorrect","outlineColor","showCorrectEnabled","strokeWidth","classes","radius","hotspotColor","isEvaluateMode","x","y","evaluateText","scale","outlineColorParsed","getEvaluateOutlineColor","outlineWidth","getOutlineWidth","iconX","iconY","iconSrc","faCorrect","faWrong","base","handleClick","handleMouseLeave","handleMouseEnter","React","Component","styles","opacity","position","propTypes","PropTypes","object","isRequired","number","string","oneOfType","bool","func","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Circle, Group } from 'react-konva';\nimport { withStyles } from '@material-ui/core/styles';\nimport { ImageComponent } from '@pie-lib/pie-toolbox/icons';\nimport { faCorrect, faWrong } from './icons';\n\nclass CircleComponent extends React.Component {\n constructor(props) {\n super(props);\n }\n\n handleClick = (e) => {\n const { onClick, id, selected, disabled } = this.props;\n\n if (!disabled) {\n e.cancelBubble = true;\n onClick({ id, selected: !selected });\n }\n };\n\n handleMouseEnter = () => {\n const { disabled } = this.props;\n\n if (!disabled) {\n document.body.style.cursor = 'pointer';\n }\n };\n\n handleMouseLeave = () => {\n document.body.style.cursor = 'default';\n };\n\n getEvaluateOutlineColor = (isCorrect, markAsCorrect, outlineColor) =>\n markAsCorrect ? 'green' : isCorrect ? outlineColor : 'red';\n\n getOutlineWidth = (showCorrectEnabled, selected, markAsCorrect, strokeWidth) =>\n markAsCorrect || (!markAsCorrect && !showCorrectEnabled && selected) ? strokeWidth : 0;\n\n render() {\n const {\n classes,\n radius,\n hotspotColor,\n isCorrect,\n isEvaluateMode,\n outlineColor,\n selected,\n x,\n y,\n evaluateText,\n strokeWidth,\n scale,\n markAsCorrect,\n showCorrectEnabled,\n } = this.props;\n\n const outlineColorParsed = isEvaluateMode\n ? this.getEvaluateOutlineColor(isCorrect, markAsCorrect, outlineColor)\n : outlineColor;\n\n const outlineWidth = this.getOutlineWidth(showCorrectEnabled, selected, markAsCorrect, strokeWidth);\n\n const iconX = x - 10;\n const iconY = y - 10; // Adjust position for the icon\n\n let iconSrc;\n if (showCorrectEnabled) {\n if ((selected && isCorrect) || (!selected && !isCorrect)) {\n iconSrc = faCorrect;\n }\n } else {\n if (selected) {\n if (isCorrect) {\n iconSrc = faCorrect;\n } else {\n iconSrc = faWrong;\n }\n } else if (!isCorrect) {\n iconSrc = faWrong;\n }\n }\n\n return (\n <Group scaleX={scale} scaleY={scale}>\n <Circle\n classes={classes.base}\n radius={radius}\n fill={hotspotColor}\n onClick={this.handleClick}\n onTap={this.handleClick}\n draggable={false}\n stroke={outlineColorParsed}\n strokeWidth={outlineWidth}\n onMouseLeave={this.handleMouseLeave}\n onMouseEnter={this.handleMouseEnter}\n x={x}\n y={y}\n />\n {isEvaluateMode && iconSrc ? <ImageComponent src={iconSrc} x={iconX} y={iconY} tooltip={evaluateText} /> : null}\n </Group>\n );\n }\n}\n\nconst styles = () => ({\n base: {\n cursor: 'pointer',\n opacity: 0.5,\n position: 'relative',\n },\n});\n\nCircleComponent.propTypes = {\n classes: PropTypes.object.isRequired,\n radius: PropTypes.number.isRequired,\n hotspotColor: PropTypes.string.isRequired,\n id: PropTypes.string.isRequired,\n isCorrect: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n isEvaluateMode: PropTypes.bool.isRequired,\n disabled: PropTypes.bool.isRequired,\n onClick: PropTypes.func.isRequired,\n outlineColor: PropTypes.string.isRequired,\n selected: PropTypes.bool.isRequired,\n x: PropTypes.number.isRequired,\n y: PropTypes.number.isRequired,\n evaluateText: PropTypes.string,\n strokeWidth: PropTypes.number,\n scale: PropTypes.number,\n markAsCorrect: PropTypes.bool.isRequired,\n showCorrectEnabled: PropTypes.bool.isRequired,\n};\n\nCircleComponent.defaultProps = {\n isCorrect: false,\n evaluateText: null,\n strokeWidth: 5,\n scale: 1,\n};\n\nexport default withStyles(styles)(CircleComponent);\n"],"file":"circle.js"}