@pie-element/graphing 3.5.3 → 3.5.4-next.1016

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.
Files changed (41) hide show
  1. package/CHANGELOG.md +163 -0
  2. package/configure/CHANGELOG.md +152 -0
  3. package/configure/lib/configure.js +108 -47
  4. package/configure/lib/configure.js.map +1 -1
  5. package/configure/lib/correct-response.js +287 -54
  6. package/configure/lib/correct-response.js.map +1 -1
  7. package/configure/lib/defaults.js +49 -7
  8. package/configure/lib/defaults.js.map +1 -1
  9. package/configure/lib/graphing-config.js +160 -184
  10. package/configure/lib/graphing-config.js.map +1 -1
  11. package/configure/lib/index.js +43 -18
  12. package/configure/lib/index.js.map +1 -1
  13. package/configure/lib/utils.js +94 -0
  14. package/configure/lib/utils.js.map +1 -0
  15. package/configure/package.json +4 -4
  16. package/controller/CHANGELOG.md +40 -0
  17. package/controller/lib/defaults.js +9 -1
  18. package/controller/lib/defaults.js.map +1 -1
  19. package/controller/lib/index.js +48 -23
  20. package/controller/lib/index.js.map +1 -1
  21. package/controller/lib/utils.js +8 -6
  22. package/controller/lib/utils.js.map +1 -1
  23. package/controller/package.json +1 -1
  24. package/docs/config-schema.json +282 -0
  25. package/docs/config-schema.json.md +213 -1
  26. package/docs/demo/generate.js +8 -1
  27. package/docs/pie-schema.json +228 -3
  28. package/docs/pie-schema.json.md +166 -2
  29. package/lib/index.js +4 -1
  30. package/lib/index.js.map +1 -1
  31. package/lib/main.js +15 -19
  32. package/lib/main.js.map +1 -1
  33. package/lib/utils.js +3 -1
  34. package/lib/utils.js.map +1 -1
  35. package/package.json +6 -6
  36. package/module/configure.js +0 -1260
  37. package/module/controller.js +0 -21893
  38. package/module/demo.js +0 -92
  39. package/module/element.js +0 -245
  40. package/module/index.html +0 -16
  41. package/module/manifest.json +0 -14
@@ -1,13 +1,15 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
-
5
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
4
 
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
7
  Object.defineProperty(exports, "__esModule", {
8
8
  value: true
9
9
  });
10
- exports["default"] = exports.CorrectResponse = exports.Tools = void 0;
10
+ exports["default"] = exports.Tools = exports.CorrectResponse = void 0;
11
+
12
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
13
 
12
14
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
15
 
@@ -35,11 +37,25 @@ var _styles = require("@material-ui/core/styles");
35
37
 
36
38
  var _graphing = require("@pie-lib/graphing");
37
39
 
40
+ var _configUi = require("@pie-lib/config-ui");
41
+
42
+ var _Delete = _interopRequireDefault(require("@material-ui/icons/Delete"));
43
+
38
44
  var _lodash = require("lodash");
39
45
 
46
+ var _core = require("@material-ui/core");
47
+
48
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
49
+
50
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
51
+
52
+ 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; }
53
+
54
+ 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; }
55
+
40
56
  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
57
 
42
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
58
+ 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
59
 
44
60
  var allTools = _graphing.tools.allTools;
45
61
 
@@ -49,19 +65,21 @@ var styles = function styles(theme) {
49
65
  flex: 1
50
66
  },
51
67
  graphingTools: {
52
- marginTop: theme.spacing.unit * 3,
53
68
  color: '#ababab'
54
69
  },
55
70
  availableTools: {
56
- marginTop: theme.spacing.unit * 3,
57
- marginBottom: theme.spacing.unit * 3,
71
+ marginTop: theme.spacing.unit,
58
72
  display: 'flex'
59
73
  },
60
74
  availableTool: {
61
75
  cursor: 'pointer',
62
76
  margin: theme.spacing.unit,
63
77
  padding: theme.spacing.unit,
64
- textTransform: 'capitalize'
78
+ border: '2px solid white',
79
+ textTransform: 'capitalize',
80
+ '&:hover': {
81
+ color: '#4d4d4d'
82
+ }
65
83
  },
