@pie-element/drag-in-the-blank 10.2.2-beta.4 → 10.2.2-beta.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/configure/CHANGELOG.md +8 -0
- package/configure/package.json +3 -3
- package/controller/CHANGELOG.md +8 -0
- package/controller/package.json +1 -1
- package/package.json +3 -3
- package/configure/lib/__tests__/choice.test.js +0 -114
- package/configure/lib/__tests__/choices.test.js +0 -157
- package/configure/lib/__tests__/main.test.js +0 -167
- package/configure/lib/__tests__/markupUtils.test.js +0 -105
- package/configure/lib/choice.js +0 -137
- package/configure/lib/choice.js.map +0 -1
- package/configure/lib/choices.js +0 -332
- package/configure/lib/choices.js.map +0 -1
- package/configure/lib/defaults.js +0 -169
- package/configure/lib/defaults.js.map +0 -1
- package/configure/lib/index.js +0 -148
- package/configure/lib/index.js.map +0 -1
- package/configure/lib/main.js +0 -440
- package/configure/lib/main.js.map +0 -1
- package/configure/lib/markupUtils.js +0 -83
- package/configure/lib/markupUtils.js.map +0 -1
- package/controller/lib/__tests__/index.test.js +0 -775
- package/controller/lib/defaults.js +0 -24
- package/controller/lib/defaults.js.map +0 -1
- package/controller/lib/index.js +0 -251
- package/controller/lib/index.js.map +0 -1
- package/controller/lib/utils.js +0 -39
- package/controller/lib/utils.js.map +0 -1
- package/docs/demo/pie.manifest.json +0 -11
- package/lib/__tests__/index.test.js +0 -118
- package/lib/__tests__/main.test.js +0 -139
- package/lib/index.js +0 -207
- package/lib/index.js.map +0 -1
- package/lib/main.js +0 -126
- package/lib/main.js.map +0 -1
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _markupUtils = require("../markupUtils");
|
|
4
|
-
describe('markupUtils', () => {
|
|
5
|
-
describe('createElementFromHTML', () => {
|
|
6
|
-
it('should create dom element from string', () => {
|
|
7
|
-
const el = (0, _markupUtils.createElementFromHTML)(`<div>Foo Bar</div>`);
|
|
8
|
-
expect(el.outerHTML).toEqual('<div><div>Foo Bar</div></div>');
|
|
9
|
-
});
|
|
10
|
-
});
|
|
11
|
-
describe('removeUnwantedCharacters', () => {
|
|
12
|
-
it('should remove \\t and \\n characters', () => {
|
|
13
|
-
expect((0, _markupUtils.removeUnwantedCharacters)('<div>foo\t\nbar</div>')).toEqual('<div>foobar</div>');
|
|
14
|
-
});
|
|
15
|
-
it('should remove \\t and \\n characters', () => {
|
|
16
|
-
expect((0, _markupUtils.removeUnwantedCharacters)('<div>foo\\t\\nbar</div>')).toEqual('<div>foobar</div>');
|
|
17
|
-
});
|
|
18
|
-
it('should replace \\" with "', () => {
|
|
19
|
-
expect((0, _markupUtils.removeUnwantedCharacters)('<div>"foo bar"</div>')).toEqual('<div>"foo bar"</div>');
|
|
20
|
-
});
|
|
21
|
-
it('should replace \\/ with /', () => {
|
|
22
|
-
expect((0, _markupUtils.removeUnwantedCharacters)('<div>foo/bar</div>')).toEqual('<div>foo/bar</div>');
|
|
23
|
-
});
|
|
24
|
-
it('should not remove \\t character which has latex like \\times', () => {
|
|
25
|
-
expect((0, _markupUtils.removeUnwantedCharacters)('<div><span data-latex="" data-raw="3\\times3\\div2">3\\times3\\div2</span></div>')).toEqual('<div><span data-latex="" data-raw="3\\times3\\div2">3\\times3\\div2</span></div>');
|
|
26
|
-
});
|
|
27
|
-
});
|
|
28
|
-
describe('processMarkup', () => {
|
|
29
|
-
it('should get choices, markup and correctResponse from markup', () => {
|
|
30
|
-
const markup = ['<div>', '<span data-type="drag_in_the_blank" data-value="foobar" data-id="0"></span>', '<span data-type="drag_in_the_blank" data-value="barfoo" data-id="1"></span>', '</div>'].join('');
|
|
31
|
-
const processed = (0, _markupUtils.processMarkup)(markup);
|
|
32
|
-
expect(processed).toEqual(expect.objectContaining({
|
|
33
|
-
markup: ['<div>', '{{0}}', '{{1}}', '</div>'].join(''),
|
|
34
|
-
choices: [{
|
|
35
|
-
value: 'foobar',
|
|
36
|
-
id: '0'
|
|
37
|
-
}, {
|
|
38
|
-
value: 'barfoo',
|
|
39
|
-
id: '1'
|
|
40
|
-
}],
|
|
41
|
-
correctResponse: {
|
|
42
|
-
0: '0',
|
|
43
|
-
1: '1'
|
|
44
|
-
}
|
|
45
|
-
}));
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
// TODO: not sure if this test is very good
|
|
49
|
-
it('should get value with replaced with a regular space', () => {
|
|
50
|
-
const markup = ['<div>', '<span data-type="drag_in_the_blank" data-value="foo bar" data-id="0"></span>', '</div>'].join('');
|
|
51
|
-
const processed = (0, _markupUtils.processMarkup)(markup);
|
|
52
|
-
expect(encodeURIComponent(processed.choices[0].value)).toEqual('foo%C2%A0bar');
|
|
53
|
-
});
|
|
54
|
-
});
|
|
55
|
-
describe('createSlateMarkup', () => {
|
|
56
|
-
it('should create slate markup from the regular markup, choices and correctResponses', () => {
|
|
57
|
-
const markup = ['<div>', '{{0}}', '{{1}}', '</div>'].join('');
|
|
58
|
-
const choices = [{
|
|
59
|
-
value: 'foobar',
|
|
60
|
-
id: '0'
|
|
61
|
-
}, {
|
|
62
|
-
value: 'barfoo',
|
|
63
|
-
id: '1'
|
|
64
|
-
}];
|
|
65
|
-
const correctResponse = {
|
|
66
|
-
0: '0',
|
|
67
|
-
1: '1'
|
|
68
|
-
};
|
|
69
|
-
const slateMarkup = (0, _markupUtils.createSlateMarkup)(markup, choices, correctResponse);
|
|
70
|
-
expect(slateMarkup).toEqual(['<div>', '<span data-type="drag_in_the_blank" data-index="0" data-id="0" data-value="foobar"></span>', '<span data-type="drag_in_the_blank" data-index="1" data-id="1" data-value="barfoo"></span>', '</div>'].join(''));
|
|
71
|
-
});
|
|
72
|
-
it('should handle choices with empty values', () => {
|
|
73
|
-
const markup = ['<div>', '{{0}}', '{{1}}', '</div>'].join('');
|
|
74
|
-
const choices = [{
|
|
75
|
-
value: 'foobar',
|
|
76
|
-
id: '0'
|
|
77
|
-
}, {
|
|
78
|
-
value: '',
|
|
79
|
-
id: '1'
|
|
80
|
-
}];
|
|
81
|
-
const correctResponse = {
|
|
82
|
-
0: '0',
|
|
83
|
-
1: '1'
|
|
84
|
-
};
|
|
85
|
-
const slateMarkup = (0, _markupUtils.createSlateMarkup)(markup, choices, correctResponse);
|
|
86
|
-
expect(slateMarkup).toEqual(['<div>', '<span data-type="drag_in_the_blank" data-index="0" data-id="0" data-value="foobar"></span>', '<span data-type="drag_in_the_blank" data-index="1" data-id="" data-value=""></span>', '</div>'].join(''));
|
|
87
|
-
});
|
|
88
|
-
});
|
|
89
|
-
describe('choiceIsEmpty', () => {
|
|
90
|
-
it('should return false if choice is null or undefined', () => {
|
|
91
|
-
expect((0, _markupUtils.choiceIsEmpty)(null)).toEqual(false);
|
|
92
|
-
expect((0, _markupUtils.choiceIsEmpty)(undefined)).toEqual(false);
|
|
93
|
-
});
|
|
94
|
-
it('should handle choices with no value provided', () => {
|
|
95
|
-
expect((0, _markupUtils.choiceIsEmpty)({})).toEqual(true);
|
|
96
|
-
});
|
|
97
|
-
it('should handle choices with img tags provided', () => {
|
|
98
|
-
const markup = ['<div>', '<img src="foobar" />', '</div>'].join('');
|
|
99
|
-
expect((0, _markupUtils.choiceIsEmpty)({
|
|
100
|
-
value: markup
|
|
101
|
-
})).toEqual(false);
|
|
102
|
-
});
|
|
103
|
-
});
|
|
104
|
-
});
|
|
105
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWFya3VwVXRpbHMiLCJyZXF1aXJlIiwiZGVzY3JpYmUiLCJpdCIsImVsIiwiY3JlYXRlRWxlbWVudEZyb21IVE1MIiwiZXhwZWN0Iiwib3V0ZXJIVE1MIiwidG9FcXVhbCIsInJlbW92ZVVud2FudGVkQ2hhcmFjdGVycyIsIm1hcmt1cCIsImpvaW4iLCJwcm9jZXNzZWQiLCJwcm9jZXNzTWFya3VwIiwib2JqZWN0Q29udGFpbmluZyIsImNob2ljZXMiLCJ2YWx1ZSIsImlkIiwiY29ycmVjdFJlc3BvbnNlIiwiZW5jb2RlVVJJQ29tcG9uZW50Iiwic2xhdGVNYXJrdXAiLCJjcmVhdGVTbGF0ZU1hcmt1cCIsImNob2ljZUlzRW1wdHkiLCJ1bmRlZmluZWQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL21hcmt1cFV0aWxzLnRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNob2ljZUlzRW1wdHksXG4gIGNyZWF0ZUVsZW1lbnRGcm9tSFRNTCxcbiAgY3JlYXRlU2xhdGVNYXJrdXAsXG4gIHByb2Nlc3NNYXJrdXAsXG4gIHJlbW92ZVVud2FudGVkQ2hhcmFjdGVycyxcbn0gZnJvbSAnLi4vbWFya3VwVXRpbHMnO1xuXG5kZXNjcmliZSgnbWFya3VwVXRpbHMnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdjcmVhdGVFbGVtZW50RnJvbUhUTUwnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBjcmVhdGUgZG9tIGVsZW1lbnQgZnJvbSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCBlbCA9IGNyZWF0ZUVsZW1lbnRGcm9tSFRNTChgPGRpdj5Gb28gQmFyPC9kaXY+YCk7XG5cbiAgICAgIGV4cGVjdChlbC5vdXRlckhUTUwpLnRvRXF1YWwoJzxkaXY+PGRpdj5Gb28gQmFyPC9kaXY+PC9kaXY+Jyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyZW1vdmVVbndhbnRlZENoYXJhY3RlcnMnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZW1vdmUgXFxcXHQgYW5kIFxcXFxuIGNoYXJhY3RlcnMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QocmVtb3ZlVW53YW50ZWRDaGFyYWN0ZXJzKCc8ZGl2PmZvb1xcdFxcbmJhcjwvZGl2PicpKS50b0VxdWFsKCc8ZGl2PmZvb2JhcjwvZGl2PicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZW1vdmUgXFxcXHQgYW5kIFxcXFxuIGNoYXJhY3RlcnMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QocmVtb3ZlVW53YW50ZWRDaGFyYWN0ZXJzKCc8ZGl2PmZvb1xcXFx0XFxcXG5iYXI8L2Rpdj4nKSkudG9FcXVhbCgnPGRpdj5mb29iYXI8L2Rpdj4nKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVwbGFjZSBcXFxcXCIgd2l0aCBcIicsICgpID0+IHtcbiAgICAgIGV4cGVjdChyZW1vdmVVbndhbnRlZENoYXJhY3RlcnMoJzxkaXY+XCJmb28gYmFyXCI8L2Rpdj4nKSkudG9FcXVhbCgnPGRpdj5cImZvbyBiYXJcIjwvZGl2PicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXBsYWNlIFxcXFwvIHdpdGggLycsICgpID0+IHtcbiAgICAgIGV4cGVjdChyZW1vdmVVbndhbnRlZENoYXJhY3RlcnMoJzxkaXY+Zm9vL2JhcjwvZGl2PicpKS50b0VxdWFsKCc8ZGl2PmZvby9iYXI8L2Rpdj4nKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IHJlbW92ZSBcXFxcdCBjaGFyYWN0ZXIgd2hpY2ggaGFzIGxhdGV4IGxpa2UgXFxcXHRpbWVzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KFxuICAgICAgICByZW1vdmVVbndhbnRlZENoYXJhY3RlcnMoJzxkaXY+PHNwYW4gZGF0YS1sYXRleD1cIlwiIGRhdGEtcmF3PVwiM1xcXFx0aW1lczNcXFxcZGl2MlwiPjNcXFxcdGltZXMzXFxcXGRpdjI8L3NwYW4+PC9kaXY+JyksXG4gICAgICApLnRvRXF1YWwoJzxkaXY+PHNwYW4gZGF0YS1sYXRleD1cIlwiIGRhdGEtcmF3PVwiM1xcXFx0aW1lczNcXFxcZGl2MlwiPjNcXFxcdGltZXMzXFxcXGRpdjI8L3NwYW4+PC9kaXY+Jyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdwcm9jZXNzTWFya3VwJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZ2V0IGNob2ljZXMsIG1hcmt1cCBhbmQgY29ycmVjdFJlc3BvbnNlIGZyb20gbWFya3VwJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWFya3VwID0gW1xuICAgICAgICAnPGRpdj4nLFxuICAgICAgICAnPHNwYW4gZGF0YS10eXBlPVwiZHJhZ19pbl90aGVfYmxhbmtcIiBkYXRhLXZhbHVlPVwiZm9vYmFyXCIgZGF0YS1pZD1cIjBcIj48L3NwYW4+JyxcbiAgICAgICAgJzxzcGFuIGRhdGEtdHlwZT1cImRyYWdfaW5fdGhlX2JsYW5rXCIgZGF0YS12YWx1ZT1cImJhcmZvb1wiIGRhdGEtaWQ9XCIxXCI+PC9zcGFuPicsXG4gICAgICAgICc8L2Rpdj4nLFxuICAgICAgXS5qb2luKCcnKTtcbiAgICAgIGNvbnN0IHByb2Nlc3NlZCA9IHByb2Nlc3NNYXJrdXAobWFya3VwKTtcblxuICAgICAgZXhwZWN0KHByb2Nlc3NlZCkudG9FcXVhbChcbiAgICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgIG1hcmt1cDogWyc8ZGl2PicsICd7ezB9fScsICd7ezF9fScsICc8L2Rpdj4nXS5qb2luKCcnKSxcbiAgICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZhbHVlOiAnZm9vYmFyJyxcbiAgICAgICAgICAgICAgaWQ6ICcwJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZhbHVlOiAnYmFyZm9vJyxcbiAgICAgICAgICAgICAgaWQ6ICcxJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IHtcbiAgICAgICAgICAgIDA6ICcwJyxcbiAgICAgICAgICAgIDE6ICcxJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICAvLyBUT0RPOiBub3Qgc3VyZSBpZiB0aGlzIHRlc3QgaXMgdmVyeSBnb29kXG4gICAgaXQoJ3Nob3VsZCBnZXQgdmFsdWUgd2l0aCAmbmJzcDsgcmVwbGFjZWQgd2l0aCBhIHJlZ3VsYXIgc3BhY2UnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtYXJrdXAgPSBbXG4gICAgICAgICc8ZGl2PicsXG4gICAgICAgICc8c3BhbiBkYXRhLXR5cGU9XCJkcmFnX2luX3RoZV9ibGFua1wiIGRhdGEtdmFsdWU9XCJmb28mbmJzcDtiYXJcIiBkYXRhLWlkPVwiMFwiPjwvc3Bhbj4nLFxuICAgICAgICAnPC9kaXY+JyxcbiAgICAgIF0uam9pbignJyk7XG4gICAgICBjb25zdCBwcm9jZXNzZWQgPSBwcm9jZXNzTWFya3VwKG1hcmt1cCk7XG5cbiAgICAgIGV4cGVjdChlbmNvZGVVUklDb21wb25lbnQocHJvY2Vzc2VkLmNob2ljZXNbMF0udmFsdWUpKS50b0VxdWFsKCdmb28lQzIlQTBiYXInKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2NyZWF0ZVNsYXRlTWFya3VwJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgY3JlYXRlIHNsYXRlIG1hcmt1cCBmcm9tIHRoZSByZWd1bGFyIG1hcmt1cCwgY2hvaWNlcyBhbmQgY29ycmVjdFJlc3BvbnNlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IG1hcmt1cCA9IFsnPGRpdj4nLCAne3swfX0nLCAne3sxfX0nLCAnPC9kaXY+J10uam9pbignJyk7XG4gICAgICBjb25zdCBjaG9pY2VzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgdmFsdWU6ICdmb29iYXInLFxuICAgICAgICAgIGlkOiAnMCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB2YWx1ZTogJ2JhcmZvbycsXG4gICAgICAgICAgaWQ6ICcxJyxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBjb3JyZWN0UmVzcG9uc2UgPSB7XG4gICAgICAgIDA6ICcwJyxcbiAgICAgICAgMTogJzEnLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHNsYXRlTWFya3VwID0gY3JlYXRlU2xhdGVNYXJrdXAobWFya3VwLCBjaG9pY2VzLCBjb3JyZWN0UmVzcG9uc2UpO1xuXG4gICAgICBleHBlY3Qoc2xhdGVNYXJrdXApLnRvRXF1YWwoXG4gICAgICAgIFtcbiAgICAgICAgICAnPGRpdj4nLFxuICAgICAgICAgICc8c3BhbiBkYXRhLXR5cGU9XCJkcmFnX2luX3RoZV9ibGFua1wiIGRhdGEtaW5kZXg9XCIwXCIgZGF0YS1pZD1cIjBcIiBkYXRhLXZhbHVlPVwiZm9vYmFyXCI+PC9zcGFuPicsXG4gICAgICAgICAgJzxzcGFuIGRhdGEtdHlwZT1cImRyYWdfaW5fdGhlX2JsYW5rXCIgZGF0YS1pbmRleD1cIjFcIiBkYXRhLWlkPVwiMVwiIGRhdGEtdmFsdWU9XCJiYXJmb29cIj48L3NwYW4+JyxcbiAgICAgICAgICAnPC9kaXY+JyxcbiAgICAgICAgXS5qb2luKCcnKSxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBjaG9pY2VzIHdpdGggZW1wdHkgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWFya3VwID0gWyc8ZGl2PicsICd7ezB9fScsICd7ezF9fScsICc8L2Rpdj4nXS5qb2luKCcnKTtcbiAgICAgIGNvbnN0IGNob2ljZXMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICB2YWx1ZTogJ2Zvb2JhcicsXG4gICAgICAgICAgaWQ6ICcwJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgICBpZDogJzEnLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGNvcnJlY3RSZXNwb25zZSA9IHtcbiAgICAgICAgMDogJzAnLFxuICAgICAgICAxOiAnMScsXG4gICAgICB9O1xuICAgICAgY29uc3Qgc2xhdGVNYXJrdXAgPSBjcmVhdGVTbGF0ZU1hcmt1cChtYXJrdXAsIGNob2ljZXMsIGNvcnJlY3RSZXNwb25zZSk7XG5cbiAgICAgIGV4cGVjdChzbGF0ZU1hcmt1cCkudG9FcXVhbChcbiAgICAgICAgW1xuICAgICAgICAgICc8ZGl2PicsXG4gICAgICAgICAgJzxzcGFuIGRhdGEtdHlwZT1cImRyYWdfaW5fdGhlX2JsYW5rXCIgZGF0YS1pbmRleD1cIjBcIiBkYXRhLWlkPVwiMFwiIGRhdGEtdmFsdWU9XCJmb29iYXJcIj48L3NwYW4+JyxcbiAgICAgICAgICAnPHNwYW4gZGF0YS10eXBlPVwiZHJhZ19pbl90aGVfYmxhbmtcIiBkYXRhLWluZGV4PVwiMVwiIGRhdGEtaWQ9XCJcIiBkYXRhLXZhbHVlPVwiXCI+PC9zcGFuPicsXG4gICAgICAgICAgJzwvZGl2PicsXG4gICAgICAgIF0uam9pbignJyksXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY2hvaWNlSXNFbXB0eScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBpZiBjaG9pY2UgaXMgbnVsbCBvciB1bmRlZmluZWQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoY2hvaWNlSXNFbXB0eShudWxsKSkudG9FcXVhbChmYWxzZSk7XG5cbiAgICAgIGV4cGVjdChjaG9pY2VJc0VtcHR5KHVuZGVmaW5lZCkpLnRvRXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgY2hvaWNlcyB3aXRoIG5vIHZhbHVlIHByb3ZpZGVkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGNob2ljZUlzRW1wdHkoe30pKS50b0VxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgY2hvaWNlcyB3aXRoIGltZyB0YWdzIHByb3ZpZGVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWFya3VwID0gWyc8ZGl2PicsICc8aW1nIHNyYz1cImZvb2JhclwiIC8+JywgJzwvZGl2PiddLmpvaW4oJycpO1xuXG4gICAgICBleHBlY3QoY2hvaWNlSXNFbXB0eSh7IHZhbHVlOiBtYXJrdXAgfSkpLnRvRXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBLElBQUFBLFlBQUEsR0FBQUMsT0FBQTtBQVFBQyxRQUFRLENBQUMsYUFBYSxFQUFFLE1BQU07RUFDNUJBLFFBQVEsQ0FBQyx1QkFBdUIsRUFBRSxNQUFNO0lBQ3RDQyxFQUFFLENBQUMsdUNBQXVDLEVBQUUsTUFBTTtNQUNoRCxNQUFNQyxFQUFFLEdBQUcsSUFBQUMsa0NBQXFCLEVBQUMsb0JBQW9CLENBQUM7TUFFdERDLE1BQU0sQ0FBQ0YsRUFBRSxDQUFDRyxTQUFTLENBQUMsQ0FBQ0MsT0FBTyxDQUFDLCtCQUErQixDQUFDO0lBQy9ELENBQUMsQ0FBQztFQUNKLENBQUMsQ0FBQztFQUVGTixRQUFRLENBQUMsMEJBQTBCLEVBQUUsTUFBTTtJQUN6Q0MsRUFBRSxDQUFDLHNDQUFzQyxFQUFFLE1BQU07TUFDL0NHLE1BQU0sQ0FBQyxJQUFBRyxxQ0FBd0IsRUFBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUNELE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztJQUN4RixDQUFDLENBQUM7SUFFRkwsRUFBRSxDQUFDLHNDQUFzQyxFQUFFLE1BQU07TUFDL0NHLE1BQU0sQ0FBQyxJQUFBRyxxQ0FBd0IsRUFBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUNELE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztJQUMxRixDQUFDLENBQUM7SUFFRkwsRUFBRSxDQUFDLDJCQUEyQixFQUFFLE1BQU07TUFDcENHLE1BQU0sQ0FBQyxJQUFBRyxxQ0FBd0IsRUFBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUNELE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQztJQUMxRixDQUFDLENBQUM7SUFFRkwsRUFBRSxDQUFD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RSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDQyxJQUFJLENBQUMsRUFBRSxDQUFDO01BQzdELE1BQU1JLE9BQU8sR0FBRyxDQUNkO1FBQ0VDLEtBQUssRUFBRSxRQUFRO1FBQ2ZDLEVBQUUsRUFBRTtNQUNOLENBQUMsRUFDRDtRQUNFRCxLQUFLLEVBQUUsRUFBRTtRQUNUQyxFQUFFLEVBQUU7TUFDTixDQUFDLENBQ0Y7TUFDRCxNQUFNQyxlQUFlLEdBQUc7UUFDdEIsQ0FBQyxFQUFFLEdBQUc7UUFDTixDQUFDLEVBQUU7TUFDTCxDQUFDO01BQ0QsTUFBTUUsV0FBVyxHQUFHLElBQUFDLDhCQUFpQixFQUFDWCxNQUFNLEVBQUVLLE9BQU8sRUFBRUcsZUFBZSxDQUFDO01BRXZFWixNQUFNLENBQUNjLFdBQVcsQ0FBQyxDQUFDWixPQUFPLENBQ3pCLENBQ0UsT0FBTyxFQUNQLDRGQUE0RixFQUM1RixxRkFBcUYsRUFDckYsUUFBUSxDQUNULENBQUNHLElBQUksQ0FBQyxFQUFFLENBQ1gsQ0FBQztJQUNILENBQUMsQ0FBQztFQUNKLENBQUMsQ0FBQztFQUVGVCxRQUFRLENBQUMsZUFBZSxFQUFFLE1BQU07SUFDOUJDLEVBQUUsQ0FBQyxvREFBb0QsRUFBRSxNQUFNO01BQzdERyxNQUFNLENBQUMsSUFBQWdCLDBCQUFhLEVBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQztNQUUxQ0YsTUFBTSxDQUFDLElBQUFnQiwwQkFBYSxFQUFDQyxTQUFTLENBQUMsQ0FBQyxDQUFDZixPQUFPLENBQUMsS0FBSyxDQUFDO0lBQ2pELENBQUMsQ0FBQztJQUVGTCxFQUFFLENBQUMsOENBQThDLEVBQUUsTUFBTTtNQUN2REcsTUFBTSxDQUFDLElBQUFnQiwwQkFBYSxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2QsT0FBTyxDQUFDLElBQUksQ0FBQztJQUN6QyxDQUFDLENBQUM7SUFFRkwsRUFBRSxDQUFDLDhDQUE4QyxFQUFFLE1BQU07TUFDdkQsTUFBTU8sTUFBTSxHQUFHLENBQUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLFFBQVEsQ0FBQyxDQUFDQyxJQUFJLENBQUMsRUFBRSxDQUFDO01BRW5FTCxNQUFNLENBQUMsSUFBQWdCLDBCQUFhLEVBQUM7UUFBRU4sS0FBSyxFQUFFTjtNQUFPLENBQUMsQ0FBQyxDQUFDLENBQUNGLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDekQsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwiaWdub3JlTGlzdCI6W119
|
package/configure/lib/choice.js
DELETED
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.default = exports.BlankContent = void 0;
|
|
8
|
-
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
|
-
var _react = _interopRequireDefault(require("react"));
|
|
10
|
-
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
11
|
-
var _MoreVert = _interopRequireDefault(require("@mui/icons-material/MoreVert"));
|
|
12
|
-
var _Delete = _interopRequireDefault(require("@mui/icons-material/Delete"));
|
|
13
|
-
var _core = require("@dnd-kit/core");
|
|
14
|
-
var _styles = require("@mui/material/styles");
|
|
15
|
-
var _markupUtils = require("./markupUtils");
|
|
16
|
-
const GripIcon = ({
|
|
17
|
-
style
|
|
18
|
-
}) => /*#__PURE__*/_react.default.createElement("span", {
|
|
19
|
-
style: style
|
|
20
|
-
}, /*#__PURE__*/_react.default.createElement(_MoreVert.default, {
|
|
21
|
-
style: {
|
|
22
|
-
margin: '0 -16px'
|
|
23
|
-
}
|
|
24
|
-
}), /*#__PURE__*/_react.default.createElement(_MoreVert.default, null));
|
|
25
|
-
GripIcon.propTypes = {
|
|
26
|
-
style: _propTypes.default.object
|
|
27
|
-
};
|
|
28
|
-
const StyledChoice = (0, _styles.styled)('div', {
|
|
29
|
-
shouldForwardProp: prop => !['error', 'isDragging'].includes(prop)
|
|
30
|
-
})(({
|
|
31
|
-
theme,
|
|
32
|
-
error
|
|
33
|
-
}) => ({
|
|
34
|
-
display: 'inline-flex',
|
|
35
|
-
minWidth: '178px',
|
|
36
|
-
minHeight: '36px',
|
|
37
|
-
background: theme.palette.common.white,
|
|
38
|
-
boxSizing: 'border-box',
|
|
39
|
-
borderRadius: '3px',
|
|
40
|
-
overflow: 'hidden',
|
|
41
|
-
position: 'relative',
|
|
42
|
-
padding: '8px 35px 8px 35px',
|
|
43
|
-
cursor: 'grab',
|
|
44
|
-
border: `1px solid ${error ? '#f44336' : '#C0C3CF'}`,
|
|
45
|
-
'& img': {
|
|
46
|
-
display: 'flex'
|
|
47
|
-
},
|
|
48
|
-
// browser adds extra marrgin for p tags by default
|
|
49
|
-
'& p': {
|
|
50
|
-
margin: 0
|
|
51
|
-
},
|
|
52
|
-
'& mjx-frac': {
|
|
53
|
-
fontSize: '120% !important'
|
|
54
|
-
}
|
|
55
|
-
}));
|
|
56
|
-
const StyledDeleteIcon = (0, _styles.styled)(_Delete.default)(({
|
|
57
|
-
theme
|
|
58
|
-
}) => ({
|
|
59
|
-
position: 'absolute',
|
|
60
|
-
top: '6px',
|
|
61
|
-
right: '0',
|
|
62
|
-
color: theme.palette.grey[500],
|
|
63
|
-
zIndex: 2,
|
|
64
|
-
'&:hover': {
|
|
65
|
-
cursor: 'pointer',
|
|
66
|
-
color: theme.palette.common.black
|
|
67
|
-
}
|
|
68
|
-
}));
|
|
69
|
-
const BlankContent = props => {
|
|
70
|
-
const {
|
|
71
|
-
choice,
|
|
72
|
-
onClick,
|
|
73
|
-
onRemoveChoice,
|
|
74
|
-
error,
|
|
75
|
-
instanceId,
|
|
76
|
-
disabled
|
|
77
|
-
} = props;
|
|
78
|
-
const {
|
|
79
|
-
attributes,
|
|
80
|
-
listeners,
|
|
81
|
-
setNodeRef,
|
|
82
|
-
isDragging
|
|
83
|
-
} = (0, _core.useDraggable)({
|
|
84
|
-
id: `choice-${choice.id}-${instanceId || 'default'}`,
|
|
85
|
-
data: {
|
|
86
|
-
type: 'drag-in-the-blank-choice',
|
|
87
|
-
id: choice.id,
|
|
88
|
-
value: choice,
|
|
89
|
-
instanceId: instanceId
|
|
90
|
-
},
|
|
91
|
-
disabled: disabled || (0, _markupUtils.choiceIsEmpty)(choice)
|
|
92
|
-
});
|
|
93
|
-
const handleDragStart = e => {
|
|
94
|
-
if ((0, _markupUtils.choiceIsEmpty)(choice)) {
|
|
95
|
-
e.preventDefault();
|
|
96
|
-
alert('You need to define a value for an answer choice before it can be associated with a response area.');
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
};
|
|
100
|
-
return /*#__PURE__*/_react.default.createElement(StyledChoice, (0, _extends2.default)({
|
|
101
|
-
ref: setNodeRef,
|
|
102
|
-
error: error,
|
|
103
|
-
isDragging: isDragging,
|
|
104
|
-
onClick: onClick
|
|
105
|
-
}, attributes, listeners, {
|
|
106
|
-
onDragStart: handleDragStart
|
|
107
|
-
}), /*#__PURE__*/_react.default.createElement(GripIcon, {
|
|
108
|
-
style: {
|
|
109
|
-
position: 'absolute',
|
|
110
|
-
top: '6px',
|
|
111
|
-
left: '15px',
|
|
112
|
-
color: '#9e9e9e',
|
|
113
|
-
zIndex: 2
|
|
114
|
-
}
|
|
115
|
-
}), /*#__PURE__*/_react.default.createElement("span", {
|
|
116
|
-
dangerouslySetInnerHTML: {
|
|
117
|
-
__html: choice.value
|
|
118
|
-
}
|
|
119
|
-
}), /*#__PURE__*/_react.default.createElement(StyledDeleteIcon, {
|
|
120
|
-
onClick: e => {
|
|
121
|
-
e.preventDefault();
|
|
122
|
-
e.stopPropagation();
|
|
123
|
-
onRemoveChoice(e);
|
|
124
|
-
}
|
|
125
|
-
}));
|
|
126
|
-
};
|
|
127
|
-
exports.BlankContent = BlankContent;
|
|
128
|
-
BlankContent.propTypes = {
|
|
129
|
-
choice: _propTypes.default.object.isRequired,
|
|
130
|
-
onClick: _propTypes.default.func,
|
|
131
|
-
onRemoveChoice: _propTypes.default.func.isRequired,
|
|
132
|
-
error: _propTypes.default.bool,
|
|
133
|
-
instanceId: _propTypes.default.string,
|
|
134
|
-
disabled: _propTypes.default.bool
|
|
135
|
-
};
|
|
136
|
-
var _default = exports.default = BlankContent;
|
|
137
|
-
//# sourceMappingURL=choice.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"choice.js","names":["_react","_interopRequireDefault","require","_propTypes","_MoreVert","_Delete","_core","_styles","_markupUtils","GripIcon","style","default","createElement","margin","propTypes","PropTypes","object","StyledChoice","styled","shouldForwardProp","prop","includes","theme","error","display","minWidth","minHeight","background","palette","common","white","boxSizing","borderRadius","overflow","position","padding","cursor","border","fontSize","StyledDeleteIcon","Delete","top","right","color","grey","zIndex","black","BlankContent","props","choice","onClick","onRemoveChoice","instanceId","disabled","attributes","listeners","setNodeRef","isDragging","useDraggable","id","data","type","value","choiceIsEmpty","handleDragStart","e","preventDefault","alert","_extends2","ref","onDragStart","left","dangerouslySetInnerHTML","__html","stopPropagation","exports","isRequired","func","bool","string","_default"],"sources":["../src/choice.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport MoreVert from '@mui/icons-material/MoreVert';\nimport Delete from '@mui/icons-material/Delete';\nimport { useDraggable } from '@dnd-kit/core';\nimport { styled } from '@mui/material/styles';\nimport { choiceIsEmpty } from './markupUtils';\n\nconst GripIcon = ({ style }) => (\n <span style={style}>\n <MoreVert style={{ margin: '0 -16px' }} />\n <MoreVert />\n </span>\n);\n\nGripIcon.propTypes = {\n style: PropTypes.object,\n};\n\nconst StyledChoice = styled('div', {\n shouldForwardProp: (prop) => !['error', 'isDragging'].includes(prop),\n})(({ theme, error }) => ({\n display: 'inline-flex',\n minWidth: '178px',\n minHeight: '36px',\n background: theme.palette.common.white,\n boxSizing: 'border-box',\n borderRadius: '3px',\n overflow: 'hidden',\n position: 'relative',\n padding: '8px 35px 8px 35px',\n cursor: 'grab',\n border: `1px solid ${error ? '#f44336' : '#C0C3CF'}`,\n '& img': {\n display: 'flex',\n },\n // browser adds extra marrgin for p tags by default\n '& p': {\n margin: 0,\n },\n '& mjx-frac': {\n fontSize: '120% !important',\n },\n}));\n\nconst StyledDeleteIcon = styled(Delete)(({ theme }) => ({\n position: 'absolute',\n top: '6px',\n right: '0',\n color: theme.palette.grey[500],\n zIndex: 2,\n '&:hover': {\n cursor: 'pointer',\n color: theme.palette.common.black,\n },\n}));\n\nexport const BlankContent = (props) => {\n const { choice, onClick, onRemoveChoice, error, instanceId, disabled } = props;\n const { attributes, listeners, setNodeRef, isDragging } = useDraggable({\n id: `choice-${choice.id}-${instanceId || 'default'}`,\n data: {\n type: 'drag-in-the-blank-choice',\n id: choice.id,\n value: choice,\n instanceId: instanceId,\n },\n disabled: disabled || choiceIsEmpty(choice),\n });\n\n const handleDragStart = (e) => {\n if (choiceIsEmpty(choice)) {\n e.preventDefault();\n alert('You need to define a value for an answer choice before it can be associated with a response area.');\n return;\n }\n };\n\n return (\n <StyledChoice\n ref={setNodeRef}\n error={error}\n isDragging={isDragging}\n onClick={onClick}\n {...attributes}\n {...listeners}\n onDragStart={handleDragStart}\n >\n <GripIcon\n style={{\n position: 'absolute',\n top: '6px',\n left: '15px',\n color: '#9e9e9e',\n zIndex: 2,\n }}\n />\n\n <span dangerouslySetInnerHTML={{ __html: choice.value }} />\n\n <StyledDeleteIcon\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n\n onRemoveChoice(e);\n }}\n />\n </StyledChoice>\n );\n};\n\nBlankContent.propTypes = {\n choice: PropTypes.object.isRequired,\n onClick: PropTypes.func,\n onRemoveChoice: PropTypes.func.isRequired,\n error: PropTypes.bool,\n instanceId: PropTypes.string,\n disabled: PropTypes.bool,\n};\n\nexport default BlankContent;\n"],"mappings":"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","ignoreList":[]}
|
package/configure/lib/choices.js
DELETED
|
@@ -1,332 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.default = exports.Choices = void 0;
|
|
8
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
|
-
var _react = _interopRequireDefault(require("react"));
|
|
10
|
-
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
11
|
-
var _editableHtmlTipTap = _interopRequireDefault(require("@pie-lib/editable-html-tip-tap"));
|
|
12
|
-
var _configUi = require("@pie-lib/config-ui");
|
|
13
|
-
var _Button = _interopRequireDefault(require("@mui/material/Button"));
|
|
14
|
-
var _styles = require("@mui/material/styles");
|
|
15
|
-
var _choice = _interopRequireDefault(require("./choice"));
|
|
16
|
-
var _markupUtils = require("./markupUtils");
|
|
17
|
-
var _mathRendering = require("@pie-lib/math-rendering");
|
|
18
|
-
const StyledDesign = (0, _styles.styled)('div')(({
|
|
19
|
-
theme
|
|
20
|
-
}) => ({
|
|
21
|
-
display: 'flex',
|
|
22
|
-
flexDirection: 'column',
|
|
23
|
-
marginBottom: theme.spacing(1.5)
|
|
24
|
-
}));
|
|
25
|
-
const StyledAddButton = (0, _styles.styled)(_Button.default)({
|
|
26
|
-
marginLeft: 'auto'
|
|
27
|
-
});
|
|
28
|
-
const StyledAltChoices = (0, _styles.styled)('div')(({
|
|
29
|
-
theme
|
|
30
|
-
}) => ({
|
|
31
|
-
alignItems: 'flex-start',
|
|
32
|
-
display: 'flex',
|
|
33
|
-
flexWrap: 'wrap',
|
|
34
|
-
justifyContent: 'space-evenly',
|
|
35
|
-
marginTop: theme.spacing(1),
|
|
36
|
-
'& > *': {
|
|
37
|
-
margin: theme.spacing(1)
|
|
38
|
-
}
|
|
39
|
-
}));
|
|
40
|
-
const ErrorText = (0, _styles.styled)('div')(({
|
|
41
|
-
theme
|
|
42
|
-
}) => ({
|
|
43
|
-
fontSize: theme.typography.fontSize - 2,
|
|
44
|
-
color: theme.palette.error.main,
|
|
45
|
-
paddingBottom: theme.spacing(2)
|
|
46
|
-
}));
|
|
47
|
-
class Choices extends _react.default.Component {
|
|
48
|
-
constructor(...args) {
|
|
49
|
-
super(...args);
|
|
50
|
-
(0, _defineProperty2.default)(this, "state", {
|
|
51
|
-
warning: {
|
|
52
|
-
open: false
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
(0, _defineProperty2.default)(this, "preventDone", false);
|
|
56
|
-
(0, _defineProperty2.default)(this, "wrapperRef", /*#__PURE__*/_react.default.createRef(null));
|
|
57
|
-
(0, _defineProperty2.default)(this, "onChoiceChanged", (prevValue, val, key) => {
|
|
58
|
-
const {
|
|
59
|
-
onChange,
|
|
60
|
-
model
|
|
61
|
-
} = this.props;
|
|
62
|
-
const {
|
|
63
|
-
choices,
|
|
64
|
-
correctResponse,
|
|
65
|
-
alternateResponses
|
|
66
|
-
} = model;
|
|
67
|
-
if ((0, _markupUtils.choiceIsEmpty)({
|
|
68
|
-
value: prevValue
|
|
69
|
-
}) && (0, _markupUtils.choiceIsEmpty)({
|
|
70
|
-
value: val
|
|
71
|
-
})) {
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
const duplicatedValue = (choices || []).find(c => c.value === val && c.id !== key);
|
|
75
|
-
|
|
76
|
-
// discard the new added choice or the changes if the choice would be a duplicate to one that already exists
|
|
77
|
-
if (duplicatedValue) {
|
|
78
|
-
if (prevValue === '') {
|
|
79
|
-
// remove the new added choice from choices
|
|
80
|
-
const newChoices = (choices || []).filter(c => c.id !== key);
|
|
81
|
-
onChange(newChoices);
|
|
82
|
-
}
|
|
83
|
-
this.setState({
|
|
84
|
-
warning: {
|
|
85
|
-
open: true,
|
|
86
|
-
text: 'Identical answer choices are not allowed and the changes will be discarded.'
|
|
87
|
-
}
|
|
88
|
-
});
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
const newChoices = choices?.map(choice => choice.id === key ? {
|
|
92
|
-
...choice,
|
|
93
|
-
value: val
|
|
94
|
-
} : choice) || [];
|
|
95
|
-
if (!(0, _markupUtils.choiceIsEmpty)({
|
|
96
|
-
value: val
|
|
97
|
-
})) {
|
|
98
|
-
onChange(newChoices);
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
// if the edited content is empty, its usage has to be searched in the correct response definitions
|
|
103
|
-
let usedForResponse = false;
|
|
104
|
-
if (correctResponse) {
|
|
105
|
-
Object.keys(correctResponse).forEach(responseKey => {
|
|
106
|
-
if (correctResponse[responseKey] === key) {
|
|
107
|
-
usedForResponse = true;
|
|
108
|
-
}
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
if (alternateResponses && !usedForResponse) {
|
|
112
|
-
Object.values(alternateResponses).forEach(alternate => {
|
|
113
|
-
if (alternate.indexOf(key) >= 0) {
|
|
114
|
-
usedForResponse = true;
|
|
115
|
-
}
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
if (usedForResponse) {
|
|
119
|
-
this.setState({
|
|
120
|
-
warning: {
|
|
121
|
-
open: true,
|
|
122
|
-
text: 'Answer choices cannot be blank and the changes will be discarded.'
|
|
123
|
-
}
|
|
124
|
-
});
|
|
125
|
-
return;
|
|
126
|
-
}
|
|
127
|
-
onChange(newChoices);
|
|
128
|
-
});
|
|
129
|
-
(0, _defineProperty2.default)(this, "onChoiceDone", (choiceId, latestValue) => {
|
|
130
|
-
const {
|
|
131
|
-
onChange,
|
|
132
|
-
model
|
|
133
|
-
} = this.props;
|
|
134
|
-
const {
|
|
135
|
-
choices
|
|
136
|
-
} = model;
|
|
137
|
-
const currentChoice = (choices || []).find(c => c.id === choiceId);
|
|
138
|
-
|
|
139
|
-
// model.choices[i].value can be stale when the editor's onChange did not fire for the most recent edit
|
|
140
|
-
// (for example, image uploads). In that case, we want to use the latest value from the editor.
|
|
141
|
-
const effectiveValue = latestValue !== undefined ? latestValue : currentChoice && currentChoice.value;
|
|
142
|
-
if (!currentChoice || !(0, _markupUtils.choiceIsEmpty)({
|
|
143
|
-
value: effectiveValue
|
|
144
|
-
})) {
|
|
145
|
-
if (currentChoice && currentChoice.value !== effectiveValue) {
|
|
146
|
-
const newChoices = (choices || []).map(c => c.id === choiceId ? {
|
|
147
|
-
...c,
|
|
148
|
-
value: effectiveValue
|
|
149
|
-
} : c);
|
|
150
|
-
onChange(newChoices);
|
|
151
|
-
}
|
|
152
|
-
this.setState({
|
|
153
|
-
focusedEl: undefined
|
|
154
|
-
});
|
|
155
|
-
return;
|
|
156
|
-
}
|
|
157
|
-
onChange((choices || []).filter(c => c.id !== choiceId));
|
|
158
|
-
this.setState({
|
|
159
|
-
focusedEl: undefined,
|
|
160
|
-
warning: {
|
|
161
|
-
open: true,
|
|
162
|
-
text: 'Answer choices cannot be blank.'
|
|
163
|
-
}
|
|
164
|
-
});
|
|
165
|
-
});
|
|
166
|
-
(0, _defineProperty2.default)(this, "onChoiceFocus", id => this.setState({
|
|
167
|
-
focusedEl: id
|
|
168
|
-
}));
|
|
169
|
-
(0, _defineProperty2.default)(this, "onAddChoice", () => {
|
|
170
|
-
const {
|
|
171
|
-
model: {
|
|
172
|
-
choices: oldChoices
|
|
173
|
-
},
|
|
174
|
-
onChange
|
|
175
|
-
} = this.props;
|
|
176
|
-
|
|
177
|
-
// find the maximum existing id and add 1 to generate the new id so we avoid duplicates
|
|
178
|
-
const maxId = oldChoices.length > 0 ? Math.max(...oldChoices.map(choice => parseInt(choice.id, 10) || 0)) : -1;
|
|
179
|
-
const newId = `${maxId + 1}`;
|
|
180
|
-
this.setState({
|
|
181
|
-
focusedEl: newId
|
|
182
|
-
}, () => {
|
|
183
|
-
onChange([...oldChoices, {
|
|
184
|
-
id: newId,
|
|
185
|
-
value: ''
|
|
186
|
-
}]);
|
|
187
|
-
});
|
|
188
|
-
});
|
|
189
|
-
(0, _defineProperty2.default)(this, "onChoiceRemove", id => {
|
|
190
|
-
const {
|
|
191
|
-
onChange,
|
|
192
|
-
model: {
|
|
193
|
-
choices
|
|
194
|
-
}
|
|
195
|
-
} = this.props;
|
|
196
|
-
const newChoices = (choices || []).filter(choice => choice.id !== id);
|
|
197
|
-
onChange(newChoices);
|
|
198
|
-
});
|
|
199
|
-
(0, _defineProperty2.default)(this, "getVisibleChoices", () => {
|
|
200
|
-
const {
|
|
201
|
-
duplicates,
|
|
202
|
-
model: {
|
|
203
|
-
choices,
|
|
204
|
-
correctResponse
|
|
205
|
-
}
|
|
206
|
-
} = this.props;
|
|
207
|
-
if (!choices) {
|
|
208
|
-
return [];
|
|
209
|
-
}
|
|
210
|
-
if (duplicates) {
|
|
211
|
-
return choices;
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
// if duplicates not allowed, remove the choices that are used to define the correct response
|
|
215
|
-
return choices.filter(choice => !(correctResponse && Object.values(correctResponse).includes(choice.id)));
|
|
216
|
-
});
|
|
217
|
-
}
|
|
218
|
-
componentDidUpdate() {
|
|
219
|
-
if (this.focusedNodeRef) {
|
|
220
|
-
this.focusedNodeRef.focus('end');
|
|
221
|
-
}
|
|
222
|
-
(0, _mathRendering.renderMath)(this.wrapperRef.current);
|
|
223
|
-
}
|
|
224
|
-
render() {
|
|
225
|
-
const {
|
|
226
|
-
focusedEl,
|
|
227
|
-
warning
|
|
228
|
-
} = this.state;
|
|
229
|
-
const {
|
|
230
|
-
duplicates,
|
|
231
|
-
error,
|
|
232
|
-
mathMlOptions = {},
|
|
233
|
-
maxChoices,
|
|
234
|
-
model: {
|
|
235
|
-
choices
|
|
236
|
-
},
|
|
237
|
-
toolbarOpts,
|
|
238
|
-
uploadSoundSupport,
|
|
239
|
-
imageSupport = {},
|
|
240
|
-
pluginProps = {},
|
|
241
|
-
maxImageWidth,
|
|
242
|
-
maxImageHeight,
|
|
243
|
-
maxLength
|
|
244
|
-
} = this.props;
|
|
245
|
-
const visibleChoices = this.getVisibleChoices() || [];
|
|
246
|
-
return /*#__PURE__*/_react.default.createElement(StyledDesign, {
|
|
247
|
-
ref: this.wrapperRef
|
|
248
|
-
}, /*#__PURE__*/_react.default.createElement(StyledAddButton, {
|
|
249
|
-
variant: "contained",
|
|
250
|
-
color: "primary",
|
|
251
|
-
onClick: this.onAddChoice,
|
|
252
|
-
disabled: maxChoices && choices && maxChoices === choices.length
|
|
253
|
-
}, "Add Choice"), /*#__PURE__*/_react.default.createElement(StyledAltChoices, null, visibleChoices.map((choice, index) => {
|
|
254
|
-
if (!choice || !choice.id) {
|
|
255
|
-
return null;
|
|
256
|
-
}
|
|
257
|
-
return focusedEl === choice.id ? /*#__PURE__*/_react.default.createElement("div", {
|
|
258
|
-
key: index,
|
|
259
|
-
style: {
|
|
260
|
-
minWidth: '100%',
|
|
261
|
-
zIndex: '100'
|
|
262
|
-
}
|
|
263
|
-
}, /*#__PURE__*/_react.default.createElement(_editableHtmlTipTap.default, {
|
|
264
|
-
ref: ref => this.focusedNodeRef = ref,
|
|
265
|
-
autoFocus: true,
|
|
266
|
-
imageSupport: imageSupport,
|
|
267
|
-
markup: choice.value,
|
|
268
|
-
pluginProps: pluginProps,
|
|
269
|
-
languageCharactersProps: [{
|
|
270
|
-
language: 'spanish'
|
|
271
|
-
}, {
|
|
272
|
-
language: 'special'
|
|
273
|
-
}],
|
|
274
|
-
onChange: val => {
|
|
275
|
-
if (this.preventDone) {
|
|
276
|
-
return;
|
|
277
|
-
}
|
|
278
|
-
this.onChoiceChanged(choice.value, val, choice.id);
|
|
279
|
-
},
|
|
280
|
-
onDone: val => {
|
|
281
|
-
if (this.preventDone) {
|
|
282
|
-
return;
|
|
283
|
-
}
|
|
284
|
-
this.onChoiceDone(choice.id, val);
|
|
285
|
-
},
|
|
286
|
-
onBlur: e => {
|
|
287
|
-
const inInInsertCharacter = e.relatedTarget && e.relatedTarget.closest('.insert-character-dialog');
|
|
288
|
-
this.preventDone = inInInsertCharacter;
|
|
289
|
-
},
|
|
290
|
-
disableUnderline: true,
|
|
291
|
-
toolbarOpts: toolbarOpts,
|
|
292
|
-
uploadSoundSupport: uploadSoundSupport,
|
|
293
|
-
mathMlOptions: mathMlOptions,
|
|
294
|
-
maxImageHeight: maxImageHeight,
|
|
295
|
-
maxImageWidth: maxImageWidth,
|
|
296
|
-
charactersLimit: maxLength
|
|
297
|
-
})) : /*#__PURE__*/_react.default.createElement(_choice.default, {
|
|
298
|
-
key: index,
|
|
299
|
-
duplicates: duplicates,
|
|
300
|
-
choice: choice,
|
|
301
|
-
error: error,
|
|
302
|
-
onClick: () => this.onChoiceFocus(choice.id),
|
|
303
|
-
onRemoveChoice: () => this.onChoiceRemove(choice.id)
|
|
304
|
-
});
|
|
305
|
-
})), error && /*#__PURE__*/_react.default.createElement(ErrorText, null, error), /*#__PURE__*/_react.default.createElement(_configUi.AlertDialog, {
|
|
306
|
-
open: warning.open,
|
|
307
|
-
title: "Warning",
|
|
308
|
-
text: warning.text,
|
|
309
|
-
onConfirm: () => this.setState({
|
|
310
|
-
warning: {
|
|
311
|
-
open: false
|
|
312
|
-
}
|
|
313
|
-
})
|
|
314
|
-
}));
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
exports.Choices = Choices;
|
|
318
|
-
(0, _defineProperty2.default)(Choices, "propTypes", {
|
|
319
|
-
duplicates: _propTypes.default.bool,
|
|
320
|
-
error: _propTypes.default.string,
|
|
321
|
-
model: _propTypes.default.object.isRequired,
|
|
322
|
-
onChange: _propTypes.default.func.isRequired,
|
|
323
|
-
toolbarOpts: _propTypes.default.object,
|
|
324
|
-
pluginProps: _propTypes.default.object,
|
|
325
|
-
maxChoices: _propTypes.default.number,
|
|
326
|
-
uploadSoundSupport: _propTypes.default.object,
|
|
327
|
-
maxImageWidth: _propTypes.default.number,
|
|
328
|
-
maxImageHeight: _propTypes.default.number,
|
|
329
|
-
maxLength: _propTypes.default.number
|
|
330
|
-
});
|
|
331
|
-
var _default = exports.default = Choices;
|
|
332
|
-
//# sourceMappingURL=choices.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"choices.js","names":["_react","_interopRequireDefault","require","_propTypes","_editableHtmlTipTap","_configUi","_Button","_styles","_choice","_markupUtils","_mathRendering","StyledDesign","styled","theme","display","flexDirection","marginBottom","spacing","StyledAddButton","Button","marginLeft","StyledAltChoices","alignItems","flexWrap","justifyContent","marginTop","margin","ErrorText","fontSize","typography","color","palette","error","main","paddingBottom","Choices","React","Component","constructor","args","_defineProperty2","default","warning","open","createRef","prevValue","val","key","onChange","model","props","choices","correctResponse","alternateResponses","choiceIsEmpty","value","duplicatedValue","find","c","id","newChoices","filter","setState","text","map","choice","usedForResponse","Object","keys","forEach","responseKey","values","alternate","indexOf","choiceId","latestValue","currentChoice","effectiveValue","undefined","focusedEl","oldChoices","maxId","length","Math","max","parseInt","newId","duplicates","includes","componentDidUpdate","focusedNodeRef","focus","renderMath","wrapperRef","current","render","state","mathMlOptions","maxChoices","toolbarOpts","uploadSoundSupport","imageSupport","pluginProps","maxImageWidth","maxImageHeight","maxLength","visibleChoices","getVisibleChoices","createElement","ref","variant","onClick","onAddChoice","disabled","index","style","minWidth","zIndex","autoFocus","markup","languageCharactersProps","language","preventDone","onChoiceChanged","onDone","onChoiceDone","onBlur","e","inInInsertCharacter","relatedTarget","closest","disableUnderline","charactersLimit","onChoiceFocus","onRemoveChoice","onChoiceRemove","AlertDialog","title","onConfirm","exports","PropTypes","bool","string","object","isRequired","func","number","_default"],"sources":["../src/choices.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport EditableHtml from '@pie-lib/editable-html-tip-tap';\nimport { AlertDialog } from '@pie-lib/config-ui';\nimport Button from '@mui/material/Button';\nimport { styled } from '@mui/material/styles';\n\nimport Choice from './choice';\nimport { choiceIsEmpty } from './markupUtils';\nimport { renderMath } from '@pie-lib/math-rendering';\n\nconst StyledDesign = styled('div')(({ theme }) => ({\n display: 'flex',\n flexDirection: 'column',\n marginBottom: theme.spacing(1.5),\n}));\n\nconst StyledAddButton = styled(Button)({\n marginLeft: 'auto',\n});\n\nconst StyledAltChoices = styled('div')(({ theme }) => ({\n alignItems: 'flex-start',\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'space-evenly',\n marginTop: theme.spacing(1),\n\n '& > *': {\n margin: theme.spacing(1),\n },\n}));\n\nconst ErrorText = styled('div')(({ theme }) => ({\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n paddingBottom: theme.spacing(2),\n}));\n\nexport class Choices extends React.Component {\n static propTypes = {\n duplicates: PropTypes.bool,\n error: PropTypes.string,\n model: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n toolbarOpts: PropTypes.object,\n pluginProps: PropTypes.object,\n maxChoices: PropTypes.number,\n uploadSoundSupport: PropTypes.object,\n maxImageWidth: PropTypes.number,\n maxImageHeight: PropTypes.number,\n maxLength: PropTypes.number,\n };\n\n state = { warning: { open: false } };\n preventDone = false;\n wrapperRef = React.createRef(null);\n\n componentDidUpdate() {\n if (this.focusedNodeRef) {\n this.focusedNodeRef.focus('end');\n }\n\n renderMath(this.wrapperRef.current);\n }\n\n onChoiceChanged = (prevValue, val, key) => {\n const { onChange, model } = this.props;\n const { choices, correctResponse, alternateResponses } = model;\n\n if (choiceIsEmpty({ value: prevValue }) && choiceIsEmpty({ value: val })) {\n return;\n }\n\n const duplicatedValue = (choices || []).find((c) => c.value === val && c.id !== key);\n\n // discard the new added choice or the changes if the choice would be a duplicate to one that already exists\n if (duplicatedValue) {\n if (prevValue === '') {\n // remove the new added choice from choices\n const newChoices = (choices || []).filter((c) => c.id !== key);\n\n onChange(newChoices);\n }\n\n this.setState({\n warning: {\n open: true,\n text: 'Identical answer choices are not allowed and the changes will be discarded.',\n },\n });\n\n return;\n }\n\n const newChoices = choices?.map((choice) => (choice.id === key ? { ...choice, value: val } : choice)) || [];\n\n if (!choiceIsEmpty({ value: val })) {\n onChange(newChoices);\n\n return;\n }\n\n // if the edited content is empty, its usage has to be searched in the correct response definitions\n let usedForResponse = false;\n\n if (correctResponse) {\n Object.keys(correctResponse).forEach((responseKey) => {\n if (correctResponse[responseKey] === key) {\n usedForResponse = true;\n }\n });\n }\n\n if (alternateResponses && !usedForResponse) {\n Object.values(alternateResponses).forEach((alternate) => {\n if (alternate.indexOf(key) >= 0) {\n usedForResponse = true;\n }\n });\n }\n\n if (usedForResponse) {\n this.setState({\n warning: {\n open: true,\n text: 'Answer choices cannot be blank and the changes will be discarded.',\n },\n });\n\n return;\n }\n\n onChange(newChoices);\n };\n\n onChoiceDone = (choiceId, latestValue) => {\n const { onChange, model } = this.props;\n const { choices } = model;\n const currentChoice = (choices || []).find((c) => c.id === choiceId);\n\n // model.choices[i].value can be stale when the editor's onChange did not fire for the most recent edit \n // (for example, image uploads). In that case, we want to use the latest value from the editor.\n const effectiveValue = latestValue !== undefined ? latestValue : currentChoice && currentChoice.value;\n\n if (!currentChoice || !choiceIsEmpty({ value: effectiveValue })) {\n if (currentChoice && currentChoice.value !== effectiveValue) {\n const newChoices = (choices || []).map((c) => (c.id === choiceId ? { ...c, value: effectiveValue } : c));\n onChange(newChoices);\n }\n this.setState({ focusedEl: undefined });\n return;\n }\n\n onChange((choices || []).filter((c) => c.id !== choiceId));\n\n this.setState({\n focusedEl: undefined,\n warning: {\n open: true,\n text: 'Answer choices cannot be blank.',\n },\n });\n };\n\n onChoiceFocus = (id) =>\n this.setState({\n focusedEl: id,\n });\n\n onAddChoice = () => {\n const {\n model: { choices: oldChoices },\n onChange,\n } = this.props;\n\n // find the maximum existing id and add 1 to generate the new id so we avoid duplicates\n const maxId = oldChoices.length > 0 ? Math.max(...oldChoices.map((choice) => parseInt(choice.id, 10) || 0)) : -1;\n const newId = `${maxId + 1}`;\n\n this.setState(\n {\n focusedEl: newId,\n },\n () => {\n onChange([\n ...oldChoices,\n {\n id: newId,\n value: '',\n },\n ]);\n },\n );\n };\n\n onChoiceRemove = (id) => {\n const {\n onChange,\n model: { choices },\n } = this.props;\n const newChoices = (choices || []).filter((choice) => choice.id !== id);\n\n onChange(newChoices);\n };\n\n getVisibleChoices = () => {\n const {\n duplicates,\n model: { choices, correctResponse },\n } = this.props;\n\n if (!choices) {\n return [];\n }\n\n if (duplicates) {\n return choices;\n }\n\n // if duplicates not allowed, remove the choices that are used to define the correct response\n return choices.filter((choice) => !(correctResponse && Object.values(correctResponse).includes(choice.id)));\n };\n\n render() {\n const { focusedEl, warning } = this.state;\n const {\n duplicates,\n error,\n mathMlOptions = {},\n maxChoices,\n model: { choices },\n toolbarOpts,\n uploadSoundSupport,\n imageSupport = {},\n pluginProps = {},\n maxImageWidth,\n maxImageHeight,\n maxLength,\n } = this.props;\n const visibleChoices = this.getVisibleChoices() || [];\n return (\n <StyledDesign ref={this.wrapperRef}>\n <StyledAddButton\n variant=\"contained\"\n color=\"primary\"\n onClick={this.onAddChoice}\n disabled={maxChoices && choices && maxChoices === choices.length}\n >\n Add Choice\n </StyledAddButton>\n\n <StyledAltChoices>\n {visibleChoices.map((choice, index) => {\n if (!choice || !choice.id) {\n return null;\n }\n\n return focusedEl === choice.id ? (\n <div\n key={index}\n style={{\n minWidth: '100%',\n zIndex: '100',\n }}\n >\n <EditableHtml\n ref={(ref) => (this.focusedNodeRef = ref)}\n autoFocus\n imageSupport={imageSupport}\n markup={choice.value}\n pluginProps={pluginProps}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n onChange={(val) => {\n if (this.preventDone) {\n return;\n }\n\n this.onChoiceChanged(choice.value, val, choice.id);\n }}\n onDone={(val) => {\n if (this.preventDone) {\n return;\n }\n\n this.onChoiceDone(choice.id, val);\n }}\n onBlur={(e) => {\n const inInInsertCharacter = e.relatedTarget && e.relatedTarget.closest('.insert-character-dialog');\n\n this.preventDone = inInInsertCharacter;\n }}\n disableUnderline\n toolbarOpts={toolbarOpts}\n uploadSoundSupport={uploadSoundSupport}\n mathMlOptions={mathMlOptions}\n maxImageHeight={maxImageHeight}\n maxImageWidth={maxImageWidth}\n charactersLimit={maxLength}\n />\n </div>\n ) : (\n <Choice\n key={index}\n duplicates={duplicates}\n choice={choice}\n error={error}\n onClick={() => this.onChoiceFocus(choice.id)}\n onRemoveChoice={() => this.onChoiceRemove(choice.id)}\n />\n );\n })}\n </StyledAltChoices>\n {error && <ErrorText>{error}</ErrorText>}\n\n <AlertDialog\n open={warning.open}\n title=\"Warning\"\n text={warning.text}\n onConfirm={() => this.setState({ warning: { open: false } })}\n />\n </StyledDesign>\n );\n }\n}\n\nexport default Choices;\n"],"mappings":"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","ignoreList":[]}
|