@pie-lib/rubric 0.9.1-beta.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.json +1 -407
- package/CHANGELOG.md +145 -1
- package/lib/authoring.js +573 -0
- package/lib/authoring.js.map +1 -0
- package/lib/index.js +24 -0
- package/lib/index.js.map +1 -0
- package/lib/point-menu.js +172 -0
- package/lib/point-menu.js.map +1 -0
- package/package.json +3 -4
package/lib/authoring.js
ADDED
|
@@ -0,0 +1,573 @@
|
|
|
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"] = exports.RubricType = exports.RawAuthoring = exports.PointConfig = void 0;
|
|
9
|
+
|
|
10
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
11
|
+
|
|
12
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
13
|
+
|
|
14
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
15
|
+
|
|
16
|
+
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
17
|
+
|
|
18
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
19
|
+
|
|
20
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
21
|
+
|
|
22
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
23
|
+
|
|
24
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
25
|
+
|
|
26
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
27
|
+
|
|
28
|
+
var _react = _interopRequireDefault(require("react"));
|
|
29
|
+
|
|
30
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
31
|
+
|
|
32
|
+
var _styles = require("@material-ui/core/styles");
|
|
33
|
+
|
|
34
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
35
|
+
|
|
36
|
+
var _OutlinedInput = _interopRequireDefault(require("@material-ui/core/OutlinedInput"));
|
|
37
|
+
|
|
38
|
+
var _InputLabel = _interopRequireDefault(require("@material-ui/core/InputLabel"));
|
|
39
|
+
|
|
40
|
+
var _Select = _interopRequireDefault(require("@material-ui/core/Select"));
|
|
41
|
+
|
|
42
|
+
var _FormControl = _interopRequireDefault(require("@material-ui/core/FormControl"));
|
|
43
|
+
|
|
44
|
+
var _MenuItem = _interopRequireDefault(require("@material-ui/core/MenuItem"));
|
|
45
|
+
|
|
46
|
+
var _times = _interopRequireDefault(require("lodash/times"));
|
|
47
|
+
|
|
48
|
+
var _Checkbox = _interopRequireDefault(require("@material-ui/core/Checkbox"));
|
|
49
|
+
|
|
50
|
+
var _FormGroup = _interopRequireDefault(require("@material-ui/core/FormGroup"));
|
|
51
|
+
|
|
52
|
+
var _FormControlLabel = _interopRequireDefault(require("@material-ui/core/FormControlLabel"));
|
|
53
|
+
|
|
54
|
+
var _grey = _interopRequireDefault(require("@material-ui/core/colors/grey"));
|
|
55
|
+
|
|
56
|
+
var _Typography = _interopRequireDefault(require("@material-ui/core/Typography"));
|
|
57
|
+
|
|
58
|
+
var _DragIndicator = _interopRequireDefault(require("@material-ui/icons/DragIndicator"));
|
|
59
|
+
|
|
60
|
+
var _editableHtml = _interopRequireDefault(require("@pie-lib/editable-html"));
|
|
61
|
+
|
|
62
|
+
var _reactBeautifulDnd = require("react-beautiful-dnd");
|
|
63
|
+
|
|
64
|
+
var _debug = _interopRequireDefault(require("debug"));
|
|
65
|
+
|
|
66
|
+
var _takeRight = _interopRequireDefault(require("lodash/takeRight"));
|
|
67
|
+
|
|
68
|
+
var _pointMenu = _interopRequireDefault(require("./point-menu"));
|
|
69
|
+
|
|
70
|
+
var _range = _interopRequireDefault(require("lodash/range"));
|
|
71
|
+
|
|
72
|
+
var _configUi = require("@pie-lib/config-ui");
|
|
73
|
+
|
|
74
|
+
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; }
|
|
75
|
+
|
|
76
|
+
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; }
|
|
77
|
+
|
|
78
|
+
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); }; }
|
|
79
|
+
|
|
80
|
+
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; } }
|
|
81
|
+
|
|
82
|
+
var log = (0, _debug["default"])('pie-lib:rubric:authoring');
|
|
83
|
+
|
|
84
|
+
var reorder = function reorder(list, startIndex, endIndex) {
|
|
85
|
+
var result = Array.from(list);
|
|
86
|
+
|
|
87
|
+
var _result$splice = result.splice(startIndex, 1),
|
|
88
|
+
_result$splice2 = (0, _slicedToArray2["default"])(_result$splice, 1),
|
|
89
|
+
removed = _result$splice2[0];
|
|
90
|
+
|
|
91
|
+
result.splice(endIndex, 0, removed);
|
|
92
|
+
return result;
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
var RubricType = _propTypes["default"].shape({
|
|
96
|
+
excludeZero: _propTypes["default"].bool,
|
|
97
|
+
points: _propTypes["default"].arrayOf(_propTypes["default"].string),
|
|
98
|
+
sampleAnswers: _propTypes["default"].arrayOf(_propTypes["default"].string),
|
|
99
|
+
maxPoints: _propTypes["default"].number,
|
|
100
|
+
rubriclessInstruction: _propTypes["default"].string
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
exports.RubricType = RubricType;
|
|
104
|
+
var MaxPoints = (0, _styles.withStyles)(function (theme) {
|
|
105
|
+
return {
|
|
106
|
+
formControl: {
|
|
107
|
+
minWidth: '120px',
|
|
108
|
+
margin: theme.spacing.unit
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
})(function (props) {
|
|
112
|
+
var value = props.value,
|
|
113
|
+
_onChange = props.onChange,
|
|
114
|
+
max = props.max,
|
|
115
|
+
classes = props.classes;
|
|
116
|
+
return /*#__PURE__*/_react["default"].createElement(_FormControl["default"], {
|
|
117
|
+
className: classes.formControl,
|
|
118
|
+
variant: "outlined"
|
|
119
|
+
}, /*#__PURE__*/_react["default"].createElement(_InputLabel["default"], {
|
|
120
|
+
width: 100,
|
|
121
|
+
htmlFor: "..."
|
|
122
|
+
}, "Max Points"), /*#__PURE__*/_react["default"].createElement(_Select["default"], {
|
|
123
|
+
value: value,
|
|
124
|
+
onChange: function onChange(e) {
|
|
125
|
+
return _onChange(e.target.value);
|
|
126
|
+
},
|
|
127
|
+
input: /*#__PURE__*/_react["default"].createElement(_OutlinedInput["default"], {
|
|
128
|
+
labelWidth: 80
|
|
129
|
+
})
|
|
130
|
+
}, (0, _range["default"])(1, max + 1).map(function (v) {
|
|
131
|
+
return /*#__PURE__*/_react["default"].createElement(_MenuItem["default"], {
|
|
132
|
+
key: "".concat(v),
|
|
133
|
+
value: v
|
|
134
|
+
}, v);
|
|
135
|
+
})));
|
|
136
|
+
}); // if the value is null or 'null', the Sample Answer input field for that point will not be dispalyed
|
|
137
|
+
// if the value is '', the Sample Answer input field will be empty
|
|
138
|
+
|
|
139
|
+
var checkSampleAnswer = function checkSampleAnswer(sampleAnswer) {
|
|
140
|
+
return sampleAnswer === null || sampleAnswer === 'null';
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
var PointConfig = (0, _styles.withStyles)(function (theme) {
|
|
144
|
+
return {
|
|
145
|
+
pointConfig: {},
|
|
146
|
+
row: {
|
|
147
|
+
display: 'flex',
|
|
148
|
+
width: '100%',
|
|
149
|
+
position: 'relative'
|
|
150
|
+
},
|
|
151
|
+
editor: {
|
|
152
|
+
width: '100%',
|
|
153
|
+
backgroundColor: "".concat(theme.palette.common.white, " !important")
|
|
154
|
+
},
|
|
155
|
+
dragIndicator: {
|
|
156
|
+
paddingTop: theme.spacing.unit,
|
|
157
|
+
color: _grey["default"][500]
|
|
158
|
+
},
|
|
159
|
+
pointsLabel: {
|
|
160
|
+
color: _grey["default"][500],
|
|
161
|
+
paddingBottom: theme.spacing.unit,
|
|
162
|
+
textTransform: 'uppercase'
|
|
163
|
+
},
|
|
164
|
+
sampleAnswersEditor: {
|
|
165
|
+
paddingLeft: theme.spacing.unit * 3
|
|
166
|
+
},
|
|
167
|
+
pointMenu: {
|
|
168
|
+
position: 'absolute',
|
|
169
|
+
right: 0
|
|
170
|
+
},
|
|
171
|
+
errorText: {
|
|
172
|
+
fontSize: theme.typography.fontSize - 2,
|
|
173
|
+
color: theme.palette.error.main,
|
|
174
|
+
paddingLeft: theme.spacing.unit * 3,
|
|
175
|
+
paddingTop: theme.spacing.unit
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
})(function (props) {
|
|
179
|
+
var points = props.points,
|
|
180
|
+
content = props.content,
|
|
181
|
+
classes = props.classes,
|
|
182
|
+
sampleAnswer = props.sampleAnswer,
|
|
183
|
+
_props$mathMlOptions = props.mathMlOptions,
|
|
184
|
+
mathMlOptions = _props$mathMlOptions === void 0 ? {} : _props$mathMlOptions,
|
|
185
|
+
error = props.error,
|
|
186
|
+
_props$pluginOpts = props.pluginOpts,
|
|
187
|
+
pluginOpts = _props$pluginOpts === void 0 ? {} : _props$pluginOpts;
|
|
188
|
+
var pointsLabel = "".concat(points, " ").concat(points <= 1 ? 'pt' : 'pts');
|
|
189
|
+
var showSampleAnswer = checkSampleAnswer(sampleAnswer);
|
|
190
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
191
|
+
className: classes.pointConfig
|
|
192
|
+
}, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
|
|
193
|
+
variant: "overline",
|
|
194
|
+
className: classes.pointsLabel
|
|
195
|
+
}, pointsLabel), /*#__PURE__*/_react["default"].createElement("div", {
|
|
196
|
+
className: classes.row
|
|
197
|
+
}, /*#__PURE__*/_react["default"].createElement(_DragIndicator["default"], {
|
|
198
|
+
className: classes.dragIndicator
|
|
199
|
+
}), /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
|
|
200
|
+
className: classes.editor,
|
|
201
|
+
error: error,
|
|
202
|
+
pluginProps: pluginOpts,
|
|
203
|
+
markup: content,
|
|
204
|
+
onChange: props.onChange,
|
|
205
|
+
mathMlOptions: mathMlOptions
|
|
206
|
+
}), /*#__PURE__*/_react["default"].createElement(_pointMenu["default"], {
|
|
207
|
+
classes: {
|
|
208
|
+
icon: classes.pointMenu
|
|
209
|
+
},
|
|
210
|
+
showSampleAnswer: showSampleAnswer,
|
|
211
|
+
onChange: props.onMenuChange
|
|
212
|
+
})), error && /*#__PURE__*/_react["default"].createElement("div", {
|
|
213
|
+
className: classes.errorText
|
|
214
|
+
}, error), !showSampleAnswer && /*#__PURE__*/_react["default"].createElement("div", {
|
|
215
|
+
className: classes.sampleAnswersEditor
|
|
216
|
+
}, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
|
|
217
|
+
variant: "overline",
|
|
218
|
+
className: classes.dragIndicator
|
|
219
|
+
}, "Sample Response"), /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
|
|
220
|
+
className: classes.editor,
|
|
221
|
+
markup: sampleAnswer,
|
|
222
|
+
pluginProps: pluginOpts,
|
|
223
|
+
onChange: props.onSampleChange,
|
|
224
|
+
mathMlOptions: mathMlOptions
|
|
225
|
+
})));
|
|
226
|
+
});
|
|
227
|
+
exports.PointConfig = PointConfig;
|
|
228
|
+
|
|
229
|
+
var RawAuthoring = /*#__PURE__*/function (_React$Component) {
|
|
230
|
+
(0, _inherits2["default"])(RawAuthoring, _React$Component);
|
|
231
|
+
|
|
232
|
+
var _super = _createSuper(RawAuthoring);
|
|
233
|
+
|
|
234
|
+
function RawAuthoring() {
|
|
235
|
+
var _this;
|
|
236
|
+
|
|
237
|
+
(0, _classCallCheck2["default"])(this, RawAuthoring);
|
|
238
|
+
|
|
239
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
240
|
+
args[_key] = arguments[_key];
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
_this = _super.call.apply(_super, [this].concat(args));
|
|
244
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "dragEnd", function (result) {
|
|
245
|
+
if (!result.destination) {
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
var _this$props = _this.props,
|
|
250
|
+
value = _this$props.value,
|
|
251
|
+
onChange = _this$props.onChange;
|
|
252
|
+
var points = reorder(value.points, result.source.index, result.destination.index);
|
|
253
|
+
var sampleAnswers = reorder(value.sampleAnswers, result.source.index, result.destination.index);
|
|
254
|
+
onChange(_objectSpread(_objectSpread({}, value), {}, {
|
|
255
|
+
points: points,
|
|
256
|
+
sampleAnswers: sampleAnswers
|
|
257
|
+
}));
|
|
258
|
+
});
|
|
259
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeRubriclessInstruction", function (input) {
|
|
260
|
+
var _this$props2 = _this.props,
|
|
261
|
+
value = _this$props2.value,
|
|
262
|
+
onChange = _this$props2.onChange;
|
|
263
|
+
onChange(_objectSpread(_objectSpread({}, value), {}, {
|
|
264
|
+
rubriclessInstruction: input
|
|
265
|
+
}));
|
|
266
|
+
});
|
|
267
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeMaxPoints", function (maxPoints) {
|
|
268
|
+
var _this$props3 = _this.props,
|
|
269
|
+
value = _this$props3.value,
|
|
270
|
+
onChange = _this$props3.onChange,
|
|
271
|
+
rubricless = _this$props3.rubricless;
|
|
272
|
+
var currentMax = value.points.length - 1;
|
|
273
|
+
log('current', currentMax, 'new: ', maxPoints);
|
|
274
|
+
var points, sampleAnswers;
|
|
275
|
+
|
|
276
|
+
if (maxPoints > currentMax) {
|
|
277
|
+
points = (0, _times["default"])(maxPoints - currentMax).map(function () {
|
|
278
|
+
return '';
|
|
279
|
+
}).concat(value.points);
|
|
280
|
+
sampleAnswers = (0, _times["default"])(maxPoints - currentMax).map(function () {
|
|
281
|
+
return null;
|
|
282
|
+
}).concat(value.sampleAnswers);
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
if (maxPoints < currentMax) {
|
|
286
|
+
log('less than');
|
|
287
|
+
points = (0, _takeRight["default"])(value.points, maxPoints + 1);
|
|
288
|
+
sampleAnswers = (0, _takeRight["default"])(value.sampleAnswers, maxPoints + 1);
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
if (points && !rubricless) {
|
|
292
|
+
onChange(_objectSpread(_objectSpread({}, value), {}, {
|
|
293
|
+
points: points,
|
|
294
|
+
sampleAnswers: sampleAnswers,
|
|
295
|
+
maxPoints: maxPoints
|
|
296
|
+
}));
|
|
297
|
+
} else {
|
|
298
|
+
onChange(_objectSpread(_objectSpread({}, value), {}, {
|
|
299
|
+
maxPoints: maxPoints
|
|
300
|
+
}));
|
|
301
|
+
}
|
|
302
|
+
});
|
|
303
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeContent", function (index, content, type) {
|
|
304
|
+
// type could be 'points' or 'sampleAnswers'
|
|
305
|
+
log("changeModel[".concat(type, "]:"), index, content);
|
|
306
|
+
|
|
307
|
+
if (type !== 'points' && type !== 'sampleAnswers') {
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
var _this$props4 = _this.props,
|
|
312
|
+
value = _this$props4.value,
|
|
313
|
+
onChange = _this$props4.onChange;
|
|
314
|
+
var items = value[type] && Array.from(value[type]);
|
|
315
|
+
items.splice(index, 1, content);
|
|
316
|
+
log("changeModel[".concat(type, "]:"), items);
|
|
317
|
+
onChange(_objectSpread(_objectSpread({}, value), {}, (0, _defineProperty2["default"])({}, type, items)));
|
|
318
|
+
});
|
|
319
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "excludeZeros", function () {
|
|
320
|
+
var _this$props5 = _this.props,
|
|
321
|
+
value = _this$props5.value,
|
|
322
|
+
onChange = _this$props5.onChange;
|
|
323
|
+
onChange(_objectSpread(_objectSpread({}, value), {}, {
|
|
324
|
+
excludeZero: !value.excludeZero
|
|
325
|
+
}));
|
|
326
|
+
});
|
|
327
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "shouldRenderPoint", function (index, value) {
|
|
328
|
+
if (!value.excludeZero) {
|
|
329
|
+
return true;
|
|
330
|
+
} else {
|
|
331
|
+
if (index < value.points.length - 1) {
|
|
332
|
+
return true;
|
|
333
|
+
} else if (index === value.points.length - 1) {
|
|
334
|
+
return false;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
return true;
|
|
338
|
+
}
|
|
339
|
+
});
|
|
340
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onPointMenuChange", function (index, clickedItem) {
|
|
341
|
+
if (clickedItem === 'sample') {
|
|
342
|
+
var value = _this.props.value;
|
|
343
|
+
var sampleAnswers = Array.from(value.sampleAnswers || []);
|
|
344
|
+
|
|
345
|
+
if (checkSampleAnswer(sampleAnswers[index])) {
|
|
346
|
+
// an empty string will display an empty Sample Answer input field
|
|
347
|
+
_this.changeContent(index, '', 'sampleAnswers');
|
|
348
|
+
} else {
|
|
349
|
+
// when the content is null or 'null', the Sample Answer input field will not be displayed
|
|
350
|
+
_this.changeContent(index, null, 'sampleAnswers');
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
});
|
|
354
|
+
return _this;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
(0, _createClass2["default"])(RawAuthoring, [{
|
|
358
|
+
key: "render",
|
|
359
|
+
value: function render() {
|
|
360
|
+
var _this2 = this;
|
|
361
|
+
|
|
362
|
+
var _this$props6 = this.props,
|
|
363
|
+
classes = _this$props6.classes,
|
|
364
|
+
className = _this$props6.className,
|
|
365
|
+
value = _this$props6.value,
|
|
366
|
+
_this$props6$mathMlOp = _this$props6.mathMlOptions,
|
|
367
|
+
mathMlOptions = _this$props6$mathMlOp === void 0 ? {} : _this$props6$mathMlOp,
|
|
368
|
+
_this$props6$config = _this$props6.config,
|
|
369
|
+
config = _this$props6$config === void 0 ? {} : _this$props6$config,
|
|
370
|
+
_this$props6$rubricle = _this$props6.rubricless,
|
|
371
|
+
rubricless = _this$props6$rubricle === void 0 ? false : _this$props6$rubricle,
|
|
372
|
+
_this$props6$pluginOp = _this$props6.pluginOpts,
|
|
373
|
+
pluginOpts = _this$props6$pluginOp === void 0 ? {} : _this$props6$pluginOp;
|
|
374
|
+
|
|
375
|
+
var _ref = value || {},
|
|
376
|
+
_ref$excludeZeroEnabl = _ref.excludeZeroEnabled,
|
|
377
|
+
excludeZeroEnabled = _ref$excludeZeroEnabl === void 0 ? true : _ref$excludeZeroEnabl,
|
|
378
|
+
_ref$maxPointsEnabled = _ref.maxPointsEnabled,
|
|
379
|
+
maxPointsEnabled = _ref$maxPointsEnabled === void 0 ? true : _ref$maxPointsEnabled,
|
|
380
|
+
_ref$errors = _ref.errors,
|
|
381
|
+
errors = _ref$errors === void 0 ? {} : _ref$errors,
|
|
382
|
+
_ref$rubriclessInstru = _ref.rubriclessInstructionEnabled,
|
|
383
|
+
rubriclessInstructionEnabled = _ref$rubriclessInstru === void 0 ? false : _ref$rubriclessInstru,
|
|
384
|
+
_ref$maxPoints = _ref.maxPoints,
|
|
385
|
+
maxPoints = _ref$maxPoints === void 0 ? 10 : _ref$maxPoints; // rubric will contain a max value for maxPoints
|
|
386
|
+
|
|
387
|
+
|
|
388
|
+
var _ref2 = config || {},
|
|
389
|
+
_ref2$rubriclessInstr = _ref2.rubriclessInstruction,
|
|
390
|
+
rubriclessInstruction = _ref2$rubriclessInstr === void 0 ? {} : _ref2$rubriclessInstr,
|
|
391
|
+
_ref2$maxMaxPoints = _ref2.maxMaxPoints,
|
|
392
|
+
maxMaxPoints = _ref2$maxMaxPoints === void 0 ? 10 : _ref2$maxMaxPoints;
|
|
393
|
+
|
|
394
|
+
var _ref3 = errors || {},
|
|
395
|
+
pointsDescriptorsErrors = _ref3.pointsDescriptorsErrors;
|
|
396
|
+
|
|
397
|
+
if (value && Number.isFinite(value.maxPoints)) {
|
|
398
|
+
// eslint-disable-next-line no-console
|
|
399
|
+
console.warn('maxPoints is deprecated - remove from model');
|
|
400
|
+
} // for rubric value is computed based on points
|
|
401
|
+
|
|
402
|
+
|
|
403
|
+
var maxPointsValue = !rubricless ? value.points.length - 1 : maxPoints;
|
|
404
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
405
|
+
className: (0, _classnames["default"])(classes["class"], className)
|
|
406
|
+
}, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
|
|
407
|
+
variant: "h5",
|
|
408
|
+
className: classes.rubricTitle
|
|
409
|
+
}, "Rubric"), /*#__PURE__*/_react["default"].createElement(_FormGroup["default"], {
|
|
410
|
+
row: true
|
|
411
|
+
}, maxPointsEnabled && /*#__PURE__*/_react["default"].createElement(MaxPoints, {
|
|
412
|
+
max: maxMaxPoints < 100 ? maxMaxPoints : 100,
|
|
413
|
+
value: maxPointsValue,
|
|
414
|
+
onChange: this.changeMaxPoints,
|
|
415
|
+
pluginOpts: pluginOpts
|
|
416
|
+
}), excludeZeroEnabled && /*#__PURE__*/_react["default"].createElement(_FormControlLabel["default"], {
|
|
417
|
+
label: "Exclude zeros",
|
|
418
|
+
control: /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
|
|
419
|
+
checked: value.excludeZero,
|
|
420
|
+
onChange: this.excludeZeros
|
|
421
|
+
})
|
|
422
|
+
})), rubriclessInstructionEnabled && rubricless && /*#__PURE__*/_react["default"].createElement(_configUi.InputContainer, {
|
|
423
|
+
label: rubriclessInstruction.label,
|
|
424
|
+
className: classes.inputContainer
|
|
425
|
+
}, /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
|
|
426
|
+
className: classes.input,
|
|
427
|
+
markup: value.rubriclessInstruction || '',
|
|
428
|
+
onChange: this.changeRubriclessInstruction,
|
|
429
|
+
pluginProps: pluginOpts,
|
|
430
|
+
nonEmpty: false,
|
|
431
|
+
disableUnderline: true,
|
|
432
|
+
languageCharactersProps: [{
|
|
433
|
+
language: 'spanish'
|
|
434
|
+
}, {
|
|
435
|
+
language: 'special'
|
|
436
|
+
}],
|
|
437
|
+
mathMlOptions: mathMlOptions
|
|
438
|
+
})), /*#__PURE__*/_react["default"].createElement("div", {
|
|
439
|
+
className: rubricless ? classes.rubricless : classes.container
|
|
440
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactBeautifulDnd.DragDropContext, {
|
|
441
|
+
onDragEnd: this.dragEnd
|
|
442
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactBeautifulDnd.Droppable, {
|
|
443
|
+
droppableId: "droppable"
|
|
444
|
+
}, function (provided) {
|
|
445
|
+
return /*#__PURE__*/_react["default"].createElement("div", (0, _extends2["default"])({}, provided.droppableProps, {
|
|
446
|
+
ref: provided.innerRef
|
|
447
|
+
}), value.points.map(function (p, index) {
|
|
448
|
+
return _this2.shouldRenderPoint(index, value) && /*#__PURE__*/_react["default"].createElement(_reactBeautifulDnd.Draggable, {
|
|
449
|
+
key: "".concat(p.points, "-").concat(index),
|
|
450
|
+
index: index,
|
|
451
|
+
draggableId: index.toString()
|
|
452
|
+
}, function (provided) {
|
|
453
|
+
return /*#__PURE__*/_react["default"].createElement("div", (0, _extends2["default"])({
|
|
454
|
+
className: classes.configHolder,
|
|
455
|
+
ref: provided.innerRef
|
|
456
|
+
}, provided.draggableProps, provided.dragHandleProps), /*#__PURE__*/_react["default"].createElement(PointConfig, {
|
|
457
|
+
points: value.points.length - 1 - index,
|
|
458
|
+
content: p,
|
|
459
|
+
error: pointsDescriptorsErrors && pointsDescriptorsErrors[value.points.length - 1 - index],
|
|
460
|
+
sampleAnswer: value.sampleAnswers && value.sampleAnswers[index],
|
|
461
|
+
onChange: function onChange(content) {
|
|
462
|
+
return _this2.changeContent(index, content, 'points');
|
|
463
|
+
},
|
|
464
|
+
onSampleChange: function onSampleChange(content) {
|
|
465
|
+
return _this2.changeContent(index, content, 'sampleAnswers');
|
|
466
|
+
},
|
|
467
|
+
onMenuChange: function onMenuChange(clickedItem) {
|
|
468
|
+
return _this2.onPointMenuChange(index, clickedItem);
|
|
469
|
+
},
|
|
470
|
+
mathMlOptions: mathMlOptions,
|
|
471
|
+
pluginOpts: pluginOpts
|
|
472
|
+
}));
|
|
473
|
+
});
|
|
474
|
+
}), provided.placeholder);
|
|
475
|
+
}))));
|
|
476
|
+
}
|
|
477
|
+
}]);
|
|
478
|
+
return RawAuthoring;
|
|
479
|
+
}(_react["default"].Component);
|
|
480
|
+
|
|
481
|
+
exports.RawAuthoring = RawAuthoring;
|
|
482
|
+
(0, _defineProperty2["default"])(RawAuthoring, "propTypes", {
|
|
483
|
+
classes: _propTypes["default"].object.isRequired,
|
|
484
|
+
className: _propTypes["default"].string,
|
|
485
|
+
value: RubricType,
|
|
486
|
+
config: _propTypes["default"].object,
|
|
487
|
+
pluginOpts: _propTypes["default"].object,
|
|
488
|
+
rubricless: _propTypes["default"].bool,
|
|
489
|
+
onChange: _propTypes["default"].func
|
|
490
|
+
});
|
|
491
|
+
(0, _defineProperty2["default"])(RawAuthoring, "defaultProps", {});
|
|
492
|
+
|
|
493
|
+
var styles = function styles(theme) {
|
|
494
|
+
return {
|
|
495
|
+
container: {
|
|
496
|
+
backgroundColor: _grey["default"][200],
|
|
497
|
+
borderWidth: 1,
|
|
498
|
+
borderStyle: 'solid',
|
|
499
|
+
borderColor: _grey["default"][300],
|
|
500
|
+
padding: theme.spacing.unit * 2,
|
|
501
|
+
margin: theme.spacing.unit
|
|
502
|
+
},
|
|
503
|
+
inputContainer: {
|
|
504
|
+
width: '100%',
|
|
505
|
+
paddingTop: theme.spacing.unit * 2,
|
|
506
|
+
marginBottom: theme.spacing.unit * 2
|
|
507
|
+
},
|
|
508
|
+
rubricless: {
|
|
509
|
+
display: 'none'
|
|
510
|
+
},
|
|
511
|
+
configHolder: {
|
|
512
|
+
paddingTop: theme.spacing.unit,
|
|
513
|
+
paddingBottom: theme.spacing.unit
|
|
514
|
+
},
|
|
515
|
+
rubricTitle: {
|
|
516
|
+
paddingLeft: theme.spacing.unit,
|
|
517
|
+
margin: theme.spacing.unit
|
|
518
|
+
}
|
|
519
|
+
};
|
|
520
|
+
};
|
|
521
|
+
|
|
522
|
+
var StyledRawAuthoring = (0, _styles.withStyles)(styles)(RawAuthoring);
|
|
523
|
+
|
|
524
|
+
var Reverse = function Reverse(props) {
|
|
525
|
+
var _ref4 = props || {},
|
|
526
|
+
_ref4$rubricless = _ref4.rubricless,
|
|
527
|
+
rubricless = _ref4$rubricless === void 0 ? false : _ref4$rubricless,
|
|
528
|
+
_ref4$config = _ref4.config,
|
|
529
|
+
config = _ref4$config === void 0 ? {} : _ref4$config,
|
|
530
|
+
_ref4$pluginOpts = _ref4.pluginOpts,
|
|
531
|
+
pluginOpts = _ref4$pluginOpts === void 0 ? {} : _ref4$pluginOpts;
|
|
532
|
+
|
|
533
|
+
var points = Array.from(props.value.points || []).reverse();
|
|
534
|
+
var sampleAnswers = Array.from(props.value.sampleAnswers || []).reverse();
|
|
535
|
+
|
|
536
|
+
if (points.length > sampleAnswers.length) {
|
|
537
|
+
sampleAnswers = (0, _times["default"])(points.length - sampleAnswers.length).map(function () {
|
|
538
|
+
return null;
|
|
539
|
+
}).concat(sampleAnswers);
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
var value = _objectSpread(_objectSpread({}, props.value), {}, {
|
|
543
|
+
points: points,
|
|
544
|
+
sampleAnswers: sampleAnswers
|
|
545
|
+
});
|
|
546
|
+
|
|
547
|
+
var onChange = function onChange(value) {
|
|
548
|
+
props.onChange(_objectSpread(_objectSpread({}, value), {}, {
|
|
549
|
+
points: Array.from(value.points || []).reverse(),
|
|
550
|
+
sampleAnswers: Array.from(value.sampleAnswers || []).reverse()
|
|
551
|
+
}));
|
|
552
|
+
};
|
|
553
|
+
|
|
554
|
+
return /*#__PURE__*/_react["default"].createElement(StyledRawAuthoring, {
|
|
555
|
+
value: value,
|
|
556
|
+
config: config,
|
|
557
|
+
onChange: onChange,
|
|
558
|
+
rubricless: rubricless,
|
|
559
|
+
pluginOpts: pluginOpts
|
|
560
|
+
});
|
|
561
|
+
};
|
|
562
|
+
|
|
563
|
+
Reverse.propTypes = {
|
|
564
|
+
value: RubricType,
|
|
565
|
+
config: _propTypes["default"].object,
|
|
566
|
+
pluginOpts: _propTypes["default"].object,
|
|
567
|
+
rubricless: _propTypes["default"].bool,
|
|
568
|
+
getIndex: _propTypes["default"].func,
|
|
569
|
+
onChange: _propTypes["default"].func
|
|
570
|
+
};
|
|
571
|
+
var _default = Reverse;
|
|
572
|
+
exports["default"] = _default;
|
|
573
|
+
//# sourceMappingURL=authoring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/authoring.jsx"],"names":["log","reorder","list","startIndex","endIndex","result","Array","from","splice","removed","RubricType","PropTypes","shape","excludeZero","bool","points","arrayOf","string","sampleAnswers","maxPoints","number","rubriclessInstruction","MaxPoints","theme","formControl","minWidth","margin","spacing","unit","props","value","onChange","max","classes","e","target","map","v","checkSampleAnswer","sampleAnswer","PointConfig","pointConfig","row","display","width","position","editor","backgroundColor","palette","common","white","dragIndicator","paddingTop","color","grey","pointsLabel","paddingBottom","textTransform","sampleAnswersEditor","paddingLeft","pointMenu","right","errorText","fontSize","typography","error","main","content","mathMlOptions","pluginOpts","showSampleAnswer","icon","onMenuChange","onSampleChange","RawAuthoring","destination","source","index","input","rubricless","currentMax","length","concat","type","items","clickedItem","changeContent","className","config","excludeZeroEnabled","maxPointsEnabled","errors","rubriclessInstructionEnabled","maxMaxPoints","pointsDescriptorsErrors","Number","isFinite","console","warn","maxPointsValue","rubricTitle","changeMaxPoints","excludeZeros","label","inputContainer","changeRubriclessInstruction","language","container","dragEnd","provided","droppableProps","innerRef","p","shouldRenderPoint","toString","configHolder","draggableProps","dragHandleProps","onPointMenuChange","placeholder","React","Component","object","isRequired","func","styles","borderWidth","borderStyle","borderColor","padding","marginBottom","StyledRawAuthoring","Reverse","reverse","propTypes","getIndex"],"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 OutlinedInput from '@material-ui/core/OutlinedInput';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport Select from '@material-ui/core/Select';\nimport FormControl from '@material-ui/core/FormControl';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport times from 'lodash/times';\nimport Checkbox from '@material-ui/core/Checkbox';\nimport FormGroup from '@material-ui/core/FormGroup';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport grey from '@material-ui/core/colors/grey';\nimport Typography from '@material-ui/core/Typography';\nimport DragIndicator from '@material-ui/icons/DragIndicator';\nimport EditableHtml from '@pie-lib/editable-html';\nimport { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd';\nimport debug from 'debug';\nimport takeRight from 'lodash/takeRight';\nimport PointMenu from './point-menu';\n\nimport range from 'lodash/range';\nimport { InputContainer } from '@pie-lib/config-ui';\n\nconst log = debug('pie-lib:rubric:authoring');\n\nconst reorder = (list, startIndex, endIndex) => {\n const result = Array.from(list);\n const [removed] = result.splice(startIndex, 1);\n\n result.splice(endIndex, 0, removed);\n\n return result;\n};\n\nexport const RubricType = PropTypes.shape({\n excludeZero: PropTypes.bool,\n points: PropTypes.arrayOf(PropTypes.string),\n sampleAnswers: PropTypes.arrayOf(PropTypes.string),\n maxPoints: PropTypes.number,\n rubriclessInstruction: PropTypes.string,\n});\n\nconst MaxPoints = withStyles((theme) => ({\n formControl: {\n minWidth: '120px',\n margin: theme.spacing.unit,\n },\n}))((props) => {\n const { value, onChange, max, classes } = props;\n\n return (\n <FormControl className={classes.formControl} variant=\"outlined\">\n <InputLabel width={100} htmlFor=\"...\">\n Max Points\n </InputLabel>\n <Select value={value} onChange={(e) => onChange(e.target.value)} input={<OutlinedInput labelWidth={80} />}>\n {range(1, max + 1).map((v) => (\n <MenuItem key={`${v}`} value={v}>\n {v}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n );\n});\n\n// if the value is null or 'null', the Sample Answer input field for that point will not be dispalyed\n// if the value is '', the Sample Answer input field will be empty\nconst checkSampleAnswer = (sampleAnswer) => sampleAnswer === null || sampleAnswer === 'null';\n\nexport const PointConfig = withStyles((theme) => ({\n pointConfig: {},\n row: {\n display: 'flex',\n width: '100%',\n position: 'relative',\n },\n editor: {\n width: '100%',\n backgroundColor: `${theme.palette.common.white} !important`,\n },\n dragIndicator: {\n paddingTop: theme.spacing.unit,\n color: grey[500],\n },\n pointsLabel: {\n color: grey[500],\n paddingBottom: theme.spacing.unit,\n textTransform: 'uppercase',\n },\n sampleAnswersEditor: {\n paddingLeft: theme.spacing.unit * 3,\n },\n pointMenu: {\n position: 'absolute',\n right: 0,\n },\n errorText: {\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n paddingLeft: theme.spacing.unit * 3,\n paddingTop: theme.spacing.unit,\n },\n}))((props) => {\n const { points, content, classes, sampleAnswer, mathMlOptions = {}, error, pluginOpts = {} } = props;\n const pointsLabel = `${points} ${points <= 1 ? 'pt' : 'pts'}`;\n const showSampleAnswer = checkSampleAnswer(sampleAnswer);\n\n return (\n <div className={classes.pointConfig}>\n <Typography variant=\"overline\" className={classes.pointsLabel}>\n {pointsLabel}\n </Typography>\n\n <div className={classes.row}>\n <DragIndicator className={classes.dragIndicator} />\n <EditableHtml\n className={classes.editor}\n error={error}\n pluginProps={pluginOpts}\n markup={content}\n onChange={props.onChange}\n mathMlOptions={mathMlOptions}\n />\n <PointMenu\n classes={{\n icon: classes.pointMenu,\n }}\n showSampleAnswer={showSampleAnswer}\n onChange={props.onMenuChange}\n />\n </div>\n {error && <div className={classes.errorText}>{error}</div>}\n {!showSampleAnswer && (\n <div className={classes.sampleAnswersEditor}>\n <Typography variant=\"overline\" className={classes.dragIndicator}>\n Sample Response\n </Typography>\n <EditableHtml\n className={classes.editor}\n markup={sampleAnswer}\n pluginProps={pluginOpts}\n onChange={props.onSampleChange}\n mathMlOptions={mathMlOptions}\n />\n </div>\n )}\n </div>\n );\n});\n\nexport class RawAuthoring extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n className: PropTypes.string,\n value: RubricType,\n config: PropTypes.object,\n pluginOpts: PropTypes.object,\n rubricless: PropTypes.bool,\n onChange: PropTypes.func,\n };\n\n static defaultProps = {};\n\n dragEnd = (result) => {\n if (!result.destination) {\n return;\n }\n\n const { value, onChange } = this.props;\n\n const points = reorder(value.points, result.source.index, result.destination.index);\n const sampleAnswers = reorder(value.sampleAnswers, result.source.index, result.destination.index);\n\n onChange({ ...value, points, sampleAnswers });\n };\n\n changeRubriclessInstruction = (input) => {\n const { value, onChange } = this.props;\n onChange({ ...value, rubriclessInstruction: input });\n };\n\n changeMaxPoints = (maxPoints) => {\n const { value, onChange, rubricless } = this.props;\n const currentMax = value.points.length - 1;\n\n log('current', currentMax, 'new: ', maxPoints);\n\n let points, sampleAnswers;\n if (maxPoints > currentMax) {\n points = times(maxPoints - currentMax)\n .map(() => '')\n .concat(value.points);\n sampleAnswers = times(maxPoints - currentMax)\n .map(() => null)\n .concat(value.sampleAnswers);\n }\n\n if (maxPoints < currentMax) {\n log('less than');\n points = takeRight(value.points, maxPoints + 1);\n sampleAnswers = takeRight(value.sampleAnswers, maxPoints + 1);\n }\n\n if (points && !rubricless) {\n onChange({ ...value, points, sampleAnswers, maxPoints });\n } else {\n onChange({ ...value, maxPoints });\n }\n };\n\n changeContent = (index, content, type) => {\n // type could be 'points' or 'sampleAnswers'\n log(`changeModel[${type}]:`, index, content);\n\n if (type !== 'points' && type !== 'sampleAnswers') {\n return;\n }\n\n const { value, onChange } = this.props;\n const items = value[type] && Array.from(value[type]);\n\n items.splice(index, 1, content);\n log(`changeModel[${type}]:`, items);\n\n onChange({ ...value, [type]: items });\n };\n\n excludeZeros = () => {\n const { value, onChange } = this.props;\n\n onChange({ ...value, excludeZero: !value.excludeZero });\n };\n\n shouldRenderPoint = (index, value) => {\n if (!value.excludeZero) {\n return true;\n } else {\n if (index < value.points.length - 1) {\n return true;\n } else if (index === value.points.length - 1) {\n return false;\n }\n\n return true;\n }\n };\n\n onPointMenuChange = (index, clickedItem) => {\n if (clickedItem === 'sample') {\n const { value } = this.props;\n const sampleAnswers = Array.from(value.sampleAnswers || []);\n\n if (checkSampleAnswer(sampleAnswers[index])) {\n // an empty string will display an empty Sample Answer input field\n this.changeContent(index, '', 'sampleAnswers');\n } else {\n // when the content is null or 'null', the Sample Answer input field will not be displayed\n this.changeContent(index, null, 'sampleAnswers');\n }\n }\n };\n\n render() {\n const {\n classes,\n className,\n value,\n mathMlOptions = {},\n config = {},\n rubricless = false,\n pluginOpts = {},\n } = this.props;\n let {\n excludeZeroEnabled = true,\n maxPointsEnabled = true,\n errors = {},\n rubriclessInstructionEnabled = false,\n maxPoints = 10,\n } = value || {};\n // rubric will contain a max value for maxPoints\n const { rubriclessInstruction = {}, maxMaxPoints = 10 } = config || {};\n const { pointsDescriptorsErrors } = errors || {};\n if (value && Number.isFinite(value.maxPoints)) {\n // eslint-disable-next-line no-console\n console.warn('maxPoints is deprecated - remove from model');\n }\n\n // for rubric value is computed based on points\n const maxPointsValue = !rubricless ? value.points.length - 1 : maxPoints;\n\n return (\n <div className={classNames(classes.class, className)}>\n <Typography variant=\"h5\" className={classes.rubricTitle}>\n Rubric\n </Typography>\n <FormGroup row>\n {maxPointsEnabled && (\n <MaxPoints\n max={maxMaxPoints < 100 ? maxMaxPoints : 100}\n value={maxPointsValue}\n onChange={this.changeMaxPoints}\n pluginOpts={pluginOpts}\n />\n )}\n {excludeZeroEnabled && (\n <FormControlLabel\n label=\"Exclude zeros\"\n control={<Checkbox checked={value.excludeZero} onChange={this.excludeZeros} />}\n />\n )}\n </FormGroup>\n\n {rubriclessInstructionEnabled && rubricless && (\n <InputContainer label={rubriclessInstruction.label} className={classes.inputContainer}>\n <EditableHtml\n className={classes.input}\n markup={value.rubriclessInstruction || ''}\n onChange={this.changeRubriclessInstruction}\n pluginProps={pluginOpts}\n nonEmpty={false}\n disableUnderline\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n />\n </InputContainer>\n )}\n\n <div className={rubricless ? classes.rubricless : classes.container}>\n <DragDropContext onDragEnd={this.dragEnd}>\n <Droppable droppableId=\"droppable\">\n {(provided) => (\n <div {...provided.droppableProps} ref={provided.innerRef}>\n {value.points.map(\n (p, index) =>\n this.shouldRenderPoint(index, value) && (\n <Draggable key={`${p.points}-${index}`} index={index} draggableId={index.toString()}>\n {(provided) => (\n <div\n className={classes.configHolder}\n ref={provided.innerRef}\n {...provided.draggableProps}\n {...provided.dragHandleProps}\n >\n <PointConfig\n points={value.points.length - 1 - index}\n content={p}\n error={\n pointsDescriptorsErrors && pointsDescriptorsErrors[value.points.length - 1 - index]\n }\n sampleAnswer={value.sampleAnswers && value.sampleAnswers[index]}\n onChange={(content) => this.changeContent(index, content, 'points')}\n onSampleChange={(content) => this.changeContent(index, content, 'sampleAnswers')}\n onMenuChange={(clickedItem) => this.onPointMenuChange(index, clickedItem)}\n mathMlOptions={mathMlOptions}\n pluginOpts={pluginOpts}\n />\n </div>\n )}\n </Draggable>\n ),\n )}\n {provided.placeholder}\n </div>\n )}\n </Droppable>\n </DragDropContext>\n </div>\n </div>\n );\n }\n}\n\nconst styles = (theme) => ({\n container: {\n backgroundColor: grey[200],\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: grey[300],\n padding: theme.spacing.unit * 2,\n margin: theme.spacing.unit,\n },\n inputContainer: {\n width: '100%',\n paddingTop: theme.spacing.unit * 2,\n marginBottom: theme.spacing.unit * 2,\n },\n rubricless: {\n display: 'none',\n },\n configHolder: {\n paddingTop: theme.spacing.unit,\n paddingBottom: theme.spacing.unit,\n },\n rubricTitle: {\n paddingLeft: theme.spacing.unit,\n margin: theme.spacing.unit,\n },\n});\n\nconst StyledRawAuthoring = withStyles(styles)(RawAuthoring);\n\nconst Reverse = (props) => {\n const { rubricless = false, config = {}, pluginOpts = {} } = props || {};\n const points = Array.from(props.value.points || []).reverse();\n let sampleAnswers = Array.from(props.value.sampleAnswers || []).reverse();\n\n if (points.length > sampleAnswers.length) {\n sampleAnswers = times(points.length - sampleAnswers.length)\n .map(() => null)\n .concat(sampleAnswers);\n }\n\n const value = { ...props.value, points, sampleAnswers };\n\n const onChange = (value) => {\n props.onChange({\n ...value,\n points: Array.from(value.points || []).reverse(),\n sampleAnswers: Array.from(value.sampleAnswers || []).reverse(),\n });\n };\n\n return (\n <StyledRawAuthoring\n value={value}\n config={config}\n onChange={onChange}\n rubricless={rubricless}\n pluginOpts={pluginOpts}\n />\n );\n};\n\nReverse.propTypes = {\n value: RubricType,\n config: PropTypes.object,\n pluginOpts: PropTypes.object,\n rubricless: PropTypes.bool,\n getIndex: PropTypes.func,\n onChange: PropTypes.func,\n};\n\nexport default Reverse;\n"],"file":"authoring.js"}
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
Object.defineProperty(exports, "Authoring", {
|
|
9
|
+
enumerable: true,
|
|
10
|
+
get: function get() {
|
|
11
|
+
return _authoring["default"];
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
exports.RUBRIC_TYPES = void 0;
|
|
15
|
+
|
|
16
|
+
var _authoring = _interopRequireDefault(require("./authoring"));
|
|
17
|
+
|
|
18
|
+
var RUBRIC_TYPES = {
|
|
19
|
+
SIMPLE_RUBRIC: 'simpleRubric',
|
|
20
|
+
MULTI_TRAIT_RUBRIC: 'multiTraitRubric',
|
|
21
|
+
RUBRICLESS: 'rubricless'
|
|
22
|
+
};
|
|
23
|
+
exports.RUBRIC_TYPES = RUBRIC_TYPES;
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.js"],"names":["RUBRIC_TYPES","SIMPLE_RUBRIC","MULTI_TRAIT_RUBRIC","RUBRICLESS"],"mappings":";;;;;;;;;;;;;;;AAAA;;AAEA,IAAMA,YAAY,GAAG;AACnBC,EAAAA,aAAa,EAAE,cADI;AAEnBC,EAAAA,kBAAkB,EAAE,kBAFD;AAGnBC,EAAAA,UAAU,EAAE;AAHO,CAArB","sourcesContent":["import Authoring from './authoring';\n\nconst RUBRIC_TYPES = {\n SIMPLE_RUBRIC: 'simpleRubric',\n MULTI_TRAIT_RUBRIC: 'multiTraitRubric',\n RUBRICLESS: 'rubricless',\n};\n\nexport { Authoring, RUBRIC_TYPES };\n"],"file":"index.js"}
|