@pie-lib/rubric 0.8.32-next.0 → 0.9.0-beta.1
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 +10 -110
- package/NEXT.CHANGELOG.json +1 -0
- package/lib/authoring.js +126 -27
- package/lib/authoring.js.map +1 -1
- package/lib/index.js +2 -1
- package/lib/index.js.map +1 -1
- package/package.json +5 -3
- package/src/__tests__/__snapshots__/rubric.test.jsx.snap +48 -0
- package/src/__tests__/rubric.test.jsx +91 -0
- package/src/authoring.jsx +99 -12
- package/src/index.js +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
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
|
-
|
|
6
|
+
# [0.9.0-beta.1](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.9.0-beta.1) (2025-07-20)
|
|
7
7
|
|
|
8
8
|
**Note:** Version bump only for package @pie-lib/rubric
|
|
9
9
|
|
|
@@ -11,7 +11,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
# [0.9.0-beta.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.9.0-beta.0) (2025-07-20)
|
|
15
15
|
|
|
16
16
|
**Note:** Version bump only for package @pie-lib/rubric
|
|
17
17
|
|
|
@@ -19,230 +19,130 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
# [0.10.0-beta.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.10.0-beta.0) (2025-07-15)
|
|
23
23
|
|
|
24
24
|
**Note:** Version bump only for package @pie-lib/rubric
|
|
25
25
|
|
|
26
|
+
# [0.9.0-beta.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.9.0-beta.0) (2025-07-15)
|
|
26
27
|
|
|
28
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
27
29
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
## [0.8.28](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.27...@pie-lib/rubric@0.8.28) (2023-10-03)
|
|
30
|
+
## [0.8.30](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.29...@pie-lib/rubric@0.8.30) (2023-10-16)
|
|
31
31
|
|
|
32
32
|
**Note:** Version bump only for package @pie-lib/rubric
|
|
33
33
|
|
|
34
|
+
## [0.8.29](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.28...@pie-lib/rubric@0.8.29) (2023-10-16)
|
|
34
35
|
|
|
36
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
35
37
|
|
|
38
|
+
## [0.8.28](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.27...@pie-lib/rubric@0.8.28) (2023-10-03)
|
|
36
39
|
|
|
40
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
37
41
|
|
|
38
42
|
## [0.8.27](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.26...@pie-lib/rubric@0.8.27) (2023-10-01)
|
|
39
43
|
|
|
40
44
|
**Note:** Version bump only for package @pie-lib/rubric
|
|
41
45
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
46
|
## [0.8.26](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.25...@pie-lib/rubric@0.8.26) (2023-09-27)
|
|
47
47
|
|
|
48
48
|
**Note:** Version bump only for package @pie-lib/rubric
|
|
49
49
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
50
|
## [0.8.25](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.24...@pie-lib/rubric@0.8.25) (2023-09-27)
|
|
55
51
|
|
|
56
52
|
**Note:** Version bump only for package @pie-lib/rubric
|
|
57
53
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
54
|
## [0.8.24](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.23...@pie-lib/rubric@0.8.24) (2023-09-27)
|
|
63
55
|
|
|
64
56
|
**Note:** Version bump only for package @pie-lib/rubric
|
|
65
57
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
58
|
## [0.8.23](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.22...@pie-lib/rubric@0.8.23) (2023-09-26)
|
|
71
59
|
|
|
72
60
|
**Note:** Version bump only for package @pie-lib/rubric
|
|
73
61
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
62
|
## [0.8.22](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.21...@pie-lib/rubric@0.8.22) (2023-09-25)
|
|
79
63
|
|
|
80
64
|
**Note:** Version bump only for package @pie-lib/rubric
|
|
81
65
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
66
|
## [0.8.21](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.20...@pie-lib/rubric@0.8.21) (2023-09-20)
|
|
87
67
|
|
|
88
68
|
**Note:** Version bump only for package @pie-lib/rubric
|
|
89
69
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
70
|
## [0.8.20](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.19...@pie-lib/rubric@0.8.20) (2023-09-20)
|
|
95
71
|
|
|
96
72
|
**Note:** Version bump only for package @pie-lib/rubric
|
|
97
73
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
74
|
## [0.8.19](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.18...@pie-lib/rubric@0.8.19) (2023-09-18)
|
|
103
75
|
|
|
104
76
|
**Note:** Version bump only for package @pie-lib/rubric
|
|
105
77
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
78
|
## [0.8.18](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.17...@pie-lib/rubric@0.8.18) (2023-09-14)
|
|
111
79
|
|
|
112
80
|
**Note:** Version bump only for package @pie-lib/rubric
|
|
113
81
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
82
|
## [0.8.17](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.16...@pie-lib/rubric@0.8.17) (2023-09-14)
|
|
119
83
|
|
|
120
84
|
**Note:** Version bump only for package @pie-lib/rubric
|
|
121
85
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
86
|
## [0.8.16](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.15...@pie-lib/rubric@0.8.16) (2023-09-14)
|
|
127
87
|
|
|
128
88
|
**Note:** Version bump only for package @pie-lib/rubric
|
|
129
89
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
90
|
## [0.8.15](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.14...@pie-lib/rubric@0.8.15) (2023-09-05)
|
|
135
91
|
|
|
136
92
|
**Note:** Version bump only for package @pie-lib/rubric
|
|
137
93
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
94
|
## [0.8.14](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.13...@pie-lib/rubric@0.8.14) (2023-09-02)
|
|
143
95
|
|
|
144
96
|
**Note:** Version bump only for package @pie-lib/rubric
|
|
145
97
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
98
|
## [0.8.13](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.12...@pie-lib/rubric@0.8.13) (2023-09-02)
|
|
151
99
|
|
|
152
100
|
**Note:** Version bump only for package @pie-lib/rubric
|
|
153
101
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
102
|
## [0.8.12](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.11...@pie-lib/rubric@0.8.12) (2023-08-30)
|
|
159
103
|
|
|
160
104
|
**Note:** Version bump only for package @pie-lib/rubric
|
|
161
105
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
106
|
## [0.8.11](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.10...@pie-lib/rubric@0.8.11) (2023-08-21)
|
|
167
107
|
|
|
168
108
|
**Note:** Version bump only for package @pie-lib/rubric
|
|
169
109
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
110
|
## [0.8.10](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.9...@pie-lib/rubric@0.8.10) (2023-08-21)
|
|
175
111
|
|
|
176
112
|
**Note:** Version bump only for package @pie-lib/rubric
|
|
177
113
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
114
|
## [0.8.9](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.8...@pie-lib/rubric@0.8.9) (2023-08-15)
|
|
183
115
|
|
|
184
116
|
**Note:** Version bump only for package @pie-lib/rubric
|
|
185
117
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
118
|
## [0.8.8](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.7...@pie-lib/rubric@0.8.8) (2023-08-07)
|
|
191
119
|
|
|
192
120
|
**Note:** Version bump only for package @pie-lib/rubric
|
|
193
121
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
122
|
## [0.8.7](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.6...@pie-lib/rubric@0.8.7) (2023-07-31)
|
|
199
123
|
|
|
200
124
|
**Note:** Version bump only for package @pie-lib/rubric
|
|
201
125
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
126
|
## [0.8.6](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.5...@pie-lib/rubric@0.8.6) (2023-07-24)
|
|
207
127
|
|
|
208
128
|
**Note:** Version bump only for package @pie-lib/rubric
|
|
209
129
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
130
|
## [0.8.5](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.4...@pie-lib/rubric@0.8.5) (2023-07-04)
|
|
215
131
|
|
|
216
132
|
**Note:** Version bump only for package @pie-lib/rubric
|
|
217
133
|
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
134
|
## [0.8.4](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.3...@pie-lib/rubric@0.8.4) (2023-06-24)
|
|
223
135
|
|
|
224
136
|
**Note:** Version bump only for package @pie-lib/rubric
|
|
225
137
|
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
138
|
## [0.8.3](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.2...@pie-lib/rubric@0.8.3) (2023-06-23)
|
|
231
139
|
|
|
232
140
|
**Note:** Version bump only for package @pie-lib/rubric
|
|
233
141
|
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
142
|
## [0.8.2](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.1...@pie-lib/rubric@0.8.2) (2023-06-13)
|
|
239
143
|
|
|
240
144
|
**Note:** Version bump only for package @pie-lib/rubric
|
|
241
145
|
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
146
|
## [0.8.1](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.0...@pie-lib/rubric@0.8.1) (2023-06-12)
|
|
247
147
|
|
|
248
148
|
**Note:** Version bump only for package @pie-lib/rubric
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[]
|
package/lib/authoring.js
CHANGED
|
@@ -69,6 +69,8 @@ var _pointMenu = _interopRequireDefault(require("./point-menu"));
|
|
|
69
69
|
|
|
70
70
|
var _range = _interopRequireDefault(require("lodash/range"));
|
|
71
71
|
|
|
72
|
+
var _configUi = require("@pie-lib/config-ui");
|
|
73
|
+
|
|
72
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; }
|
|
73
75
|
|
|
74
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; }
|
|
@@ -94,7 +96,8 @@ var RubricType = _propTypes["default"].shape({
|
|
|
94
96
|
excludeZero: _propTypes["default"].bool,
|
|
95
97
|
points: _propTypes["default"].arrayOf(_propTypes["default"].string),
|
|
96
98
|
sampleAnswers: _propTypes["default"].arrayOf(_propTypes["default"].string),
|
|
97
|
-
maxPoints: _propTypes["default"].number
|
|
99
|
+
maxPoints: _propTypes["default"].number,
|
|
100
|
+
rubriclessInstruction: _propTypes["default"].string
|
|
98
101
|
});
|
|
99
102
|
|
|
100
103
|
exports.RubricType = RubricType;
|
|
@@ -124,7 +127,7 @@ var MaxPoints = (0, _styles.withStyles)(function (theme) {
|
|
|
124
127
|
input: /*#__PURE__*/_react["default"].createElement(_OutlinedInput["default"], {
|
|
125
128
|
labelWidth: 80
|
|
126
129
|
})
|
|
127
|
-
}, (0, _range["default"])(1, max).map(function (v) {
|
|
130
|
+
}, (0, _range["default"])(1, max + 1).map(function (v) {
|
|
128
131
|
return /*#__PURE__*/_react["default"].createElement(_MenuItem["default"], {
|
|
129
132
|
key: "".concat(v),
|
|
130
133
|
value: v
|
|
@@ -164,6 +167,12 @@ var PointConfig = (0, _styles.withStyles)(function (theme) {
|
|
|
164
167
|
pointMenu: {
|
|
165
168
|
position: 'absolute',
|
|
166
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
|
|
167
176
|
}
|
|
168
177
|
};
|
|
169
178
|
})(function (props) {
|
|
@@ -172,7 +181,10 @@ var PointConfig = (0, _styles.withStyles)(function (theme) {
|
|
|
172
181
|
classes = props.classes,
|
|
173
182
|
sampleAnswer = props.sampleAnswer,
|
|
174
183
|
_props$mathMlOptions = props.mathMlOptions,
|
|
175
|
-
mathMlOptions = _props$mathMlOptions === void 0 ? {} : _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;
|
|
176
188
|
var pointsLabel = "".concat(points, " ").concat(points <= 1 ? 'pt' : 'pts');
|
|
177
189
|
var showSampleAnswer = checkSampleAnswer(sampleAnswer);
|
|
178
190
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
@@ -186,6 +198,8 @@ var PointConfig = (0, _styles.withStyles)(function (theme) {
|
|
|
186
198
|
className: classes.dragIndicator
|
|
187
199
|
}), /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
|
|
188
200
|
className: classes.editor,
|
|
201
|
+
error: error,
|
|
202
|
+
pluginProps: pluginOpts,
|
|
189
203
|
markup: content,
|
|
190
204
|
onChange: props.onChange,
|
|
191
205
|
mathMlOptions: mathMlOptions
|
|
@@ -195,7 +209,9 @@ var PointConfig = (0, _styles.withStyles)(function (theme) {
|
|
|
195
209
|
},
|
|
196
210
|
showSampleAnswer: showSampleAnswer,
|
|
197
211
|
onChange: props.onMenuChange
|
|
198
|
-
})),
|
|
212
|
+
})), error && /*#__PURE__*/_react["default"].createElement("div", {
|
|
213
|
+
className: classes.errorText
|
|
214
|
+
}, error), !showSampleAnswer && /*#__PURE__*/_react["default"].createElement("div", {
|
|
199
215
|
className: classes.sampleAnswersEditor
|
|
200
216
|
}, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
|
|
201
217
|
variant: "overline",
|
|
@@ -203,6 +219,7 @@ var PointConfig = (0, _styles.withStyles)(function (theme) {
|
|
|
203
219
|
}, "Sample Response"), /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
|
|
204
220
|
className: classes.editor,
|
|
205
221
|
markup: sampleAnswer,
|
|
222
|
+
pluginProps: pluginOpts,
|
|
206
223
|
onChange: props.onSampleChange,
|
|
207
224
|
mathMlOptions: mathMlOptions
|
|
208
225
|
})));
|
|
@@ -239,10 +256,19 @@ var RawAuthoring = /*#__PURE__*/function (_React$Component) {
|
|
|
239
256
|
sampleAnswers: sampleAnswers
|
|
240
257
|
}));
|
|
241
258
|
});
|
|
242
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "
|
|
259
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeRubriclessInstruction", function (input) {
|
|
243
260
|
var _this$props2 = _this.props,
|
|
244
261
|
value = _this$props2.value,
|
|
245
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;
|
|
246
272
|
var currentMax = value.points.length - 1;
|
|
247
273
|
log('current', currentMax, 'new: ', maxPoints);
|
|
248
274
|
var points, sampleAnswers;
|
|
@@ -262,10 +288,15 @@ var RawAuthoring = /*#__PURE__*/function (_React$Component) {
|
|
|
262
288
|
sampleAnswers = (0, _takeRight["default"])(value.sampleAnswers, maxPoints + 1);
|
|
263
289
|
}
|
|
264
290
|
|
|
265
|
-
if (points) {
|
|
291
|
+
if (points && !rubricless) {
|
|
266
292
|
onChange(_objectSpread(_objectSpread({}, value), {}, {
|
|
267
293
|
points: points,
|
|
268
|
-
sampleAnswers: sampleAnswers
|
|
294
|
+
sampleAnswers: sampleAnswers,
|
|
295
|
+
maxPoints: maxPoints
|
|
296
|
+
}));
|
|
297
|
+
} else {
|
|
298
|
+
onChange(_objectSpread(_objectSpread({}, value), {}, {
|
|
299
|
+
maxPoints: maxPoints
|
|
269
300
|
}));
|
|
270
301
|
}
|
|
271
302
|
});
|
|
@@ -277,18 +308,18 @@ var RawAuthoring = /*#__PURE__*/function (_React$Component) {
|
|
|
277
308
|
return;
|
|
278
309
|
}
|
|
279
310
|
|
|
280
|
-
var _this$
|
|
281
|
-
value = _this$
|
|
282
|
-
onChange = _this$
|
|
311
|
+
var _this$props4 = _this.props,
|
|
312
|
+
value = _this$props4.value,
|
|
313
|
+
onChange = _this$props4.onChange;
|
|
283
314
|
var items = value[type] && Array.from(value[type]);
|
|
284
315
|
items.splice(index, 1, content);
|
|
285
316
|
log("changeModel[".concat(type, "]:"), items);
|
|
286
317
|
onChange(_objectSpread(_objectSpread({}, value), {}, (0, _defineProperty2["default"])({}, type, items)));
|
|
287
318
|
});
|
|
288
319
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "excludeZeros", function () {
|
|
289
|
-
var _this$
|
|
290
|
-
value = _this$
|
|
291
|
-
onChange = _this$
|
|
320
|
+
var _this$props5 = _this.props,
|
|
321
|
+
value = _this$props5.value,
|
|
322
|
+
onChange = _this$props5.onChange;
|
|
292
323
|
onChange(_objectSpread(_objectSpread({}, value), {}, {
|
|
293
324
|
excludeZero: !value.excludeZero
|
|
294
325
|
}));
|
|
@@ -328,24 +359,48 @@ var RawAuthoring = /*#__PURE__*/function (_React$Component) {
|
|
|
328
359
|
value: function render() {
|
|
329
360
|
var _this2 = this;
|
|
330
361
|
|
|
331
|
-
var _this$
|
|
332
|
-
classes = _this$
|
|
333
|
-
className = _this$
|
|
334
|
-
value = _this$
|
|
335
|
-
_this$
|
|
336
|
-
mathMlOptions = _this$
|
|
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;
|
|
337
374
|
|
|
338
375
|
var _ref = value || {},
|
|
339
376
|
_ref$excludeZeroEnabl = _ref.excludeZeroEnabled,
|
|
340
377
|
excludeZeroEnabled = _ref$excludeZeroEnabl === void 0 ? true : _ref$excludeZeroEnabl,
|
|
341
378
|
_ref$maxPointsEnabled = _ref.maxPointsEnabled,
|
|
342
|
-
maxPointsEnabled = _ref$maxPointsEnabled === void 0 ? true : _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;
|
|
343
396
|
|
|
344
397
|
if (value && Number.isFinite(value.maxPoints)) {
|
|
345
398
|
// eslint-disable-next-line no-console
|
|
346
399
|
console.warn('maxPoints is deprecated - remove from model');
|
|
347
|
-
}
|
|
400
|
+
} // for rubric value is computed based on points
|
|
348
401
|
|
|
402
|
+
|
|
403
|
+
var maxPointsValue = !rubricless ? value.points.length - 1 : maxPoints;
|
|
349
404
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
350
405
|
className: (0, _classnames["default"])(classes["class"], className)
|
|
351
406
|
}, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
|
|
@@ -354,17 +409,34 @@ var RawAuthoring = /*#__PURE__*/function (_React$Component) {
|
|
|
354
409
|
}, "Rubric"), /*#__PURE__*/_react["default"].createElement(_FormGroup["default"], {
|
|
355
410
|
row: true
|
|
356
411
|
}, maxPointsEnabled && /*#__PURE__*/_react["default"].createElement(MaxPoints, {
|
|
357
|
-
max:
|
|
358
|
-
value:
|
|
359
|
-
onChange: this.changeMaxPoints
|
|
412
|
+
max: maxMaxPoints < 100 ? maxMaxPoints : 100,
|
|
413
|
+
value: maxPointsValue,
|
|
414
|
+
onChange: this.changeMaxPoints,
|
|
415
|
+
pluginOpts: pluginOpts
|
|
360
416
|
}), excludeZeroEnabled && /*#__PURE__*/_react["default"].createElement(_FormControlLabel["default"], {
|
|
361
417
|
label: "Exclude zeros",
|
|
362
418
|
control: /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
|
|
363
419
|
checked: value.excludeZero,
|
|
364
420
|
onChange: this.excludeZeros
|
|
365
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
|
|
366
438
|
})), /*#__PURE__*/_react["default"].createElement("div", {
|
|
367
|
-
className: classes.container
|
|
439
|
+
className: rubricless ? classes.rubricless : classes.container
|
|
368
440
|
}, /*#__PURE__*/_react["default"].createElement(_reactBeautifulDnd.DragDropContext, {
|
|
369
441
|
onDragEnd: this.dragEnd
|
|
370
442
|
}, /*#__PURE__*/_react["default"].createElement(_reactBeautifulDnd.Droppable, {
|
|
@@ -384,6 +456,7 @@ var RawAuthoring = /*#__PURE__*/function (_React$Component) {
|
|
|
384
456
|
}, provided.draggableProps, provided.dragHandleProps), /*#__PURE__*/_react["default"].createElement(PointConfig, {
|
|
385
457
|
points: value.points.length - 1 - index,
|
|
386
458
|
content: p,
|
|
459
|
+
error: pointsDescriptorsErrors && pointsDescriptorsErrors[value.points.length - 1 - index],
|
|
387
460
|
sampleAnswer: value.sampleAnswers && value.sampleAnswers[index],
|
|
388
461
|
onChange: function onChange(content) {
|
|
389
462
|
return _this2.changeContent(index, content, 'points');
|
|
@@ -394,7 +467,8 @@ var RawAuthoring = /*#__PURE__*/function (_React$Component) {
|
|
|
394
467
|
onMenuChange: function onMenuChange(clickedItem) {
|
|
395
468
|
return _this2.onPointMenuChange(index, clickedItem);
|
|
396
469
|
},
|
|
397
|
-
mathMlOptions: mathMlOptions
|
|
470
|
+
mathMlOptions: mathMlOptions,
|
|
471
|
+
pluginOpts: pluginOpts
|
|
398
472
|
}));
|
|
399
473
|
});
|
|
400
474
|
}), provided.placeholder);
|
|
@@ -409,6 +483,9 @@ exports.RawAuthoring = RawAuthoring;
|
|
|
409
483
|
classes: _propTypes["default"].object.isRequired,
|
|
410
484
|
className: _propTypes["default"].string,
|
|
411
485
|
value: RubricType,
|
|
486
|
+
config: _propTypes["default"].object,
|
|
487
|
+
pluginOpts: _propTypes["default"].object,
|
|
488
|
+
rubricless: _propTypes["default"].bool,
|
|
412
489
|
onChange: _propTypes["default"].func
|
|
413
490
|
});
|
|
414
491
|
(0, _defineProperty2["default"])(RawAuthoring, "defaultProps", {});
|
|
@@ -423,6 +500,14 @@ var styles = function styles(theme) {
|
|
|
423
500
|
padding: theme.spacing.unit * 2,
|
|
424
501
|
margin: theme.spacing.unit
|
|
425
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
|
+
},
|
|
426
511
|
configHolder: {
|
|
427
512
|
paddingTop: theme.spacing.unit,
|
|
428
513
|
paddingBottom: theme.spacing.unit
|
|
@@ -437,6 +522,14 @@ var styles = function styles(theme) {
|
|
|
437
522
|
var StyledRawAuthoring = (0, _styles.withStyles)(styles)(RawAuthoring);
|
|
438
523
|
|
|
439
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
|
+
|
|
440
533
|
var points = Array.from(props.value.points || []).reverse();
|
|
441
534
|
var sampleAnswers = Array.from(props.value.sampleAnswers || []).reverse();
|
|
442
535
|
|
|
@@ -460,12 +553,18 @@ var Reverse = function Reverse(props) {
|
|
|
460
553
|
|
|
461
554
|
return /*#__PURE__*/_react["default"].createElement(StyledRawAuthoring, {
|
|
462
555
|
value: value,
|
|
463
|
-
|
|
556
|
+
config: config,
|
|
557
|
+
onChange: onChange,
|
|
558
|
+
rubricless: rubricless,
|
|
559
|
+
pluginOpts: pluginOpts
|
|
464
560
|
});
|
|
465
561
|
};
|
|
466
562
|
|
|
467
563
|
Reverse.propTypes = {
|
|
468
564
|
value: RubricType,
|
|
565
|
+
config: _propTypes["default"].object,
|
|
566
|
+
pluginOpts: _propTypes["default"].object,
|
|
567
|
+
rubricless: _propTypes["default"].bool,
|
|
469
568
|
getIndex: _propTypes["default"].func,
|
|
470
569
|
onChange: _propTypes["default"].func
|
|
471
570
|
};
|
package/lib/authoring.js.map
CHANGED
|
@@ -1 +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","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"}
|
|
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
CHANGED
|
@@ -17,7 +17,8 @@ var _authoring = _interopRequireDefault(require("./authoring"));
|
|
|
17
17
|
|
|
18
18
|
var RUBRIC_TYPES = {
|
|
19
19
|
SIMPLE_RUBRIC: 'simpleRubric',
|
|
20
|
-
MULTI_TRAIT_RUBRIC: 'multiTraitRubric'
|
|
20
|
+
MULTI_TRAIT_RUBRIC: 'multiTraitRubric',
|
|
21
|
+
RUBRICLESS: 'rubricless'
|
|
21
22
|
};
|
|
22
23
|
exports.RUBRIC_TYPES = RUBRIC_TYPES;
|
|
23
24
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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;
|
|
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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-lib/rubric",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0-beta.1",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -9,7 +9,9 @@
|
|
|
9
9
|
"dependencies": {
|
|
10
10
|
"@material-ui/core": "^3.9.3",
|
|
11
11
|
"@material-ui/icons": "^3.0.2",
|
|
12
|
-
"@pie-lib/
|
|
12
|
+
"@pie-lib/config-ui": "latest",
|
|
13
|
+
"@pie-lib/editable-html": "latest",
|
|
14
|
+
"classnames": "^2.2.6",
|
|
13
15
|
"debug": "^4.1.1",
|
|
14
16
|
"editable-html": "npm:@pie-lib/editable-html@^7.21.0",
|
|
15
17
|
"lodash": "^4.17.11",
|
|
@@ -18,5 +20,5 @@
|
|
|
18
20
|
"react-beautiful-dnd": "^11.0.2",
|
|
19
21
|
"react-dom": "^16.9.0"
|
|
20
22
|
},
|
|
21
|
-
"gitHead": "
|
|
23
|
+
"gitHead": "e2aa3ddac60f49bcb8c2562370f496323642f453"
|
|
22
24
|
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
|
+
|
|
3
|
+
exports[`Rubric render snapshot 1`] = `
|
|
4
|
+
<div
|
|
5
|
+
className="className"
|
|
6
|
+
>
|
|
7
|
+
<WithStyles(Typography)
|
|
8
|
+
variant="h5"
|
|
9
|
+
>
|
|
10
|
+
Rubric
|
|
11
|
+
</WithStyles(Typography)>
|
|
12
|
+
<WithStyles(FormGroup)
|
|
13
|
+
row={true}
|
|
14
|
+
>
|
|
15
|
+
<WithStyles(Component)
|
|
16
|
+
max={10}
|
|
17
|
+
onChange={[Function]}
|
|
18
|
+
pluginOpts={Object {}}
|
|
19
|
+
value={3}
|
|
20
|
+
/>
|
|
21
|
+
<WithStyles(WithFormControlContext(FormControlLabel))
|
|
22
|
+
control={
|
|
23
|
+
<WithStyles(Checkbox)
|
|
24
|
+
checked={false}
|
|
25
|
+
onChange={[Function]}
|
|
26
|
+
/>
|
|
27
|
+
}
|
|
28
|
+
label="Exclude zeros"
|
|
29
|
+
/>
|
|
30
|
+
</WithStyles(FormGroup)>
|
|
31
|
+
<div>
|
|
32
|
+
<DragDropContext
|
|
33
|
+
onDragEnd={[Function]}
|
|
34
|
+
>
|
|
35
|
+
<Connect(Droppable)
|
|
36
|
+
direction="vertical"
|
|
37
|
+
droppableId="droppable"
|
|
38
|
+
ignoreContainerClipping={false}
|
|
39
|
+
isCombineEnabled={false}
|
|
40
|
+
isDropDisabled={false}
|
|
41
|
+
type="DEFAULT"
|
|
42
|
+
>
|
|
43
|
+
<Component />
|
|
44
|
+
</Connect(Droppable)>
|
|
45
|
+
</DragDropContext>
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
|
+
`;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { shallow, mount } from 'enzyme';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { RawAuthoring } from '../authoring';
|
|
4
|
+
import { Draggable } from 'react-beautiful-dnd';
|
|
5
|
+
import _ from 'lodash';
|
|
6
|
+
|
|
7
|
+
jest.mock('@pie-lib/editable-html', () => () => <div />);
|
|
8
|
+
|
|
9
|
+
describe('Rubric', () => {
|
|
10
|
+
let w;
|
|
11
|
+
|
|
12
|
+
const points = ['nothing right', 'a teeny bit right', 'mostly right', 'bingo'];
|
|
13
|
+
const sampleAnswers = [null, 'just right', 'not left', null];
|
|
14
|
+
const wrapper = (value, opts) => {
|
|
15
|
+
const props = {
|
|
16
|
+
classes: {},
|
|
17
|
+
onChange: jest.fn(),
|
|
18
|
+
className: 'className',
|
|
19
|
+
value: {
|
|
20
|
+
excludeZero: false,
|
|
21
|
+
points,
|
|
22
|
+
sampleAnswers,
|
|
23
|
+
...value,
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
const fn = opts && opts.mount ? mount : shallow;
|
|
27
|
+
return fn(<RawAuthoring {...props} />, opts);
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
describe('render', () => {
|
|
31
|
+
it('snapshot', () => {
|
|
32
|
+
w = wrapper();
|
|
33
|
+
expect(w).toMatchSnapshot();
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
describe('draggable', () => {
|
|
37
|
+
it('renders correctly for excluded zeroes', () => {
|
|
38
|
+
let w = wrapper({ excludeZero: true }, { mount: true });
|
|
39
|
+
expect(w.find(Draggable).length).toEqual(3);
|
|
40
|
+
});
|
|
41
|
+
it('renders correctly for excluded zeroes', () => {
|
|
42
|
+
let w = wrapper({ excludeZero: false }, { mount: true });
|
|
43
|
+
expect(w.find(Draggable).length).toEqual(4);
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
describe('logic', () => {
|
|
49
|
+
describe('rendering', () => {});
|
|
50
|
+
|
|
51
|
+
describe('changeMaxPoints', () => {
|
|
52
|
+
const assertChangeMax = (points, excludeZero, expectedPoints, expectedSampleAnswers) => {
|
|
53
|
+
it(`${points} calls onChange with: ${expectedPoints} and ${expectedSampleAnswers}`, () => {
|
|
54
|
+
let w = wrapper({ excludeZero });
|
|
55
|
+
w.instance().changeMaxPoints(points);
|
|
56
|
+
expect(w.instance().props.onChange).toHaveBeenCalledWith({
|
|
57
|
+
excludeZero,
|
|
58
|
+
points: expectedPoints,
|
|
59
|
+
sampleAnswers: expectedSampleAnswers,
|
|
60
|
+
maxPoints: expectedPoints.length - 1,
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
assertChangeMax(1, false, _.takeRight(points, 2), _.takeRight(sampleAnswers, 2));
|
|
66
|
+
assertChangeMax(1, true, _.takeRight(points, 2), _.takeRight(sampleAnswers, 2));
|
|
67
|
+
assertChangeMax(2, true, _.takeRight(points, 3), _.takeRight(sampleAnswers, 3));
|
|
68
|
+
assertChangeMax(2, false, _.takeRight(points, 3), _.takeRight(sampleAnswers, 3));
|
|
69
|
+
assertChangeMax(5, false, ['', ''].concat(points), [null, null].concat(sampleAnswers));
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
describe('changeSampleResponse', () => {
|
|
73
|
+
const assertChangeSample = (index, clickedItem, excludeZero, expectedPoints, expectedSampleAnswers) => {
|
|
74
|
+
it(`Point ${index} calls onChange with: ${expectedPoints} and ${expectedSampleAnswers}`, () => {
|
|
75
|
+
let w = wrapper({ excludeZero });
|
|
76
|
+
w.instance().onPointMenuChange(index, clickedItem);
|
|
77
|
+
expect(w.instance().props.onChange).toHaveBeenCalledWith({
|
|
78
|
+
excludeZero,
|
|
79
|
+
points: expectedPoints,
|
|
80
|
+
sampleAnswers: expectedSampleAnswers,
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
assertChangeSample(0, 'sample', false, points, ['', 'just right', 'not left', null]);
|
|
86
|
+
assertChangeSample(3, 'sample', false, points, [null, 'just right', 'not left', '']);
|
|
87
|
+
assertChangeSample(1, 'sample', true, points, [null, null, 'not left', null]);
|
|
88
|
+
assertChangeSample(3, 'sample', true, points, [null, 'just right', 'not left', '']);
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
});
|
package/src/authoring.jsx
CHANGED
|
@@ -21,6 +21,8 @@ import takeRight from 'lodash/takeRight';
|
|
|
21
21
|
import PointMenu from './point-menu';
|
|
22
22
|
|
|
23
23
|
import range from 'lodash/range';
|
|
24
|
+
import { InputContainer } from '@pie-lib/config-ui';
|
|
25
|
+
|
|
24
26
|
const log = debug('pie-lib:rubric:authoring');
|
|
25
27
|
|
|
26
28
|
const reorder = (list, startIndex, endIndex) => {
|
|
@@ -37,6 +39,7 @@ export const RubricType = PropTypes.shape({
|
|
|
37
39
|
points: PropTypes.arrayOf(PropTypes.string),
|
|
38
40
|
sampleAnswers: PropTypes.arrayOf(PropTypes.string),
|
|
39
41
|
maxPoints: PropTypes.number,
|
|
42
|
+
rubriclessInstruction: PropTypes.string,
|
|
40
43
|
});
|
|
41
44
|
|
|
42
45
|
const MaxPoints = withStyles((theme) => ({
|
|
@@ -53,7 +56,7 @@ const MaxPoints = withStyles((theme) => ({
|
|
|
53
56
|
Max Points
|
|
54
57
|
</InputLabel>
|
|
55
58
|
<Select value={value} onChange={(e) => onChange(e.target.value)} input={<OutlinedInput labelWidth={80} />}>
|
|
56
|
-
{range(1, max).map((v) => (
|
|
59
|
+
{range(1, max + 1).map((v) => (
|
|
57
60
|
<MenuItem key={`${v}`} value={v}>
|
|
58
61
|
{v}
|
|
59
62
|
</MenuItem>
|
|
@@ -94,8 +97,14 @@ export const PointConfig = withStyles((theme) => ({
|
|
|
94
97
|
position: 'absolute',
|
|
95
98
|
right: 0,
|
|
96
99
|
},
|
|
100
|
+
errorText: {
|
|
101
|
+
fontSize: theme.typography.fontSize - 2,
|
|
102
|
+
color: theme.palette.error.main,
|
|
103
|
+
paddingLeft: theme.spacing.unit * 3,
|
|
104
|
+
paddingTop: theme.spacing.unit,
|
|
105
|
+
},
|
|
97
106
|
}))((props) => {
|
|
98
|
-
const { points, content, classes, sampleAnswer, mathMlOptions = {} } = props;
|
|
107
|
+
const { points, content, classes, sampleAnswer, mathMlOptions = {}, error, pluginOpts = {} } = props;
|
|
99
108
|
const pointsLabel = `${points} ${points <= 1 ? 'pt' : 'pts'}`;
|
|
100
109
|
const showSampleAnswer = checkSampleAnswer(sampleAnswer);
|
|
101
110
|
|
|
@@ -109,6 +118,8 @@ export const PointConfig = withStyles((theme) => ({
|
|
|
109
118
|
<DragIndicator className={classes.dragIndicator} />
|
|
110
119
|
<EditableHtml
|
|
111
120
|
className={classes.editor}
|
|
121
|
+
error={error}
|
|
122
|
+
pluginProps={pluginOpts}
|
|
112
123
|
markup={content}
|
|
113
124
|
onChange={props.onChange}
|
|
114
125
|
mathMlOptions={mathMlOptions}
|
|
@@ -121,7 +132,7 @@ export const PointConfig = withStyles((theme) => ({
|
|
|
121
132
|
onChange={props.onMenuChange}
|
|
122
133
|
/>
|
|
123
134
|
</div>
|
|
124
|
-
|
|
135
|
+
{error && <div className={classes.errorText}>{error}</div>}
|
|
125
136
|
{!showSampleAnswer && (
|
|
126
137
|
<div className={classes.sampleAnswersEditor}>
|
|
127
138
|
<Typography variant="overline" className={classes.dragIndicator}>
|
|
@@ -130,6 +141,7 @@ export const PointConfig = withStyles((theme) => ({
|
|
|
130
141
|
<EditableHtml
|
|
131
142
|
className={classes.editor}
|
|
132
143
|
markup={sampleAnswer}
|
|
144
|
+
pluginProps={pluginOpts}
|
|
133
145
|
onChange={props.onSampleChange}
|
|
134
146
|
mathMlOptions={mathMlOptions}
|
|
135
147
|
/>
|
|
@@ -144,6 +156,9 @@ export class RawAuthoring extends React.Component {
|
|
|
144
156
|
classes: PropTypes.object.isRequired,
|
|
145
157
|
className: PropTypes.string,
|
|
146
158
|
value: RubricType,
|
|
159
|
+
config: PropTypes.object,
|
|
160
|
+
pluginOpts: PropTypes.object,
|
|
161
|
+
rubricless: PropTypes.bool,
|
|
147
162
|
onChange: PropTypes.func,
|
|
148
163
|
};
|
|
149
164
|
|
|
@@ -162,8 +177,13 @@ export class RawAuthoring extends React.Component {
|
|
|
162
177
|
onChange({ ...value, points, sampleAnswers });
|
|
163
178
|
};
|
|
164
179
|
|
|
165
|
-
|
|
180
|
+
changeRubriclessInstruction = (input) => {
|
|
166
181
|
const { value, onChange } = this.props;
|
|
182
|
+
onChange({ ...value, rubriclessInstruction: input });
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
changeMaxPoints = (maxPoints) => {
|
|
186
|
+
const { value, onChange, rubricless } = this.props;
|
|
167
187
|
const currentMax = value.points.length - 1;
|
|
168
188
|
|
|
169
189
|
log('current', currentMax, 'new: ', maxPoints);
|
|
@@ -184,8 +204,10 @@ export class RawAuthoring extends React.Component {
|
|
|
184
204
|
sampleAnswers = takeRight(value.sampleAnswers, maxPoints + 1);
|
|
185
205
|
}
|
|
186
206
|
|
|
187
|
-
if (points) {
|
|
188
|
-
onChange({ ...value, points, sampleAnswers });
|
|
207
|
+
if (points && !rubricless) {
|
|
208
|
+
onChange({ ...value, points, sampleAnswers, maxPoints });
|
|
209
|
+
} else {
|
|
210
|
+
onChange({ ...value, maxPoints });
|
|
189
211
|
}
|
|
190
212
|
};
|
|
191
213
|
|
|
@@ -242,21 +264,47 @@ export class RawAuthoring extends React.Component {
|
|
|
242
264
|
};
|
|
243
265
|
|
|
244
266
|
render() {
|
|
245
|
-
const {
|
|
246
|
-
|
|
247
|
-
|
|
267
|
+
const {
|
|
268
|
+
classes,
|
|
269
|
+
className,
|
|
270
|
+
value,
|
|
271
|
+
mathMlOptions = {},
|
|
272
|
+
config = {},
|
|
273
|
+
rubricless = false,
|
|
274
|
+
pluginOpts = {},
|
|
275
|
+
} = this.props;
|
|
276
|
+
let {
|
|
277
|
+
excludeZeroEnabled = true,
|
|
278
|
+
maxPointsEnabled = true,
|
|
279
|
+
errors = {},
|
|
280
|
+
rubriclessInstructionEnabled = false,
|
|
281
|
+
maxPoints = 10,
|
|
282
|
+
} = value || {};
|
|
283
|
+
// rubric will contain a max value for maxPoints
|
|
284
|
+
const { rubriclessInstruction = {}, maxMaxPoints = 10 } = config || {};
|
|
285
|
+
const { pointsDescriptorsErrors } = errors || {};
|
|
248
286
|
if (value && Number.isFinite(value.maxPoints)) {
|
|
249
287
|
// eslint-disable-next-line no-console
|
|
250
288
|
console.warn('maxPoints is deprecated - remove from model');
|
|
251
289
|
}
|
|
252
290
|
|
|
291
|
+
// for rubric value is computed based on points
|
|
292
|
+
const maxPointsValue = !rubricless ? value.points.length - 1 : maxPoints;
|
|
293
|
+
|
|
253
294
|
return (
|
|
254
295
|
<div className={classNames(classes.class, className)}>
|
|
255
296
|
<Typography variant="h5" className={classes.rubricTitle}>
|
|
256
297
|
Rubric
|
|
257
298
|
</Typography>
|
|
258
299
|
<FormGroup row>
|
|
259
|
-
{maxPointsEnabled &&
|
|
300
|
+
{maxPointsEnabled && (
|
|
301
|
+
<MaxPoints
|
|
302
|
+
max={maxMaxPoints < 100 ? maxMaxPoints : 100}
|
|
303
|
+
value={maxPointsValue}
|
|
304
|
+
onChange={this.changeMaxPoints}
|
|
305
|
+
pluginOpts={pluginOpts}
|
|
306
|
+
/>
|
|
307
|
+
)}
|
|
260
308
|
{excludeZeroEnabled && (
|
|
261
309
|
<FormControlLabel
|
|
262
310
|
label="Exclude zeros"
|
|
@@ -265,7 +313,22 @@ export class RawAuthoring extends React.Component {
|
|
|
265
313
|
)}
|
|
266
314
|
</FormGroup>
|
|
267
315
|
|
|
268
|
-
|
|
316
|
+
{rubriclessInstructionEnabled && rubricless && (
|
|
317
|
+
<InputContainer label={rubriclessInstruction.label} className={classes.inputContainer}>
|
|
318
|
+
<EditableHtml
|
|
319
|
+
className={classes.input}
|
|
320
|
+
markup={value.rubriclessInstruction || ''}
|
|
321
|
+
onChange={this.changeRubriclessInstruction}
|
|
322
|
+
pluginProps={pluginOpts}
|
|
323
|
+
nonEmpty={false}
|
|
324
|
+
disableUnderline
|
|
325
|
+
languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}
|
|
326
|
+
mathMlOptions={mathMlOptions}
|
|
327
|
+
/>
|
|
328
|
+
</InputContainer>
|
|
329
|
+
)}
|
|
330
|
+
|
|
331
|
+
<div className={rubricless ? classes.rubricless : classes.container}>
|
|
269
332
|
<DragDropContext onDragEnd={this.dragEnd}>
|
|
270
333
|
<Droppable droppableId="droppable">
|
|
271
334
|
{(provided) => (
|
|
@@ -284,11 +347,15 @@ export class RawAuthoring extends React.Component {
|
|
|
284
347
|
<PointConfig
|
|
285
348
|
points={value.points.length - 1 - index}
|
|
286
349
|
content={p}
|
|
350
|
+
error={
|
|
351
|
+
pointsDescriptorsErrors && pointsDescriptorsErrors[value.points.length - 1 - index]
|
|
352
|
+
}
|
|
287
353
|
sampleAnswer={value.sampleAnswers && value.sampleAnswers[index]}
|
|
288
354
|
onChange={(content) => this.changeContent(index, content, 'points')}
|
|
289
355
|
onSampleChange={(content) => this.changeContent(index, content, 'sampleAnswers')}
|
|
290
356
|
onMenuChange={(clickedItem) => this.onPointMenuChange(index, clickedItem)}
|
|
291
357
|
mathMlOptions={mathMlOptions}
|
|
358
|
+
pluginOpts={pluginOpts}
|
|
292
359
|
/>
|
|
293
360
|
</div>
|
|
294
361
|
)}
|
|
@@ -315,6 +382,14 @@ const styles = (theme) => ({
|
|
|
315
382
|
padding: theme.spacing.unit * 2,
|
|
316
383
|
margin: theme.spacing.unit,
|
|
317
384
|
},
|
|
385
|
+
inputContainer: {
|
|
386
|
+
width: '100%',
|
|
387
|
+
paddingTop: theme.spacing.unit * 2,
|
|
388
|
+
marginBottom: theme.spacing.unit * 2,
|
|
389
|
+
},
|
|
390
|
+
rubricless: {
|
|
391
|
+
display: 'none',
|
|
392
|
+
},
|
|
318
393
|
configHolder: {
|
|
319
394
|
paddingTop: theme.spacing.unit,
|
|
320
395
|
paddingBottom: theme.spacing.unit,
|
|
@@ -328,6 +403,7 @@ const styles = (theme) => ({
|
|
|
328
403
|
const StyledRawAuthoring = withStyles(styles)(RawAuthoring);
|
|
329
404
|
|
|
330
405
|
const Reverse = (props) => {
|
|
406
|
+
const { rubricless = false, config = {}, pluginOpts = {} } = props || {};
|
|
331
407
|
const points = Array.from(props.value.points || []).reverse();
|
|
332
408
|
let sampleAnswers = Array.from(props.value.sampleAnswers || []).reverse();
|
|
333
409
|
|
|
@@ -347,11 +423,22 @@ const Reverse = (props) => {
|
|
|
347
423
|
});
|
|
348
424
|
};
|
|
349
425
|
|
|
350
|
-
return
|
|
426
|
+
return (
|
|
427
|
+
<StyledRawAuthoring
|
|
428
|
+
value={value}
|
|
429
|
+
config={config}
|
|
430
|
+
onChange={onChange}
|
|
431
|
+
rubricless={rubricless}
|
|
432
|
+
pluginOpts={pluginOpts}
|
|
433
|
+
/>
|
|
434
|
+
);
|
|
351
435
|
};
|
|
352
436
|
|
|
353
437
|
Reverse.propTypes = {
|
|
354
438
|
value: RubricType,
|
|
439
|
+
config: PropTypes.object,
|
|
440
|
+
pluginOpts: PropTypes.object,
|
|
441
|
+
rubricless: PropTypes.bool,
|
|
355
442
|
getIndex: PropTypes.func,
|
|
356
443
|
onChange: PropTypes.func,
|
|
357
444
|
};
|