@pie-element/select-text 8.11.1-next.1 → 8.11.1-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.
- package/configure/lib/defaultConfiguration.js +173 -0
- package/configure/lib/defaultConfiguration.js.map +1 -0
- package/configure/lib/design.js +505 -0
- package/configure/lib/design.js.map +1 -0
- package/configure/lib/index.js +189 -0
- package/configure/lib/index.js.map +1 -0
- package/configure/lib/utils.js +116 -0
- package/configure/lib/utils.js.map +1 -0
- package/configure/package.json +1 -1
- package/controller/lib/defaults.js +32 -0
- package/controller/lib/defaults.js.map +1 -0
- package/controller/lib/index.js +280 -0
- package/controller/lib/index.js.map +1 -0
- package/controller/package.json +1 -1
- package/lib/index.js +153 -0
- package/lib/index.js.map +1 -0
- package/lib/main.js +259 -0
- package/lib/main.js.map +1 -0
- package/lib/print.js +124 -0
- package/lib/print.js.map +1 -0
- package/lib/utils.js +104 -0
- package/lib/utils.js.map +1 -0
- package/module/configure.js +112257 -0
- package/module/controller.js +20117 -0
- package/module/demo.js +302 -0
- package/module/element.js +107099 -0
- package/module/index.html +21 -0
- package/module/manifest.json +14 -0
- package/module/print-demo.js +340 -0
- package/module/print.html +18 -0
- package/module/print.js +107056 -0
- package/package.json +3 -3
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports["default"] = void 0;
|
|
9
|
+
|
|
10
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
|
+
|
|
12
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
13
|
+
|
|
14
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
15
|
+
|
|
16
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
17
|
+
|
|
18
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
19
|
+
|
|
20
|
+
var _wrapNativeSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapNativeSuper"));
|
|
21
|
+
|
|
22
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
23
|
+
|
|
24
|
+
var _react = _interopRequireDefault(require("react"));
|
|
25
|
+
|
|
26
|
+
var _reactDom = _interopRequireDefault(require("react-dom"));
|
|
27
|
+
|
|
28
|
+
var _design = _interopRequireDefault(require("./design"));
|
|
29
|
+
|
|
30
|
+
var _pieConfigureEvents = require("@pie-framework/pie-configure-events");
|
|
31
|
+
|
|
32
|
+
var _defaultConfiguration = _interopRequireDefault(require("./defaultConfiguration"));
|
|
33
|
+
|
|
34
|
+
var _utils = require("./utils");
|
|
35
|
+
|
|
36
|
+
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; }
|
|
37
|
+
|
|
38
|
+
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; }
|
|
39
|
+
|
|
40
|
+
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); }; }
|
|
41
|
+
|
|
42
|
+
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; } }
|
|
43
|
+
|
|
44
|
+
var SelectTextConfigure = /*#__PURE__*/function (_HTMLElement) {
|
|
45
|
+
(0, _inherits2["default"])(SelectTextConfigure, _HTMLElement);
|
|
46
|
+
|
|
47
|
+
var _super = _createSuper(SelectTextConfigure);
|
|
48
|
+
|
|
49
|
+
function SelectTextConfigure() {
|
|
50
|
+
var _this;
|
|
51
|
+
|
|
52
|
+
(0, _classCallCheck2["default"])(this, SelectTextConfigure);
|
|
53
|
+
_this = _super.call(this);
|
|
54
|
+
_this._model = SelectTextConfigure.createDefaultModel();
|
|
55
|
+
_this._configuration = _defaultConfiguration["default"].configuration;
|
|
56
|
+
return _this;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
(0, _createClass2["default"])(SelectTextConfigure, [{
|
|
60
|
+
key: "model",
|
|
61
|
+
set: function set(m) {
|
|
62
|
+
this._model = SelectTextConfigure.createDefaultModel(m);
|
|
63
|
+
this.render();
|
|
64
|
+
}
|
|
65
|
+
}, {
|
|
66
|
+
key: "configuration",
|
|
67
|
+
set: function set(c) {
|
|
68
|
+
var _newConfiguration$lan,
|
|
69
|
+
_this2 = this;
|
|
70
|
+
|
|
71
|
+
var newConfiguration = _objectSpread(_objectSpread({}, _defaultConfiguration["default"].configuration), c);
|
|
72
|
+
|
|
73
|
+
this._configuration = newConfiguration; // if language:enabled is true, then the corresponding default item model should include a language value;
|
|
74
|
+
// if it is false, then the language field should be omitted from the item model.
|
|
75
|
+
// if a default item model includes a language value (e.g., en_US) and the corresponding authoring view settings have language:settings = true,
|
|
76
|
+
// then (a) language:enabled should also be true, and (b) that default language value should be represented in languageChoices[] (as a key).
|
|
77
|
+
|
|
78
|
+
if (newConfiguration !== null && newConfiguration !== void 0 && (_newConfiguration$lan = newConfiguration.language) !== null && _newConfiguration$lan !== void 0 && _newConfiguration$lan.enabled) {
|
|
79
|
+
var _newConfiguration$lan2, _newConfiguration$lan3;
|
|
80
|
+
|
|
81
|
+
if (newConfiguration !== null && newConfiguration !== void 0 && (_newConfiguration$lan2 = newConfiguration.languageChoices) !== null && _newConfiguration$lan2 !== void 0 && (_newConfiguration$lan3 = _newConfiguration$lan2.options) !== null && _newConfiguration$lan3 !== void 0 && _newConfiguration$lan3.length) {
|
|
82
|
+
this._model.language = newConfiguration === null || newConfiguration === void 0 ? void 0 : newConfiguration.languageChoices.options[0].value;
|
|
83
|
+
}
|
|
84
|
+
} else if (newConfiguration.language.settings && this._model.language) {
|
|
85
|
+
this._configuration.language.enabled = true;
|
|
86
|
+
|
|
87
|
+
if (!this._configuration.languageChoices.options || !this._configuration.languageChoices.options.length) {
|
|
88
|
+
this._configuration.languageChoices.options = [];
|
|
89
|
+
} // check if the language is already included in the languageChoices.options array
|
|
90
|
+
// and if not, then add it.
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
if (!this._configuration.languageChoices.options.find(function (option) {
|
|
94
|
+
return option.value === _this2._model.language;
|
|
95
|
+
})) {
|
|
96
|
+
this._configuration.languageChoices.options.push({
|
|
97
|
+
value: this._model.language,
|
|
98
|
+
label: this._model.language
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
} else {
|
|
102
|
+
delete this._model.language;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
this.render();
|
|
106
|
+
}
|
|
107
|
+
}, {
|
|
108
|
+
key: "connectedCallback",
|
|
109
|
+
value: function connectedCallback() {
|
|
110
|
+
this.render();
|
|
111
|
+
}
|
|
112
|
+
}, {
|
|
113
|
+
key: "modelChanged",
|
|
114
|
+
value: function modelChanged(m) {
|
|
115
|
+
this._model = m;
|
|
116
|
+
this.dispatchEvent(new _pieConfigureEvents.ModelUpdatedEvent(this._model), true);
|
|
117
|
+
this.render();
|
|
118
|
+
}
|
|
119
|
+
}, {
|
|
120
|
+
key: "onConfigurationChanged",
|
|
121
|
+
value: function onConfigurationChanged(c) {
|
|
122
|
+
this._configuration = c;
|
|
123
|
+
|
|
124
|
+
if (this._model) {
|
|
125
|
+
this.dispatchEvent(new _pieConfigureEvents.ModelUpdatedEvent(this._model), false);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
this.render();
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
*
|
|
132
|
+
* @param {done, progress, file} handler
|
|
133
|
+
*/
|
|
134
|
+
|
|
135
|
+
}, {
|
|
136
|
+
key: "insertImage",
|
|
137
|
+
value: function insertImage(handler) {
|
|
138
|
+
this.dispatchEvent(new _pieConfigureEvents.InsertImageEvent(handler));
|
|
139
|
+
}
|
|
140
|
+
}, {
|
|
141
|
+
key: "onDeleteImage",
|
|
142
|
+
value: function onDeleteImage(src, done) {
|
|
143
|
+
this.dispatchEvent(new _pieConfigureEvents.DeleteImageEvent(src, done));
|
|
144
|
+
}
|
|
145
|
+
}, {
|
|
146
|
+
key: "insertSound",
|
|
147
|
+
value: function insertSound(handler) {
|
|
148
|
+
this.dispatchEvent(new _pieConfigureEvents.InsertSoundEvent(handler));
|
|
149
|
+
}
|
|
150
|
+
}, {
|
|
151
|
+
key: "onDeleteSound",
|
|
152
|
+
value: function onDeleteSound(src, done) {
|
|
153
|
+
this.dispatchEvent(new _pieConfigureEvents.DeleteSoundEvent(src, done));
|
|
154
|
+
}
|
|
155
|
+
}, {
|
|
156
|
+
key: "render",
|
|
157
|
+
value: function render() {
|
|
158
|
+
if (this._model) {
|
|
159
|
+
var el = /*#__PURE__*/_react["default"].createElement(_design["default"], {
|
|
160
|
+
model: this._model,
|
|
161
|
+
configuration: this._configuration,
|
|
162
|
+
onModelChanged: this.modelChanged.bind(this),
|
|
163
|
+
onConfigurationChanged: this.onConfigurationChanged.bind(this),
|
|
164
|
+
imageSupport: {
|
|
165
|
+
add: this.insertImage.bind(this),
|
|
166
|
+
"delete": this.onDeleteImage.bind(this)
|
|
167
|
+
},
|
|
168
|
+
uploadSoundSupport: {
|
|
169
|
+
add: this.insertSound.bind(this),
|
|
170
|
+
"delete": this.onDeleteSound.bind(this)
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
_reactDom["default"].render(el, this);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}]);
|
|
178
|
+
return SelectTextConfigure;
|
|
179
|
+
}( /*#__PURE__*/(0, _wrapNativeSuper2["default"])(HTMLElement));
|
|
180
|
+
|
|
181
|
+
exports["default"] = SelectTextConfigure;
|
|
182
|
+
(0, _defineProperty2["default"])(SelectTextConfigure, "createDefaultModel", function () {
|
|
183
|
+
var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
184
|
+
|
|
185
|
+
var newModel = _objectSpread(_objectSpread({}, _defaultConfiguration["default"].model), model);
|
|
186
|
+
|
|
187
|
+
return (0, _utils.generateModel)(newModel);
|
|
188
|
+
});
|
|
189
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.js"],"names":["SelectTextConfigure","_model","createDefaultModel","_configuration","defaultValues","configuration","m","render","c","newConfiguration","language","enabled","languageChoices","options","length","value","settings","find","option","push","label","dispatchEvent","ModelUpdatedEvent","handler","InsertImageEvent","src","done","DeleteImageEvent","InsertSoundEvent","DeleteSoundEvent","el","React","createElement","Main","model","onModelChanged","modelChanged","bind","onConfigurationChanged","imageSupport","add","insertImage","onDeleteImage","uploadSoundSupport","insertSound","onDeleteSound","ReactDOM","HTMLElement","newModel"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AAOA;;AACA;;;;;;;;;;IAEqBA,mB;;;;;AAUnB,iCAAc;AAAA;;AAAA;AACZ;AACA,UAAKC,MAAL,GAAcD,mBAAmB,CAACE,kBAApB,EAAd;AACA,UAAKC,cAAL,GAAsBC,iCAAcC,aAApC;AAHY;AAIb;;;;SAED,aAAUC,CAAV,EAAa;AACX,WAAKL,MAAL,GAAcD,mBAAmB,CAACE,kBAApB,CAAuCI,CAAvC,CAAd;AACA,WAAKC,MAAL;AACD;;;SAED,aAAkBC,CAAlB,EAAqB;AAAA;AAAA;;AACnB,UAAMC,gBAAgB,mCACjBL,iCAAcC,aADG,GAEjBG,CAFiB,CAAtB;;AAKA,WAAKL,cAAL,GAAsBM,gBAAtB,CANmB,CAQnB;AACA;AACA;AACA;;AACA,UAAIA,gBAAJ,aAAIA,gBAAJ,wCAAIA,gBAAgB,CAAEC,QAAtB,kDAAI,sBAA4BC,OAAhC,EAAyC;AAAA;;AACvC,YAAIF,gBAAJ,aAAIA,gBAAJ,yCAAIA,gBAAgB,CAAEG,eAAtB,6EAAI,uBAAmCC,OAAvC,mDAAI,uBAA4CC,MAAhD,EAAwD;AACtD,eAAKb,MAAL,CAAYS,QAAZ,GAAuBD,gBAAvB,aAAuBA,gBAAvB,uBAAuBA,gBAAgB,CAAEG,eAAlB,CAAkCC,OAAlC,CAA0C,CAA1C,EAA6CE,KAApE;AACD;AACF,OAJD,MAIO,IAAIN,gBAAgB,CAACC,QAAjB,CAA0BM,QAA1B,IAAsC,KAAKf,MAAL,CAAYS,QAAtD,EAAgE;AACrE,aAAKP,cAAL,CAAoBO,QAApB,CAA6BC,OAA7B,GAAuC,IAAvC;;AAEA,YAAI,CAAC,KAAKR,cAAL,CAAoBS,eAApB,CAAoCC,OAArC,IAAgD,CAAC,KAAKV,cAAL,CAAoBS,eAApB,CAAoCC,OAApC,CAA4CC,MAAjG,EAAyG;AACvG,eAAKX,cAAL,CAAoBS,eAApB,CAAoCC,OAApC,GAA8C,EAA9C;AACD,SALoE,CAOrE;AACA;;;AACA,YAAI,CAAC,KAAKV,cAAL,CAAoBS,eAApB,CAAoCC,OAApC,CAA4CI,IAA5C,CAAiD,UAAAC,MAAM;AAAA,iBAAIA,MAAM,CAACH,KAAP,KAAiB,MAAI,CAACd,MAAL,CAAYS,QAAjC;AAAA,SAAvD,CAAL,EAAwG;AACtG,eAAKP,cAAL,CAAoBS,eAApB,CAAoCC,OAApC,CAA4CM,IAA5C,CAAiD;AAC/CJ,YAAAA,KAAK,EAAE,KAAKd,MAAL,CAAYS,QAD4B;AAE/CU,YAAAA,KAAK,EAAE,KAAKnB,MAAL,CAAYS;AAF4B,WAAjD;AAID;AACF,OAfM,MAeA;AACL,eAAO,KAAKT,MAAL,CAAYS,QAAnB;AACD;;AAED,WAAKH,MAAL;AACD;;;WAED,6BAAoB;AAClB,WAAKA,MAAL;AACD;;;WAED,sBAAaD,CAAb,EAAgB;AACd,WAAKL,MAAL,GAAcK,CAAd;AACA,WAAKe,aAAL,CAAmB,IAAIC,qCAAJ,CAAsB,KAAKrB,MAA3B,CAAnB,EAAuD,IAAvD;AACA,WAAKM,MAAL;AACD;;;WAED,gCAAuBC,CAAvB,EAA0B;AACxB,WAAKL,cAAL,GAAsBK,CAAtB;;AAEA,UAAI,KAAKP,MAAT,EAAiB;AACf,aAAKoB,aAAL,CAAmB,IAAIC,qCAAJ,CAAsB,KAAKrB,MAA3B,CAAnB,EAAuD,KAAvD;AACD;;AAED,WAAKM,MAAL;AACD;AAED;AACF;AACA;AACA;;;;WACE,qBAAYgB,OAAZ,EAAqB;AACnB,WAAKF,aAAL,CAAmB,IAAIG,oCAAJ,CAAqBD,OAArB,CAAnB;AACD;;;WAED,uBAAcE,GAAd,EAAmBC,IAAnB,EAAyB;AACvB,WAAKL,aAAL,CAAmB,IAAIM,oCAAJ,CAAqBF,GAArB,EAA0BC,IAA1B,CAAnB;AACD;;;WAED,qBAAYH,OAAZ,EAAqB;AACnB,WAAKF,aAAL,CAAmB,IAAIO,oCAAJ,CAAqBL,OAArB,CAAnB;AACD;;;WAED,uBAAcE,GAAd,EAAmBC,IAAnB,EAAyB;AACvB,WAAKL,aAAL,CAAmB,IAAIQ,oCAAJ,CAAqBJ,GAArB,EAA0BC,IAA1B,CAAnB;AACD;;;WAED,kBAAS;AACP,UAAI,KAAKzB,MAAT,EAAiB;AACf,YAAM6B,EAAE,gBAAGC,kBAAMC,aAAN,CAAoBC,kBAApB,EAA0B;AACnCC,UAAAA,KAAK,EAAE,KAAKjC,MADuB;AAEnCI,UAAAA,aAAa,EAAE,KAAKF,cAFe;AAGnCgC,UAAAA,cAAc,EAAE,KAAKC,YAAL,CAAkBC,IAAlB,CAAuB,IAAvB,CAHmB;AAInCC,UAAAA,sBAAsB,EAAE,KAAKA,sBAAL,CAA4BD,IAA5B,CAAiC,IAAjC,CAJW;AAKnCE,UAAAA,YAAY,EAAE;AACZC,YAAAA,GAAG,EAAE,KAAKC,WAAL,CAAiBJ,IAAjB,CAAsB,IAAtB,CADO;AAEZ,sBAAQ,KAAKK,aAAL,CAAmBL,IAAnB,CAAwB,IAAxB;AAFI,WALqB;AASnCM,UAAAA,kBAAkB,EAAE;AAClBH,YAAAA,GAAG,EAAE,KAAKI,WAAL,CAAiBP,IAAjB,CAAsB,IAAtB,CADa;AAElB,sBAAQ,KAAKQ,aAAL,CAAmBR,IAAnB,CAAwB,IAAxB;AAFU;AATe,SAA1B,CAAX;;AAeAS,6BAASvC,MAAT,CAAgBuB,EAAhB,EAAoB,IAApB;AACD;AACF;;;kDAtH8CiB,W;;;iCAA5B/C,mB,wBACS,YAAgB;AAAA,MAAfkC,KAAe,uEAAP,EAAO;;AAC1C,MAAMc,QAAQ,mCACT5C,iCAAc8B,KADL,GAETA,KAFS,CAAd;;AAKA,SAAO,0BAAcc,QAAd,CAAP;AACD,C","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 const newConfiguration = {\n ...defaultValues.configuration,\n ...c,\n };\n\n this._configuration = newConfiguration;\n\n // if language:enabled is true, then the corresponding default item model should include a language value;\n // if it is false, then the language field should be omitted from the item model.\n // if a default item model includes a language value (e.g., en_US) and the corresponding authoring view settings have language:settings = true,\n // then (a) language:enabled should also be true, and (b) that default language value should be represented in languageChoices[] (as a key).\n if (newConfiguration?.language?.enabled) {\n if (newConfiguration?.languageChoices?.options?.length) {\n this._model.language = newConfiguration?.languageChoices.options[0].value;\n }\n } else if (newConfiguration.language.settings && this._model.language) {\n this._configuration.language.enabled = true;\n\n if (!this._configuration.languageChoices.options || !this._configuration.languageChoices.options.length) {\n this._configuration.languageChoices.options = [];\n }\n\n // check if the language is already included in the languageChoices.options array\n // and if not, then add it.\n if (!this._configuration.languageChoices.options.find(option => option.value === this._model.language)) {\n this._configuration.languageChoices.options.push({\n value: this._model.language,\n label: this._model.language,\n });\n }\n } else {\n delete this._model.language;\n }\n\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"],"file":"index.js"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.generateValidationMessage = exports.generateModel = void 0;
|
|
9
|
+
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
+
|
|
12
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
13
|
+
|
|
14
|
+
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; }
|
|
15
|
+
|
|
16
|
+
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; }
|
|
17
|
+
|
|
18
|
+
var createElementFromHTML = function createElementFromHTML() {
|
|
19
|
+
var htmlString = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
20
|
+
var div = document.createElement('div');
|
|
21
|
+
div.innerHTML = htmlString.trim();
|
|
22
|
+
return div;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
var parseParagraph = function parseParagraph(paragraph, end) {
|
|
26
|
+
if (end) {
|
|
27
|
+
return paragraph.innerHTML;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return ''.concat(paragraph.innerHTML, '\n\n');
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
var parseParagraphs = function parseParagraphs(dom) {
|
|
34
|
+
var paragraphs = dom.querySelectorAll('div[separator=true]'); // separate variable for easily debugging, if needed
|
|
35
|
+
|
|
36
|
+
var str = '';
|
|
37
|
+
paragraphs.forEach(function (par, index) {
|
|
38
|
+
str += parseParagraph(par, index === paragraphs.length - 1);
|
|
39
|
+
});
|
|
40
|
+
return str || null;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
var prepareText = function prepareText(text) {
|
|
44
|
+
var txtDom = createElementFromHTML(text);
|
|
45
|
+
var div = document.createElement('div');
|
|
46
|
+
div.innerHTML = '<div separator=\'true\'>'.concat(txtDom.innerHTML, '</div>');
|
|
47
|
+
txtDom = div;
|
|
48
|
+
var allDomElements = Array.from(txtDom.querySelectorAll('*'));
|
|
49
|
+
|
|
50
|
+
if (allDomElements.length === 0) {
|
|
51
|
+
return text;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return parseParagraphs(txtDom);
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
var generateModel = function generateModel(model) {
|
|
58
|
+
if (!model) return model; // parsing
|
|
59
|
+
|
|
60
|
+
var modelText = prepareText(model.text || '');
|
|
61
|
+
var newTokens = (model.tokens || []).reduce(function (acc) {
|
|
62
|
+
var token = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
63
|
+
var tokenText = prepareText((model.text || '').slice(token.start, token.end));
|
|
64
|
+
|
|
65
|
+
if (!tokenText) {
|
|
66
|
+
return [].concat((0, _toConsumableArray2["default"])(acc), [token]);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
var getStartIndex = function getStartIndex(start) {
|
|
70
|
+
var length = start;
|
|
71
|
+
|
|
72
|
+
while (length >= 0) {
|
|
73
|
+
var newStartIndex = modelText.slice(length).indexOf(tokenText);
|
|
74
|
+
|
|
75
|
+
if (newStartIndex >= 0) {
|
|
76
|
+
return newStartIndex + length;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
length--;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return 0;
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
var lastToken = acc[acc.length - 1];
|
|
86
|
+
var newStart = getStartIndex(lastToken ? lastToken.end : token.start);
|
|
87
|
+
var newEnd = newStart + tokenText.length;
|
|
88
|
+
return [].concat((0, _toConsumableArray2["default"])(acc), [_objectSpread(_objectSpread({}, token), {}, {
|
|
89
|
+
text: tokenText,
|
|
90
|
+
start: newStart,
|
|
91
|
+
end: newEnd,
|
|
92
|
+
// needed for getScore when tokens position is recalculated
|
|
93
|
+
oldStart: token.start,
|
|
94
|
+
oldEnd: token.end
|
|
95
|
+
})]);
|
|
96
|
+
}, []);
|
|
97
|
+
return _objectSpread(_objectSpread({}, model), {}, {
|
|
98
|
+
tokens: newTokens,
|
|
99
|
+
text: modelText
|
|
100
|
+
});
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
exports.generateModel = generateModel;
|
|
104
|
+
|
|
105
|
+
var generateValidationMessage = function generateValidationMessage(config) {
|
|
106
|
+
var minTokens = config.minTokens,
|
|
107
|
+
maxTokens = config.maxTokens,
|
|
108
|
+
maxSelections = config.maxSelections;
|
|
109
|
+
var tokensMessage = "\nThere should be at least ".concat(minTokens, " ") + (maxTokens ? "and at most ".concat(maxTokens, " ") : '') + 'tokens defined.';
|
|
110
|
+
var selectionsMessage = '\nThere should be at least 1 ' + (maxSelections ? "and at most ".concat(maxSelections, " ") : '') + 'token' + (maxSelections ? 's' : '') + ' selected.';
|
|
111
|
+
var message = 'Validation requirements:' + tokensMessage + selectionsMessage;
|
|
112
|
+
return message;
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
exports.generateValidationMessage = generateValidationMessage;
|
|
116
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils.js"],"names":["createElementFromHTML","htmlString","arguments","length","undefined","div","document","createElement","innerHTML","trim","parseParagraph","paragraph","end","concat","parseParagraphs","dom","paragraphs","querySelectorAll","str","forEach","par","index","prepareText","text","txtDom","allDomElements","Array","from","generateModel","model","modelText","newTokens","tokens","reduce","acc","token","tokenText","slice","start","getStartIndex","newStartIndex","indexOf","lastToken","newStart","newEnd","oldStart","oldEnd","generateValidationMessage","config","minTokens","maxTokens","maxSelections","tokensMessage","selectionsMessage","message"],"mappings":"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","sourcesContent":["\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"],"file":"utils.js"}
|
package/configure/package.json
CHANGED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = void 0;
|
|
7
|
+
|
|
8
|
+
var tokens = function tokens() {
|
|
9
|
+
return [{
|
|
10
|
+
text: 'Rachel cut out 8 stars in 6 minutes.',
|
|
11
|
+
start: 0,
|
|
12
|
+
end: 36
|
|
13
|
+
}, {
|
|
14
|
+
text: 'Lovelle cut out 6 stars in 4 minutes.',
|
|
15
|
+
start: 37,
|
|
16
|
+
end: 74
|
|
17
|
+
}, {
|
|
18
|
+
text: 'Lovelle and Rachel cut the same number of stars in 6 minutes.',
|
|
19
|
+
start: 117,
|
|
20
|
+
end: 177
|
|
21
|
+
}];
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
var _default = {
|
|
25
|
+
highlightChoices: true,
|
|
26
|
+
maxSelections: 2,
|
|
27
|
+
prompt: 'What sentences contain the character 6 in them?',
|
|
28
|
+
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.',
|
|
29
|
+
tokens: tokens()
|
|
30
|
+
};
|
|
31
|
+
exports["default"] = _default;
|
|
32
|
+
//# sourceMappingURL=defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/defaults.js"],"names":["tokens","text","start","end","highlightChoices","maxSelections","prompt"],"mappings":";;;;;;;AAAA,IAAMA,MAAM,GAAG,SAATA,MAAS;AAAA,SAAM,CACnB;AACEC,IAAAA,IAAI,EAAE,sCADR;AAEEC,IAAAA,KAAK,EAAE,CAFT;AAGEC,IAAAA,GAAG,EAAE;AAHP,GADmB,EAMnB;AACEF,IAAAA,IAAI,EAAE,uCADR;AAEEC,IAAAA,KAAK,EAAE,EAFT;AAGEC,IAAAA,GAAG,EAAE;AAHP,GANmB,EAWnB;AACEF,IAAAA,IAAI,EAAE,+DADR;AAEEC,IAAAA,KAAK,EAAE,GAFT;AAGEC,IAAAA,GAAG,EAAE;AAHP,GAXmB,CAAN;AAAA,CAAf;;eAkBe;AACbC,EAAAA,gBAAgB,EAAE,IADL;AAEbC,EAAAA,aAAa,EAAE,CAFF;AAGbC,EAAAA,MAAM,EAAE,iDAHK;AAIbL,EAAAA,IAAI,EAAE,oLAJO;AAKbD,EAAAA,MAAM,EAAEA,MAAM;AALD,C","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"],"file":"defaults.js"}
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.createCorrectResponseSession = void 0;
|
|
9
|
+
exports.createDefaultModel = createDefaultModel;
|
|
10
|
+
exports.validate = exports.outcome = exports.normalizeSession = exports.normalize = exports.model = exports.getPartialScore = exports.getCorrectness = void 0;
|
|
11
|
+
|
|
12
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
13
|
+
|
|
14
|
+
var _debug = _interopRequireDefault(require("debug"));
|
|
15
|
+
|
|
16
|
+
var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
|
|
17
|
+
|
|
18
|
+
var _feedback = require("@pie-lib/pie-toolbox/feedback");
|
|
19
|
+
|
|
20
|
+
var _controllerUtils = require("@pie-lib/pie-toolbox/controller-utils");
|
|
21
|
+
|
|
22
|
+
var _defaults = _interopRequireDefault(require("./defaults"));
|
|
23
|
+
|
|
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; }
|
|
25
|
+
|
|
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; }
|
|
27
|
+
|
|
28
|
+
var log = (0, _debug["default"])('@pie-element:select-text:controller');
|
|
29
|
+
|
|
30
|
+
var isAnswerSelected = function isAnswerSelected(token, selectedToken) {
|
|
31
|
+
return token && selectedToken && token.correct === true && !(token.start === selectedToken.start && token.end === selectedToken.end || token.start === selectedToken.oldStart && token.end === selectedToken.oldEnd);
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
var buildTokens = function buildTokens(tokens, selectedTokens, evaluateMode) {
|
|
35
|
+
tokens = tokens || [];
|
|
36
|
+
selectedTokens = selectedTokens || [];
|
|
37
|
+
return tokens.map(function (t) {
|
|
38
|
+
// map the correct answer that are missing from session
|
|
39
|
+
var isNotSelected = selectedTokens.findIndex(function (selectedToken) {
|
|
40
|
+
return isAnswerSelected(t, selectedToken);
|
|
41
|
+
}) === -1;
|
|
42
|
+
return Object.assign({}, t, evaluateMode ? {
|
|
43
|
+
correct: !!t.correct,
|
|
44
|
+
isMissing: !isNotSelected
|
|
45
|
+
} : {
|
|
46
|
+
correct: undefined,
|
|
47
|
+
isMissing: undefined
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
var getCorrectness = function getCorrectness(tokens, selected) {
|
|
53
|
+
var correct = tokens.filter(function (t) {
|
|
54
|
+
return t.correct === true;
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
if (correct.length === 0) {
|
|
58
|
+
return 'unknown';
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
var correctSelected = getCorrectSelected(tokens, selected);
|
|
62
|
+
|
|
63
|
+
if (correctSelected.length === selected.length) {
|
|
64
|
+
if (correctSelected.length === correct.length) {
|
|
65
|
+
return 'correct';
|
|
66
|
+
} else if (correctSelected.length > 0) {
|
|
67
|
+
return 'partially-correct';
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
if (correctSelected.length > 0) {
|
|
72
|
+
return 'partially-correct';
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return 'incorrect';
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
exports.getCorrectness = getCorrectness;
|
|
79
|
+
|
|
80
|
+
var getCorrectSelected = function getCorrectSelected(tokens, selected) {
|
|
81
|
+
return (selected || []).filter(function (s) {
|
|
82
|
+
var index = tokens.findIndex(function (c) {
|
|
83
|
+
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
|
|
84
|
+
c.start === s.oldStart && c.end === s.oldEnd);
|
|
85
|
+
});
|
|
86
|
+
return index !== -1;
|
|
87
|
+
});
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
var getCorrectCount = function getCorrectCount(tokens, selected) {
|
|
91
|
+
return getCorrectSelected(tokens, selected).length;
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
var getPartialScore = function getPartialScore(question, session, totalCorrect) {
|
|
95
|
+
if (!session || (0, _isEmpty["default"])(session)) {
|
|
96
|
+
return 0;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
var correctCount = getCorrectCount(question.tokens, session.selectedTokens);
|
|
100
|
+
var correctTokens = (question.tokens || []).filter(function (t) {
|
|
101
|
+
return t.correct === true;
|
|
102
|
+
});
|
|
103
|
+
var extraSelected = session.selectedTokens ? session.selectedTokens.length > correctTokens.length : 0;
|
|
104
|
+
var incorrectCount = extraSelected ? session.selectedTokens && session.selectedTokens.length - correctCount : 0;
|
|
105
|
+
var count = correctCount - incorrectCount;
|
|
106
|
+
var positiveCount = count < 0 ? 0 : count;
|
|
107
|
+
return totalCorrect.length ? parseFloat((positiveCount / totalCorrect.length).toFixed(2)) : 0;
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
exports.getPartialScore = getPartialScore;
|
|
111
|
+
|
|
112
|
+
var outcome = function outcome(question, session, env) {
|
|
113
|
+
return new Promise(function (resolve) {
|
|
114
|
+
if (!session || (0, _isEmpty["default"])(session)) {
|
|
115
|
+
resolve({
|
|
116
|
+
score: 0,
|
|
117
|
+
empty: true
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
session = normalizeSession(session);
|
|
122
|
+
|
|
123
|
+
if (env.mode !== 'evaluate') {
|
|
124
|
+
resolve({
|
|
125
|
+
score: undefined,
|
|
126
|
+
completed: undefined
|
|
127
|
+
});
|
|
128
|
+
} else {
|
|
129
|
+
var enabled = _controllerUtils.partialScoring.enabled(question, env, true);
|
|
130
|
+
|
|
131
|
+
var totalCorrect = question.tokens.filter(function (t) {
|
|
132
|
+
return t.correct;
|
|
133
|
+
});
|
|
134
|
+
var score = getPartialScore(question, session, totalCorrect);
|
|
135
|
+
resolve({
|
|
136
|
+
score: enabled ? score : score === 1 ? 1 : 0
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
exports.outcome = outcome;
|
|
143
|
+
|
|
144
|
+
function createDefaultModel() {
|
|
145
|
+
var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
146
|
+
return new Promise(function (resolve) {
|
|
147
|
+
resolve(_objectSpread(_objectSpread({}, _defaults["default"]), model));
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
var normalizeSession = function normalizeSession(s) {
|
|
152
|
+
return _objectSpread({
|
|
153
|
+
selectedTokens: []
|
|
154
|
+
}, s);
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
exports.normalizeSession = normalizeSession;
|
|
158
|
+
|
|
159
|
+
var normalize = function normalize(question) {
|
|
160
|
+
return _objectSpread({
|
|
161
|
+
feedbackEnabled: false,
|
|
162
|
+
rationaleEnabled: true,
|
|
163
|
+
promptEnabled: true,
|
|
164
|
+
teacherInstructionsEnabled: true,
|
|
165
|
+
studentInstructionsEnabled: true
|
|
166
|
+
}, question);
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
exports.normalize = normalize;
|
|
170
|
+
|
|
171
|
+
var model = function model(question, session, env) {
|
|
172
|
+
session = session || {
|
|
173
|
+
selectedToken: []
|
|
174
|
+
};
|
|
175
|
+
session.selectedTokens = session.selectedTokens || [];
|
|
176
|
+
var normalizedQuestion = normalize(question);
|
|
177
|
+
return new Promise(function (resolve) {
|
|
178
|
+
log('[model]', 'normalizedQuestion: ', normalizedQuestion);
|
|
179
|
+
log('[model]', 'session: ', session);
|
|
180
|
+
var tokens = buildTokens(normalizedQuestion.tokens, session.selectedTokens, env.mode === 'evaluate');
|
|
181
|
+
log('tokens:', tokens);
|
|
182
|
+
var correctness = env.mode === 'evaluate' ? getCorrectness(normalizedQuestion.tokens, session.selectedTokens) : undefined;
|
|
183
|
+
var fb = env.mode === 'evaluate' && normalizedQuestion.feedbackEnabled ? (0, _feedback.getFeedbackForCorrectness)(correctness, normalizedQuestion.feedback) : Promise.resolve(undefined);
|
|
184
|
+
fb.then(function (feedback) {
|
|
185
|
+
var out = {
|
|
186
|
+
tokens: tokens,
|
|
187
|
+
highlightChoices: normalizedQuestion.highlightChoices,
|
|
188
|
+
prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null,
|
|
189
|
+
text: normalizedQuestion.text,
|
|
190
|
+
disabled: env.mode !== 'gather',
|
|
191
|
+
maxSelections: normalizedQuestion.maxSelections,
|
|
192
|
+
correctness: correctness,
|
|
193
|
+
env: env,
|
|
194
|
+
feedback: feedback,
|
|
195
|
+
incorrect: env.mode === 'evaluate' ? correctness !== 'correct' : undefined,
|
|
196
|
+
language: normalizedQuestion.language
|
|
197
|
+
};
|
|
198
|
+
|
|
199
|
+
if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {
|
|
200
|
+
out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;
|
|
201
|
+
out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled ? normalizedQuestion.teacherInstructions : null;
|
|
202
|
+
} else {
|
|
203
|
+
out.rationale = null;
|
|
204
|
+
out.teacherInstructions = null;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
resolve(out);
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
exports.model = model;
|
|
213
|
+
|
|
214
|
+
var createCorrectResponseSession = function createCorrectResponseSession(question, env) {
|
|
215
|
+
return new Promise(function (resolve) {
|
|
216
|
+
if (env.mode !== 'evaluate' && env.role === 'instructor') {
|
|
217
|
+
var tokens = question.tokens;
|
|
218
|
+
var selectedTokens = tokens.filter(function (t) {
|
|
219
|
+
return t.correct;
|
|
220
|
+
});
|
|
221
|
+
resolve({
|
|
222
|
+
id: '1',
|
|
223
|
+
selectedTokens: selectedTokens
|
|
224
|
+
});
|
|
225
|
+
} else {
|
|
226
|
+
resolve(null);
|
|
227
|
+
}
|
|
228
|
+
});
|
|
229
|
+
}; // remove all html tags
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
exports.createCorrectResponseSession = createCorrectResponseSession;
|
|
233
|
+
|
|
234
|
+
var getInnerText = function getInnerText(html) {
|
|
235
|
+
return (html || '').replaceAll(/<[^>]*>/g, '');
|
|
236
|
+
}; // remove all html tags except img and iframe
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
var getContent = function getContent(html) {
|
|
240
|
+
return (html || '').replace(/(<(?!img|iframe)([^>]+)>)/gi, '');
|
|
241
|
+
};
|
|
242
|
+
|
|
243
|
+
var validate = function validate() {
|
|
244
|
+
var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
245
|
+
var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
246
|
+
var tokens = model.tokens;
|
|
247
|
+
var _config$minTokens = config.minTokens,
|
|
248
|
+
minTokens = _config$minTokens === void 0 ? 2 : _config$minTokens,
|
|
249
|
+
maxTokens = config.maxTokens,
|
|
250
|
+
maxSelections = config.maxSelections;
|
|
251
|
+
var errors = {};
|
|
252
|
+
var nbOfTokens = (tokens || []).length;
|
|
253
|
+
['teacherInstructions', 'prompt', 'rationale'].forEach(function (field) {
|
|
254
|
+
var _config$field;
|
|
255
|
+
|
|
256
|
+
if ((_config$field = config[field]) !== null && _config$field !== void 0 && _config$field.required && !getContent(model[field])) {
|
|
257
|
+
errors[field] = 'This field is required.';
|
|
258
|
+
}
|
|
259
|
+
});
|
|
260
|
+
var nbOfSelections = (tokens || []).reduce(function (acc, token) {
|
|
261
|
+
return token.correct ? acc + 1 : acc;
|
|
262
|
+
}, 0);
|
|
263
|
+
|
|
264
|
+
if (nbOfTokens < minTokens) {
|
|
265
|
+
errors.tokensError = "There should be at least ".concat(minTokens, " tokens defined.");
|
|
266
|
+
} else if (nbOfTokens > maxTokens) {
|
|
267
|
+
errors.tokensError = "No more than ".concat(maxTokens, " tokens should be defined.");
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
if (nbOfSelections < 1) {
|
|
271
|
+
errors.selectionsError = 'There should be at least 1 token selected.';
|
|
272
|
+
} else if (nbOfSelections > maxSelections) {
|
|
273
|
+
errors.selectionsError = "No more than ".concat(maxSelections, " tokens should be selected.");
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
return errors;
|
|
277
|
+
};
|
|
278
|
+
|
|
279
|
+
exports.validate = validate;
|
|
280
|
+
//# sourceMappingURL=index.js.map
|