@pie-element/select-text 7.6.1-beta.1 → 7.6.1-beta.4

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.
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = void 0;
8
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
9
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
11
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
12
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
13
+ var _wrapNativeSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapNativeSuper"));
14
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
+ var _react = _interopRequireDefault(require("react"));
16
+ var _reactDom = _interopRequireDefault(require("react-dom"));
17
+ var _design = _interopRequireDefault(require("./design"));
18
+ var _pieConfigureEvents = require("@pie-framework/pie-configure-events");
19
+ var _defaultConfiguration = _interopRequireDefault(require("./defaultConfiguration"));
20
+ var _utils = require("./utils");
21
+ 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; }
22
+ 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; }
23
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
24
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
25
+ var SelectTextConfigure = /*#__PURE__*/function (_HTMLElement) {
26
+ (0, _inherits2["default"])(SelectTextConfigure, _HTMLElement);
27
+ var _super = _createSuper(SelectTextConfigure);
28
+ function SelectTextConfigure() {
29
+ var _this;
30
+ (0, _classCallCheck2["default"])(this, SelectTextConfigure);
31
+ _this = _super.call(this);
32
+ _this._model = SelectTextConfigure.createDefaultModel();
33
+ _this._configuration = _defaultConfiguration["default"].configuration;
34
+ return _this;
35
+ }
36
+ (0, _createClass2["default"])(SelectTextConfigure, [{
37
+ key: "model",
38
+ set: function set(m) {
39
+ this._model = SelectTextConfigure.createDefaultModel(m);
40
+ this.render();
41
+ }
42
+ }, {
43
+ key: "configuration",
44
+ set: function set(c) {
45
+ this._configuration = c;
46
+ this.render();
47
+ }
48
+ }, {
49
+ key: "connectedCallback",
50
+ value: function connectedCallback() {
51
+ this.render();
52
+ }
53
+ }, {
54
+ key: "modelChanged",
55
+ value: function modelChanged(m) {
56
+ this._model = m;
57
+ this.dispatchEvent(new _pieConfigureEvents.ModelUpdatedEvent(this._model), true);
58
+ this.render();
59
+ }
60
+ }, {
61
+ key: "onConfigurationChanged",
62
+ value: function onConfigurationChanged(c) {
63
+ this._configuration = c;
64
+ if (this._model) {
65
+ this.dispatchEvent(new _pieConfigureEvents.ModelUpdatedEvent(this._model), false);
66
+ }
67
+ this.render();
68
+ }
69
+
70
+ /**
71
+ *
72
+ * @param {done, progress, file} handler
73
+ */
74
+ }, {
75
+ key: "insertImage",
76
+ value: function insertImage(handler) {
77
+ this.dispatchEvent(new _pieConfigureEvents.InsertImageEvent(handler));
78
+ }
79
+ }, {
80
+ key: "onDeleteImage",
81
+ value: function onDeleteImage(src, done) {
82
+ this.dispatchEvent(new _pieConfigureEvents.DeleteImageEvent(src, done));
83
+ }
84
+ }, {
85
+ key: "insertSound",
86
+ value: function insertSound(handler) {
87
+ this.dispatchEvent(new _pieConfigureEvents.InsertSoundEvent(handler));
88
+ }
89
+ }, {
90
+ key: "onDeleteSound",
91
+ value: function onDeleteSound(src, done) {
92
+ this.dispatchEvent(new _pieConfigureEvents.DeleteSoundEvent(src, done));
93
+ }
94
+ }, {
95
+ key: "render",
96
+ value: function render() {
97
+ if (this._model) {
98
+ var el = /*#__PURE__*/_react["default"].createElement(_design["default"], {
99
+ model: this._model,
100
+ configuration: this._configuration,
101
+ onModelChanged: this.modelChanged.bind(this),
102
+ onConfigurationChanged: this.onConfigurationChanged.bind(this),
103
+ imageSupport: {
104
+ add: this.insertImage.bind(this),
105
+ "delete": this.onDeleteImage.bind(this)
106
+ },
107
+ uploadSoundSupport: {
108
+ add: this.insertSound.bind(this),
109
+ "delete": this.onDeleteSound.bind(this)
110
+ }
111
+ });
112
+ _reactDom["default"].render(el, this);
113
+ }
114
+ }
115
+ }]);
116
+ return SelectTextConfigure;
117
+ }( /*#__PURE__*/(0, _wrapNativeSuper2["default"])(HTMLElement));
118
+ exports["default"] = SelectTextConfigure;
119
+ (0, _defineProperty2["default"])(SelectTextConfigure, "createDefaultModel", function () {
120
+ var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
121
+ var newModel = _objectSpread(_objectSpread({}, _defaultConfiguration["default"].model), model);
122
+ return (0, _utils.generateModel)(newModel);
123
+ });
124
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_reactDom","_design","_pieConfigureEvents","_defaultConfiguration","_utils","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","result","NewTarget","constructor","Reflect","construct","_possibleConstructorReturn2","sham","Proxy","Boolean","prototype","valueOf","call","e","SelectTextConfigure","_HTMLElement","_inherits2","_super","_this","_classCallCheck2","_model","createDefaultModel","_configuration","defaultValues","configuration","_createClass2","set","m","render","c","value","connectedCallback","modelChanged","dispatchEvent","ModelUpdatedEvent","onConfigurationChanged","insertImage","handler","InsertImageEvent","onDeleteImage","src","done","DeleteImageEvent","insertSound","InsertSoundEvent","onDeleteSound","DeleteSoundEvent","el","React","createElement","Main","model","onModelChanged","bind","imageSupport","add","uploadSoundSupport","ReactDOM","_wrapNativeSuper2","HTMLElement","exports","undefined","newModel","generateModel"],"sources":["../src/index.js"],"sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport Main from './design';\nimport {\n ModelUpdatedEvent,\n DeleteImageEvent,\n InsertImageEvent,\n InsertSoundEvent,\n DeleteSoundEvent,\n} from '@pie-framework/pie-configure-events';\nimport defaultValues from './defaultConfiguration';\nimport { generateModel } from './utils';\n\nexport default class SelectTextConfigure extends HTMLElement {\n static createDefaultModel = (model = {}) => {\n const newModel = {\n ...defaultValues.model,\n ...model,\n };\n\n return generateModel(newModel);\n };\n\n constructor() {\n super();\n this._model = SelectTextConfigure.createDefaultModel();\n this._configuration = defaultValues.configuration;\n }\n\n set model(m) {\n this._model = SelectTextConfigure.createDefaultModel(m);\n this.render();\n }\n\n set configuration(c) {\n this._configuration = c;\n this.render();\n }\n\n connectedCallback() {\n this.render();\n }\n\n modelChanged(m) {\n this._model = m;\n this.dispatchEvent(new ModelUpdatedEvent(this._model), true);\n this.render();\n }\n\n onConfigurationChanged(c) {\n this._configuration = c;\n\n if (this._model) {\n this.dispatchEvent(new ModelUpdatedEvent(this._model), false);\n }\n\n this.render();\n }\n\n /**\n *\n * @param {done, progress, file} handler\n */\n insertImage(handler) {\n this.dispatchEvent(new InsertImageEvent(handler));\n }\n\n onDeleteImage(src, done) {\n this.dispatchEvent(new DeleteImageEvent(src, done));\n }\n\n insertSound(handler) {\n this.dispatchEvent(new InsertSoundEvent(handler));\n }\n\n onDeleteSound(src, done) {\n this.dispatchEvent(new DeleteSoundEvent(src, done));\n }\n\n render() {\n if (this._model) {\n const el = React.createElement(Main, {\n model: this._model,\n configuration: this._configuration,\n onModelChanged: this.modelChanged.bind(this),\n onConfigurationChanged: this.onConfigurationChanged.bind(this),\n imageSupport: {\n add: this.insertImage.bind(this),\n delete: this.onDeleteImage.bind(this),\n },\n uploadSoundSupport: {\n add: this.insertSound.bind(this),\n delete: this.onDeleteSound.bind(this),\n },\n });\n\n ReactDOM.render(el, this);\n }\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.generateValidationMessage = exports.generateModel = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
10
+ var _react = _interopRequireDefault(require("react"));
11
+ 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; }
12
+ 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; }
13
+ var createElementFromHTML = function createElementFromHTML() {
14
+ var htmlString = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
15
+ var div = document.createElement('div');
16
+ div.innerHTML = htmlString.trim();
17
+ return div;
18
+ };
19
+ var parseParagraph = function parseParagraph(paragraph, end) {
20
+ if (end) {
21
+ return paragraph.innerHTML;
22
+ }
23
+ return ''.concat(paragraph.innerHTML, '\n\n');
24
+ };
25
+ var parseParagraphs = function parseParagraphs(dom) {
26
+ var paragraphs = dom.querySelectorAll('div[separator=true]'); // separate variable for easily debugging, if needed
27
+
28
+ var str = '';
29
+ paragraphs.forEach(function (par, index) {
30
+ str += parseParagraph(par, index === paragraphs.length - 1);
31
+ });
32
+ return str || null;
33
+ };
34
+ var prepareText = function prepareText(text) {
35
+ var txtDom = createElementFromHTML(text);
36
+ var div = document.createElement('div');
37
+ div.innerHTML = "<div separator='true'>".concat(txtDom.innerHTML, '</div>');
38
+ txtDom = div;
39
+ var allDomElements = Array.from(txtDom.querySelectorAll('*'));
40
+ if (allDomElements.length === 0) {
41
+ return text;
42
+ }
43
+ return parseParagraphs(txtDom);
44
+ };
45
+ var generateModel = function generateModel(model) {
46
+ if (!model) return model;
47
+
48
+ // parsing
49
+ var modelText = prepareText(model.text || '');
50
+ var newTokens = (model.tokens || []).reduce(function (acc) {
51
+ var token = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
52
+ var tokenText = prepareText((model.text || '').slice(token.start, token.end));
53
+ if (!tokenText) {
54
+ return [].concat((0, _toConsumableArray2["default"])(acc), [token]);
55
+ }
56
+ var getStartIndex = function getStartIndex(start) {
57
+ var length = start;
58
+ while (length >= 0) {
59
+ var newStartIndex = modelText.slice(length).indexOf(tokenText);
60
+ if (newStartIndex >= 0) {
61
+ return newStartIndex + length;
62
+ }
63
+ length--;
64
+ }
65
+ return 0;
66
+ };
67
+ var lastToken = acc[acc.length - 1];
68
+ var newStart = getStartIndex(lastToken ? lastToken.end : token.start);
69
+ var newEnd = newStart + tokenText.length;
70
+ return [].concat((0, _toConsumableArray2["default"])(acc), [_objectSpread(_objectSpread({}, token), {}, {
71
+ text: tokenText,
72
+ start: newStart,
73
+ end: newEnd,
74
+ // needed for getScore when tokens position is recalculated
75
+ oldStart: token.start,
76
+ oldEnd: token.end
77
+ })]);
78
+ }, []);
79
+ return _objectSpread(_objectSpread({}, model), {}, {
80
+ tokens: newTokens,
81
+ text: modelText
82
+ });
83
+ };
84
+ exports.generateModel = generateModel;
85
+ var generateValidationMessage = function generateValidationMessage(config) {
86
+ var minTokens = config.minTokens,
87
+ maxTokens = config.maxTokens,
88
+ maxSelections = config.maxSelections;
89
+ var tokensMessage = "\nThere should be at least ".concat(minTokens, " ") + (maxTokens ? "and at most ".concat(maxTokens, " ") : '') + 'tokens defined.';
90
+ var selectionsMessage = "\nThere should be at least 1 " + (maxSelections ? "and at most ".concat(maxSelections, " ") : '') + 'token' + (maxSelections ? 's' : '') + ' selected.';
91
+ var message = 'Validation requirements:' + tokensMessage + selectionsMessage;
92
+ return message;
93
+ };
94
+ exports.generateValidationMessage = generateValidationMessage;
95
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","names":["_react","_interopRequireDefault","require","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","createElementFromHTML","htmlString","undefined","div","document","createElement","innerHTML","trim","parseParagraph","paragraph","end","concat","parseParagraphs","dom","paragraphs","querySelectorAll","str","par","index","prepareText","text","txtDom","allDomElements","Array","from","generateModel","model","modelText","newTokens","tokens","reduce","acc","token","tokenText","slice","start","_toConsumableArray2","getStartIndex","newStartIndex","indexOf","lastToken","newStart","newEnd","oldStart","oldEnd","exports","generateValidationMessage","config","minTokens","maxTokens","maxSelections","tokensMessage","selectionsMessage","message"],"sources":["../src/utils.js"],"sourcesContent":["import React from 'react';\n\nvar createElementFromHTML = function createElementFromHTML() {\n var htmlString = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var div = document.createElement('div');\n div.innerHTML = htmlString.trim();\n return div;\n};\n\nvar parseParagraph = function parseParagraph(paragraph, end) {\n if (end) {\n return paragraph.innerHTML;\n }\n\n return ''.concat(paragraph.innerHTML, '\\n\\n');\n};\n\nvar parseParagraphs = function parseParagraphs(dom) {\n var paragraphs = dom.querySelectorAll('div[separator=true]'); // separate variable for easily debugging, if needed\n\n var str = '';\n paragraphs.forEach(function (par, index) {\n str += parseParagraph(par, index === paragraphs.length - 1);\n });\n return str || null;\n};\n\nvar prepareText = function prepareText(text) {\n var txtDom = createElementFromHTML(text);\n\n var div = document.createElement('div');\n div.innerHTML = \"<div separator='true'>\".concat(txtDom.innerHTML, '</div>');\n txtDom = div;\n\n var allDomElements = Array.from(txtDom.querySelectorAll('*'));\n\n if (allDomElements.length === 0) {\n return text;\n }\n\n return parseParagraphs(txtDom);\n};\n\nexport const generateModel = (model) => {\n if (!model) return model;\n\n // parsing\n const modelText = prepareText(model.text || '');\n\n const newTokens = (model.tokens || []).reduce((acc, token = {}) => {\n const tokenText = prepareText((model.text || '').slice(token.start, token.end));\n\n if (!tokenText) {\n return [...acc, token];\n }\n\n const getStartIndex = (start) => {\n let length = start;\n\n while (length >= 0) {\n let newStartIndex = modelText.slice(length).indexOf(tokenText);\n\n if (newStartIndex >= 0) {\n return newStartIndex + length;\n }\n\n length--;\n }\n\n return 0;\n };\n\n const lastToken = acc[acc.length - 1];\n const newStart = getStartIndex(lastToken ? lastToken.end : token.start);\n const newEnd = newStart + tokenText.length;\n\n return [\n ...acc,\n {\n ...token,\n text: tokenText,\n start: newStart,\n end: newEnd,\n // needed for getScore when tokens position is recalculated\n oldStart: token.start,\n oldEnd: token.end,\n },\n ];\n }, []);\n\n return {\n ...model,\n tokens: newTokens,\n text: modelText,\n };\n};\n\nexport const generateValidationMessage = (config) => {\n const { minTokens, maxTokens, maxSelections } = config;\n\n const tokensMessage =\n `\\nThere should be at least ${minTokens} ` + (maxTokens ? `and at most ${maxTokens} ` : '') + 'tokens defined.';\n\n const selectionsMessage =\n `\\nThere should be at least 1 ` +\n (maxSelections ? `and at most ${maxSelections} ` : '') +\n 'token' +\n (maxSelections ? 's' : '') +\n ' selected.';\n\n const message = 'Validation requirements:' + tokensMessage + selectionsMessage;\n\n return message;\n};\n"],"mappings":"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"}
@@ -8,9 +8,9 @@
8
8
  "dependencies": {
9
9
  "@material-ui/core": "^3.9.2",
10
10
  "@pie-framework/pie-configure-events": "^1.3.0",
11
- "@pie-lib/config-ui": "12.0.0-beta.4",
12
- "@pie-lib/editable-html": "10.0.0-beta.5",
13
- "@pie-lib/scoring-config": "4.0.0-beta.3",
11
+ "@pie-lib/config-ui": "12.0.0-beta.5",
12
+ "@pie-lib/editable-html": "10.0.0-beta.7",
13
+ "@pie-lib/scoring-config": "4.0.0-beta.4",
14
14
  "@pie-lib/text-select": "^1.9.12",
15
15
  "debug": "^3.1.0",
16
16
  "lodash": "^4.17.15",
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = void 0;
7
+ var tokens = function tokens() {
8
+ return [{
9
+ text: 'Rachel cut out 8 stars in 6 minutes.',
10
+ start: 0,
11
+ end: 36
12
+ }, {
13
+ text: 'Lovelle cut out 6 stars in 4 minutes.',
14
+ start: 37,
15
+ end: 74
16
+ }, {
17
+ text: 'Lovelle and Rachel cut the same number of stars in 6 minutes.',
18
+ start: 117,
19
+ end: 177
20
+ }];
21
+ };
22
+ var _default = {
23
+ highlightChoices: true,
24
+ maxSelections: 2,
25
+ prompt: 'What sentences contain the character 6 in them?',
26
+ text: 'Rachel cut out 8 stars in 6 minutes. Lovelle cut out 6 stars in 4 minutes. Rachel cut out 4 more stars than Lovelle. Lovelle and Rachel cut the same number of stars in 6 minutes.',
27
+ tokens: tokens()
28
+ };
29
+ exports["default"] = _default;
30
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","names":["tokens","text","start","end","_default","highlightChoices","maxSelections","prompt","exports"],"sources":["../src/defaults.js"],"sourcesContent":["const tokens = () => [\n {\n text: 'Rachel cut out 8 stars in 6 minutes.',\n start: 0,\n end: 36,\n },\n {\n text: 'Lovelle cut out 6 stars in 4 minutes.',\n start: 37,\n end: 74,\n },\n {\n text: 'Lovelle and Rachel cut the same number of stars in 6 minutes.',\n start: 117,\n end: 177,\n },\n];\n\nexport default {\n highlightChoices: true,\n maxSelections: 2,\n prompt: 'What sentences contain the character 6 in them?',\n text: 'Rachel cut out 8 stars in 6 minutes. Lovelle cut out 6 stars in 4 minutes. Rachel cut out 4 more stars than Lovelle. Lovelle and Rachel cut the same number of stars in 6 minutes.',\n tokens: tokens(),\n};\n"],"mappings":";;;;;;AAAA,IAAMA,MAAM,GAAG,SAATA,MAAMA,CAAA;EAAA,OAAS,CACnB;IACEC,IAAI,EAAE,sCAAsC;IAC5CC,KAAK,EAAE,CAAC;IACRC,GAAG,EAAE;EACP,CAAC,EACD;IACEF,IAAI,EAAE,uCAAuC;IAC7CC,KAAK,EAAE,EAAE;IACTC,GAAG,EAAE;EACP,CAAC,EACD;IACEF,IAAI,EAAE,+DAA+D;IACrEC,KAAK,EAAE,GAAG;IACVC,GAAG,EAAE;EACP,CAAC,CACF;AAAA;AAAC,IAAAC,QAAA,GAEa;EACbC,gBAAgB,EAAE,IAAI;EACtBC,aAAa,EAAE,CAAC;EAChBC,MAAM,EAAE,iDAAiD;EACzDN,IAAI,EAAE,oLAAoL;EAC1LD,MAAM,EAAEA,MAAM,CAAC;AACjB,CAAC;AAAAQ,OAAA,cAAAJ,QAAA"}
@@ -0,0 +1,207 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.createCorrectResponseSession = void 0;
8
+ exports.createDefaultModel = createDefaultModel;
9
+ exports.validate = exports.outcome = exports.normalizeSession = exports.normalize = exports.model = exports.getPartialScore = exports.getCorrectness = void 0;
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+ var _debug = _interopRequireDefault(require("debug"));
12
+ var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
13
+ var _feedback = require("@pie-lib/feedback");
14
+ var _controllerUtils = require("@pie-lib/controller-utils");
15
+ var _defaults = _interopRequireDefault(require("./defaults"));
16
+ 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; }
17
+ 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; }
18
+ var log = (0, _debug["default"])('@pie-element:select-text:controller');
19
+ var buildTokens = function buildTokens(tokens, evaluateMode) {
20
+ tokens = tokens || [];
21
+ return tokens.map(function (t) {
22
+ return Object.assign({}, t, evaluateMode ? {
23
+ correct: !!t.correct
24
+ } : {
25
+ correct: undefined
26
+ });
27
+ });
28
+ };
29
+ var getCorrectness = function getCorrectness(tokens, selected) {
30
+ var correct = tokens.filter(function (t) {
31
+ return t.correct === true;
32
+ });
33
+ if (correct.length === 0) {
34
+ return 'unknown';
35
+ }
36
+ var correctSelected = getCorrectSelected(tokens, selected);
37
+ if (correctSelected.length === selected.length) {
38
+ if (correctSelected.length === correct.length) {
39
+ return 'correct';
40
+ } else if (correctSelected.length > 0) {
41
+ return 'partially-correct';
42
+ }
43
+ }
44
+ if (correctSelected.length > 0) {
45
+ return 'partially-correct';
46
+ }
47
+ return 'incorrect';
48
+ };
49
+ exports.getCorrectness = getCorrectness;
50
+ var getCorrectSelected = function getCorrectSelected(tokens, selected) {
51
+ return (selected || []).filter(function (s) {
52
+ var index = tokens.findIndex(function (c) {
53
+ return c.correct && (c.start === s.start && c.end === s.end ||
54
+ // this case is used for the cases when the token's start & end were recalculated
55
+ c.start === s.oldStart && c.end === s.oldEnd);
56
+ });
57
+ return index !== -1;
58
+ });
59
+ };
60
+ var getCorrectCount = function getCorrectCount(tokens, selected) {
61
+ return getCorrectSelected(tokens, selected).length;
62
+ };
63
+ var getPartialScore = function getPartialScore(question, session, totalCorrect) {
64
+ if (!session || (0, _isEmpty["default"])(session)) {
65
+ return 0;
66
+ }
67
+ var correctCount = getCorrectCount(question.tokens, session.selectedTokens);
68
+ var correctTokens = (question.tokens || []).filter(function (t) {
69
+ return t.correct === true;
70
+ });
71
+ var extraSelected = session.selectedTokens ? session.selectedTokens.length > correctTokens.length : 0;
72
+ var incorrectCount = extraSelected ? session.selectedTokens && session.selectedTokens.length - correctCount : 0;
73
+ var count = correctCount - incorrectCount;
74
+ var positiveCount = count < 0 ? 0 : count;
75
+ return totalCorrect.length ? parseFloat((positiveCount / totalCorrect.length).toFixed(2)) : 0;
76
+ };
77
+ exports.getPartialScore = getPartialScore;
78
+ var outcome = function outcome(question, session, env) {
79
+ return new Promise(function (resolve) {
80
+ if (!session || (0, _isEmpty["default"])(session)) {
81
+ resolve({
82
+ score: 0,
83
+ empty: true
84
+ });
85
+ }
86
+ session = normalizeSession(session);
87
+ if (env.mode !== 'evaluate') {
88
+ resolve({
89
+ score: undefined,
90
+ completed: undefined
91
+ });
92
+ } else {
93
+ var enabled = _controllerUtils.partialScoring.enabled(question, env, true);
94
+ var totalCorrect = question.tokens.filter(function (t) {
95
+ return t.correct;
96
+ });
97
+ var score = getPartialScore(question, session, totalCorrect);
98
+ resolve({
99
+ score: enabled ? score : score === 1 ? 1 : 0
100
+ });
101
+ }
102
+ });
103
+ };
104
+ exports.outcome = outcome;
105
+ function createDefaultModel() {
106
+ var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
107
+ return new Promise(function (resolve) {
108
+ resolve(_objectSpread(_objectSpread({}, _defaults["default"]), model));
109
+ });
110
+ }
111
+ var normalizeSession = function normalizeSession(s) {
112
+ return _objectSpread({
113
+ selectedTokens: []
114
+ }, s);
115
+ };
116
+ exports.normalizeSession = normalizeSession;
117
+ var normalize = function normalize(question) {
118
+ return _objectSpread({
119
+ feedbackEnabled: true,
120
+ rationaleEnabled: true,
121
+ promptEnabled: true,
122
+ teacherInstructionsEnabled: true,
123
+ studentInstructionsEnabled: true
124
+ }, question);
125
+ };
126
+ exports.normalize = normalize;
127
+ var model = function model(question, session, env) {
128
+ session = session || {
129
+ selectedToken: []
130
+ };
131
+ session.selectedTokens = session.selectedTokens || [];
132
+ var normalizedQuestion = normalize(question);
133
+ return new Promise(function (resolve) {
134
+ log('[model]', 'normalizedQuestion: ', normalizedQuestion);
135
+ log('[model]', 'session: ', session);
136
+ var tokens = buildTokens(normalizedQuestion.tokens, env.mode === 'evaluate');
137
+ log('tokens:', tokens);
138
+ var correctness = env.mode === 'evaluate' ? getCorrectness(normalizedQuestion.tokens, session.selectedTokens) : undefined;
139
+ var fb = env.mode === 'evaluate' && normalizedQuestion.feedbackEnabled ? (0, _feedback.getFeedbackForCorrectness)(correctness, normalizedQuestion.feedback) : Promise.resolve(undefined);
140
+ fb.then(function (feedback) {
141
+ var out = {
142
+ tokens: tokens,
143
+ highlightChoices: normalizedQuestion.highlightChoices,
144
+ prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null,
145
+ text: normalizedQuestion.text,
146
+ disabled: env.mode !== 'gather',
147
+ maxSelections: normalizedQuestion.maxSelections,
148
+ correctness: correctness,
149
+ feedback: feedback,
150
+ incorrect: env.mode === 'evaluate' ? correctness !== 'correct' : undefined
151
+ };
152
+ if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {
153
+ out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;
154
+ out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled ? normalizedQuestion.teacherInstructions : null;
155
+ } else {
156
+ out.rationale = null;
157
+ out.teacherInstructions = null;
158
+ }
159
+ resolve(out);
160
+ });
161
+ });
162
+ };
163
+ exports.model = model;
164
+ var createCorrectResponseSession = function createCorrectResponseSession(question, env) {
165
+ return new Promise(function (resolve) {
166
+ if (env.mode !== 'evaluate' && env.role === 'instructor') {
167
+ var tokens = question.tokens;
168
+ var selectedTokens = tokens.filter(function (t) {
169
+ return t.correct;
170
+ });
171
+ resolve({
172
+ id: '1',
173
+ selectedTokens: selectedTokens
174
+ });
175
+ } else {
176
+ resolve(null);
177
+ }
178
+ });
179
+ };
180
+ exports.createCorrectResponseSession = createCorrectResponseSession;
181
+ var validate = function validate() {
182
+ var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
183
+ var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
184
+ var tokens = model.tokens;
185
+ var _config$minTokens = config.minTokens,
186
+ minTokens = _config$minTokens === void 0 ? 2 : _config$minTokens,
187
+ maxTokens = config.maxTokens,
188
+ maxSelections = config.maxSelections;
189
+ var errors = {};
190
+ var nbOfTokens = (tokens || []).length;
191
+ var nbOfSelections = (tokens || []).reduce(function (acc, token) {
192
+ return token.correct ? acc + 1 : acc;
193
+ }, 0);
194
+ if (nbOfTokens < minTokens) {
195
+ errors.tokensError = "There should be at least ".concat(minTokens, " tokens defined.");
196
+ } else if (nbOfTokens > maxTokens) {
197
+ errors.tokensError = "No more than ".concat(maxTokens, " tokens should be defined.");
198
+ }
199
+ if (nbOfSelections < 1) {
200
+ errors.selectionsError = 'There should be at least 1 token selected.';
201
+ } else if (nbOfSelections > maxSelections) {
202
+ errors.selectionsError = "No more than ".concat(maxSelections, " tokens should be selected.");
203
+ }
204
+ return errors;
205
+ };
206
+ exports.validate = validate;
207
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_debug","_interopRequireDefault","require","_isEmpty","_feedback","_controllerUtils","_defaults","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","log","debug","buildTokens","tokens","evaluateMode","map","t","assign","correct","undefined","getCorrectness","selected","correctSelected","getCorrectSelected","exports","s","index","findIndex","c","start","end","oldStart","oldEnd","getCorrectCount","getPartialScore","question","session","totalCorrect","isEmpty","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","getFeedbackForCorrectness","feedback","then","out","highlightChoices","prompt","text","disabled","maxSelections","incorrect","role","rationale","teacherInstructions","createCorrectResponseSession","id","validate","config","_config$minTokens","minTokens","maxTokens","errors","nbOfTokens","nbOfSelections","reduce","acc","token","tokensError","concat","selectionsError"],"sources":["../src/index.js"],"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) => Object.assign({}, t, evaluateMode ? { correct: !!t.correct } : { correct: undefined }));\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 (\n c.correct &&\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) => 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 ? parseFloat((positiveCount / totalCorrect.length).toFixed(2)) : 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\n return new Promise((resolve) => {\n log('[model]', 'normalizedQuestion: ', normalizedQuestion);\n log('[model]', 'session: ', session);\n const tokens = buildTokens(normalizedQuestion.tokens, env.mode === 'evaluate');\n log('tokens:', tokens);\n const correctness =\n env.mode === 'evaluate' ? getCorrectness(normalizedQuestion.tokens, session.selectedTokens) : 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 ? normalizedQuestion.prompt : null,\n text: normalizedQuestion.text,\n disabled: env.mode !== 'gather',\n maxSelections: normalizedQuestion.maxSelections,\n correctness,\n feedback,\n incorrect: env.mode === 'evaluate' ? correctness !== 'correct' : undefined,\n };\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;\n out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n }\n\n 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\nexport const validate = (model = {}, config = {}) => {\n const { tokens } = model;\n const { minTokens = 2, maxTokens, maxSelections } = config;\n const errors = {};\n const nbOfTokens = (tokens || []).length;\n\n const nbOfSelections = (tokens || []).reduce((acc, token) => (token.correct ? acc + 1 : acc), 0);\n\n if (nbOfTokens < minTokens) {\n errors.tokensError = `There should be at least ${minTokens} tokens defined.`;\n } else if (nbOfTokens > maxTokens) {\n errors.tokensError = `No more than ${maxTokens} tokens should be defined.`;\n }\n\n if (nbOfSelections < 1) {\n errors.selectionsError = 'There should be at least 1 token selected.';\n } else if (nbOfSelections > maxSelections) {\n errors.selectionsError = `No more than ${maxSelections} tokens should be selected.`;\n }\n\n return errors;\n};\n"],"mappings":"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"}