@pie-element/hotspot 9.1.0 → 9.2.0-mui-update.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/CHANGELOG.md +66 -0
  2. package/configure/CHANGELOG.md +66 -0
  3. package/configure/lib/DeleteWidget.js +31 -44
  4. package/configure/lib/DeleteWidget.js.map +1 -1
  5. package/configure/lib/__tests__/DeleteWidget.test.js +60 -0
  6. package/configure/lib/__tests__/hotspot-container.test.js +377 -0
  7. package/configure/lib/__tests__/hotspot-drawable.test.js +233 -0
  8. package/configure/lib/__tests__/index.test.js +211 -0
  9. package/configure/lib/__tests__/root.test.js +440 -0
  10. package/configure/lib/__tests__/utils.test.js +287 -0
  11. package/configure/lib/button.js +27 -46
  12. package/configure/lib/button.js.map +1 -1
  13. package/configure/lib/buttons/circle.js +21 -28
  14. package/configure/lib/buttons/circle.js.map +1 -1
  15. package/configure/lib/buttons/polygon.js +27 -34
  16. package/configure/lib/buttons/polygon.js.map +1 -1
  17. package/configure/lib/buttons/rectangle.js +27 -34
  18. package/configure/lib/buttons/rectangle.js.map +1 -1
  19. package/configure/lib/defaults.js +3 -4
  20. package/configure/lib/defaults.js.map +1 -1
  21. package/configure/lib/hotspot-circle.js +133 -199
  22. package/configure/lib/hotspot-circle.js.map +1 -1
  23. package/configure/lib/hotspot-container.js +251 -356
  24. package/configure/lib/hotspot-container.js.map +1 -1
  25. package/configure/lib/hotspot-drawable.js +361 -473
  26. package/configure/lib/hotspot-drawable.js.map +1 -1
  27. package/configure/lib/hotspot-palette.js +93 -140
  28. package/configure/lib/hotspot-palette.js.map +1 -1
  29. package/configure/lib/hotspot-polygon.js +213 -318
  30. package/configure/lib/hotspot-polygon.js.map +1 -1
  31. package/configure/lib/hotspot-rectangle.js +129 -193
  32. package/configure/lib/hotspot-rectangle.js.map +1 -1
  33. package/configure/lib/icons.js +1 -1
  34. package/configure/lib/icons.js.map +1 -1
  35. package/configure/lib/image-konva.js +47 -87
  36. package/configure/lib/image-konva.js.map +1 -1
  37. package/configure/lib/index.js +163 -223
  38. package/configure/lib/index.js.map +1 -1
  39. package/configure/lib/root.js +302 -394
  40. package/configure/lib/root.js.map +1 -1
  41. package/configure/lib/shapes/circle.js +70 -102
  42. package/configure/lib/shapes/circle.js.map +1 -1
  43. package/configure/lib/shapes/index.js +5 -13
  44. package/configure/lib/shapes/index.js.map +1 -1
  45. package/configure/lib/shapes/polygon.js +65 -97
  46. package/configure/lib/shapes/polygon.js.map +1 -1
  47. package/configure/lib/shapes/rectagle.js +70 -102
  48. package/configure/lib/shapes/rectagle.js.map +1 -1
  49. package/configure/lib/shapes/utils.js +3 -9
  50. package/configure/lib/shapes/utils.js.map +1 -1
  51. package/configure/lib/upload-control.js +26 -53
  52. package/configure/lib/upload-control.js.map +1 -1
  53. package/configure/lib/utils.js +85 -138
  54. package/configure/lib/utils.js.map +1 -1
  55. package/configure/package.json +11 -10
  56. package/configure/src/__tests__/index.test.js +11 -5
  57. package/configure/src/button.jsx +12 -20
  58. package/configure/src/hotspot-circle.jsx +5 -18
  59. package/configure/src/hotspot-container.jsx +82 -98
  60. package/configure/src/hotspot-drawable.jsx +43 -45
  61. package/configure/src/hotspot-palette.jsx +45 -37
  62. package/configure/src/hotspot-polygon.jsx +4 -20
  63. package/configure/src/hotspot-rectangle.jsx +4 -17
  64. package/configure/src/index.js +12 -2
  65. package/configure/src/root.jsx +85 -79
  66. package/configure/src/upload-control.jsx +6 -16
  67. package/controller/CHANGELOG.md +52 -0
  68. package/controller/lib/__tests__/index.test.js +586 -0
  69. package/controller/lib/__tests__/utils.test.js +8 -0
  70. package/controller/lib/defaults.js +3 -4
  71. package/controller/lib/defaults.js.map +1 -1
  72. package/controller/lib/index.js +152 -206
  73. package/controller/lib/index.js.map +1 -1
  74. package/controller/lib/utils.js +15 -35
  75. package/controller/lib/utils.js.map +1 -1
  76. package/controller/package.json +2 -2
  77. package/docs/demo/pie.manifest.json +11 -0
  78. package/lib/__tests__/container.test.js +221 -0
  79. package/lib/__tests__/index.test.js +113 -0
  80. package/lib/__tests__/polygon.test.js +245 -0
  81. package/lib/__tests__/rectangle.test.js +236 -0
  82. package/lib/__tests__/session-updater.test.js +69 -0
  83. package/lib/hotspot/circle.js +111 -170
  84. package/lib/hotspot/circle.js.map +1 -1
  85. package/lib/hotspot/container.js +175 -261
  86. package/lib/hotspot/container.js.map +1 -1
  87. package/lib/hotspot/icons.js +1 -1
  88. package/lib/hotspot/icons.js.map +1 -1
  89. package/lib/hotspot/image-konva-tooltip.js +66 -113
  90. package/lib/hotspot/image-konva-tooltip.js.map +1 -1
  91. package/lib/hotspot/index.js +136 -199
  92. package/lib/hotspot/index.js.map +1 -1
  93. package/lib/hotspot/polygon.js +151 -215
  94. package/lib/hotspot/polygon.js.map +1 -1
  95. package/lib/hotspot/rectangle.js +130 -186
  96. package/lib/hotspot/rectangle.js.map +1 -1
  97. package/lib/index.js +188 -257
  98. package/lib/index.js.map +1 -1
  99. package/lib/session-updater.js +13 -19
  100. package/lib/session-updater.js.map +1 -1
  101. package/package.json +14 -11
  102. package/src/hotspot/circle.jsx +2 -13
  103. package/src/hotspot/container.jsx +35 -50
  104. package/src/hotspot/index.jsx +16 -28
  105. package/src/hotspot/polygon.jsx +4 -13
  106. package/src/hotspot/rectangle.jsx +4 -13
  107. package/src/index.js +21 -12
  108. package/LICENSE.md +0 -5
  109. package/configure/node_modules/debug/CHANGELOG.md +0 -395
  110. package/configure/node_modules/debug/LICENSE +0 -19
  111. package/configure/node_modules/debug/README.md +0 -437
  112. package/configure/node_modules/debug/node.js +0 -1
  113. package/configure/node_modules/debug/package.json +0 -51
  114. package/configure/node_modules/debug/src/browser.js +0 -180
  115. package/configure/node_modules/debug/src/common.js +0 -249
  116. package/configure/node_modules/debug/src/index.js +0 -12
  117. package/configure/node_modules/debug/src/node.js +0 -177