66
84
  selectedTool: {
67
85
  background: '#d8d8d8',
@@ -70,31 +88,95 @@ var styles = function styles(theme) {
70
88
  container: {
71
89
  border: '2px solid #ababab',
72
90
  borderRadius: '4px',
73
- padding: "".concat(theme.spacing.unit * 2, "px ").concat(theme.spacing.unit * 4, "px"),
91
+ padding: "0 ".concat(theme.spacing.unit * 4, "px ").concat(theme.spacing.unit * 2, "px"),
74
92
  background: '#fafafa'
75
93
  },
76
94
  button: {
77
- marginTop: theme.spacing.unit * 3,
95
+ margin: "".concat(theme.spacing.unit * 3, "px 0"),
78
96
  cursor: 'pointer',
79
97
  background: '#eee',
80
- padding: theme.spacing.unit * 2,
98
+ padding: theme.spacing.unit * 1.5,
81
99
  width: 'fit-content',
82
- borderRadius: '4px'
100
+ borderRadius: '4px',
101
+ '&:hover': {
102
+ background: '#d8d8d8'
103
+ }
104
+ },
105
+ responseTitle: {
106
+ display: 'flex',
107
+ alignItems: 'center',
108
+ marginTop: '20px'
109
+ },
110
+ iconButton: {
111
+ marginLeft: '6px',
112
+ color: '#6d6d6d',
113
+ '&:hover': {
114
+ cursor: 'pointer',
115
+ color: '#000000'
116
+ }
117
+ },
118
+ name: {
119
+ margin: '5px 0'
120
+ },
121
+ subtitleText: {
122
+ marginTop: theme.spacing.unit * 1.5,
123
+ marginBottom: theme.spacing.unit
124
+ },
125
+ toolsHeader: {
126
+ display: 'flex',
127
+ alignItems: 'center',
128
+ justifyContent: 'space-between'
129
+ },
130
+ defaultTool: {
131
+ display: 'flex',
132
+ alignItems: 'center',
133
+ width: '300px'
134
+ },
135
+ defaultToolSelect: {
136
+ marginLeft: theme.spacing.unit,
137
+ textTransform: 'uppercase',
138
+ color: '#4d4d4d'
139
+ },
140
+ menuItem: {
141
+ textTransform: 'uppercase'
142
+ },
143
+ noDefaultTool: {
144
+ padding: theme.spacing.unit / 2
83
145
  }
84
146
  };
85
147
  };
86
148
 
87
149
  var Tools = function Tools(_ref) {
88
150
  var classes = _ref.classes,
151
+ defaultTool = _ref.defaultTool,
89
152
  toolbarTools = _ref.toolbarTools,
90
- toggleToolBarTool = _ref.toggleToolBarTool;
153
+ toggleToolBarTool = _ref.toggleToolBarTool,
154
+ onDefaultToolChange = _ref.onDefaultToolChange;
91
155
  // label has to be placed at the end of the list
92
156
  var allToolsNoLabel = (allTools || []).filter(function (tool) {
93
157
  return tool !== 'label';
94
158
  });
159
+ var toolbarToolsNoLabel = (toolbarTools || []).filter(function (tool) {
160
+ return tool !== 'label';
161
+ });
95
162
  return /*#__PURE__*/React.createElement("div", {
96
163
  className: classes.graphingTools
97
- }, "GRAPHING TOOLS", /*#__PURE__*/React.createElement("div", {
164
+ }, /*#__PURE__*/React.createElement("div", {
165
+ className: classes.toolsHeader
166
+ }, /*#__PURE__*/React.createElement("span", null, "GRAPHING TOOLS"), toolbarToolsNoLabel.length > 0 && /*#__PURE__*/React.createElement("div", {
167
+ className: classes.defaultTool
168
+ }, /*#__PURE__*/React.createElement("span", null, "Default graphing tool:"), /*#__PURE__*/React.createElement(_core.Select, {
169
+ className: classes.defaultToolSelect,
170
+ onChange: onDefaultToolChange,
171
+ value: defaultTool,
172
+ disableUnderline: true
173
+ }, toolbarToolsNoLabel.map(function (tool, index) {
174
+ return /*#__PURE__*/React.createElement(_core.MenuItem, {
175
+ key: index,
176
+ className: classes.menuItem,
177
+ value: tool
178
+ }, tool);
179
+ })))), /*#__PURE__*/React.createElement("div", {
98
180
  className: classes.availableTools
99
181
  }, [].concat((0, _toConsumableArray2["default"])(allToolsNoLabel), ['label']).map(function (tool) {
100
182
  var selected = toolbarTools.find(function (t) {
@@ -132,6 +214,18 @@ var CorrectResponse = /*#__PURE__*/function (_React$Component) {
132
214
  }
133
215
 
134
216
  _this = _super.call.apply(_super, [this].concat(args));
217
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "state", {
218
+ dialog: {
219
+ open: false
220
+ }
221
+ });
222
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleAlertDialog", function (open, callback) {
223
+ return _this.setState({
224
+ dialog: {
225
+ open: open
226
+ }
227
+ }, callback);
228
+ });
135
229
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeMarks", function (key, marks) {
136
230
  var _this$props = _this.props,
137
231
  model = _this$props.model,
@@ -139,6 +233,21 @@ var CorrectResponse = /*#__PURE__*/function (_React$Component) {
139
233
  (0, _lodash.set)(model, "answers.".concat(key, ".marks"), marks);
140
234
  onChange(model);
141
235
  });
236
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "filterMarks", function (tool) {
237
+ var answers = _this.props.model.answers;
238
+ return Object.entries(answers || {}).reduce(function (object, _ref2) {
239
+ var _ref3 = (0, _slicedToArray2["default"])(_ref2, 2),
240
+ key = _ref3[0],
241
+ answer = _ref3[1];
242
+
243
+ object[key] = _objectSpread(_objectSpread({}, answer), {}, {
244
+ marks: (answer.marks || []).filter(function (mark) {
245
+ return mark.type !== tool;
246
+ })
247
+ });
248
+ return object;
249
+ }, {});
250
+ });
142
251
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeToolbarTools", function (toolbarTools) {
143
252
  var _this$props2 = _this.props,
144
253
  model = _this$props2.model,
@@ -146,28 +255,84 @@ var CorrectResponse = /*#__PURE__*/function (_React$Component) {
146
255
  model.toolbarTools = toolbarTools;
147
256
  onChange(model);
148
257
  });
258
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "updateModel", function (props) {
259
+ var _this$props3 = _this.props,
260
+ model = _this$props3.model,
261
+ onChange = _this$props3.onChange;
262
+ onChange(_objectSpread(_objectSpread({}, model), props));
263
+ });
149
264
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "toggleToolBarTool", function (tool) {
150
- var toolbarTools = _this.props.model.toolbarTools;
265
+ var _this$props$model = _this.props.model,
266
+ defaultTool = _this$props$model.defaultTool,
267
+ toolbarTools = _this$props$model.toolbarTools,
268
+ _this$props$model$ans = _this$props$model.answers,
269
+ answers = _this$props$model$ans === void 0 ? {} : _this$props$model$ans;
270
+ var updatedToolbarTools = (0, _toConsumableArray2["default"])(toolbarTools);
271
+ var newDefaultTool = defaultTool;
151
272
  var index = toolbarTools.findIndex(function (t) {
152
273
  return tool === t;
153
274
  });
154
275
 
155
276
  if (index >= 0) {
156
- var update = (0, _toConsumableArray2["default"])(toolbarTools);
157
- update.splice(index, 1);
158
-
159
- _this.changeToolbarTools(update);
277
+ var updatedAnswers = _this.filterMarks(tool);
278
+
279
+ updatedToolbarTools.splice(index, 1);
280
+
281
+ if (tool === defaultTool) {
282
+ var toolbarToolsNoLabel = (updatedToolbarTools || []).filter(function (tool) {
283
+ return tool !== 'label';
284
+ });
285
+ newDefaultTool = toolbarToolsNoLabel.length && toolbarToolsNoLabel[0] || '';
286
+ }
287
+
288
+ if (!(0, _lodash.isEqual)(answers, updatedAnswers)) {
289
+ _this.setState({
290
+ dialog: {
291
+ open: true,
292
+ title: 'Warning',
293
+ text: "Correct answer includes one or more ".concat(tool, " objects and all of them will be deleted."),
294
+ onConfirm: function onConfirm() {
295
+ return _this.handleAlertDialog(false, _this.updateModel({
296
+ toolbarTools: updatedToolbarTools,
297
+ answers: updatedAnswers,
298
+ defaultTool: newDefaultTool
299
+ }));
300
+ },
301
+ onClose: function onClose() {
302
+ return _this.handleAlertDialog(false);
303
+ }
304
+ }
305
+ });
306
+
307
+ return;
308
+ }
160
309
  } else {
161
- _this.changeToolbarTools([].concat((0, _toConsumableArray2["default"])(toolbarTools), [tool]));
310
+ updatedToolbarTools.push(tool);
311
+
312
+ if (defaultTool === '' && tool !== 'label') {
313
+ newDefaultTool = tool;
314
+ }
162
315
  }
316
+
317
+ _this.updateModel({
318
+ toolbarTools: updatedToolbarTools,
319
+ defaultTool: newDefaultTool
320
+ });
321
+ });
322
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onDefaultToolChange", function (event) {
323
+ var value = event.target.value;
324
+
325
+ _this.updateModel({
326
+ defaultTool: value
327
+ });
163
328
  });
