@pie-element/hotspot 4.10.15 → 4.10.16-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/CHANGELOG.md +0 -51
- package/configure/CHANGELOG.md +0 -48
- package/configure/lib/__tests__/hotspot-container.test.js +281 -0
- package/configure/lib/__tests__/hotspot-drawable.test.js +241 -0
- package/configure/lib/__tests__/index.test.js +224 -0
- package/configure/lib/__tests__/root.test.js +443 -0
- package/configure/lib/__tests__/utils.test.js +335 -0
- package/configure/lib/button.js +1 -1
- package/configure/lib/defaults.js +3 -3
- package/configure/lib/defaults.js.map +1 -1
- package/configure/lib/hotspot-container.js +3 -3
- package/configure/lib/hotspot-drawable.js +3 -3
- package/configure/lib/hotspot-drawable.js.map +1 -1
- package/configure/lib/hotspot-palette.js +1 -1
- package/configure/lib/hotspot-polygon.js +1 -1
- package/configure/lib/hotspot-rectangle.js +1 -1
- package/configure/lib/index.js +3 -3
- package/configure/lib/root.js +50 -6
- package/configure/lib/upload-control.js +1 -1
- package/configure/lib/utils.js +4 -4
- package/configure/package.json +1 -1
- package/configure/src/__tests__/__snapshots__/root.test.js.snap +2 -2
- package/configure/src/defaults.js +2 -2
- package/configure/src/root.jsx +36 -2
- package/controller/lib/__tests__/index.test.js +921 -0
- package/controller/lib/__tests__/utils.test.js +8 -0
- package/controller/lib/defaults.js +1 -1
- package/controller/lib/index.js +40 -4
- package/controller/lib/index.js.map +1 -1
- package/controller/lib/utils.js +1 -1
- package/controller/src/index.js +26 -0
- package/docs/demo/pie.manifest.json +11 -0
- package/docs/pie-schema.json +6 -0
- package/docs/pie-schema.json.md +4 -0
- package/lib/__tests__/container-test.js +185 -0
- package/lib/__tests__/image-test.js +63 -0
- package/lib/__tests__/polygon-test.js +99 -0
- package/lib/__tests__/rectangle-test.js +92 -0
- package/lib/__tests__/session-updater-test.js +78 -0
- package/lib/hotspot/container.js +1 -1
- package/lib/hotspot/icons.js +1 -1
- package/lib/hotspot/image.js +1 -1
- package/lib/hotspot/index.js +1 -1
- package/lib/hotspot/polygon.js +1 -1
- package/lib/hotspot/rectangle.js +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/session-updater.js +1 -1
- package/package.json +2 -2
- package/LICENSE.md +0 -5
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
describe('utils', function () {
|
|
4
|
+
xit('todo', function () {
|
|
5
|
+
expect(true).toEqual(false);
|
|
6
|
+
});
|
|
7
|
+
});
|
|
8
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vdXRpbHMudGVzdC5qcyJdLCJuYW1lcyI6WyJkZXNjcmliZSIsInhpdCIsImV4cGVjdCIsInRvRXF1YWwiXSwibWFwcGluZ3MiOiI7O0FBQUFBLFFBQVEsQ0FBQyxPQUFELEVBQVUsWUFBTTtBQUN0QkMsRUFBQUEsR0FBRyxDQUFDLE1BQUQsRUFBUyxZQUFNO0FBQ2hCQyxJQUFBQSxNQUFNLENBQUMsSUFBRCxDQUFOLENBQWFDLE9BQWIsQ0FBcUIsS0FBckI7QUFDRCxHQUZFLENBQUg7QUFHRCxDQUpPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJkZXNjcmliZSgndXRpbHMnLCAoKSA9PiB7XG4gIHhpdCgndG9kbycsICgpID0+IHtcbiAgICBleHBlY3QodHJ1ZSkudG9FcXVhbChmYWxzZSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -23,4 +23,4 @@ var _default = {
|
|
|
23
23
|
outlineList: ['blue']
|
|
24
24
|
};
|
|
25
25
|
exports["default"] = _default;
|
|
26
|
-
//# sourceMappingURL=
|
|
26
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kZWZhdWx0cy5qcyJdLCJuYW1lcyI6WyJwcm9tcHQiLCJpbWFnZVVybCIsInNoYXBlcyIsInJlY3RhbmdsZXMiLCJwb2x5Z29ucyIsIm11bHRpcGxlQ29ycmVjdCIsInBhcnRpYWxTY29yaW5nIiwiZGltZW5zaW9ucyIsImhlaWdodCIsIndpZHRoIiwiaG90c3BvdENvbG9yIiwiaG90c3BvdExpc3QiLCJvdXRsaW5lQ29sb3IiLCJvdXRsaW5lTGlzdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7O2VBQWU7QUFDYkEsRUFBQUEsTUFBTSxFQUFFLDZCQURLO0FBRWJDLEVBQUFBLFFBQVEsRUFBRSxFQUZHO0FBR2JDLEVBQUFBLE1BQU0sRUFBRTtBQUNOQyxJQUFBQSxVQUFVLEVBQUUsRUFETjtBQUVOQyxJQUFBQSxRQUFRLEVBQUU7QUFGSixHQUhLO0FBT2JDLEVBQUFBLGVBQWUsRUFBRSxJQVBKO0FBUWJDLEVBQUFBLGNBQWMsRUFBRSxLQVJIO0FBU2JDLEVBQUFBLFVBQVUsRUFBRTtBQUNWQyxJQUFBQSxNQUFNLEVBQUUsQ0FERTtBQUVWQyxJQUFBQSxLQUFLLEVBQUU7QUFGRyxHQVRDO0FBYWJDLEVBQUFBLFlBQVksRUFBRSwyQkFiRDtBQWNiQyxFQUFBQSxXQUFXLEVBQUUsQ0FDWCwyQkFEVyxDQWRBO0FBaUJiQyxFQUFBQSxZQUFZLEVBQUUsTUFqQkQ7QUFrQmJDLEVBQUFBLFdBQVcsRUFBRSxDQUNYLE1BRFc7QUFsQkEsQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvbXB0OiAnVGhpcyBpcyB0aGUgcXVlc3Rpb24gcHJvbXB0JyxcbiAgaW1hZ2VVcmw6ICcnLFxuICBzaGFwZXM6IHtcbiAgICByZWN0YW5nbGVzOiBbXSxcbiAgICBwb2x5Z29uczogW11cbiAgfSxcbiAgbXVsdGlwbGVDb3JyZWN0OiB0cnVlLFxuICBwYXJ0aWFsU2NvcmluZzogZmFsc2UsXG4gIGRpbWVuc2lvbnM6IHtcbiAgICBoZWlnaHQ6IDAsXG4gICAgd2lkdGg6IDBcbiAgfSxcbiAgaG90c3BvdENvbG9yOiAncmdiYSgxMzcsIDE4MywgMjQ0LCAwLjY1KScsXG4gIGhvdHNwb3RMaXN0OiBbXG4gICAgJ3JnYmEoMTM3LCAxODMsIDI0NCwgMC42NSknXG4gIF0sXG4gIG91dGxpbmVDb2xvcjogJ2JsdWUnLFxuICBvdXRsaW5lTGlzdDogW1xuICAgICdibHVlJ1xuICBdXG59O1xuIl19
|
package/controller/lib/index.js
CHANGED
|
@@ -5,9 +5,11 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
+
exports.createDefaultModel = exports.createCorrectResponseSession = void 0;
|
|
8
9
|
exports.model = model;
|
|
10
|
+
exports.normalize = void 0;
|
|
9
11
|
exports.outcome = outcome;
|
|
10
|
-
exports.
|
|
12
|
+
exports.validate = void 0;
|
|
11
13
|
|
|
12
14
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
13
15
|
|
|
@@ -28,9 +30,9 @@ var _defaults = _interopRequireDefault(require("./defaults"));
|
|
|
28
30
|
var _excluded = ["index"],
|
|
29
31
|
_excluded2 = ["index"];
|
|
30
32
|
|
|
31
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
33
|
+
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; }
|
|
32
34
|
|
|
33
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
35
|
+
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; }
|
|
34
36
|
|
|
35
37
|
var log = (0, _debug["default"])('pie-elements:hotspot:controller');
|
|
36
38
|
|
|
@@ -224,4 +226,38 @@ var createCorrectResponseSession = function createCorrectResponseSession(questio
|
|
|
224
226
|
};
|
|
225
227
|
|
|
226
228
|
exports.createCorrectResponseSession = createCorrectResponseSession;
|
|
227
|
-
|
|
229
|
+
|
|
230
|
+
var validate = function validate() {
|
|
231
|
+
var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
232
|
+
var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
233
|
+
var shapes = model.shapes;
|
|
234
|
+
var _config$minShapes = config.minShapes,
|
|
235
|
+
minShapes = _config$minShapes === void 0 ? 2 : _config$minShapes,
|
|
236
|
+
maxShapes = config.maxShapes,
|
|
237
|
+
maxSelections = config.maxSelections;
|
|
238
|
+
var errors = {};
|
|
239
|
+
var allShapes = Object.values(shapes || {}).reduce(function (acc, shape) {
|
|
240
|
+
return [].concat((0, _toConsumableArray2["default"])(acc), (0, _toConsumableArray2["default"])(shape));
|
|
241
|
+
}, []);
|
|
242
|
+
var nbOfSelections = (allShapes || []).reduce(function (acc, shape) {
|
|
243
|
+
return shape.correct ? acc + 1 : acc;
|
|
244
|
+
}, 0);
|
|
245
|
+
var nbOfShapes = (allShapes || []).length;
|
|
246
|
+
|
|
247
|
+
if (nbOfShapes < minShapes) {
|
|
248
|
+
errors.shapesError = "There should be at least ".concat(minShapes, " shapes defined.");
|
|
249
|
+
} else if (nbOfShapes > maxShapes) {
|
|
250
|
+
errors.shapesError = "No more than ".concat(maxShapes, " shapes should be defined.");
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
if (nbOfSelections < 1) {
|
|
254
|
+
errors.selectionsError = 'There should be at least 1 shape selected.';
|
|
255
|
+
} else if (nbOfSelections > maxSelections) {
|
|
256
|
+
errors.selectionsError = "No more than ".concat(maxSelections, " shapes should be selected.");
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
return errors;
|
|
260
|
+
};
|
|
261
|
+
|
|
262
|
+
exports.validate = validate;
|
|
263
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJsb2ciLCJub3JtYWxpemUiLCJxdWVzdGlvbiIsInByb21wdEVuYWJsZWQiLCJyYXRpb25hbGVFbmFibGVkIiwidGVhY2hlckluc3RydWN0aW9uc0VuYWJsZWQiLCJzdHVkZW50SW5zdHJ1Y3Rpb25zRW5hYmxlZCIsInN0cm9rZVdpZHRoIiwibW9kZWwiLCJzZXNzaW9uIiwiZW52Iiwibm9ybWFsaXplZFF1ZXN0aW9uIiwiaW1hZ2VVcmwiLCJkaW1lbnNpb25zIiwiaG90c3BvdENvbG9yIiwibXVsdGlwbGVDb3JyZWN0Iiwib3V0bGluZUNvbG9yIiwicGFydGlhbFNjb3JpbmciLCJwcm9tcHQiLCJzaGFwZXMiLCJyZWN0YW5nbGVzIiwicG9seWdvbnMiLCJQcm9taXNlIiwicmVzb2x2ZSIsIm91dCIsImRpc2FibGVkIiwibW9kZSIsIm1hcCIsImluZGV4IiwicmVjdFByb3BzIiwicG9seVByb3BzIiwicmVzcG9uc2VDb3JyZWN0IiwidW5kZWZpbmVkIiwicm9sZSIsInJhdGlvbmFsZSIsInRlYWNoZXJJbnN0cnVjdGlvbnMiLCJjcmVhdGVEZWZhdWx0TW9kZWwiLCJkZWZhdWx0cyIsImdldFNjb3JlIiwiY29uZmlnIiwiYW5zd2VycyIsInBhcnRpYWxTY29yaW5nRW5hYmxlZCIsImVuYWJsZWQiLCJjb3JyZWN0QW5zd2VycyIsInNlbGVjdGVkQ2hvaWNlcyIsImNob2ljZXMiLCJjb3JyZWN0Q2hvaWNlcyIsImZpbHRlciIsImNob2ljZSIsImNvcnJlY3QiLCJmb3JFYWNoIiwic2hhcGUiLCJzZWxlY3RlZCIsImFuc3dlciIsImlkIiwiY29ycmVjdGx5U2VsZWN0ZWQiLCJleHRyYUFuc3dlcnMiLCJsZW5ndGgiLCJ0b3RhbCIsInN0ciIsInRvRml4ZWQiLCJwYXJzZUZsb2F0Iiwib3V0Y29tZSIsInNjb3JlIiwiZW1wdHkiLCJyZXR1cm5TaGFwZXNDb3JyZWN0IiwiaSIsInB1c2giLCJjcmVhdGVDb3JyZWN0UmVzcG9uc2VTZXNzaW9uIiwicmVjdGFuZ2xlQ29ycmVjdCIsInBvbHlnb25zQ29ycmVjdCIsInZhbGlkYXRlIiwibWluU2hhcGVzIiwibWF4U2hhcGVzIiwibWF4U2VsZWN0aW9ucyIsImVycm9ycyIsImFsbFNoYXBlcyIsIk9iamVjdCIsInZhbHVlcyIsInJlZHVjZSIsImFjYyIsIm5iT2ZTZWxlY3Rpb25zIiwibmJPZlNoYXBlcyIsInNoYXBlc0Vycm9yIiwic2VsZWN0aW9uc0Vycm9yIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBRUE7Ozs7Ozs7OztBQUVBLElBQU1BLEdBQUcsR0FBRyx1QkFBTSxpQ0FBTixDQUFaOztBQUVPLElBQU1DLFNBQVMsR0FBRyxTQUFaQSxTQUFZLENBQUFDLFFBQVE7QUFBQTtBQUMvQkMsSUFBQUEsYUFBYSxFQUFFLElBRGdCO0FBRS9CQyxJQUFBQSxnQkFBZ0IsRUFBRSxJQUZhO0FBRy9CQyxJQUFBQSwwQkFBMEIsRUFBRSxJQUhHO0FBSS9CQyxJQUFBQSwwQkFBMEIsRUFBRSxJQUpHO0FBSy9CQyxJQUFBQSxXQUFXLEVBQUU7QUFMa0IsS0FNNUJMLFFBTjRCO0FBQUEsQ0FBMUI7Ozs7QUFTQSxTQUFTTSxLQUFULENBQWVOLFFBQWYsRUFBeUJPLE9BQXpCLEVBQWtDQyxHQUFsQyxFQUF1QztBQUM1QyxNQUFNQyxrQkFBa0IsR0FBR1YsU0FBUyxDQUFDQyxRQUFELENBQXBDO0FBQ0EsTUFDRVUsUUFERixHQVNJRCxrQkFUSixDQUNFQyxRQURGO0FBQUEsTUFFRUMsVUFGRixHQVNJRixrQkFUSixDQUVFRSxVQUZGO0FBQUEsTUFHRUMsWUFIRixHQVNJSCxrQkFUSixDQUdFRyxZQUhGO0FBQUEsTUFJRUMsZUFKRixHQVNJSixrQkFUSixDQUlFSSxlQUpGO0FBQUEsTUFLRUMsWUFMRixHQVNJTCxrQkFUSixDQUtFSyxZQUxGO0FBQUEsTUFNRUMsY0FORixHQVNJTixrQkFUSixDQU1FTSxjQU5GO0FBQUEsTUFP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QUFDQyxHQUFELEVBQU03QixLQUFOO0FBQUEsV0FBZ0JBLEtBQUssQ0FBQ0YsT0FBTixHQUFnQitCLEdBQUcsR0FBRyxDQUF0QixHQUEwQkEsR0FBMUM7QUFBQSxHQUF6QixFQUF3RSxDQUF4RSxDQUF2QjtBQUVBLE1BQU1FLFVBQVUsR0FBRyxDQUFDTixTQUFTLElBQUksRUFBZCxFQUFrQm5CLE1BQXJDOztBQUVBLE1BQUl5QixVQUFVLEdBQUdWLFNBQWpCLEVBQTRCO0FBQzFCRyxJQUFBQSxNQUFNLENBQUNRLFdBQVAsc0NBQWlEWCxTQUFqRDtBQUNELEdBRkQsTUFFTyxJQUFJVSxVQUFVLEdBQUdULFNBQWpCLEVBQTRCO0FBQ2pDRSxJQUFBQSxNQUFNLENBQUNRLFdBQVAsMEJBQXFDVixTQUFyQztBQUNEOztBQUVELE1BQUlRLGNBQWMsR0FBRyxDQUFyQixFQUF3QjtBQUN0Qk4sSUFBQUEsTUFBTSxDQUFDUyxlQUFQLEdBQXlCLDRDQUF6QjtBQUNELEdBRkQsTUFFTyxJQUFJSCxjQUFjLEdBQUdQLGFBQXJCLEVBQW9DO0FBQ3pDQyxJQUFBQSxNQUFNLENBQUNTLGVBQVAsMEJBQXlDVixhQUF6QztBQUNEOztBQUVELFNBQU9DLE1BQVA7QUFDRCxDQXhCTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgaXNFbXB0eSBmcm9tICdsb2Rhc2gvaXNFbXB0eSc7XG5pbXBvcnQgeyBwYXJ0aWFsU2NvcmluZyB9IGZyb20gJ0BwaWUtbGliL2NvbnRyb2xsZXItdXRpbHMnO1xuXG5pbXBvcnQgeyBpc1Jlc3BvbnNlQ29ycmVjdCB9IGZyb20gJy4vdXRpbHMnO1xuXG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi9kZWZhdWx0cyc7XG5cbmNvbnN0IGxvZyA9IGRlYnVnKCdwaWUtZWxlbWVudHM6aG90c3BvdDpjb250cm9sbGVyJyk7XG5cbmV4cG9ydCBjb25zdCBub3JtYWxpemUgPSBxdWVzdGlvbiA9PiAoe1xuICBwcm9tcHRFbmFibGVkOiB0cnVlLFxuICByYXRpb25hbGVFbmFibGVkOiB0cnVlLFxuICB0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgc3R1ZGVudEluc3RydWN0aW9uc0VuYWJsZWQ6IHRydWUsXG4gIHN0cm9rZVdpZHRoOiA1LFxuICAuLi5xdWVzdGlvbixcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gbW9kZWwocXVlc3Rpb24sIHNlc3Npb24sIGVudikge1xuICBjb25zdCBub3JtYWxpemVkUXVlc3Rpb24gPSBub3JtYWxpemUocXVlc3Rpb24pO1xuICBjb25zdCB7XG4gICAgaW1hZ2VVcmwsXG4gICAgZGltZW5zaW9ucyxcbiAgICBob3RzcG90Q29sb3IsXG4gICAgbXVsdGlwbGVDb3JyZWN0LFxuICAgIG91dGxpbmVDb2xvcixcbiAgICBwYXJ0aWFsU2NvcmluZyxcbiAgICBwcm9tcHQsXG4gICAgc2hhcGVzXG4gIH0gPSBub3JtYWxpemVkUXVlc3Rpb247XG4gIGNvbnN0IHsgcmVjdGFuZ2xlcywgcG9seWdvbnMgfSA9IHNoYXBlcyB8fCB7fTtcblxuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgY29uc3Qgb3V0ID0ge1xuICAgICAgZGlzYWJsZWQ6IGVudi5tb2RlICE9PSAnZ2F0aGVyJyxcbiAgICAgIG1vZGU6IGVudi5tb2RlLFxuICAgICAgZGltZW5zaW9ucyxcbiAgICAgIGltYWdlVXJsLFxuICAgICAgb3V0bGluZUNvbG9yLFxuICAgICAgaG90c3BvdENvbG9yLFxuICAgICAgbXVsdGlwbGVDb3JyZWN0LFxuICAgICAgcGFydGlhbFNjb3JpbmcsXG4gICAgICBzaGFwZXM6IHtcbiAgICAgICAgLi4uc2hhcGVzLFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgICAgcmVjdGFuZ2xlczogKHJlY3RhbmdsZXMgfHwgW10pLm1hcCgoeyBpbmRleCwgLi4ucmVjdFByb3BzIH0pID0+ICh7IC4uLnJlY3RQcm9wcyB9KSksXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgICBwb2x5Z29uczogKHBvbHlnb25zIHx8IFtdKS5tYXAoKHsgaW5kZXgsIC4uLnBvbHlQcm9wcyB9KSA9PiAoeyAuLi5wb2x5UHJvcHMgfSkpXG4gICAgICB9LFxuICAgICAgcmVzcG9uc2VDb3JyZWN0OlxuICAgICAgICBlbnYubW9kZSA9PT0gJ2V2YWx1YXRlJ1xuICAgICAgICAgID8gaXNSZXNwb25zZUNvcnJlY3Qobm9ybWFsaXplZFF1ZXN0aW9uLCBzZXNzaW9uKVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgfTtcblxuICAgIGlmIChlbnYucm9sZSA9PT0gJ2luc3RydWN0b3InICYmIChlbnYubW9kZSA9PT0gJ3ZpZXcnIHx8IGVudi5tb2RlID09PSAnZXZhbHVhdGUnKSkge1xuICAgICAgb3V0LnJhdGlvbmFsZSA9IG5vcm1hbGl6ZWRRdWVzdGlvbi5yYXRpb25hbGVFbmFibGVkID8gbm9ybWFsaXplZFF1ZXN0aW9uLnJhdGlvbmFsZSA6IG51bGw7XG4gICAgICBvdXQudGVhY2hlckluc3RydWN0aW9ucyA9IG5vcm1hbGl6ZWRRdWVzdGlvbi50ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZCA/IG5vcm1hbGl6ZWRRdWVzdGlvbi50ZWFjaGVySW5zdHJ1Y3Rpb25zIDogbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0LnJhdGlvbmFsZSA9IG51bGw7XG4gICAgICBvdXQudGVhY2hlckluc3RydWN0aW9ucyA9IG51bGw7XG4gICAgfVxuXG4gICAgb3V0LnByb21wdCA9IG5vcm1hbGl6ZWRRdWVzdGlvbi5wcm9tcHRFbmFibGVkID8gcHJvbXB0IDogbnVsbDtcbiAgICBvdXQuc3Ryb2tlV2lkdGggPSBub3JtYWxpemVkUXVlc3Rpb24uc3Ryb2tlV2lkdGg7XG5cbiAgICAvLyBjb25zb2xlLmxvZyhvdXQpO1xuICAgIHJlc29sdmUob3V0KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVEZWZhdWx0TW9kZWwgPSAobW9kZWwgPSB7fSkgPT5cbiAgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgcmVzb2x2ZSh7XG4gICAgICAuLi5kZWZhdWx0cyxcbiAgICAgIC4uLm1vZGVsLFxuICAgIH0pO1xuICB9KTtcblxuY29uc3QgZ2V0U2NvcmUgPSAoY29uZmlnLCBzZXNzaW9uLCBlbnYgPSB7fSkgPT4ge1xuICBjb25zdCB7IGFuc3dlcnMgfSA9IHNlc3Npb24gfHwge307XG5cbiAgaWYgKCFjb25maWcuc2hhcGVzIHx8ICghY29uZmlnLnNoYXBlcy5yZWN0YW5nbGVzICYmICFjb25maWcuc2hhcGVzLnBvbHlnb25zKSkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgY29uc3QgeyBzaGFwZXM6IHsgcmVjdGFuZ2xlcyA9IFtdLCBwb2x5Z29ucyA9IFtdIH0gPSB7fSB9ID0gY29uZmlnO1xuICBjb25zdCBwYXJ0aWFsU2NvcmluZ0VuYWJsZWQgPSBwYXJ0aWFsU2NvcmluZy5lbmFibGVkKGNvbmZpZywgZW52KTtcblxuICBpZiAoIXBhcnRpYWxTY29yaW5nRW5hYmxlZCkge1xuICAgIHJldHVybiBpc1Jlc3BvbnNlQ29ycmVjdChjb25maWcsIHNlc3Npb24pID8gMSA6IDA7XG4gIH1cblxuICBsZXQgY29ycmVjdEFuc3dlcnMgPSAwO1xuICBsZXQgc2VsZWN0ZWRDaG9pY2VzID0gMDtcblxuICBjb25zdCBjaG9pY2VzID0gWy4uLnJlY3RhbmdsZXMsIC4uLnBvbHlnb25zXTtcblxuICBjb25zdCBjb3JyZWN0Q2hvaWNlcyA9IGNob2ljZXMuZmlsdGVyKGNob2ljZSA9PiBjaG9pY2UuY29ycmVjdCk7XG5cbiAgY2hvaWNlcy5mb3JFYWNoKHNoYXBlID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IGFuc3dlcnMgJiYgYW5zd2Vycy5maWx0ZXIoYW5zd2VyID0+IGFuc3dlci5pZCA9PT0gc2hhcGUuaWQpWzBdO1xuICAgIGNvbnN0IGNvcnJlY3RseVNlbGVjdGVkID0gc2hhcGUuY29ycmVjdCAmJiBzZWxlY3RlZDtcblxuICAgIGlmKHNlbGVjdGVkKSB7XG4gICAgICBzZWxlY3RlZENob2ljZXMgKz0xO1xuICAgIH1cblxuICAgIGlmIChjb3JyZWN0bHlTZWxlY3RlZCkge1xuICAgICAgY29ycmVjdEFuc3dlcnMgKz0gMTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IGV4dHJhQW5zd2VycyA9IHNlbGVjdGVkQ2hvaWNlcyA+IGNvcnJlY3RDaG9pY2VzLmxlbmd0aCA/IHNlbGVjdGVkQ2hvaWNlcyAtIGNvcnJlY3RDaG9pY2VzLmxlbmd0aCA6IDA7XG5cbiAgY29uc3QgdG90YWwgPSBjb3JyZWN0Q2hvaWNlcy5sZW5ndGggPT09IDAgPyAxIDogY29ycmVjdENob2ljZXMubGVuZ3RoO1xuICBjb25zdCBzdHIgPSAoKGNvcnJlY3RBbnN3ZXJzIC0gZXh0cmFBbnN3ZXJzKSAvIHRvdGFsKS50b0ZpeGVkKDIpO1xuXG4gIHJldHVybiBzdHIgPCAwID8gMCA6IHBhcnNlRmxvYXQoc3RyKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBvdXRjb21lKGNvbmZpZywgc2Vzc2lvbiwgZW52ID0ge30pIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIGxvZygnb3V0Y29tZS4uLicpO1xuXG4gICAgaWYgKCFzZXNzaW9uIHx8IGlzRW1wdHkoc2Vzc2lvbikpIHtcbiAgICAgIHJlc29sdmUoeyBzY29yZTogMCwgZW1wdHk6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgaWYgKHNlc3Npb24uYW5zd2Vycykge1xuICAgICAgY29uc3Qgc2NvcmUgPSBnZXRTY29yZShjb25maWcsIHNlc3Npb24sIGVudik7XG4gICAgICByZXNvbHZlKHsgc2NvcmUgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc29sdmUoe3Njb3JlOiAwLCBlbXB0eTogdHJ1ZX0pXG4gICAgfVxuICB9KTtcbn1cblxuY29uc3QgcmV0dXJuU2hhcGVzQ29ycmVjdCA9IChzaGFwZXMpID0+IHtcbiAgbGV0IGFuc3dlcnMgPSBbXTtcblxuICBzaGFwZXMuZm9yRWFjaChpID0+IHtcbiAgICBjb25zdCB7IGNvcnJlY3QsIGlkIH0gPSBpO1xuICAgIGlmIChjb3JyZWN0KSB7XG4gICAgICBhbnN3ZXJzLnB1c2goeyBpZCB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYW5zd2Vycztcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVDb3JyZWN0UmVzcG9uc2VTZXNzaW9uID0gKHF1ZXN0aW9uLCBlbnYpID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIGlmIChlbnYubW9kZSAhPT0gJ2V2YWx1YXRlJyAmJiBlbnYucm9sZSA9PT0gJ2luc3RydWN0b3InKSB7XG4gICAgICBjb25zdCB7IHNoYXBlczogeyByZWN0YW5nbGVzID0gW10sIHBvbHlnb25zID0ge30gfSA9IHt9IH0gPSBxdWVzdGlvbjtcblxuICAgICAgY29uc3QgcmVjdGFuZ2xlQ29ycmVjdCA9IHJldHVyblNoYXBlc0NvcnJlY3QocmVjdGFuZ2xlcyk7XG4gICAgICBjb25zdCBwb2x5Z29uc0NvcnJlY3QgPSByZXR1cm5TaGFwZXNDb3JyZWN0KHBvbHlnb25zKTtcblxuICAgICAgcmVzb2x2ZSh7XG4gICAgICAgIGFuc3dlcnM6IFtcbiAgICAgICAgICAuLi5yZWN0YW5nbGVDb3JyZWN0LFxuICAgICAgICAgIC4uLnBvbHlnb25zQ29ycmVjdFxuICAgICAgICBdLFxuICAgICAgICBpZDogJzEnXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICB9XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlID0gKG1vZGVsID0ge30sIGNvbmZpZyA9IHt9KSA9PiB7XG4gIGNvbnN0IHsgc2hhcGVzIH0gPSBtb2RlbDtcbiAgY29uc3QgeyBtaW5TaGFwZXMgPSAyLCBtYXhTaGFwZXMsIG1heFNlbGVjdGlvbnMgfSA9IGNvbmZpZztcbiAgY29uc3QgZXJyb3JzID0ge307XG5cbiAgY29uc3QgYWxsU2hhcGVzID0gT2JqZWN0LnZhbHVlcyhzaGFwZXMgfHwge30pLnJlZHVjZSgoYWNjLCBzaGFwZSkgPT4gWy4uLmFjYywgLi4uc2hhcGVdLCBbXSk7XG5cbiAgY29uc3QgbmJPZlNlbGVjdGlvbnMgPSAoYWxsU2hhcGVzIHx8IFtdKS5yZWR1Y2UoKGFjYywgc2hhcGUpID0+IHNoYXBlLmNvcnJlY3QgPyBhY2MgKyAxIDogYWNjLCAwKTtcblxuICBjb25zdCBuYk9mU2hhcGVzID0gKGFsbFNoYXBlcyB8fCBbXSkubGVuZ3RoO1xuXG4gIGlmIChuYk9mU2hhcGVzIDwgbWluU2hhcGVzKSB7XG4gICAgZXJyb3JzLnNoYXBlc0Vycm9yID0gYFRoZXJlIHNob3VsZCBiZSBhdCBsZWFzdCAke21pblNoYXBlc30gc2hhcGVzIGRlZmluZWQuYDtcbiAgfSBlbHNlIGlmIChuYk9mU2hhcGVzID4gbWF4U2hhcGVzKSB7XG4gICAgZXJyb3JzLnNoYXBlc0Vycm9yID0gYE5vIG1vcmUgdGhhbiAke21heFNoYXBlc30gc2hhcGVzIHNob3VsZCBiZSBkZWZpbmVkLmA7XG4gIH1cblxuICBpZiAobmJPZlNlbGVjdGlvbnMgPCAxKSB7XG4gICAgZXJyb3JzLnNlbGVjdGlvbnNFcnJvciA9ICdUaGVyZSBzaG91bGQgYmUgYXQgbGVhc3QgMSBzaGFwZSBzZWxlY3RlZC4nO1xuICB9IGVsc2UgaWYgKG5iT2ZTZWxlY3Rpb25zID4gbWF4U2VsZWN0aW9ucykge1xuICAgIGVycm9ycy5zZWxlY3Rpb25zRXJyb3IgPSBgTm8gbW9yZSB0aGFuICR7bWF4U2VsZWN0aW9uc30gc2hhcGVzIHNob3VsZCBiZSBzZWxlY3RlZC5gO1xuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn07XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.js"],"names":["log","normalize","question","promptEnabled","rationaleEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","strokeWidth","model","session","env","normalizedQuestion","imageUrl","dimensions","hotspotColor","multipleCorrect","outlineColor","partialScoring","prompt","shapes","rectangles","polygons","Promise","resolve","out","disabled","mode","map","index","rectProps","polyProps","responseCorrect","undefined","role","rationale","teacherInstructions","createDefaultModel","defaults","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"],"mappings":"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","sourcesContent":["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 promptEnabled: true,\n rationaleEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n strokeWidth: 5,\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 } = normalizedQuestion;\n const { rectangles, polygons } = 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 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 },\n responseCorrect:\n env.mode === 'evaluate'\n ? isResponseCorrect(normalizedQuestion, session)\n : 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 ? normalizedQuestion.teacherInstructions : 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)) {\n return 0;\n }\n\n const { shapes: { rectangles = [], polygons = [] } = {} } = 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];\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 = [], polygons = {} } = {} } = question;\n\n const rectangleCorrect = returnShapesCorrect(rectangles);\n const polygonsCorrect = returnShapesCorrect(polygons);\n\n resolve({\n answers: [\n ...rectangleCorrect,\n ...polygonsCorrect\n ],\n id: '1'\n });\n } else {\n resolve(null);\n }\n });\n};\n"],"file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../src/index.js"],"names":["log","normalize","question","promptEnabled","rationaleEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","strokeWidth","model","session","env","normalizedQuestion","imageUrl","dimensions","hotspotColor","multipleCorrect","outlineColor","partialScoring","prompt","shapes","rectangles","polygons","Promise","resolve","out","disabled","mode","map","index","rectProps","polyProps","responseCorrect","undefined","role","rationale","teacherInstructions","createDefaultModel","defaults","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"],"mappings":"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","sourcesContent":["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 promptEnabled: true,\n rationaleEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n strokeWidth: 5,\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 } = normalizedQuestion;\n const { rectangles, polygons } = 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 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 },\n responseCorrect:\n env.mode === 'evaluate'\n ? isResponseCorrect(normalizedQuestion, session)\n : 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 ? normalizedQuestion.teacherInstructions : 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)) {\n return 0;\n }\n\n const { shapes: { rectangles = [], polygons = [] } = {} } = 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];\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 = [], polygons = {} } = {} } = question;\n\n const rectangleCorrect = returnShapesCorrect(rectangles);\n const polygonsCorrect = returnShapesCorrect(polygons);\n\n resolve({\n answers: [\n ...rectangleCorrect,\n ...polygonsCorrect\n ],\n id: '1'\n });\n } else {\n resolve(null);\n }\n });\n};\n"],"file":"index.js"}
|
package/controller/lib/utils.js
CHANGED
|
@@ -47,4 +47,4 @@ var isResponseCorrect = function isResponseCorrect(question, session) {
|
|
|
47
47
|
};
|
|
48
48
|
|
|
49
49
|
exports.isResponseCorrect = isResponseCorrect;
|
|
50
|
-
//# sourceMappingURL=
|
|
50
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy5qcyJdLCJuYW1lcyI6WyJnZXRDb3JyZWN0UmVzcG9uc2UiLCJjaG9pY2VzIiwiZmlsdGVyIiwiYyIsImNvcnJlY3QiLCJtYXAiLCJpZCIsInNvcnQiLCJpc1Jlc3BvbnNlQ29ycmVjdCIsInF1ZXN0aW9uIiwic2Vzc2lvbiIsInNoYXBlcyIsInJlY3RhbmdsZXMiLCJwb2x5Z29ucyIsImNvcnJlY3RSZXNwb25zZUlkcyIsImFuc3dlcnMiLCJsZW5ndGgiLCJhbnN3ZXJJZHMiLCJhIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUVPLElBQU1BLGtCQUFrQixHQUFHLFNBQXJCQSxrQkFBcUIsQ0FBQ0MsT0FBRDtBQUFBLFNBQWFBLE9BQU8sQ0FDbkRDLE1BRDRDLENBQ3JDLFVBQUFDLENBQUM7QUFBQSxXQUFJQSxDQUFDLENBQUNDLE9BQU47QUFBQSxHQURvQyxFQUU1Q0MsR0FGNEMsQ0FFeEMsVUFBQUYsQ0FBQztBQUFBLFdBQUlBLENBQUMsQ0FBQ0csRUFBTjtBQUFBLEdBRnVDLEVBRzVDQyxJQUg0QyxFQUFiO0FBQUEsQ0FBM0I7Ozs7QUFLQSxJQUFNQyxpQkFBaUIsR0FBRyxTQUFwQkEsaUJBQW9CLENBQUNDLFFBQUQsRUFBV0MsT0FBWCxFQUF1QjtBQUN0RCx5QkFBNkNELFFBQTdDLENBQVFFLE1BQVI7QUFBQSxNQUFrQkMsVUFBbEIsb0JBQWtCQSxVQUFsQjtBQUFBLE1BQThCQyxRQUE5QixvQkFBOEJBLFFBQTlCO0FBQ0EsTUFBTVosT0FBTyxpREFBT1csVUFBUCx1Q0FBc0JDLFFBQXRCLEVBQWI7QUFDQSxNQUFJQyxrQkFBa0IsR0FBR2Qsa0JBQWtCLENBQUNDLE9BQUQsQ0FBM0M7O0FBRUEsTUFBSSxDQUFDUyxPQUFELElBQVkseUJBQVFBLE9BQVIsQ0FBaEIsRUFBa0M7QUFDaEMsV0FBTyxLQUFQO0FBQ0Q7O0FBRUQsTUFBSUEsT0FBTyxDQUFDSyxPQUFSLElBQW1CTCxPQUFPLENBQUNLLE9BQVIsQ0FBZ0JDLE1BQXZDLEVBQStDO0FBQzdDLFFBQUlDLFNBQVMsR0FBRyxDQUFDUCxPQUFPLENBQUNLLE9BQVIsSUFBbUIsRUFBcEIsRUFBd0JWLEdBQXhCLENBQTRCLFVBQUFhLENBQUM7QUFBQSxhQUFJQSxDQUFDLENBQUNaLEVBQU47QUFBQSxLQUE3QixDQUFoQjtBQUVBLFdBQU8seUJBQVFXLFNBQVMsQ0FBQ1YsSUFBVixFQUFSLEVBQTBCTyxrQkFBMUIsQ0FBUDtBQUNELEdBSkQsTUFJTyxJQUFJLEVBQUVBLGtCQUFrQixJQUFJQSxrQkFBa0IsQ0FBQ0UsTUFBM0MsQ0FBSixFQUF3RDtBQUM3RCxXQUFPLElBQVA7QUFDRDs7QUFFRCxTQUFPLEtBQVA7QUFDRCxDQWxCTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC9pc0VxdWFsJztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5JztcblxuZXhwb3J0IGNvbnN0IGdldENvcnJlY3RSZXNwb25zZSA9IChjaG9pY2VzKSA9PiBjaG9pY2VzXG4gIC5maWx0ZXIoYyA9PiBjLmNvcnJlY3QpXG4gIC5tYXAoYyA9PiBjLmlkKVxuICAuc29ydCgpO1xuXG5leHBvcnQgY29uc3QgaXNSZXNwb25zZUNvcnJlY3QgPSAocXVlc3Rpb24sIHNlc3Npb24pID0+IHtcbiAgY29uc3QgeyBzaGFwZXM6IHsgcmVjdGFuZ2xlcywgcG9seWdvbnMgfSB9ID0gcXVlc3Rpb247XG4gIGNvbnN0IGNob2ljZXMgPSBbLi4ucmVjdGFuZ2xlcywgLi4ucG9seWdvbnNdO1xuICBsZXQgY29ycmVjdFJlc3BvbnNlSWRzID0gZ2V0Q29ycmVjdFJlc3BvbnNlKGNob2ljZXMpO1xuXG4gIGlmICghc2Vzc2lvbiB8fCBpc0VtcHR5KHNlc3Npb24pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHNlc3Npb24uYW5zd2VycyAmJiBzZXNzaW9uLmFuc3dlcnMubGVuZ3RoKSB7XG4gICAgbGV0IGFuc3dlcklkcyA9IChzZXNzaW9uLmFuc3dlcnMgfHwgW10pLm1hcChhID0+IGEuaWQpO1xuXG4gICAgcmV0dXJuIGlzRXF1YWwoYW5zd2VySWRzLnNvcnQoKSwgY29ycmVjdFJlc3BvbnNlSWRzKTtcbiAgfSBlbHNlIGlmICghKGNvcnJlY3RSZXNwb25zZUlkcyAmJiBjb3JyZWN0UmVzcG9uc2VJZHMubGVuZ3RoKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcbiJdfQ==
|
package/controller/src/index.js
CHANGED
|
@@ -169,3 +169,29 @@ export const createCorrectResponseSession = (question, env) => {
|
|
|
169
169
|
}
|
|
170
170
|
});
|
|
171
171
|
};
|
|
172
|
+
|
|
173
|
+
export const validate = (model = {}, config = {}) => {
|
|
174
|
+
const { shapes } = model;
|
|
175
|
+
const { minShapes = 2, maxShapes, maxSelections } = config;
|
|
176
|
+
const errors = {};
|
|
177
|
+
|
|
178
|
+
const allShapes = Object.values(shapes || {}).reduce((acc, shape) => [...acc, ...shape], []);
|
|
179
|
+
|
|
180
|
+
const nbOfSelections = (allShapes || []).reduce((acc, shape) => shape.correct ? acc + 1 : acc, 0);
|
|
181
|
+
|
|
182
|
+
const nbOfShapes = (allShapes || []).length;
|
|
183
|
+
|
|
184
|
+
if (nbOfShapes < minShapes) {
|
|
185
|
+
errors.shapesError = `There should be at least ${minShapes} shapes defined.`;
|
|
186
|
+
} else if (nbOfShapes > maxShapes) {
|
|
187
|
+
errors.shapesError = `No more than ${maxShapes} shapes should be defined.`;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
if (nbOfSelections < 1) {
|
|
191
|
+
errors.selectionsError = 'There should be at least 1 shape selected.';
|
|
192
|
+
} else if (nbOfSelections > maxSelections) {
|
|
193
|
+
errors.selectionsError = `No more than ${maxSelections} shapes should be selected.`;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
return errors;
|
|
197
|
+
};
|
package/docs/pie-schema.json
CHANGED
|
@@ -200,6 +200,11 @@
|
|
|
200
200
|
"type": "boolean",
|
|
201
201
|
"title": "studentInstructionsEnabled"
|
|
202
202
|
},
|
|
203
|
+
"spellCheckEnabled": {
|
|
204
|
+
"description": "Indicates if spellcheck is enabled for the author. Default value is true",
|
|
205
|
+
"type": "boolean",
|
|
206
|
+
"title": "spellCheckEnabled"
|
|
207
|
+
},
|
|
203
208
|
"strokeWidth": {
|
|
204
209
|
"description": "Indicates the width of the outline for a selection",
|
|
205
210
|
"type": "number",
|
|
@@ -239,6 +244,7 @@
|
|
|
239
244
|
"partialScoring",
|
|
240
245
|
"rationaleEnabled",
|
|
241
246
|
"shapes",
|
|
247
|
+
"spellCheckEnabled",
|
|
242
248
|
"strokeWidth",
|
|
243
249
|
"studentInstructionsEnabled",
|
|
244
250
|
"teacherInstructionsEnabled"
|
package/docs/pie-schema.json.md
CHANGED
|
@@ -138,6 +138,10 @@ Indicates if Rationale are enabled
|
|
|
138
138
|
|
|
139
139
|
Indicates if Student Instructions are enabled
|
|
140
140
|
|
|
141
|
+
# `spellCheckEnabled` (boolean, required)
|
|
142
|
+
|
|
143
|
+
Indicates if spellcheck is enabled for the author. Default value is true
|
|
144
|
+
|
|
141
145
|
# `strokeWidth` (number, required)
|
|
142
146
|
|
|
143
147
|
Indicates the width of the outline for a selection
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
|
|
7
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
8
|
+
|
|
9
|
+
var _react = _interopRequireDefault(require("react"));
|
|
10
|
+
|
|
11
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
12
|
+
|
|
13
|
+
var _enzyme = require("enzyme");
|
|
14
|
+
|
|
15
|
+
var _enzymeToJson = _interopRequireDefault(require("enzyme-to-json"));
|
|
16
|
+
|
|
17
|
+
var _konva = _interopRequireDefault(require("konva"));
|
|
18
|
+
|
|
19
|
+
var _container = _interopRequireWildcard(require("../hotspot/container"));
|
|
20
|
+
|
|
21
|
+
var _index = _interopRequireDefault(require("../hotspot/index"));
|
|
22
|
+
|
|
23
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
24
|
+
|
|
25
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
26
|
+
|
|
27
|
+
_konva["default"].isBrowser = false;
|
|
28
|
+
describe('HotspotComponent', function () {
|
|
29
|
+
describe('renders', function () {
|
|
30
|
+
var wrapper;
|
|
31
|
+
beforeEach(function () {
|
|
32
|
+
wrapper = function wrapper(props) {
|
|
33
|
+
return (0, _enzyme.shallow)( /*#__PURE__*/_react["default"].createElement(_index["default"], props));
|
|
34
|
+
};
|
|
35
|
+
});
|
|
36
|
+
it('snapshot', function () {
|
|
37
|
+
var w = wrapper();
|
|
38
|
+
expect(w).toMatchSnapshot();
|
|
39
|
+
});
|
|
40
|
+
it('snapshot with rationale', function () {
|
|
41
|
+
var w = wrapper({
|
|
42
|
+
rationale: 'This is rationale'
|
|
43
|
+
});
|
|
44
|
+
expect(w).toMatchSnapshot();
|
|
45
|
+
});
|
|
46
|
+
it('snapshot with padding having a size accordingly to strokeWidth', function () {
|
|
47
|
+
var w = (0, _enzyme.shallow)( /*#__PURE__*/_react["default"].createElement(_container.Container, {
|
|
48
|
+
strokeWidth: 50,
|
|
49
|
+
classes: {},
|
|
50
|
+
dimensions: {
|
|
51
|
+
width: 100,
|
|
52
|
+
height: 100
|
|
53
|
+
},
|
|
54
|
+
onSelectChoice: jest.fn(),
|
|
55
|
+
disabled: false,
|
|
56
|
+
hotspotColor: "#000",
|
|
57
|
+
outlineColor: "#FAFAFA",
|
|
58
|
+
imageUrl: "data:image/jpeg;base64,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",
|
|
59
|
+
isEvaluateMode: false,
|
|
60
|
+
session: {
|
|
61
|
+
answers: [{
|
|
62
|
+
id: '1'
|
|
63
|
+
}, {
|
|
64
|
+
id: '2'
|
|
65
|
+
}]
|
|
66
|
+
},
|
|
67
|
+
shapes: {
|
|
68
|
+
rectangles: [{
|
|
69
|
+
id: '1',
|
|
70
|
+
correct: true,
|
|
71
|
+
x: 0,
|
|
72
|
+
y: 0,
|
|
73
|
+
width: 80,
|
|
74
|
+
height: 80
|
|
75
|
+
}],
|
|
76
|
+
polygons: []
|
|
77
|
+
}
|
|
78
|
+
}));
|
|
79
|
+
expect(w).toMatchSnapshot();
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
describe('Container', function () {
|
|
84
|
+
var onSelectChoice, wrapper;
|
|
85
|
+
|
|
86
|
+
var mkWrapper = function mkWrapper() {
|
|
87
|
+
var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
88
|
+
opts = _lodash["default"].extend({
|
|
89
|
+
classes: {
|
|
90
|
+
base: 'base'
|
|
91
|
+
},
|
|
92
|
+
dimensions: {
|
|
93
|
+
height: 0,
|
|
94
|
+
width: 0
|
|
95
|
+
},
|
|
96
|
+
disabled: false,
|
|
97
|
+
hotspotColor: 'rgba(137, 183, 244, 0.65)',
|
|
98
|
+
imageUrl: '',
|
|
99
|
+
isEvaluateMode: false,
|
|
100
|
+
outlineColor: 'blue',
|
|
101
|
+
session: {
|
|
102
|
+
answers: []
|
|
103
|
+
},
|
|
104
|
+
shapes: {
|
|
105
|
+
rectangles: [],
|
|
106
|
+
polygons: []
|
|
107
|
+
}
|
|
108
|
+
}, opts);
|
|
109
|
+
return (0, _enzyme.shallow)( /*#__PURE__*/_react["default"].createElement(_container["default"], (0, _extends2["default"])({}, opts, {
|
|
110
|
+
onSelectChoice: onSelectChoice
|
|
111
|
+
})));
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
beforeEach(function () {
|
|
115
|
+
onSelectChoice = jest.fn();
|
|
116
|
+
wrapper = mkWrapper();
|
|
117
|
+
});
|
|
118
|
+
describe('snapshots', function () {
|
|
119
|
+
describe('outline color', function () {
|
|
120
|
+
it('renders', function () {
|
|
121
|
+
var wrapper = mkWrapper({
|
|
122
|
+
outlineColor: 'red'
|
|
123
|
+
});
|
|
124
|
+
expect((0, _enzymeToJson["default"])(wrapper)).toMatchSnapshot();
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
describe('hotspot color', function () {
|
|
128
|
+
it('renders', function () {
|
|
129
|
+
var wrapper = mkWrapper({
|
|
130
|
+
hotspotColor: 'rgba(217, 30, 24, 0.65)'
|
|
131
|
+
});
|
|
132
|
+
expect((0, _enzymeToJson["default"])(wrapper)).toMatchSnapshot();
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
describe('image', function () {
|
|
136
|
+
it('renders', function () {
|
|
137
|
+
var wrapper = mkWrapper({
|
|
138
|
+
imageUrl: 'https://picsum.photos/id/102/200/300'
|
|
139
|
+
});
|
|
140
|
+
expect((0, _enzymeToJson["default"])(wrapper)).toMatchSnapshot();
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
describe('shapes', function () {
|
|
144
|
+
it('renders', function () {
|
|
145
|
+
var wrapper = mkWrapper({
|
|
146
|
+
shapes: {
|
|
147
|
+
rectangles: [{
|
|
148
|
+
id: '1',
|
|
149
|
+
x: 5,
|
|
150
|
+
y: 5,
|
|
151
|
+
width: 5,
|
|
152
|
+
height: 5
|
|
153
|
+
}, {
|
|
154
|
+
id: '2',
|
|
155
|
+
x: 25,
|
|
156
|
+
y: 25,
|
|
157
|
+
width: 5,
|
|
158
|
+
height: 5
|
|
159
|
+
}],
|
|
160
|
+
polygons: [{
|
|
161
|
+
id: '3',
|
|
162
|
+
points: [{
|
|
163
|
+
x: 94,
|
|
164
|
+
y: 4
|
|
165
|
+
}, {
|
|
166
|
+
x: 89,
|
|
167
|
+
y: 4
|
|
168
|
+
}, {
|
|
169
|
+
x: 36,
|
|
170
|
+
y: 40
|
|
171
|
+
}]
|
|
172
|
+
}]
|
|
173
|
+
},
|
|
174
|
+
imageUrl: 'https://picsum.photos/id/102/200/300',
|
|
175
|
+
dimensions: {
|
|
176
|
+
width: 200,
|
|
177
|
+
height: 300
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
expect((0, _enzymeToJson["default"])(wrapper)).toMatchSnapshot();
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vY29udGFpbmVyLXRlc3QuanN4Il0sIm5hbWVzIjpbIktvbnZhIiwiaXNCcm93c2VyIiwiZGVzY3JpYmUiLCJ3cmFwcGVyIiwiYmVmb3JlRWFjaCIsInByb3BzIiwiaXQiLCJ3IiwiZXhwZWN0IiwidG9NYXRjaFNuYXBzaG90IiwicmF0aW9uYWxlIiwid2lkdGgiLCJoZWlnaHQiLCJqZXN0IiwiZm4iLCJhbnN3ZXJzIiwiaWQiLCJyZWN0YW5nbGVzIiwiY29ycmVjdCIsIngiLCJ5IiwicG9seWdvbnMiLCJvblNlbGVjdENob2ljZSIsIm1rV3JhcHBlciIsIm9wdHMiLCJfIiwiZXh0ZW5kIiwiY2xhc3NlcyIsImJhc2UiLCJkaW1lbnNpb25zIiwiZGlzYWJsZWQiLCJob3RzcG90Q29sb3IiLCJpbWFnZVVybCIsImlzRXZhbHVhdGVNb2RlIiwib3V0bGluZUNvbG9yIiwic2Vzc2lvbiIsInNoYXBlcyIsInBvaW50cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7Ozs7O0FBRUFBLGtCQUFNQyxTQUFOLEdBQWtCLEtBQWxCO0FBRUFDLFFBQVEsQ0FBQyxrQkFBRCxFQUFxQixZQUFNO0FBQ2pDQSxFQUFBQSxRQUFRLENBQUMsU0FBRCxFQUFZLFlBQU07QUFDeEIsUUFBSUMsT0FBSjtBQUVBQyxJQUFBQSxVQUFVLENBQUMsWUFBTTtBQUNmRCxNQUFBQSxPQUFPLEdBQUcsaUJBQUFFLEtBQUs7QUFBQSxlQUFJLG1DQUFRLGdDQUFDLGlCQUFELEVBQXNCQSxLQUF0QixDQUFSLENBQUo7QUFBQSxPQUFmO0FBQ0QsS0FGUyxDQUFWO0FBSUFDLElBQUFBLEVBQUUsQ0FBQyxVQUFELEVBQWEsWUFBTTtBQUNuQixVQUFJQyxDQUFDLEdBQUdKLE9BQU8sRUFBZjtBQUVBSyxNQUFBQSxNQUFNLENBQUNELENBQUQsQ0FBTixDQUFVRSxlQUFWO0FBQ0QsS0FKQyxDQUFGO0FB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QS9FTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBzaGFsbG93IH0gZnJvbSAnZW56eW1lJztcbmltcG9ydCB0b0pzb24gZnJvbSAnZW56eW1lLXRvLWpzb24nO1xuaW1wb3J0IEtvbnZhIGZyb20gJ2tvbnZhJztcblxuaW1wb3J0IENvbnRhaW5lciwgeyBDb250YWluZXIgYXMgQ29udGFpbmVyQ29tcCB9IGZyb20gJy4uL2hvdHNwb3QvY29udGFpbmVyJztcbmltcG9ydCBIb3RzcG90Q29tcG9uZW50IGZyb20gJy4uL2hvdHNwb3QvaW5kZXgnO1xuXG5Lb252YS5pc0Jyb3dzZXIgPSBmYWxzZTtcblxuZGVzY3JpYmUoJ0hvdHNwb3RDb21wb25lbnQnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdyZW5kZXJzJywgKCkgPT4ge1xuICAgIGxldCB3cmFwcGVyO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICB3cmFwcGVyID0gcHJvcHMgPT4gc2hhbGxvdyg8SG90c3BvdENvbXBvbmVudCB7Li4ucHJvcHN9IC8+KTtcbiAgICB9KTtcblxuICAgIGl0KCdzbmFwc2hvdCcsICgpID0+IHtcbiAgICAgIGxldCB3ID0gd3JhcHBlcigpO1xuXG4gICAgICBleHBlY3QodykudG9NYXRjaFNuYXBzaG90KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc25hcHNob3Qgd2l0aCByYXRpb25hbGUnLCAoKSA9PiB7XG4gICAgICBsZXQgdyA9IHdyYXBwZXIoeyByYXRpb25hbGU6ICdUaGlzIGlzIHJhdGlvbmFsZScgfSk7XG5cbiAgICAgIGV4cGVjdCh3KS50b01hdGNoU25hcHNob3QoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzbmFwc2hvdCB3aXRoIHBhZGRpbmcgaGF2aW5nIGEgc2l6ZSBhY2NvcmRpbmdseSB0byBzdHJva2VXaWR0aCcsICgpID0+IHtcbiAgICAgIGxldCB3ID0gc2hhbGxvdyg8Q29udGFpbmVyQ29tcFxuICAgICAgICBzdHJva2VXaWR0aD17NTB9XG4gICAgICAgIGNsYXNzZXM9e3t9fVxuICAgICAgICBkaW1lbnNpb25zPXt7IHdpZHRoOiAxMDAsIGhlaWdodDogMTAwIH19XG4gICAgICAgIG9uU2VsZWN0Q2hvaWNlPXtqZXN0LmZuKCl9XG4gICAgICAgIGRpc2FibGVkPXtmYWxzZX1cbiAgICAgICAgaG90c3BvdENvbG9yPScjMDAwJ1xuICAgICAgICBvdXRsaW5lQ29sb3I9JyNGQUZBRkEnXG4gICAgICAgIGltYWdlVXJsPSdkYXRhOmltYWdlL2pwZWc7YmFzZTY0LC85ai80QUFRU2taSlJnQUJBUUFBQVFBQkFBRC8yd0NFQUFrR0J3OFBFQThQRHc4UER4QVBEZzhQRHcwUER3OFBEdzhRRlJFV0ZoVVJGUlVZSFNnZ0dCb21IUlVWSVRFaEpTa3JMaTR1Rng4ek9ETXNOeWd0THlzQkNnb0tEZzBPRnhBUUZ5MGRIUjB0TFNzdExTMHRLeTB0TFMwdExTc3RMUzB0S3kwdExTMHRMU3N0S3kwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdEsvL0FBQkVJQUtnQkxBTUJFUUFDRVFFREVRSC94QUFiQUFBQ0F3RUJBUUFBQUFBQUFBQUFBQUFCQWdBREJBVUdCLy9FQURvUUFBSUNBUU1DQkFRRUJRTURCUUVBQUFFQ0FBTVJCQkloTVVFRkUxRmhJakp4Z1FZVVFwRWpVcUd4MFdKeXdVUGg4QlVrTTFQeEIvL0VBQm9CQVFFQUF3RUJBQUFBQUFBQUFBQUFBQUFCQWdNRUJRYi94QUF4RVFFQUFnSUJBd0lFQkFZREFRRUFBQUFBQVFJREVRUVNJVEZCVVFVVE1tRWljWUdSUXFHeDBlSHdGRFBCOFNQLzJnQU1Bd0VBQWhFREVRQS9BTHN6dzVjNDVrRXpDSm1VVE15QnpNaE15Z0V3RkpsUU13RkpoQ2t3QklBVElBVEFYTUNaa0FKbEM1a1RZUWdaaEFNb1dCSlFRWVZDWUNFeWdaaFF6Q2dXbENscFZMdWtRQ1lVdVpDQUpoU2xwTkFFd0YzUm9la3pOU3BtRVNCSmxBT1pZRUVvT1pRcE1vVW1FTEtKSWhUQUVna2dXQURJRnpBRUlFSUJNSUVBU29FQ1NxRW9rQllVQ1lVaE1CQ1pWS1RLSURBaE1paG1BcE1nUW1VTG1OQ1FQU1ptbGtHWVFjeTZCek1nSlFjd0lUS2daZ0tZRWxRSlFETVFwa0VrQ2t5QVVCclhhdXBIdXNSZDcxMURleUw2dDZaN0E4bnROMU9QZThiOE1vcE1zZWwxOWR1ZGpjcWNNcEJWZ2ZUQitobU44TjZlWVNhekRSTmJCQ1lRSUVnU1ZBTUFZbEVNS1V5aFNZQ21GSVRLSzJoU2t5Z2JvVVFZVUNaQXBNb1dBSlFaQjZLYVdTUzZCbEVsRWxCekNCbUVBd0pLQktnRXdGSm1NZ1prRlQzcU1qSkpWZHpCVmQ5aS93QXo3UWRnOXppYks0YjJqY1F5aWs2Mno2elhMWFViZ1F3QUczQkJETWVGR2ZUUC9NWXNVMnYweitwV3U1MUx5bE9zWUZMN1VkS056MTIyNlYvSXV2Y2dNVVpoa1o1QjVYR09KNnJwVlVlSktFcnJGRmUxTFRZN2hyRnV0SFpHZFR3QU9tQU9lWVRUdWVGZU5xN2VVNXdTVDVUTVFTd3p3cFBHV3gzd00rZ25CbjQrdnhWOE5HVEhydkRzNW5JMG9JRFNJZ2xFeEFVeWhUS0VKaFNreWdHRklZRlpoU21VS1lVTXdvRXdCbUFNeW9HWlZUZEE5Sk5ESkpRWlJKUk13SkNKS2lFd2dTaFNZQ2t3RkprRmQxb1JXWTlGVXNmb0JtV2xlcTBRc1J1ZFBOZUdlTVdKY1BLdEdqYTd6QmZxUnVkWFVuUHhweVBoNlpVRHJQVTA2V2ZmcHhwOXB1QmMwM3ZzYXUzYXQ0ZXNJS3lEZ2tydk9TTWV2dFlnckRxNkQ4RWFqeExVWGlwYU5JdGFWUGdPMWlCYkUzSUZJeVRrY2svL0FKS3BFLzhBNXY0bUx6cDJGSUpVbXU0MmZ3clNQMHFjWjNleEE2UnMyNWV1L0FuaVNhbjhxS0dObTFySzJWbENNcWtaWkhKQTRKSEhYa1FPMTRMcUxqV3E2bEhTMEJzTXlGUmFGYmFXR2VwQjRPTzg4N2tZZWlkeDRjMlNuVDNoMGdaek5SaEFJa1FaUWpTaEdoU0dVTEtvR0FoaFNNWUNHRkt4bENaZ1NWUWdMS2lFeXFYZEE5UE5ESVpSSlJJRWxSTXdnRXlnWmhBSmdMbUVBbUFwTURMcmtWMVZIeHRzdHFRNXNGUStKd1BuSUlIM0UyOGY2MnpIOVR5MXRMdXFVNmRiM05pSzl0TzNlSHVRdUN5QmVxam5CK3M3MjlyOEdvc0dsMTcvQUphcXdLZEtoTnhJdXFjM0hDMUx0K0lzUmdqSTZkNWxDdytxZmc4VWF0YmRYcDlPZkRyNjdXMDlsZFJBNkJXSXNyeHRZNVk5VnlKSlNaMDViL2o3U3ZxTE5OcUNOZ2NxTlZzMjBsbGJHR1hjU25JNGJwMzRsMHJ0K0orT2FmU3JXTlRxRTJzeE5OaEplNUNGejFHZHd3Y1pQcmc1em1TQ083eG12L0d2aHVwYlYxV0syMWEvTTBlclJHM0xxK2o0WGdoR3dtUWV1SDlSRnF4YU5TbHE3aGswZW9GcUs0Nk1NNDlEM0g3enliMG1scGlYSGFOVHBvRXdZbUVDUUZJZ0tSS3BDSUM3WTJvRlpkcnBXeXdLMkVxcXpLRU1LRW9rb0JnS1pVVnNZQ1pnZXJ6TlRNWUVsRWhFSmhDNWxFekNGSmhDa3dGektnRXdGSmdWWFZWdWExdHJzdHJOMVFldW9ac1pTNEJDalBYbWJjSDF0bVA2blcvQXRWWDhGdExjV3YwMzVsYnREZU1iYW10d2RyYmNxeHdod2NqT2VtVE82WFJMem40NXVvVFcyYWxydFI1dGxsckNoVlZUcDdhUWcwKzdjZHBYTzRuR2NkdXN5aGxEekYrdDFpUFl6MmFpdHRRVnV0QVo2dk56eUhLakFJNTQrc3VsMUxBMmM1OWVwNlpFYWs2WjlSL0xsT3ZvTUgyOVB0TTdVbXZsbmZGYXNidERyK0hlSTZKZExxZE8rbVJ0VGZ0Rkd0SjVvYmNPZWVnd0QwNTVJNlRXMVBRYVRWYUlHcXZUa285cUZyTlB1M3BYYWcyc0VKNUdTakhucUNwSGVjdkt4N2pxOW1yTFRjYmRFVHozTVlRREFtSUNrUXBkc2JFMlJ0U3NzS3FZU2lwaExBcWNTcXJJbEFJZ0taUXVaa0FZQ05BWEVJOVRtYTJhWmhFektKbVJBSmhDa3lnWmhBSmxRcE1hVU15b0JNQkNaQlZZbDdsQnBtVmJRNHNWbXhnZVVEYjMvd0JrM2NmNjJ6RjlUbWFEOFRQb2I2YmEwb3RzRmR2NWl3UGxkU0wyRnZ4WUEydWhPTy9URTdYUk1PSjQ5cnRWZTZEVUV2emRaU1BoSjIyMnM1T1Y1NjU0UFRFMlJFejJpRzJ0Wm1kVmpiZFo0djhBbUdWdFl6R3hVVkZaMUNqYU00SEFBN25yUFJ3emlycUxSMHo5M3Y4QUR2eGFSRmN0ZWlmdkRhK21xZGVpa1k0NEg5RE8yYVZ0R3RiZTNiQmh5MTFxSmh5ZkVQRHlpa29keWprb2VvK2s0ODNIbUsvaDhSNlBGNXZ3K2FVM1NkMWp2cit5clYrRks2TFpWd2NBNDdFWWpKeEsyckUwWTUvaGRNbU9MNG5PcXFhbXhXSHd1cERLZmNIM25tM3h6RzRzOEhKaXRTZW0wUG9tbHVGaUs0Nk1BZnA2aWVOZXZUYVllZmFOVHBkTVdJaVJUUURpVGE2REVpaGlCVzhxcVdFeUZUTEFSbGxOS3lzb1VpQlUweUNtVUtaUXBNQVFQVFptdGRobVZFZ1RNSUJNQlNZUUNaVUFtWFFVbVVETUlCTUJESXJINGxxUlVvYzByZXUvRFZObmF3S3R6OWpnL2FidVBING0zRkhkNTd3dDZEVmJTOWFtMnhxelhxQytEV0Y2cUJqa0g2LzJucFlhUmVkVEwwK0pocG12MDJ0cGN0dWxxdFZDalYyYmJCYzd0bEhZdmxIWDBHM2cvUWU4NmVQYXVQSk5iOW5vZkQ4bVBqY20xTTNiMDMvdnU2VDZaV0haZ2V4NUU5S2F4YVBkOUxiRFRKWDBtSi9WbE9nMm5OYk5XM3AxVSsySnErVEZlOUoxL1J3endJeHp2RE0wbitYN0FkWXljWEp4L3dEWXZLL2NkcGw4eTFmcmo5VmprWk1mYk5YdDd4NFVlSGFoUTdVNUJYNXF6bjlKNmo3VEhGYUl0TlAyYXVKbHJXOXNNVHVQTmZ5OXYwRHhuU2gwM0FmR3VTUGYxRWNqRkY2L2RqOFE0MFpjZTlkNGEvd1hyL01yc3JPYzFNQ00vd0FyRC9JUDd6NWZsMTFNUytOengzMjlLSnlOQnBBNGtVWkZBbVJTNGxDc0kycXNyS0syRW9xSWxGYkNVSTBDcGhMQXJNeVFqU3dFbEVnZWx6TUJNd0JtRUFtRURNdWdDWmRJVW1VQW1WQXpDbEpnRE1nQk1nbzFneWh5em9BVkplclBtS29JM0ZmZmJ1NG0zRE9ydzJZNTFaeDlIbzZIVENGYkFHWWJzWUxZUERlb3lNSDd6NkREVEhla2RuMkhDNC9IejhlTlJFejYrK3lhM3dablFEYXpxQ2RtUVM2bmpJUi8yNG12TFNrZHB0L2Y5M0p6TU9LbjRKeWIxNlQ1ajhwLzhsejZORHJhc21sTHJFWDU5dGJ0NWZmNHdBUXYxbW11UzJQNmJPREh5TXZIbmVMSjI5djhOT2w4ZEIrR3dEL2NKMjR1WkU5cnZaNDN4bUxmaHpScjd3Nk81WEdRUXdNNjl4UGVIclJhbDQzRTdoeS9FZkQ5djhXcmgxT2RvN2p2eE9YTGoxUFhUekR5dVh4ZWlmbll1MHgzYWRKcVJmV0dIWG93OURPbkZrakpYY092Qm5yeU1mVkg2c2ZnSjhqWDdPaTNvNmo2ajR2K1A2end2aVdMVy8zZkxmRThQeTd6OSs3MnhiQXo2VHhkUEpoS1MyMGI4YnNaYkh5anZqNkQxaWRiN010SHB0RGpjdWNIT0NRUm4zR2Uzdk1iUnFkR2xoa0VBa1ZEQ2thQldUTEFyYVpDc3dxdHBSUzBxRU1DcGpNb0ZUU3dGbEVnZWp6TUVUTXFCbUFOMHFGTFNvR1pSQ1pRdVlBSmxDNWdUTWdHWkJKRjB3cFZUb2RWNXU3Uk41dWxONm80dDFGUWM4clc2VnNOcm5IdU9mdlBUeDlWWTh1N0hOcVIybVljdXJ4UzVndGltL3phcnpkVUEyZFBWenUrQ29nNE83M3g3VGJYSGEzaUc3SGd5WkltYTEyeGlnM09XdGM3aTI0N3p5V3puUFB2Tm1QSEV6cVowMzRPTkdTM1RhM1QrYWEzdzRnRE9Dby9Vb0hIdVJMa3dUVHY2TStUd0w0Ty9tdnZESnQxR214WUJ1cTd1UGlVZjdoMUgzbHBlK1B2NkppeTVzSDRvK24vQUg5blMwL2lxUGpkOEo3SHNUN0dkdE05YmVYczRlZFc4YXYyWmJQL0FHdG5uTGxxYk9MVkhPMy9BRlRDZi94djF4OU0rV2k4ZjhUTDg2dmVsdk1mK3RXdVVMZnBMVndmNDlZejZxeC83VFg4UnBFMDZtSHhyRldjY1pJLzNjUFg5L3B6L2lmTHZrNE1GejEvYnQ5NVBIaFZvbUlNaXBJb0V4b1ZzWmRLUXloREtLbmxSV1pWVnRBcWFFVXZNb0ZaZ1FDVUdCMzh6RkFKbFFNd0ZKbVRFTXdCbVVBbVVBbUFNeWlaa1VDWUF6QVZmTWR6VnByRWRyTkpZOWd1cTJKUmpKYjRuSE9VSEREdXc3VHR4NDRySDNkVktSRVBQMmFRYWhtWlhRQmxSbkNVK1N0ZGhHV3FWZlFkTWpnenR3NEp5Yjc2ZXJ3dmg5K1Z1WW5VUTJhZlQyVkRDN0dBOVZJSi9hZHRLWHh4cU5TOS9CeHVUeHE5TkpyTWZlSmorNk14Yml5alB1cEIvdmlXYlRQMVUydDc1TDlzM0hpMzVURS8xMEEwNmRCNWlaN2Y5cGo4dXZwRXcwMjRlR1k3VnRYZnBILzJZVkpUYW1TcEhPZmg5Ujc5cHFyaHZIZUpjZFBoL0lySFZXWS9Kek5YbzF6dUNOUTNmYXUrbHZxdmI3VENjZHE5OWEvbzU3OGZKajd6V2EvbEc0bjg0VTE5Q3U0THh5Qi9FcEk2ZE9xeTF2NmVQNXgvaGNXVCtIZXZ0NXIrM21GK25yYllpNE9LN3FuVTUzcW9EZ2tiaDFHTjN2eE1NMW8rVk9QOW12azVLeGduQlBtUEhyL1AyZXgwT3NwdjgwMVB2YXBseUFQaFpHNERxVDJ6L2VlTGZqelhIMVRMeFp3Nng5Vys4ZWZ5YTFQci9tYzJ0K0dqUjVpSm1HVUZMUUYzUm9JVEtvUUFSS0ttRXFLeUlWVzRnVk1JUlU2eWhDc0FFVElJVEE3MlppaVpsUXBNQVNvRXFKS0JBRXFoQUdZVU13RXNiQUp6akFQSTZqanJNcStZV1BNT2VUby9OdlM3OHlLMHJ1V2wzTEhVV09QL0FJVnNCNFVBRWVnNEU5Q0hZelY2YStwbXFSV1ZsQTgxYmNmQlpqbkdBTUE4Y0hQMW5YeDdaTlRGSWV4OE15Y3JwdFRCRVRIMzlEL2x0UWYrcW85Z016bzZjMC94UFNuai9FYmVja1IvdjVFMURYVkRKc1JoM1VFSzVHZWdtdTlzbFBOdHVQUG41V0R0ZkxGdnRIbGVuakZCSElkUGJhV3grMDJWNUZYYmkrTFlkZDRtUDBMZDR2cDhaM242YldIOTVmOEFrVTkyYy9GdU5IZmMvc3lIeGxXNHBxdHNQMHd2N2pNeC93Q1ZFL1RXWmFJK01SZWRZc2MyRmFiclNENUtCaDBHN0xuL0FFL2VZM3lUNW1JaHJ6OGkwUjE1S1ZyTWVPKzUvazBhVFNvcjRWenkxb0xzaXN2bWVXV1VMMUdNK1dOM09DNDRidHd6N3ZCMXZ1OUhUWHRVNE9keEJjNUJaMkNoZHg0R2VCMXdCUE56M3RlZTNoeVpiV3Q0OExGbk0wRG1SVUprRmJHVlVVU3hFeUR0UHBNb3BNK2lyanBIeG5FNlo0ZVNLNzBLckttWHFNVFJmRmFuMVFLaXMxaFNrb3FldUJVVWdWV0NFVkdVVlBLS2laUjZBeUlFSWtvQmxRSkFKUURDZ1prQm1BSUNtRlYyZ2xXQTZsU0I5Y1MxblV4SkhhVlYyc1d1OFdhaGE5ZlpiUzdXZ241bXRyQ3FtM0h3V0lSbmpPUU9NZFo2RlppWTI2NDFNTXRSdDAzbXJxS3JWSXRLTVdIL0FGTm9iWVQ2NHdmdk96ajU0eHhNVEQyUGhueEtuRnJhdDZ6TysvWlc3M1hmTC9DVDE3bjZUZE5zbVh4MmgyMnljem5mUitDaGwwTlZmeE9TY2QyNUorMGZLcGpqZG15ZUR4ZUpYcnl6dWZ2L0FHQVgyMzVXaFJXblR6RDFJOXBoMVd2OVBhSE44M055dit1T212dWRkRlJweHVzd3pIOVQ4a24yRXZSV3ZlV3lPTGd3VjZyOS92SnNXUHdGRlM0eUVPQTVYK1k5a1gzUDdHWXplZlRzMTM1VnRheHgweC92b3UwV2xiY3hKWUxuSDZnemV2WHQ3OVp3Y3JrUlQ4TmU4LzBlUHpNOFUzU085cDh6N2Y1ZEJkTlg4UndNa0loVGpHMGJzSEhic1B0N1R6NXZhYStmVjUzWGJwOCtyY3FmQVFEd3FxekloSVVndGpvT0F3UEorb1AxNmFVbTBkY3p2VWIxN3gvajFaeGFaNzdkRFRhRGRVNUEzRmhsV0ErWGJ1WS9ZZ0Q3a1RkWGhSOHFZOHpieDl0ZjNoajA5bVBWNmZaeU9uQysrN2FDMzlUT1RsY2I1VTl2SGo5ZFJNc1pqVFBPTkEyd3JxZUdhTFBQWDJudGNMalI1a2lIZDAzZ2U3bkdCNllucHhoeFU5R1VWYXo0WW9HTVRkMVZtTmFaYWM3eFR3OGJjNEE1NVAwbkx5c2RiMVkyaDV6VTFnSGlmUFo2UldlekZRUk5DcTNXQlE2d005aXlpZ2lVVldDQlFZSHBTc216UkdXWGJIUmNUTGFEdGsyQVJBVWlVS1pRcGxDa3dBVENobUFJUkVwTm44RUhUMUN4bWY4QU0yamF5djVUSnMzL0FLUXdJNVBRZ0hJblRneVJyVXQyTzNvVFhxYk5NK3UxTmxlcHUxREdpeXBpMWQybXN3Zkx2QUJ3eWxVNDR4Z2ozblUycUgxWVJFTHE2bGtESnVSZ0hIVEtFOVI3ejA2OG1uVDM4dytzdy9HTUZjTWIzMVJETFZwVGNSWmRrTCtpa2NFKzU5Qk5jWTdaSjY3dWZGeGN2THQ4L1A0bnhIKytqbzJYYlNLYWxEMkVaQ2poRUg4ekhzSm5hMnUwZVhUbnpSajFqcEc3ZTN0K2Z0Q3RLbFFsOG0yM0J6ZHRCMmtkVnBVOFovMUhwL1NhTFRFVDNudTg3TGF0TGZqbnF0L0tQeWhyV29GUnU2dGhtVDVsK0pjOHQrcHVSOFdmc0p6Y3JQOEFMalVlWmNmTjVFWXF4V3ZlMC95V2dlbjdUeDU3ejNlRk03bmJwNkdvb1dLN2JWWkVHY1ovbXpVNC9UblA3Z2N6MU9OV2FSMjFhSi8zVSsyLzZ0a2VIdFB3NytIa3BWVFlBWEpGaWJ0d0tEY3BaQ081NC9yT2o1VVk0L0I3L3RFK2piV3ZxN0pWY0Z1RnlUdkErVSs1SDJtK1B3N1dYSS9JNlRVV1pLcVRXZHhWQ01Qay9xQW5uY3pOanZNVmlkejVUcDJ6K0tlQ1VlVlk0VVY0TFdaSFhnSDRSN1R6NW1KanZHaWF3OGFpWklIck5kSzlVNmFucWZCdEZ0QVBhZlJZSzlGWWhsV0hvUFBWUndadG1XK0tzbG10WHZMOHlEcFlmRU5XaFVqSStzeHlaYXhIZVd1MFBLNnBCbklQV2VEeUt4MWJyNnRaRHBMQitnbnZ3TXhQRXpSL0RzYU5mNGVkcVdLcHl3d3k0NkdkdWZoMnZqcmtwSGYxZ24zYy9XYWZadEIrYkdXSHBPSFBoakZxTjkvVVliVW1nWlhFQ2x4S0tDSkI2Z2lZYlVoU1hhYVRaTDFKb3UyTm1nS1M3WFJDc3UwMHFZVEtKVFNwcFFwTUFaZ0NEU1FCQ0x0TnEzcnZyMUxLdW9haXNWMDFXaGRnUUg1TTQ1R0N3R2VtUjJHSjAwNUd1MW0ydVQwbGY0YXpXclRicVVwdnIwMXJVVWVFQUEzdFhhMzZjZk1Sa1lKL2s1eGlkVVdpZkV0MFRFK0dLNmx2Z1ZHQnNZTXRxbGJNNlFxZmlGb0tqSHNlK1BUbWQwY3I4T3ZWOURUNHhIeXRhMWJ4OXZ6L0FNS2hvMlFiRmNZZjRyTFZZT3pnOUR1SEhUc09BSnk1dVhUSEdxOTVseFovaUdQRFNZeFQxV3Q1bVdvVXJ0MjQ0d0IxSTRIdUo1VTVyemJxMzNlRk9XODI2cG51ZXRBb0NnWUFHQUpoYTAybmNzTFdtMDdsWUppanArRWFxdWwxc1BtRWo1Z3VBTWZ2ei81NlRzNCtYSGkxYnZ2MTltVlowOVJvL3dBU2huV3NjN3lRblhna2RNenR4YzZtVEowMmpXMi9jYTNESCtJZkhyRVhZRVpDY2dNVkk2ZHVaNDNQK0k1Sm0yS3NhKzYyblRoK0VlS1BWdVpXeTN4TFp6bmtIUDhBYkU4VE5hMjY5TTYxNisrMk5iNmJ0ZjhBaUJ0U0JWOG93Tnh6MW5SWE5lOTY5YzlvOEUzM0dvWWFYMm5QV2VuaXYwenRyZEtueFpsN2NUdGpuU3lpMm1IVWVOV3EyZTJlWnFqNGphdHZ4ZUc2dGxWdmlObDV3bVJOT1htNU0yVHB4UXRyTGJrWUtEa2tZNTlqTm1XTDZpZDdhYkJvVTNXSU9lVGppWThmL3Nxa2VYdWRGb1FnTy9hV0hSZTVuMFZiVHJUYjBydFhRcHhoUU1kWnNwYVkya3c4ejRsb2FrRE95N3VTZjhDYTh1SEZGWnRhdS9Wcm1JaUhrZGRZWFluRzMyOUJQbnM5NXZlWm1OZlpHSnhOSXpQS0tqQTlWdG1qYlBSZ2ttelNlWExzMFVwTEVtaUZKbHMwcmRaWWxOTTdpWnhLTTd5cHBXWmtnRXlLbVlBekNKQ2FHUUVkdTJDQ0NNZ2c5aUQyTXNUTWVFM3BiVFk2Q3hWZXdDMDV0SG1PZk1KNE8vSitMN3pPYzE1OVdYWFlWRTFNQmdNSURnUUxGa0hkOEhxMmdXZzdHQndjNFpISGI2R2MrYmsvSm1OeDJiNlYzRzIzV2VPMTNrcFlvRzM5SkdmNkdlVHlzdVROUFZNYTlwaG51UER6ZXZwcXJEVzBEQ3R4WW9KeHorcjJseFRlK3EzOVBEWGJYb3g2RTd2aTlPUDhUdnc0L3dBVy9aZzZDbWRnZk1DZVNiQ0ZYcWVKak9LY2t4RU1xekwxUGdINGVTbGQxaERNZW85SjdQRTRzWVkzUGx2aXZ1N04vaGVuSUlJQTNUcW1LMjdUQ1RTSG05Ym9SUzVha2NnNFFsdWhtRnVKV3NkZFk3c1pyN05LZUw0WVZzeXN5N2R4L3dCZnBPYkR6WStiT0tlK3UzNnR0WWlZYWJ0Wm45WUJJM2R3d0hmSStzOVNsNGlkU2t3eDMyY1o0SUhQTTM5YkMwUEsrTDNvNU9FS3RudmpHUGJFOEhtNXNkNStuVnZkcGNoNTU0eTJDVVZtVlhyZ3M0OXMxcXBKdGxFQ1ZsMmFVdk1vUldabHRGVHl4SXoyQ1p3a3N0czJReFVFeW9CTUFaa0JFQWlSQkVyRXdnTUlEaVFTQTRnT0pFT0RDcjZyTnVldkk3SEhQWXpUbHhSa3JxV1ZiYVozUXV3TGc1L25VOGljWHlMMGlZMXRuMVJMTXJ2bTFDZmlWV0pIWmxBei9hWDVQZjJZekxYcHZrVEhIdzl2ck96RjlNSXZCbXdIZEtPajRTNm8zbU1jQloyOE9LUmJxczI0cTdsNkFlS0F0dUJ6V1I4WDFucVZ0VzA3aWV6bzEyRnZGYTFVZ3R1Mjhua2NEL3d6TzgxckREVXVCK0lOYWhSMnFPZWM3Z2ZrSTdUajVPYUl4enFTYlJFUEtmOEFxVGhDUTVWbUk2ZFQ5NTg3aXk1TWU0ck90c045bCtqOGMxanJzVGFGVUZTNUhKNXp5ZTg3NmN2TkZZaXNuVnAzdEZyWHNCcmNLU1ZQeERqdDNuZHgrVGZKK0N6R2JiN09OcU01SU9jamllZmZmVk1TMXNieUt6MlFpcVZYc2xFOC9iYWZNS0RHV0JTMHpoRlpFeWdWdUpsQ1N6V1RPR0xIZE5rTVpaMm1TRnpBbVpBUVlRNE1nZ01xR0JoRENRTm1BY3dHV0E0TUIxa0ZpeUtjU0xwUnF0TUdJWWNNT1BxdmNUVmxydURXMTlORzJ0Ty9YbWF1TGVMUk1mZGZRNEU2a0hFQ2UzYjBsOE1vbVk4TSt0MWRsQ041WitCdm1VOVB0TTR6M3gxbUt6NVoxdkxoNlB4aXl2SlFERGRjak9lWkk1RjRsc25MTXhwMGwxZTlMYm5BSG1INVIwNlkvd0NKaGt5OVc3VDZ0TnBUd3p3SnJjTzN3ci9MM011TGp6YU55dzYzVXYwNlZEYW9BOXYrWnR5UkZlMEc5czlkcFU1SFdZMHZOSjNDcUxUbmt6R1ptWjNJeTJTcXpXU2lyTUQyV1o1emNtWUFMVEtBaG1TRk15Z1V2TW9TV1M1cHRoakxIYVpzaGlvSmxRaE1DWmdFR1FITUliTUlJTWdlRUVHQTJZREtZRmdrRmlpUVdySXlPSUJrRjFMZ2NIb2VzOC9QanRqdDgybjZxRmxlMzZIb1oxNGMxY2tiZzBXYmdCS0YxRklkU3A3aVkyamNFUzg4K2dJZGF6MEo2elZYdlpabDAwMHdleEtWK1ZlVDd6S0k2OGtWYTdTOWZVb3JUN1QxdTFZWXc4L3EzTE1TWnczbmN0bGZETzB3VlM1bDBNOWhsVmxzbVFxZ2V3M1R6dE5td0xSbzJHWmttME1xa1l6S0Juc2FiSVJrdGFad2tzZGhteUdLb21WQ0V3Sm1CTXdDREloZ1lEcVpFTm1FRUdBOEJsZ1hMTVZXQ1FXQ1JSekNqbUF3TWdzVzNIRGNqKzA4L0xodGl0MTR3V1RISTVIck92RG5ya2o3aEJONGRSeU1RaXJ4YlNZQ3Y2R2NtYUpyTzFONE5RQWQzVXpwNFZmNDVhN1Q2TzNmYU1Zbm8ydERDWEIxTm1XUHBPU3paVHd6TTB4WnFYTXFxSE1vb3NsRmNhSC8yUT09J1xuICAgICAgICBpc0V2YWx1YXRlTW9kZT17ZmFsc2V9XG4gICAgICAgIHNlc3Npb249e3sgYW5zd2VyczogW3sgaWQ6ICcxJyB9LCB7IGlkOiAnMicgfV0gfX1cbiAgICAgICAgc2hhcGVzPXt7XG4gICAgICAgICAgcmVjdGFuZ2xlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZDogJzEnLFxuICAgICAgICAgICAgICBjb3JyZWN0OiB0cnVlLFxuICAgICAgICAgICAgICB4OiAwLFxuICAgICAgICAgICAgICB5OiAwLFxuICAgICAgICAgICAgICB3aWR0aDogODAsXG4gICAgICAgICAgICAgIGhlaWdodDogODBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBwb2x5Z29uczogW11cbiAgICAgICAgfX1cbiAgICAgIC8+KTtcblxuICAgICAgZXhwZWN0KHcpLnRvTWF0Y2hTbmFwc2hvdCgpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnQ29udGFpbmVyJywgKCkgPT4ge1xuICBsZXQgb25TZWxlY3RDaG9pY2UsIHdyYXBwZXI7XG5cbiAgY29uc3QgbWtXcmFwcGVyID0gKG9wdHMgPSB7fSkgPT4ge1xuICAgIG9wdHMgPSBfLmV4dGVuZChcbiAgICAgIHtcbiAgICAgICAgY2xhc3Nlczoge1xuICAgICAgICAgIGJhc2U6ICdiYXNlJ1xuICAgICAgICB9LFxuICAgICAgICBkaW1lbnNpb25zOiB7XG4gICAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICAgIHdpZHRoOiAwXG4gICAgICAgIH0sXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgICAgaG90c3BvdENvbG9yOiAncmdiYSgxMzcsIDE4MywgMjQ0LCAwLjY1KScsXG4gICAgICAgIGltYWdlVXJsOiAnJyxcbiAgICAgICAgaXNFdmFsdWF0ZU1vZGU6IGZhbHNlLFxuICAgICAgICBvdXRsaW5lQ29sb3I6ICdibHVlJyxcbiAgICAgICAgc2Vzc2lvbjogeyBhbnN3ZXJzOiBbXSB9LFxuICAgICAgICBzaGFwZXM6IHtcbiAgICAgICAgICByZWN0YW5nbGVzOiBbXSxcbiAgICAgICAgICBwb2x5Z29uczogW11cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9wdHNcbiAgICApO1xuXG4gICAgcmV0dXJuIHNoYWxsb3coPENvbnRhaW5lciB7Li4ub3B0c30gb25TZWxlY3RDaG9pY2U9e29uU2VsZWN0Q2hvaWNlfS8+KTtcbiAgfTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBvblNlbGVjdENob2ljZSA9IGplc3QuZm4oKTtcbiAgICB3cmFwcGVyID0gbWtXcmFwcGVyKCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzbmFwc2hvdHMnLCAoKSA9PiB7XG4gICAgZGVzY3JpYmUoJ291dGxpbmUgY29sb3InLCAoKSA9PiB7XG4gICAgICBpdCgncmVuZGVycycsICgpID0+IHtcbiAgICAgICAgY29uc3Qgd3JhcHBlciA9IG1rV3JhcHBlcih7IG91dGxpbmVDb2xvcjogJ3JlZCcgfSk7XG4gICAgICAgIGV4cGVjdCh0b0pzb24od3JhcHBlcikpLnRvTWF0Y2hTbmFwc2hvdCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnaG90c3BvdCBjb2xvcicsICgpID0+IHtcbiAgICAgIGl0KCdyZW5kZXJzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB3cmFwcGVyID0gbWtXcmFwcGVyKHsgaG90c3BvdENvbG9yOiAncmdiYSgyMTcsIDMwLCAyNCwgMC42NSknIH0pO1xuICAgICAgICBleHBlY3QodG9Kc29uKHdyYXBwZXIpKS50b01hdGNoU25hcHNob3QoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2ltYWdlJywgKCkgPT4ge1xuICAgICAgaXQoJ3JlbmRlcnMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHdyYXBwZXIgPSBta1dyYXBwZXIoeyBpbWFnZVVybDogJ2h0dHBzOi8vcGljc3VtLnBob3Rvcy9pZC8xMDIvMjAwLzMwMCcgfSk7XG4gICAgICAgIGV4cGVjdCh0b0pzb24od3JhcHBlcikpLnRvTWF0Y2hTbmFwc2hvdCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnc2hhcGVzJywgKCkgPT4ge1xuICAgICAgaXQoJ3JlbmRlcnMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHdyYXBwZXIgPSBta1dyYXBwZXIoe1xuICAgICAgICAgIHNoYXBlczoge1xuICAgICAgICAgICAgcmVjdGFuZ2xlczogW1xuICAgICAgICAgICAgICB7IGlkOiAnMScsIHg6IDUsIHk6IDUsIHdpZHRoOiA1LCBoZWlnaHQ6IDUgfSxcbiAgICAgICAgICAgICAgeyBpZDogJzInLCB4OiAyNSwgeTogMjUsIHdpZHRoOiA1LCBoZWlnaHQ6IDUgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHBvbHlnb25zOiBbXG4gICAgICAgICAgICAgIHsgaWQ6ICczJywgcG9pbnRzOiBbeyB4OiA5NCwgeTogNCB9LCB7IHg6IDg5LCB5OiA0IH0sIHsgeDogMzYsIHk6IDQwIH1dIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGltYWdlVXJsOiAnaHR0cHM6Ly9waWNzdW0ucGhvdG9zL2lkLzEwMi8yMDAvMzAwJyxcbiAgICAgICAgICBkaW1lbnNpb25zOiB7XG4gICAgICAgICAgICB3aWR0aDogMjAwLFxuICAgICAgICAgICAgaGVpZ2h0OiAzMDBcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBleHBlY3QodG9Kc29uKHdyYXBwZXIpKS50b01hdGNoU25hcHNob3QoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _react = _interopRequireDefault(require("react"));
|
|
6
|
+
|
|
7
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
8
|
+
|
|
9
|
+
var _enzyme = require("enzyme");
|
|
10
|
+
|
|
11
|
+
var _enzymeToJson = _interopRequireDefault(require("enzyme-to-json"));
|
|
12
|
+
|
|
13
|
+
var _konva = _interopRequireDefault(require("konva"));
|
|
14
|
+
|
|
15
|
+
var _image = _interopRequireDefault(require("../hotspot/image"));
|
|
16
|
+
|
|
17
|
+
_konva["default"].isBrowser = false;
|
|
18
|
+
describe('Image', function () {
|
|
19
|
+
var wrapper;
|
|
20
|
+
|
|
21
|
+
var mkWrapper = function mkWrapper() {
|
|
22
|
+
var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
23
|
+
opts = _lodash["default"].extend({
|
|
24
|
+
x: 5,
|
|
25
|
+
y: 5,
|
|
26
|
+
src: '',
|
|
27
|
+
tooltip: null
|
|
28
|
+
}, opts);
|
|
29
|
+
return (0, _enzyme.shallow)( /*#__PURE__*/_react["default"].createElement(_image["default"], opts));
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
beforeEach(function () {
|
|
33
|
+
wrapper = mkWrapper();
|
|
34
|
+
});
|
|
35
|
+
describe('snapshots', function () {
|
|
36
|
+
describe('x y position', function () {
|
|
37
|
+
it('renders', function () {
|
|
38
|
+
var wrapper = mkWrapper({
|
|
39
|
+
x: 10,
|
|
40
|
+
y: 10
|
|
41
|
+
});
|
|
42
|
+
expect((0, _enzymeToJson["default"])(wrapper)).toMatchSnapshot();
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
describe('image', function () {
|
|
46
|
+
it('renders', function () {
|
|
47
|
+
var wrapper = mkWrapper({
|
|
48
|
+
src: 'https://picsum.photos/id/102/200/300'
|
|
49
|
+
});
|
|
50
|
+
expect((0, _enzymeToJson["default"])(wrapper)).toMatchSnapshot();
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
describe('tooltip', function () {
|
|
54
|
+
it('renders', function () {
|
|
55
|
+
var wrapper = mkWrapper({
|
|
56
|
+
tooltip: 'Correctly\nselected'
|
|
57
|
+
});
|
|
58
|
+
expect((0, _enzymeToJson["default"])(wrapper)).toMatchSnapshot();
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vaW1hZ2UtdGVzdC5qc3giXSwibmFtZXMiOlsiS29udmEiLCJpc0Jyb3dzZXIiLCJkZXNjcmliZSIsIndyYXBwZXIiLCJta1dyYXBwZXIiLCJvcHRzIiwiXyIsImV4dGVuZCIsIngiLCJ5Iiwic3JjIiwidG9vbHRpcCIsImJlZm9yZUVhY2giLCJpdCIsImV4cGVjdCIsInRvTWF0Y2hTbmFwc2hvdCJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUVBQSxrQkFBTUMsU0FBTixHQUFrQixLQUFsQjtBQUVBQyxRQUFRLENBQUMsT0FBRCxFQUFVLFlBQU07QUFDdEIsTUFBSUMsT0FBSjs7QUFFQSxNQUFNQyxTQUFTLEdBQUcsU0FBWkEsU0FBWSxHQUFlO0FBQUEsUUFBZEMsSUFBYyx1RUFBUCxFQUFPO0FBQy9CQSxJQUFBQSxJQUFJLEdBQUdDLG1CQUFFQyxNQUFGLENBQ0w7QUFDRUMsTUFBQUEsQ0FBQyxFQUFFLENBREw7QUFFRUMsTUFBQUEsQ0FBQyxFQUFFLENBRkw7QUFHRUMsTUFBQUEsR0FBRyxFQUFFLEVBSFA7QUFJRUMsTUFBQUEsT0FBTyxFQUFFO0FBSlgsS0FESyxFQU9MTixJQVBLLENBQVA7QUFVQSxXQUFPLG1DQUFRLGdDQUFDLGlCQUFELEVBQVdBLElBQVgsQ0FBUixDQUFQO0FBQ0QsR0FaRDs7QUFjQU8sRUFBQUEsVUFBVSxDQUFDLFlBQU07QUFDZlQsSUFBQUEsT0FBTyxHQUFHQyxTQUFTLEVBQW5CO0FBQ0QsR0FGUyxDQUFWO0FBSUFGLEVBQUFBLFFBQVEsQ0FBQyxXQUFELEVBQWMsWUFBTTtBQUMxQkEsSUFBQUEsUUFBUSxDQUFDLGNBQUQsRUFBaUIsWUFBTTtBQUM3QlcsTUFBQUEsRUFBRSxDQUFDLFNBQUQsRUFBWSxZQUFNO0FBQ2xCLFlBQU1WLE9BQU8sR0FBR0MsU0FBUyxDQUFDO0FBQUVJLFVBQUFBLENBQUMsRUFBRSxFQUFMO0FBQVNDLFVBQUFBLENBQUMsRUFBRTtBQUFaLFNBQUQsQ0FBekI7QUFDQUssUUFBQUEsTUFBTSxDQUFDLDhCQUFPWCxPQUFQLENBQUQsQ0FBTixDQUF3QlksZUFBeEI7QUFDRCxPQUhDLENBQUY7QUFJRCxLQUxPLENBQVI7QUFPQWIsSUFBQUEsUUFBUSxDQUFDLE9BQUQsRUFBVSxZQUFNO0FBQ3RCVyxNQUFBQSxFQUFFLENBQUMsU0FBRCxFQUFZLFlBQU07QUFDbEIsWUFBTVYsT0FBTyxHQUFHQyxTQUFTLENBQUM7QUFBRU0sVUFBQUEsR0FBRyxFQUFFO0FBQVAsU0FBRCxDQUF6QjtBQUNBSSxRQUFBQSxNQUFNLENBQUMsOEJBQU9YLE9BQVAsQ0FBRCxDQUFOLENBQXdCWSxlQUF4QjtBQUNELE9BSEMsQ0FBRjtBQUlELEtBTE8sQ0FBUjtBQU9BYixJQUFBQSxRQUFRLENBQUMsU0FBRCxFQUFZLFlBQU07QUFDeEJXLE1BQUFBLEVBQUUsQ0FBQyxTQUFELEVBQVksWUFBTTtBQUNsQixZQUFNVixPQUFPLEdBQUdDLFNBQVMsQ0FBQztBQUFFTyxVQUFBQSxPQUFPLEVBQUU7QUFBWCxTQUFELENBQXpCO0FBQ0FHLFFBQUFBLE1BQU0sQ0FBQyw4QkFBT1gsT0FBUCxDQUFELENBQU4sQ0FBd0JZLGVBQXhCO0FBQ0QsT0FIQyxDQUFGO0FBSUQsS0FMTyxDQUFSO0FBTUQsR0FyQk8sQ0FBUjtBQXNCRCxDQTNDTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBzaGFsbG93IH0gZnJvbSAnZW56eW1lJztcbmltcG9ydCB0b0pzb24gZnJvbSAnZW56eW1lLXRvLWpzb24nO1xuaW1wb3J0IEtvbnZhIGZyb20gJ2tvbnZhJztcblxuaW1wb3J0IEltYWdlIGZyb20gJy4uL2hvdHNwb3QvaW1hZ2UnO1xuXG5Lb252YS5pc0Jyb3dzZXIgPSBmYWxzZTtcblxuZGVzY3JpYmUoJ0ltYWdlJywgKCkgPT4ge1xuICBsZXQgd3JhcHBlcjtcblxuICBjb25zdCBta1dyYXBwZXIgPSAob3B0cyA9IHt9KSA9PiB7XG4gICAgb3B0cyA9IF8uZXh0ZW5kKFxuICAgICAge1xuICAgICAgICB4OiA1LFxuICAgICAgICB5OiA1LFxuICAgICAgICBzcmM6ICcnLFxuICAgICAgICB0b29sdGlwOiBudWxsXG4gICAgICB9LFxuICAgICAgb3B0c1xuICAgICk7XG5cbiAgICByZXR1cm4gc2hhbGxvdyg8SW1hZ2Ugey4uLm9wdHN9IC8+KTtcbiAgfTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICB3cmFwcGVyID0gbWtXcmFwcGVyKCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzbmFwc2hvdHMnLCAoKSA9PiB7XG4gICAgZGVzY3JpYmUoJ3ggeSBwb3NpdGlvbicsICgpID0+IHtcbiAgICAgIGl0KCdyZW5kZXJzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB3cmFwcGVyID0gbWtXcmFwcGVyKHsgeDogMTAsIHk6IDEwIH0pO1xuICAgICAgICBleHBlY3QodG9Kc29uKHdyYXBwZXIpKS50b01hdGNoU25hcHNob3QoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2ltYWdlJywgKCkgPT4ge1xuICAgICAgaXQoJ3JlbmRlcnMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHdyYXBwZXIgPSBta1dyYXBwZXIoeyBzcmM6ICdodHRwczovL3BpY3N1bS5waG90b3MvaWQvMTAyLzIwMC8zMDAnIH0pO1xuICAgICAgICBleHBlY3QodG9Kc29uKHdyYXBwZXIpKS50b01hdGNoU25hcHNob3QoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3Rvb2x0aXAnLCAoKSA9PiB7XG4gICAgICBpdCgncmVuZGVycycsICgpID0+IHtcbiAgICAgICAgY29uc3Qgd3JhcHBlciA9IG1rV3JhcHBlcih7IHRvb2x0aXA6ICdDb3JyZWN0bHlcXG5zZWxlY3RlZCcgfSk7XG4gICAgICAgIGV4cGVjdCh0b0pzb24od3JhcHBlcikpLnRvTWF0Y2hTbmFwc2hvdCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|