@@ -3,8 +3,8 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports["default"] = void 0;
7
- var _default = {
6
+ exports.default = void 0;
7
+ var _default = exports.default = {
8
8
  dimensions: {
9
9
  height: 0,
10
10
  width: 0
@@ -30,5 +30,4 @@ var _default = {
30
30
  teacherInstructionsEnabled: true,
31
31
  toolbarEditorPosition: 'bottom'
32
32
  };
33
- exports["default"] = _default;
34
- //# sourceMappingURL=defaults.js.map
33
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkaW1lbnNpb25zIiwiaGVpZ2h0Iiwid2lkdGgiLCJob3RzcG90Q29sb3IiLCJob3RzcG90TGlzdCIsImltYWdlVXJsIiwibXVsdGlwbGVDb3JyZWN0Iiwib3V0bGluZUNvbG9yIiwib3V0bGluZUxpc3QiLCJwYXJ0aWFsU2NvcmluZyIsInByb21wdCIsInByb21wdEVuYWJsZWQiLCJyYXRpb25hbGVFbmFibGVkIiwic2hhcGVzIiwicmVjdGFuZ2xlcyIsInBvbHlnb25zIiwiY2lyY2xlcyIsInN0cm9rZVdpZHRoIiwic3R1ZGVudEluc3RydWN0aW9uc0VuYWJsZWQiLCJ0ZWFjaGVySW5zdHJ1Y3Rpb25zIiwidGVhY2hlckluc3RydWN0aW9uc0VuYWJsZWQiLCJ0b29sYmFyRWRpdG9yUG9zaXRpb24iXSwic291cmNlcyI6WyIuLi9zcmMvZGVmYXVsdHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQge1xuICBkaW1lbnNpb25zOiB7IGhlaWdodDogMCwgd2lkdGg6IDAgfSxcbiAgaG90c3BvdENvbG9yOiAncmdiYSgxMzcsIDE4MywgMjQ0LCAwLjI1KScsXG4gIGhvdHNwb3RMaXN0OiBbJ3JnYmEoMTM3LCAxODMsIDI0NCwgMC4yNSknXSxcbiAgaW1hZ2VVcmw6ICcnLFxuICBtdWx0aXBsZUNvcnJlY3Q6IHRydWUsXG4gIG91dGxpbmVDb2xvcjogJ2JsdWUnLFxuICBvdXRsaW5lTGlzdDogWydibHVlJ10sXG4gIHBhcnRpYWxTY29yaW5nOiBmYWxzZSxcbiAgcHJvbXB0OiAnJyxcbiAgcHJvbXB0RW5hYmxlZDogdHJ1ZSxcbiAgcmF0aW9uYWxlRW5hYmxlZDogdHJ1ZSxcbiAgc2hhcGVzOiB7IHJlY3RhbmdsZXM6IFtdLCBwb2x5Z29uczogW10sIGNpcmNsZXM6IFtdIH0sXG4gIHN0cm9rZVdpZHRoOiA1LFxuICBzdHVkZW50SW5zdHJ1Y3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgdGVhY2hlckluc3RydWN0aW9uczogJycsXG4gIHRlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkOiB0cnVlLFxuICB0b29sYmFyRWRpdG9yUG9zaXRpb246ICdib3R0b20nLFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O2lDQUFlO0VBQ2JBLFVBQVUsRUFBRTtJQUFFQyxNQUFNLEVBQUUsQ0FBQztJQUFFQyxLQUFLLEVBQUU7RUFBRSxDQUFDO0VBQ25DQyxZQUFZLEVBQUUsMkJBQTJCO0VBQ3pDQyxXQUFXLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQztFQUMxQ0MsUUFBUSxFQUFFLEVBQUU7RUFDWkMsZUFBZSxFQUFFLElBQUk7RUFDckJDLFlBQVksRUFBRSxNQUFNO0VBQ3BCQyxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUM7RUFDckJDLGNBQWMsRUFBRSxLQUFLO0VBQ3JCQyxNQUFNLEVBQUUsRUFBRTtFQUNWQyxhQUFhLEVBQUUsSUFBSTtFQUNuQkMsZ0JBQWdCLEVBQUUsSUFBSTtFQUN0QkMsTUFBTSxFQUFFO0lBQUVDLFVBQVUsRUFBRSxFQUFFO0lBQUVDLFFBQVEsRUFBRSxFQUFFO0lBQUVDLE9BQU8sRUFBRTtFQUFHLENBQUM7RUFDckRDLFdBQVcsRUFBRSxDQUFDO0VBQ2RDLDBCQUEwQixFQUFFLElBQUk7RUFDaENDLG1CQUFtQixFQUFFLEVBQUU7RUFDdkJDLDBCQUEwQixFQUFFLElBQUk7RUFDaENDLHFCQUFxQixFQUFFO0FBQ3pCLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/defaults.js"],"names":["dimensions","height","width","hotspotColor","hotspotList","imageUrl","multipleCorrect","outlineColor","outlineList","partialScoring","prompt","promptEnabled","rationaleEnabled","shapes","rectangles","polygons","circles","strokeWidth","studentInstructionsEnabled","teacherInstructions","teacherInstructionsEnabled","toolbarEditorPosition"],"mappings":";;;;;;eAAe;AACbA,EAAAA,UAAU,EAAE;AAAEC,IAAAA,MAAM,EAAE,CAAV;AAAaC,IAAAA,KAAK,EAAE;AAApB,GADC;AAEbC,EAAAA,YAAY,EAAE,2BAFD;AAGbC,EAAAA,WAAW,EAAE,CAAC,2BAAD,CAHA;AAIbC,EAAAA,QAAQ,EAAE,EAJG;AAKbC,EAAAA,eAAe,EAAE,IALJ;AAMbC,EAAAA,YAAY,EAAE,MAND;AAObC,EAAAA,WAAW,EAAE,CAAC,MAAD,CAPA;AAQbC,EAAAA,cAAc,EAAE,KARH;AASbC,EAAAA,MAAM,EAAE,EATK;AAUbC,EAAAA,aAAa,EAAE,IAVF;AAWbC,EAAAA,gBAAgB,EAAE,IAXL;AAYbC,EAAAA,MAAM,EAAE;AAAEC,IAAAA,UAAU,EAAE,EAAd;AAAkBC,IAAAA,QAAQ,EAAE,EAA5B;AAAgCC,IAAAA,OAAO,EAAE;AAAzC,GAZK;AAabC,EAAAA,WAAW,EAAE,CAbA;AAcbC,EAAAA,0BAA0B,EAAE,IAdf;AAebC,EAAAA,mBAAmB,EAAE,EAfR;AAgBbC,EAAAA,0BAA0B,EAAE,IAhBf;AAiBbC,EAAAA,qBAAqB,EAAE;AAjBV,C","sourcesContent":["export default {\n dimensions: { height: 0, width: 0 },\n hotspotColor: 'rgba(137, 183, 244, 0.25)',\n hotspotList: ['rgba(137, 183, 244, 0.25)'],\n imageUrl: '',\n multipleCorrect: true,\n outlineColor: 'blue',\n outlineList: ['blue'],\n partialScoring: false,\n prompt: '',\n promptEnabled: true,\n rationaleEnabled: true,\n shapes: { rectangles: [], polygons: [], circles: [] },\n strokeWidth: 5,\n studentInstructionsEnabled: true,\n teacherInstructions: '',\n teacherInstructionsEnabled: true,\n toolbarEditorPosition: 'bottom',\n};\n"],"file":"defaults.js"}
1
+ {"version":3,"file":"defaults.js","names":["dimensions","height","width","hotspotColor","hotspotList","imageUrl","multipleCorrect","outlineColor","outlineList","partialScoring","prompt","promptEnabled","rationaleEnabled","shapes","rectangles","polygons","circles","strokeWidth","studentInstructionsEnabled","teacherInstructions","teacherInstructionsEnabled","toolbarEditorPosition"],"sources":["../src/defaults.js"],"sourcesContent":["export default {\n dimensions: { height: 0, width: 0 },\n hotspotColor: 'rgba(137, 183, 244, 0.25)',\n hotspotList: ['rgba(137, 183, 244, 0.25)'],\n imageUrl: '',\n multipleCorrect: true,\n outlineColor: 'blue',\n outlineList: ['blue'],\n partialScoring: false,\n prompt: '',\n promptEnabled: true,\n rationaleEnabled: true,\n shapes: { rectangles: [], polygons: [], circles: [] },\n strokeWidth: 5,\n studentInstructionsEnabled: true,\n teacherInstructions: '',\n teacherInstructionsEnabled: true,\n toolbarEditorPosition: 'bottom',\n};\n"],"mappings":";;;;;;iCAAe;EACbA,UAAU,EAAE;IAAEC,MAAM,EAAE,CAAC;IAAEC,KAAK,EAAE;EAAE,CAAC;EACnCC,YAAY,EAAE,2BAA2B;EACzCC,WAAW,EAAE,CAAC,2BAA2B,CAAC;EAC1CC,QAAQ,EAAE,EAAE;EACZC,eAAe,EAAE,IAAI;EACrBC,YAAY,EAAE,MAAM;EACpBC,WAAW,EAAE,CAAC,MAAM,CAAC;EACrBC,cAAc,EAAE,KAAK;EACrBC,MAAM,EAAE,EAAE;EACVC,aAAa,EAAE,IAAI;EACnBC,gBAAgB,EAAE,IAAI;EACtBC,MAAM,EAAE;IAAEC,UAAU,EAAE,EAAE;IAAEC,QAAQ,EAAE,EAAE;IAAEC,OAAO,EAAE;EAAG,CAAC;EACrDC,WAAW,EAAE,CAAC;EACdC,0BAA0B,EAAE,IAAI;EAChCC,mBAAmB,EAAE,EAAE;EACvBC,0BAA0B,EAAE,IAAI;EAChCC,qBAAqB,EAAE;AACzB,CAAC","ignoreList":[]}
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
@@ -10,113 +9,98 @@ exports.model = model;
10
9
  exports.normalize = void 0;
11
10
  exports.outcome = outcome;
12
11
  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
12
  var _debug = _interopRequireDefault(require("debug"));
21
-
22
13
  var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
23
-
24
14
  var _controllerUtils = require("@pie-lib/controller-utils");
25
-
26
15
  var _utils = require("./utils");
27
-
28
16
  var _defaults = _interopRequireDefault(require("./defaults"));
29
-
30
- var _excluded = ["index", "correct"],
31
- _excluded2 = ["index", "correct"],
32
- _excluded3 = ["index", "correct"];
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
-
17
+ const log = (0, _debug.default)('pie-elements:hotspot:controller');
18
+ const normalize = question => ({
19
+ ..._defaults.default,
20
+ ...question
21
+ });
44
22
  exports.normalize = normalize;
45
-
46
23
  function model(question, session, env) {
47
- var normalizedQuestion = normalize(question);
48
- var imageUrl = normalizedQuestion.imageUrl,
49
- dimensions = normalizedQuestion.dimensions,
50
- hotspotColor = normalizedQuestion.hotspotColor,
51
- hoverOutlineColor = normalizedQuestion.hoverOutlineColor,
52
- selectedHotspotColor = normalizedQuestion.selectedHotspotColor,
53
- multipleCorrect = normalizedQuestion.multipleCorrect,
54
- outlineColor = normalizedQuestion.outlineColor,
55
- partialScoring = normalizedQuestion.partialScoring,
56
- prompt = normalizedQuestion.prompt,
57
- shapes = normalizedQuestion.shapes,
58
- language = normalizedQuestion.language,
59
- fontSizeFactor = normalizedQuestion.fontSizeFactor,
60
- autoplayAudioEnabled = normalizedQuestion.autoplayAudioEnabled,
61
- completeAudioEnabled = normalizedQuestion.completeAudioEnabled,
62
- customAudioButton = normalizedQuestion.customAudioButton;
63
-
64
- var _ref = shapes || {},
65
- rectangles = _ref.rectangles,
66
- polygons = _ref.polygons,
67
- circles = _ref.circles;
68
-
69
- var shouldIncludeCorrectResponse = env.mode === 'evaluate' || env.role === 'instructor' && env.mode === 'view';
70
- return new Promise(function (resolve) {
71
- var out = {
24
+ const normalizedQuestion = normalize(question);
25
+ const {
26
+ imageUrl,
27
+ dimensions,
28
+ hotspotColor,
29
+ hoverOutlineColor,
30
+ selectedHotspotColor,
31
+ multipleCorrect,
32
+ outlineColor,
33
+ partialScoring,
34
+ prompt,
35
+ shapes,
36
+ language,
37
+ fontSizeFactor,
38
+ autoplayAudioEnabled,
39
+ completeAudioEnabled,
40
+ customAudioButton
41
+ } = normalizedQuestion;
42
+ const {
43
+ rectangles,
44
+ polygons,
45
+ circles
46
+ } = shapes || {};
47
+ const shouldIncludeCorrectResponse = env.mode === 'evaluate' || env.role === 'instructor' && env.mode === 'view';
48
+ return new Promise(resolve => {
49
+ const out = {
72
50
  disabled: env.mode !== 'gather',
73
51
  mode: env.mode,
74
- dimensions: dimensions,
75
- imageUrl: imageUrl,
76
- outlineColor: outlineColor,
77
- hotspotColor: hotspotColor,
78
- hoverOutlineColor: hoverOutlineColor,
79
- selectedHotspotColor: selectedHotspotColor,
80
- multipleCorrect: multipleCorrect,
81
- partialScoring: partialScoring,
82
- language: language,
83
- fontSizeFactor: fontSizeFactor,
84
- autoplayAudioEnabled: autoplayAudioEnabled,
85
- completeAudioEnabled: completeAudioEnabled,
86
- customAudioButton: customAudioButton,
87
- shapes: _objectSpread(_objectSpread({}, shapes), {}, {
52
+ dimensions,
53
+ imageUrl,
54
+ outlineColor,
55
+ hotspotColor,
56
+ hoverOutlineColor,
57
+ selectedHotspotColor,
58
+ multipleCorrect,
59
+ partialScoring,
60
+ language,
61
+ fontSizeFactor,
62
+ autoplayAudioEnabled,
63
+ completeAudioEnabled,
64
+ customAudioButton,
65
+ shapes: {
66
+ ...shapes,
88
67
  // eslint-disable-next-line no-unused-vars
89
- rectangles: (rectangles || []).map(function (_ref2) {
90
- var index = _ref2.index,
91
- correct = _ref2.correct,
92
- rectProps = (0, _objectWithoutProperties2["default"])(_ref2, _excluded);
93
- return shouldIncludeCorrectResponse ? _objectSpread({
94
- correct: correct
95
- }, rectProps) : _objectSpread({}, rectProps);
68
+ rectangles: (rectangles || []).map(({
69
+ index,
70
+ correct,
71
+ ...rectProps
72
+ }) => shouldIncludeCorrectResponse ? {
73
+ correct,
74
+ ...rectProps
75
+ } : {
76
+ ...rectProps
96
77
  }),
97
78
  // eslint-disable-next-line no-unused-vars
98
- polygons: (polygons || []).map(function (_ref3) {
99
- var index = _ref3.index,
100
- correct = _ref3.correct,
101
- polyProps = (0, _objectWithoutProperties2["default"])(_ref3, _excluded2);
102
- return shouldIncludeCorrectResponse ? _objectSpread({
103
- correct: correct
104
- }, polyProps) : _objectSpread({}, polyProps);
79
+ polygons: (polygons || []).map(({
80
+ index,
81
+ correct,
82
+ ...polyProps
83
+ }) => shouldIncludeCorrectResponse ? {
84
+ correct,
85
+ ...polyProps
86
+ } : {
87
+ ...polyProps
105
88
  }),
106
89
  // eslint-disable-next-line no-unused-vars
107
- circles: (circles || []).map(function (_ref4) {
108
- var index = _ref4.index,
109
- correct = _ref4.correct,
110
- circleProps = (0, _objectWithoutProperties2["default"])(_ref4, _excluded3);
111
- return shouldIncludeCorrectResponse ? _objectSpread({
112
- correct: correct
113
- }, circleProps) : _objectSpread({}, circleProps);
90
+ circles: (circles || []).map(({
91
+ index,
92
+ correct,
93
+ ...circleProps
94
+ }) => shouldIncludeCorrectResponse ? {
95
+ correct,
96
+ ...circleProps
97
+ } : {
98
+ ...circleProps
114
99
  })
115
- }),
100
+ },
116
101
  responseCorrect: env.mode === 'evaluate' ? (0, _utils.isResponseCorrect)(normalizedQuestion, session) : undefined,
117
102
  extraCSSRules: normalizedQuestion.extraCSSRules
118
103
  };
119
-
120
104
  if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {
121
105
  out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;
122
106
  out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled ? normalizedQuestion.teacherInstructions : null;
@@ -124,89 +108,68 @@ function model(question, session, env) {
124
108
  out.rationale = null;
125
109
  out.teacherInstructions = null;
126
110
  }
127
-
128
111
  out.prompt = normalizedQuestion.promptEnabled ? prompt : null;
129
112
  out.strokeWidth = normalizedQuestion.strokeWidth;
130
113
  resolve(out);
131
114
  });
132
115
  }
133
-
134
- var createDefaultModel = function createDefaultModel() {
135
- var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
136
- return new Promise(function (resolve) {
137
- resolve(_objectSpread(_objectSpread({}, _defaults["default"]), model));
116
+ const createDefaultModel = (model = {}) => new Promise(resolve => {
117
+ resolve({
118
+ ..._defaults.default,
119
+ ...model
138
120
  });
139
- };
140
-
121
+ });
141
122
  exports.createDefaultModel = createDefaultModel;
142
-
143
- var getScore = function getScore(config, session) {
144
- var env = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
145
-
146
- var _ref5 = session || {},
147
- answers = _ref5.answers;
148
-
123
+ const getScore = (config, session, env = {}) => {
124
+ const {
125
+ answers
126
+ } = session || {};
149
127
  if (!config.shapes || !config.shapes.rectangles && !config.shapes.polygons && !config.shapes.circles) {
150
128
  return 0;
151
129
  }
152
-
153
- var _config$shapes = config.shapes;
154
- _config$shapes = _config$shapes === void 0 ? {} : _config$shapes;
155
- var _config$shapes$rectan = _config$shapes.rectangles,
156
- rectangles = _config$shapes$rectan === void 0 ? [] : _config$shapes$rectan,
157
- _config$shapes$polygo = _config$shapes.polygons,
158
- polygons = _config$shapes$polygo === void 0 ? [] : _config$shapes$polygo,
159
- _config$shapes$circle = _config$shapes.circles,
160
- circles = _config$shapes$circle === void 0 ? [] : _config$shapes$circle;
161
-
162
- var partialScoringEnabled = _controllerUtils.partialScoring.enabled(config, env);
163
-
130
+ const {
131
+ shapes: {
132
+ rectangles = [],
133
+ polygons = [],
134
+ circles = []
135
+ } = {}
136
+ } = config;
137
+ const partialScoringEnabled = _controllerUtils.partialScoring.enabled(config, env);
164
138
  if (!partialScoringEnabled) {
165
139
  return (0, _utils.isResponseCorrect)(config, session) ? 1 : 0;
166
140
  }
167
-
168
- var correctAnswers = 0;
169
- var selectedChoices = 0;
170
- var choices = [].concat((0, _toConsumableArray2["default"])(rectangles), (0, _toConsumableArray2["default"])(polygons), (0, _toConsumableArray2["default"])(circles));
171
- var correctChoices = choices.filter(function (choice) {
172
- return choice.correct;
173
- });
174
- choices.forEach(function (shape) {
175
- var selected = answers && answers.filter(function (answer) {
176
- return answer.id === shape.id;
177
- })[0];
178
- var correctlySelected = shape.correct && selected;
179
-
141
+ let correctAnswers = 0;
142
+ let selectedChoices = 0;
143
+ const choices = [...rectangles, ...polygons, ...circles];
144
+ const correctChoices = choices.filter(choice => choice.correct);
145
+ choices.forEach(shape => {
146
+ const selected = answers && answers.filter(answer => answer.id === shape.id)[0];
147
+ const correctlySelected = shape.correct && selected;
180
148
  if (selected) {
181
149
  selectedChoices += 1;
182
150
  }
183
-
184
151
  if (correctlySelected) {
185
152
  correctAnswers += 1;
186
153
  }
187
154
  });
188
- var extraAnswers = selectedChoices > correctChoices.length ? selectedChoices - correctChoices.length : 0;
189
- var total = correctChoices.length === 0 ? 1 : correctChoices.length;
190
- var str = ((correctAnswers - extraAnswers) / total).toFixed(2);
155
+ const extraAnswers = selectedChoices > correctChoices.length ? selectedChoices - correctChoices.length : 0;
156
+ const total = correctChoices.length === 0 ? 1 : correctChoices.length;
157
+ const str = ((correctAnswers - extraAnswers) / total).toFixed(2);
191
158
  return str < 0 ? 0 : parseFloat(str);
192
159
  };
193
-
194
- function outcome(config, session) {
195
- var env = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
196
- return new Promise(function (resolve) {
160
+ function outcome(config, session, env = {}) {
161
+ return new Promise(resolve => {
197
162
  log('outcome...');
198
-
199
- if (!session || (0, _isEmpty["default"])(session)) {
163
+ if (!session || (0, _isEmpty.default)(session)) {
200
164
  resolve({
201
165
  score: 0,
202
166
  empty: true
203
167
  });
204
168
  }
205
-
206
169
  if (session.answers) {
207
- var score = getScore(config, session, env);
170
+ const score = getScore(config, session, env);
208
171
  resolve({
209
- score: score
172
+ score
210
173
  });
211
174
  } else {
212
175
  resolve({
@@ -216,96 +179,79 @@ function outcome(config, session) {
216
179
  }
217
180
  });
218
181
  }
219
-
220
- var returnShapesCorrect = function returnShapesCorrect(shapes) {
221
- var answers = [];
222
- shapes.forEach(function (i) {
223
- var correct = i.correct,
224
- id = i.id;
225
-
182
+ const returnShapesCorrect = shapes => {
183
+ let answers = [];
184
+ shapes.forEach(i => {
185
+ const {
186
+ correct,
187
+ id
188
+ } = i;
226
189
  if (correct) {
227
190
  answers.push({
228
- id: id
191
+ id
229
192
  });
230
193
  }
231
194
  });
232
195
  return answers;
233
196
  };
234
-
235
- var createCorrectResponseSession = function createCorrectResponseSession(question, env) {
236
- return new Promise(function (resolve) {
197
+ const createCorrectResponseSession = (question, env) => {
198
+ return new Promise(resolve => {
237
199
  if (env.mode !== 'evaluate' && env.role === 'instructor') {
238
- var _question$shapes = question.shapes;
239
- _question$shapes = _question$shapes === void 0 ? {} : _question$shapes;
240
- var _question$shapes$rect = _question$shapes.rectangles,
241
- rectangles = _question$shapes$rect === void 0 ? [] : _question$shapes$rect,
242
- _question$shapes$circ = _question$shapes.circles,
243
- circles = _question$shapes$circ === void 0 ? [] : _question$shapes$circ,
244
- _question$shapes$poly = _question$shapes.polygons,
245
- polygons = _question$shapes$poly === void 0 ? {} : _question$shapes$poly;
246
- var rectangleCorrect = returnShapesCorrect(rectangles);
247
- var polygonsCorrect = returnShapesCorrect(polygons);
248
- var circlesCorrect = returnShapesCorrect(circles);
200
+ const {
201
+ shapes: {
202
+ rectangles = [],
203
+ circles = [],
204
+ polygons = {}
205
+ } = {}
206
+ } = question;
207
+ const rectangleCorrect = returnShapesCorrect(rectangles);
208
+ const polygonsCorrect = returnShapesCorrect(polygons);
209
+ const circlesCorrect = returnShapesCorrect(circles);
249
210
  resolve({
250
- answers: [].concat((0, _toConsumableArray2["default"])(rectangleCorrect), (0, _toConsumableArray2["default"])(polygonsCorrect), (0, _toConsumableArray2["default"])(circlesCorrect)),
211
+ answers: [...rectangleCorrect, ...polygonsCorrect, ...circlesCorrect],
251
212
  id: '1'
252
213
  });
253
214
  } else {
254
215
  resolve(null);
255
216
  }
256
217
  });
257
- }; // remove all html tags
258
-
259
-
260
- exports.createCorrectResponseSession = createCorrectResponseSession;
261
-
262
- var getInnerText = function getInnerText(html) {
263
- return (html || '').replaceAll(/<[^>]*>/g, '');
264
- }; // remove all html tags except img, iframe and source tag for audio
265
-
266
-
267
- var getContent = function getContent(html) {
268
- return (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');
269
218
  };
270
219
 
271
- var validate = function validate() {
272
- var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
273
- var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
274
- var shapes = model.shapes;
275
- var _config$minShapes = config.minShapes,
276
- minShapes = _config$minShapes === void 0 ? 2 : _config$minShapes,
277
- maxShapes = config.maxShapes,
278
- maxSelections = config.maxSelections;
279
- var errors = {};
280
- ['teacherInstructions', 'prompt', 'rationale'].forEach(function (field) {
281
- var _config$field;
282
-
283
- if ((_config$field = config[field]) !== null && _config$field !== void 0 && _config$field.required && !getContent(model[field])) {
220
+ // remove all html tags
221
+ exports.createCorrectResponseSession = createCorrectResponseSession;
222
+ const getInnerText = html => (html || '').replaceAll(/<[^>]*>/g, '');
223
+
224
+ // remove all html tags except img, iframe and source tag for audio
225
+ const getContent = html => (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');
226
+ const validate = (model = {}, config = {}) => {
227
+ const {
228
+ shapes
229
+ } = model;
230
+ const {
231
+ minShapes = 2,
232
+ maxShapes,
233
+ maxSelections
234
+ } = config;
235
+ const errors = {};
236
+ ['teacherInstructions', 'prompt', 'rationale'].forEach(field => {
237
+ if (config[field]?.required && !getContent(model[field])) {
284
238
  errors[field] = 'This field is required.';
285
239
  }
286
240
  });
287
- var allShapes = Object.values(shapes || {}).reduce(function (acc, shape) {
288
- return [].concat((0, _toConsumableArray2["default"])(acc), (0, _toConsumableArray2["default"])(shape));
289
- }, []);
290
- var nbOfSelections = (allShapes || []).reduce(function (acc, shape) {
291
- return shape.correct ? acc + 1 : acc;
292
- }, 0);
293
- var nbOfShapes = (allShapes || []).length;
294
-
241
+ const allShapes = Object.values(shapes || {}).reduce((acc, shape) => [...acc, ...shape], []);
242
+ const nbOfSelections = (allShapes || []).reduce((acc, shape) => shape.correct ? acc + 1 : acc, 0);
243
+ const nbOfShapes = (allShapes || []).length;
295
244
  if (nbOfShapes < minShapes) {
296
- errors.shapes = "There should be at least ".concat(minShapes, " shapes defined.");
245
+ errors.shapes = `There should be at least ${minShapes} shapes defined.`;
297
246
  } else if (nbOfShapes > maxShapes) {
298
- errors.shapes = "No more than ".concat(maxShapes, " shapes should be defined.");
247
+ errors.shapes = `No more than ${maxShapes} shapes should be defined.`;
299
248
  }
300
-
301
249
  if (nbOfSelections < 1) {
302
250
  errors.selections = 'There should be at least 1 shape selected.';
303
251
  } else if (nbOfSelections > maxSelections) {
304
- errors.selections = "No more than ".concat(maxSelections, " shapes should be selected.");
252
+ errors.selections = `No more than ${maxSelections} shapes should be selected.`;
305
253
  }
306
-
307
254
  return errors;
308
255
  };
309
-
310
256
  exports.validate = validate;
311
- //# sourceMappingURL=index.js.map
257
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGVidWciLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9pc0VtcHR5IiwiX2NvbnRyb2xsZXJVdGlscyIsIl91dGlscyIsIl9kZWZhdWx0cyIsImxvZyIsImRlYnVnIiwibm9ybWFsaXplIiwicXVlc3Rpb24iLCJkZWZhdWx0cyIsImV4cG9ydHMiLCJtb2RlbCIsInNlc3Npb24iLCJlbnYiLCJub3JtYWxpemVkUXVlc3Rpb24iLCJpbWFnZVVybCIsImRpbWVuc2lvbnMiLCJob3RzcG90Q29sb3IiLCJob3Zlck91dGxpbmVDb2xvciIsInNlbGVjdGVkSG90c3BvdENvbG9yIiwibXVsdGlwbGVDb3JyZWN0Iiwib3V0bGluZUNvbG9yIiwicGFydGlhbFNjb3JpbmciLCJwcm9tcHQiLCJzaGFwZXMiLCJsYW5ndWFnZSIsImZvbnRTaXplRmFjdG9yIiwiYXV0b3BsYXlBdWRpb0VuYWJsZWQiLCJjb21wbGV0ZUF1ZGlvRW5hYmxlZCIsImN1c3RvbUF1ZGlvQnV0dG9uIiwicmVjdGFuZ2xlcyIsInBvbHlnb25zIiwiY2lyY2xlcyIsInNob3VsZEluY2x1ZGVDb3JyZWN0UmVzcG9uc2UiLCJtb2RlIiwicm9sZSIsIlByb21pc2UiLCJyZXNvbHZlIiwib3V0IiwiZGlzYWJsZWQiLCJtYXAiLCJpbmRleCIsImNvcnJlY3QiLCJyZWN0UHJvcHMiLCJwb2x5UHJvcHMiLCJjaXJjbGVQcm9wcyIsInJlc3BvbnNlQ29ycmVjdCIsImlzUmVzcG9uc2VDb3JyZWN0IiwidW5kZWZpbmVkIiwiZXh0cmFDU1NSdWxlcyIsInJhdGlvbmFsZSIsInJhdGlvbmFsZUVuYWJsZWQiLCJ0ZWFjaGVySW5zdHJ1Y3Rpb25zIiwidGVhY2hlckluc3RydWN0aW9uc0VuYWJsZWQiLCJwcm9tcHRFbmFibGVkIiwic3Ryb2tlV2lkdGgiLCJjcmVhdGVEZWZhdWx0TW9kZWwiLCJnZXRTY29yZSIsImNvbmZpZyIsImFuc3dlcnMiLCJwYXJ0aWFsU2NvcmluZ0VuYWJsZWQiLCJlbmFibGVkIiwiY29ycmVjdEFuc3dlcnMiLCJzZWxlY3RlZENob2ljZXMiLCJjaG9pY2VzIiwiY29ycmVjdENob2ljZXMiLCJmaWx0ZXIiLCJjaG9pY2UiLCJmb3JFYWNoIiwic2hhcGUiLCJzZWxlY3RlZCIsImFuc3dlciIsImlkIiwiY29ycmVjdGx5U2VsZWN0ZWQiLCJleHRyYUFuc3dlcnMiLCJsZW5ndGgiLCJ0b3RhbCIsInN0ciIsInRvRml4ZWQiLCJwYXJzZUZsb2F0Iiwib3V0Y29tZSIsImlzRW1wdHkiLCJzY29yZSIsImVtcHR5IiwicmV0dXJuU2hhcGVzQ29ycmVjdCIsImkiLCJwdXNoIiwiY3JlYXRlQ29ycmVjdFJlc3BvbnNlU2Vzc2lvbiIsInJlY3RhbmdsZUNvcnJlY3QiLCJwb2x5Z29uc0NvcnJlY3QiLCJjaXJjbGVzQ29ycmVjdCIsImdldElubmVyVGV4dCIsImh0bWwiLCJyZXBsYWNlQWxsIiwiZ2V0Q29udGVudCIsInJlcGxhY2UiLCJ2YWxpZGF0ZSIsIm1pblNoYXBlcyIsIm1heFNoYXBlcyIsIm1heFNlbGVjdGlvbnMiLCJlcnJvcnMiLCJmaWVsZCIsInJlcXVpcmVkIiwiYWxsU2hhcGVzIiwiT2JqZWN0IiwidmFsdWVzIiwicmVkdWNlIiwiYWNjIiwibmJPZlNlbGVjdGlvbnMiLCJuYk9mU2hhcGVzIiwic2VsZWN0aW9ucyJdLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IGlzRW1wdHkgZnJvbSAnbG9kYXNoL2lzRW1wdHknO1xuaW1wb3J0IHsgcGFydGlhbFNjb3JpbmcgfSBmcm9tICdAcGllLWxpYi9jb250cm9sbGVyLXV0aWxzJztcblxuaW1wb3J0IHsgaXNSZXNwb25zZUNvcnJlY3QgfSBmcm9tICcuL3V0aWxzJztcblxuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4vZGVmYXVsdHMnO1xuXG5jb25zdCBsb2cgPSBkZWJ1ZygncGllLWVsZW1lbnRzOmhvdHNwb3Q6Y29udHJvbGxlcicpO1xuXG5leHBvcnQgY29uc3Qgbm9ybWFsaXplID0gKHF1ZXN0aW9uKSA9PiAoe1xuICAuLi5kZWZhdWx0cyxcbiAgLi4ucXVlc3Rpb24sXG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIG1vZGVsKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpIHtcbiAgY29uc3Qgbm9ybWFsaXplZFF1ZXN0aW9uID0gbm9ybWFsaXplKHF1ZXN0aW9uKTtcbiAgY29uc3Qge1xuICAgIGltYWdlVXJsLFxuICAgIGRpbWVuc2lvbnMsXG4gICAgaG90c3BvdENvbG9yLFxuICAgIGhvdmVyT3V0bGluZUNvbG9yLFxuICAgIHNlbGVjdGVkSG90c3BvdENvbG9yLFxuICAgIG11bHRpcGxlQ29ycmVjdCxcbiAgICBvdXRsaW5lQ29sb3IsXG4gICAgcGFydGlhbFNjb3JpbmcsXG4gICAgcHJvbXB0LFxuICAgIHNoYXBlcyxcbiAgICBsYW5ndWFnZSxcbiAgICBmb250U2l6ZUZhY3RvcixcbiAgICBhdXRvcGxheUF1ZGlvRW5hYmxlZCxcbiAgICBjb21wbGV0ZUF1ZGlvRW5hYmxlZCxcbiAgICBjdXN0b21BdWRpb0J1dHRvbixcbiAgfSA9IG5vcm1hbGl6ZWRRdWVzdGlvbjtcbiAgY29uc3QgeyByZWN0YW5nbGVzLCBwb2x5Z29ucywgY2lyY2xlcyB9ID0gc2hhcGVzIHx8IHt9O1xuXG4gIGNvbnN0IHNob3VsZEluY2x1ZGVDb3JyZWN0UmVzcG9uc2UgPSBlbnYubW9kZSA9PT0gJ2V2YWx1YXRlJyB8fCAoZW52LnJvbGUgPT09ICdpbnN0cnVjdG9yJyAmJiBlbnYubW9kZSA9PT0gJ3ZpZXcnKTtcblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBvdXQgPSB7XG4gICAgICBkaXNhYmxlZDogZW52Lm1vZGUgIT09ICdnYXRoZXInLFxuICAgICAgbW9kZTogZW52Lm1vZGUsXG4gICAgICBkaW1lbnNpb25zLFxuICAgICAgaW1hZ2VVcmwsXG4gICAgICBvdXRsaW5lQ29sb3IsXG4gICAgICBob3RzcG90Q29sb3IsXG4gICAgICBob3Zlck91dGxpbmVDb2xvcixcbiAgICAgIHNlbGVjdGVkSG90c3BvdENvbG9yLFxuICAgICAgbXVsdGlwbGVDb3JyZWN0LFxuICAgICAgcGFydGlhbFNjb3JpbmcsXG4gICAgICBsYW5ndWFnZSxcbiAgICAgIGZvbnRTaXplRmFjdG9yLFxuICAgICAgYXV0b3BsYXlBdWRpb0VuYWJsZWQsXG4gICAgICBjb21wbGV0ZUF1ZGlvRW5hYmxlZCxcbiAgICAgIGN1c3RvbUF1ZGlvQnV0dG9uLFxuICAgICAgc2hhcGVzOiB7XG4gICAgICAgIC4uLnNoYXBlcyxcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICAgIHJlY3RhbmdsZXM6IChyZWN0YW5nbGVzIHx8IFtdKS5tYXAoKHsgaW5kZXgsIGNvcnJlY3QsIC4uLnJlY3RQcm9wcyB9KSA9PlxuICAgICAgICAgIHNob3VsZEluY2x1ZGVDb3JyZWN0UmVzcG9uc2UgPyB7IGNvcnJlY3QsIC4uLnJlY3RQcm9wcyB9IDogeyAuLi5yZWN0UHJvcHMgfSxcbiAgICAgICAgKSxcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICAgIHBvbHlnb25zOiAocG9seWdvbnMgfHwgW10pLm1hcCgoeyBpbmRleCwgY29ycmVjdCwgLi4ucG9seVByb3BzIH0pID0+XG4gICAgICAgICAgc2hvdWxkSW5jbHVkZUNvcnJlY3RSZXNwb25zZSA/IHsgY29ycmVjdCwgLi4ucG9seVByb3BzIH0gOiB7IC4uLnBvbHlQcm9wcyB9LFxuICAgICAgICApLFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgICAgY2lyY2xlczogKGNpcmNsZXMgfHwgW10pLm1hcCgoeyBpbmRleCwgY29ycmVjdCwgLi4uY2lyY2xlUHJvcHMgfSkgPT5cbiAgICAgICAgICBzaG91bGRJbmNsdWRlQ29ycmVjdFJlc3BvbnNlID8geyBjb3JyZWN0LCAuLi5jaXJjbGVQcm9wcyB9IDogeyAuLi5jaXJjbGVQcm9wcyB9LFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICAgIHJlc3BvbnNlQ29ycmVjdDogZW52Lm1vZGUgPT09ICdldmFsdWF0ZScgPyBpc1Jlc3BvbnNlQ29ycmVjdChub3JtYWxpemVkUXVlc3Rpb24sIHNlc3Npb24pIDogdW5kZWZpbmVkLFxuICAgICAgZXh0cmFDU1NSdWxlczogbm9ybWFsaXplZFF1ZXN0aW9uLmV4dHJhQ1NTUnVsZXMsXG4gICAgfTtcblxuICAgIGlmIChlbnYucm9sZSA9PT0gJ2luc3RydWN0b3InICYmIChlbnYubW9kZSA9PT0gJ3ZpZXcnIHx8IGVudi5tb2RlID09PSAnZXZhbHVhdGUnKSkge1xuICAgICAgb3V0LnJhdGlvbmFsZSA9IG5vcm1hbGl6ZWRRdWVzdGlvbi5yYXRpb25hbGVFbmFibGVkID8gbm9ybWFsaXplZFF1ZXN0aW9uLnJhdGlvbmFsZSA6IG51bGw7XG4gICAgICBvdXQudGVhY2hlckluc3RydWN0aW9ucyA9IG5vcm1hbGl6ZWRRdWVzdGlvbi50ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZFxuICAgICAgICA/IG5vcm1hbGl6ZWRRdWVzdGlvbi50ZWFjaGVySW5zdHJ1Y3Rpb25zXG4gICAgICAgIDogbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0LnJhdGlvbmFsZSA9IG51bGw7XG4gICAgICBvdXQudGVhY2hlckluc3RydWN0aW9ucyA9IG51bGw7XG4gICAgfVxuXG4gICAgb3V0LnByb21wdCA9IG5vcm1hbGl6ZWRRdWVzdGlvbi5wcm9tcHRFbmFibGVkID8gcHJvbXB0IDogbnVsbDtcbiAgICBvdXQuc3Ryb2tlV2lkdGggPSBub3JtYWxpemVkUXVlc3Rpb24uc3Ryb2tlV2lkdGg7XG5cbiAgICByZXNvbHZlKG91dCk7XG4gIH0pO1xufVxuXG5leHBvcnQgY29uc3QgY3JlYXRlRGVmYXVsdE1vZGVsID0gKG1vZGVsID0ge30pID0+XG4gIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgcmVzb2x2ZSh7XG4gICAgICAuLi5kZWZhdWx0cyxcbiAgICAgIC4uLm1vZGVsLFxuICAgIH0pO1xuICB9KTtcblxuY29uc3QgZ2V0U2NvcmUgPSAoY29uZmlnLCBzZXNzaW9uLCBlbnYgPSB7fSkgPT4ge1xuICBjb25zdCB7IGFuc3dlcnMgfSA9IHNlc3Npb24gfHwge307XG5cbiAgaWYgKCFjb25maWcuc2hhcGVzIHx8ICghY29uZmlnLnNoYXBlcy5yZWN0YW5nbGVzICYmICFjb25maWcuc2hhcGVzLnBvbHlnb25zICYmICFjb25maWcuc2hhcGVzLmNpcmNsZXMpKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBjb25zdCB7IHNoYXBlczogeyByZWN0YW5nbGVzID0gW10sIHBvbHlnb25zID0gW10sIGNpcmNsZXMgPSBbXSB9ID0ge30gfSA9IGNvbmZpZztcbiAgY29uc3QgcGFydGlhbFNjb3JpbmdFbmFibGVkID0gcGFydGlhbFNjb3JpbmcuZW5hYmxlZChjb25maWcsIGVudik7XG5cbiAgaWYgKCFwYXJ0aWFsU2NvcmluZ0VuYWJsZWQpIHtcbiAgICByZXR1cm4gaXNSZXNwb25zZUNvcnJlY3QoY29uZmlnLCBzZXNzaW9uKSA/IDEgOiAwO1xuICB9XG5cbiAgbGV0IGNvcnJlY3RBbnN3ZXJzID0gMDtcbiAgbGV0IHNlbGVjdGVkQ2hvaWNlcyA9IDA7XG5cbiAgY29uc3QgY2hvaWNlcyA9IFsuLi5yZWN0YW5nbGVzLCAuLi5wb2x5Z29ucywgLi4uY2lyY2xlc107XG5cbiAgY29uc3QgY29ycmVjdENob2ljZXMgPSBjaG9pY2VzLmZpbHRlcigoY2hvaWNlKSA9PiBjaG9pY2UuY29ycmVjdCk7XG5cbiAgY2hvaWNlcy5mb3JFYWNoKChzaGFwZSkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gYW5zd2VycyAmJiBhbnN3ZXJzLmZpbHRlcigoYW5zd2VyKSA9PiBhbnN3ZXIuaWQgPT09IHNoYXBlLmlkKVswXTtcbiAgICBjb25zdCBjb3JyZWN0bHlTZWxlY3RlZCA9IHNoYXBlLmNvcnJlY3QgJiYgc2VsZWN0ZWQ7XG5cbiAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgIHNlbGVjdGVkQ2hvaWNlcyArPSAxO1xuICAgIH1cblxuICAgIGlmIChjb3JyZWN0bHlTZWxlY3RlZCkge1xuICAgICAgY29ycmVjdEFuc3dlcnMgKz0gMTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IGV4dHJhQW5zd2VycyA9IHNlbGVjdGVkQ2hvaWNlcyA+IGNvcnJlY3RDaG9pY2VzLmxlbmd0aCA/IHNlbGVjdGVkQ2hvaWNlcyAtIGNvcnJlY3RDaG9pY2VzLmxlbmd0aCA6IDA7XG5cbiAgY29uc3QgdG90YWwgPSBjb3JyZWN0Q2hvaWNlcy5sZW5ndGggPT09IDAgPyAxIDogY29ycmVjdENob2ljZXMubGVuZ3RoO1xuICBjb25zdCBzdHIgPSAoKGNvcnJlY3RBbnN3ZXJzIC0gZXh0cmFBbnN3ZXJzKSAvIHRvdGFsKS50b0ZpeGVkKDIpO1xuXG4gIHJldHVybiBzdHIgPCAwID8gMCA6IHBhcnNlRmxvYXQoc3RyKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBvdXRjb21lKGNvbmZpZywgc2Vzc2lvbiwgZW52ID0ge30pIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgbG9nKCdvdXRjb21lLi4uJyk7XG5cbiAgICBpZiAoIXNlc3Npb24gfHwgaXNFbXB0eShzZXNzaW9uKSkge1xuICAgICAgcmVzb2x2ZSh7IHNjb3JlOiAwLCBlbXB0eTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICBpZiAoc2Vzc2lvbi5hbnN3ZXJzKSB7XG4gICAgICBjb25zdCBzY29yZSA9IGdldFNjb3JlKGNvbmZpZywgc2Vzc2lvbiwgZW52KTtcbiAgICAgIHJlc29sdmUoeyBzY29yZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzb2x2ZSh7IHNjb3JlOiAwLCBlbXB0eTogdHJ1ZSB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG5jb25zdCByZXR1cm5TaGFwZXNDb3JyZWN0ID0gKHNoYXBlcykgPT4ge1xuICBsZXQgYW5zd2VycyA9IFtdO1xuXG4gIHNoYXBlcy5mb3JFYWNoKChpKSA9PiB7XG4gICAgY29uc3QgeyBjb3JyZWN0LCBpZCB9ID0gaTtcbiAgICBpZiAoY29ycmVjdCkge1xuICAgICAgYW5zd2Vycy5wdXNoKHsgaWQgfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFuc3dlcnM7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlQ29ycmVjdFJlc3BvbnNlU2Vzc2lvbiA9IChxdWVzdGlvbiwgZW52KSA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGlmIChlbnYubW9kZSAhPT0gJ2V2YWx1YXRlJyAmJiBlbnYucm9sZSA9PT0gJ2luc3RydWN0b3InKSB7XG4gICAgICBjb25zdCB7IHNoYXBlczogeyByZWN0YW5nbGVzID0gW10sIGNpcmNsZXMgPSBbXSwgcG9seWdvbnMgPSB7fSB9ID0ge30gfSA9IHF1ZXN0aW9uO1xuXG4gICAgICBjb25zdCByZWN0YW5nbGVDb3JyZWN0ID0gcmV0dXJuU2hhcGVzQ29ycmVjdChyZWN0YW5nbGVzKTtcbiAgICAgIGNvbnN0IHBvbHlnb25zQ29ycmVjdCA9IHJldHVyblNoYXBlc0NvcnJlY3QocG9seWdvbnMpO1xuICAgICAgY29uc3QgY2lyY2xlc0NvcnJlY3QgPSByZXR1cm5TaGFwZXNDb3JyZWN0KGNpcmNsZXMpO1xuXG4gICAgICByZXNvbHZlKHtcbiAgICAgICAgYW5zd2VyczogWy4uLnJlY3RhbmdsZUNvcnJlY3QsIC4uLnBvbHlnb25zQ29ycmVjdCwgLi4uY2lyY2xlc0NvcnJlY3RdLFxuICAgICAgICBpZDogJzEnLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgfVxuICB9KTtcbn07XG5cbi8vIHJlbW92ZSBhbGwgaHRtbCB0YWdzXG5jb25zdCBnZXRJbm5lclRleHQgPSAoaHRtbCkgPT4gKGh0bWwgfHwgJycpLnJlcGxhY2VBbGwoLzxbXj5dKj4vZywgJycpO1xuXG4vLyByZW1vdmUgYWxsIGh0bWwgdGFncyBleGNlcHQgaW1nLCBpZnJhbWUgYW5kIHNvdXJjZSB0YWcgZm9yIGF1ZGlvXG5jb25zdCBnZXRDb250ZW50ID0gKGh0bWwpID0+IChodG1sIHx8ICcnKS5yZXBsYWNlKC8oPCg/IWltZ3xpZnJhbWV8c291cmNlKShbXj5dKyk+KS9naSwgJycpO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGUgPSAobW9kZWwgPSB7fSwgY29uZmlnID0ge30pID0+IHtcbiAgY29uc3QgeyBzaGFwZXMgfSA9IG1vZGVsO1xuICBjb25zdCB7IG1pblNoYXBlcyA9IDIsIG1heFNoYXBlcywgbWF4U2VsZWN0aW9ucyB9ID0gY29uZmlnO1xuICBjb25zdCBlcnJvcnMgPSB7fTtcblxuICBbJ3RlYWNoZXJJbnN0cnVjdGlvbnMnLCAncHJvbXB0JywgJ3JhdGlvbmFsZSddLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgaWYgKGNvbmZpZ1tmaWVsZF0/LnJlcXVpcmVkICYmICFnZXRDb250ZW50KG1vZGVsW2ZpZWxkXSkpIHtcbiAgICAgIGVycm9yc1tmaWVsZF0gPSAnVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4nO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgYWxsU2hhcGVzID0gT2JqZWN0LnZhbHVlcyhzaGFwZXMgfHwge30pLnJlZHVjZSgoYWNjLCBzaGFwZSkgPT4gWy4uLmFjYywgLi4uc2hhcGVdLCBbXSk7XG5cbiAgY29uc3QgbmJPZlNlbGVjdGlvbnMgPSAoYWxsU2hhcGVzIHx8IFtdKS5yZWR1Y2UoKGFjYywgc2hhcGUpID0+IChzaGFwZS5jb3JyZWN0ID8gYWNjICsgMSA6IGFjYyksIDApO1xuXG4gIGNvbnN0IG5iT2ZTaGFwZXMgPSAoYWxsU2hhcGVzIHx8IFtdKS5sZW5ndGg7XG5cbiAgaWYgKG5iT2ZTaGFwZXMgPCBtaW5TaGFwZXMpIHtcbiAgICBlcnJvcnMuc2hhcGVzID0gYFRoZXJlIHNob3VsZCBiZSBhdCBsZWFzdCAke21pblNoYXBlc30gc2hhcGVzIGRlZmluZWQuYDtcbiAgfSBlbHNlIGlmIChuYk9mU2hhcGVzID4gbWF4U2hhcGVzKSB7XG4gICAgZXJyb3JzLnNoYXBlcyA9IGBObyBtb3JlIHRoYW4gJHttYXhTaGFwZXN9IHNoYXBlcyBzaG91bGQgYmUgZGVmaW5lZC5gO1xuICB9XG5cbiAgaWYgKG5iT2ZTZWxlY3Rpb25zIDwgMSkge1xuICAgIGVycm9ycy5zZWxlY3Rpb25zID0gJ1RoZXJlIHNob3VsZCBiZSBhdCBsZWFzdCAxIHNoYXBlIHNlbGVjdGVkLic7XG4gIH0gZWxzZSBpZiAobmJPZlNlbGVjdGlvbnMgPiBtYXhTZWxlY3Rpb25zKSB7XG4gICAgZXJyb3JzLnNlbGVjdGlvbnMgPSBgTm8gbW9yZSB0aGFuICR7bWF4U2VsZWN0aW9uc30gc2hhcGVzIHNob3VsZCBiZSBzZWxlY3RlZC5gO1xuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsUUFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsZ0JBQUEsR0FBQUYsT0FBQTtBQUVBLElBQUFHLE1BQUEsR0FBQUgsT0FBQTtBQUVBLElBQUFJLFNBQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLE1BQU1LLEdBQUcsR0FBRyxJQUFBQyxjQUFLLEVBQUMsaUNBQWlDLENBQUM7QUFFN0MsTUFBTUMsU0FBUyxHQUFJQyxRQUFRLEtBQU07RUFDdEMsR0FBR0MsaUJBQVE7RUFDWCxHQUFHRDtBQUNMLENBQUMsQ0FBQztBQUFDRSxPQUFBLENBQUFILFNBQUEsR0FBQUEsU0FBQTtBQUVJLFNBQVNJLEtBQUtBLENBQUNILFFBQVEsRUFBRUksT0FBTyxFQUFFQyxHQUFHLEVBQUU7RUFDNUMsTUFBTUMsa0JBQWtCLEdBQUdQLFNBQVMsQ0FBQ0MsUUFBUSxDQUFDO0VBQzlDLE1BQU07SUFDSk8sUUFBUTtJQUNSQyxVQUFVO0lBQ1ZDLFlBQVk7SUFDWkMsaUJBQWlCO0lBQ2pCQyxvQkFBb0I7SUFDcEJDLGVBQWU7SUFDZkMsWUFBWTtJQUNaQyxjQUFjO0lBQ2RDLE1BQU07SUFDTkMsTUFBTTtJQUNOQyxRQUFRO0lBQ1JDLGNBQWM7SUFDZEMsb0JBQW9CO0lBQ3BCQyxvQkFBb0I7SUFDcEJDO0VBQ0YsQ0FBQyxHQUFHZixrQkFBa0I7RUFDdEIsTUFBTTtJQUFFZ0IsVUFBVTtJQUFFQyxRQUFRO0lBQUVDO0VBQVEsQ0FBQyxHQUFHUixNQUFNLElBQUksQ0FBQyxDQUFDO0VBRXRELE1BQU1TLDRCQUE0QixHQUFHcEIsR0FBRyxDQUFDcUIsSUFBSSxLQUFLLFVBQVUsSUFBS3JCLEdBQUcsQ0FBQ3NCLElBQUksS0FBSyxZQUFZLElBQUl0QixHQUFHLENBQUNxQixJQUFJLEtBQUssTUFBTztFQUVsSCxPQUFPLElBQUlFLE9BQU8sQ0FBRUMsT0FBTyxJQUFLO0lBQzlCLE1BQU1DLEdBQUcsR0FBRztNQUNWQyxRQUFRLEVBQUUxQixHQUFHLENBQUNxQixJQUFJLEtBQUssUUFBUTtNQUMvQkEsSUFBSSxFQUFFckIsR0FBRyxDQUFDcUIsSUFBSTtNQUNkbEIsVUFBVTtNQUNWRCxRQUFRO01BQ1JNLFlBQVk7TUFDWkosWUFBWTtNQUNaQyxpQkFBaUI7TUFDakJDLG9CQUFvQjtNQUNwQkMsZUFBZTtNQUNmRSxjQUFjO01BQ2RHLFFBQVE7TUFDUkMsY0FBYztNQUNkQyxvQkFBb0I7TUFDcEJDLG9CQUFvQjtNQUNwQkMsaUJBQWlCO01BQ2pCTCxNQUFNLEVBQUU7UUFDTixHQUFHQSxNQUFNO1FBQ1Q7UUFDQU0sVUFBVSxFQUFFLENBQUNBLFVBQVUsSUFBSSxFQUFFLEVBQUVVLEdBQUcsQ0FBQyxDQUFDO1VBQUVDLEtBQUs7VUFBRUMsT0FBTztVQUFFLEdBQUdDO1FBQVUsQ0FBQyxLQUNsRVYsNEJBQTRCLEdBQUc7VUFBRVMsT0FBTztVQUFFLEdBQUdDO1FBQVUsQ0FBQyxHQUFHO1VBQUUsR0FBR0E7UUFBVSxDQUM1RSxDQUFDO1FBQ0Q7UUFDQVosUUFBUSxFQUFFLENBQUNBLFFBQVEsSUFBSSxFQUFFLEVBQUVTLEdBQUcsQ0FBQyxDQUFDO1VBQUVDLEtBQUs7VUFBRUMsT0FBTztVQUFFLEdBQUdFO1FBQVUsQ0FBQyxLQUM5RFgsNEJBQTRCLEdBQUc7VUFBRVMsT0FBTztVQUFFLEdBQUdFO1FBQVUsQ0FBQyxHQUFHO1VBQUUsR0FBR0E7UUFBVSxDQUM1RSxDQUFDO1FBQ0Q7UUFDQVosT0FBTyxFQUFFLENBQUNBLE9BQU8sSUFBSSxFQUFFLEVBQUVRLEdBQUcsQ0FBQyxDQUFDO1VBQUVDLEtBQUs7VUFBRUMsT0FBTztVQUFFLEdBQUdHO1FBQVksQ0FBQyxLQUM5RFosNEJBQTRCLEdBQUc7VUFBRVMsT0FBTztVQUFFLEdBQUdHO1FBQVksQ0FBQyxHQUFHO1VBQUUsR0FBR0E7UUFBWSxDQUNoRjtNQUNGLENBQUM7TUFDREMsZUFBZSxFQUFFakMsR0FBRyxDQUFDcUIsSUFBSSxLQUFLLFVBQVUsR0FBRyxJQUFBYSx3QkFBaUIsRUFBQ2pDLGtCQUFrQixFQUFFRixPQUFPLENBQUMsR0FBR29DLFNBQVM7TUFDckdDLGFBQWEsRUFBRW5DLGtCQUFrQixDQUFDbUM7SUFDcEMsQ0FBQztJQUVELElBQUlwQyxHQUFHLENBQUNzQixJQUFJLEtBQUssWUFBWSxLQUFLdEIsR0FBRyxDQUFDcUIsSUFBSSxLQUFLLE1BQU0sSUFBSXJCLEdBQUcsQ0FBQ3FCLElBQUksS0FBSyxVQUFVLENBQUMsRUFBRTtNQUNqRkksR0FBRyxDQUFDWSxTQUFTLEdBQUdwQyxrQkFBa0IsQ0FBQ3FDLGdCQUFnQixHQUFHckMsa0JBQWtCLENBQUNvQyxTQUFTLEdBQUcsSUFBSTtNQUN6RlosR0FBRyxDQUFDYyxtQkFBbUIsR0FBR3RDLGtCQUFrQixDQUFDdUMsMEJBQTBCLEdBQ25FdkMsa0JBQWtCLENBQUNzQyxtQkFBbUIsR0FDdEMsSUFBSTtJQUNWLENBQUMsTUFBTTtNQUNMZCxHQUFHLENBQUNZLFNBQVMsR0FBRyxJQUFJO01BQ3BCWixHQUFHLENBQUNjLG1CQUFtQixHQUFHLElBQUk7SUFDaEM7SUFFQWQsR0FBRyxDQUFDZixNQUFNLEdBQUdULGtCQUFrQixDQUFDd0MsYUFBYSxHQUFHL0IsTUFBTSxHQUFHLElBQUk7SUFDN0RlLEdBQUcsQ0FBQ2lCLFdBQVcsR0FBR3pDLGtCQUFrQixDQUFDeUMsV0FBVztJQUVoRGxCLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDO0VBQ2QsQ0FBQyxDQUFDO0FBQ0o7QUFFTyxNQUFNa0Isa0JBQWtCLEdBQUdBLENBQUM3QyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQzNDLElBQUl5QixPQUFPLENBQUVDLE9BQU8sSUFBSztFQUN2QkEsT0FBTyxDQUFDO0lBQ04sR0FBRzVCLGlCQUFRO0lBQ1gsR0FBR0U7RUFDTCxDQUFDLENBQUM7QUFDSixDQUFDLENBQUM7QUFBQ0QsT0FBQSxDQUFBOEMsa0JBQUEsR0FBQUEsa0JBQUE7QUFFTCxNQUFNQyxRQUFRLEdBQUdBLENBQUNDLE1BQU0sRUFBRTlDLE9BQU8sRUFBRUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLO0VBQzlDLE1BQU07SUFBRThDO0VBQVEsQ0FBQyxHQUFHL0MsT0FBTyxJQUFJLENBQUMsQ0FBQztFQUVqQyxJQUFJLENBQUM4QyxNQUFNLENBQUNsQyxNQUFNLElBQUssQ0FBQ2tDLE1BQU0sQ0FBQ2xDLE1BQU0sQ0FBQ00sVUFBVSxJQUFJLENBQUM0QixNQUFNLENBQUNsQyxNQUFNLENBQUNPLFFBQVEsSUFBSSxDQUFDMkIsTUFBTSxDQUFDbEMsTUFBTSxDQUFDUSxPQUFRLEVBQUU7SUFDdEcsT0FBTyxDQUFDO0VBQ1Y7RUFFQSxNQUFNO0lBQUVSLE1BQU0sRUFBRTtNQUFFTSxVQUFVLEdBQUcsRUFBRTtNQUFFQyxRQUFRLEdBQUcsRUFBRTtNQUFFQyxPQUFPLEdBQUc7SUFBRyxDQUFDLEdBQUcsQ0FBQztFQUFFLENBQUMsR0FBRzBCLE1BQU07RUFDaEYsTUFBTUUscUJBQXFCLEdBQUd0QywrQkFBYyxDQUFDdUMsT0FBTyxDQUFDSCxNQUFNLEVBQUU3QyxHQUFHLENBQUM7RUFFakUsSUFBSSxDQUFDK0MscUJBQXFCLEVBQUU7SUFDMUIsT0FBTyxJQUFBYix3QkFBaUIsRUFBQ1csTUFBTSxFQUFFOUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7RUFDbkQ7RUFFQSxJQUFJa0QsY0FBYyxHQUFHLENBQUM7RUFDdEIsSUFBSUMsZUFBZSxHQUFHLENBQUM7RUFFdkIsTUFBTUMsT0FBTyxHQUFHLENBQUMsR0FBR2xDLFVBQVUsRUFBRSxHQUFHQyxRQUFRLEVBQUUsR0FBR0MsT0FBTyxDQUFDO0VBRXhELE1BQU1pQyxjQUFjLEdBQUdELE9BQU8sQ0FBQ0UsTUFBTSxDQUFFQyxNQUFNLElBQUtBLE1BQU0sQ0FBQ3pCLE9BQU8sQ0FBQztFQUVqRXNCLE9BQU8sQ0FBQ0ksT0FBTyxDQUFFQyxLQUFLLElBQUs7SUFDekIsTUFBTUMsUUFBUSxHQUFHWCxPQUFPLElBQUlBLE9BQU8sQ0FBQ08sTUFBTSxDQUFFSyxNQUFNLElBQUtBLE1BQU0sQ0FBQ0MsRUFBRSxLQUFLSCxLQUFLLENBQUNHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRixNQUFNQyxpQkFBaUIsR0FBR0osS0FBSyxDQUFDM0IsT0FBTyxJQUFJNEIsUUFBUTtJQUVuRCxJQUFJQSxRQUFRLEVBQUU7TUFDWlAsZUFBZSxJQUFJLENBQUM7SUFDdEI7SUFFQSxJQUFJVSxpQkFBaUIsRUFBRTtNQUNyQlgsY0FBYyxJQUFJLENBQUM7SUFDckI7RUFDRixDQUFDLENBQUM7RUFFRixNQUFNWSxZQUFZLEdBQUdYLGVBQWUsR0FBR0UsY0FBYyxDQUFDVSxNQUFNLEdBQUdaLGVBQWUsR0FBR0UsY0FBYyxDQUFDVSxNQUFNLEdBQUcsQ0FBQztFQUUxRyxNQUFNQyxLQUFLLEdBQUdYLGNBQWMsQ0FBQ1UsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUdWLGNBQWMsQ0FBQ1UsTUFBTTtFQUNyRSxNQUFNRSxHQUFHLEdBQUcsQ0FBQyxDQUFDZixjQUFjLEdBQUdZLFlBQVksSUFBSUUsS0FBSyxFQUFFRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0VBRWhFLE9BQU9ELEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHRSxVQUFVLENBQUNGLEdBQUcsQ0FBQztBQUN0QyxDQUFDO0FBRU0sU0FBU0csT0FBT0EsQ0FBQ3RCLE1BQU0sRUFBRTlDLE9BQU8sRUFBRUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFO0VBQ2pELE9BQU8sSUFBSXVCLE9BQU8sQ0FBRUMsT0FBTyxJQUFLO0lBQzlCaEMsR0FBRyxDQUFDLFlBQVksQ0FBQztJQUVqQixJQUFJLENBQUNPLE9BQU8sSUFBSSxJQUFBcUUsZ0JBQU8sRUFBQ3JFLE9BQU8sQ0FBQyxFQUFFO01BQ2hDeUIsT0FBTyxDQUFDO1FBQUU2QyxLQUFLLEVBQUUsQ0FBQztRQUFFQyxLQUFLLEVBQUU7TUFBSyxDQUFDLENBQUM7SUFDcEM7SUFFQSxJQUFJdkUsT0FBTyxDQUFDK0MsT0FBTyxFQUFFO01BQ25CLE1BQU11QixLQUFLLEdBQUd6QixRQUFRLENBQUNDLE1BQU0sRUFBRTlDLE9BQU8sRUFBRUMsR0FBRyxDQUFDO01BQzVDd0IsT0FBTyxDQUFDO1FBQUU2QztNQUFNLENBQUMsQ0FBQztJQUNwQixDQUFDLE1BQU07TUFDTDdDLE9BQU8sQ0FBQztRQUFFNkMsS0FBSyxFQUFFLENBQUM7UUFBRUMsS0FBSyxFQUFFO01BQUssQ0FBQyxDQUFDO0lBQ3BDO0VBQ0YsQ0FBQyxDQUFDO0FBQ0o7QUFFQSxNQUFNQyxtQkFBbUIsR0FBSTVELE1BQU0sSUFBSztFQUN0QyxJQUFJbUMsT0FBTyxHQUFHLEVBQUU7RUFFaEJuQyxNQUFNLENBQUM0QyxPQUFPLENBQUVpQixDQUFDLElBQUs7SUFDcEIsTUFBTTtNQUFFM0MsT0FBTztNQUFFOEI7SUFBRyxDQUFDLEdBQUdhLENBQUM7SUFDekIsSUFBSTNDLE9BQU8sRUFBRTtNQUNYaUIsT0FBTyxDQUFDMkIsSUFBSSxDQUFDO1FBQUVkO01BQUcsQ0FBQyxDQUFDO0lBQ3RCO0VBQ0YsQ0FBQyxDQUFDO0VBQ0YsT0FBT2IsT0FBTztBQUNoQixDQUFDO0FBRU0sTUFBTTRCLDRCQUE0QixHQUFHQSxDQUFDL0UsUUFBUSxFQUFFSyxHQUFHLEtBQUs7RUFDN0QsT0FBTyxJQUFJdUIsT0FBTyxDQUFFQyxPQUFPLElBQUs7SUFDOUIsSUFBSXhCLEdBQUcsQ0FBQ3FCLElBQUksS0FBSyxVQUFVLElBQUlyQixHQUFHLENBQUNzQixJQUFJLEtBQUssWUFBWSxFQUFFO01BQ3hELE1BQU07UUFBRVgsTUFBTSxFQUFFO1VBQUVNLFVBQVUsR0FBRyxFQUFFO1VBQUVFLE9BQU8sR0FBRyxFQUFFO1VBQUVELFFBQVEsR0FBRyxDQUFDO1FBQUUsQ0FBQyxHQUFHLENBQUM7TUFBRSxDQUFDLEdBQUd2QixRQUFRO01BRWxGLE1BQU1nRixnQkFBZ0IsR0FBR0osbUJBQW1CLENBQUN0RCxVQUFVLENBQUM7TUFDeEQsTUFBTTJELGVBQWUsR0FBR0wsbUJBQW1CLENBQUNyRCxRQUFRLENBQUM7TUFDckQsTUFBTTJELGNBQWMsR0FBR04sbUJBQW1CLENBQUNwRCxPQUFPLENBQUM7TUFFbkRLLE9BQU8sQ0FBQztRQUNOc0IsT0FBTyxFQUFFLENBQUMsR0FBRzZCLGdCQUFnQixFQUFFLEdBQUdDLGVBQWUsRUFBRSxHQUFHQyxjQUFjLENBQUM7UUFDckVsQixFQUFFLEVBQUU7TUFDTixDQUFDLENBQUM7SUFDSixDQUFDLE1BQU07TUFDTG5DLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDZjtFQUNGLENBQUMsQ0FBQztBQUNKLENBQUM7O0FBRUQ7QUFBQTNCLE9BQUEsQ0FBQTZFLDRCQUFBLEdBQUFBLDRCQUFBO0FBQ0EsTUFBTUksWUFBWSxHQUFJQyxJQUFJLElBQUssQ0FBQ0EsSUFBSSxJQUFJLEVBQUUsRUFBRUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7O0FBRXRFO0FBQ0EsTUFBTUMsVUFBVSxHQUFJRixJQUFJLElBQUssQ0FBQ0EsSUFBSSxJQUFJLEVBQUUsRUFBRUcsT0FBTyxDQUFDLG9DQUFvQyxFQUFFLEVBQUUsQ0FBQztBQUVwRixNQUFNQyxRQUFRLEdBQUdBLENBQUNyRixLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUrQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUs7RUFDbkQsTUFBTTtJQUFFbEM7RUFBTyxDQUFDLEdBQUdiLEtBQUs7RUFDeEIsTUFBTTtJQUFFc0YsU0FBUyxHQUFHLENBQUM7SUFBRUMsU0FBUztJQUFFQztFQUFjLENBQUMsR0FBR3pDLE1BQU07RUFDMUQsTUFBTTBDLE1BQU0sR0FBRyxDQUFDLENBQUM7RUFFakIsQ0FBQyxxQkFBcUIsRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUNoQyxPQUFPLENBQUVpQyxLQUFLLElBQUs7SUFDaEUsSUFBSTNDLE1BQU0sQ0FBQzJDLEtBQUssQ0FBQyxFQUFFQyxRQUFRLElBQUksQ0FBQ1IsVUFBVSxDQUFDbkYsS0FBSyxDQUFDMEYsS0FBSyxDQUFDLENBQUMsRUFBRTtNQUN4REQsTUFBTSxDQUFDQyxLQUFLLENBQUMsR0FBRyx5QkFBeUI7SUFDM0M7RUFDRixDQUFDLENBQUM7RUFFRixNQUFNRSxTQUFTLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDakYsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUNrRixNQUFNLENBQUMsQ0FBQ0MsR0FBRyxFQUFFdEMsS0FBSyxLQUFLLENBQUMsR0FBR3NDLEdBQUcsRUFBRSxHQUFHdEMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBRTVGLE1BQU11QyxjQUFjLEdBQUcsQ0FBQ0wsU0FBUyxJQUFJLEVBQUUsRUFBRUcsTUFBTSxDQUFDLENBQUNDLEdBQUcsRUFBRXRDLEtBQUssS0FBTUEsS0FBSyxDQUFDM0IsT0FBTyxHQUFHaUUsR0FBRyxHQUFHLENBQUMsR0FBR0EsR0FBSSxFQUFFLENBQUMsQ0FBQztFQUVuRyxNQUFNRSxVQUFVLEdBQUcsQ0FBQ04sU0FBUyxJQUFJLEVBQUUsRUFBRTVCLE1BQU07RUFFM0MsSUFBSWtDLFVBQVUsR0FBR1osU0FBUyxFQUFFO0lBQzFCRyxNQUFNLENBQUM1RSxNQUFNLEdBQUcsNEJBQTRCeUUsU0FBUyxrQkFBa0I7RUFDekUsQ0FBQyxNQUFNLElBQUlZLFVBQVUsR0FBR1gsU0FBUyxFQUFFO0lBQ2pDRSxNQUFNLENBQUM1RSxNQUFNLEdBQUcsZ0JBQWdCMEUsU0FBUyw0QkFBNEI7RUFDdkU7RUFFQSxJQUFJVSxjQUFjLEdBQUcsQ0FBQyxFQUFFO0lBQ3RCUixNQUFNLENBQUNVLFVBQVUsR0FBRyw0Q0FBNEM7RUFDbEUsQ0FBQyxNQUFNLElBQUlGLGNBQWMsR0FBR1QsYUFBYSxFQUFFO0lBQ3pDQyxNQUFNLENBQUNVLFVBQVUsR0FBRyxnQkFBZ0JYLGFBQWEsNkJBQTZCO0VBQ2hGO0VBRUEsT0FBT0MsTUFBTTtBQUNmLENBQUM7QUFBQzFGLE9BQUEsQ0FBQXNGLFFBQUEsR0FBQUEsUUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.js"],"names":["log","normalize","question","defaults","model","session","env","normalizedQuestion","imageUrl","dimensions","hotspotColor","hoverOutlineColor","selectedHotspotColor","multipleCorrect","outlineColor","partialScoring","prompt","shapes","language","fontSizeFactor","autoplayAudioEnabled","completeAudioEnabled","customAudioButton","rectangles","polygons","circles","shouldIncludeCorrectResponse","mode","role","Promise","resolve","out","disabled","map","index","correct","rectProps","polyProps","circleProps","responseCorrect","undefined","extraCSSRules","rationale","rationaleEnabled","teacherInstructions","teacherInstructionsEnabled","promptEnabled","strokeWidth","createDefaultModel","getScore","config","answers","partialScoringEnabled","enabled","correctAnswers","selectedChoices","choices","correctChoices","filter","choice","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/controller-utils';\n\nimport { isResponseCorrect } from './utils';\n\nimport defaults from './defaults';\n\nconst log = debug('pie-elements:hotspot:controller');\n\nexport const normalize = (question) => ({\n ...defaults,\n ...question,\n});\n\nexport function model(question, session, env) {\n const normalizedQuestion = normalize(question);\n const {\n imageUrl,\n dimensions,\n hotspotColor,\n hoverOutlineColor,\n selectedHotspotColor,\n multipleCorrect,\n outlineColor,\n partialScoring,\n prompt,\n shapes,\n language,\n fontSizeFactor,\n autoplayAudioEnabled,\n completeAudioEnabled,\n customAudioButton,\n } = normalizedQuestion;\n const { rectangles, polygons, circles } = shapes || {};\n\n const shouldIncludeCorrectResponse = env.mode === 'evaluate' || (env.role === 'instructor' && env.mode === 'view');\n\n return new Promise((resolve) => {\n const out = {\n disabled: env.mode !== 'gather',\n mode: env.mode,\n dimensions,\n imageUrl,\n outlineColor,\n hotspotColor,\n hoverOutlineColor,\n selectedHotspotColor,\n multipleCorrect,\n partialScoring,\n language,\n fontSizeFactor,\n autoplayAudioEnabled,\n completeAudioEnabled,\n customAudioButton,\n shapes: {\n ...shapes,\n // eslint-disable-next-line no-unused-vars\n rectangles: (rectangles || []).map(({ index, correct, ...rectProps }) =>\n shouldIncludeCorrectResponse ? { correct, ...rectProps } : { ...rectProps },\n ),\n // eslint-disable-next-line no-unused-vars\n polygons: (polygons || []).map(({ index, correct, ...polyProps }) =>\n shouldIncludeCorrectResponse ? { correct, ...polyProps } : { ...polyProps },\n ),\n // eslint-disable-next-line no-unused-vars\n circles: (circles || []).map(({ index, correct, ...circleProps }) =>\n shouldIncludeCorrectResponse ? { correct, ...circleProps } : { ...circleProps },\n ),\n },\n responseCorrect: env.mode === 'evaluate' ? isResponseCorrect(normalizedQuestion, session) : undefined,\n extraCSSRules: normalizedQuestion.extraCSSRules,\n };\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;\n out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n }\n\n out.prompt = normalizedQuestion.promptEnabled ? prompt : null;\n out.strokeWidth = normalizedQuestion.strokeWidth;\n\n resolve(out);\n });\n}\n\nexport const createDefaultModel = (model = {}) =>\n new Promise((resolve) => {\n resolve({\n ...defaults,\n ...model,\n });\n });\n\nconst getScore = (config, session, env = {}) => {\n const { answers } = session || {};\n\n if (!config.shapes || (!config.shapes.rectangles && !config.shapes.polygons && !config.shapes.circles)) {\n return 0;\n }\n\n const { shapes: { rectangles = [], polygons = [], circles = [] } = {} } = config;\n const partialScoringEnabled = partialScoring.enabled(config, env);\n\n if (!partialScoringEnabled) {\n return isResponseCorrect(config, session) ? 1 : 0;\n }\n\n let correctAnswers = 0;\n let selectedChoices = 0;\n\n const choices = [...rectangles, ...polygons, ...circles];\n\n const correctChoices = choices.filter((choice) => choice.correct);\n\n choices.forEach((shape) => {\n const selected = answers && answers.filter((answer) => answer.id === shape.id)[0];\n const correctlySelected = shape.correct && selected;\n\n if (selected) {\n selectedChoices += 1;\n }\n\n if (correctlySelected) {\n correctAnswers += 1;\n }\n });\n\n const extraAnswers = selectedChoices > correctChoices.length ? selectedChoices - correctChoices.length : 0;\n\n const total = correctChoices.length === 0 ? 1 : correctChoices.length;\n const str = ((correctAnswers - extraAnswers) / total).toFixed(2);\n\n return str < 0 ? 0 : parseFloat(str);\n};\n\nexport function outcome(config, session, env = {}) {\n return new Promise((resolve) => {\n log('outcome...');\n\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n }\n\n if (session.answers) {\n const score = getScore(config, session, env);\n resolve({ score });\n } else {\n resolve({ score: 0, empty: true });\n }\n });\n}\n\nconst returnShapesCorrect = (shapes) => {\n let answers = [];\n\n shapes.forEach((i) => {\n const { correct, id } = i;\n if (correct) {\n answers.push({ id });\n }\n });\n return answers;\n};\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { shapes: { rectangles = [], circles = [], polygons = {} } = {} } = question;\n\n const rectangleCorrect = returnShapesCorrect(rectangles);\n const polygonsCorrect = returnShapesCorrect(polygons);\n const circlesCorrect = returnShapesCorrect(circles);\n\n resolve({\n answers: [...rectangleCorrect, ...polygonsCorrect, ...circlesCorrect],\n id: '1',\n });\n } else {\n resolve(null);\n }\n });\n};\n\n// remove all html tags\nconst getInnerText = (html) => (html || '').replaceAll(/<[^>]*>/g, '');\n\n// remove all html tags except img, iframe and source tag for audio\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');\n\nexport const validate = (model = {}, config = {}) => {\n const { shapes } = model;\n const { minShapes = 2, maxShapes, maxSelections } = config;\n const errors = {};\n\n ['teacherInstructions', 'prompt', 'rationale'].forEach((field) => {\n if (config[field]?.required && !getContent(model[field])) {\n errors[field] = 'This field is required.';\n }\n });\n\n const allShapes = Object.values(shapes || {}).reduce((acc, shape) => [...acc, ...shape], []);\n\n const nbOfSelections = (allShapes || []).reduce((acc, shape) => (shape.correct ? acc + 1 : acc), 0);\n\n const nbOfShapes = (allShapes || []).length;\n\n if (nbOfShapes < minShapes) {\n errors.shapes = `There should be at least ${minShapes} shapes defined.`;\n } else if (nbOfShapes > maxShapes) {\n errors.shapes = `No more than ${maxShapes} shapes should be defined.`;\n }\n\n if (nbOfSelections < 1) {\n errors.selections = 'There should be at least 1 shape selected.';\n } else if (nbOfSelections > maxSelections) {\n errors.selections = `No more than ${maxSelections} shapes should be selected.`;\n }\n\n return errors;\n};\n"],"file":"index.js"}
1
+ {"version":3,"file":"index.js","names":["_debug","_interopRequireDefault","require","_isEmpty","_controllerUtils","_utils","_defaults","log","debug","normalize","question","defaults","exports","model","session","env","normalizedQuestion","imageUrl","dimensions","hotspotColor","hoverOutlineColor","selectedHotspotColor","multipleCorrect","outlineColor","partialScoring","prompt","shapes","language","fontSizeFactor","autoplayAudioEnabled","completeAudioEnabled","customAudioButton","rectangles","polygons","circles","shouldIncludeCorrectResponse","mode","role","Promise","resolve","out","disabled","map","index","correct","rectProps","polyProps","circleProps","responseCorrect","isResponseCorrect","undefined","extraCSSRules","rationale","rationaleEnabled","teacherInstructions","teacherInstructionsEnabled","promptEnabled","strokeWidth","createDefaultModel","getScore","config","answers","partialScoringEnabled","enabled","correctAnswers","selectedChoices","choices","correctChoices","filter","choice","forEach","shape","selected","answer","id","correctlySelected","extraAnswers","length","total","str","toFixed","parseFloat","outcome","isEmpty","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"],"sources":["../src/index.js"],"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 ...defaults,\n ...question,\n});\n\nexport function model(question, session, env) {\n const normalizedQuestion = normalize(question);\n const {\n imageUrl,\n dimensions,\n hotspotColor,\n hoverOutlineColor,\n selectedHotspotColor,\n multipleCorrect,\n outlineColor,\n partialScoring,\n prompt,\n shapes,\n language,\n fontSizeFactor,\n autoplayAudioEnabled,\n completeAudioEnabled,\n customAudioButton,\n } = normalizedQuestion;\n const { rectangles, polygons, circles } = shapes || {};\n\n const shouldIncludeCorrectResponse = env.mode === 'evaluate' || (env.role === 'instructor' && env.mode === 'view');\n\n return new Promise((resolve) => {\n const out = {\n disabled: env.mode !== 'gather',\n mode: env.mode,\n dimensions,\n imageUrl,\n outlineColor,\n hotspotColor,\n hoverOutlineColor,\n selectedHotspotColor,\n multipleCorrect,\n partialScoring,\n language,\n fontSizeFactor,\n autoplayAudioEnabled,\n completeAudioEnabled,\n customAudioButton,\n shapes: {\n ...shapes,\n // eslint-disable-next-line no-unused-vars\n rectangles: (rectangles || []).map(({ index, correct, ...rectProps }) =>\n shouldIncludeCorrectResponse ? { correct, ...rectProps } : { ...rectProps },\n ),\n // eslint-disable-next-line no-unused-vars\n polygons: (polygons || []).map(({ index, correct, ...polyProps }) =>\n shouldIncludeCorrectResponse ? { correct, ...polyProps } : { ...polyProps },\n ),\n // eslint-disable-next-line no-unused-vars\n circles: (circles || []).map(({ index, correct, ...circleProps }) =>\n shouldIncludeCorrectResponse ? { correct, ...circleProps } : { ...circleProps },\n ),\n },\n responseCorrect: env.mode === 'evaluate' ? isResponseCorrect(normalizedQuestion, session) : undefined,\n extraCSSRules: normalizedQuestion.extraCSSRules,\n };\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;\n out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n }\n\n out.prompt = normalizedQuestion.promptEnabled ? prompt : null;\n out.strokeWidth = normalizedQuestion.strokeWidth;\n\n resolve(out);\n });\n}\n\nexport const createDefaultModel = (model = {}) =>\n new Promise((resolve) => {\n resolve({\n ...defaults,\n ...model,\n });\n });\n\nconst getScore = (config, session, env = {}) => {\n const { answers } = session || {};\n\n if (!config.shapes || (!config.shapes.rectangles && !config.shapes.polygons && !config.shapes.circles)) {\n return 0;\n }\n\n const { shapes: { rectangles = [], polygons = [], circles = [] } = {} } = config;\n const partialScoringEnabled = partialScoring.enabled(config, env);\n\n if (!partialScoringEnabled) {\n return isResponseCorrect(config, session) ? 1 : 0;\n }\n\n let correctAnswers = 0;\n let selectedChoices = 0;\n\n const choices = [...rectangles, ...polygons, ...circles];\n\n const correctChoices = choices.filter((choice) => choice.correct);\n\n choices.forEach((shape) => {\n const selected = answers && answers.filter((answer) => answer.id === shape.id)[0];\n const correctlySelected = shape.correct && selected;\n\n if (selected) {\n selectedChoices += 1;\n }\n\n if (correctlySelected) {\n correctAnswers += 1;\n }\n });\n\n const extraAnswers = selectedChoices > correctChoices.length ? selectedChoices - correctChoices.length : 0;\n\n const total = correctChoices.length === 0 ? 1 : correctChoices.length;\n const str = ((correctAnswers - extraAnswers) / total).toFixed(2);\n\n return str < 0 ? 0 : parseFloat(str);\n};\n\nexport function outcome(config, session, env = {}) {\n return new Promise((resolve) => {\n log('outcome...');\n\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n }\n\n if (session.answers) {\n const score = getScore(config, session, env);\n resolve({ score });\n } else {\n resolve({ score: 0, empty: true });\n }\n });\n}\n\nconst returnShapesCorrect = (shapes) => {\n let answers = [];\n\n shapes.forEach((i) => {\n const { correct, id } = i;\n if (correct) {\n answers.push({ id });\n }\n });\n return answers;\n};\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { shapes: { rectangles = [], circles = [], polygons = {} } = {} } = question;\n\n const rectangleCorrect = returnShapesCorrect(rectangles);\n const polygonsCorrect = returnShapesCorrect(polygons);\n const circlesCorrect = returnShapesCorrect(circles);\n\n resolve({\n answers: [...rectangleCorrect, ...polygonsCorrect, ...circlesCorrect],\n id: '1',\n });\n } else {\n resolve(null);\n }\n });\n};\n\n// remove all html tags\nconst getInnerText = (html) => (html || '').replaceAll(/<[^>]*>/g, '');\n\n// remove all html tags except img, iframe and source tag for audio\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');\n\nexport const validate = (model = {}, config = {}) => {\n const { shapes } = model;\n const { minShapes = 2, maxShapes, maxSelections } = config;\n const errors = {};\n\n ['teacherInstructions', 'prompt', 'rationale'].forEach((field) => {\n if (config[field]?.required && !getContent(model[field])) {\n errors[field] = 'This field is required.';\n }\n });\n\n const allShapes = Object.values(shapes || {}).reduce((acc, shape) => [...acc, ...shape], []);\n\n const nbOfSelections = (allShapes || []).reduce((acc, shape) => (shape.correct ? acc + 1 : acc), 0);\n\n const nbOfShapes = (allShapes || []).length;\n\n if (nbOfShapes < minShapes) {\n errors.shapes = `There should be at least ${minShapes} shapes defined.`;\n } else if (nbOfShapes > maxShapes) {\n errors.shapes = `No more than ${maxShapes} shapes should be defined.`;\n }\n\n if (nbOfSelections < 1) {\n errors.selections = 'There should be at least 1 shape selected.';\n } else if (nbOfSelections > maxSelections) {\n errors.selections = `No more than ${maxSelections} shapes should be selected.`;\n }\n\n return errors;\n};\n"],"mappings":"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","ignoreList":[]}