@pie-element/math-inline 5.9.9 → 5.9.12

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.
@@ -1,1473 +0,0 @@
1
- import {_dll_react, _dll_prop_types, _dll_material_ui__core, _dll_material_ui__core_styles, _dll_classnames, _dll_lodash, _dll_debug, _dll_react_dom} from "../../../@pie-lib/shared-module@^1.4.15/module/index.js";
2
- import {_dll_pie_lib__config_ui} from "../../../@pie-lib/config-module@^1.2.2/module/index.js";
3
- import {_dll_pie_lib__editable_html} from "../../../@pie-lib/editable-html-module@^1.5.2/module/index.js";
4
- import {_dll_pie_lib__math_toolbar, _dll_pie_framework__mathquill} from "../../../@pie-lib/math-edit-module@^1.2.2/module/index.js";
5
- const React$3 = _dll_react;
6
- const PropTypes$2 = _dll_prop_types;
7
- const {Card: Card} = _dll_material_ui__core;
8
- const {CardContent: CardContent} = _dll_material_ui__core;
9
- const {Button: Button} = _dll_material_ui__core;
10
- const {FormControlLabel: FormControlLabel} = _dll_material_ui__core;
11
- const {Typography: Typography} = _dll_material_ui__core;
12
- const {InputLabel: InputLabel$1} = _dll_material_ui__core;
13
- const {Checkbox: Checkbox} = _dll_material_ui__core;
14
- const {Select: Select$1} = _dll_material_ui__core;
15
- const {MenuItem: MenuItem$1} = _dll_material_ui__core;
16
- const {withStyles: withStyles$2} = _dll_material_ui__core_styles;
17
- const {InputContainer: InputContainer$2} = _dll_pie_lib__config_ui;
18
- const {MathToolbar: MathToolbar$1} = _dll_pie_lib__math_toolbar;
19
- const _jsxFileName$2 = "/home/circleci/repo/packages/math-inline/configure/src/response.jsx";
20
- const styles$2 = theme => ({
21
- responseContainer: {
22
- marginTop: theme.spacing.unit * 2,
23
- width: '100%',
24
- border: '1px solid darkgray',
25
- display: 'flex',
26
- flexDirection: 'column',
27
- justifyContent: 'space-between'
28
- },
29
- cardContent: {
30
- paddingBottom: `${theme.spacing.unit}px !important`
31
- },
32
- title: {
33
- fontWeight: 700,
34
- fontSize: '1.2rem',
35
- flex: 3
36
- },
37
- selectContainer: {
38
- flex: 2
39
- },
40
- inputContainer: {
41
- marginTop: theme.spacing.unit
42
- },
43
- titleBar: {
44
- display: 'flex',
45
- alignItems: 'center',
46
- justifyContent: 'space-between'
47
- },
48
- responseEditor: {
49
- display: 'flex',
50
- alignItems: 'center',
51
- justifyContent: 'center',
52
- width: '100%',
53
- minWidth: '500px',
54
- maxWidth: '900px',
55
- height: 'auto',
56
- minHeight: '40px'
57
- },
58
- mathToolbar: {
59
- width: '100%'
60
- },
61
- configPanel: {
62
- display: 'flex',
63
- justifyContent: 'space-between',
64
- alignItems: 'center'
65
- },
66
- alternateButton: {
67
- border: '1px solid lightgrey'
68
- },
69
- removeAlternateButton: {
70
- marginLeft: theme.spacing.unit * 2,
71
- border: '1px solid lightgrey',
72
- color: 'gray',
73
- fontSize: '0.8rem'
74
- },
75
- checkboxContainer: {
76
- marginTop: theme.spacing.unit * 2,
77
- display: 'flex',
78
- flexDirection: 'column',
79
- alignItems: 'center'
80
- },
81
- configLabel: {
82
- marginRight: 'auto'
83
- }
84
- });
85
- class Response extends React$3.Component {
86
- static __initStatic() {
87
- this.propTypes = {
88
- classes: PropTypes$2.object.isRequired,
89
- defaultResponse: PropTypes$2.bool,
90
- mode: PropTypes$2.oneOfType([PropTypes$2.string, PropTypes$2.number]),
91
- index: PropTypes$2.number,
92
- onResponseChange: PropTypes$2.func.isRequired,
93
- response: PropTypes$2.object.isRequired,
94
- cIgnoreOrder: PropTypes$2.object.isRequired,
95
- cAllowTrailingZeros: PropTypes$2.object.isRequired
96
- };
97
- }
98
- static __initStatic2() {
99
- this.defaultProps = {
100
- defaultResponse: false,
101
- mode: 'miscellaneous'
102
- };
103
- }
104
- constructor(props) {
105
- super(props);
106
- Response.prototype.__init.call(this);
107
- Response.prototype.__init2.call(this);
108
- Response.prototype.__init3.call(this);
109
- Response.prototype.__init4.call(this);
110
- Response.prototype.__init5.call(this);
111
- Response.prototype.__init6.call(this);
112
- Response.prototype.__init7.call(this);
113
- Response.prototype.__init8.call(this);
114
- Response.prototype.__init9.call(this);
115
- Response.prototype.__init10.call(this);
116
- Response.prototype.__init11.call(this);
117
- const {response: {alternates} = {}} = props || ({});
118
- const alternatesLength = Object.keys(alternates || ({})).length;
119
- this.state = {
120
- alternateIdCounter: alternatesLength + 1,
121
- showKeypad: {
122
- openCount: 0,
123
- main: false
124
- }
125
- };
126
- }
127
- __init() {
128
- this.onChange = name => evt => {
129
- const {response, onResponseChange, index} = this.props;
130
- const newResponse = {
131
- ...response
132
- };
133
- newResponse[name] = evt.target.value;
134
- onResponseChange(newResponse, index);
135
- };
136
- }
137
- __init2() {
138
- this.onConfigChanged = name => evt => {
139
- const {response, onResponseChange, index} = this.props;
140
- const newResponse = {
141
- ...response
142
- };
143
- newResponse[name] = evt.target.checked;
144
- onResponseChange(newResponse, index);
145
- };
146
- }
147
- __init3() {
148
- this.onLiteralOptionsChange = name => evt => {
149
- const {response, onResponseChange, index} = this.props;
150
- const newResponse = {
151
- ...response
152
- };
153
- newResponse[name] = !response[name];
154
- onResponseChange(newResponse, index);
155
- };
156
- }
157
- __init4() {
158
- this.onAnswerChange = answer => {
159
- const {response, onResponseChange, index} = this.props;
160
- const newResponse = {
161
- ...response
162
- };
163
- newResponse.answer = answer;
164
- onResponseChange(newResponse, index);
165
- };
166
- }
167
- __init5() {
168
- this.onAlternateAnswerChange = alternateId => answer => {
169
- const {response, onResponseChange, index} = this.props;
170
- const newResponse = {
171
- ...response
172
- };
173
- newResponse.alternates[alternateId] = answer;
174
- onResponseChange(newResponse, index);
175
- };
176
- }
177
- __init6() {
178
- this.onAddAlternate = () => {
179
- const {response, onResponseChange, index} = this.props;
180
- const {alternateIdCounter} = this.state;
181
- const newResponse = {
182
- ...response
183
- };
184
- if (!newResponse.alternates) {
185
- newResponse.alternates = {};
186
- }
187
- newResponse.alternates[alternateIdCounter] = '';
188
- onResponseChange(newResponse, index);
189
- this.setState({
190
- alternateIdCounter: alternateIdCounter + 1
191
- });
192
- };
193
- }
194
- __init7() {
195
- this.onRemoveAlternate = alternateId => () => {
196
- const {response, onResponseChange, index} = this.props;
197
- const newResponse = {
198
- ...response
199
- };
200
- delete newResponse.alternates[alternateId];
201
- onResponseChange(newResponse, index);
202
- this.setState(state => ({
203
- showKeypad: {
204
- ...state.showKeypad,
205
- openCount: !state.showKeypad[alternateId] ? state.showKeypad.openCount : state.showKeypad.openCount - 1
206
- }
207
- }));
208
- };
209
- }
210
- __init8() {
211
- this.onDone = () => {
212
- this.setState(state => ({
213
- showKeypad: {
214
- ...state.showKeypad,
215
- openCount: state.showKeypad.openCount - 1,
216
- main: false
217
- }
218
- }));
219
- };
220
- }
221
- __init9() {
222
- this.onFocus = () => {
223
- this.setState(state => ({
224
- showKeypad: {
225
- ...state.showKeypad,
226
- openCount: !state.showKeypad.main ? state.showKeypad.openCount + 1 : state.showKeypad.openCount,
227
- main: true
228
- }
229
- }));
230
- };
231
- }
232
- __init10() {
233
- this.onAlternateFocus = alternateId => () => {
234
- this.setState(state => ({
235
- showKeypad: {
236
- ...state.showKeypad,
237
- openCount: !state.showKeypad[alternateId] ? state.showKeypad.openCount + 1 : state.showKeypad.openCount,
238
- [alternateId]: true
239
- }
240
- }));
241
- };
242
- }
243
- __init11() {
244
- this.onAlternateDone = alternateId => () => {
245
- this.setState(state => ({
246
- showKeypad: {
247
- ...state.showKeypad,
248
- openCount: state.showKeypad.openCount - 1,
249
- [alternateId]: false
250
- }
251
- }));
252
- };
253
- }
254
- render() {
255
- const {classes, mode, defaultResponse, index, response, cAllowTrailingZeros, cIgnoreOrder} = this.props;
256
- const {showKeypad} = this.state;
257
- const {validation, answer, alternates, ignoreOrder, allowTrailingZeros} = response;
258
- const hasAlternates = Object.keys(alternates || ({})).length > 0;
259
- const classNames = {
260
- editor: classes.responseEditor,
261
- mathToolbar: classes.mathToolbar
262
- };
263
- const styles = {
264
- minHeight: `${showKeypad.openCount > 0 ? 430 : 230}px`
265
- };
266
- return React$3.createElement(Card, {
267
- className: classes.responseContainer,
268
- style: styles,
269
- __self: this,
270
- __source: {
271
- fileName: _jsxFileName$2,
272
- lineNumber: 271
273
- }
274
- }, React$3.createElement(CardContent, {
275
- className: classes.cardContent,
276
- __self: this,
277
- __source: {
278
- fileName: _jsxFileName$2,
279
- lineNumber: 272
280
- }
281
- }, React$3.createElement('div', {
282
- className: classes.titleBar,
283
- __self: this,
284
- __source: {
285
- fileName: _jsxFileName$2,
286
- lineNumber: 273
287
- }
288
- }, React$3.createElement(Typography, {
289
- className: classes.title,
290
- component: "h2",
291
- __self: this,
292
- __source: {
293
- fileName: _jsxFileName$2,
294
- lineNumber: 274
295
- }
296
- }, "Response", ' ', ''), React$3.createElement(InputContainer$2, {
297
- label: "Validation",
298
- className: classes.selectContainer,
299
- __self: this,
300
- __source: {
301
- fileName: _jsxFileName$2,
302
- lineNumber: 282
303
- }
304
- }, React$3.createElement(Select$1, {
305
- className: classes.select,
306
- onChange: this.onChange('validation'),
307
- value: validation || 'literal',
308
- __self: this,
309
- __source: {
310
- fileName: _jsxFileName$2,
311
- lineNumber: 286
312
- }
313
- }, React$3.createElement(MenuItem$1, {
314
- value: "literal",
315
- __self: this,
316
- __source: {
317
- fileName: _jsxFileName$2,
318
- lineNumber: 291
319
- }
320
- }, "Literal Validation"), React$3.createElement(MenuItem$1, {
321
- value: "symbolic",
322
- __self: this,
323
- __source: {
324
- fileName: _jsxFileName$2,
325
- lineNumber: 292
326
- }
327
- }, "Symbolic Validation")))), validation === 'literal' && React$3.createElement('div', {
328
- className: classes.flexContainer,
329
- __self: this,
330
- __source: {
331
- fileName: _jsxFileName$2,
332
- lineNumber: 297
333
- }
334
- }, cAllowTrailingZeros.enabled && React$3.createElement(FormControlLabel, {
335
- label: cAllowTrailingZeros.label,
336
- control: React$3.createElement(Checkbox, {
337
- checked: allowTrailingZeros,
338
- onChange: this.onLiteralOptionsChange('allowTrailingZeros'),
339
- __self: this,
340
- __source: {
341
- fileName: _jsxFileName$2,
342
- lineNumber: 302
343
- }
344
- }),
345
- __self: this,
346
- __source: {
347
- fileName: _jsxFileName$2,
348
- lineNumber: 299
349
- }
350
- }), cIgnoreOrder.enabled && React$3.createElement(FormControlLabel, {
351
- label: cIgnoreOrder.label,
352
- control: React$3.createElement(Checkbox, {
353
- checked: ignoreOrder,
354
- onChange: this.onLiteralOptionsChange('ignoreOrder'),
355
- __self: this,
356
- __source: {
357
- fileName: _jsxFileName$2,
358
- lineNumber: 316
359
- }
360
- }),
361
- __self: this,
362
- __source: {
363
- fileName: _jsxFileName$2,
364
- lineNumber: 313
365
- }
366
- })), React$3.createElement('div', {
367
- className: classes.inputContainer,
368
- __self: this,
369
- __source: {
370
- fileName: _jsxFileName$2,
371
- lineNumber: 325
372
- }
373
- }, React$3.createElement(InputLabel$1, {
374
- __self: this,
375
- __source: {
376
- fileName: _jsxFileName$2,
377
- lineNumber: 326
378
- }
379
- }, "Correct Answer"), React$3.createElement(MathToolbar$1, {
380
- keypadMode: mode,
381
- classNames: classNames,
382
- controlledKeypad: true,
383
- showKeypad: showKeypad.main,
384
- latex: answer || '',
385
- onChange: this.onAnswerChange,
386
- onFocus: this.onFocus,
387
- onDone: this.onDone,
388
- __self: this,
389
- __source: {
390
- fileName: _jsxFileName$2,
391
- lineNumber: 327
392
- }
393
- })), hasAlternates && Object.keys(alternates).map((alternateId, altIdx) => React$3.createElement('div', {
394
- className: classes.inputContainer,
395
- key: alternateId,
396
- __self: this,
397
- __source: {
398
- fileName: _jsxFileName$2,
399
- lineNumber: 340
400
- }
401
- }, React$3.createElement('div', {
402
- className: classes.alternateBar,
403
- __self: this,
404
- __source: {
405
- fileName: _jsxFileName$2,
406
- lineNumber: 341
407
- }
408
- }, React$3.createElement(InputLabel$1, {
409
- __self: this,
410
- __source: {
411
- fileName: _jsxFileName$2,
412
- lineNumber: 342
413
- }
414
- }, "Alternate", Object.keys(alternates).length > 1 ? ` ${altIdx + 1}` : ''), React$3.createElement(Button, {
415
- className: classes.removeAlternateButton,
416
- type: "secondary",
417
- onClick: this.onRemoveAlternate(alternateId),
418
- __self: this,
419
- __source: {
420
- fileName: _jsxFileName$2,
421
- lineNumber: 346
422
- }
423
- }, "Remove")), React$3.createElement(MathToolbar$1, {
424
- classNames: classNames,
425
- controlledKeypad: true,
426
- keypadMode: mode,
427
- showKeypad: showKeypad[alternateId] || false,
428
- latex: alternates[alternateId] || '',
429
- onChange: this.onAlternateAnswerChange(alternateId),
430
- onFocus: this.onAlternateFocus(alternateId),
431
- onDone: this.onAlternateDone(alternateId),
432
- __self: this,
433
- __source: {
434
- fileName: _jsxFileName$2,
435
- lineNumber: 354
436
- }
437
- }))), React$3.createElement('div', {
438
- className: classes.configPanel,
439
- __self: this,
440
- __source: {
441
- fileName: _jsxFileName$2,
442
- lineNumber: 366
443
- }
444
- }, React$3.createElement(Button, {
445
- className: classes.alternateButton,
446
- type: "primary",
447
- onClick: this.onAddAlternate,
448
- __self: this,
449
- __source: {
450
- fileName: _jsxFileName$2,
451
- lineNumber: 367
452
- }
453
- }, "ADD ALTERNATE"), React$3.createElement('div', {
454
- className: classes.checkboxContainer,
455
- __self: this,
456
- __source: {
457
- fileName: _jsxFileName$2,
458
- lineNumber: 374
459
- }
460
- }))));
461
- }
462
- }
463
- Response.__initStatic();
464
- Response.__initStatic2();
465
- var Response$1 = withStyles$2(styles$2)(Response);
466
- const ResponseTypes = {
467
- advanced: 'Advanced Multi',
468
- simple: 'Simple'
469
- };
470
- const React$2 = _dll_react;
471
- const PropTypes$1 = _dll_prop_types;
472
- const cx = _dll_classnames;
473
- const {withStyles: withStyles$1} = _dll_material_ui__core_styles;
474
- const {InputLabel: InputLabel} = _dll_material_ui__core;
475
- const {Select: Select} = _dll_material_ui__core;
476
- const {MenuItem: MenuItem} = _dll_material_ui__core;
477
- const {isEqual: isEqual} = _dll_lodash;
478
- const EditableHtml$1 = _dll_pie_lib__editable_html;
479
- const {InputContainer: InputContainer$1} = _dll_pie_lib__config_ui;
480
- const {MathToolbar: MathToolbar} = _dll_pie_lib__math_toolbar;
481
- const MathQuill = _dll_pie_framework__mathquill;
482
- const _jsxFileName$1 = "/home/circleci/repo/packages/math-inline/configure/src/general-config-block.jsx";
483
- let registered = false;
484
- const styles$1 = theme => ({
485
- container: {
486
- marginTop: theme.spacing.unit * 2,
487
- marginBottom: theme.spacing.unit * 2,
488
- display: 'flex',
489
- flexDirection: 'column'
490
- },
491
- templateTitle: {
492
- fontSize: '0.85rem'
493
- },
494
- addResponseButton: {
495
- border: '1px solid lightgrey',
496
- float: 'right',
497
- width: '150px'
498
- },
499
- flexContainer: {
500
- display: 'flex',
501
- alignItems: 'center',
502
- justifyContent: 'space-between'
503
- },
504
- selectContainer: {
505
- flex: 'initial',
506
- width: '40%',
507
- marginTop: theme.spacing.unit * 2,
508
- marginBottom: theme.spacing.unit * 2
509
- },
510
- inputContainer: {
511
- marginBottom: theme.spacing.unit * 4,
512
- display: 'flex',
513
- flexDirection: 'column',
514
- width: '90%'
515
- },
516
- responseEditor: {
517
- display: 'flex',
518
- justifyContent: 'center',
519
- width: '100%',
520
- minWidth: '500px',
521
- maxWidth: 'inherit',
522
- height: 'auto',
523
- minHeight: '130px',
524
- textAlign: 'left',
525
- padding: theme.spacing.unit
526
- },
527
- promptHolder: {
528
- width: '100%',
529
- paddingBottom: theme.spacing.unit * 2,
530
- marginBottom: theme.spacing.unit * 2
531
- },
532
- prompt: {
533
- paddingTop: theme.spacing.unit * 2,
534
- width: '100%',
535
- maxWidth: '600px'
536
- },
537
- blockContainer: {
538
- margin: theme.spacing.unit,
539
- display: 'inline-flex',
540
- border: '2px solid grey'
541
- },
542
- blockContainerGeneric: {
543
- margin: theme.spacing.unit / 2
544
- },
545
- blockResponse: {
546
- flex: 2,
547
- color: 'grey',
548
- background: 'lightgrey',
549
- fontSize: '0.8rem',
550
- padding: theme.spacing.unit / 2,
551
- display: 'flex',
552
- alignItems: 'center',
553
- justifyContent: 'center',
554
- borderRight: '2px solid grey'
555
- },
556
- blockResponseGeneric: {
557
- borderRight: 0
558
- },
559
- blockMath: {
560
- color: '#bdbdbd',
561
- padding: theme.spacing.unit / 2,
562
- display: 'flex',
563
- alignItems: 'center',
564
- justifyContent: 'center',
565
- flex: 8,
566
- '& > .mq-math-mode': {
567
- '& > .mq-hasCursor': {
568
- '& > .mq-cursor': {
569
- display: 'none'
570
- }
571
- }
572
- }
573
- }
574
- });
575
- const REGEX = /{{response}}/gm;
576
- const TEMPORARY_RESPONSE_FIELD = /\\%response\\%/gm;
577
- const ANSWER_BLOCK_REGEX = /\\embed\{answerBlock\}\[r\d*\]/g;
578
- const NEWLINE_BLOCK = /\\embed\{newLine\}\[\]/g;
579
- const NEWLINE_LATEX = /\\newline/g;
580
- function prepareForStatic(expression) {
581
- if (expression) {
582
- let answerBlocks = 1;
583
- return expression.replace(REGEX, () => `\\embed{answerBlock}[r${answerBlocks++}]`).replace(NEWLINE_LATEX, '\\embed{newLine}[]');
584
- }
585
- }
586
- function prepareForModel(expression) {
587
- if (expression) {
588
- return expression.replace(ANSWER_BLOCK_REGEX, () => '{{response}}').replace(TEMPORARY_RESPONSE_FIELD, () => '{{response}}').replace(NEWLINE_BLOCK, () => '\\newline');
589
- }
590
- }
591
- class GeneralConfigBlock extends React$2.Component {
592
- static __initStatic() {
593
- this.propTypes = {
594
- classes: PropTypes$1.object.isRequired,
595
- model: PropTypes$1.object.isRequired,
596
- imageSupport: PropTypes$1.object,
597
- configuration: PropTypes$1.object,
598
- onChange: PropTypes$1.func.isRequired,
599
- promptEnabled: PropTypes$1.bool,
600
- rationaleEnabled: PropTypes$1.bool,
601
- toolbarOpts: PropTypes$1.object
602
- };
603
- }
604
- constructor(props) {
605
- super(props);
606
- GeneralConfigBlock.prototype.__init.call(this);
607
- GeneralConfigBlock.prototype.__init2.call(this);
608
- GeneralConfigBlock.prototype.__init3.call(this);
609
- GeneralConfigBlock.prototype.__init4.call(this);
610
- GeneralConfigBlock.prototype.__init5.call(this);
611
- GeneralConfigBlock.prototype.__init6.call(this);
612
- GeneralConfigBlock.prototype.__init7.call(this);
613
- const responseAreas = {};
614
- if (props.model && props.model.expression) {
615
- let answerBlocks = 1;
616
- props.model.expression.replace(REGEX, () => {
617
- responseAreas[`r${answerBlocks++}`] = {
618
- value: ''
619
- };
620
- });
621
- }
622
- this.state = {
623
- showKeypad: false,
624
- responseAreas,
625
- responseIdCounter: Object.keys(responseAreas).length
626
- };
627
- }
628
- __init() {
629
- this.onChange = name => evtOrValue => {
630
- const {model, onChange} = this.props;
631
- const newModel = {
632
- ...model
633
- };
634
- if (typeof evtOrValue === 'object') {
635
- newModel[name] = evtOrValue.target.value;
636
- } else {
637
- newModel[name] = evtOrValue;
638
- }
639
- if (name === 'expression') {
640
- newModel[name] = prepareForModel(evtOrValue);
641
- }
642
- onChange(newModel);
643
- };
644
- }
645
- __init2() {
646
- this.onDone = () => {
647
- this.setState({
648
- showKeypad: false
649
- });
650
- };
651
- }
652
- __init3() {
653
- this.onFocus = () => {
654
- this.setState({
655
- showKeypad: true
656
- });
657
- };
658
- }
659
- __init4() {
660
- this.onPromptFocus = () => {
661
- this.setState({
662
- showKeypad: false
663
- });
664
- };
665
- }
666
- UNSAFE_componentWillMount() {
667
- const {classes} = this.props;
668
- if (typeof window !== 'undefined') {
669
- let MQ = MathQuill.getInterface(2);
670
- if (!registered) {
671
- MQ.registerEmbed('answerBlock', data => {
672
- const genericAnswerBlock = `<div class="${cx(classes.blockContainer, classes.blockContainerGeneric)}">
673
- <div class="${cx(classes.blockResponse, classes.blockResponseGeneric)}" id="${data}Index">Response</div>
674
- </div>`;
675
- return {
676
- htmlString: genericAnswerBlock,
677
- text: () => 'text',
678
- latex: () => `\\embed{answerBlock}[${data}]`
679
- };
680
- });
681
- registered = true;
682
- }
683
- }
684
- }
685
- componentDidMount() {
686
- this.handleAnswerBlockDomUpdate();
687
- }
688
- componentDidUpdate() {
689
- this.handleAnswerBlockDomUpdate();
690
- }
691
- __init5() {
692
- this.handleAnswerBlockDomUpdate = () => {
693
- const {model} = this.props;
694
- const responseAreas = {};
695
- if (model && model.expression) {
696
- let answerBlocks = 1;
697
- model.expression.replace(REGEX, () => {
698
- responseAreas[`r${answerBlocks++}`] = {
699
- value: ''
700
- };
701
- });
702
- }
703
- if (!isEqual(responseAreas, this.state.responseAreas)) {
704
- this.setState({
705
- responseAreas
706
- }, () => {
707
- if (this.root && Object.keys(responseAreas).length) {
708
- Object.keys(responseAreas).forEach((responseId, idx) => {
709
- const el = this.root.querySelector(`#${responseId}`);
710
- const indexEl = this.root.querySelector(`#${responseId}Index`);
711
- if (el) {
712
- let MQ = MathQuill.getInterface(2);
713
- MQ.StaticMath(el);
714
- indexEl.textContent = `R${idx + 1}`;
715
- }
716
- });
717
- }
718
- });
719
- }
720
- };
721
- }
722
- __init6() {
723
- this.onAddResponse = () => {
724
- const {model, onChange} = this.props;
725
- const {responseIdCounter} = this.state;
726
- const newModel = {
727
- ...model
728
- };
729
- let newCounter = responseIdCounter;
730
- while (model.responses.find(response => response.id === newCounter)) {
731
- newCounter++;
732
- }
733
- const response = {
734
- id: newCounter,
735
- validation: 'literal',
736
- answer: '',
737
- alternates: {}
738
- };
739
- newModel.responses = newModel.responses.concat(response);
740
- onChange(newModel);
741
- this.setState({
742
- responseIdCounter: response.id
743
- });
744
- };
745
- }
746
- __init7() {
747
- this.onResponseChange = (response, index) => {
748
- const {model, onChange} = this.props;
749
- const newModel = {
750
- ...model
751
- };
752
- newModel.responses[index] = response;
753
- onChange(newModel);
754
- };
755
- }
756
- render() {
757
- const {classes, model, imageSupport, configuration, promptEnabled, rationaleEnabled, toolbarOpts} = this.props;
758
- const {showKeypad} = this.state;
759
- const {prompt, expression, equationEditor, promptEquationEditor = '8', responses, responseType, rationale, spellCheckEnabled} = model;
760
- const {rationale: cRationale = {}, prompt: cPrompt = {}, ignoreOrder: cIgnoreOrder = {}, allowTrailingZeros: cAllowTrailingZeros = {}} = configuration || ({});
761
- const classNames = {
762
- editor: classes.responseEditor,
763
- mathToolbar: classes.mathToolbar
764
- };
765
- const responsesToUse = responseType === ResponseTypes.advanced ? responses : responses.slice(0, 1);
766
- return React$2.createElement('div', {
767
- ref: r => this.root = r || this.root,
768
- className: classes.container,
769
- __self: this,
770
- __source: {
771
- fileName: _jsxFileName$1,
772
- lineNumber: 357
773
- }
774
- }, promptEnabled && React$2.createElement(InputContainer$1, {
775
- label: cPrompt.label,
776
- className: classes.promptHolder,
777
- __self: this,
778
- __source: {
779
- fileName: _jsxFileName$1,
780
- lineNumber: 362
781
- }
782
- }, React$2.createElement(EditableHtml$1, {
783
- onFocus: this.onPromptFocus,
784
- className: classes.prompt,
785
- markup: prompt || '',
786
- onChange: this.onChange('prompt'),
787
- imageSupport: imageSupport,
788
- nonEmpty: false,
789
- toolbarOpts: toolbarOpts,
790
- spellCheck: spellCheckEnabled,
791
- __self: this,
792
- __source: {
793
- fileName: _jsxFileName$1,
794
- lineNumber: 363
795
- }
796
- })), rationaleEnabled && React$2.createElement(InputContainer$1, {
797
- label: cRationale.label,
798
- className: classes.promptHolder,
799
- __self: this,
800
- __source: {
801
- fileName: _jsxFileName$1,
802
- lineNumber: 376
803
- }
804
- }, React$2.createElement(EditableHtml$1, {
805
- className: classes.prompt,
806
- markup: rationale || '',
807
- pluginProps: {
808
- math: {
809
- controlledKeypadMode: false
810
- }
811
- },
812
- onChange: this.onChange('rationale'),
813
- imageSupport: imageSupport,
814
- nonEmpty: false,
815
- toolbarOpts: toolbarOpts,
816
- spellCheck: spellCheckEnabled,
817
- __self: this,
818
- __source: {
819
- fileName: _jsxFileName$1,
820
- lineNumber: 380
821
- }
822
- })), responseType === ResponseTypes.advanced && [React$2.createElement(InputContainer$1, {
823
- key: "templateEditorType",
824
- label: "Response Template Equation Editor",
825
- className: classes.selectContainer,
826
- __self: this,
827
- __source: {
828
- fileName: _jsxFileName$1,
829
- lineNumber: 397
830
- }
831
- }, React$2.createElement(Select, {
832
- className: classes.select,
833
- onChange: this.onChange('promptEquationEditor'),
834
- value: promptEquationEditor,
835
- __self: this,
836
- __source: {
837
- fileName: _jsxFileName$1,
838
- lineNumber: 402
839
- }
840
- }, React$2.createElement(MenuItem, {
841
- value: "non-negative-integers",
842
- __self: this,
843
- __source: {
844
- fileName: _jsxFileName$1,
845
- lineNumber: 407
846
- }
847
- }, "Numeric - Non-Negative Integers"), React$2.createElement(MenuItem, {
848
- value: "integers",
849
- __self: this,
850
- __source: {
851
- fileName: _jsxFileName$1,
852
- lineNumber: 408
853
- }
854
- }, "Numeric - Integers"), React$2.createElement(MenuItem, {
855
- value: "decimals",
856
- __self: this,
857
- __source: {
858
- fileName: _jsxFileName$1,
859
- lineNumber: 409
860
- }
861
- }, "Numeric - Decimals"), React$2.createElement(MenuItem, {
862
- value: "fractions",
863
- __self: this,
864
- __source: {
865
- fileName: _jsxFileName$1,
866
- lineNumber: 410
867
- }
868
- }, "Numeric - Fractions"), React$2.createElement(MenuItem, {
869
- value: 1,
870
- __self: this,
871
- __source: {
872
- fileName: _jsxFileName$1,
873
- lineNumber: 411
874
- }
875
- }, "Grade 1 - 2"), React$2.createElement(MenuItem, {
876
- value: 3,
877
- __self: this,
878
- __source: {
879
- fileName: _jsxFileName$1,
880
- lineNumber: 412
881
- }
882
- }, "Grade 3 - 5"), React$2.createElement(MenuItem, {
883
- value: 6,
884
- __self: this,
885
- __source: {
886
- fileName: _jsxFileName$1,
887
- lineNumber: 413
888
- }
889
- }, "Grade 6 - 7"), React$2.createElement(MenuItem, {
890
- value: 8,
891
- __self: this,
892
- __source: {
893
- fileName: _jsxFileName$1,
894
- lineNumber: 414
895
- }
896
- }, "Grade 8 - HS"), React$2.createElement(MenuItem, {
897
- value: 'geometry',
898
- __self: this,
899
- __source: {
900
- fileName: _jsxFileName$1,
901
- lineNumber: 415
902
- }
903
- }, "Geometry"), React$2.createElement(MenuItem, {
904
- value: 'advanced-algebra',
905
- __self: this,
906
- __source: {
907
- fileName: _jsxFileName$1,
908
- lineNumber: 416
909
- }
910
- }, "Advanced Algebra"), React$2.createElement(MenuItem, {
911
- value: 'statistics',
912
- __self: this,
913
- __source: {
914
- fileName: _jsxFileName$1,
915
- lineNumber: 417
916
- }
917
- }, "Statistics"), React$2.createElement(MenuItem, {
918
- value: 'item-authoring',
919
- __self: this,
920
- __source: {
921
- fileName: _jsxFileName$1,
922
- lineNumber: 418
923
- }
924
- }, "Item Authoring"))), React$2.createElement('div', {
925
- className: classes.inputContainer,
926
- key: "templateHolder",
927
- __self: this,
928
- __source: {
929
- fileName: _jsxFileName$1,
930
- lineNumber: 421
931
- }
932
- }, React$2.createElement(InputLabel, {
933
- className: classes.templateTitle,
934
- __self: this,
935
- __source: {
936
- fileName: _jsxFileName$1,
937
- lineNumber: 422
938
- }
939
- }, "RESPONSE TEMPLATE"), React$2.createElement(MathToolbar, {
940
- classNames: classNames,
941
- allowAnswerBlock: true,
942
- keypadMode: promptEquationEditor,
943
- controlledKeypad: true,
944
- showKeypad: showKeypad,
945
- latex: prepareForStatic(expression) || '',
946
- onChange: this.onChange('expression'),
947
- onFocus: this.onFocus,
948
- onDone: this.onDone,
949
- __self: this,
950
- __source: {
951
- fileName: _jsxFileName$1,
952
- lineNumber: 425
953
- }
954
- }))], React$2.createElement('h3', {
955
- __self: this,
956
- __source: {
957
- fileName: _jsxFileName$1,
958
- lineNumber: 438
959
- }
960
- }, "Define Correct Response"), React$2.createElement('div', {
961
- className: classes.flexContainer,
962
- __self: this,
963
- __source: {
964
- fileName: _jsxFileName$1,
965
- lineNumber: 439
966
- }
967
- }, React$2.createElement(InputContainer$1, {
968
- label: "Equation Editor",
969
- className: classes.selectContainer,
970
- __self: this,
971
- __source: {
972
- fileName: _jsxFileName$1,
973
- lineNumber: 440
974
- }
975
- }, React$2.createElement(Select, {
976
- className: classes.select,
977
- onChange: this.onChange('equationEditor'),
978
- value: equationEditor,
979
- __self: this,
980
- __source: {
981
- fileName: _jsxFileName$1,
982
- lineNumber: 444
983
- }
984
- }, React$2.createElement(MenuItem, {
985
- value: "non-negative-integers",
986
- __self: this,
987
- __source: {
988
- fileName: _jsxFileName$1,
989
- lineNumber: 449
990
- }
991
- }, "Numeric - Non-Negative Integers"), React$2.createElement(MenuItem, {
992
- value: "integers",
993
- __self: this,
994
- __source: {
995
- fileName: _jsxFileName$1,
996
- lineNumber: 450
997
- }
998
- }, "Numeric - Integers"), React$2.createElement(MenuItem, {
999
- value: "decimals",
1000
- __self: this,
1001
- __source: {
1002
- fileName: _jsxFileName$1,
1003
- lineNumber: 451
1004
- }
1005
- }, "Numeric - Decimals"), React$2.createElement(MenuItem, {
1006
- value: "fractions",
1007
- __self: this,
1008
- __source: {
1009
- fileName: _jsxFileName$1,
1010
- lineNumber: 452
1011
- }
1012
- }, "Numeric - Fractions"), React$2.createElement(MenuItem, {
1013
- value: 1,
1014
- __self: this,
1015
- __source: {
1016
- fileName: _jsxFileName$1,
1017
- lineNumber: 453
1018
- }
1019
- }, "Grade 1 - 2"), React$2.createElement(MenuItem, {
1020
- value: 3,
1021
- __self: this,
1022
- __source: {
1023
- fileName: _jsxFileName$1,
1024
- lineNumber: 454
1025
- }
1026
- }, "Grade 3 - 5"), React$2.createElement(MenuItem, {
1027
- value: 6,
1028
- __self: this,
1029
- __source: {
1030
- fileName: _jsxFileName$1,
1031
- lineNumber: 455
1032
- }
1033
- }, "Grade 6 - 7"), React$2.createElement(MenuItem, {
1034
- value: 8,
1035
- __self: this,
1036
- __source: {
1037
- fileName: _jsxFileName$1,
1038
- lineNumber: 456
1039
- }
1040
- }, "Grade 8 - HS"), React$2.createElement(MenuItem, {
1041
- value: 'geometry',
1042
- __self: this,
1043
- __source: {
1044
- fileName: _jsxFileName$1,
1045
- lineNumber: 457
1046
- }
1047
- }, "Geometry"), React$2.createElement(MenuItem, {
1048
- value: 'advanced-algebra',
1049
- __self: this,
1050
- __source: {
1051
- fileName: _jsxFileName$1,
1052
- lineNumber: 458
1053
- }
1054
- }, "Advanced Algebra"), React$2.createElement(MenuItem, {
1055
- value: 'statistics',
1056
- __self: this,
1057
- __source: {
1058
- fileName: _jsxFileName$1,
1059
- lineNumber: 459
1060
- }
1061
- }, "Statistics"), React$2.createElement(MenuItem, {
1062
- value: 'item-authoring',
1063
- __self: this,
1064
- __source: {
1065
- fileName: _jsxFileName$1,
1066
- lineNumber: 460
1067
- }
1068
- }, "Item Authoring")))), responsesToUse.map((response, idx) => React$2.createElement(Response$1, {
1069
- key: response.id,
1070
- mode: equationEditor,
1071
- response: response,
1072
- defaultResponse: responseType === ResponseTypes.simple,
1073
- onResponseChange: this.onResponseChange,
1074
- index: idx,
1075
- cIgnoreOrder: cIgnoreOrder,
1076
- cAllowTrailingZeros: cAllowTrailingZeros,
1077
- __self: this,
1078
- __source: {
1079
- fileName: _jsxFileName$1,
1080
- lineNumber: 465
1081
- }
1082
- })));
1083
- }
1084
- }
1085
- GeneralConfigBlock.__initStatic();
1086
- var GeneralConfigBlock$1 = withStyles$1(styles$1)(GeneralConfigBlock);
1087
- const React$1 = _dll_react;
1088
- const {withStyles: withStyles} = _dll_material_ui__core_styles;
1089
- const PropTypes = _dll_prop_types;
1090
- const debug$1 = _dll_debug;
1091
- const {FeedbackConfig: FeedbackConfig} = _dll_pie_lib__config_ui;
1092
- const {settings: settings} = _dll_pie_lib__config_ui;
1093
- const {layout: layout} = _dll_pie_lib__config_ui;
1094
- const {InputContainer: InputContainer} = _dll_pie_lib__config_ui;
1095
- const EditableHtml = _dll_pie_lib__editable_html;
1096
- const _jsxFileName = "/home/circleci/repo/packages/math-inline/configure/src/configure.jsx";
1097
- const log$1 = debug$1('@pie-element:math-inline:configure');
1098
- const {Panel, toggle, radio} = settings;
1099
- const styles = theme => ({
1100
- title: {
1101
- fontSize: '1.1rem',
1102
- display: 'block',
1103
- marginTop: theme.spacing.unit * 2,
1104
- marginBottom: theme.spacing.unit
1105
- },
1106
- content: {
1107
- marginTop: theme.spacing.unit * 2
1108
- },
1109
- promptHolder: {
1110
- width: '100%',
1111
- paddingTop: theme.spacing.unit * 2
1112
- },
1113
- prompt: {
1114
- paddingTop: theme.spacing.unit * 2,
1115
- width: '100%'
1116
- }
1117
- });
1118
- class Configure extends React$1.Component {
1119
- constructor(...args) {
1120
- super(...args);
1121
- Configure.prototype.__init.call(this);
1122
- Configure.prototype.__init2.call(this);
1123
- Configure.prototype.__init3.call(this);
1124
- }
1125
- static __initStatic() {
1126
- this.propTypes = {
1127
- onModelChanged: PropTypes.func,
1128
- onConfigurationChanged: PropTypes.func,
1129
- classes: PropTypes.object,
1130
- model: PropTypes.object.isRequired,
1131
- configuration: PropTypes.object.isRequired,
1132
- imageSupport: PropTypes.object
1133
- };
1134
- }
1135
- __init() {
1136
- this.onChange = model => {
1137
- this.props.onModelChanged(model);
1138
- };
1139
- }
1140
- __init2() {
1141
- this.changeTeacherInstructions = teacherInstructions => {
1142
- this.props.onModelChanged({
1143
- ...this.props.model,
1144
- teacherInstructions
1145
- });
1146
- };
1147
- }
1148
- __init3() {
1149
- this.onFeedbackChange = feedback => {
1150
- const {model, onModelChanged} = this.props;
1151
- model.feedback = feedback;
1152
- onModelChanged(model);
1153
- };
1154
- }
1155
- render() {
1156
- const {classes, model, imageSupport, onModelChanged, configuration, onConfigurationChanged} = this.props;
1157
- const {feedback = {}, responseType = {}, teacherInstructions = {}, studentInstructions = {}, rationale = {}, prompt = {}, scoringType = {}, ignoreOrder = {}, allowTrailingZeros = {}, spellCheck = {}} = configuration || ({});
1158
- log$1('[render] model', model);
1159
- const {rationaleEnabled, promptEnabled, teacherInstructionsEnabled, feedbackEnabled, spellCheckEnabled} = model || ({});
1160
- const toolbarOpts = {};
1161
- switch (model.toolbarEditorPosition) {
1162
- case 'top':
1163
- toolbarOpts.position = 'top';
1164
- break;
1165
- default:
1166
- toolbarOpts.position = 'bottom';
1167
- break;
1168
- }
1169
- return React$1.createElement('div', {
1170
- __self: this,
1171
- __source: {
1172
- fileName: _jsxFileName,
1173
- lineNumber: 93
1174
- }
1175
- }, React$1.createElement(layout.ConfigLayout, {
1176
- settings: React$1.createElement(Panel, {
1177
- model: model,
1178
- configuration: configuration,
1179
- onChangeModel: model => onModelChanged(model),
1180
- onChangeConfiguration: config => onConfigurationChanged(config),
1181
- groups: {
1182
- 'Settings': {
1183
- responseType: responseType.settings && radio(responseType.label, [ResponseTypes.simple, ResponseTypes.advanced]),
1184
- feedbackEnabled: feedback.settings && toggle(feedback.label),
1185
- 'promptEnabled': prompt.settings && toggle(prompt.label)
1186
- },
1187
- 'Properties': {
1188
- teacherInstructionsEnabled: teacherInstructions.settings && toggle(teacherInstructions.label),
1189
- studentInstructionsEnabled: studentInstructions.settings && toggle(studentInstructions.label),
1190
- rationaleEnabled: rationale.settings && toggle(rationale.label),
1191
- spellCheckEnabled: spellCheck.settings && toggle(spellCheck.label),
1192
- scoringType: scoringType.settings && radio(scoringType.label, ['auto', 'rubric']),
1193
- 'ignoreOrder.enabled': ignoreOrder.settings && toggle(ignoreOrder.label),
1194
- 'allowTrailingZeros.enabled': allowTrailingZeros.settings && toggle(allowTrailingZeros.label)
1195
- }
1196
- },
1197
- __self: this,
1198
- __source: {
1199
- fileName: _jsxFileName,
1200
- lineNumber: 96
1201
- }
1202
- }),
1203
- __self: this,
1204
- __source: {
1205
- fileName: _jsxFileName,
1206
- lineNumber: 94
1207
- }
1208
- }, React$1.createElement('div', {
1209
- __self: this,
1210
- __source: {
1211
- fileName: _jsxFileName,
1212
- lineNumber: 129
1213
- }
1214
- }, React$1.createElement('div', {
1215
- className: classes.content,
1216
- __self: this,
1217
- __source: {
1218
- fileName: _jsxFileName,
1219
- lineNumber: 130
1220
- }
1221
- }, teacherInstructionsEnabled && React$1.createElement(InputContainer, {
1222
- label: teacherInstructions.label,
1223
- className: classes.promptHolder,
1224
- __self: this,
1225
- __source: {
1226
- fileName: _jsxFileName,
1227
- lineNumber: 132
1228
- }
1229
- }, React$1.createElement(EditableHtml, {
1230
- className: classes.prompt,
1231
- markup: model.teacherInstructions || '',
1232
- onChange: this.changeTeacherInstructions,
1233
- imageSupport: imageSupport,
1234
- nonEmpty: false,
1235
- toolbarOpts: toolbarOpts,
1236
- spellCheck: spellCheckEnabled,
1237
- __self: this,
1238
- __source: {
1239
- fileName: _jsxFileName,
1240
- lineNumber: 133
1241
- }
1242
- })), React$1.createElement(GeneralConfigBlock$1, {
1243
- imageSupport: imageSupport,
1244
- model: model,
1245
- configuration: configuration,
1246
- onChange: this.onChange,
1247
- rationaleEnabled: rationaleEnabled,
1248
- promptEnabled: promptEnabled,
1249
- toolbarOpts: toolbarOpts,
1250
- spellCheck: spellCheckEnabled,
1251
- __self: this,
1252
- __source: {
1253
- fileName: _jsxFileName,
1254
- lineNumber: 145
1255
- }
1256
- }), feedbackEnabled && React$1.createElement(FeedbackConfig, {
1257
- feedback: model.feedback,
1258
- onChange: this.onFeedbackChange,
1259
- toolbarOpts: toolbarOpts,
1260
- __self: this,
1261
- __source: {
1262
- fileName: _jsxFileName,
1263
- lineNumber: 157
1264
- }
1265
- })))));
1266
- }
1267
- }
1268
- Configure.__initStatic();
1269
- var Configure$1 = withStyles(styles)(Configure);
1270
- var lib = {};
1271
- Object.defineProperty(lib, "__esModule", {
1272
- value: true
1273
- });
1274
- class ModelUpdatedEvent extends CustomEvent {
1275
- constructor(update, reset = false) {
1276
- super(ModelUpdatedEvent.TYPE, {
1277
- bubbles: true,
1278
- detail: {
1279
- update,
1280
- reset
1281
- }
1282
- });
1283
- this.update = update;
1284
- this.reset = reset;
1285
- }
1286
- }
1287
- ModelUpdatedEvent.TYPE = 'model.updated';
1288
- var ModelUpdatedEvent_1 = lib.ModelUpdatedEvent = ModelUpdatedEvent;
1289
- class DeleteImageEvent extends CustomEvent {
1290
- constructor(src, done) {
1291
- super(DeleteImageEvent.TYPE, {
1292
- bubbles: true,
1293
- detail: {
1294
- src,
1295
- done
1296
- }
1297
- });
1298
- this.src = src;
1299
- this.done = done;
1300
- }
1301
- }
1302
- DeleteImageEvent.TYPE = 'delete.image';
1303
- var DeleteImageEvent_1 = lib.DeleteImageEvent = DeleteImageEvent;
1304
- class InsertImageEvent extends CustomEvent {
1305
- constructor(handler) {
1306
- super(InsertImageEvent.TYPE, {
1307
- bubbles: true,
1308
- detail: handler
1309
- });
1310
- this.handler = handler;
1311
- }
1312
- }
1313
- InsertImageEvent.TYPE = 'insert.image';
1314
- var InsertImageEvent_1 = lib.InsertImageEvent = InsertImageEvent;
1315
- var defaults = {
1316
- model: {
1317
- partialScoring: true,
1318
- responseType: ResponseTypes.advanced,
1319
- element: 'math-inline',
1320
- feedback: {
1321
- correct: {
1322
- default: 'Correct',
1323
- type: 'none'
1324
- },
1325
- incorrect: {
1326
- default: 'Incorrect',
1327
- type: 'none'
1328
- },
1329
- partial: {
1330
- default: 'Nearly',
1331
- type: 'none'
1332
- }
1333
- },
1334
- equationEditor: '8',
1335
- expression: '',
1336
- rationale: 'Rationale goes here.',
1337
- note: 'The answer shown above is the primary correct answer specified by the author for this item, but other answers may also be recognized as correct.',
1338
- prompt: '',
1339
- responses: [],
1340
- customKeys: [],
1341
- scoringType: 'auto',
1342
- feedbackEnabled: true,
1343
- promptEnabled: true,
1344
- rationaleEnabled: true,
1345
- teacherInstructionsEnabled: true,
1346
- studentInstructionsEnabled: true,
1347
- toolbarEditorPosition: 'bottom',
1348
- validationDefault: 'literal',
1349
- ignoreOrderDefault: false,
1350
- allowTrailingZerosDefault: false
1351
- },
1352
- configuration: {
1353
- prompt: {
1354
- settings: true,
1355
- label: 'Prompt'
1356
- },
1357
- feedback: {
1358
- settings: true,
1359
- label: 'Feedback'
1360
- },
1361
- responseType: {
1362
- settings: true,
1363
- label: 'Response type'
1364
- },
1365
- rationale: {
1366
- settings: true,
1367
- label: 'Rationale'
1368
- },
1369
- spellCheck: {
1370
- label: 'Spellcheck',
1371
- settings: false,
1372
- enabled: true
1373
- },
1374
- scoringType: {
1375
- settings: false,
1376
- label: 'Scoring Type'
1377
- },
1378
- studentInstructions: {
1379
- settings: false,
1380
- label: 'Student Instructions'
1381
- },
1382
- teacherInstructions: {
1383
- settings: true,
1384
- label: 'Teacher Instructions'
1385
- },
1386
- partialScoring: {
1387
- settings: false,
1388
- label: 'Allow Partial Scoring'
1389
- },
1390
- ignoreOrder: {
1391
- settings: false,
1392
- label: 'Ignore Order',
1393
- enabled: true
1394
- },
1395
- allowTrailingZeros: {
1396
- settings: false,
1397
- label: 'Allow Trailing Zeros',
1398
- enabled: true
1399
- }
1400
- }
1401
- };
1402
- const React = _dll_react;
1403
- const ReactDOM = _dll_react_dom;
1404
- const {isEmpty: isEmpty} = _dll_lodash;
1405
- const debug = _dll_debug;
1406
- const log = debug('pie-elements:math-inline:configure');
1407
- class MathInlineConfigure extends HTMLElement {
1408
- static __initStatic() {
1409
- this.createDefaultModel = (model = {}) => {
1410
- if (!isEmpty(model.responses)) {
1411
- model.responses = model.responses.map(correctResponse => ({
1412
- ...correctResponse,
1413
- validation: correctResponse.validation || defaults.model.validationDefault,
1414
- allowTrailingZeros: correctResponse.allowTrailingZeros || defaults.model.allowTrailingZerosDefault,
1415
- ignoreOrder: correctResponse.ignoreOrder || defaults.model.ignoreOrderDefault || false
1416
- }));
1417
- }
1418
- return {
1419
- ...defaults.model,
1420
- ...model
1421
- };
1422
- };
1423
- }
1424
- constructor() {
1425
- super();
1426
- this._model = MathInlineConfigure.createDefaultModel();
1427
- this._configuration = defaults.configuration;
1428
- }
1429
- set model(m) {
1430
- this._model = MathInlineConfigure.createDefaultModel(m);
1431
- this._render();
1432
- }
1433
- set configuration(c) {
1434
- this._configuration = c;
1435
- this._render();
1436
- }
1437
- onModelChanged(model) {
1438
- this._model = model;
1439
- log('[onModelChanged]: ', this._model);
1440
- this._render();
1441
- this.dispatchEvent(new ModelUpdatedEvent_1(this._model));
1442
- }
1443
- onConfigurationChanged(c) {
1444
- this._configuration = c;
1445
- if (this._model) {
1446
- this.onModelChanged(this._model);
1447
- }
1448
- this._render();
1449
- }
1450
- insertImage(handler) {
1451
- this.dispatchEvent(new InsertImageEvent_1(handler));
1452
- }
1453
- onDeleteImage(src, done) {
1454
- this.dispatchEvent(new DeleteImageEvent_1(src, done));
1455
- }
1456
- _render() {
1457
- if (this._model) {
1458
- const el = React.createElement(Configure$1, {
1459
- onModelChanged: this.onModelChanged.bind(this),
1460
- onConfigurationChanged: this.onConfigurationChanged.bind(this),
1461
- model: this._model,
1462
- configuration: this._configuration,
1463
- imageSupport: {
1464
- add: this.insertImage.bind(this),
1465
- delete: this.onDeleteImage.bind(this)
1466
- }
1467
- });
1468
- ReactDOM.render(el, this);
1469
- }
1470
- }
1471
- }
1472
- MathInlineConfigure.__initStatic();
1473
- export {MathInlineConfigure as default};