@pie-lib/rubric 0.8.32-next.0 → 0.9.1-beta.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/lib/authoring.js DELETED
@@ -1,474 +0,0 @@
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
- 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; }
73
-
74
- 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; }
75
-
76
- 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); }; }
77
-
78
- 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; } }
79
-
80
- var log = (0, _debug["default"])('pie-lib:rubric:authoring');
81
-
82
- var reorder = function reorder(list, startIndex, endIndex) {
83
- var result = Array.from(list);
84
-
85
- var _result$splice = result.splice(startIndex, 1),
86
- _result$splice2 = (0, _slicedToArray2["default"])(_result$splice, 1),
87
- removed = _result$splice2[0];
88
-
89
- result.splice(endIndex, 0, removed);
90
- return result;
91
- };
92
-
93
- var RubricType = _propTypes["default"].shape({
94
- excludeZero: _propTypes["default"].bool,
95
- points: _propTypes["default"].arrayOf(_propTypes["default"].string),
96
- sampleAnswers: _propTypes["default"].arrayOf(_propTypes["default"].string),
97
- maxPoints: _propTypes["default"].number
98
- });
99
-
100
- exports.RubricType = RubricType;
101
- var MaxPoints = (0, _styles.withStyles)(function (theme) {
102
- return {
103
- formControl: {
104
- minWidth: '120px',
105
- margin: theme.spacing.unit
106
- }
107
- };
108
- })(function (props) {
109
- var value = props.value,
110
- _onChange = props.onChange,
111
- max = props.max,
112
- classes = props.classes;
113
- return /*#__PURE__*/_react["default"].createElement(_FormControl["default"], {
114
- className: classes.formControl,
115
- variant: "outlined"
116
- }, /*#__PURE__*/_react["default"].createElement(_InputLabel["default"], {
117
- width: 100,
118
- htmlFor: "..."
119
- }, "Max Points"), /*#__PURE__*/_react["default"].createElement(_Select["default"], {
120
- value: value,
121
- onChange: function onChange(e) {
122
- return _onChange(e.target.value);
123
- },
124
- input: /*#__PURE__*/_react["default"].createElement(_OutlinedInput["default"], {
125
- labelWidth: 80
126
- })
127
- }, (0, _range["default"])(1, max).map(function (v) {
128
- return /*#__PURE__*/_react["default"].createElement(_MenuItem["default"], {
129
- key: "".concat(v),
130
- value: v
131
- }, v);
132
- })));
133
- }); // if the value is null or 'null', the Sample Answer input field for that point will not be dispalyed
134
- // if the value is '', the Sample Answer input field will be empty
135
-
136
- var checkSampleAnswer = function checkSampleAnswer(sampleAnswer) {
137
- return sampleAnswer === null || sampleAnswer === 'null';
138
- };
139
-
140
- var PointConfig = (0, _styles.withStyles)(function (theme) {
141
- return {
142
- pointConfig: {},
143
- row: {
144
- display: 'flex',
145
- width: '100%',
146
- position: 'relative'
147
- },
148
- editor: {
149
- width: '100%',
150
- backgroundColor: "".concat(theme.palette.common.white, " !important")
151
- },
152
- dragIndicator: {
153
- paddingTop: theme.spacing.unit,
154
- color: _grey["default"][500]
155
- },
156
- pointsLabel: {
157
- color: _grey["default"][500],
158
- paddingBottom: theme.spacing.unit,
159
- textTransform: 'uppercase'
160
- },
161
- sampleAnswersEditor: {
162
- paddingLeft: theme.spacing.unit * 3
163
- },
164
- pointMenu: {
165
- position: 'absolute',
166
- right: 0
167
- }
168
- };
169
- })(function (props) {
170
- var points = props.points,
171
- content = props.content,
172
- classes = props.classes,
173
- sampleAnswer = props.sampleAnswer,
174
- _props$mathMlOptions = props.mathMlOptions,
175
- mathMlOptions = _props$mathMlOptions === void 0 ? {} : _props$mathMlOptions;
176
- var pointsLabel = "".concat(points, " ").concat(points <= 1 ? 'pt' : 'pts');
177
- var showSampleAnswer = checkSampleAnswer(sampleAnswer);
178
- return /*#__PURE__*/_react["default"].createElement("div", {
179
- className: classes.pointConfig
180
- }, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
181
- variant: "overline",
182
- className: classes.pointsLabel
183
- }, pointsLabel), /*#__PURE__*/_react["default"].createElement("div", {
184
- className: classes.row
185
- }, /*#__PURE__*/_react["default"].createElement(_DragIndicator["default"], {
186
- className: classes.dragIndicator
187
- }), /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
188
- className: classes.editor,
189
- markup: content,
190
- onChange: props.onChange,
191
- mathMlOptions: mathMlOptions
192
- }), /*#__PURE__*/_react["default"].createElement(_pointMenu["default"], {
193
- classes: {
194
- icon: classes.pointMenu
195
- },
196
- showSampleAnswer: showSampleAnswer,
197
- onChange: props.onMenuChange
198
- })), !showSampleAnswer && /*#__PURE__*/_react["default"].createElement("div", {
199
- className: classes.sampleAnswersEditor
200
- }, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
201
- variant: "overline",
202
- className: classes.dragIndicator
203
- }, "Sample Response"), /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
204
- className: classes.editor,
205
- markup: sampleAnswer,
206
- onChange: props.onSampleChange,
207
- mathMlOptions: mathMlOptions
208
- })));
209
- });
210
- exports.PointConfig = PointConfig;
211
-
212
- var RawAuthoring = /*#__PURE__*/function (_React$Component) {
213
- (0, _inherits2["default"])(RawAuthoring, _React$Component);
214
-
215
- var _super = _createSuper(RawAuthoring);
216
-
217
- function RawAuthoring() {
218
- var _this;
219
-
220
- (0, _classCallCheck2["default"])(this, RawAuthoring);
221
-
222
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
223
- args[_key] = arguments[_key];
224
- }
225
-
226
- _this = _super.call.apply(_super, [this].concat(args));
227
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "dragEnd", function (result) {
228
- if (!result.destination) {
229
- return;
230
- }
231
-
232
- var _this$props = _this.props,
233
- value = _this$props.value,
234
- onChange = _this$props.onChange;
235
- var points = reorder(value.points, result.source.index, result.destination.index);
236
- var sampleAnswers = reorder(value.sampleAnswers, result.source.index, result.destination.index);
237
- onChange(_objectSpread(_objectSpread({}, value), {}, {
238
- points: points,
239
- sampleAnswers: sampleAnswers
240
- }));
241
- });
242
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeMaxPoints", function (maxPoints) {
243
- var _this$props2 = _this.props,
244
- value = _this$props2.value,
245
- onChange = _this$props2.onChange;
246
- var currentMax = value.points.length - 1;
247
- log('current', currentMax, 'new: ', maxPoints);
248
- var points, sampleAnswers;
249
-
250
- if (maxPoints > currentMax) {
251
- points = (0, _times["default"])(maxPoints - currentMax).map(function () {
252
- return '';
253
- }).concat(value.points);
254
- sampleAnswers = (0, _times["default"])(maxPoints - currentMax).map(function () {
255
- return null;
256
- }).concat(value.sampleAnswers);
257
- }
258
-
259
- if (maxPoints < currentMax) {
260
- log('less than');
261
- points = (0, _takeRight["default"])(value.points, maxPoints + 1);
262
- sampleAnswers = (0, _takeRight["default"])(value.sampleAnswers, maxPoints + 1);
263
- }
264
-
265
- if (points) {
266
- onChange(_objectSpread(_objectSpread({}, value), {}, {
267
- points: points,
268
- sampleAnswers: sampleAnswers
269
- }));
270
- }
271
- });
272
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeContent", function (index, content, type) {
273
- // type could be 'points' or 'sampleAnswers'
274
- log("changeModel[".concat(type, "]:"), index, content);
275
-
276
- if (type !== 'points' && type !== 'sampleAnswers') {
277
- return;
278
- }
279
-
280
- var _this$props3 = _this.props,
281
- value = _this$props3.value,
282
- onChange = _this$props3.onChange;
283
- var items = value[type] && Array.from(value[type]);
284
- items.splice(index, 1, content);
285
- log("changeModel[".concat(type, "]:"), items);
286
- onChange(_objectSpread(_objectSpread({}, value), {}, (0, _defineProperty2["default"])({}, type, items)));
287
- });
288
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "excludeZeros", function () {
289
- var _this$props4 = _this.props,
290
- value = _this$props4.value,
291
- onChange = _this$props4.onChange;
292
- onChange(_objectSpread(_objectSpread({}, value), {}, {
293
- excludeZero: !value.excludeZero
294
- }));
295
- });
296
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "shouldRenderPoint", function (index, value) {
297
- if (!value.excludeZero) {
298
- return true;
299
- } else {
300
- if (index < value.points.length - 1) {
301
- return true;
302
- } else if (index === value.points.length - 1) {
303
- return false;
304
- }
305
-
306
- return true;
307
- }
308
- });
309
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onPointMenuChange", function (index, clickedItem) {
310
- if (clickedItem === 'sample') {
311
- var value = _this.props.value;
312
- var sampleAnswers = Array.from(value.sampleAnswers || []);
313
-
314
- if (checkSampleAnswer(sampleAnswers[index])) {
315
- // an empty string will display an empty Sample Answer input field
316
- _this.changeContent(index, '', 'sampleAnswers');
317
- } else {
318
- // when the content is null or 'null', the Sample Answer input field will not be displayed
319
- _this.changeContent(index, null, 'sampleAnswers');
320
- }
321
- }
322
- });
323
- return _this;
324
- }
325
-
326
- (0, _createClass2["default"])(RawAuthoring, [{
327
- key: "render",
328
- value: function render() {
329
- var _this2 = this;
330
-
331
- var _this$props5 = this.props,
332
- classes = _this$props5.classes,
333
- className = _this$props5.className,
334
- value = _this$props5.value,
335
- _this$props5$mathMlOp = _this$props5.mathMlOptions,
336
- mathMlOptions = _this$props5$mathMlOp === void 0 ? {} : _this$props5$mathMlOp;
337
-
338
- var _ref = value || {},
339
- _ref$excludeZeroEnabl = _ref.excludeZeroEnabled,
340
- excludeZeroEnabled = _ref$excludeZeroEnabl === void 0 ? true : _ref$excludeZeroEnabl,
341
- _ref$maxPointsEnabled = _ref.maxPointsEnabled,
342
- maxPointsEnabled = _ref$maxPointsEnabled === void 0 ? true : _ref$maxPointsEnabled;
343
-
344
- if (value && Number.isFinite(value.maxPoints)) {
345
- // eslint-disable-next-line no-console
346
- console.warn('maxPoints is deprecated - remove from model');
347
- }
348
-
349
- return /*#__PURE__*/_react["default"].createElement("div", {
350
- className: (0, _classnames["default"])(classes["class"], className)
351
- }, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
352
- variant: "h5",
353
- className: classes.rubricTitle
354
- }, "Rubric"), /*#__PURE__*/_react["default"].createElement(_FormGroup["default"], {
355
- row: true
356
- }, maxPointsEnabled && /*#__PURE__*/_react["default"].createElement(MaxPoints, {
357
- max: 10,
358
- value: value.points.length - 1,
359
- onChange: this.changeMaxPoints
360
- }), excludeZeroEnabled && /*#__PURE__*/_react["default"].createElement(_FormControlLabel["default"], {
361
- label: "Exclude zeros",
362
- control: /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
363
- checked: value.excludeZero,
364
- onChange: this.excludeZeros
365
- })
366
- })), /*#__PURE__*/_react["default"].createElement("div", {
367
- className: classes.container
368
- }, /*#__PURE__*/_react["default"].createElement(_reactBeautifulDnd.DragDropContext, {
369
- onDragEnd: this.dragEnd
370
- }, /*#__PURE__*/_react["default"].createElement(_reactBeautifulDnd.Droppable, {
371
- droppableId: "droppable"
372
- }, function (provided) {
373
- return /*#__PURE__*/_react["default"].createElement("div", (0, _extends2["default"])({}, provided.droppableProps, {
374
- ref: provided.innerRef
375
- }), value.points.map(function (p, index) {
376
- return _this2.shouldRenderPoint(index, value) && /*#__PURE__*/_react["default"].createElement(_reactBeautifulDnd.Draggable, {
377
- key: "".concat(p.points, "-").concat(index),
378
- index: index,
379
- draggableId: index.toString()
380
- }, function (provided) {
381
- return /*#__PURE__*/_react["default"].createElement("div", (0, _extends2["default"])({
382
- className: classes.configHolder,
383
- ref: provided.innerRef
384
- }, provided.draggableProps, provided.dragHandleProps), /*#__PURE__*/_react["default"].createElement(PointConfig, {
385
- points: value.points.length - 1 - index,
386
- content: p,
387
- sampleAnswer: value.sampleAnswers && value.sampleAnswers[index],
388
- onChange: function onChange(content) {
389
- return _this2.changeContent(index, content, 'points');
390
- },
391
- onSampleChange: function onSampleChange(content) {
392
- return _this2.changeContent(index, content, 'sampleAnswers');
393
- },
394
- onMenuChange: function onMenuChange(clickedItem) {
395
- return _this2.onPointMenuChange(index, clickedItem);
396
- },
397
- mathMlOptions: mathMlOptions
398
- }));
399
- });
400
- }), provided.placeholder);
401
- }))));
402
- }
403
- }]);
404
- return RawAuthoring;
405
- }(_react["default"].Component);
406
-
407
- exports.RawAuthoring = RawAuthoring;
408
- (0, _defineProperty2["default"])(RawAuthoring, "propTypes", {
409
- classes: _propTypes["default"].object.isRequired,
410
- className: _propTypes["default"].string,
411
- value: RubricType,
412
- onChange: _propTypes["default"].func
413
- });
414
- (0, _defineProperty2["default"])(RawAuthoring, "defaultProps", {});
415
-
416
- var styles = function styles(theme) {
417
- return {
418
- container: {
419
- backgroundColor: _grey["default"][200],
420
- borderWidth: 1,
421
- borderStyle: 'solid',
422
- borderColor: _grey["default"][300],
423
- padding: theme.spacing.unit * 2,
424
- margin: theme.spacing.unit
425
- },
426
- configHolder: {
427
- paddingTop: theme.spacing.unit,
428
- paddingBottom: theme.spacing.unit
429
- },
430
- rubricTitle: {
431
- paddingLeft: theme.spacing.unit,
432
- margin: theme.spacing.unit
433
- }
434
- };
435
- };
436
-
437
- var StyledRawAuthoring = (0, _styles.withStyles)(styles)(RawAuthoring);
438
-
439
- var Reverse = function Reverse(props) {
440
- var points = Array.from(props.value.points || []).reverse();
441
- var sampleAnswers = Array.from(props.value.sampleAnswers || []).reverse();
442
-
443
- if (points.length > sampleAnswers.length) {
444
- sampleAnswers = (0, _times["default"])(points.length - sampleAnswers.length).map(function () {
445
- return null;
446
- }).concat(sampleAnswers);
447
- }
448
-
449
- var value = _objectSpread(_objectSpread({}, props.value), {}, {
450
- points: points,
451
- sampleAnswers: sampleAnswers
452
- });
453
-
454
- var onChange = function onChange(value) {
455
- props.onChange(_objectSpread(_objectSpread({}, value), {}, {
456
- points: Array.from(value.points || []).reverse(),
457
- sampleAnswers: Array.from(value.sampleAnswers || []).reverse()
458
- }));
459
- };
460
-
461
- return /*#__PURE__*/_react["default"].createElement(StyledRawAuthoring, {
462
- value: value,
463
- onChange: onChange
464
- });
465
- };
466
-
467
- Reverse.propTypes = {
468
- value: RubricType,
469
- getIndex: _propTypes["default"].func,
470
- onChange: _propTypes["default"].func
471
- };
472
- var _default = Reverse;
473
- exports["default"] = _default;
474
- //# sourceMappingURL=authoring.js.map
@@ -1 +0,0 @@
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","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","content","mathMlOptions","showSampleAnswer","icon","onMenuChange","onSampleChange","RawAuthoring","destination","source","index","currentMax","length","concat","type","items","clickedItem","changeContent","className","excludeZeroEnabled","maxPointsEnabled","Number","isFinite","console","warn","rubricTitle","changeMaxPoints","excludeZeros","container","dragEnd","provided","droppableProps","innerRef","p","shouldRenderPoint","toString","configHolder","draggableProps","dragHandleProps","onPointMenuChange","placeholder","React","Component","object","isRequired","func","styles","borderWidth","borderStyle","borderColor","padding","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';\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});\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).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}))((props) => {\n const { points, content, classes, sampleAnswer, mathMlOptions = {} } = 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 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\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 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 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 changeMaxPoints = (maxPoints) => {\n const { value, onChange } = 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) {\n onChange({ ...value, points, sampleAnswers });\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 { classes, className, value, mathMlOptions = {} } = this.props;\n let { excludeZeroEnabled = true, maxPointsEnabled = true } = value || {};\n\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 return (\n <div className={classNames(classes.class, className)}>\n <Typography variant=\"h5\" className={classes.rubricTitle}>\n Rubric\n </Typography>\n <FormGroup row>\n {maxPointsEnabled && <MaxPoints max={10} value={value.points.length - 1} onChange={this.changeMaxPoints} />}\n {excludeZeroEnabled && (\n <FormControlLabel\n label=\"Exclude zeros\"\n control={<Checkbox checked={value.excludeZero} onChange={this.excludeZeros} />}\n />\n )}\n </FormGroup>\n\n <div className={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 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 />\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 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 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 <StyledRawAuthoring value={value} onChange={onChange} />;\n};\n\nReverse.propTypes = {\n value: RubricType,\n getIndex: PropTypes.func,\n onChange: PropTypes.func,\n};\n\nexport default Reverse;\n"],"file":"authoring.js"}
package/lib/index.js DELETED
@@ -1,23 +0,0 @@
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
- };
22
- exports.RUBRIC_TYPES = RUBRIC_TYPES;
23
- //# sourceMappingURL=index.js.map
package/lib/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/index.js"],"names":["RUBRIC_TYPES","SIMPLE_RUBRIC","MULTI_TRAIT_RUBRIC"],"mappings":";;;;;;;;;;;;;;;AAAA;;AAEA,IAAMA,YAAY,GAAG;AACnBC,EAAAA,aAAa,EAAE,cADI;AAEnBC,EAAAA,kBAAkB,EAAE;AAFD,CAArB","sourcesContent":["import Authoring from './authoring';\n\nconst RUBRIC_TYPES = {\n SIMPLE_RUBRIC: 'simpleRubric',\n MULTI_TRAIT_RUBRIC: 'multiTraitRubric',\n};\n\nexport { Authoring, RUBRIC_TYPES };\n"],"file":"index.js"}