@pie-element/match 4.6.1-next.99 → 4.7.3-next.1008
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +214 -0
- package/configure/CHANGELOG.md +192 -0
- package/configure/lib/add-row.js +1 -1
- package/configure/lib/add-row.js.map +1 -1
- package/configure/lib/answer-config-block.js +65 -15
- package/configure/lib/answer-config-block.js.map +1 -1
- package/configure/lib/common.js +5 -1
- package/configure/lib/common.js.map +1 -1
- package/configure/lib/configure.js +46 -9
- package/configure/lib/configure.js.map +1 -1
- package/configure/lib/defaults.js +19 -1
- package/configure/lib/defaults.js.map +1 -1
- package/configure/lib/general-config-block.js +52 -7
- package/configure/lib/general-config-block.js.map +1 -1
- package/configure/lib/index.js +4 -4
- package/configure/lib/index.js.map +1 -1
- package/configure/lib/row.js +38 -9
- package/configure/lib/row.js.map +1 -1
- package/configure/package.json +4 -4
- package/configure/utils.js +11 -0
- package/controller/CHANGELOG.md +43 -0
- package/controller/lib/index.js +37 -3
- package/controller/lib/index.js.map +1 -1
- package/controller/package.json +1 -1
- package/docs/config-schema.json +94 -0
- package/docs/config-schema.json.md +73 -1
- package/docs/demo/generate.js +1 -0
- package/docs/pie-schema.json +42 -0
- package/docs/pie-schema.json.md +35 -0
- package/lib/answer-grid.js +5 -6
- package/lib/answer-grid.js.map +1 -1
- package/lib/index.js +7 -2
- package/lib/index.js.map +1 -1
- package/lib/main.js +11 -17
- package/lib/main.js.map +1 -1
- package/package.json +5 -5
package/configure/lib/row.js
CHANGED
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
4
|
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
|
|
5
7
|
Object.defineProperty(exports, "__esModule", {
|
|
6
8
|
value: true
|
|
7
9
|
});
|
|
8
|
-
exports["default"] = exports.choiceTarget = exports.choiceSource = exports.
|
|
10
|
+
exports["default"] = exports.choiceTarget = exports.choiceSource = exports.canDrag = exports.Row = void 0;
|
|
9
11
|
|
|
10
12
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
13
|
|
|
@@ -43,17 +45,21 @@ var _reactDnd = require("react-dnd");
|
|
|
43
45
|
|
|
44
46
|
var _debug = _interopRequireDefault(require("debug"));
|
|
45
47
|
|
|
46
|
-
var _editableHtml =
|
|
48
|
+
var _editableHtml = _interopRequireWildcard(require("@pie-lib/editable-html"));
|
|
47
49
|
|
|
48
50
|
var _common = require("./common");
|
|
49
51
|
|
|
50
|
-
function
|
|
52
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
53
|
+
|
|
54
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
51
55
|
|
|
52
|
-
function
|
|
56
|
+
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; }
|
|
57
|
+
|
|
58
|
+
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; }
|
|
53
59
|
|
|
54
60
|
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); }; }
|
|
55
61
|
|
|
56
|
-
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try {
|
|
62
|
+
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; } }
|
|
57
63
|
|
|
58
64
|
var log = (0, _debug["default"])('@pie-element:categorize:configure:choice');
|
|
59
65
|
var _canDrag = false;
|
|
@@ -188,7 +194,12 @@ var Row = /*#__PURE__*/function (_React$Component) {
|
|
|
188
194
|
model = _this$props4.model,
|
|
189
195
|
row = _this$props4.row,
|
|
190
196
|
idx = _this$props4.idx,
|
|
191
|
-
enableImages = _this$props4.enableImages
|
|
197
|
+
enableImages = _this$props4.enableImages,
|
|
198
|
+
toolbarOpts = _this$props4.toolbarOpts,
|
|
199
|
+
spellCheck = _this$props4.spellCheck,
|
|
200
|
+
error = _this$props4.error,
|
|
201
|
+
maxImageWidth = _this$props4.maxImageWidth,
|
|
202
|
+
maxImageHeight = _this$props4.maxImageHeight;
|
|
192
203
|
var dialog = this.state.dialog;
|
|
193
204
|
var opacity = isDragging ? 0 : 1;
|
|
194
205
|
var rowPlugins = {
|
|
@@ -202,6 +213,9 @@ var Row = /*#__PURE__*/function (_React$Component) {
|
|
|
202
213
|
disabled: true
|
|
203
214
|
}
|
|
204
215
|
};
|
|
216
|
+
var filteredDefaultPlugins = (_editableHtml.DEFAULT_PLUGINS || []).filter(function (p) {
|
|
217
|
+
return p !== 'bulleted-list' && p !== 'numbered-list';
|
|
218
|
+
});
|
|
205
219
|
|
|
206
220
|
var content = /*#__PURE__*/_react["default"].createElement("div", {
|
|
207
221
|
style: {
|
|
@@ -226,7 +240,12 @@ var Row = /*#__PURE__*/function (_React$Component) {
|
|
|
226
240
|
onChange: this.onRowTitleChange(idx),
|
|
227
241
|
className: classes.editor,
|
|
228
242
|
pluginProps: rowPlugins,
|
|
229
|
-
|
|
243
|
+
toolbarOpts: toolbarOpts,
|
|
244
|
+
allowValidation: true,
|
|
245
|
+
activePlugins: filteredDefaultPlugins,
|
|
246
|
+
spellCheck: spellCheck,
|
|
247
|
+
maxImageWidth: maxImageWidth,
|
|
248
|
+
maxImageHeight: maxImageHeight
|
|
230
249
|
})), row.values.map(function (rowValue, rowIdx) {
|
|
231
250
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
232
251
|
key: rowIdx,
|
|
@@ -245,7 +264,9 @@ var Row = /*#__PURE__*/function (_React$Component) {
|
|
|
245
264
|
onClick: this.onDeleteRow(idx)
|
|
246
265
|
}, /*#__PURE__*/_react["default"].createElement(_Delete["default"], {
|
|
247
266
|
className: classes.deleteIcon
|
|
248
|
-
})))), /*#__PURE__*/_react["default"].createElement("
|
|
267
|
+
})))), error && /*#__PURE__*/_react["default"].createElement("div", {
|
|
268
|
+
className: classes.errorText
|
|
269
|
+
}, error), /*#__PURE__*/_react["default"].createElement("hr", {
|
|
249
270
|
className: classes.separator
|
|
250
271
|
}), /*#__PURE__*/_react["default"].createElement(_common.InfoDialog, {
|
|
251
272
|
title: dialog.message,
|
|
@@ -275,7 +296,9 @@ exports.Row = Row;
|
|
|
275
296
|
add: _propTypes["default"].func.isRequired,
|
|
276
297
|
"delete": _propTypes["default"].func.isRequired
|
|
277
298
|
}),
|
|
278
|
-
enableImages: _propTypes["default"].bool
|
|
299
|
+
enableImages: _propTypes["default"].bool,
|
|
300
|
+
toolbarOpts: _propTypes["default"].object,
|
|
301
|
+
error: _propTypes["default"].string
|
|
279
302
|
});
|
|
280
303
|
(0, _defineProperty2["default"])(Row, "defaultProps", {});
|
|
281
304
|
|
|
@@ -328,6 +351,12 @@ var styles = function styles(theme) {
|
|
|
328
351
|
border: 0,
|
|
329
352
|
borderTop: '2px solid lightgray',
|
|
330
353
|
width: '100%'
|
|
354
|
+
},
|
|
355
|
+
errorText: {
|
|
356
|
+
fontSize: '12px',
|
|
357
|
+
color: 'red',
|
|
358
|
+
paddingTop: '10px',
|
|
359
|
+
textAlign: 'center'
|
|
331
360
|
}
|
|
332
361
|
};
|
|
333
362
|
};
|
package/configure/lib/row.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/row.jsx"],"names":["log","canDrag","Row","dialog","open","message","rowIndex","value","props","model","onChange","newModel","rows","currentRow","title","sameValue","filter","row","wasChanged","sameValueEntered","empty","length","setState","onOk","rowValueIndex","event","choiceMode","i","values","target","checked","idx","onDeleteRow","document","addEventListener","onMouseUpOnHandle","classes","imageSupport","connectDragSource","connectDropTarget","isDragging","enableImages","state","opacity","rowPlugins","image","disabled","audio","video","content","dragHandle","onMouseDownOnHandle","rowContainer","rowItem","questionText","onRowTitleChange","editor","map","rowValue","rowIdx","onRowValueChange","deleteIcon","separator","React","Component","PropTypes","object","isRequired","number","bool","func","onMoveRow","shape","add","styles","theme","actions","padding","justifyContent","choice","spacing","unit","overflow","cursor","dragDisabled","container","marginTop","display","flexDirection","alignItems","flex","width","minWidth","border","borderTop","StyledRow","NAME","choiceSource","beginDrag","id","index","StyledSource","connect","monitor","dragSource","choiceTarget","hover","drop","item","getItem","didDrop","StyledSourceAndTarget","dropTarget"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport { Checkbox } from '@pie-lib/config-ui';\nimport DragHandle from '@material-ui/icons/DragHandle';\nimport Radio from '@material-ui/core/Radio';\nimport Button from '@material-ui/core/Button';\nimport Delete from '@material-ui/icons/Delete';\nimport { DragSource, DropTarget } from 'react-dnd';\nimport debug from 'debug';\nimport EditableHtml from '@pie-lib/editable-html';\nimport { InfoDialog } from './common';\n\nconst log = debug('@pie-element:categorize:configure:choice');\n\nexport let canDrag = false;\n\nexport class Row extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n model: PropTypes.object.isRequired,\n row: PropTypes.object.isRequired,\n idx: PropTypes.number.isRequired,\n isDragging: PropTypes.bool.isRequired,\n onDeleteRow: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n connectDragSource: PropTypes.func.isRequired,\n connectDropTarget: PropTypes.func.isRequired,\n onMoveRow: PropTypes.func.isRequired,\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired\n }),\n enableImages: PropTypes.bool\n };\n\n static defaultProps = {};\n\n state = {\n dialog: {\n open: false,\n message: ''\n }\n };\n\n componentDidMount() {\n document.addEventListener('mouseup', this.onMouseUpOnHandle);\n }\n\n onRowTitleChange = rowIndex => value => {\n const { model, onChange } = this.props;\n const newModel = { ...model };\n\n const rows = newModel.rows || []\n const currentRow = rows[rowIndex] && rows[rowIndex].title;\n\n const sameValue = rows.filter(row => {\n const wasChanged = currentRow !== value && `<div>${currentRow}</div>` !== value;\n const sameValueEntered = row.title === value || `<div>${row.title}</div>` === value;\n\n return wasChanged && sameValueEntered;\n });\n\n const empty = value === '<div></div>';\n\n if (sameValue.length || empty) {\n this.setState({\n dialog: {\n open: true,\n message: 'The question row headings must be non-blank and unique.',\n onOk: () => {\n this.setState(\n {\n dialog: {\n open: false,\n }\n }\n );\n }\n }\n });\n } else {\n newModel.rows[rowIndex].title = value;\n\n onChange(newModel);\n }\n };\n\n onRowValueChange = (rowIndex, rowValueIndex) => event => {\n const { model, onChange } = this.props;\n const newModel = { ...model };\n\n if (model.choiceMode === 'radio') {\n for (let i = 0; i < newModel.rows[rowIndex].values.length; i++) {\n newModel.rows[rowIndex].values[i] = false;\n }\n }\n\n newModel.rows[rowIndex].values[rowValueIndex] = event.target.checked;\n\n onChange(newModel);\n };\n\n onDeleteRow = (idx) => () => {\n const { model, onDeleteRow } = this.props;\n\n if(model.rows && model.rows.length === 1) {\n this.setState({\n dialog: {\n open: true,\n message: 'There has to be at least one question row.',\n onOk: () => {\n this.setState(\n {\n dialog: {\n open: false,\n }\n }\n );\n }\n }\n });\n } else {\n onDeleteRow(idx);\n }\n };\n\n onMouseDownOnHandle = () => {\n canDrag = true;\n };\n\n onMouseUpOnHandle = () => {\n canDrag = false;\n };\n\n render() {\n const {\n classes,\n imageSupport,\n connectDragSource,\n connectDropTarget,\n isDragging,\n model,\n row,\n idx,\n enableImages\n } = this.props;\n const { dialog } = this.state;\n const opacity = isDragging ? 0 : 1;\n\n const rowPlugins = {\n image: {\n disabled: !enableImages\n },\n audio: { disabled: true },\n video: { disabled: true }\n };\n\n const content = (\n <div style={{\n opacity: opacity\n }}>\n <span\n itemID={'handle'}\n className={classes.dragHandle}\n onMouseDown={this.onMouseDownOnHandle}\n >\n <DragHandle color={'primary'} />\n </span>\n <div className={classes.rowContainer}>\n <div className={classNames(classes.rowItem, classes.questionText)}>\n <EditableHtml\n imageSupport={imageSupport}\n autoWidthToolbar\n disableUnderline\n label={'label'}\n markup={row.title}\n onChange={this.onRowTitleChange(idx)}\n className={classes.editor}\n pluginProps={rowPlugins}\n allowValidation\n />\n </div>\n {row.values.map((rowValue, rowIdx) => (\n <div key={rowIdx} className={classes.rowItem}>\n {model.choiceMode === 'radio' ? (\n <Radio\n onChange={this.onRowValueChange(idx, rowIdx)}\n checked={rowValue === true}\n />\n ) : (\n <Checkbox\n onChange={this.onRowValueChange(idx, rowIdx)}\n checked={rowValue === true}\n label={''}\n />\n )}\n </div>\n ))}\n <div className={classes.deleteIcon}>\n <Button onClick={this.onDeleteRow(idx)}>\n <Delete className={classes.deleteIcon} />\n </Button>\n </div>\n </div>\n <hr className={classes.separator} />\n <InfoDialog\n title={dialog.message}\n open={dialog.open}\n onOk={dialog.onOk}\n />\n </div>\n );\n\n return connectDragSource(connectDropTarget(content));\n }\n}\nconst styles = theme => ({\n actions: {\n padding: 0,\n justifyContent: 'space-between'\n },\n choice: {\n padding: theme.spacing.unit,\n overflow: 'visible'\n },\n dragHandle: {\n cursor: 'move'\n },\n dragDisabled: {\n cursor: 'inherit'\n },\n\n container: {\n marginTop: theme.spacing.unit * 2,\n display: 'flex',\n flexDirection: 'column'\n },\n rowContainer: {\n marginTop: theme.spacing.unit * 2,\n display: 'flex',\n alignItems: 'center',\n flex: 1\n },\n rowItem: {\n flex: 1,\n display: 'flex',\n justifyContent: 'center',\n '&> div': {\n width: '100%'\n }\n },\n deleteIcon: {\n flex: 0.5,\n minWidth: '88px',\n },\n questionText: {\n flex: 2,\n display: 'flex',\n justifyContent: 'flex-start'\n },\n separator: {\n marginTop: theme.spacing.unit * 2,\n border: 0,\n borderTop: '2px solid lightgray',\n width: '100%'\n }\n});\n\nconst StyledRow = withStyles(styles)(Row);\n\nconst NAME = 'row-config';\n\nexport const choiceSource = {\n canDrag() {\n return canDrag;\n },\n beginDrag(props) {\n return {\n id: props.row.id,\n index: props.idx\n };\n }\n};\n\nconst StyledSource = DragSource(NAME, choiceSource, (connect, monitor) => ({\n connectDragSource: connect.dragSource(),\n isDragging: monitor.isDragging()\n}))(StyledRow);\n\nexport const choiceTarget = {\n hover() {\n log('[hover]');\n },\n drop(props, monitor) {\n const item = monitor.getItem();\n log('[drop] item: ', item, 'didDrop?', monitor.didDrop());\n props.onMoveRow(item.index, props.idx);\n }\n};\n\nconst StyledSourceAndTarget = DropTarget(NAME, choiceTarget, connect => ({\n connectDropTarget: connect.dropTarget()\n}))(StyledSource);\n\nexport default StyledSourceAndTarget;\n"],"file":"row.js"}
|
|
1
|
+
{"version":3,"sources":["../src/row.jsx"],"names":["log","canDrag","Row","dialog","open","message","rowIndex","value","props","model","onChange","newModel","rows","currentRow","title","sameValue","filter","row","wasChanged","sameValueEntered","empty","length","setState","onOk","rowValueIndex","event","choiceMode","i","values","target","checked","idx","onDeleteRow","document","addEventListener","onMouseUpOnHandle","classes","imageSupport","connectDragSource","connectDropTarget","isDragging","enableImages","toolbarOpts","spellCheck","error","maxImageWidth","maxImageHeight","state","opacity","rowPlugins","image","disabled","audio","video","filteredDefaultPlugins","DEFAULT_PLUGINS","p","content","dragHandle","onMouseDownOnHandle","rowContainer","rowItem","questionText","onRowTitleChange","editor","map","rowValue","rowIdx","onRowValueChange","deleteIcon","errorText","separator","React","Component","PropTypes","object","isRequired","number","bool","func","onMoveRow","shape","add","string","styles","theme","actions","padding","justifyContent","choice","spacing","unit","overflow","cursor","dragDisabled","container","marginTop","display","flexDirection","alignItems","flex","width","minWidth","border","borderTop","fontSize","color","paddingTop","textAlign","StyledRow","NAME","choiceSource","beginDrag","id","index","StyledSource","connect","monitor","dragSource","choiceTarget","hover","drop","item","getItem","didDrop","StyledSourceAndTarget","dropTarget"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport { Checkbox } from '@pie-lib/config-ui';\nimport DragHandle from '@material-ui/icons/DragHandle';\nimport Radio from '@material-ui/core/Radio';\nimport Button from '@material-ui/core/Button';\nimport Delete from '@material-ui/icons/Delete';\nimport { DragSource, DropTarget } from 'react-dnd';\nimport debug from 'debug';\nimport EditableHtml, { DEFAULT_PLUGINS } from '@pie-lib/editable-html';\nimport { InfoDialog } from './common';\n\nconst log = debug('@pie-element:categorize:configure:choice');\n\nexport let canDrag = false;\n\nexport class Row extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n model: PropTypes.object.isRequired,\n row: PropTypes.object.isRequired,\n idx: PropTypes.number.isRequired,\n isDragging: PropTypes.bool.isRequired,\n onDeleteRow: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n connectDragSource: PropTypes.func.isRequired,\n connectDropTarget: PropTypes.func.isRequired,\n onMoveRow: PropTypes.func.isRequired,\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired\n }),\n enableImages: PropTypes.bool,\n toolbarOpts: PropTypes.object,\n error: PropTypes.string\n };\n\n static defaultProps = {};\n\n state = {\n dialog: {\n open: false,\n message: ''\n }\n };\n\n componentDidMount() {\n document.addEventListener('mouseup', this.onMouseUpOnHandle);\n }\n\n onRowTitleChange = rowIndex => value => {\n const { model, onChange } = this.props;\n const newModel = { ...model };\n\n const rows = newModel.rows || []\n const currentRow = rows[rowIndex] && rows[rowIndex].title;\n\n const sameValue = rows.filter(row => {\n const wasChanged = currentRow !== value && `<div>${currentRow}</div>` !== value;\n const sameValueEntered = row.title === value || `<div>${row.title}</div>` === value;\n\n return wasChanged && sameValueEntered;\n });\n\n const empty = value === '<div></div>';\n\n if (sameValue.length || empty) {\n this.setState({\n dialog: {\n open: true,\n message: 'The question row headings must be non-blank and unique.',\n onOk: () => {\n this.setState(\n {\n dialog: {\n open: false,\n }\n }\n );\n }\n }\n });\n } else {\n newModel.rows[rowIndex].title = value;\n\n onChange(newModel);\n }\n };\n\n onRowValueChange = (rowIndex, rowValueIndex) => event => {\n const { model, onChange } = this.props;\n const newModel = { ...model };\n\n if (model.choiceMode === 'radio') {\n for (let i = 0; i < newModel.rows[rowIndex].values.length; i++) {\n newModel.rows[rowIndex].values[i] = false;\n }\n }\n\n newModel.rows[rowIndex].values[rowValueIndex] = event.target.checked;\n\n onChange(newModel);\n };\n\n onDeleteRow = (idx) => () => {\n const { model, onDeleteRow } = this.props;\n\n if(model.rows && model.rows.length === 1) {\n this.setState({\n dialog: {\n open: true,\n message: 'There has to be at least one question row.',\n onOk: () => {\n this.setState(\n {\n dialog: {\n open: false,\n }\n }\n );\n }\n }\n });\n } else {\n onDeleteRow(idx);\n }\n };\n\n onMouseDownOnHandle = () => {\n canDrag = true;\n };\n\n onMouseUpOnHandle = () => {\n canDrag = false;\n };\n\n render() {\n const {\n classes,\n imageSupport,\n connectDragSource,\n connectDropTarget,\n isDragging,\n model,\n row,\n idx,\n enableImages,\n toolbarOpts,\n spellCheck,\n error,\n maxImageWidth,\n maxImageHeight\n } = this.props;\n const { dialog } = this.state;\n const opacity = isDragging ? 0 : 1;\n\n const rowPlugins = {\n image: {\n disabled: !enableImages\n },\n audio: { disabled: true },\n video: { disabled: true }\n };\n const filteredDefaultPlugins = (DEFAULT_PLUGINS || [])\n .filter(p => p !== 'bulleted-list' && p !== 'numbered-list');\n\n const content = (\n <div style={{\n opacity: opacity\n }}>\n <span\n itemID={'handle'}\n className={classes.dragHandle}\n onMouseDown={this.onMouseDownOnHandle}\n >\n <DragHandle color={'primary'} />\n </span>\n <div className={classes.rowContainer}>\n <div className={classNames(classes.rowItem, classes.questionText)}>\n <EditableHtml\n imageSupport={imageSupport}\n autoWidthToolbar\n disableUnderline\n label={'label'}\n markup={row.title}\n onChange={this.onRowTitleChange(idx)}\n className={classes.editor}\n pluginProps={rowPlugins}\n toolbarOpts={toolbarOpts}\n allowValidation\n activePlugins={filteredDefaultPlugins}\n spellCheck={spellCheck}\n maxImageWidth={maxImageWidth}\n maxImageHeight={maxImageHeight}\n />\n </div>\n {row.values.map((rowValue, rowIdx) => (\n <div key={rowIdx} className={classes.rowItem}>\n {model.choiceMode === 'radio' ? (\n <Radio\n onChange={this.onRowValueChange(idx, rowIdx)}\n checked={rowValue === true}\n />\n ) : (\n <Checkbox\n onChange={this.onRowValueChange(idx, rowIdx)}\n checked={rowValue === true}\n label={''}\n />\n )}\n </div>\n ))}\n <div className={classes.deleteIcon}>\n <Button onClick={this.onDeleteRow(idx)}>\n <Delete className={classes.deleteIcon} />\n </Button>\n </div>\n </div>\n {error && <div className={classes.errorText}>{error}</div>}\n <hr className={classes.separator} />\n <InfoDialog\n title={dialog.message}\n open={dialog.open}\n onOk={dialog.onOk}\n />\n </div>\n );\n\n return connectDragSource(connectDropTarget(content));\n }\n}\nconst styles = theme => ({\n actions: {\n padding: 0,\n justifyContent: 'space-between'\n },\n choice: {\n padding: theme.spacing.unit,\n overflow: 'visible'\n },\n dragHandle: {\n cursor: 'move'\n },\n dragDisabled: {\n cursor: 'inherit'\n },\n\n container: {\n marginTop: theme.spacing.unit * 2,\n display: 'flex',\n flexDirection: 'column'\n },\n rowContainer: {\n marginTop: theme.spacing.unit * 2,\n display: 'flex',\n alignItems: 'center',\n flex: 1\n },\n rowItem: {\n flex: 1,\n display: 'flex',\n justifyContent: 'center',\n '&> div': {\n width: '100%'\n }\n },\n deleteIcon: {\n flex: 0.5,\n minWidth: '88px',\n },\n questionText: {\n flex: 2,\n display: 'flex',\n justifyContent: 'flex-start'\n },\n separator: {\n marginTop: theme.spacing.unit * 2,\n border: 0,\n borderTop: '2px solid lightgray',\n width: '100%'\n },\n errorText: {\n fontSize: '12px',\n color: 'red',\n paddingTop: '10px',\n textAlign: 'center'\n }\n});\n\nconst StyledRow = withStyles(styles)(Row);\n\nconst NAME = 'row-config';\n\nexport const choiceSource = {\n canDrag() {\n return canDrag;\n },\n beginDrag(props) {\n return {\n id: props.row.id,\n index: props.idx\n };\n }\n};\n\nconst StyledSource = DragSource(NAME, choiceSource, (connect, monitor) => ({\n connectDragSource: connect.dragSource(),\n isDragging: monitor.isDragging()\n}))(StyledRow);\n\nexport const choiceTarget = {\n hover() {\n log('[hover]');\n },\n drop(props, monitor) {\n const item = monitor.getItem();\n log('[drop] item: ', item, 'didDrop?', monitor.didDrop());\n props.onMoveRow(item.index, props.idx);\n }\n};\n\nconst StyledSourceAndTarget = DropTarget(NAME, choiceTarget, connect => ({\n connectDropTarget: connect.dropTarget()\n}))(StyledSource);\n\nexport default StyledSourceAndTarget;\n"],"file":"row.js"}
|
package/configure/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-element/match-configure",
|
|
3
3
|
"private": true,
|
|
4
|
-
"version": "4.
|
|
4
|
+
"version": "4.5.6",
|
|
5
5
|
"description": "",
|
|
6
6
|
"main": "lib/index.js",
|
|
7
7
|
"module": "src/index.js",
|
|
@@ -10,10 +10,10 @@
|
|
|
10
10
|
"@material-ui/core": "^3.9.2",
|
|
11
11
|
"@material-ui/icons": "^3.0.1",
|
|
12
12
|
"@pie-framework/pie-configure-events": "^1.2.0",
|
|
13
|
-
"@pie-lib/config-ui": "^10.
|
|
13
|
+
"@pie-lib/config-ui": "^10.13.3",
|
|
14
14
|
"@pie-lib/drag": "^1.1.52",
|
|
15
|
-
"@pie-lib/editable-html": "^7.
|
|
16
|
-
"@pie-lib/scoring-config": "^3.5.
|
|
15
|
+
"@pie-lib/editable-html": "^7.22.6",
|
|
16
|
+
"@pie-lib/scoring-config": "^3.5.163",
|
|
17
17
|
"classnames": "^2.2.5",
|
|
18
18
|
"debug": "^3.1.0",
|
|
19
19
|
"prop-types": "^15.6.2",
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export const generateValidationMessage = model => {
|
|
2
|
+
const { choiceMode } = model;
|
|
3
|
+
|
|
4
|
+
const baselineValidationMessage = '\nThere should be at least 1 question row.' +
|
|
5
|
+
'\nRow and column headings should be non-blank and unique.';
|
|
6
|
+
const correctResponseMessage = choiceMode === 'radio'
|
|
7
|
+
? '\nThere should be a correct response defined for every row.'
|
|
8
|
+
: '\nThere should be at least one correct response defined for every row.';
|
|
9
|
+
|
|
10
|
+
return 'Validation requirements:' + baselineValidationMessage + correctResponseMessage;
|
|
11
|
+
};
|
package/controller/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,49 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [4.4.4](https://github.com/pie-framework/pie-elements/compare/@pie-element/match-controller@4.4.2...@pie-element/match-controller@4.4.4) (2021-11-11)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @pie-element/match-controller
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
## [4.4.3](https://github.com/pie-framework/pie-elements/compare/@pie-element/match-controller@4.4.2...@pie-element/match-controller@4.4.3) (2021-11-11)
|
|
15
|
+
|
|
16
|
+
**Note:** Version bump only for package @pie-element/match-controller
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
## [4.4.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/match-controller@4.4.0...@pie-element/match-controller@4.4.2) (2021-08-05)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
### Bug Fixes
|
|
26
|
+
|
|
27
|
+
* force bump ([5ea7295](https://github.com/pie-framework/pie-elements/commit/5ea7295e4755fbc492a76e7ec69e5fc35b196919))
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
# [4.4.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/match-controller@4.3.13...@pie-element/match-controller@4.4.0) (2021-06-29)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
### Bug Fixes
|
|
37
|
+
|
|
38
|
+
* **match:** remove rationale and teacher instructions from the item model returned by the API PD-1158 ([#591](https://github.com/pie-framework/pie-elements/issues/591)) ([e33786a](https://github.com/pie-framework/pie-elements/commit/e33786ad0bc788872c3624805790c82b3819c879))
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
### Features
|
|
42
|
+
|
|
43
|
+
* **match:** change partial scoring method for match items that use checkboxes PD-741 ([#588](https://github.com/pie-framework/pie-elements/issues/588)) ([65cd5dd](https://github.com/pie-framework/pie-elements/commit/65cd5dd6adb2307f89f53248b0d4489b0dd71e39))
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
6
49
|
## [4.3.13](https://github.com/pie-framework/pie-elements/compare/@pie-element/match-controller@4.3.10...@pie-element/match-controller@4.3.13) (2021-03-03)
|
|
7
50
|
|
|
8
51
|
**Note:** Version bump only for package @pie-element/match-controller
|
package/controller/lib/index.js
CHANGED
|
@@ -5,9 +5,10 @@ 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
10
|
exports.model = model;
|
|
10
|
-
exports.
|
|
11
|
+
exports.validate = exports.outcome = exports.normalize = void 0;
|
|
11
12
|
|
|
12
13
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
13
14
|
|
|
@@ -29,9 +30,9 @@ var _debug = _interopRequireDefault(require("debug"));
|
|
|
29
30
|
|
|
30
31
|
var _defaults = _interopRequireDefault(require("./defaults"));
|
|
31
32
|
|
|
32
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
33
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
33
34
|
|
|
34
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
35
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
35
36
|
|
|
36
37
|
var log = (0, _debug["default"])('@pie-element:match:controller');
|
|
37
38
|
|
|
@@ -318,4 +319,37 @@ var createCorrectResponseSession = function createCorrectResponseSession(questio
|
|
|
318
319
|
};
|
|
319
320
|
|
|
320
321
|
exports.createCorrectResponseSession = createCorrectResponseSession;
|
|
322
|
+
|
|
323
|
+
var validate = function validate() {
|
|
324
|
+
var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
325
|
+
var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
326
|
+
var rows = model.rows,
|
|
327
|
+
choiceMode = model.choiceMode;
|
|
328
|
+
var rowsErrors = {};
|
|
329
|
+
(rows || []).forEach(function (row) {
|
|
330
|
+
var id = row.id,
|
|
331
|
+
_row$values = row.values,
|
|
332
|
+
values = _row$values === void 0 ? [] : _row$values;
|
|
333
|
+
var hasCorrectResponse = false;
|
|
334
|
+
values.forEach(function (value) {
|
|
335
|
+
if (value) {
|
|
336
|
+
hasCorrectResponse = true;
|
|
337
|
+
}
|
|
338
|
+
});
|
|
339
|
+
|
|
340
|
+
if (!hasCorrectResponse) {
|
|
341
|
+
rowsErrors[id] = 'No correct response defined.';
|
|
342
|
+
}
|
|
343
|
+
});
|
|
344
|
+
var errors = {};
|
|
345
|
+
|
|
346
|
+
if (!(0, _isEmpty["default"])(rowsErrors)) {
|
|
347
|
+
errors.rowsErrors = rowsErrors;
|
|
348
|
+
errors.correctResponseError = choiceMode === 'radio' ? 'There should be a correct response defined for every row.' : 'There should be at least one correct response defined for every row.';
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
return errors;
|
|
352
|
+
};
|
|
353
|
+
|
|
354
|
+
exports.validate = validate;
|
|
321
355
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.js"],"names":["log","getResponseCorrectness","model","answers","env","isPartialScoring","partialScoring","enabled","rows","checkboxMode","choiceMode","Object","keys","length","totalCorrectAnswers","getTotalCorrectAnswers","getTotalCorrect","correctAnswers","getCheckboxes","getCorrectRadios","getCorrectness","question","mode","incorrectAnswers","forEach","row","answer","id","values","v","i","matchingTable","layout","noOfTotalCorrectAnswers","value","getPartialScore","totalCorrect","total","extraAnswers","score","parseFloat","toFixed","getOutComeScore","correctness","outcome","session","Promise","resolve","undefined","completed","empty","out","createDefaultModel","defaults","normalize","feedbackEnabled","promptEnabled","rationaleEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","updateSession","normalizedQuestion","correctResponse","correctInfo","lockChoiceOrder","fb","feedback","then","allowFeedback","prompt","config","shuffled","disabled","view","role","teacherInstructions","rationale","assign","createCorrectResponseSession","r"],"mappings":";;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAIA;;;;;;AAFA,IAAMA,GAAG,GAAG,uBAAM,+BAAN,CAAZ;;AAIA,IAAMC,sBAAsB,GAAG,SAAzBA,sBAAyB,CAACC,KAAD,EAAQC,OAAR,EAA8B;AAAA,MAAbC,GAAa,uEAAP,EAAO;;AAC3D,MAAMC,gBAAgB,GAAGC,gCAAeC,OAAf,CAAuBL,KAAvB,EAA8BE,GAA9B,CAAzB;;AACA,MAAMI,IAAI,GAAGN,KAAK,CAACM,IAAnB;AACA,MAAMC,YAAY,GAAGP,KAAK,CAACQ,UAAN,KAAqB,UAA1C;;AAEA,MAAI,CAACP,OAAD,IAAYQ,MAAM,CAACC,IAAP,CAAYT,OAAZ,EAAqBU,MAArB,KAAgC,CAAhD,EAAmD;AACjD,WAAO,YAAP;AACD;;AAED,MAAMC,mBAAmB,GAAIL,YAAY,GAAGM,sBAAsB,CAACb,KAAD,CAAzB,GAAmCc,eAAe,CAACd,KAAD,CAA3F;AACA,MAAMe,cAAc,GAAGR,YAAY,GAC/BS,aAAa,CAACV,IAAD,EAAOL,OAAP,CAAb,CAA6Bc,cADE,GAE/BE,gBAAgB,CAACX,IAAD,EAAOL,OAAP,CAFpB;;AAIA,MAAIW,mBAAmB,KAAKG,cAA5B,EAA4C;AAC1C,WAAO,SAAP;AACD,GAFD,MAEO,IAAIA,cAAc,KAAK,CAAvB,EAA0B;AAC/B,WAAO,WAAP;AACD,GAFM,MAEA,IAAIZ,gBAAJ,EAAsB;AAC3B,WAAO,SAAP;AACD;;AAED,SAAO,WAAP;AACD,CAvBD;;AAyBA,IAAMe,cAAc,GAAG,SAAjBA,cAAiB,CAACC,QAAD,EAAWjB,GAAX,EAAiC;AAAA,MAAjBD,OAAiB,uEAAP,EAAO;;AACtD,MAAIC,GAAG,CAACkB,IAAJ,KAAa,UAAjB,EAA6B;AAC3B,WAAOrB,sBAAsB,CAACoB,QAAD,EAAWlB,OAAX,EAAoBC,GAApB,CAA7B;AACD;AACF,CAJD;;AAMA,IAAMc,aAAa,GAAG,SAAhBA,aAAgB,CAACV,IAAD,EAAOL,OAAP,EAAmB;AACvC,MAAIc,cAAc,GAAG,CAArB;AACA,MAAIM,gBAAgB,GAAG,CAAvB;AAEAf,EAAAA,IAAI,CAACgB,OAAL,CAAa,UAAAC,GAAG,EAAI;AAClB,QAAMC,MAAM,GAAGvB,OAAO,CAACsB,GAAG,CAACE,EAAL,CAAtB;;AAEA,QAAID,MAAJ,EAAY;AACVD,MAAAA,GAAG,CAACG,MAAJ,CAAWJ,OAAX,CAAmB,UAACK,CAAD,EAAIC,CAAJ,EAAU;AAC3B,YAAIJ,MAAM,CAACI,CAAD,CAAN,IAAaJ,MAAM,CAACI,CAAD,CAAN,KAAcD,CAA/B,EAAmC;AACjCZ,UAAAA,cAAc,IAAI,CAAlB;AACD,SAFD,MAEO,IAAIS,MAAM,CAACI,CAAD,CAAN,IAAaJ,MAAM,CAACI,CAAD,CAAN,KAAcD,CAA/B,EAAkC;AACvCN,UAAAA,gBAAgB,IAAI,CAApB;AACD;AACF,OAND;AAOD;AACF,GAZD;AAcA,SAAO;AAAEN,IAAAA,cAAc,EAAdA,cAAF;AAAkBM,IAAAA,gBAAgB,EAAhBA;AAAlB,GAAP;AACD,CAnBD;;AAqBA,IAAMJ,gBAAgB,GAAG,SAAnBA,gBAAmB,CAACX,IAAD,EAAOL,OAAP,EAAmB;AAC1C,MAAIc,cAAc,GAAG,CAArB;AAEAT,EAAAA,IAAI,CAACgB,OAAL,CAAa,UAAAC,GAAG,EAAI;AAClB,QAAI,yBAAQA,GAAG,CAACG,MAAZ,EAAoBzB,OAAO,CAACsB,GAAG,CAACE,EAAL,CAA3B,CAAJ,EAA0C;AACxCV,MAAAA,cAAc,IAAI,CAAlB;AACD;AACF,GAJD;AAMA,SAAOA,cAAP;AACD,CAVD;;AAYA,IAAMD,eAAe,GAAG,SAAlBA,eAAkB,CAAAK,QAAQ,EAAI;AAClC,MAAMZ,YAAY,GAAGY,QAAQ,CAACX,UAAT,KAAwB,UAA7C;AACA,MAAMqB,aAAa,GAAGtB,YAAY,GAAGY,QAAQ,CAACW,MAAT,GAAkB,CAArB,GAAyB,CAA3D;AACA,SAAO,CAACX,QAAQ,CAACb,IAAT,CAAcK,MAAd,IAAwB,CAAzB,IAA8BkB,aAArC;AACD,CAJD;;AAMA,IAAMhB,sBAAsB,GAAG,SAAzBA,sBAAyB,CAAAM,QAAQ,EAAI;AACzC,MAAIY,uBAAuB,GAAG,CAA9B;AAEAZ,EAAAA,QAAQ,CAACb,IAAT,CAAcgB,OAAd,CAAsB,UAAAC,GAAG,EAAI;AAC3BA,IAAAA,GAAG,CAACG,MAAJ,CAAWJ,OAAX,CAAmB,UAAAU,KAAK,EAAI;AAC1B,UAAGA,KAAH,EAAU;AACRD,QAAAA,uBAAuB,IAAI,CAA3B;AACD;AACF,KAJD;AAKD,GAND;AAQA,SAAOA,uBAAP;AACD,CAZD;;AAcA,IAAME,eAAe,GAAG,SAAlBA,eAAkB,CAACd,QAAD,EAAWlB,OAAX,EAAuB;AAC7C,MAAMM,YAAY,GAAGY,QAAQ,CAACX,UAAT,KAAwB,UAA7C;;AAEA,MAAGD,YAAH,EAAiB;AAAA,yBAC8BS,aAAa,CAACG,QAAQ,CAACb,IAAV,EAAgBL,OAAhB,CAD3C;AAAA,QACPc,cADO,kBACPA,cADO;AAAA,QACSM,gBADT,kBACSA,gBADT;;AAEf,QAAMa,YAAY,GAAGrB,sBAAsB,CAACM,QAAD,CAA3C;AAEA,QAAMgB,KAAK,GAAGD,YAAY,KAAK,CAAjB,GAAqB,CAArB,GAAyBA,YAAvC;;AAEA,QAAInB,cAAc,GAAGM,gBAAjB,GAAoCa,YAAxC,EAAsD;AACpD,UAAME,YAAY,GAAIrB,cAAc,GAAGM,gBAAlB,GAAsCa,YAA3D;AACA,UAAMG,KAAK,GAAGC,UAAU,CAAC,CAAC,CAACvB,cAAc,GAAGqB,YAAlB,IAAkCD,KAAnC,EAA0CI,OAA1C,CAAkD,CAAlD,CAAD,CAAxB;AAEA,aAAOF,KAAK,GAAG,CAAR,GAAY,CAAZ,GAAgBA,KAAvB;AACD,KALD,MAKO;AACL,aAAOC,UAAU,CAAC,CAACvB,cAAc,GAAGoB,KAAlB,EAAyBI,OAAzB,CAAiC,CAAjC,CAAD,CAAjB;AACD;AACF,GAdD,MAcO;AACL,QAAMxB,eAAc,GAAGE,gBAAgB,CAACE,QAAQ,CAACb,IAAV,EAAgBL,OAAhB,CAAvC;;AACA,QAAMiC,aAAY,GAAGpB,eAAe,CAACK,QAAD,CAAf,KAA8B,CAA9B,GAAkC,CAAlC,GAAsCL,eAAe,CAACK,QAAD,CAA1E;;AAEA,WAAOmB,UAAU,CAAC,CAACvB,eAAc,GAAGmB,aAAlB,EAAgCK,OAAhC,CAAwC,CAAxC,CAAD,CAAjB;AACD;AACF,CAvBD;;AAyBA,IAAMC,eAAe,GAAG,SAAlBA,eAAkB,CAACrB,QAAD,EAAWjB,GAAX,EAAiC;AAAA,MAAjBD,OAAiB,uEAAP,EAAO;AACvD,MAAMwC,WAAW,GAAGvB,cAAc,CAACC,QAAD,EAAWjB,GAAX,EAAgBD,OAAhB,CAAlC;;AACA,MAAME,gBAAgB,GAAGC,gCAAeC,OAAf,CAAuBc,QAAvB,EAAiCjB,GAAjC,CAAzB;;AAEA,SAAOuC,WAAW,KAAK,SAAhB,GACH,CADG,GAEHA,WAAW,KAAK,SAAhB,IAA6BtC,gBAA7B,GACE8B,eAAe,CAACd,QAAD,EAAWlB,OAAX,CADjB,GAEE,CAJN;AAKD,CATD;;AAWO,IAAMyC,OAAO,GAAG,SAAVA,OAAU,CAACvB,QAAD,EAAWwB,OAAX,EAAoBzC,GAApB,EAA4B;AACjD,SAAO,IAAI0C,OAAJ,CAAY,UAAAC,OAAO,EAAI;AAC5B,QAAI3C,GAAG,CAACkB,IAAJ,KAAa,UAAjB,EAA6B;AAC3ByB,MAAAA,OAAO,CAAC;AAAER,QAAAA,KAAK,EAAES,SAAT;AAAoBC,QAAAA,SAAS,EAAED;AAA/B,OAAD,CAAP;AACD,KAFD,MAEO;AACL,UAAI,CAACH,OAAD,IAAY,yBAAQA,OAAR,CAAhB,EAAkC;AAChCE,QAAAA,OAAO,CAAC;AAAER,UAAAA,KAAK,EAAE,CAAT;AAAYW,UAAAA,KAAK,EAAE;AAAnB,SAAD,CAAP;AACD;;AAED,UAAMC,GAAG,GAAG;AACVZ,QAAAA,KAAK,EAAEG,eAAe,CAACrB,QAAD,EAAWjB,GAAX,EAAgByC,OAAO,CAAC1C,OAAxB;AADZ,OAAZ;AAIA4C,MAAAA,OAAO,CAACI,GAAD,CAAP;AACD;AACF,GAdM,CAAP;AAeD,CAhBM;;;;AAkBA,SAASC,kBAAT,GAAwC;AAAA,MAAZlD,KAAY,uEAAJ,EAAI;AAC7C,SAAO,IAAI4C,OAAJ,CAAY,UAAAC,OAAO,EAAI;AAC5BA,IAAAA,OAAO,iCACFM,oBADE,GAEFnD,KAFE,EAAP;AAID,GALM,CAAP;AAMD;;AAEM,IAAMoD,SAAS,GAAG,SAAZA,SAAY,CAAAjC,QAAQ;AAAA;AAC/BkC,IAAAA,eAAe,EAAE,IADc;AAE/BC,IAAAA,aAAa,EAAE,IAFgB;AAG/BC,IAAAA,gBAAgB,EAAE,IAHa;AAI/BC,IAAAA,0BAA0B,EAAE,IAJG;AAK/BC,IAAAA,0BAA0B,EAAE;AALG,KAM5BtC,QAN4B;AAAA,CAA1B;AASP;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AACO,SAASnB,KAAT,CAAemB,QAAf,EAAyBwB,OAAzB,EAAkCzC,GAAlC,EAAuCwD,aAAvC,EAAsD;AAC3D,SAAO,IAAId,OAAJ;AAAA,6FAAY,iBAAMC,OAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AACXc,cAAAA,kBADW,GACU,2BAAUP,SAAS,CAACjC,QAAD,CAAnB,CADV;;AAIjB,kBAAI,CAAC,CAACwB,OAAD,IAAY,yBAAQA,OAAR,CAAb,KAAkCzC,GAAG,CAACkB,IAAJ,KAAa,UAAnD,EAA+D;AAC7DqB,gBAAAA,WAAW,GAAG,YAAd;AACAJ,gBAAAA,KAAK,GAAG,IAAR;AACD,eAHD,MAGO;AACLI,gBAAAA,WAAW,GAAGvB,cAAc,CAACyC,kBAAD,EAAqBzD,GAArB,EAA0ByC,OAAO,IAAIA,OAAO,CAAC1C,OAA7C,CAA5B;AACAoC,gBAAAA,KAAK,aAAMG,eAAe,CAACmB,kBAAD,EAAqBzD,GAArB,EAA0ByC,OAAO,IAAIA,OAAO,CAAC1C,OAA7C,CAAf,GACX,GADK,MAAL;AAED;;AAEK2D,cAAAA,eAbW,GAaO,EAbP;AAcXC,cAAAA,WAdW,GAcG;AAClBxB,gBAAAA,KAAK,EAALA,KADkB;AAElBI,gBAAAA,WAAW,EAAXA;AAFkB,eAdH;AAmBXqB,cAAAA,eAnBW,GAmBO,kCAAYH,kBAAZ,EAAgChB,OAAhC,EAAyCzC,GAAzC,CAnBP;;AAAA,kBAqBZ4D,eArBY;AAAA;AAAA;AAAA;;AAAA;AAAA,qBAsBiB,yCAC9BH,kBAAkB,CAACrD,IADW,EAE9BqC,OAF8B,EAG9Be,aAH8B,EAI9B,IAJ8B,CAtBjB;;AAAA;AAsBfC,cAAAA,kBAAkB,CAACrD,IAtBJ;;AAAA;AA8BjBqD,cAAAA,kBAAkB,CAACrD,IAAnB,CAAwBgB,OAAxB,CAAgC,UAAAC,GAAG,EAAI;AACrCqC,gBAAAA,eAAe,CAACrC,GAAG,CAACE,EAAL,CAAf,GAA0BF,GAAG,CAACG,MAA9B;;AAEA,oBAAIxB,GAAG,CAACkB,IAAJ,KAAa,UAAjB,EAA6B;AAC3B,yBAAOG,GAAG,CAACG,MAAX;AACD;AACF,eAND;AAQMqC,cAAAA,EAtCW,GAuCf7D,GAAG,CAACkB,IAAJ,KAAa,UAAb,IAA2BuC,kBAAkB,CAACN,eAA9C,GACI,yCAA0BQ,WAAW,CAACpB,WAAtC,EAAmDkB,kBAAkB,CAACK,QAAtE,CADJ,GAEIpB,OAAO,CAACC,OAAR,CAAgBC,SAAhB,CAzCW;AA2CjBiB,cAAAA,EAAE,CAACE,IAAH,CAAQ,UAAAD,QAAQ,EAAI;AAClB,oBAAMf,GAAG,GAAG;AACViB,kBAAAA,aAAa,EAAEP,kBAAkB,CAACN,eADxB;AAEVc,kBAAAA,MAAM,EAAER,kBAAkB,CAACL,aAAnB,GAAmCK,kBAAkB,CAACQ,MAAtD,GAA+D,IAF7D;AAGVC,kBAAAA,MAAM,kCACDT,kBADC;AAEJU,oBAAAA,QAAQ,EAAE,CAACV,kBAAkB,CAACG;AAF1B,oBAHI;AAOVE,kBAAAA,QAAQ,EAARA,QAPU;AAQVM,kBAAAA,QAAQ,EAAEpE,GAAG,CAACkB,IAAJ,KAAa,QARb;AASVmD,kBAAAA,IAAI,EAAErE,GAAG,CAACkB,IAAJ,KAAa;AATT,iBAAZ;;AAYA,oBACElB,GAAG,CAACsE,IAAJ,KAAa,YAAb,KACCtE,GAAG,CAACkB,IAAJ,KAAa,MAAb,IAAuBlB,GAAG,CAACkB,IAAJ,KAAa,UADrC,CADF,EAGE;AACA6B,kBAAAA,GAAG,CAACwB,mBAAJ,GAA0Bd,kBAAkB,CAACH,0BAAnB,GACtBG,kBAAkB,CAACc,mBADG,GAEtB,IAFJ;AAGAxB,kBAAAA,GAAG,CAACyB,SAAJ,GAAgBf,kBAAkB,CAACJ,gBAAnB,GAAsCI,kBAAkB,CAACe,SAAzD,GAAqE,IAArF;AACD,iBARD,MAQO;AACLzB,kBAAAA,GAAG,CAACyB,SAAJ,GAAgB,IAAhB;AACAzB,kBAAAA,GAAG,CAACwB,mBAAJ,GAA0B,IAA1B;AACAxB,kBAAAA,GAAG,CAACmB,MAAJ,CAAWM,SAAX,GAAuB,IAAvB;AACAzB,kBAAAA,GAAG,CAACmB,MAAJ,CAAWK,mBAAX,GAAiC,IAAjC;AACD;;AAED,oBAAIvE,GAAG,CAACkB,IAAJ,KAAa,UAAjB,EAA6B;AAC3BX,kBAAAA,MAAM,CAACkE,MAAP,CAAc1B,GAAd,EAAmB;AACjBW,oBAAAA,eAAe,EAAfA,eADiB;AAEjBnB,oBAAAA,WAAW,EAAEoB;AAFI,mBAAnB;AAID;;AAED/D,gBAAAA,GAAG,CAAC,OAAD,EAAUmD,GAAV,CAAH;AACAJ,gBAAAA,OAAO,CAACI,GAAD,CAAP;AACD,eArCD;;AA3CiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAZ;;AAAA;AAAA;AAAA;AAAA,MAAP;AAkFD;;AAEM,IAAM2B,4BAA4B,GAAG,SAA/BA,4BAA+B,CAACzD,QAAD,EAAWjB,GAAX,EAAmB;AAC7D,SAAO,IAAI0C,OAAJ,CAAY,UAAAC,OAAO,EAAI;AAC5B,QAAI3C,GAAG,CAACkB,IAAJ,KAAa,UAAb,IAA2BlB,GAAG,CAACsE,IAAJ,KAAa,YAA5C,EAA0D;AAAA,UAChDlE,IADgD,GACvCa,QADuC,CAChDb,IADgD;AAExD,UAAML,OAAO,GAAG,EAAhB;AAEAK,MAAAA,IAAI,CAACgB,OAAL,CAAa,UAAAuD,CAAC,EAAI;AAChB5E,QAAAA,OAAO,CAAC4E,CAAC,CAACpD,EAAH,CAAP,GAAgBoD,CAAC,CAACnD,MAAlB;AACD,OAFD;AAIAmB,MAAAA,OAAO,CAAC;AACN5C,QAAAA,OAAO,EAAPA,OADM;AAENwB,QAAAA,EAAE,EAAE;AAFE,OAAD,CAAP;AAID,KAZD,MAYO;AACLoB,MAAAA,OAAO,CAAC,IAAD,CAAP;AACD;AACF,GAhBM,CAAP;AAiBD,CAlBM","sourcesContent":["import isEqual from 'lodash/isEqual';\nimport isEmpty from 'lodash/isEmpty';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { getFeedbackForCorrectness } from '@pie-lib/feedback';\nimport { lockChoices, getShuffledChoices, partialScoring } from '@pie-lib/controller-utils';\nimport debug from 'debug';\n\nconst log = debug('@pie-element:match:controller');\n\nimport defaults from './defaults';\n\nconst getResponseCorrectness = (model, answers, env = {}) => {\n const isPartialScoring = partialScoring.enabled(model, env);\n const rows = model.rows;\n const checkboxMode = model.choiceMode === 'checkbox';\n\n if (!answers || Object.keys(answers).length === 0) {\n return 'unanswered';\n }\n\n const totalCorrectAnswers = checkboxMode ? getTotalCorrectAnswers(model) : getTotalCorrect(model);\n const correctAnswers = checkboxMode\n ? getCheckboxes(rows, answers).correctAnswers\n : getCorrectRadios(rows, answers);\n\n if (totalCorrectAnswers === correctAnswers) {\n return 'correct';\n } else if (correctAnswers === 0) {\n return 'incorrect';\n } else if (isPartialScoring) {\n return 'partial';\n }\n\n return 'incorrect';\n};\n\nconst getCorrectness = (question, env, answers = {}) => {\n if (env.mode === 'evaluate') {\n return getResponseCorrectness(question, answers, env);\n }\n};\n\nconst getCheckboxes = (rows, answers) => {\n let correctAnswers = 0;\n let incorrectAnswers = 0;\n\n rows.forEach(row => {\n const answer = answers[row.id];\n\n if (answer) {\n row.values.forEach((v, i) => {\n if (answer[i] && answer[i] === v ) {\n correctAnswers += 1;\n } else if (answer[i] && answer[i] !== v ){\n incorrectAnswers += 1;\n }\n });\n }\n });\n\n return { correctAnswers, incorrectAnswers };\n};\n\nconst getCorrectRadios = (rows, answers) => {\n let correctAnswers = 0;\n\n rows.forEach(row => {\n if (isEqual(row.values, answers[row.id])) {\n correctAnswers += 1;\n }\n });\n\n return correctAnswers;\n};\n\nconst getTotalCorrect = question => {\n const checkboxMode = question.choiceMode === 'checkbox';\n const matchingTable = checkboxMode ? question.layout - 1 : 1;\n return (question.rows.length || 0) * matchingTable;\n};\n\nconst getTotalCorrectAnswers = question => {\n let noOfTotalCorrectAnswers = 0;\n\n question.rows.forEach(row => {\n row.values.forEach(value => {\n if(value) {\n noOfTotalCorrectAnswers += 1;\n }\n });\n });\n\n return noOfTotalCorrectAnswers;\n};\n\nconst getPartialScore = (question, answers) => {\n const checkboxMode = question.choiceMode === 'checkbox';\n\n if(checkboxMode) {\n const { correctAnswers, incorrectAnswers } = getCheckboxes(question.rows, answers);\n const totalCorrect = getTotalCorrectAnswers(question);\n\n const total = totalCorrect === 0 ? 1 : totalCorrect;\n\n if (correctAnswers + incorrectAnswers > totalCorrect) {\n const extraAnswers = (correctAnswers + incorrectAnswers) - totalCorrect;\n const score = parseFloat(((correctAnswers - extraAnswers) / total).toFixed(2));\n\n return score < 0 ? 0 : score;\n } else {\n return parseFloat((correctAnswers / total).toFixed(2));\n }\n } else {\n const correctAnswers = getCorrectRadios(question.rows, answers);\n const totalCorrect = getTotalCorrect(question) === 0 ? 1 : getTotalCorrect(question);\n\n return parseFloat((correctAnswers / totalCorrect).toFixed(2));\n }\n};\n\nconst getOutComeScore = (question, env, answers = {}) => {\n const correctness = getCorrectness(question, env, answers);\n const isPartialScoring = partialScoring.enabled(question, env);\n\n return correctness === 'correct'\n ? 1\n : correctness === 'partial' && isPartialScoring\n ? getPartialScore(question, answers)\n : 0;\n};\n\nexport const outcome = (question, session, env) => {\n return new Promise(resolve => {\n if (env.mode !== 'evaluate') {\n resolve({ score: undefined, completed: undefined });\n } else {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n }\n\n const out = {\n score: getOutComeScore(question, env, session.answers)\n };\n\n resolve(out);\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 normalize = question => ({\n feedbackEnabled: true,\n promptEnabled: true,\n rationaleEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n ...question,\n});\n\n/**\n *\n * @param {*} question\n * @param {*} session\n * @param {*} env\n * @param {*} updateSession - optional - a function that will set the properties passed into it on the session.\n */\nexport function model(question, session, env, updateSession) {\n return new Promise(async resolve => {\n const normalizedQuestion = cloneDeep(normalize(question));\n let correctness, score;\n\n if ((!session || isEmpty(session)) && env.mode === 'evaluate') {\n correctness = 'unanswered';\n score = '0%';\n } else {\n correctness = getCorrectness(normalizedQuestion, env, session && session.answers);\n score = `${getOutComeScore(normalizedQuestion, env, session && session.answers) *\n 100}%`;\n }\n\n const correctResponse = {};\n const correctInfo = {\n score,\n correctness\n };\n\n const lockChoiceOrder = lockChoices(normalizedQuestion, session, env);\n\n if (!lockChoiceOrder) {\n normalizedQuestion.rows = await getShuffledChoices(\n normalizedQuestion.rows,\n session,\n updateSession,\n 'id'\n );\n }\n\n normalizedQuestion.rows.forEach(row => {\n correctResponse[row.id] = row.values;\n\n if (env.mode !== 'evaluate') {\n delete row.values;\n }\n });\n\n const fb =\n env.mode === 'evaluate' && normalizedQuestion.feedbackEnabled\n ? getFeedbackForCorrectness(correctInfo.correctness, normalizedQuestion.feedback)\n : Promise.resolve(undefined);\n\n fb.then(feedback => {\n const out = {\n allowFeedback: normalizedQuestion.feedbackEnabled,\n prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null,\n config: {\n ...normalizedQuestion,\n shuffled: !normalizedQuestion.lockChoiceOrder\n },\n feedback,\n disabled: env.mode !== 'gather',\n view: env.mode === 'view'\n };\n\n if (\n env.role === 'instructor' &&\n (env.mode === 'view' || env.mode === 'evaluate')\n ) {\n out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n out.config.rationale = null;\n out.config.teacherInstructions = null;\n }\n\n if (env.mode === 'evaluate') {\n Object.assign(out, {\n correctResponse,\n correctness: correctInfo,\n });\n }\n\n log('out: ', out);\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 { rows } = question;\n const answers = {};\n\n rows.forEach(r => {\n answers[r.id] = r.values;\n });\n\n resolve({\n answers,\n id: '1'\n });\n } else {\n resolve(null);\n }\n });\n};\n"],"file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../src/index.js"],"names":["log","getResponseCorrectness","model","answers","env","isPartialScoring","partialScoring","enabled","rows","checkboxMode","choiceMode","Object","keys","length","totalCorrectAnswers","getTotalCorrectAnswers","getTotalCorrect","correctAnswers","getCheckboxes","getCorrectRadios","getCorrectness","question","mode","incorrectAnswers","forEach","row","answer","id","values","v","i","matchingTable","layout","noOfTotalCorrectAnswers","value","getPartialScore","totalCorrect","total","extraAnswers","score","parseFloat","toFixed","getOutComeScore","correctness","outcome","session","Promise","resolve","undefined","completed","empty","out","createDefaultModel","defaults","normalize","feedbackEnabled","promptEnabled","rationaleEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","updateSession","normalizedQuestion","correctResponse","correctInfo","lockChoiceOrder","fb","feedback","then","allowFeedback","prompt","config","shuffled","disabled","view","role","teacherInstructions","rationale","assign","createCorrectResponseSession","r","validate","rowsErrors","hasCorrectResponse","errors","correctResponseError"],"mappings":"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","sourcesContent":["import isEqual from 'lodash/isEqual';\nimport isEmpty from 'lodash/isEmpty';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { getFeedbackForCorrectness } from '@pie-lib/feedback';\nimport { lockChoices, getShuffledChoices, partialScoring } from '@pie-lib/controller-utils';\nimport debug from 'debug';\n\nconst log = debug('@pie-element:match:controller');\n\nimport defaults from './defaults';\n\nconst getResponseCorrectness = (model, answers, env = {}) => {\n const isPartialScoring = partialScoring.enabled(model, env);\n const rows = model.rows;\n const checkboxMode = model.choiceMode === 'checkbox';\n\n if (!answers || Object.keys(answers).length === 0) {\n return 'unanswered';\n }\n\n const totalCorrectAnswers = checkboxMode ? getTotalCorrectAnswers(model) : getTotalCorrect(model);\n const correctAnswers = checkboxMode\n ? getCheckboxes(rows, answers).correctAnswers\n : getCorrectRadios(rows, answers);\n\n if (totalCorrectAnswers === correctAnswers) {\n return 'correct';\n } else if (correctAnswers === 0) {\n return 'incorrect';\n } else if (isPartialScoring) {\n return 'partial';\n }\n\n return 'incorrect';\n};\n\nconst getCorrectness = (question, env, answers = {}) => {\n if (env.mode === 'evaluate') {\n return getResponseCorrectness(question, answers, env);\n }\n};\n\nconst getCheckboxes = (rows, answers) => {\n let correctAnswers = 0;\n let incorrectAnswers = 0;\n\n rows.forEach(row => {\n const answer = answers[row.id];\n\n if (answer) {\n row.values.forEach((v, i) => {\n if (answer[i] && answer[i] === v ) {\n correctAnswers += 1;\n } else if (answer[i] && answer[i] !== v ){\n incorrectAnswers += 1;\n }\n });\n }\n });\n\n return { correctAnswers, incorrectAnswers };\n};\n\nconst getCorrectRadios = (rows, answers) => {\n let correctAnswers = 0;\n\n rows.forEach(row => {\n if (isEqual(row.values, answers[row.id])) {\n correctAnswers += 1;\n }\n });\n\n return correctAnswers;\n};\n\nconst getTotalCorrect = question => {\n const checkboxMode = question.choiceMode === 'checkbox';\n const matchingTable = checkboxMode ? question.layout - 1 : 1;\n return (question.rows.length || 0) * matchingTable;\n};\n\nconst getTotalCorrectAnswers = question => {\n let noOfTotalCorrectAnswers = 0;\n\n question.rows.forEach(row => {\n row.values.forEach(value => {\n if(value) {\n noOfTotalCorrectAnswers += 1;\n }\n });\n });\n\n return noOfTotalCorrectAnswers;\n};\n\nconst getPartialScore = (question, answers) => {\n const checkboxMode = question.choiceMode === 'checkbox';\n\n if(checkboxMode) {\n const { correctAnswers, incorrectAnswers } = getCheckboxes(question.rows, answers);\n const totalCorrect = getTotalCorrectAnswers(question);\n\n const total = totalCorrect === 0 ? 1 : totalCorrect;\n\n if (correctAnswers + incorrectAnswers > totalCorrect) {\n const extraAnswers = (correctAnswers + incorrectAnswers) - totalCorrect;\n const score = parseFloat(((correctAnswers - extraAnswers) / total).toFixed(2));\n\n return score < 0 ? 0 : score;\n } else {\n return parseFloat((correctAnswers / total).toFixed(2));\n }\n } else {\n const correctAnswers = getCorrectRadios(question.rows, answers);\n const totalCorrect = getTotalCorrect(question) === 0 ? 1 : getTotalCorrect(question);\n\n return parseFloat((correctAnswers / totalCorrect).toFixed(2));\n }\n};\n\nconst getOutComeScore = (question, env, answers = {}) => {\n const correctness = getCorrectness(question, env, answers);\n const isPartialScoring = partialScoring.enabled(question, env);\n\n return correctness === 'correct'\n ? 1\n : correctness === 'partial' && isPartialScoring\n ? getPartialScore(question, answers)\n : 0;\n};\n\nexport const outcome = (question, session, env) => {\n return new Promise(resolve => {\n if (env.mode !== 'evaluate') {\n resolve({ score: undefined, completed: undefined });\n } else {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n }\n\n const out = {\n score: getOutComeScore(question, env, session.answers)\n };\n\n resolve(out);\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 normalize = question => ({\n feedbackEnabled: true,\n promptEnabled: true,\n rationaleEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n ...question,\n});\n\n/**\n *\n * @param {*} question\n * @param {*} session\n * @param {*} env\n * @param {*} updateSession - optional - a function that will set the properties passed into it on the session.\n */\nexport function model(question, session, env, updateSession) {\n return new Promise(async resolve => {\n const normalizedQuestion = cloneDeep(normalize(question));\n let correctness, score;\n\n if ((!session || isEmpty(session)) && env.mode === 'evaluate') {\n correctness = 'unanswered';\n score = '0%';\n } else {\n correctness = getCorrectness(normalizedQuestion, env, session && session.answers);\n score = `${getOutComeScore(normalizedQuestion, env, session && session.answers) *\n 100}%`;\n }\n\n const correctResponse = {};\n const correctInfo = {\n score,\n correctness\n };\n\n const lockChoiceOrder = lockChoices(normalizedQuestion, session, env);\n\n if (!lockChoiceOrder) {\n normalizedQuestion.rows = await getShuffledChoices(\n normalizedQuestion.rows,\n session,\n updateSession,\n 'id'\n );\n }\n\n normalizedQuestion.rows.forEach(row => {\n correctResponse[row.id] = row.values;\n\n if (env.mode !== 'evaluate') {\n delete row.values;\n }\n });\n\n const fb =\n env.mode === 'evaluate' && normalizedQuestion.feedbackEnabled\n ? getFeedbackForCorrectness(correctInfo.correctness, normalizedQuestion.feedback)\n : Promise.resolve(undefined);\n\n fb.then(feedback => {\n const out = {\n allowFeedback: normalizedQuestion.feedbackEnabled,\n prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null,\n config: {\n ...normalizedQuestion,\n shuffled: !normalizedQuestion.lockChoiceOrder\n },\n feedback,\n disabled: env.mode !== 'gather',\n view: env.mode === 'view'\n };\n\n if (\n env.role === 'instructor' &&\n (env.mode === 'view' || env.mode === 'evaluate')\n ) {\n out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n out.config.rationale = null;\n out.config.teacherInstructions = null;\n }\n\n if (env.mode === 'evaluate') {\n Object.assign(out, {\n correctResponse,\n correctness: correctInfo,\n });\n }\n\n log('out: ', out);\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 { rows } = question;\n const answers = {};\n\n rows.forEach(r => {\n answers[r.id] = r.values;\n });\n\n resolve({\n answers,\n id: '1'\n });\n } else {\n resolve(null);\n }\n });\n};\n\nexport const validate = (model = {}, config = {}) => {\n const { rows, choiceMode } = model;\n const rowsErrors = {};\n\n (rows || []).forEach(row => {\n const { id, values = [] } = row;\n let hasCorrectResponse = false;\n\n values.forEach(value => {\n if (value) {\n hasCorrectResponse = true;\n }\n });\n\n if (!hasCorrectResponse) {\n rowsErrors[id] = 'No correct response defined.';\n }\n });\n\n const errors = {};\n\n if (!isEmpty(rowsErrors)) {\n errors.rowsErrors = rowsErrors;\n errors.correctResponseError = choiceMode === 'radio'\n ? 'There should be a correct response defined for every row.'\n : 'There should be at least one correct response defined for every row.';\n }\n\n return errors;\n};\n"],"file":"index.js"}
|
package/controller/package.json
CHANGED
package/docs/config-schema.json
CHANGED
|
@@ -131,6 +131,22 @@
|
|
|
131
131
|
}
|
|
132
132
|
}
|
|
133
133
|
},
|
|
134
|
+
"spellCheck": {
|
|
135
|
+
"title": "ConfigureProp",
|
|
136
|
+
"type": "object",
|
|
137
|
+
"properties": {
|
|
138
|
+
"settings": {
|
|
139
|
+
"description": "Indicates if the item has to be displayed in the Settings Panel",
|
|
140
|
+
"type": "boolean",
|
|
141
|
+
"title": "settings"
|
|
142
|
+
},
|
|
143
|
+
"label": {
|
|
144
|
+
"description": "Indicates the label for the item that has to be displayed in the Settings Panel",
|
|
145
|
+
"type": "string",
|
|
146
|
+
"title": "label"
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
},
|
|
134
150
|
"rationale": {
|
|
135
151
|
"title": "ConfigureProp",
|
|
136
152
|
"type": "object",
|
|
@@ -195,6 +211,58 @@
|
|
|
195
211
|
}
|
|
196
212
|
}
|
|
197
213
|
},
|
|
214
|
+
"maxImageWidth": {
|
|
215
|
+
"title": "ConfigureMaxImageDimensionsProp",
|
|
216
|
+
"type": "object",
|
|
217
|
+
"properties": {
|
|
218
|
+
"teacherInstructions": {
|
|
219
|
+
"description": "Indicates the max dimension for images in teacher instructions",
|
|
220
|
+
"type": "number",
|
|
221
|
+
"title": "teacherInstructions"
|
|
222
|
+
},
|
|
223
|
+
"prompt": {
|
|
224
|
+
"description": "Indicates the max dimension for images in prompt - this is also the default dimension for all other input fields if it's not specified",
|
|
225
|
+
"type": "number",
|
|
226
|
+
"title": "prompt"
|
|
227
|
+
},
|
|
228
|
+
"rationale": {
|
|
229
|
+
"description": "Indicates the max dimension for images in rationale",
|
|
230
|
+
"type": "number",
|
|
231
|
+
"title": "rationale"
|
|
232
|
+
},
|
|
233
|
+
"rowTitles": {
|
|
234
|
+
"description": "Indicates the max dimension for images in row labels",
|
|
235
|
+
"type": "number",
|
|
236
|
+
"title": "rowTitles"
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
},
|
|
240
|
+
"maxImageHeight": {
|
|
241
|
+
"title": "ConfigureMaxImageDimensionsProp",
|
|
242
|
+
"type": "object",
|
|
243
|
+
"properties": {
|
|
244
|
+
"teacherInstructions": {
|
|
245
|
+
"description": "Indicates the max dimension for images in teacher instructions",
|
|
246
|
+
"type": "number",
|
|
247
|
+
"title": "teacherInstructions"
|
|
248
|
+
},
|
|
249
|
+
"prompt": {
|
|
250
|
+
"description": "Indicates the max dimension for images in prompt - this is also the default dimension for all other input fields if it's not specified",
|
|
251
|
+
"type": "number",
|
|
252
|
+
"title": "prompt"
|
|
253
|
+
},
|
|
254
|
+
"rationale": {
|
|
255
|
+
"description": "Indicates the max dimension for images in rationale",
|
|
256
|
+
"type": "number",
|
|
257
|
+
"title": "rationale"
|
|
258
|
+
},
|
|
259
|
+
"rowTitles": {
|
|
260
|
+
"description": "Indicates the max dimension for images in row labels",
|
|
261
|
+
"type": "number",
|
|
262
|
+
"title": "rowTitles"
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
},
|
|
198
266
|
"showPrompt": {
|
|
199
267
|
"description": "Determines whether prompt field will be displayed or not",
|
|
200
268
|
"default": true,
|
|
@@ -230,6 +298,32 @@
|
|
|
230
298
|
"title": "label"
|
|
231
299
|
}
|
|
232
300
|
}
|
|
301
|
+
},
|
|
302
|
+
"ConfigureMaxImageDimensionsProp": {
|
|
303
|
+
"title": "ConfigureMaxImageDimensionsProp",
|
|
304
|
+
"type": "object",
|
|
305
|
+
"properties": {
|
|
306
|
+
"teacherInstructions": {
|
|
307
|
+
"description": "Indicates the max dimension for images in teacher instructions",
|
|
308
|
+
"type": "number",
|
|
309
|
+
"title": "teacherInstructions"
|
|
310
|
+
},
|
|
311
|
+
"prompt": {
|
|
312
|
+
"description": "Indicates the max dimension for images in prompt - this is also the default dimension for all other input fields if it's not specified",
|
|
313
|
+
"type": "number",
|
|
314
|
+
"title": "prompt"
|
|
315
|
+
},
|
|
316
|
+
"rationale": {
|
|
317
|
+
"description": "Indicates the max dimension for images in rationale",
|
|
318
|
+
"type": "number",
|
|
319
|
+
"title": "rationale"
|
|
320
|
+
},
|
|
321
|
+
"rowTitles": {
|
|
322
|
+
"description": "Indicates the max dimension for images in row labels",
|
|
323
|
+
"type": "number",
|
|
324
|
+
"title": "rowTitles"
|
|
325
|
+
}
|
|
326
|
+
}
|
|
233
327
|
}
|
|
234
328
|
},
|
|
235
329
|
"$schema": "http://json-schema.org/draft-07/schema#"
|