@pie-element/select-text 6.5.24 → 6.5.26-next.2

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 (41) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/configure/CHANGELOG.md +16 -0
  3. package/configure/lib/__tests__/design.test.js +219 -0
  4. package/configure/lib/defaultConfiguration.js +6 -1
  5. package/configure/lib/defaultConfiguration.js.map +1 -1
  6. package/configure/lib/design.js +15 -7
  7. package/configure/lib/design.js.map +1 -1
  8. package/configure/lib/index.js +3 -3
  9. package/configure/lib/utils.js +3 -3
  10. package/configure/package.json +5 -5
  11. package/controller/CHANGELOG.md +8 -0
  12. package/controller/lib/__tests__/index.test.js +833 -0
  13. package/controller/lib/defaults.js +1 -1
  14. package/controller/lib/index.js +7 -5
  15. package/controller/lib/index.js.map +1 -1
  16. package/controller/package.json +2 -2
  17. package/docs/config-schema.json +16 -0
  18. package/docs/config-schema.json.md +12 -0
  19. package/docs/demo/generate.js +61 -61
  20. package/docs/demo/pie.manifest.json +11 -0
  21. package/docs/pie-schema.json +6 -0
  22. package/docs/pie-schema.json.md +4 -0
  23. package/lib/__tests__/index.test.js +91 -0
  24. package/lib/__tests__/main.test.js +83 -0
  25. package/lib/index.js +6 -3
  26. package/lib/index.js.map +1 -1
  27. package/lib/main.js +3 -3
  28. package/lib/print.js +3 -2
  29. package/lib/print.js.map +1 -1
  30. package/lib/utils.js +3 -3
  31. package/package.json +6 -6
  32. package/LICENSE.md +0 -5
  33. package/module/configure.js +0 -2727
  34. package/module/controller.js +0 -19141
  35. package/module/demo.js +0 -287
  36. package/module/element.js +0 -2518
  37. package/module/index.html +0 -21
  38. package/module/manifest.json +0 -14
  39. package/module/print-demo.js +0 -325
  40. package/module/print.html +0 -18
  41. package/module/print.js +0 -2480
@@ -29,4 +29,4 @@ var _default = {
29
29
  tokens: tokens()
30
30
  };
31
31
  exports["default"] = _default;
32
- //# sourceMappingURL=defaults.js.map
32
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kZWZhdWx0cy5qcyJdLCJuYW1lcyI6WyJ0b2tlbnMiLCJ0ZXh0Iiwic3RhcnQiLCJlbmQiLCJoaWdobGlnaHRDaG9pY2VzIiwibWF4U2VsZWN0aW9ucyIsInByb21wdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQU1BLE1BQU0sR0FBRyxTQUFUQSxNQUFTO0FBQUEsU0FBTSxDQUNuQjtBQUNFQyxJQUFBQSxJQUFJLEVBQUUsc0NBRFI7QUFFRUMsSUFBQUEsS0FBSyxFQUFFLENBRlQ7QUFHRUMsSUFBQUEsR0FBRyxFQUFFO0FBSFAsR0FEbUIsRUFNbkI7QUFDRUYsSUFBQUEsSUFBSSxFQUFFLHVDQURSO0FBRUVDLElBQUFBLEtBQUssRUFBRSxFQUZUO0FBR0VDLElBQUFBLEdBQUcsRUFBRTtBQUhQLEdBTm1CLEVBV25CO0FBQ0VGLElBQUFBLElBQUksRUFBRSwrREFEUjtBQUVFQyxJQUFBQSxLQUFLLEVBQUUsR0FGVDtBQUdFQyxJQUFBQSxHQUFHLEVBQUU7QUFIUCxHQVhtQixDQUFOO0FBQUEsQ0FBZjs7ZUFrQmU7QUFDYkMsRUFBQUEsZ0JBQWdCLEVBQUUsSUFETDtBQUViQyxFQUFBQSxhQUFhLEVBQUUsQ0FGRjtBQUdiQyxFQUFBQSxNQUFNLEVBQUUsaURBSEs7QUFJYkwsRUFBQUEsSUFBSSxFQUNGLG9MQUxXO0FBTWJELEVBQUFBLE1BQU0sRUFBRUEsTUFBTTtBQU5ELEMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCB0b2tlbnMgPSAoKSA9PiBbXG4gIHtcbiAgICB0ZXh0OiAnUmFjaGVsIGN1dCBvdXQgOCBzdGFycyBpbiA2IG1pbnV0ZXMuJyxcbiAgICBzdGFydDogMCxcbiAgICBlbmQ6IDM2LFxuICB9LFxuICB7XG4gICAgdGV4dDogJ0xvdmVsbGUgY3V0IG91dCA2IHN0YXJzIGluIDQgbWludXRlcy4nLFxuICAgIHN0YXJ0OiAzNyxcbiAgICBlbmQ6IDc0LFxuICB9LFxuICB7XG4gICAgdGV4dDogJ0xvdmVsbGUgYW5kIFJhY2hlbCBjdXQgdGhlIHNhbWUgbnVtYmVyIG9mIHN0YXJzIGluIDYgbWludXRlcy4nLFxuICAgIHN0YXJ0OiAxMTcsXG4gICAgZW5kOiAxNzdcbiAgfVxuXTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBoaWdobGlnaHRDaG9pY2VzOiB0cnVlLFxuICBtYXhTZWxlY3Rpb25zOiAyLFxuICBwcm9tcHQ6ICdXaGF0IHNlbnRlbmNlcyBjb250YWluIHRoZSBjaGFyYWN0ZXIgNiBpbiB0aGVtPycsXG4gIHRleHQ6XG4gICAgJ1JhY2hlbCBjdXQgb3V0IDggc3RhcnMgaW4gNiBtaW51dGVzLiBMb3ZlbGxlIGN1dCBvdXQgNiBzdGFycyBpbiA0IG1pbnV0ZXMuIFJhY2hlbCBjdXQgb3V0IDQgbW9yZSBzdGFycyB0aGFuIExvdmVsbGUuIExvdmVsbGUgYW5kIFJhY2hlbCBjdXQgdGhlIHNhbWUgbnVtYmVyIG9mIHN0YXJzIGluIDYgbWludXRlcy4nLFxuICB0b2tlbnM6IHRva2VucygpLFxufTtcbiJdfQ==
@@ -5,8 +5,9 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
+ exports.createCorrectResponseSession = void 0;
8
9
  exports.createDefaultModel = createDefaultModel;
9
- exports.createCorrectResponseSession = exports.model = exports.normalize = exports.normalizeSession = exports.outcome = exports.getPartialScore = exports.getCorrectness = void 0;
10
+ exports.outcome = exports.normalizeSession = exports.normalize = exports.model = exports.getPartialScore = exports.getCorrectness = void 0;
10
11
 
11
12
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
12
13
 
@@ -20,9 +21,9 @@ var _controllerUtils = require("@pie-lib/controller-utils");
20
21
 
21
22
  var _defaults = _interopRequireDefault(require("./defaults"));
22
23
 
23
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
24
+ 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; }
24
25
 
25
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
26
+ 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; }
26
27
 
27
28
  var log = (0, _debug["default"])('@pie-element:select-text:controller');
28
29
 