164
329
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "addAlternateResponse", function () {
165
- var _this$props3 = _this.props,
166
- model = _this$props3.model,
167
- onChange = _this$props3.onChange;
330
+ var _this$props4 = _this.props,
331
+ model = _this$props4.model,
332
+ onChange = _this$props4.onChange;
168
333
 
169
- var _ref2 = model || {},
170
- answers = _ref2.answers;
334
+ var _ref4 = model || {},
335
+ answers = _ref4.answers;
171
336
 
172
337
  var answersKeys = Object.keys(answers || {});
173
338
  (0, _lodash.set)(model, "answers.".concat("alternate".concat(answersKeys.length)), {
@@ -176,6 +341,44 @@ var CorrectResponse = /*#__PURE__*/function (_React$Component) {
176
341
  });
177
342
  onChange(model);
178
343
  });
344
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "deleteAlternateResponse", function (key, answer) {
345
+ var _this$props5 = _this.props,
346
+ model = _this$props5.model,
347
+ onChange = _this$props5.onChange;
348
+
349
+ var _ref5 = model || {},
350
+ answers = _ref5.answers;
351
+
352
+ var _ref6 = answer || {},
353
+ _ref6$marks = _ref6.marks,
354
+ marks = _ref6$marks === void 0 ? [] : _ref6$marks,
355
+ name = _ref6.name;
356
+
357
+ var deleteAnswer = function deleteAnswer() {
358
+ delete answers[key];
359
+ onChange(model);
360
+ };
361
+
362
+ if (marks.length) {
363
+ _this.setState({
364
+ dialog: {
365
+ open: true,
366
+ title: 'Warning',
367
+ text: "".concat(name, " includes one or more shapes and the entire response will be deleted."),
368
+ onConfirm: function onConfirm() {
369
+ return _this.handleAlertDialog(false, deleteAnswer);
370
+ },
371
+ onClose: function onClose() {
372
+ return _this.handleAlertDialog(false);
373
+ }
374
+ }
375
+ });
376
+
377
+ return;
378
+ }
379
+
380
+ deleteAnswer();
381
+ });
179
382
  return _this;
