@pie-element/multiple-choice 8.14.0 → 8.14.1-next.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/configure/package.json +1 -1
- package/controller/package.json +1 -1
- package/package.json +3 -3
- package/configure/lib/defaults.js +0 -204
- package/configure/lib/defaults.js.map +0 -1
- package/configure/lib/index.js +0 -248
- package/configure/lib/index.js.map +0 -1
- package/configure/lib/main.js +0 -628
- package/configure/lib/main.js.map +0 -1
- package/configure/lib/utils.js +0 -18
- package/configure/lib/utils.js.map +0 -1
- package/controller/lib/defaults.js +0 -18
- package/controller/lib/defaults.js.map +0 -1
- package/controller/lib/index.js +0 -335
- package/controller/lib/index.js.map +0 -1
- package/controller/lib/utils.js +0 -36
- package/controller/lib/utils.js.map +0 -1
- package/lib/choice-input.js +0 -332
- package/lib/choice-input.js.map +0 -1
- package/lib/choice.js +0 -165
- package/lib/choice.js.map +0 -1
- package/lib/feedback-tick.js +0 -174
- package/lib/feedback-tick.js.map +0 -1
- package/lib/index.js +0 -156
- package/lib/index.js.map +0 -1
- package/lib/main.js +0 -96
- package/lib/main.js.map +0 -1
- package/lib/multiple-choice.js +0 -359
- package/lib/multiple-choice.js.map +0 -1
- package/lib/print.js +0 -129
- package/lib/print.js.map +0 -1
- package/lib/session-updater.js +0 -35
- package/lib/session-updater.js.map +0 -1
- package/module/configure.js +0 -11110
- package/module/controller.js +0 -20843
- package/module/demo.js +0 -78
- package/module/element.js +0 -9747
- package/module/index.html +0 -21
- package/module/manifest.json +0 -14
- package/module/print-demo.js +0 -116
- package/module/print.html +0 -18
- package/module/print.js +0 -9709
package/lib/multiple-choice.js
DELETED
|
@@ -1,359 +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.MultipleChoice = void 0;
|
|
9
|
-
|
|
10
|
-
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
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 _react = _interopRequireDefault(require("react"));
|
|
27
|
-
|
|
28
|
-
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
29
|
-
|
|
30
|
-
var _correctAnswerToggle = require("@pie-lib/pie-toolbox/correct-answer-toggle");
|
|
31
|
-
|
|
32
|
-
var _classnames = _interopRequireDefault(require("classnames"));
|
|
33
|
-
|
|
34
|
-
var _styles = require("@material-ui/core/styles");
|
|
35
|
-
|
|
36
|
-
var _renderUi = require("@pie-lib/pie-toolbox/render-ui");
|
|
37
|
-
|
|
38
|
-
var _choice = _interopRequireDefault(require("./choice"));
|
|
39
|
-
|
|
40
|
-
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
|
|
41
|
-
|
|
42
|
-
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
43
|
-
|
|
44
|
-
// MultipleChoice
|
|
45
|
-
var styles = function styles(theme) {
|
|
46
|
-
return {
|
|
47
|
-
main: {
|
|
48
|
-
color: _renderUi.color.text(),
|
|
49
|
-
backgroundColor: _renderUi.color.background(),
|
|
50
|
-
'& *': {
|
|
51
|
-
'-webkit-font-smoothing': 'antialiased'
|
|
52
|
-
}
|
|
53
|
-
},
|
|
54
|
-
partLabel: {
|
|
55
|
-
display: 'block',
|
|
56
|
-
fontSize: 'inherit',
|
|
57
|
-
margin: '0',
|
|
58
|
-
fontWeight: 'normal',
|
|
59
|
-
paddingBottom: theme.spacing.unit * 2
|
|
60
|
-
},
|
|
61
|
-
teacherInstructions: {
|
|
62
|
-
marginBottom: theme.spacing.unit * 2
|
|
63
|
-
},
|
|
64
|
-
horizontalLayout: {
|
|
65
|
-
display: 'flex',
|
|
66
|
-
flexDirection: 'row',
|
|
67
|
-
flexWrap: 'wrap'
|
|
68
|
-
},
|
|
69
|
-
gridLayout: {
|
|
70
|
-
display: 'grid'
|
|
71
|
-
},
|
|
72
|
-
fieldset: {
|
|
73
|
-
border: '0px',
|
|
74
|
-
padding: '0.01em 0 0 0',
|
|
75
|
-
margin: '0px',
|
|
76
|
-
minWidth: '0px'
|
|
77
|
-
},
|
|
78
|
-
srOnly: {
|
|
79
|
-
position: 'absolute',
|
|
80
|
-
left: '-10000px',
|
|
81
|
-
top: 'auto',
|
|
82
|
-
width: '1px',
|
|
83
|
-
height: '1px',
|
|
84
|
-
overflow: 'hidden'
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
|
-
};
|
|
88
|
-
|
|
89
|
-
var MultipleChoice = /*#__PURE__*/function (_React$Component) {
|
|
90
|
-
(0, _inherits2["default"])(MultipleChoice, _React$Component);
|
|
91
|
-
|
|
92
|
-
var _super = _createSuper(MultipleChoice);
|
|
93
|
-
|
|
94
|
-
function MultipleChoice(props) {
|
|
95
|
-
var _this;
|
|
96
|
-
|
|
97
|
-
(0, _classCallCheck2["default"])(this, MultipleChoice);
|
|
98
|
-
_this = _super.call(this, props);
|
|
99
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleChange", function (event) {
|
|
100
|
-
var target = event.target;
|
|
101
|
-
|
|
102
|
-
_this.setState({
|
|
103
|
-
selectedValue: target.value
|
|
104
|
-
});
|
|
105
|
-
});
|
|
106
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleChangeCheckboxes", function (event) {
|
|
107
|
-
var _event$target = event.target,
|
|
108
|
-
value = _event$target.value,
|
|
109
|
-
checked = _event$target.checked;
|
|
110
|
-
|
|
111
|
-
_this.setState(function (prevState) {
|
|
112
|
-
var selectedValues = (0, _toConsumableArray2["default"])(prevState.selectedValues);
|
|
113
|
-
|
|
114
|
-
if (checked) {
|
|
115
|
-
selectedValues.push(value);
|
|
116
|
-
} else {
|
|
117
|
-
selectedValues = selectedValues.filter(function (currentValue) {
|
|
118
|
-
return currentValue !== value;
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
return {
|
|
123
|
-
selectedValues: selectedValues
|
|
124
|
-
};
|
|
125
|
-
});
|
|
126
|
-
});
|
|
127
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "getCorrectness", function () {
|
|
128
|
-
var choice = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
129
|
-
var isCorrect = choice.correct;
|
|
130
|
-
|
|
131
|
-
var isChecked = _this.isSelected(choice.value);
|
|
132
|
-
|
|
133
|
-
if (_this.state.showCorrect) {
|
|
134
|
-
return isCorrect ? 'correct' : undefined;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
if (isCorrect) {
|
|
138
|
-
if (isChecked) {
|
|
139
|
-
// A correct answer is selected: marked with a green checkmark
|
|
140
|
-
return 'correct';
|
|
141
|
-
} else {
|
|
142
|
-
// A correct answer is NOT selected: marked with an orange X
|
|
143
|
-
return 'incorrect';
|
|
144
|
-
}
|
|
145
|
-
} else {
|
|
146
|
-
if (isChecked) {
|
|
147
|
-
// An incorrect answer is selected: marked with an orange X
|
|
148
|
-
return 'incorrect';
|
|
149
|
-
} else {
|
|
150
|
-
// An incorrect answer is NOT selected: not marked
|
|
151
|
-
return undefined;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
});
|
|
155
|
-
_this.state = {
|
|
156
|
-
selectedValue: null,
|
|
157
|
-
selectedValues: [],
|
|
158
|
-
showCorrect: _this.props.alwaysShowCorrect || false
|
|
159
|
-
};
|
|
160
|
-
_this.onToggle = _this.onToggle.bind((0, _assertThisInitialized2["default"])(_this));
|
|
161
|
-
return _this;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
(0, _createClass2["default"])(MultipleChoice, [{
|
|
165
|
-
key: "isSelected",
|
|
166
|
-
value: function isSelected(value) {
|
|
167
|
-
var sessionValue = this.props.session && this.props.session.value;
|
|
168
|
-
return sessionValue && sessionValue.indexOf && sessionValue.indexOf(value) >= 0;
|
|
169
|
-
} // handleChange and handleChangeCheckboxes functions were added for accessibility. Please see comments and videos from PD-2441. They should only be removed if a better solution is found.
|
|
170
|
-
|
|
171
|
-
}, {
|
|
172
|
-
key: "onToggle",
|
|
173
|
-
value: function onToggle() {
|
|
174
|
-
if (this.props.mode === 'evaluate') {
|
|
175
|
-
this.setState({
|
|
176
|
-
showCorrect: !this.state.showCorrect
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
}, {
|
|
181
|
-
key: "UNSAFE_componentWillReceiveProps",
|
|
182
|
-
value: function UNSAFE_componentWillReceiveProps(nextProps) {
|
|
183
|
-
if (!nextProps.correctResponse) {
|
|
184
|
-
this.setState({
|
|
185
|
-
showCorrect: false
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
if (nextProps.alwaysShowCorrect) {
|
|
190
|
-
this.setState({
|
|
191
|
-
showCorrect: true
|
|
192
|
-
});
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
}, {
|
|
196
|
-
key: "indexToSymbol",
|
|
197
|
-
value: function indexToSymbol(index) {
|
|
198
|
-
if (this.props.keyMode === 'numbers') {
|
|
199
|
-
return "".concat(index + 1);
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
if (this.props.keyMode === 'letters') {
|
|
203
|
-
return String.fromCharCode(97 + index).toUpperCase();
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
return '';
|
|
207
|
-
}
|
|
208
|
-
}, {
|
|
209
|
-
key: "getChecked",
|
|
210
|
-
value: function getChecked(choice) {
|
|
211
|
-
if (this.state.showCorrect) {
|
|
212
|
-
return choice.correct || false;
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
if (this.isSelected(choice.value)) {
|
|
216
|
-
return true;
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
return this.props.choiceMode === 'radio' ? this.state.selectedValue === choice.value : this.state.selectedValues.includes(choice.value);
|
|
220
|
-
} // renderHeading function was added for accessibility.
|
|
221
|
-
|
|
222
|
-
}, {
|
|
223
|
-
key: "renderHeading",
|
|
224
|
-
value: function renderHeading() {
|
|
225
|
-
var _this$props = this.props,
|
|
226
|
-
mode = _this$props.mode,
|
|
227
|
-
choiceMode = _this$props.choiceMode,
|
|
228
|
-
classes = _this$props.classes;
|
|
229
|
-
|
|
230
|
-
if (mode !== 'gather') {
|
|
231
|
-
return null;
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
return choiceMode === 'radio' ? /*#__PURE__*/_react["default"].createElement("h2", {
|
|
235
|
-
className: classes.srOnly
|
|
236
|
-
}, "Multiple Choice Question") : /*#__PURE__*/_react["default"].createElement("h2", {
|
|
237
|
-
className: classes.srOnly
|
|
238
|
-
}, "Multiple Select Question");
|
|
239
|
-
}
|
|
240
|
-
}, {
|
|
241
|
-
key: "render",
|
|
242
|
-
value: function render() {
|
|
243
|
-
var _classNames,
|
|
244
|
-
_this2 = this;
|
|
245
|
-
|
|
246
|
-
var _this$props2 = this.props,
|
|
247
|
-
mode = _this$props2.mode,
|
|
248
|
-
disabled = _this$props2.disabled,
|
|
249
|
-
className = _this$props2.className,
|
|
250
|
-
_this$props2$choices = _this$props2.choices,
|
|
251
|
-
choices = _this$props2$choices === void 0 ? [] : _this$props2$choices,
|
|
252
|
-
choiceMode = _this$props2.choiceMode,
|
|
253
|
-
gridColumns = _this$props2.gridColumns,
|
|
254
|
-
partLabel = _this$props2.partLabel,
|
|
255
|
-
prompt = _this$props2.prompt,
|
|
256
|
-
onChoiceChanged = _this$props2.onChoiceChanged,
|
|
257
|
-
responseCorrect = _this$props2.responseCorrect,
|
|
258
|
-
teacherInstructions = _this$props2.teacherInstructions,
|
|
259
|
-
classes = _this$props2.classes,
|
|
260
|
-
alwaysShowCorrect = _this$props2.alwaysShowCorrect,
|
|
261
|
-
animationsDisabled = _this$props2.animationsDisabled,
|
|
262
|
-
language = _this$props2.language;
|
|
263
|
-
var showCorrect = this.state.showCorrect;
|
|
264
|
-
var isEvaluateMode = mode === 'evaluate';
|
|
265
|
-
var showCorrectAnswerToggle = isEvaluateMode && !responseCorrect;
|
|
266
|
-
var columnsStyle = gridColumns > 1 ? {
|
|
267
|
-
gridTemplateColumns: "repeat(".concat(gridColumns, ", 1fr)")
|
|
268
|
-
} : undefined;
|
|
269
|
-
|
|
270
|
-
var teacherInstructionsDiv = /*#__PURE__*/_react["default"].createElement(_renderUi.PreviewPrompt, {
|
|
271
|
-
tagName: "div",
|
|
272
|
-
className: "prompt",
|
|
273
|
-
defaultClassName: "teacher-instructions",
|
|
274
|
-
prompt: teacherInstructions
|
|
275
|
-
});
|
|
276
|
-
|
|
277
|
-
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
278
|
-
className: (0, _classnames["default"])(classes.main, className, 'multiple-choice')
|
|
279
|
-
}, partLabel && /*#__PURE__*/_react["default"].createElement("h3", {
|
|
280
|
-
className: classes.partLabel
|
|
281
|
-
}, partLabel), this.renderHeading(), teacherInstructions && /*#__PURE__*/_react["default"].createElement("div", {
|
|
282
|
-
className: classes.teacherInstructions
|
|
283
|
-
}, !animationsDisabled ? /*#__PURE__*/_react["default"].createElement(_renderUi.Collapsible, {
|
|
284
|
-
labels: {
|
|
285
|
-
hidden: 'Show Teacher Instructions',
|
|
286
|
-
visible: 'Hide Teacher Instructions'
|
|
287
|
-
}
|
|
288
|
-
}, teacherInstructionsDiv) : teacherInstructionsDiv), /*#__PURE__*/_react["default"].createElement("fieldset", {
|
|
289
|
-
className: classes.fieldset
|
|
290
|
-
}, /*#__PURE__*/_react["default"].createElement(_renderUi.PreviewPrompt, {
|
|
291
|
-
className: "prompt",
|
|
292
|
-
defaultClassName: "prompt",
|
|
293
|
-
prompt: prompt,
|
|
294
|
-
tagName: 'legend'
|
|
295
|
-
}), !alwaysShowCorrect && /*#__PURE__*/_react["default"].createElement(_correctAnswerToggle.CorrectAnswerToggle, {
|
|
296
|
-
show: showCorrectAnswerToggle,
|
|
297
|
-
toggled: showCorrect,
|
|
298
|
-
onToggle: this.onToggle.bind(this),
|
|
299
|
-
language: language
|
|
300
|
-
}), /*#__PURE__*/_react["default"].createElement("div", {
|
|
301
|
-
className: (0, _classnames["default"])((_classNames = {}, (0, _defineProperty2["default"])(_classNames, classes.gridLayout, this.props.choicesLayout === 'grid'), (0, _defineProperty2["default"])(_classNames, classes.horizontalLayout, this.props.choicesLayout === 'horizontal'), _classNames)),
|
|
302
|
-
style: columnsStyle
|
|
303
|
-
}, choices.map(function (choice, index) {
|
|
304
|
-
return /*#__PURE__*/_react["default"].createElement(_choice["default"], {
|
|
305
|
-
choicesLayout: _this2.props.choicesLayout,
|
|
306
|
-
gridColumns: gridColumns,
|
|
307
|
-
key: "choice-".concat(index),
|
|
308
|
-
choice: choice,
|
|
309
|
-
index: index,
|
|
310
|
-
choicesLength: choices.length,
|
|
311
|
-
showCorrect: showCorrect,
|
|
312
|
-
isEvaluateMode: isEvaluateMode,
|
|
313
|
-
choiceMode: choiceMode,
|
|
314
|
-
disabled: disabled,
|
|
315
|
-
updateSession: onChoiceChanged,
|
|
316
|
-
onChoiceChanged: _this2.props.choiceMode === 'radio' ? _this2.handleChange : _this2.handleChangeCheckboxes,
|
|
317
|
-
hideTick: choice.hideTick,
|
|
318
|
-
checked: _this2.getChecked(choice),
|
|
319
|
-
correctness: isEvaluateMode ? _this2.getCorrectness(choice) : undefined,
|
|
320
|
-
displayKey: _this2.indexToSymbol(index)
|
|
321
|
-
});
|
|
322
|
-
}))));
|
|
323
|
-
}
|
|
324
|
-
}]);
|
|
325
|
-
return MultipleChoice;
|
|
326
|
-
}(_react["default"].Component);
|
|
327
|
-
|
|
328
|
-
exports.MultipleChoice = MultipleChoice;
|
|
329
|
-
(0, _defineProperty2["default"])(MultipleChoice, "propTypes", {
|
|
330
|
-
className: _propTypes["default"].string,
|
|
331
|
-
mode: _propTypes["default"].oneOf(['gather', 'view', 'evaluate']),
|
|
332
|
-
choiceMode: _propTypes["default"].oneOf(['radio', 'checkbox']),
|
|
333
|
-
keyMode: _propTypes["default"].oneOf(['numbers', 'letters', 'none']),
|
|
334
|
-
choices: _propTypes["default"].array,
|
|
335
|
-
partLabel: _propTypes["default"].string,
|
|
336
|
-
prompt: _propTypes["default"].string,
|
|
337
|
-
teacherInstructions: _propTypes["default"].string,
|
|
338
|
-
session: _propTypes["default"].object,
|
|
339
|
-
disabled: _propTypes["default"].bool,
|
|
340
|
-
onChoiceChanged: _propTypes["default"].func,
|
|
341
|
-
responseCorrect: _propTypes["default"].bool,
|
|
342
|
-
classes: _propTypes["default"].object.isRequired,
|
|
343
|
-
correctResponse: _propTypes["default"].array,
|
|
344
|
-
choicesLayout: _propTypes["default"].oneOf(['vertical', 'grid', 'horizontal']),
|
|
345
|
-
gridColumns: _propTypes["default"].string,
|
|
346
|
-
alwaysShowCorrect: _propTypes["default"].bool,
|
|
347
|
-
animationsDisabled: _propTypes["default"].bool,
|
|
348
|
-
language: _propTypes["default"].string
|
|
349
|
-
});
|
|
350
|
-
MultipleChoice.defaultProps = {
|
|
351
|
-
session: {
|
|
352
|
-
value: []
|
|
353
|
-
}
|
|
354
|
-
};
|
|
355
|
-
|
|
356
|
-
var _default = (0, _styles.withStyles)(styles)(MultipleChoice);
|
|
357
|
-
|
|
358
|
-
exports["default"] = _default;
|
|
359
|
-
//# sourceMappingURL=multiple-choice.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/multiple-choice.jsx"],"names":["styles","theme","main","color","text","backgroundColor","background","partLabel","display","fontSize","margin","fontWeight","paddingBottom","spacing","unit","teacherInstructions","marginBottom","horizontalLayout","flexDirection","flexWrap","gridLayout","fieldset","border","padding","minWidth","srOnly","position","left","top","width","height","overflow","MultipleChoice","props","event","target","setState","selectedValue","value","checked","prevState","selectedValues","push","filter","currentValue","choice","isCorrect","correct","isChecked","isSelected","state","showCorrect","undefined","alwaysShowCorrect","onToggle","bind","sessionValue","session","indexOf","mode","nextProps","correctResponse","index","keyMode","String","fromCharCode","toUpperCase","choiceMode","includes","classes","disabled","className","choices","gridColumns","prompt","onChoiceChanged","responseCorrect","animationsDisabled","language","isEvaluateMode","showCorrectAnswerToggle","columnsStyle","gridTemplateColumns","teacherInstructionsDiv","renderHeading","hidden","visible","choicesLayout","map","length","handleChange","handleChangeCheckboxes","hideTick","getChecked","getCorrectness","indexToSymbol","React","Component","PropTypes","string","oneOf","array","object","bool","func","isRequired","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport {CorrectAnswerToggle} from '@pie-lib/pie-toolbox/correct-answer-toggle';\nimport classNames from 'classnames';\nimport {withStyles} from '@material-ui/core/styles';\nimport {color, Collapsible, PreviewPrompt} from '@pie-lib/pie-toolbox/render-ui';\nimport StyledChoice from './choice';\n\n// MultipleChoice\n\nconst styles = (theme) => ({\n main: {\n color: color.text(),\n backgroundColor: color.background(),\n '& *': {\n '-webkit-font-smoothing': 'antialiased',\n },\n },\n partLabel: {\n display: 'block',\n fontSize: 'inherit',\n margin: '0',\n fontWeight: 'normal',\n paddingBottom: theme.spacing.unit * 2,\n },\n teacherInstructions: {\n marginBottom: theme.spacing.unit * 2,\n },\n horizontalLayout: {\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap',\n },\n gridLayout: {\n display: 'grid',\n },\n fieldset: {\n border: '0px',\n padding: '0.01em 0 0 0',\n margin: '0px',\n minWidth: '0px',\n },\n srOnly: {\n position: 'absolute',\n left: '-10000px',\n top: 'auto',\n width: '1px',\n height: '1px',\n overflow: 'hidden',\n },\n});\n\nexport class MultipleChoice extends React.Component {\n static propTypes = {\n className: PropTypes.string,\n mode: PropTypes.oneOf(['gather', 'view', 'evaluate']),\n choiceMode: PropTypes.oneOf(['radio', 'checkbox']),\n keyMode: PropTypes.oneOf(['numbers', 'letters', 'none']),\n choices: PropTypes.array,\n partLabel: PropTypes.string,\n prompt: PropTypes.string,\n teacherInstructions: PropTypes.string,\n session: PropTypes.object,\n disabled: PropTypes.bool,\n onChoiceChanged: PropTypes.func,\n responseCorrect: PropTypes.bool,\n classes: PropTypes.object.isRequired,\n correctResponse: PropTypes.array,\n choicesLayout: PropTypes.oneOf(['vertical', 'grid', 'horizontal']),\n gridColumns: PropTypes.string,\n alwaysShowCorrect: PropTypes.bool,\n animationsDisabled: PropTypes.bool,\n language: PropTypes.string,\n };\n\n constructor(props) {\n super(props);\n\n this.state = {\n selectedValue: null,\n selectedValues: [],\n showCorrect: this.props.alwaysShowCorrect || false,\n };\n\n this.onToggle = this.onToggle.bind(this);\n }\n\n isSelected(value) {\n const sessionValue = this.props.session && this.props.session.value;\n\n return sessionValue && sessionValue.indexOf && sessionValue.indexOf(value) >= 0;\n }\n\n // handleChange and handleChangeCheckboxes functions were added for accessibility. Please see comments and videos from PD-2441. They should only be removed if a better solution is found.\n handleChange = (event) => {\n const target = event.target;\n\n this.setState({selectedValue: target.value});\n };\n\n handleChangeCheckboxes = (event) => {\n const {value, checked} = event.target;\n\n this.setState((prevState) => {\n let selectedValues = [...prevState.selectedValues];\n\n if (checked) {\n selectedValues.push(value);\n } else {\n selectedValues = selectedValues.filter((currentValue) => currentValue !== value);\n }\n\n return {selectedValues};\n });\n };\n\n onToggle() {\n if (this.props.mode === 'evaluate') {\n this.setState({showCorrect: !this.state.showCorrect});\n }\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (!nextProps.correctResponse) {\n this.setState({showCorrect: false});\n }\n\n if (nextProps.alwaysShowCorrect) {\n this.setState({showCorrect: true});\n }\n }\n\n indexToSymbol(index) {\n if (this.props.keyMode === 'numbers') {\n return `${index + 1}`;\n }\n\n if (this.props.keyMode === 'letters') {\n return String.fromCharCode(97 + index).toUpperCase();\n }\n\n return '';\n }\n\n getCorrectness = (choice = {}) => {\n const isCorrect = choice.correct;\n const isChecked = this.isSelected(choice.value);\n\n if (this.state.showCorrect) {\n return isCorrect ? 'correct' : undefined;\n }\n\n if (isCorrect) {\n if (isChecked) {\n // A correct answer is selected: marked with a green checkmark\n return 'correct';\n } else {\n // A correct answer is NOT selected: marked with an orange X\n return 'incorrect';\n }\n } else {\n if (isChecked) {\n // An incorrect answer is selected: marked with an orange X\n return 'incorrect';\n } else {\n // An incorrect answer is NOT selected: not marked\n return undefined;\n }\n }\n };\n\n getChecked(choice) {\n if (this.state.showCorrect) {\n return choice.correct || false;\n }\n\n if (this.isSelected(choice.value)) {\n return true;\n }\n\n return this.props.choiceMode === 'radio'\n ? this.state.selectedValue === choice.value\n : this.state.selectedValues.includes(choice.value);\n }\n\n // renderHeading function was added for accessibility.\n renderHeading() {\n const {mode, choiceMode, classes} = this.props;\n\n if (mode !== 'gather') {\n return null;\n }\n\n return choiceMode === 'radio' ? (\n <h2 className={classes.srOnly}>Multiple Choice Question</h2>\n ) : (\n <h2 className={classes.srOnly}>Multiple Select Question</h2>\n );\n }\n\n render() {\n const {\n mode,\n disabled,\n className,\n choices = [],\n choiceMode,\n gridColumns,\n partLabel,\n prompt,\n onChoiceChanged,\n responseCorrect,\n teacherInstructions,\n classes,\n alwaysShowCorrect,\n animationsDisabled,\n language\n } = this.props;\n const {showCorrect} = this.state;\n const isEvaluateMode = mode === 'evaluate';\n const showCorrectAnswerToggle = isEvaluateMode && !responseCorrect;\n const columnsStyle = gridColumns > 1 ? {gridTemplateColumns: `repeat(${gridColumns}, 1fr)`} : undefined;\n\n const teacherInstructionsDiv = (\n <PreviewPrompt\n tagName=\"div\"\n className=\"prompt\"\n defaultClassName=\"teacher-instructions\"\n prompt={teacherInstructions}\n />\n );\n\n return (\n <div className={classNames(classes.main, className, 'multiple-choice')}>\n {partLabel && <h3 className={classes.partLabel}>{partLabel}</h3>}\n\n {this.renderHeading()}\n\n {teacherInstructions && (\n <div className={classes.teacherInstructions}>\n {!animationsDisabled ? (\n <Collapsible\n labels={{\n hidden: 'Show Teacher Instructions',\n visible: 'Hide Teacher Instructions',\n }}\n >\n {teacherInstructionsDiv}\n </Collapsible>\n ) : (\n teacherInstructionsDiv\n )}\n </div>\n )}\n\n <fieldset className={classes.fieldset}>\n <PreviewPrompt className=\"prompt\" defaultClassName=\"prompt\" prompt={prompt} tagName={'legend'}/>\n\n {!alwaysShowCorrect && (\n <CorrectAnswerToggle\n show={showCorrectAnswerToggle}\n toggled={showCorrect}\n onToggle={this.onToggle.bind(this)}\n language={language}\n />\n )}\n\n <div\n className={classNames({\n [classes.gridLayout]: this.props.choicesLayout === 'grid',\n [classes.horizontalLayout]: this.props.choicesLayout === 'horizontal',\n })}\n style={columnsStyle}\n >\n {choices.map((choice, index) => (\n <StyledChoice\n choicesLayout={this.props.choicesLayout}\n gridColumns={gridColumns}\n key={`choice-${index}`}\n choice={choice}\n index={index}\n choicesLength={choices.length}\n showCorrect={showCorrect}\n isEvaluateMode={isEvaluateMode}\n choiceMode={choiceMode}\n disabled={disabled}\n updateSession={onChoiceChanged}\n onChoiceChanged={this.props.choiceMode === 'radio' ? this.handleChange : this.handleChangeCheckboxes}\n hideTick={choice.hideTick}\n checked={this.getChecked(choice)}\n correctness={isEvaluateMode ? this.getCorrectness(choice) : undefined}\n displayKey={this.indexToSymbol(index)}\n />\n ))}\n </div>\n </fieldset>\n </div>\n );\n }\n}\n\nMultipleChoice.defaultProps = {\n session: {\n value: [],\n },\n};\n\nexport default withStyles(styles)(MultipleChoice);\n"],"file":"multiple-choice.js"}
|
package/lib/print.js
DELETED
|
@@ -1,129 +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"] = void 0;
|
|
9
|
-
|
|
10
|
-
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
|
-
|
|
12
|
-
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
13
|
-
|
|
14
|
-
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
15
|
-
|
|
16
|
-
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
17
|
-
|
|
18
|
-
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
19
|
-
|
|
20
|
-
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
21
|
-
|
|
22
|
-
var _wrapNativeSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapNativeSuper"));
|
|
23
|
-
|
|
24
|
-
var _react = _interopRequireDefault(require("react"));
|
|
25
|
-
|
|
26
|
-
var _reactDom = _interopRequireDefault(require("react-dom"));
|
|
27
|
-
|
|
28
|
-
var _debounce = _interopRequireDefault(require("lodash/debounce"));
|
|
29
|
-
|
|
30
|
-
var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
|
|
31
|
-
|
|
32
|
-
var _main = _interopRequireDefault(require("./main"));
|
|
33
|
-
|
|
34
|
-
var _mathRenderingAccessible = require("@pie-lib/pie-toolbox/math-rendering-accessible");
|
|
35
|
-
|
|
36
|
-
var _debug = _interopRequireDefault(require("debug"));
|
|
37
|
-
|
|
38
|
-
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); }; }
|
|
39
|
-
|
|
40
|
-
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; } }
|
|
41
|
-
|
|
42
|
-
var log = (0, _debug["default"])('pie-element:multiple-choice:print');
|
|
43
|
-
/**
|
|
44
|
-
* Live in same package as main element - so we can access some of the shared comps!
|
|
45
|
-
*
|
|
46
|
-
* - update pslb to build print if src/print.js is there
|
|
47
|
-
* - update demo el
|
|
48
|
-
* - get configure/controller building
|
|
49
|
-
*/
|
|
50
|
-
|
|
51
|
-
var preparePrintModel = function preparePrintModel(model, opts) {
|
|
52
|
-
var instr = opts.role === 'instructor';
|
|
53
|
-
model.prompt = model.promptEnabled !== false ? model.prompt : undefined;
|
|
54
|
-
model.teacherInstructions = instr && model.teacherInstructionsEnabled !== false ? model.teacherInstructions : undefined;
|
|
55
|
-
model.showTeacherInstructions = instr;
|
|
56
|
-
model.alwaysShowCorrect = instr;
|
|
57
|
-
model.mode = instr ? 'evaluate' : model.mode;
|
|
58
|
-
model.disabled = true;
|
|
59
|
-
model.animationsDisabled = true;
|
|
60
|
-
model.lockChoiceOrder = true;
|
|
61
|
-
model.choicesLayout = model.choicesLayout || 'vertical';
|
|
62
|
-
var choices = (0, _cloneDeep["default"])(model.choices);
|
|
63
|
-
model.choices = choices.map(function (c) {
|
|
64
|
-
c.rationale = instr && model.rationaleEnabled !== false ? c.rationale : undefined;
|
|
65
|
-
c.hideTick = instr;
|
|
66
|
-
c.feedback = undefined;
|
|
67
|
-
return c;
|
|
68
|
-
});
|
|
69
|
-
model.keyMode = model.choicePrefix || 'letters';
|
|
70
|
-
return model;
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
var MultipleChoicePrint = /*#__PURE__*/function (_HTMLElement) {
|
|
74
|
-
(0, _inherits2["default"])(MultipleChoicePrint, _HTMLElement);
|
|
75
|
-
|
|
76
|
-
var _super = _createSuper(MultipleChoicePrint);
|
|
77
|
-
|
|
78
|
-
function MultipleChoicePrint() {
|
|
79
|
-
var _this;
|
|
80
|
-
|
|
81
|
-
(0, _classCallCheck2["default"])(this, MultipleChoicePrint);
|
|
82
|
-
_this = _super.call(this);
|
|
83
|
-
_this._options = null;
|
|
84
|
-
_this._model = null;
|
|
85
|
-
_this._session = [];
|
|
86
|
-
_this._rerender = (0, _debounce["default"])(function () {
|
|
87
|
-
if (_this._model && _this._session) {
|
|
88
|
-
var printModel = preparePrintModel(_this._model, _this._options);
|
|
89
|
-
|
|
90
|
-
var element = _this._options && /*#__PURE__*/_react["default"].createElement(_main["default"], {
|
|
91
|
-
model: printModel,
|
|
92
|
-
session: {}
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
_reactDom["default"].render(element, (0, _assertThisInitialized2["default"])(_this), function () {
|
|
96
|
-
log('render complete - render math');
|
|
97
|
-
(0, _mathRenderingAccessible.renderMath)((0, _assertThisInitialized2["default"])(_this));
|
|
98
|
-
});
|
|
99
|
-
} else {
|
|
100
|
-
log('skip');
|
|
101
|
-
}
|
|
102
|
-
}, 50, {
|
|
103
|
-
leading: false,
|
|
104
|
-
trailing: true
|
|
105
|
-
});
|
|
106
|
-
return _this;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
(0, _createClass2["default"])(MultipleChoicePrint, [{
|
|
110
|
-
key: "options",
|
|
111
|
-
set: function set(o) {
|
|
112
|
-
this._options = o;
|
|
113
|
-
}
|
|
114
|
-
}, {
|
|
115
|
-
key: "model",
|
|
116
|
-
set: function set(s) {
|
|
117
|
-
this._model = s;
|
|
118
|
-
|
|
119
|
-
this._rerender();
|
|
120
|
-
}
|
|
121
|
-
}, {
|
|
122
|
-
key: "connectedCallback",
|
|
123
|
-
value: function connectedCallback() {}
|
|
124
|
-
}]);
|
|
125
|
-
return MultipleChoicePrint;
|
|
126
|
-
}( /*#__PURE__*/(0, _wrapNativeSuper2["default"])(HTMLElement));
|
|
127
|
-
|
|
128
|
-
exports["default"] = MultipleChoicePrint;
|
|
129
|
-
//# sourceMappingURL=print.js.map
|
package/lib/print.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/print.js"],"names":["log","preparePrintModel","model","opts","instr","role","prompt","promptEnabled","undefined","teacherInstructions","teacherInstructionsEnabled","showTeacherInstructions","alwaysShowCorrect","mode","disabled","animationsDisabled","lockChoiceOrder","choicesLayout","choices","map","c","rationale","rationaleEnabled","hideTick","feedback","keyMode","choicePrefix","MultipleChoicePrint","_options","_model","_session","_rerender","printModel","element","React","createElement","Main","session","ReactDOM","render","leading","trailing","o","s","HTMLElement"],"mappings":"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","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport debounce from 'lodash/debounce';\nimport cloneDeep from 'lodash/cloneDeep';\nimport Main from './main';\nimport { renderMath } from '@pie-lib/pie-toolbox/math-rendering-accessible';\nimport debug from 'debug';\n\nconst log = debug('pie-element:multiple-choice:print');\n\n/**\n * Live in same package as main element - so we can access some of the shared comps!\n *\n * - update pslb to build print if src/print.js is there\n * - update demo el\n * - get configure/controller building\n */\n\nconst preparePrintModel = (model, opts) => {\n const instr = opts.role === 'instructor';\n\n model.prompt = model.promptEnabled !== false ? model.prompt : undefined;\n model.teacherInstructions =\n instr && model.teacherInstructionsEnabled !== false ? model.teacherInstructions : undefined;\n model.showTeacherInstructions = instr;\n model.alwaysShowCorrect = instr;\n model.mode = instr ? 'evaluate' : model.mode;\n\n model.disabled = true;\n model.animationsDisabled = true;\n model.lockChoiceOrder = true;\n model.choicesLayout = model.choicesLayout || 'vertical';\n\n const choices = cloneDeep(model.choices);\n\n model.choices = choices.map((c) => {\n c.rationale = instr && model.rationaleEnabled !== false ? c.rationale : undefined;\n c.hideTick = instr;\n c.feedback = undefined;\n return c;\n });\n\n model.keyMode = model.choicePrefix || 'letters';\n\n return model;\n};\n\nexport default class MultipleChoicePrint extends HTMLElement {\n constructor() {\n super();\n this._options = null;\n this._model = null;\n this._session = [];\n this._rerender = debounce(\n () => {\n if (this._model && this._session) {\n const printModel = preparePrintModel(this._model, this._options);\n\n const element =\n this._options &&\n React.createElement(Main, {\n model: printModel,\n session: {},\n });\n\n ReactDOM.render(element, this, () => {\n log('render complete - render math');\n renderMath(this);\n });\n } else {\n log('skip');\n }\n },\n 50,\n { leading: false, trailing: true },\n );\n }\n set options(o) {\n this._options = o;\n }\n\n set model(s) {\n this._model = s;\n this._rerender();\n }\n\n connectedCallback() {}\n}\n"],"file":"print.js"}
|
package/lib/session-updater.js
DELETED
|
@@ -1,35 +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.updateSessionValue = updateSessionValue;
|
|
9
|
-
|
|
10
|
-
var _concat = _interopRequireDefault(require("lodash/concat"));
|
|
11
|
-
|
|
12
|
-
var _uniq = _interopRequireDefault(require("lodash/uniq"));
|
|
13
|
-
|
|
14
|
-
var _without = _interopRequireDefault(require("lodash/without"));
|
|
15
|
-
|
|
16
|
-
function updateSessionValue(session, choiceMode, data) {
|
|
17
|
-
session.value = session.value || [];
|
|
18
|
-
|
|
19
|
-
if (choiceMode === 'checkbox') {
|
|
20
|
-
if (data.selected) {
|
|
21
|
-
session.value = (0, _uniq["default"])((0, _concat["default"])(session.value, [data.value]));
|
|
22
|
-
} else {
|
|
23
|
-
session.value = (0, _without["default"])(session.value, data.value);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
if (choiceMode === 'radio') {
|
|
28
|
-
if (data.selected) {
|
|
29
|
-
session.value = [data.value];
|
|
30
|
-
} else {
|
|
31
|
-
session.value = [];
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
//# sourceMappingURL=session-updater.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/session-updater.js"],"names":["updateSessionValue","session","choiceMode","data","value","selected"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AAEO,SAASA,kBAAT,CAA4BC,OAA5B,EAAqCC,UAArC,EAAiDC,IAAjD,EAAuD;AAC5DF,EAAAA,OAAO,CAACG,KAAR,GAAgBH,OAAO,CAACG,KAAR,IAAiB,EAAjC;;AACA,MAAIF,UAAU,KAAK,UAAnB,EAA+B;AAC7B,QAAIC,IAAI,CAACE,QAAT,EAAmB;AACjBJ,MAAAA,OAAO,CAACG,KAAR,GAAgB,sBAAK,wBAAOH,OAAO,CAACG,KAAf,EAAsB,CAACD,IAAI,CAACC,KAAN,CAAtB,CAAL,CAAhB;AACD,KAFD,MAEO;AACLH,MAAAA,OAAO,CAACG,KAAR,GAAgB,yBAAQH,OAAO,CAACG,KAAhB,EAAuBD,IAAI,CAACC,KAA5B,CAAhB;AACD;AACF;;AAED,MAAIF,UAAU,KAAK,OAAnB,EAA4B;AAC1B,QAAIC,IAAI,CAACE,QAAT,EAAmB;AACjBJ,MAAAA,OAAO,CAACG,KAAR,GAAgB,CAACD,IAAI,CAACC,KAAN,CAAhB;AACD,KAFD,MAEO;AACLH,MAAAA,OAAO,CAACG,KAAR,GAAgB,EAAhB;AACD;AACF;AACF","sourcesContent":["import concat from 'lodash/concat';\nimport uniq from 'lodash/uniq';\nimport without from 'lodash/without';\n\nexport function updateSessionValue(session, choiceMode, data) {\n session.value = session.value || [];\n if (choiceMode === 'checkbox') {\n if (data.selected) {\n session.value = uniq(concat(session.value, [data.value]));\n } else {\n session.value = without(session.value, data.value);\n }\n }\n\n if (choiceMode === 'radio') {\n if (data.selected) {\n session.value = [data.value];\n } else {\n session.value = [];\n }\n }\n}\n"],"file":"session-updater.js"}
|