@@ -68,7 +69,8 @@ exports.getCorrectness = getCorrectness;
68
69
  var getCorrectSelected = function getCorrectSelected(tokens, selected) {
69
70
  return (selected || []).filter(function (s) {
70
71
  var index = tokens.findIndex(function (c) {
71
- return c.correct && (c.start === s.start && c.end === s.end || c.start === s.oldStart && c.end === s.oldEnd);
72
+ return c.correct && (c.start === s.start && c.end === s.end || // this case is used for the cases when the token's start & end were recalculated
73
+ c.start === s.oldStart && c.end === s.oldEnd);
72
74
  });
73
75
  return index !== -1;
74
76
  });
@@ -214,4 +216,4 @@ var createCorrectResponseSession = function createCorrectResponseSession(questio
214
216
  };
215
217
 
216
218
  exports.createCorrectResponseSession = createCorrectResponseSession;
217
- //# sourceMappingURL=index.js.map
219
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJsb2ciLCJidWlsZFRva2VucyIsInRva2VucyIsImV2YWx1YXRlTW9kZSIsIm1hcCIsInQiLCJPYmplY3QiLCJhc3NpZ24iLCJjb3JyZWN0IiwidW5kZWZpbmVkIiwiZ2V0Q29ycmVjdG5lc3MiLCJzZWxlY3RlZCIsImZpbHRlciIsImxlbmd0aCIsImNvcnJlY3RTZWxlY3RlZCIsImdldENvcnJlY3RTZWxlY3RlZCIsInMiLCJpbmRleCIsImZpbmRJbmRleCIsImMiLCJzdGFydCIsImVuZCIsIm9sZFN0YXJ0Iiwib2xkRW5kIiwiZ2V0Q29ycmVjdENvdW50IiwiZ2V0UGFydGlhbFNjb3JlIiwicXVlc3Rpb24iLCJzZXNzaW9uIiwidG90YWxDb3JyZWN0IiwiY29ycmVjdENvdW50Iiwic2VsZWN0ZWRUb2tlbnMiLCJjb3JyZWN0VG9rZW5zIiwiZXh0cmFTZWxlY3RlZCIsImluY29ycmVjdENvdW50IiwiY291bnQiLCJwb3NpdGl2ZUNvdW50IiwicGFyc2VGbG9hdCIsInRvRml4ZWQiLCJvdXRjb21lIiwiZW52IiwiUHJvbWlzZSIsInJlc29sdmUiLCJzY29yZSIsImVtcHR5Iiwibm9ybWFsaXplU2Vzc2lvbiIsIm1vZGUiLCJjb21wbGV0ZWQiLCJlbmFibGVkIiwicGFydGlhbFNjb3JpbmciLCJjcmVhdGVEZWZhdWx0TW9kZWwiLCJtb2RlbCIsImRlZmF1bHRzIiwibm9ybWFsaXplIiwiZmVlZGJhY2tFbmFibGVkIiwicmF0aW9uYWxlRW5hYmxlZCIsInByb21wdEVuYWJsZWQiLCJ0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZCIsInN0dWRlbnRJbnN0cnVjdGlvbnNFbmFibGVkIiwic2VsZWN0ZWRUb2tlbiIsIm5vcm1hbGl6ZWRRdWVzdGlvbiIsImNvcnJlY3RuZXNzIiwiZmIiLCJmZWVkYmFjayIsInRoZW4iLCJvdXQiLCJoaWdobGlnaHRDaG9pY2VzIiwicHJvbXB0IiwidGV4dCIsImRpc2FibGVkIiwibWF4U2VsZWN0aW9ucyIsImluY29ycmVjdCIsInJvbGUiLCJyYXRpb25hbGUiLCJ0ZWFjaGVySW5zdHJ1Y3Rpb25zIiwiY3JlYXRlQ29ycmVjdFJlc3BvbnNlU2Vzc2lvbiIsImlkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7OztBQUVBLElBQU1BLEdBQUcsR0FBRyx1QkFBTSxxQ0FBTixDQUFaOztBQUVBLElBQU1DLFdBQVcsR0FBRyxTQUFkQSxXQUFjLENBQUNDLE1BQUQsRUFBU0MsWUFBVCxFQUEwQjtBQUM1Q0QsRUFBQUEsTUFBTSxHQUFHQSxNQUFNLElBQUksRUFBbkI7QUFFQSxTQUFPQSxNQUFNLENBQUNFLEdBQVAsQ0FBVyxVQUFDQyxDQUFEO0FBQUEsV0FDaEJDLE1BQU0sQ0FBQ0MsTUFBUCxDQUNFLEVBREYsRUFFRUYsQ0FGRixFQUdFRixZQUFZLEdBQUc7QUFBRUssTUFBQUEsT0FBTyxFQUFFLENBQUMsQ0FBQ0gsQ0FBQyxDQUFDRztBQUFmLEtBQUgsR0FBOEI7QUFBRUEsTUFBQUEsT0FBTyxFQUFFQztBQUFYLEtBSDVDLENBRGdCO0FBQUEsR0FBWCxDQUFQO0FBT0QsQ0FWRDs7QUFZTyxJQUFNQyxjQUFjLEdBQUcsU0FBakJBLGNBQWlCLENBQUNSLE1BQUQsRUFBU1MsUUFBVCxFQUFzQjtBQUNsRCxNQUFNSCxPQUFPLEdBQUdOLE1BQU0sQ0FBQ1UsTUFBUCxDQUFjLFVBQUNQLENBQUQ7QUFBQSxXQUFPQSxDQUFDLENBQUNHLE9BQUYsS0FBYyxJQUFyQjtBQUFBLEdBQWQsQ0FBaEI7O0FBRUEsTUFBSUEsT0FBTyxDQUFDSyxNQUFSLEtBQW1CLENBQXZCLEVBQTBCO0FBQ3hCLFdBQU8sU0FBUDtBQUNEOztBQUVELE1BQU1DLGVBQWUsR0FBR0Msa0JBQWtCLENBQUNiLE1BQUQsRUFBU1MsUUFBVCxDQUExQzs7QUFFQSxNQUFJRyxlQUFlLENBQUNELE1BQWhCLEtBQTJCRixRQUFRLENBQUNFLE1BQXhDLEVBQWdEO0FBQzlDLFFB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QUFhRCxDQWRNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5JztcbmltcG9ydCB7IGdldEZlZWRiYWNrRm9yQ29ycmVjdG5lc3MgfSBmcm9tICdAcGllLWxpYi9mZWVkYmFjayc7XG5pbXBvcnQgeyBwYXJ0aWFsU2NvcmluZyB9IGZyb20gJ0BwaWUtbGliL2NvbnRyb2xsZXItdXRpbHMnO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4vZGVmYXVsdHMnO1xuXG5jb25zdCBsb2cgPSBkZWJ1ZygnQHBpZS1lbGVtZW50OnNlbGVjdC10ZXh0OmNvbnRyb2xsZXInKTtcblxuY29uc3QgYnVpbGRUb2tlbnMgPSAodG9rZW5zLCBldmFsdWF0ZU1vZGUpID0+IHtcbiAgdG9rZW5zID0gdG9rZW5zIHx8IFtdO1xuXG4gIHJldHVybiB0b2tlbnMubWFwKCh0KSA9PlxuICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIHQsXG4gICAgICBldmFsdWF0ZU1vZGUgPyB7IGNvcnJlY3Q6ICEhdC5jb3JyZWN0IH0gOiB7IGNvcnJlY3Q6IHVuZGVmaW5lZCB9XG4gICAgKVxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvcnJlY3RuZXNzID0gKHRva2Vucywgc2VsZWN0ZWQpID0+IHtcbiAgY29uc3QgY29ycmVjdCA9IHRva2Vucy5maWx0ZXIoKHQpID0+IHQuY29ycmVjdCA9PT0gdHJ1ZSk7XG5cbiAgaWYgKGNvcnJlY3QubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICd1bmtub3duJztcbiAgfVxuXG4gIGNvbnN0IGNvcnJlY3RTZWxlY3RlZCA9IGdldENvcnJlY3RTZWxlY3RlZCh0b2tlbnMsIHNlbGVjdGVkKTtcblxuICBpZiAoY29ycmVjdFNlbGVjdGVkLmxlbmd0aCA9PT0gc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgaWYgKGNvcnJlY3RTZWxlY3RlZC5sZW5ndGggPT09IGNvcnJlY3QubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gJ2NvcnJlY3QnO1xuICAgIH0gZWxzZSBpZiAoY29ycmVjdFNlbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiAncGFydGlhbGx5LWNvcnJlY3QnO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjb3JyZWN0U2VsZWN0ZWQubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiAncGFydGlhbGx5LWNvcnJlY3QnO1xuICB9XG5cbiAgcmV0dXJuICdpbmNvcnJlY3QnO1xufTtcblxuY29uc3QgZ2V0Q29ycmVjdFNlbGVjdGVkID0gKHRva2Vucywgc2VsZWN0ZWQpID0+IHtcbiAgcmV0dXJuIChzZWxlY3RlZCB8fCBbXSkuZmlsdGVyKChzKSA9PiB7XG4gICAgY29uc3QgaW5kZXggPSB0b2tlbnMuZmluZEluZGV4KChjKSA9PiB7XG4gICAgICByZXR1cm4gYy5jb3JyZWN0ICYmXG4gICAgICAgIChcbiAgICAgICAgICAoYy5zdGFydCA9PT0gcy5zdGFydCAmJiBjLmVuZCA9PT0gcy5lbmQpIHx8XG4gICAgICAgICAgLy8gdGhpcyBjYXNlIGlzIHVzZWQgZm9yIHRoZSBjYXNlcyB3aGVuIHRoZSB0b2tlbidzIHN0YXJ0ICYgZW5kIHdlcmUgcmVjYWxjdWxhdGVkXG4gICAgICAgICAgKGMuc3RhcnQgPT09IHMub2xkU3RhcnQgJiYgYy5lbmQgPT09IHMub2xkRW5kKVxuICAgICAgICApO1xuICAgIH0pO1xuICAgIHJldHVybiBpbmRleCAhPT0gLTE7XG4gIH0pO1xufTtcblxuY29uc3QgZ2V0Q29ycmVjdENvdW50ID0gKHRva2Vucywgc2VsZWN0ZWQpID0+XG4gIGdldENvcnJlY3RTZWxlY3RlZCh0b2tlbnMsIHNlbGVjdGVkKS5sZW5ndGg7XG5cbmV4cG9ydCBjb25zdCBnZXRQYXJ0aWFsU2NvcmUgPSAocXVlc3Rpb24sIHNlc3Npb24sIHRvdGFsQ29ycmVjdCkgPT4ge1xuICBpZiAoIXNlc3Npb24gfHwgaXNFbXB0eShzZXNzaW9uKSkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgY29uc3QgY29ycmVjdENvdW50ID0gZ2V0Q29ycmVjdENvdW50KHF1ZXN0aW9uLnRva2Vucywgc2Vzc2lvbi5zZWxlY3RlZFRva2Vucyk7XG4gIGNvbnN0IGNvcnJlY3RUb2tlbnMgPSAocXVlc3Rpb24udG9rZW5zIHx8IFtdKS5maWx0ZXIoKHQpID0+IHQuY29ycmVjdCA9PT0gdHJ1ZSk7XG4gIGNvbnN0IGV4dHJhU2VsZWN0ZWQgPSBzZXNzaW9uLnNlbGVjdGVkVG9rZW5zID8gc2Vzc2lvbi5zZWxlY3RlZFRva2Vucy5sZW5ndGggPiBjb3JyZWN0VG9rZW5zLmxlbmd0aCA6IDA7XG4gIGNvbnN0IGluY29ycmVjdENvdW50ID0gZXh0cmFTZWxlY3RlZCA/IHNlc3Npb24uc2VsZWN0ZWRUb2tlbnMgJiYgc2Vzc2lvbi5zZWxlY3RlZFRva2Vucy5sZW5ndGggLSBjb3JyZWN0Q291bnQgOiAwO1xuICBjb25zdCBjb3VudCA9IGNvcnJlY3RDb3VudCAtIGluY29ycmVjdENvdW50O1xuICBjb25zdCBwb3NpdGl2ZUNvdW50ID0gY291bnQgPCAwID8gMCA6IGNvdW50O1xuXG4gIHJldHVybiB0b3RhbENvcnJlY3QubGVuZ3RoXG4gICAgPyBwYXJzZUZsb2F0KChwb3NpdGl2ZUNvdW50IC8gdG90YWxDb3JyZWN0Lmxlbmd0aCkudG9GaXhlZCgyKSlcbiAgICA6IDA7XG59O1xuXG5leHBvcnQgY29uc3Qgb3V0Y29tZSA9IChxdWVzdGlvbiwgc2Vzc2lvbiwgZW52KSA9PlxuICBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGlmICghc2Vzc2lvbiB8fCBpc0VtcHR5KHNlc3Npb24pKSB7XG4gICAgICByZXNvbHZlKHsgc2NvcmU6IDAsIGVtcHR5OiB0cnVlIH0pO1xuICAgIH1cblxuICAgIHNlc3Npb24gPSBub3JtYWxpemVTZXNzaW9uKHNlc3Npb24pO1xuXG4gICAgaWYgKGVudi5tb2RlICE9PSAnZXZhbHVhdGUnKSB7XG4gICAgICByZXNvbHZlKHsgc2NvcmU6IHVuZGVmaW5lZCwgY29tcGxldGVkOiB1bmRlZmluZWQgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGVuYWJsZWQgPSBwYXJ0aWFsU2NvcmluZy5lbmFibGVkKHF1ZXN0aW9uLCBlbnYsIHRydWUpO1xuICAgICAgY29uc3QgdG90YWxDb3JyZWN0ID0gcXVlc3Rpb24udG9rZW5zLmZpbHRlcigodCkgPT4gdC5jb3JyZWN0KTtcbiAgICAgIGNvbnN0IHNjb3JlID0gZ2V0UGFydGlhbFNjb3JlKHF1ZXN0aW9uLCBzZXNzaW9uLCB0b3RhbENvcnJlY3QpO1xuICAgICAgcmVzb2x2ZSh7XG4gICAgICAgIHNjb3JlOiBlbmFibGVkID8gc2NvcmUgOiBzY29yZSA9PT0gMSA/IDEgOiAwLFxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRNb2RlbChtb2RlbCA9IHt9KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHJlc29sdmUoe1xuICAgICAgLi4uZGVmYXVsdHMsXG4gICAgICAuLi5tb2RlbCxcbiAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCBub3JtYWxpemVTZXNzaW9uID0gKHMpID0+ICh7XG4gIHNlbGVjdGVkVG9rZW5zOiBbXSxcbiAgLi4ucyxcbn0pO1xuXG5leHBvcnQgY29uc3Qgbm9ybWFsaXplID0gKHF1ZXN0aW9uKSA9PiAoe1xuICBmZWVkYmFja0VuYWJsZWQ6IHRydWUsXG4gIHJhdGlvbmFsZUVuYWJsZWQ6IHRydWUsXG4gIHByb21wdEVuYWJsZWQ6IHRydWUsXG4gIHRlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkOiB0cnVlLFxuICBzdHVkZW50SW5zdHJ1Y3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgLi4ucXVlc3Rpb24sXG59KTtcblxuZXhwb3J0IGNvbnN0IG1vZGVsID0gKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpID0+IHtcbiAgc2Vzc2lvbiA9IHNlc3Npb24gfHwgeyBzZWxlY3RlZFRva2VuOiBbXSB9O1xuICBzZXNzaW9uLnNlbGVjdGVkVG9rZW5zID0gc2Vzc2lvbi5zZWxlY3RlZFRva2VucyB8fCBbXTtcbiAgY29uc3Qgbm9ybWFsaXplZFF1ZXN0aW9uID0gbm9ybWFsaXplKHF1ZXN0aW9uKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgbG9nKCdbbW9kZWxdJywgJ25vcm1hbGl6ZWRRdWVzdGlvbjogJywgbm9ybWFsaXplZFF1ZXN0aW9uKTtcbiAgICBsb2coJ1ttb2RlbF0nLCAnc2Vzc2lvbjogJywgc2Vzc2lvbik7XG4gICAgY29uc3QgdG9rZW5zID0gYnVpbGRUb2tlbnMoXG4gICAgICBub3JtYWxpemVkUXVlc3Rpb24udG9rZW5zLFxuICAgICAgZW52Lm1vZGUgPT09ICdldmFsdWF0ZSdcbiAgICApO1xuICAgIGxvZygndG9rZW5zOicsIHRva2Vucyk7XG4gICAgY29uc3QgY29ycmVjdG5lc3MgPVxuICAgICAgZW52Lm1vZGUgPT09ICdldmFsdWF0ZSdcbiAgICAgICAgPyBnZXRDb3JyZWN0bmVzcyhub3JtYWxpemVkUXVlc3Rpb24udG9rZW5zLCBzZXNzaW9uLnNlbGVjdGVkVG9rZW5zKVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGZiID1cbiAgICAgIGVudi5tb2RlID09PSAnZXZhbHVhdGUnICYmIG5vcm1hbGl6ZWRRdWVzdGlvbi5mZWVkYmFja0VuYWJsZWRcbiAgICAgICAgPyBnZXRGZWVkYmFja0ZvckNvcnJlY3RuZXNzKGNvcnJlY3RuZXNzLCBub3JtYWxpemVkUXVlc3Rpb24uZmVlZGJhY2spXG4gICAgICAgIDogUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cbiAgICBmYi50aGVuKChmZWVkYmFjaykgPT4ge1xuICAgICAgY29uc3Qgb3V0ID0ge1xuICAgICAgICB0b2tlbnMsXG4gICAgICAgIGhpZ2hsaWdodENob2ljZXM6IG5vcm1hbGl6ZWRRdWVzdGlvbi5oaWdobGlnaHRDaG9pY2VzLFxuICAgICAgICBwcm9tcHQ6IG5vcm1hbGl6ZWRRdWVzdGlvbi5wcm9tcHRFbmFibGVkXG4gICAgICAgICAgPyBub3JtYWxpemVkUXVlc3Rpb24ucHJvbXB0XG4gICAgICAgICAgOiBudWxsLFxuICAgICAgICB0ZXh0OiBub3JtYWxpemVkUXVlc3Rpb24udGV4dCxcbiAgICAgICAgZGlzYWJsZWQ6IGVudi5tb2RlICE9PSAnZ2F0aGVyJyxcbiAgICAgICAgbWF4U2VsZWN0aW9uczogbm9ybWFsaXplZFF1ZXN0aW9uLm1heFNlbGVjdGlvbnMsXG4gICAgICAgIGNvcnJlY3RuZXNzLFxuICAgICAgICBmZWVkYmFjayxcbiAgICAgICAgaW5jb3JyZWN0OlxuICAgICAgICAgIGVudi5tb2RlID09PSAnZXZhbHVhdGUnID8gY29ycmVjdG5lc3MgIT09ICdjb3JyZWN0JyA6IHVuZGVmaW5lZCxcbiAgICAgIH07XG5cbiAgICAgIGlmIChcbiAgICAgICAgZW52LnJvbGUgPT09ICdpbnN0cnVjdG9yJyAmJlxuICAgICAgICAoZW52Lm1vZGUgPT09ICd2aWV3JyB8fCBlbnYubW9kZSA9PT0gJ2V2YWx1YXRlJylcbiAgICAgICkge1xuICAgICAgICBvdXQucmF0aW9uYWxlID0gbm9ybWFsaXplZFF1ZXN0aW9uLnJhdGlvbmFsZUVuYWJsZWRcbiAgICAgICAgICA/IG5vcm1hbGl6ZWRRdWVzdGlvbi5yYXRpb25hbGVcbiAgICAgICAgICA6IG51bGw7XG4gICAgICAgIG91dC50ZWFjaGVySW5zdHJ1Y3Rpb25zID0gbm9ybWFsaXplZFF1ZXN0aW9uLnRlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkXG4gICAgICAgICAgPyBub3JtYWxpemVkUXVlc3Rpb24udGVhY2hlckluc3RydWN0aW9uc1xuICAgICAgICAgIDogbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dC5yYXRpb25hbGUgPSBudWxsO1xuICAgICAgICBvdXQudGVhY2hlckluc3RydWN0aW9ucyA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJlc29sdmUob3V0KTtcbiAgICB9KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlQ29ycmVjdFJlc3BvbnNlU2Vzc2lvbiA9IChxdWVzdGlvbiwgZW52KSA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGlmIChlbnYubW9kZSAhPT0gJ2V2YWx1YXRlJyAmJiBlbnYucm9sZSA9PT0gJ2luc3RydWN0b3InKSB7XG4gICAgICBjb25zdCB7IHRva2VucyB9ID0gcXVlc3Rpb247XG4gICAgICBjb25zdCBzZWxlY3RlZFRva2VucyA9IHRva2Vucy5maWx0ZXIoKHQpID0+IHQuY29ycmVjdCk7XG5cbiAgICAgIHJlc29sdmUoe1xuICAgICAgICBpZDogJzEnLFxuICAgICAgICBzZWxlY3RlZFRva2VucyxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNvbHZlKG51bGwpO1xuICAgIH1cbiAgfSk7XG59O1xuIl19
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.js"],"names":["log","buildTokens","tokens","evaluateMode","map","t","Object","assign","correct","undefined","getCorrectness","selected","filter","length","correctSelected","getCorrectSelected","s","index","findIndex","c","start","end","oldStart","oldEnd","getCorrectCount","getPartialScore","question","session","totalCorrect","correctCount","selectedTokens","correctTokens","extraSelected","incorrectCount","count","positiveCount","parseFloat","toFixed","outcome","env","Promise","resolve","score","empty","normalizeSession","mode","completed","enabled","partialScoring","createDefaultModel","model","defaults","normalize","feedbackEnabled","rationaleEnabled","promptEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","selectedToken","normalizedQuestion","correctness","fb","feedback","then","out","highlightChoices","prompt","text","disabled","maxSelections","incorrect","role","rationale","teacherInstructions","createCorrectResponseSession","id"],"mappings":"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","sourcesContent":["import debug from 'debug';\nimport isEmpty from 'lodash/isEmpty';\nimport { getFeedbackForCorrectness } from '@pie-lib/feedback';\nimport { partialScoring } from '@pie-lib/controller-utils';\nimport defaults from './defaults';\n\nconst log = debug('@pie-element:select-text:controller');\n\nconst buildTokens = (tokens, evaluateMode) => {\n tokens = tokens || [];\n\n return tokens.map((t) =>\n Object.assign(\n {},\n t,\n evaluateMode ? { correct: !!t.correct } : { correct: undefined }\n )\n );\n};\n\nexport const getCorrectness = (tokens, selected) => {\n const correct = tokens.filter((t) => t.correct === true);\n\n if (correct.length === 0) {\n return 'unknown';\n }\n\n const correctSelected = getCorrectSelected(tokens, selected);\n\n if (correctSelected.length === selected.length) {\n if (correctSelected.length === correct.length) {\n return 'correct';\n } else if (correctSelected.length > 0) {\n return 'partially-correct';\n }\n }\n\n if (correctSelected.length > 0) {\n return 'partially-correct';\n }\n\n return 'incorrect';\n};\n\nconst getCorrectSelected = (tokens, selected) => {\n return (selected || []).filter((s) => {\n const index = tokens.findIndex((c) => {\n return c.correct &&\n (\n (c.start === s.start && c.end === s.end) ||\n // this case is used for the cases when the token's start & end were recalculated\n (c.start === s.oldStart && c.end === s.oldEnd)\n );\n });\n return index !== -1;\n });\n};\n\nconst getCorrectCount = (tokens, selected) =>\n getCorrectSelected(tokens, selected).length;\n\nexport const getPartialScore = (question, session, totalCorrect) => {\n if (!session || isEmpty(session)) {\n return 0;\n }\n\n const correctCount = getCorrectCount(question.tokens, session.selectedTokens);\n const correctTokens = (question.tokens || []).filter((t) => t.correct === true);\n const extraSelected = session.selectedTokens ? session.selectedTokens.length > correctTokens.length : 0;\n const incorrectCount = extraSelected ? session.selectedTokens && session.selectedTokens.length - correctCount : 0;\n const count = correctCount - incorrectCount;\n const positiveCount = count < 0 ? 0 : count;\n\n return totalCorrect.length\n ? parseFloat((positiveCount / totalCorrect.length).toFixed(2))\n : 0;\n};\n\nexport const outcome = (question, session, env) =>\n new Promise((resolve) => {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n }\n\n session = normalizeSession(session);\n\n if (env.mode !== 'evaluate') {\n resolve({ score: undefined, completed: undefined });\n } else {\n const enabled = partialScoring.enabled(question, env, true);\n const totalCorrect = question.tokens.filter((t) => t.correct);\n const score = getPartialScore(question, session, totalCorrect);\n resolve({\n score: enabled ? score : score === 1 ? 1 : 0,\n });\n }\n });\n\nexport function createDefaultModel(model = {}) {\n return new Promise((resolve) => {\n resolve({\n ...defaults,\n ...model,\n });\n });\n}\n\nexport const normalizeSession = (s) => ({\n selectedTokens: [],\n ...s,\n});\n\nexport const normalize = (question) => ({\n feedbackEnabled: true,\n rationaleEnabled: true,\n promptEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n ...question,\n});\n\nexport const model = (question, session, env) => {\n session = session || { selectedToken: [] };\n session.selectedTokens = session.selectedTokens || [];\n const normalizedQuestion = normalize(question);\n return new Promise((resolve) => {\n log('[model]', 'normalizedQuestion: ', normalizedQuestion);\n log('[model]', 'session: ', session);\n const tokens = buildTokens(\n normalizedQuestion.tokens,\n env.mode === 'evaluate'\n );\n log('tokens:', tokens);\n const correctness =\n env.mode === 'evaluate'\n ? getCorrectness(normalizedQuestion.tokens, session.selectedTokens)\n : undefined;\n\n const fb =\n env.mode === 'evaluate' && normalizedQuestion.feedbackEnabled\n ? getFeedbackForCorrectness(correctness, normalizedQuestion.feedback)\n : Promise.resolve(undefined);\n\n fb.then((feedback) => {\n const out = {\n tokens,\n highlightChoices: normalizedQuestion.highlightChoices,\n prompt: normalizedQuestion.promptEnabled\n ? normalizedQuestion.prompt\n : null,\n text: normalizedQuestion.text,\n disabled: env.mode !== 'gather',\n maxSelections: normalizedQuestion.maxSelections,\n correctness,\n feedback,\n incorrect:\n env.mode === 'evaluate' ? correctness !== 'correct' : undefined,\n };\n\n if (\n env.role === 'instructor' &&\n (env.mode === 'view' || env.mode === 'evaluate')\n ) {\n out.rationale = normalizedQuestion.rationaleEnabled\n ? normalizedQuestion.rationale\n : null;\n out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n }\n\n resolve(out);\n });\n });\n};\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { tokens } = question;\n const selectedTokens = tokens.filter((t) => t.correct);\n\n resolve({\n id: '1',\n selectedTokens,\n });\n } else {\n resolve(null);\n }\n });\n};\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../src/index.js"],"names":["log","buildTokens","tokens","evaluateMode","map","t","Object","assign","correct","undefined","getCorrectness","selected","filter","length","correctSelected","getCorrectSelected","s","index","findIndex","c","start","end","oldStart","oldEnd","getCorrectCount","getPartialScore","question","session","totalCorrect","correctCount","selectedTokens","correctTokens","extraSelected","incorrectCount","count","positiveCount","parseFloat","toFixed","outcome","env","Promise","resolve","score","empty","normalizeSession","mode","completed","enabled","partialScoring","createDefaultModel","model","defaults","normalize","feedbackEnabled","rationaleEnabled","promptEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","selectedToken","normalizedQuestion","correctness","fb","feedback","then","out","highlightChoices","prompt","text","disabled","maxSelections","incorrect","role","rationale","teacherInstructions","createCorrectResponseSession","id"],"mappings":"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","sourcesContent":["import debug from 'debug';\nimport isEmpty from 'lodash/isEmpty';\nimport { getFeedbackForCorrectness } from '@pie-lib/feedback';\nimport { partialScoring } from '@pie-lib/controller-utils';\nimport defaults from './defaults';\n\nconst log = debug('@pie-element:select-text:controller');\n\nconst buildTokens = (tokens, evaluateMode) => {\n tokens = tokens || [];\n\n return tokens.map((t) =>\n Object.assign(\n {},\n t,\n evaluateMode ? { correct: !!t.correct } : { correct: undefined }\n )\n );\n};\n\nexport const getCorrectness = (tokens, selected) => {\n const correct = tokens.filter((t) => t.correct === true);\n\n if (correct.length === 0) {\n return 'unknown';\n }\n\n const correctSelected = getCorrectSelected(tokens, selected);\n\n if (correctSelected.length === selected.length) {\n if (correctSelected.length === correct.length) {\n return 'correct';\n } else if (correctSelected.length > 0) {\n return 'partially-correct';\n }\n }\n\n if (correctSelected.length > 0) {\n return 'partially-correct';\n }\n\n return 'incorrect';\n};\n\nconst getCorrectSelected = (tokens, selected) => {\n return (selected || []).filter((s) => {\n const index = tokens.findIndex((c) => {\n return c.correct &&\n (\n (c.start === s.start && c.end === s.end) ||\n // this case is used for the cases when the token's start & end were recalculated\n (c.start === s.oldStart && c.end === s.oldEnd)\n );\n });\n return index !== -1;\n });\n};\n\nconst getCorrectCount = (tokens, selected) =>\n getCorrectSelected(tokens, selected).length;\n\nexport const getPartialScore = (question, session, totalCorrect) => {\n if (!session || isEmpty(session)) {\n return 0;\n }\n\n const correctCount = getCorrectCount(question.tokens, session.selectedTokens);\n const correctTokens = (question.tokens || []).filter((t) => t.correct === true);\n const extraSelected = session.selectedTokens ? session.selectedTokens.length > correctTokens.length : 0;\n const incorrectCount = extraSelected ? session.selectedTokens && session.selectedTokens.length - correctCount : 0;\n const count = correctCount - incorrectCount;\n const positiveCount = count < 0 ? 0 : count;\n\n return totalCorrect.length\n ? parseFloat((positiveCount / totalCorrect.length).toFixed(2))\n : 0;\n};\n\nexport const outcome = (question, session, env) =>\n new Promise((resolve) => {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n }\n\n session = normalizeSession(session);\n\n if (env.mode !== 'evaluate') {\n resolve({ score: undefined, completed: undefined });\n } else {\n const enabled = partialScoring.enabled(question, env, true);\n const totalCorrect = question.tokens.filter((t) => t.correct);\n const score = getPartialScore(question, session, totalCorrect);\n resolve({\n score: enabled ? score : score === 1 ? 1 : 0,\n });\n }\n });\n\nexport function createDefaultModel(model = {}) {\n return new Promise((resolve) => {\n resolve({\n ...defaults,\n ...model,\n });\n });\n}\n\nexport const normalizeSession = (s) => ({\n selectedTokens: [],\n ...s,\n});\n\nexport const normalize = (question) => ({\n feedbackEnabled: true,\n rationaleEnabled: true,\n promptEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n ...question,\n});\n\nexport const model = (question, session, env) => {\n session = session || { selectedToken: [] };\n session.selectedTokens = session.selectedTokens || [];\n const normalizedQuestion = normalize(question);\n return new Promise((resolve) => {\n log('[model]', 'normalizedQuestion: ', normalizedQuestion);\n log('[model]', 'session: ', session);\n const tokens = buildTokens(\n normalizedQuestion.tokens,\n env.mode === 'evaluate'\n );\n log('tokens:', tokens);\n const correctness =\n env.mode === 'evaluate'\n ? getCorrectness(normalizedQuestion.tokens, session.selectedTokens)\n : undefined;\n\n const fb =\n env.mode === 'evaluate' && normalizedQuestion.feedbackEnabled\n ? getFeedbackForCorrectness(correctness, normalizedQuestion.feedback)\n : Promise.resolve(undefined);\n\n fb.then((feedback) => {\n const out = {\n tokens,\n highlightChoices: normalizedQuestion.highlightChoices,\n prompt: normalizedQuestion.promptEnabled\n ? normalizedQuestion.prompt\n : null,\n text: normalizedQuestion.text,\n disabled: env.mode !== 'gather',\n maxSelections: normalizedQuestion.maxSelections,\n correctness,\n feedback,\n incorrect:\n env.mode === 'evaluate' ? correctness !== 'correct' : undefined,\n };\n\n if (\n env.role === 'instructor' &&\n (env.mode === 'view' || env.mode === 'evaluate')\n ) {\n out.rationale = normalizedQuestion.rationaleEnabled\n ? normalizedQuestion.rationale\n : null;\n out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n }\n\n resolve(out);\n });\n });\n};\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { tokens } = question;\n const selectedTokens = tokens.filter((t) => t.correct);\n\n resolve({\n id: '1',\n selectedTokens,\n });\n } else {\n resolve(null);\n }\n });\n};\n"],"file":"index.js"}
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@pie-element/select-text-controller",
3
3
  "private": true,
4
- "version": "4.1.30",
4
+ "version": "4.1.31",
5
5
  "description": "",
6
6
  "main": "lib/index.js",
7
7
  "module": "src/index.js",
8
8
  "dependencies": {
9
9
  "@pie-lib/controller-utils": "^0.2.26",
10
10
  "@pie-lib/feedback": "^0.4.27",
11
- "@pie-lib/text-select": "^1.8.13",
11
+ "@pie-lib/text-select": "^1.8.14",
12
12
  "debug": "^3.1.0",
13
13
  "lodash": "^4.17.15"
14
14
  },
@@ -163,6 +163,22 @@
163
163
  }
164
164
  }
165
165
  },
166
+ "spellCheck": {
167
+ "title": "ConfigureProp",
168
+ "type": "object",
169
+ "properties": {
170
+ "settings": {
171
+ "description": "Indicates if the item has to be displayed in the Settings Panel",
172
+ "type": "boolean",
173
+ "title": "settings"
174
+ },
175
+ "label": {
176
+ "description": "Indicates the label for the item that has to be displayed in the Settings Panel",
177
+ "type": "string",
178
+ "title": "label"
179
+ }
180
+ }
181
+ },
166
182
  "scoringType": {
167
183
  "title": "ConfigureProp",
168
184
  "type": "object",
@@ -122,6 +122,18 @@ Indicates if the item has to be displayed in the Settings Panel
122
122
 
123
123
  Indicates the label for the item that has to be displayed in the Settings Panel
124
124
 
125
+ # `spellCheck` (object)
126
+
127
+ Properties of the `spellCheck` object:
128
+
129
+ ## `settings` (boolean)
130
+
131
+ Indicates if the item has to be displayed in the Settings Panel
132
+
133
+ ## `label` (string)
134
+
135
+ Indicates the label for the item that has to be displayed in the Settings Panel
136
+
125
137
  # `scoringType` (object)
126
138
 
127
139
  Properties of the `scoringType` object:
@@ -207,98 +207,98 @@ exports.htmlAscii = (id, element) => ({
207
207
  );
208
208
 
209
209
  const simpleItem = {
210
- "text": "A. Almost never\n\nB. Once in a while\n\nC. Sometimes\n\nD. Often\n\nE. Almost all the time",
211
- "tokens": [
210
+ 'text': 'A. Almost never\n\nB. Once in a while\n\nC. Sometimes\n\nD. Often\n\nE. Almost all the time',
211
+ 'tokens': [
212
212
  {
213
- "text": "A. Almost never",
214
- "end": 15,
215
- "start": 0,
216
- "correct": true
213
+ 'text': 'A. Almost never',
214
+ 'end': 15,
215
+ 'start': 0,
216
+ 'correct': true
217
217
  },
218
218
  {
219
- "start": 17,
220
- "end": 35,
221
- "correct": false,
222
- "text": "B. Once in a while"
219
+ 'start': 17,
220
+ 'end': 35,
221
+ 'correct': false,
222
+ 'text': 'B. Once in a while'
223
223
  },
224
224
  {
225
- "correct": false,
226
- "end": 49,
227
- "start": 37,
228
- "text": "C. Sometimes"
225
+ 'correct': false,
226
+ 'end': 49,
227
+ 'start': 37,
228
+ 'text': 'C. Sometimes'
229
229
  },
230
230
  {
231
- "text": "D. Often",
232
- "correct": false,
233
- "end": 59,
234
- "start": 51
231
+ 'text': 'D. Often',
232
+ 'correct': false,
233
+ 'end': 59,
234
+ 'start': 51
235
235
  },
236
236
  {
237
- "start": 61,
238
- "correct": false,
239
- "end": 83,
240
- "text": "E. Almost all the time"
237
+ 'start': 61,
238
+ 'correct': false,
239
+ 'end': 83,
240
+ 'text': 'E. Almost all the time'
241
241
  }
242
242
  ],
243
- "rationale": "<p>answers vary</p>",
244
- "partialScoring": true,
245
- "teacherInstructions": "",
246
- "prompt": "<p>I got my work done right away instead of waiting until the last minute.</p>",
247
- "maxSelections": 1,
243
+ 'rationale': '<p>answers vary</p>',
244
+ 'partialScoring': true,
245
+ 'teacherInstructions': '',
246
+ 'prompt': '<p>I got my work done right away instead of waiting until the last minute.</p>',
247
+ 'maxSelections': 1,
248
248
  };
249
249
 
250
250
  exports.model = (id, element) => {
251
251
  return Object.assign({}, { id, element }, base( {
252
252
  // "id": "8a808081701d693801703174fb900421",
253
- "teacherInstructions": "",
254
- "partialScoring": true,
255
- "prompt": "<p>Select the sentence from&#160;&#34;The Gymnast&#34; that <span class=\"relative-emphasis\">best</span> represents the theme.</p>",
256
- "rationale": "<p>The final sentence of the passage best exemplifies the theme of the short story because Natasha&#39;s practice and determination finally pays off.</p>",
257
- "tokens": [
253
+ 'teacherInstructions': '',
254
+ 'partialScoring': true,
255
+ 'prompt': '<p>Select the sentence from&#160;&#34;The Gymnast&#34; that <span class="relative-emphasis">best</span> represents the theme.</p>',
256
+ 'rationale': '<p>The final sentence of the passage best exemplifies the theme of the short story because Natasha&#39;s practice and determination finally pays off.</p>',
257
+ 'tokens': [
258
258
  {
259
- "text": "She thought about what she had to do, struggling to rein in her wild, fearful thoughts.",
260
- "end": 90,
261
- "start": 3,
262
- "correct": false
259
+ 'text': 'She thought about what she had to do, struggling to rein in her wild, fearful thoughts.',
260
+ 'end': 90,
261
+ 'start': 3,
262
+ 'correct': false
263
263
  },
264
264
  {
265
- "start": 449,
266
- "end": 585,
267
- "text": "Just for a hair of a moment, Natasha wondered if she really wanted a perfect 10, so weary was she of trying for but never achieving one.",
268
- "correct": false
265
+ 'start': 449,
266
+ 'end': 585,
267
+ 'text': 'Just for a hair of a moment, Natasha wondered if she really wanted a perfect 10, so weary was she of trying for but never achieving one.',
268
+ 'correct': false
269
269
  },
270
270
  {
271
- "end": 627,
272
- "correct": false,
273
- "text": "At last Natasha's moment arrived.",
274
- "start": 594
271
+ 'end': 627,
272
+ 'correct': false,
273
+ 'text': 'At last Natasha\'s moment arrived.',
274
+ 'start': 594
275
275
  },
276
276
  {
277
- "end": 743,
278
- "text": "The faces of past giants of gymnastics swam before her mind's eye, now razor&#8211;sharp with fierce determination.",
279
- "correct": false,
280
- "start": 628
277
+ 'end': 743,
278
+ 'text': 'The faces of past giants of gymnastics swam before her mind\'s eye, now razor&#8211;sharp with fierce determination.',
279
+ 'correct': false,
280
+ 'start': 628
281
281
  },
282
282
  {
283
- "text": "Suddenly, the din of the gymnasium was silent to her.",
284
- "end": 997,
285
- "correct": false,
286
- "start": 944
283
+ 'text': 'Suddenly, the din of the gymnasium was silent to her.',
284
+ 'end': 997,
285
+ 'correct': false,
286
+ 'start': 944
287
287
  },
288
288
  {
289
- "end": 1087,
290
- "start": 998,
291
- "correct": false,
292
- "text": "Forcing all sound out of her mind, she focused on the gleaming balance beam ahead of her."
289
+ 'end': 1087,
290
+ 'start': 998,
291
+ 'correct': false,
292
+ 'text': 'Forcing all sound out of her mind, she focused on the gleaming balance beam ahead of her.'
293
293
  },
294
294
  {
295
- "correct": true,
296
- "start": 1088,
297
- "end": 1225,
298
- "text": "Taking a deep breath, Natasha made her graceful, yet powerful approach, mounted the beam flawlessly, and...executed her first perfect 10."
295
+ 'correct': true,
296
+ 'start': 1088,
297
+ 'end': 1225,
298
+ 'text': 'Taking a deep breath, Natasha made her graceful, yet powerful approach, mounted the beam flawlessly, and...executed her first perfect 10.'
299
299
  }
300
300
  ],
301
301
  // "element": "select-text",
302
- "text": "<p>She thought about what she had to do, struggling to rein in her wild, fearful thoughts. Coach Cummings always said that an undisciplined mind never scored a perfect 10. Natasha wanted to please her Coach, yet sometimes his approval wasn't as exciting as his anger. The gymnasts were unanimous about one thing: Coach Cummings's fits of disapproving rage were much more humorous to witness than his infrequent, backslapping moments of high praise. Just for a hair of a moment, Natasha wondered if she really wanted a perfect 10, so weary was she of trying for but never achieving one.</p>\n\n<p>At last Natasha's moment arrived. The faces of past giants of gymnastics swam before her mind's eye, now razor&#8211;sharp with fierce determination. \"I am talented. I am not afraid. I will make a perfect 10,\" she spoke aloud to herself, as she approached the mat, dusted her hands with chalk to prevent slippage, and returned to her starting point. Suddenly, the din of the gymnasium was silent to her. Forcing all sound out of her mind, she focused on the gleaming balance beam ahead of her. Taking a deep breath, Natasha made her graceful, yet powerful approach, mounted the beam flawlessly, and...executed her first perfect 10.</p>\n"
302
+ 'text': '<p>She thought about what she had to do, struggling to rein in her wild, fearful thoughts. Coach Cummings always said that an undisciplined mind never scored a perfect 10. Natasha wanted to please her Coach, yet sometimes his approval wasn\'t as exciting as his anger. The gymnasts were unanimous about one thing: Coach Cummings\'s fits of disapproving rage were much more humorous to witness than his infrequent, backslapping moments of high praise. Just for a hair of a moment, Natasha wondered if she really wanted a perfect 10, so weary was she of trying for but never achieving one.</p>\n\n<p>At last Natasha\'s moment arrived. The faces of past giants of gymnastics swam before her mind\'s eye, now razor&#8211;sharp with fierce determination. "I am talented. I am not afraid. I will make a perfect 10," she spoke aloud to herself, as she approached the mat, dusted her hands with chalk to prevent slippage, and returned to her starting point. Suddenly, the din of the gymnasium was silent to her. Forcing all sound out of her mind, she focused on the gleaming balance beam ahead of her. Taking a deep breath, Natasha made her graceful, yet powerful approach, mounted the beam flawlessly, and...executed her first perfect 10.</p>\n'
303
303
  } ));
304
304
  };
@@ -0,0 +1,11 @@
1
+ {
2
+ "hash": "-2043355302",
3
+ "info": [
4
+ {
5
+ "pie": "@pie-element/select-text",
6
+ "version": {
7
+ "requested": "latest"
8
+ }
9
+ }
10
+ ]
11
+ }
@@ -289,6 +289,11 @@
289
289
  "type": "boolean",
290
290
  "title": "teacherInstructionsEnabled"
291
291
  },
292
+ "spellCheckEnabled": {
293
+ "description": "Indicates if spellcheck is enabled",
294
+ "type": "boolean",
295
+ "title": "spellCheckEnabled"
296
+ },
292
297
  "toolbarEditorPosition": {
293
298
  "description": "Indicates the editor's toolbar position which can be 'bottom' or 'top'",
294
299
  "default": ": 'bottom'",
@@ -316,6 +321,7 @@
316
321
  "id",
317
322
  "prompt",
318
323
  "rationaleEnabled",
324
+ "spellCheckEnabled",
319
325
  "studentInstructionsEnabled",
320
326
  "teacherInstructionsEnabled",
321
327
  "text",
@@ -117,6 +117,10 @@ Indicates if Student Instructions are enabled
117
117
 
118
118
  Indicates if Teacher Instructions are enabled
119
119
 
120
+ # `spellCheckEnabled` (boolean, required)
121
+
122
+ Indicates if spellcheck is enabled
123
+
120
124
  # `toolbarEditorPosition` (string, enum)
121
125
 
122
126
  Indicates the editor's toolbar position which can be 'bottom' or 'top'
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _ = _interopRequireDefault(require(".."));
6
+
7
+ var _react = _interopRequireDefault(require("react"));
8
+
9
+ var _reactDom = _interopRequireDefault(require("react-dom"));
10
+
11
+ var _piePlayerEvents = require("@pie-framework/pie-player-events");
12
+
13
+ var _mathRendering = require("@pie-lib/math-rendering");
14
+
15
+ jest.mock('@pie-lib/math-rendering', function () {
16
+ return {
17
+ renderMath: jest.fn()
18
+ };
19
+ });
20
+ jest.mock('../main', function () {
21
+ return jest.fn();
22
+ });
23
+ jest.mock('react', function () {
24
+ return {
25
+ createElement: jest.fn()
26
+ };
27
+ });
28
+ jest.mock('react-dom', function () {
29
+ return {
30
+ render: jest.fn(function (r, el, cb) {
31
+ cb();
32
+ })
33
+ };
34
+ });
35
+ describe('select-text', function () {
36
+ var c;
37
+ beforeEach(function () {
38
+ c = new _["default"]();
39
+ c.dispatchEvent = jest.fn();
40
+ c.tagName = 'select-text';
41
+ c.model = {};
42
+ c.session = {};
43
+ });
44
+ describe('init', function () {
45
+ it('calls createElement', function () {
46
+ expect(_react["default"].createElement).toBeCalled();
47
+ });
48
+ it('calls render', function () {
49
+ expect(_reactDom["default"].render).toBeCalledWith(undefined, expect.anything(), expect.any(Function));
50
+ });
51
+ it('calls renderMath', function () {
52
+ expect(_mathRendering.renderMath).toHaveBeenCalled();
53
+ });
54
+ });
55
+ describe('isSessionComplete', function () {
56
+ it('returns true for non empty selectedTokens', function () {
57
+ c.session = {
58
+ selectedTokens: [{
59
+ start: 0,
60
+ end: 1,
61
+ text: 'f'
62
+ }]
63
+ };
64
+ expect(c.isSessionComplete()).toEqual(true);
65
+ });
66
+ it('returns false for empty selectedTokens', function () {
67
+ c.session = {
68
+ selectedTokens: []
69
+ };
70
+ expect(c.isSessionComplete()).toEqual(false);
71
+ });
72
+ });
73
+ describe('selectionChanged', function () {
74
+ var newTokens;
75
+ beforeEach(function () {
76
+ newTokens = [{
77
+ start: 2,
78
+ end: 3,
79
+ text: 'f'
80
+ }];
81
+ c.selectionChanged(newTokens);
82
+ });
83
+ it('sets the tokens', function () {
84
+ expect(c._session.selectedTokens).toEqual(newTokens);
85
+ });
86
+ it('calls dispatchEvent', function () {
87
+ expect(c.dispatchEvent).toBeCalledWith(new _piePlayerEvents.SessionChangedEvent('select-text', true));
88
+ });
89
+ });
90
+ });
91
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vaW5kZXgudGVzdC5qcyJdLCJuYW1lcyI6WyJqZXN0IiwibW9jayIsInJlbmRlck1hdGgiLCJmbiIsImNyZWF0ZUVsZW1lbnQiLCJyZW5kZXIiLCJyIiwiZWwiLCJjYiIsImRlc2NyaWJlIiwiYyIsImJlZm9yZUVhY2giLCJTZWxlY3RUZXh0IiwiZGlzcGF0Y2hFdmVudCIsInRhZ05hbWUiLCJtb2RlbCIsInNlc3Npb24iLCJpdCIsImV4cGVjdCIsIlJlYWN0IiwidG9CZUNhbGxlZCIsIlJlYWN0RE9NIiwidG9CZUNhbGxlZFdpdGgiLCJ1bmRlZmluZWQiLCJhbnl0aGluZyIsImFueSIsIkZ1bmN0aW9uIiwidG9IYXZlQmVlbkNhbGxlZCIsInNlbGVjdGVkVG9rZW5zIiwic3RhcnQiLCJlbmQiLCJ0ZXh0IiwiaXNTZXNzaW9uQ29tcGxldGUiLCJ0b0VxdWFsIiwibmV3VG9rZW5zIiwic2VsZWN0aW9uQ2hhbmdlZCIsIl9zZXNzaW9uIiwiU2Vzc2lvbkNoYW5nZWRFdmVudCJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUNBQSxJQUFJLENBQUNDLElBQUwsQ0FBVSx5QkFBVixFQUFxQztBQUFBLFNBQU87QUFDMUNDLElBQUFBLFVBQVUsRUFBRUYsSUFBSSxDQUFDRyxFQUFMO0FBRDhCLEdBQVA7QUFBQSxDQUFyQztBQUdBSCxJQUFJLENBQUNDLElBQUwsQ0FBVSxTQUFWLEVBQXFCO0FBQUEsU0FBTUQsSUFBSSxDQUFDRyxFQUFMLEVBQU47QUFBQSxDQUFyQjtBQUVBSCxJQUFJLENBQUNDLElBQUwsQ0FBVSxPQUFWLEVBQW1CO0FBQUEsU0FBTztBQUN4QkcsSUFBQUEsYUFBYSxFQUFFSixJQUFJLENBQUNHLEVBQUw7QUFEUyxHQUFQO0FBQUEsQ0FBbkI7QUFJQUgsSUFBSSxDQUFDQyxJQUFMLENBQVUsV0FBVixFQUF1QjtBQUFBLFNBQU87QUFDNUJJLElBQUFBLE1BQU0sRUFBRUws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RCxLQUZDLENBQUY7QUFJQWpCLElBQUFBLEVBQUUsQ0FBQyxxQkFBRCxFQUF3QixZQUFNO0FBQzlCQyxNQUFBQSxNQUFNLENBQUNSLENBQUMsQ0FBQ0csYUFBSCxDQUFOLENBQXdCUyxjQUF4QixDQUNFLElBQUllLG9DQUFKLENBQXdCLGFBQXhCLEVBQXVDLElBQXZDLENBREY7QUFHRCxLQUpDLENBQUY7QUFLRCxHQWhCTyxDQUFSO0FBaUJELENBeERPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgU2VsZWN0VGV4dCBmcm9tICcuLic7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgeyBTZXNzaW9uQ2hhbmdlZEV2ZW50IH0gZnJvbSAnQHBpZS1mcmFtZXdvcmsvcGllLXBsYXllci1ldmVudHMnO1xuXG5pbXBvcnQgeyByZW5kZXJNYXRoIH0gZnJvbSAnQHBpZS1saWIvbWF0aC1yZW5kZXJpbmcnO1xuamVzdC5tb2NrKCdAcGllLWxpYi9tYXRoLXJlbmRlcmluZycsICgpID0+ICh7XG4gIHJlbmRlck1hdGg6IGplc3QuZm4oKVxufSkpO1xuamVzdC5tb2NrKCcuLi9tYWluJywgKCkgPT4gamVzdC5mbigpKTtcblxuamVzdC5tb2NrKCdyZWFjdCcsICgpID0+ICh7XG4gIGNyZWF0ZUVsZW1lbnQ6IGplc3QuZm4oKVxufSkpO1xuXG5qZXN0Lm1vY2soJ3JlYWN0LWRvbScsICgpID0+ICh7XG4gIHJlbmRlcjogamVzdC5mbigociwgZWwsIGNiKSA9PiB7XG4gICAgY2IoKTtcbiAgfSlcbn0pKTtcblxuZGVzY3JpYmUoJ3NlbGVjdC10ZXh0JywgKCkgPT4ge1xuICBsZXQgYztcbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgYyA9IG5ldyBTZWxlY3RUZXh0KCk7XG4gICAgYy5kaXNwYXRjaEV2ZW50ID0gamVzdC5mbigpO1xuICAgIGMudGFnTmFtZSA9ICdzZWxlY3QtdGV4dCc7XG4gICAgYy5tb2RlbCA9IHt9O1xuICAgIGMuc2Vzc2lvbiA9IHt9O1xuICB9KTtcblxuICBkZXNjcmliZSgnaW5pdCcsICgpID0+IHtcbiAgICBpdCgnY2FsbHMgY3JlYXRlRWxlbWVudCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChSZWFjdC5jcmVhdGVFbGVtZW50KS50b0JlQ2FsbGVkKCk7XG4gICAgfSk7XG4gICAgaXQoJ2NhbGxzIHJlbmRlcicsICgpID0+IHtcbiAgICAgIGV4cGVjdChSZWFjdERPTS5yZW5kZXIpLnRvQmVDYWxsZWRXaXRoKFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgICBleHBlY3QuYW55KEZ1bmN0aW9uKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdjYWxscyByZW5kZXJNYXRoJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHJlbmRlck1hdGgpLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzU2Vzc2lvbkNvbXBsZXRlJywgKCkgPT4ge1xuICAgIGl0KCdyZXR1cm5zIHRydWUgZm9yIG5vbiBlbXB0eSBzZWxlY3RlZFRva2VucycsICgpID0+IHtcbiAgICAgIGMuc2Vzc2lvbiA9IHsgc2VsZWN0ZWRUb2tlbnM6IFt7IHN0YXJ0OiAwLCBlbmQ6IDEsIHRleHQ6ICdmJyB9XSB9O1xuICAgICAgZXhwZWN0KGMuaXNTZXNzaW9uQ29tcGxldGUoKSkudG9FcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIGZhbHNlIGZvciBlbXB0eSBzZWxlY3RlZFRva2VucycsICgpID0+IHtcbiAgICAgIGMuc2Vzc2lvbiA9IHsgc2VsZWN0ZWRUb2tlbnM6IFtdIH07XG4gICAgICBleHBlY3QoYy5pc1Nlc3Npb25Db21wbGV0ZSgpKS50b0VxdWFsKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3NlbGVjdGlvbkNoYW5nZWQnLCAoKSA9PiB7XG4gICAgbGV0IG5ld1Rva2VucztcbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgIG5ld1Rva2VucyA9IFt7IHN0YXJ0OiAyLCBlbmQ6IDMsIHRleHQ6ICdmJyB9XTtcbiAgICAgIGMuc2VsZWN0aW9uQ2hhbmdlZChuZXdUb2tlbnMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3NldHMgdGhlIHRva2VucycsICgpID0+IHtcbiAgICAgIGV4cGVjdChjLl9zZXNzaW9uLnNlbGVjdGVkVG9rZW5zKS50b0VxdWFsKG5ld1Rva2Vucyk7XG4gICAgfSk7XG5cbiAgICBpdCgnY2FsbHMgZGlzcGF0Y2hFdmVudCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChjLmRpc3BhdGNoRXZlbnQpLnRvQmVDYWxsZWRXaXRoKFxuICAgICAgICBuZXcgU2Vzc2lvbkNoYW5nZWRFdmVudCgnc2VsZWN0LXRleHQnLCB0cnVlKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
6
+
7
+ var _enzyme = require("enzyme");
8
+
9
+ var _react = _interopRequireDefault(require("react"));
10
+
11
+ var _main = require("../main");
12
+
13
+ jest.mock('@pie-lib/text-select', function () {
14
+ return {
15
+ prepareText: jest.fn()
16
+ };
17
+ });
18
+ describe('main', function () {
19
+ var getWrapper = function getWrapper(props) {
20
+ return (0, _enzyme.shallow)( /*#__PURE__*/_react["default"].createElement(_main.Main, (0, _extends2["default"])({
21
+ onSelectionChange: jest.fn(),
22
+ model: {
23
+ text: 'foo',
24
+ tokens: [{
25
+ start: 0,
26
+ end: 1,
27
+ text: 'f'
28
+ }]
29
+ },
30
+ session: {
31
+ selectedTokens: [{
32
+ start: 0,
33
+ end: 1,
34
+ text: 'f'
35
+ }]
36
+ },
37
+ classes: {}
38
+ }, props)));
39
+ };
40
+
41
+ describe('snapshot', function () {
42
+ it('renders', function () {
43
+ var w = getWrapper();
44
+ expect(w).toMatchSnapshot();
45
+ });
46
+ it('renders rationale', function () {
47
+ var w = getWrapper({
48
+ rationale: 'This is rationale '
49
+ });
50
+ expect(w).toMatchSnapshot();
51
+ });
52
+ it('renders showCorrect', function () {
53
+ var w = getWrapper();
54
+ w.instance().toggleShowCorrect();
55
+ expect(w).toMatchSnapshot();
56
+ });
57
+ });
58
+ describe('logic', function () {
59
+ var w;
60
+ beforeEach(function () {
61
+ w = getWrapper();
62
+ });
63
+ it('shows correct answer', function () {
64
+ var correctTokens = [{
65
+ start: 0,
66
+ end: 1,
67
+ text: 'f',
68
+ correct: true,
69
+ oldStart: 0,
70
+ oldEnd: 1
71
+ }];
72
+ w.setProps({
73
+ model: {
74
+ text: 'foo',
75
+ tokens: correctTokens
76
+ }
77
+ });
78
+ var result = w.instance().correctAnswer();
79
+ expect(result).toEqual(correctTokens);
80
+ });
81
+ });
82
+ });
83
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vbWFpbi50ZXN0LmpzeCJdLCJuYW1lcyI6WyJqZXN0IiwibW9jayIsInByZXBhcmVUZXh0IiwiZm4iLCJkZXNjcmliZSIsImdldFdyYXBwZXIiLCJwcm9wcyIsInRleHQiLCJ0b2tlbnMiLCJzdGFydCIsImVuZCIsInNlbGVjdGVkVG9rZW5zIiwiaXQiLCJ3IiwiZXhwZWN0IiwidG9NYXRjaFNuYXBzaG90IiwicmF0aW9uYWxlIiwiaW5zdGFuY2UiLCJ0b2dnbGVTaG93Q29ycmVjdCIsImJlZm9yZUVhY2giLCJjb3JyZWN0VG9rZW5zIiwiY29ycmVjdCIsIm9sZFN0YXJ0Iiwib2xkRW5kIiwic2V0UHJvcHMiLCJtb2RlbCIsInJlc3VsdCIsImNvcnJlY3RBbnN3ZXIiLCJ0b0VxdWFsIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFFQUEsSUFBSSxDQUFDQyxJQUFMLENBQVUsc0JBQVYsRUFBa0M7QUFBQSxTQUFPO0FBQ3ZDQyxJQUFBQSxXQUFXLEVBQUVGLElBQUksQ0FBQ0csRUFBTDtBQUQwQixHQUFQO0FBQUEsQ0FBbEM7QUFJQUMsUUFBUSxDQUFDLE1BQUQsRUFBUyxZQUFNO0FBQ3JCLE1BQU1DLFVBQVUsR0FBRyxTQUFiQSxVQUFhLENBQUFDLEtBQUssRUFBSTtBQUMxQixXQUFPLG1DQUNMLGdDQUFDLFVBQUQ7QUFDRSxNQUFBLGlCQUFpQixFQUFFTixJQUFJLENBQUNHLEVBQUwsRUFEckI7QUFFRSxNQUFBLEtBQUssRUFBRTtBQUNMSSxRQUFBQSxJQUFJLEVBQUUsS0FERDtBQUVMQyxRQUFBQSxNQUFNLEVBQUUsQ0FBQztBQUFFQyxVQUFBQSxLQUFLLEVBQUUsQ0FBVDtBQUFZQyxVQUFBQSxHQUFHLEVBQUUsQ0FBakI7QUFBb0JILFVBQUFBLElBQUksRUFBRTtBQUExQixTQUFEO0FBRkgsT0FGVDtBQU1FLE1BQUEsT0FBTyxFQUFFO0FBQ1BJLFFBQUFBLGNBQWMsRUFBRSxDQUFDO0FBQUVGLFVBQUFBLEtBQUssRUFBRSxDQUFUO0FBQVlDLFVBQUFBLEdBQUcsRUFBRSxDQUFqQjtBQUFvQkgsVUFBQUEsSUFBSSxFQUFFO0FBQTFCLFNBQUQ7QUFEVCxPQU5YO0FBU0UsTUFBQSxPQUFPLEVBQUU7QUFUWCxPQVVPRCxLQVZQLEVBREssQ0FBUDtBQWNELEdBZkQ7O0FBaUJBRixFQUFBQSxRQUFRLENBQUMsVUFBRCxFQUFhLFlBQU07QUFDekJRLElBQUFBLEVBQUUsQ0FBQyxTQUFELEVBQVksWUFBTTtBQUNsQixVQUFNQyxDQUFDLEdBQUdSLFVBQVUsRUFBcEI7QUFDQVMsTUFBQUEsTUFBTSxDQUFDRCxDQUFELENBQU4sQ0FBVUUsZUFBVjtBQUNELEtBSEMsQ0FBRjtBQUtBSCxJQUFBQSxFQUFFLENBQUMsbUJBQUQsRUFBc0IsWUFBTTtBQUM1QixVQUFNQyxDQUFDLEdBQUdSLFVBQVUsQ0FBQztBQUFFVyxRQUFBQSxTQUFTLEVBQUU7QUFBYixPQUFELENBQXBCO0FBQ0FGLE1BQUFBLE1BQU0sQ0FBQ0QsQ0FBRCxDQUFOLENBQVVFLGVBQVY7QUFDRCxLQUhDLENBQUY7QUFLQUgsSUFBQUEsRUFBRSxDQUFDLHFCQUFELEVBQXdCLFlBQU07QUFDOUIsVUFBTUMsQ0FBQyxHQUFHUixVQUFVLEVBQXBCO0FBQ0FRLE1BQUFBLENBQUMsQ0FBQ0ksUUFBRixHQUFhQyxpQkFBYjtBQUNBSixNQUFBQSxNQUFNLENBQUNELENBQUQsQ0FBTixDQUFVRSxlQUFWO0FBQ0QsS0FKQyxDQUFGO0FBS0QsR0FoQk8sQ0FBUjtBQWtCQVgsRUFBQUEsUUFBUSxDQUFDLE9BQUQsRUFBVSxZQUFNO0FBQ3RCLFFBQUlTLENBQUo7QUFFQU0sSUFBQUEsVUFBVSxDQUFDLFlBQU07QUFDZk4sTUFBQUEsQ0FBQyxHQUFHUixVQUFVLEVBQWQ7QUFDRCxLQUZTLENBQVY7QUFJQU8sSUFBQUEsRUFBRSxDQUFDLHNCQUFELEVBQXlCLFlBQU07QUFDL0IsVUFBTVEsYUFBYSxHQUFHLENBQUM7QUFBRVgsUUFBQUEsS0FBSyxFQUFFLENBQVQ7QUFBWUMsUUFBQUEsR0FBRyxFQUFFLENBQWpCO0FBQW9CSCxRQUFBQSxJQUFJLEVBQUUsR0FBMUI7QUFBK0JjLFFBQUFBLE9BQU8sRUFBRSxJQUF4QztBQUE4Q0MsUUFBQUEsUUFBUSxFQUFFLENBQXhEO0FBQTJEQyxRQUFBQSxNQUFNLEVBQUU7QUFBbkUsT0FBRCxDQUF0QjtBQUNBVixNQUFBQSxDQUFDLENBQUNXLFFBQUYsQ0FBVztBQUNUQyxRQUFBQSxLQUFLLEVBQUU7QUFBRWxCLFVBQUFBLElBQUksRUFBRSxLQUFSO0FBQWVDLFVBQUFBLE1BQU0sRUFBRVk7QUFBdkI7QUFERSxPQUFYO0FBR0EsVUFBTU0sTUFBTSxHQUFHYixDQUFDLENBQUNJLFFBQUYsR0FBYVUsYUFBYixFQUFmO0FBQ0FiLE1BQUFBLE1BQU0sQ0FBQ1ksTUFBRCxDQUFOLENBQWVFLE9BQWYsQ0FBdUJSLGFBQXZCO0FBQ0QsS0FQQyxDQUFGO0FBUUQsR0FmTyxDQUFSO0FBZ0JELENBcERPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzaGFsbG93IH0gZnJvbSAnZW56eW1lJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBNYWluIH0gZnJvbSAnLi4vbWFpbic7XG5cbmplc3QubW9jaygnQHBpZS1saWIvdGV4dC1zZWxlY3QnLCAoKSA9PiAoe1xuICBwcmVwYXJlVGV4dDogamVzdC5mbigpXG59KSk7XG5cbmRlc2NyaWJlKCdtYWluJywgKCkgPT4ge1xuICBjb25zdCBnZXRXcmFwcGVyID0gcHJvcHMgPT4ge1xuICAgIHJldHVybiBzaGFsbG93KFxuICAgICAgPE1haW5cbiAgICAgICAgb25TZWxlY3Rpb25DaGFuZ2U9e2plc3QuZm4oKX1cbiAgICAgICAgbW9kZWw9e3tcbiAgICAgICAgICB0ZXh0OiAnZm9vJyxcbiAgICAgICAgICB0b2tlbnM6IFt7IHN0YXJ0OiAwLCBlbmQ6IDEsIHRleHQ6ICdmJyB9XVxuICAgICAgICB9fVxuICAgICAgICBzZXNzaW9uPXt7XG4gICAgICAgICAgc2VsZWN0ZWRUb2tlbnM6IFt7IHN0YXJ0OiAwLCBlbmQ6IDEsIHRleHQ6ICdmJyB9XVxuICAgICAgICB9fVxuICAgICAgICBjbGFzc2VzPXt7fX1cbiAgICAgICAgeyAuLi5wcm9wcyB9XG4gICAgICAvPlxuICAgICk7XG4gIH07XG5cbiAgZGVzY3JpYmUoJ3NuYXBzaG90JywgKCkgPT4ge1xuICAgIGl0KCdyZW5kZXJzJywgKCkgPT4ge1xuICAgICAgY29uc3QgdyA9IGdldFdyYXBwZXIoKTtcbiAgICAgIGV4cGVjdCh3KS50b01hdGNoU25hcHNob3QoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIHJhdGlvbmFsZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHcgPSBnZXRXcmFwcGVyKHsgcmF0aW9uYWxlOiAnVGhpcyBpcyByYXRpb25hbGUgJ30pO1xuICAgICAgZXhwZWN0KHcpLnRvTWF0Y2hTbmFwc2hvdCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgc2hvd0NvcnJlY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCB3ID0gZ2V0V3JhcHBlcigpO1xuICAgICAgdy5pbnN0YW5jZSgpLnRvZ2dsZVNob3dDb3JyZWN0KCk7XG4gICAgICBleHBlY3QodykudG9NYXRjaFNuYXBzaG90KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdsb2dpYycsICgpID0+IHtcbiAgICBsZXQgdztcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgdyA9IGdldFdyYXBwZXIoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG93cyBjb3JyZWN0IGFuc3dlcicsICgpID0+IHtcbiAgICAgIGNvbnN0IGNvcnJlY3RUb2tlbnMgPSBbeyBzdGFydDogMCwgZW5kOiAxLCB0ZXh0OiAnZicsIGNvcnJlY3Q6IHRydWUsIG9sZFN0YXJ0OiAwLCBvbGRFbmQ6IDEgfV07XG4gICAgICB3LnNldFByb3BzKHtcbiAgICAgICAgbW9kZWw6IHsgdGV4dDogJ2ZvbycsIHRva2VuczogY29ycmVjdFRva2VucyB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHcuaW5zdGFuY2UoKS5jb3JyZWN0QW5zd2VyKCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGNvcnJlY3RUb2tlbnMpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19