180
383
  }
181
384
 
@@ -184,48 +387,71 @@ var CorrectResponse = /*#__PURE__*/function (_React$Component) {
184
387
  value: function render() {
185
388
  var _this2 = this;
186
389
 
187
- var _this$props4 = this.props,
188
- classes = _this$props4.classes,
189
- model = _this$props4.model;
190
-
191
- var _ref3 = model || {},
192
- graph = _ref3.graph;
193
-
194
- var _ref4 = model || {},
195
- answers = _ref4.answers,
196
- arrows = _ref4.arrows,
197
- backgroundMarks = _ref4.backgroundMarks,
198
- domain = _ref4.domain,
199
- labels = _ref4.labels,
200
- range = _ref4.range,
201
- title = _ref4.title,
202
- toolbarTools = _ref4.toolbarTools;
203
-
204
- graph = graph || {};
205
- var answersKeys = Object.keys(answers || {});
206
- return /*#__PURE__*/React.createElement("div", null, "Define Correct Response", /*#__PURE__*/React.createElement(Tools, {
390
+ var _this$props6 = this.props,
391
+ classes = _this$props6.classes,
392
+ model = _this$props6.model;
393
+ var dialog = this.state.dialog;
394
+
395
+ var _ref7 = model || {},
396
+ _ref7$answers = _ref7.answers,
397
+ answers = _ref7$answers === void 0 ? {} : _ref7$answers,
398
+ arrows = _ref7.arrows,
399
+ backgroundMarks = _ref7.backgroundMarks,
400
+ coordinatesOnHover = _ref7.coordinatesOnHover,
401
+ defaultTool = _ref7.defaultTool,
402
+ domain = _ref7.domain,
403
+ _ref7$graph = _ref7.graph,
404
+ graph = _ref7$graph === void 0 ? {} : _ref7$graph,
405
+ labels = _ref7.labels,
406
+ range = _ref7.range,
407
+ title = _ref7.title,
408
+ toolbarTools = _ref7.toolbarTools;
409
+
410
+ return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(_core.Typography, {
411
+ component: "div",
412
+ variant: "subheading"
413
+ }, /*#__PURE__*/React.createElement("span", null, "Define Tool Set and Correct Response")), /*#__PURE__*/React.createElement(_core.Typography, {
414
+ component: "div",
415
+ variant: "body1",
416
+ className: classes.subtitleText
417
+ }, /*#__PURE__*/React.createElement("span", null, "Use this interface to choose which graphing tools students will be able to use, and to define the correct answer")), /*#__PURE__*/React.createElement(Tools, {
207
418
  classes: classes,
419
+ defaultTool: defaultTool,
420
+ onDefaultToolChange: this.onDefaultToolChange,
208
421
  toggleToolBarTool: this.toggleToolBarTool,
209
422
  toolbarTools: toolbarTools
210
- }), /*#__PURE__*/React.createElement("div", {
211
- className: classes.container
212
- }, answersKeys.map(function (mark) {
213
- var _ref5 = answers[mark] || {},
214
- marks = _ref5.marks,
215
- name = _ref5.name;
423
+ }), Object.entries(answers || {}).map(function (_ref8) {
424
+ var _ref9 = (0, _slicedToArray2["default"])(_ref8, 2),
425
+ key = _ref9[0],
426
+ answer = _ref9[1];
427
+
428
+ var _ref10 = answer || {},
429
+ _ref10$marks = _ref10.marks,
430
+ marks = _ref10$marks === void 0 ? [] : _ref10$marks,
431
+ name = _ref10.name;
216
432
 
217
433
  return /*#__PURE__*/React.createElement("div", {
218
434
  key: "correct-response-graph-".concat(name)
219
- }, /*#__PURE__*/React.createElement("p", null, name), /*#__PURE__*/React.createElement(_graphing.GraphContainer, {
435
+ }, /*#__PURE__*/React.createElement("div", {
436
+ className: classes.responseTitle
437
+ }, /*#__PURE__*/React.createElement("p", {
438
+ className: classes.name
439
+ }, name), key !== 'correctAnswer' && /*#__PURE__*/React.createElement(_Delete["default"], {
440
+ className: classes.iconButton,
441
+ onClick: function onClick() {
442
+ return _this2.deleteAlternateResponse(key, answer);
443
+ }
444
+ })), /*#__PURE__*/React.createElement(_graphing.GraphContainer, {
220
445
  axesSettings: {
221
446
  includeArrows: arrows
222
447
  },
223
448
  backgroundMarks: backgroundMarks,
449
+ coordinatesOnHover: coordinatesOnHover,
224
450
  domain: domain,
225
451
  labels: labels,
226
452
  marks: marks,
227
453
  onChangeMarks: function onChangeMarks(newMarks) {
228
- return _this2.changeMarks(mark, newMarks);
454
+ return _this2.changeMarks(key, newMarks);
229
455
  },
230
456
  range: range,
231
457
  size: {
@@ -238,7 +464,13 @@ var CorrectResponse = /*#__PURE__*/function (_React$Component) {
238
464
  }), /*#__PURE__*/React.createElement("div", {
239
465
  className: classes.button,
240
466
  onClick: this.addAlternateResponse
241
- }, "ADD ALTERNATE")));
467
+ }, "ADD ALTERNATE"), /*#__PURE__*/React.createElement(_configUi.AlertDialog, {
468
+ open: dialog.open,
469
+ title: dialog.title,
470
+ text: dialog.text,
471
+ onClose: dialog.onClose,
472
+ onConfirm: dialog.onConfirm
473
+ }));
242
474
  }
243
475
  }]);
244
476
  return CorrectResponse;
@@ -251,6 +483,7 @@ exports.CorrectResponse = CorrectResponse;
251
483
  onChange: _propTypes["default"].func.isRequired,
252
484
  toolbarTools: _propTypes["default"].arrayOf(_propTypes["default"].String)
253
485
  });
486
+ ;
254
487
 
255
488
  var _default = (0, _styles.withStyles)(styles)(CorrectResponse);
256
489
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/correct-response.jsx"],"names":["allTools","tools","styles","theme","column","flex","graphingTools","marginTop","spacing","unit","color","availableTools","marginBottom","display","availableTool","cursor","margin","padding","textTransform","selectedTool","background","border","container","borderRadius","button","width","Tools","classes","toolbarTools","toggleToolBarTool","allToolsNoLabel","filter","tool","map","selected","find","t","toUpperCase","propTypes","PropTypes","object","isRequired","arrayOf","string","func","CorrectResponse","key","marks","props","model","onChange","index","findIndex","update","splice","changeToolbarTools","answers","answersKeys","Object","keys","length","name","graph","arrows","backgroundMarks","domain","labels","range","title","mark","includeArrows","newMarks","changeMarks","height","addAlternateResponse","React","Component","String"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport classnames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport { GraphContainer as Graph, tools } from '@pie-lib/graphing';\n\nconst { allTools } = tools;\n\nimport { set } from 'lodash';\n\nconst styles = theme => ({\n column: {\n flex: 1\n },\n graphingTools: {\n marginTop: theme.spacing.unit * 3,\n color: '#ababab'\n },\n availableTools: {\n marginTop: theme.spacing.unit * 3,\n marginBottom: theme.spacing.unit * 3,\n display: 'flex'\n },\n availableTool: {\n cursor: 'pointer',\n margin: theme.spacing.unit,\n padding: theme.spacing.unit,\n textTransform: 'capitalize'\n },\n selectedTool: {\n background: '#d8d8d8',\n border: '2px solid #ababab'\n },\n container: {\n border: '2px solid #ababab',\n borderRadius: '4px',\n padding: `${theme.spacing.unit * 2}px ${theme.spacing.unit * 4}px`,\n background: '#fafafa'\n },\n button: {\n marginTop: theme.spacing.unit * 3,\n cursor: 'pointer',\n background: '#eee',\n padding: theme.spacing.unit * 2,\n width: 'fit-content',\n borderRadius: '4px'\n }\n});\n\nexport const Tools = ({ classes, toolbarTools, toggleToolBarTool }) => {\n // label has to be placed at the end of the list\n const allToolsNoLabel = (allTools || []).filter(tool => tool !== 'label');\n\n return (\n <div className={classes.graphingTools}>\n GRAPHING TOOLS\n\n <div className={classes.availableTools}>\n {([...allToolsNoLabel, 'label']).map(tool => {\n const selected = toolbarTools.find(t => t === tool);\n\n return (\n <div\n key={tool}\n className={classnames(\n classes.availableTool,\n selected && classes.selectedTool\n )}\n onClick={() => toggleToolBarTool(tool)}\n >\n {tool.toUpperCase()}\n </div>\n );\n })}\n </div>\n </div>\n );\n};\n\nTools.propTypes = {\n classes: PropTypes.object.isRequired,\n toolbarTools: PropTypes.arrayOf(PropTypes.string),\n toggleToolBarTool: PropTypes.func\n};\n\nexport class CorrectResponse extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n model: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n toolbarTools: PropTypes.arrayOf(PropTypes.String)\n };\n\n changeMarks = (key, marks) => {\n const { model, onChange } = this.props;\n\n set(model, `answers.${key}.marks`, marks);\n onChange(model);\n };\n\n changeToolbarTools = toolbarTools => {\n const { model, onChange } = this.props;\n model.toolbarTools = toolbarTools;\n\n onChange(model);\n };\n\n toggleToolBarTool = tool => {\n const { toolbarTools } = this.props.model;\n\n const index = toolbarTools.findIndex(t => tool === t);\n\n if (index >= 0) {\n const update = [...toolbarTools];\n update.splice(index, 1);\n this.changeToolbarTools(update);\n } else {\n this.changeToolbarTools([...toolbarTools, tool]);\n }\n };\n\n addAlternateResponse = () => {\n const { model, onChange } = this.props;\n const { answers } = model || {};\n const answersKeys = Object.keys(answers || {});\n\n set(\n model,\n `answers.${`alternate${answersKeys.length}`}`,\n { name: `Alternate ${answersKeys.length}`, marks: [] }\n );\n onChange(model);\n };\n\n render() {\n const { classes, model } = this.props;\n let { graph } = model || {};\n const { answers, arrows, backgroundMarks, domain, labels, range, title, toolbarTools } = model || {};\n graph = graph || {};\n\n const answersKeys = Object.keys(answers || {});\n\n return (\n <div>\n Define Correct Response\n <Tools\n classes={classes}\n toggleToolBarTool={this.toggleToolBarTool}\n toolbarTools={toolbarTools}\n />\n\n <div className={classes.container}>\n {answersKeys.map(mark => {\n const { marks, name } = answers[mark] || {};\n\n return (\n <div key={`correct-response-graph-${name}`}>\n <p>{name}</p>\n\n <Graph\n axesSettings={{ includeArrows: arrows }}\n backgroundMarks={backgroundMarks}\n domain={domain}\n labels={labels}\n marks={marks}\n onChangeMarks={newMarks => this.changeMarks(mark, newMarks)}\n range={range}\n size={{ width: graph.width, height: graph.height }}\n title={title}\n toolbarTools={toolbarTools}\n />\n </div>\n )\n })}\n\n <div className={classes.button} onClick={this.addAlternateResponse}>\n ADD ALTERNATE\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default withStyles(styles)(CorrectResponse);\n"],"file":"correct-response.js"}
1
+ {"version":3,"sources":["../src/correct-response.jsx"],"names":["allTools","tools","styles","theme","column","flex","graphingTools","color","availableTools","marginTop","spacing","unit","display","availableTool","cursor","margin","padding","border","textTransform","selectedTool","background","container","borderRadius","button","width","responseTitle","alignItems","iconButton","marginLeft","name","subtitleText","marginBottom","toolsHeader","justifyContent","defaultTool","defaultToolSelect","menuItem","noDefaultTool","Tools","classes","toolbarTools","toggleToolBarTool","onDefaultToolChange","allToolsNoLabel","filter","tool","toolbarToolsNoLabel","length","map","index","selected","find","t","toUpperCase","propTypes","PropTypes","object","isRequired","arrayOf","string","func","CorrectResponse","dialog","open","callback","setState","key","marks","props","model","onChange","answers","Object","entries","reduce","answer","mark","type","updatedToolbarTools","newDefaultTool","findIndex","updatedAnswers","filterMarks","splice","title","text","onConfirm","handleAlertDialog","updateModel","onClose","push","event","value","target","answersKeys","keys","deleteAnswer","state","arrows","backgroundMarks","coordinatesOnHover","domain","graph","labels","range","deleteAlternateResponse","includeArrows","newMarks","changeMarks","height","addAlternateResponse","React","Component","String"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport classnames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport { GraphContainer as Graph, tools } from '@pie-lib/graphing';\nimport { AlertDialog } from '@pie-lib/config-ui';\nimport Delete from '@material-ui/icons/Delete';\nimport { set, isEqual } from 'lodash';\nimport { MenuItem, Select, Typography } from '@material-ui/core';\n\nconst { allTools } = tools;\n\nconst styles = theme => ({\n column: {\n flex: 1\n },\n graphingTools: {\n color: '#ababab'\n },\n availableTools: {\n marginTop: theme.spacing.unit,\n display: 'flex'\n },\n availableTool: {\n cursor: 'pointer',\n margin: theme.spacing.unit,\n padding: theme.spacing.unit,\n border: '2px solid white',\n textTransform: 'capitalize',\n '&:hover': {\n color: '#4d4d4d'\n }\n },\n selectedTool: {\n background: '#d8d8d8',\n border: '2px solid #ababab'\n },\n container: {\n border: '2px solid #ababab',\n borderRadius: '4px',\n padding: `0 ${theme.spacing.unit * 4}px ${theme.spacing.unit * 2}px`,\n background: '#fafafa'\n },\n button: {\n margin: `${theme.spacing.unit * 3}px 0`,\n cursor: 'pointer',\n background: '#eee',\n padding: theme.spacing.unit * 1.5,\n width: 'fit-content',\n borderRadius: '4px',\n '&:hover': {\n background: '#d8d8d8'\n }\n },\n responseTitle: {\n display: 'flex',\n alignItems: 'center',\n marginTop: '20px'\n },\n iconButton: {\n marginLeft: '6px',\n color: '#6d6d6d',\n '&:hover': {\n cursor: 'pointer',\n color: '#000000'\n }\n },\n name: {\n margin: '5px 0'\n },\n subtitleText: {\n marginTop: theme.spacing.unit * 1.5,\n marginBottom: theme.spacing.unit\n },\n toolsHeader: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between'\n },\n defaultTool: {\n display: 'flex',\n alignItems: 'center',\n width: '300px'\n },\n defaultToolSelect: {\n marginLeft: theme.spacing.unit,\n textTransform: 'uppercase',\n color: '#4d4d4d'\n },\n menuItem: {\n textTransform: 'uppercase',\n },\n noDefaultTool: {\n padding: theme.spacing.unit / 2\n }\n});\n\nexport const Tools = ({ classes, defaultTool, toolbarTools, toggleToolBarTool, onDefaultToolChange }) => {\n // label has to be placed at the end of the list\n const allToolsNoLabel = (allTools || []).filter(tool => tool !== 'label');\n const toolbarToolsNoLabel = (toolbarTools || []).filter(tool => tool !== 'label');\n\n return (\n <div className={classes.graphingTools}>\n <div className={classes.toolsHeader}>\n <span>GRAPHING TOOLS</span>\n {toolbarToolsNoLabel.length > 0 && (\n <div className={classes.defaultTool}>\n <span>Default graphing tool:</span>\n <Select\n className={classes.defaultToolSelect}\n onChange={onDefaultToolChange}\n value={defaultTool}\n disableUnderline\n >\n {toolbarToolsNoLabel.map((tool, index) =>\n <MenuItem key={index} className={classes.menuItem} value={tool}>{tool}</MenuItem>)}\n </Select>\n </div>\n )}\n </div>\n <div className={classes.availableTools}>\n {([...allToolsNoLabel, 'label']).map(tool => {\n const selected = toolbarTools.find(t => t === tool);\n\n return (\n <div\n key={tool}\n className={classnames(\n classes.availableTool,\n selected && classes.selectedTool\n )}\n onClick={() => toggleToolBarTool(tool)}\n >\n {tool.toUpperCase()}\n </div>\n );\n })}\n </div>\n </div>\n );\n};\n\nTools.propTypes = {\n classes: PropTypes.object.isRequired,\n toolbarTools: PropTypes.arrayOf(PropTypes.string),\n toggleToolBarTool: PropTypes.func\n};\n\nexport class CorrectResponse extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n model: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n toolbarTools: PropTypes.arrayOf(PropTypes.String)\n };\n\n state = {\n dialog: {\n open: false\n }\n };\n\n handleAlertDialog = (open, callback) =>\n this.setState({\n dialog: { open }\n }, callback);\n\n changeMarks = (key, marks) => {\n const { model, onChange } = this.props;\n\n set(model, `answers.${key}.marks`, marks);\n onChange(model);\n };\n\n filterMarks = (tool) => {\n const { model: { answers }} = this.props;\n\n return Object.entries(answers || {}).reduce((object, [key, answer]) => {\n object[key] = {\n ...answer,\n marks: (answer.marks || []).filter(mark => mark.type !== tool)\n };\n\n return object;\n }, {});\n };\n\n changeToolbarTools = toolbarTools => {\n const { model, onChange } = this.props;\n model.toolbarTools = toolbarTools;\n\n onChange(model);\n };\n\n updateModel = props => {\n const { model, onChange } = this.props;\n\n onChange({\n ...model,\n ...props\n });\n };\n\n toggleToolBarTool = tool => {\n const { model: { defaultTool, toolbarTools, answers = {}}} = this.props;\n const updatedToolbarTools = [ ...toolbarTools ];\n let newDefaultTool = defaultTool;\n\n const index = toolbarTools.findIndex(t => tool === t);\n\n if (index >= 0) {\n const updatedAnswers = this.filterMarks(tool);\n updatedToolbarTools.splice(index, 1);\n\n if (tool === defaultTool) {\n const toolbarToolsNoLabel = (updatedToolbarTools || []).filter(tool => tool !== 'label');\n newDefaultTool = toolbarToolsNoLabel.length && toolbarToolsNoLabel[0] || '';\n }\n\n if (!isEqual(answers, updatedAnswers)) {\n this.setState({\n dialog: {\n open: true,\n title: 'Warning',\n text: `Correct answer includes one or more ${tool} objects and all of them will be deleted.`,\n onConfirm: () => this.handleAlertDialog(\n false, this.updateModel({\n toolbarTools: updatedToolbarTools,\n answers: updatedAnswers,\n defaultTool: newDefaultTool\n })),\n onClose: () => this.handleAlertDialog(false)\n }\n });\n\n return;\n }\n } else {\n updatedToolbarTools.push(tool);\n\n if (defaultTool === '' && tool !== 'label') {\n newDefaultTool = tool;\n }\n }\n\n this.updateModel({\n toolbarTools: updatedToolbarTools,\n defaultTool: newDefaultTool\n });\n };\n\n onDefaultToolChange = event => {\n const { value } = event.target;\n\n this.updateModel( { defaultTool: value });\n }\n\n addAlternateResponse = () => {\n const { model, onChange } = this.props;\n const { answers } = model || {};\n const answersKeys = Object.keys(answers || {});\n\n set(\n model,\n `answers.${`alternate${answersKeys.length}`}`,\n { name: `Alternate ${answersKeys.length}`, marks: [] }\n );\n onChange(model);\n };\n\n deleteAlternateResponse = (key, answer) => {\n const { model, onChange } = this.props;\n const { answers } = model || {};\n const { marks = [], name } = answer || {};\n\n const deleteAnswer = () => {\n delete answers[key];\n onChange(model);\n };\n\n if (marks.length) {\n this.setState({\n dialog: {\n open: true,\n title: 'Warning',\n text: `${name} includes one or more shapes and the entire response will be deleted.`,\n onConfirm: () => this.handleAlertDialog(false, deleteAnswer),\n onClose: () => this.handleAlertDialog(false)\n }\n });\n\n return;\n }\n\n deleteAnswer();\n };\n\n render() {\n const { classes, model } = this.props;\n const { dialog } = this.state;\n const {\n answers = {},\n arrows,\n backgroundMarks,\n coordinatesOnHover,\n defaultTool,\n domain,\n graph = {},\n labels,\n range,\n title,\n toolbarTools\n } = model || {};\n\n return (\n <div>\n <Typography component=\"div\" variant=\"subheading\">\n <span>Define Tool Set and Correct Response</span>\n </Typography>\n\n <Typography component=\"div\" variant=\"body1\" className={classes.subtitleText}>\n <span>Use this interface to choose which graphing tools students will be able to use, and to define the correct answer</span>\n </Typography>\n\n <Tools\n classes={classes}\n defaultTool={defaultTool}\n onDefaultToolChange={this.onDefaultToolChange}\n toggleToolBarTool={this.toggleToolBarTool}\n toolbarTools={toolbarTools}\n />\n\n {Object.entries(answers || {}).map(([key, answer]) => {\n const { marks = [], name } = answer || {};\n\n return (\n <div key={`correct-response-graph-${name}`}>\n <div className={classes.responseTitle}>\n <p className={classes.name}>{name}</p>\n {key !== 'correctAnswer' &&\n <Delete\n className={classes.iconButton}\n onClick={() => this.deleteAlternateResponse(key, answer)}\n />}\n </div>\n\n <Graph\n axesSettings={{ includeArrows: arrows }}\n backgroundMarks={backgroundMarks}\n coordinatesOnHover={coordinatesOnHover}\n domain={domain}\n labels={labels}\n marks={marks}\n onChangeMarks={newMarks => this.changeMarks(key, newMarks)}\n range={range}\n size={{width: graph.width, height: graph.height}}\n title={title}\n toolbarTools={toolbarTools}\n />\n </div>\n )\n })}\n\n <div className={classes.button} onClick={this.addAlternateResponse}>\n ADD ALTERNATE\n </div>\n\n <AlertDialog\n open={dialog.open}\n title={dialog.title}\n text={dialog.text}\n onClose={dialog.onClose}\n onConfirm={dialog.onConfirm}\n />\n </div>\n );\n }\n};\n\nexport default withStyles(styles)(CorrectResponse);\n"],"file":"correct-response.js"}
@@ -9,15 +9,15 @@ var _graphing = require("@pie-lib/graphing");
9
9
 
10
10
  var _tools$allTools = _graphing.tools.allTools,
11
11
  allTools = _tools$allTools === void 0 ? [] : _tools$allTools;
12
- /**
13
- * NOTE: There's no functionality described for padding
14
- * so there's no implementation (they are only added in model)
15
- */
16
-
17
12
  var _default = {
18
13
  model: {
19
14
  answers: {},
20
- arrows: true,
15
+ arrows: {
16
+ left: true,
17
+ right: true,
18
+ up: true,
19
+ down: true
20
+ },
21
21
  backgroundMarks: [],
22
22
  domain: {
23
23
  min: -5,
@@ -30,6 +30,7 @@ var _default = {
30
30
  width: 500,
31
31
  height: 500
32
32
  },
33
+ includeAxes: true,
33
34
  labels: {},
34
35
  padding: true,
35
36
  prompt: '',
@@ -41,8 +42,10 @@ var _default = {
41
42
  axisLabel: 'y'
42
43
  },
43
44
  rationale: '',
45
+ standardGrid: false,
44
46
  title: '',
45
47
  toolbarTools: allTools,
48
+ coordinatesOnHover: false,
46
49
  promptEnabled: true,
47
50
  rationaleEnabled: true,
48
51
  teacherInstructionsEnabled: true,
@@ -55,8 +58,28 @@ var _default = {
55
58
  enabled: false
56
59
  },
57
60
  arrows: {
61
+ settings: true,
62
+ label: 'Include Arrows',
63
+ left: {
64
+ label: 'left'
65
+ },
66
+ right: {
67
+ label: 'right'
68
+ },
69
+ up: {
70
+ label: 'up'
71
+ },
72
+ down: {
73
+ label: 'down'
74
+ }
75
+ },
76
+ graphDimensions: {
58
77
  settings: false,
59
- label: 'Include arrows'
78
+ label: 'Graph Dimensions',
79
+ enabled: true,
80
+ min: 150,
81
+ max: 800,
82
+ step: 20
60
83
  },
61
84
  padding: {
62
85
  settings: false,
@@ -91,6 +114,25 @@ var _default = {
91
114
  settings: false,
92
115
  label: 'Graph Title',
93
116
  enabled: true
117
+ },
118
+ spellCheck: {
119
+ label: 'Spellcheck',
120
+ settings: false,
121
+ enabled: true
122
+ },
123
+ coordinatesOnHover: {
124
+ settings: true,
125
+ label: 'Coordinates on Hover'
126
+ },
127
+ maxImageWidth: {
128
+ teacherInstructions: 300,
129
+ prompt: 300,
130
+ rationale: 300
131
+ },
132
+ maxImageHeight: {
133
+ teacherInstructions: 300,
134
+ prompt: 300,
135
+ rationale: 300
94
136
  }
95
137
  }
96
138
  };