@pie-element/hotspot 6.17.0 → 6.17.1-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.
- package/configure/package.json +1 -1
- package/controller/package.json +1 -1
- package/package.json +3 -3
- package/configure/lib/DeleteWidget.js +0 -79
- package/configure/lib/DeleteWidget.js.map +0 -1
- package/configure/lib/button.js +0 -61
- package/configure/lib/button.js.map +0 -1
- package/configure/lib/buttons/circle.js +0 -40
- package/configure/lib/buttons/circle.js.map +0 -1
- package/configure/lib/buttons/polygon.js +0 -46
- package/configure/lib/buttons/polygon.js.map +0 -1
- package/configure/lib/buttons/rectangle.js +0 -46
- package/configure/lib/buttons/rectangle.js.map +0 -1
- package/configure/lib/defaults.js +0 -143
- package/configure/lib/defaults.js.map +0 -1
- package/configure/lib/hotspot-circle.js +0 -246
- package/configure/lib/hotspot-circle.js.map +0 -1
- package/configure/lib/hotspot-container.js +0 -417
- package/configure/lib/hotspot-container.js.map +0 -1
- package/configure/lib/hotspot-drawable.js +0 -548
- package/configure/lib/hotspot-drawable.js.map +0 -1
- package/configure/lib/hotspot-palette.js +0 -154
- package/configure/lib/hotspot-palette.js.map +0 -1
- package/configure/lib/hotspot-polygon.js +0 -364
- package/configure/lib/hotspot-polygon.js.map +0 -1
- package/configure/lib/hotspot-rectangle.js +0 -240
- package/configure/lib/hotspot-rectangle.js.map +0 -1
- package/configure/lib/icons.js +0 -7
- package/configure/lib/icons.js.map +0 -1
- package/configure/lib/index.js +0 -254
- package/configure/lib/index.js.map +0 -1
- package/configure/lib/root.js +0 -418
- package/configure/lib/root.js.map +0 -1
- package/configure/lib/shapes/circle.js +0 -115
- package/configure/lib/shapes/circle.js.map +0 -1
- package/configure/lib/shapes/polygon.js +0 -111
- package/configure/lib/shapes/polygon.js.map +0 -1
- package/configure/lib/shapes/rectagle.js +0 -115
- package/configure/lib/shapes/rectagle.js.map +0 -1
- package/configure/lib/upload-control.js +0 -68
- package/configure/lib/upload-control.js.map +0 -1
- package/configure/lib/utils.js +0 -237
- package/configure/lib/utils.js.map +0 -1
- package/controller/lib/defaults.js +0 -33
- package/controller/lib/defaults.js.map +0 -1
- package/controller/lib/index.js +0 -289
- package/controller/lib/index.js.map +0 -1
- package/controller/lib/utils.js +0 -54
- package/controller/lib/utils.js.map +0 -1
- package/lib/hotspot/circle.js +0 -191
- package/lib/hotspot/circle.js.map +0 -1
- package/lib/hotspot/container.js +0 -282
- package/lib/hotspot/container.js.map +0 -1
- package/lib/hotspot/icons.js +0 -8
- package/lib/hotspot/icons.js.map +0 -1
- package/lib/hotspot/index.js +0 -209
- package/lib/hotspot/index.js.map +0 -1
- package/lib/hotspot/polygon.js +0 -225
- package/lib/hotspot/polygon.js.map +0 -1
- package/lib/hotspot/rectangle.js +0 -207
- package/lib/hotspot/rectangle.js.map +0 -1
- package/lib/index.js +0 -114
- package/lib/index.js.map +0 -1
- package/lib/session-updater.js +0 -30
- package/lib/session-updater.js.map +0 -1
package/controller/lib/index.js
DELETED
|
@@ -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"}
|
package/controller/lib/utils.js
DELETED
|
@@ -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"}
|
package/lib/hotspot/circle.js
DELETED
|
@@ -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"}
|