@pie-element/drag-in-the-blank 10.2.0 → 10.2.2-beta.2
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 +27 -42
- package/configure/CHANGELOG.md +27 -41
- package/configure/lib/__tests__/choice.test.js +114 -0
- package/configure/lib/__tests__/choices.test.js +157 -0
- package/configure/lib/__tests__/main.test.js +167 -0
- package/configure/lib/__tests__/markupUtils.test.js +105 -0
- package/configure/lib/choice.js +3 -4
- package/configure/lib/choice.js.map +1 -1
- package/configure/package.json +4 -4
- package/controller/CHANGELOG.md +38 -6
- package/controller/lib/__tests__/index.test.js +775 -0
- package/controller/package.json +1 -1
- package/docs/demo/pie.manifest.json +11 -0
- package/lib/__tests__/index.test.js +118 -0
- package/lib/__tests__/main.test.js +139 -0
- package/lib/index.js +2 -2
- package/lib/index.js.map +1 -1
- package/package.json +6 -6
package/controller/package.json
CHANGED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _react = _interopRequireDefault(require("react"));
|
|
5
|
+
var _piePlayerEvents = require("@pie-framework/pie-player-events");
|
|
6
|
+
var _index = _interopRequireDefault(require("../index"));
|
|
7
|
+
// Mock react-dom/client
|
|
8
|
+
const mockRender = jest.fn();
|
|
9
|
+
const mockUnmount = jest.fn();
|
|
10
|
+
jest.mock('react-dom/client', () => ({
|
|
11
|
+
createRoot: jest.fn(() => ({
|
|
12
|
+
render: mockRender,
|
|
13
|
+
unmount: mockUnmount
|
|
14
|
+
}))
|
|
15
|
+
}));
|
|
16
|
+
jest.mock('@pie-lib/math-rendering', () => ({
|
|
17
|
+
renderMath: jest.fn()
|
|
18
|
+
}));
|
|
19
|
+
describe('drag-in-the-blank', () => {
|
|
20
|
+
let el;
|
|
21
|
+
beforeAll(() => {
|
|
22
|
+
// Register the custom element if not already registered
|
|
23
|
+
if (!customElements.get('drag-in-the-blank-test')) {
|
|
24
|
+
customElements.define('drag-in-the-blank-test', _index.default);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
beforeEach(() => {
|
|
28
|
+
el = document.createElement('drag-in-the-blank-test');
|
|
29
|
+
|
|
30
|
+
// Mock _render to avoid jsdom innerHTML issues
|
|
31
|
+
el._render = jest.fn();
|
|
32
|
+
|
|
33
|
+
// Mock dispatchEvent
|
|
34
|
+
el.dispatchEvent = jest.fn();
|
|
35
|
+
});
|
|
36
|
+
describe('events', () => {
|
|
37
|
+
describe('model', () => {
|
|
38
|
+
it('dispatches model set event', () => {
|
|
39
|
+
el.model = {};
|
|
40
|
+
expect(el.dispatchEvent).toHaveBeenCalled();
|
|
41
|
+
const event = el.dispatchEvent.mock.calls[el.dispatchEvent.mock.calls.length - 1][0];
|
|
42
|
+
expect(event).toBeInstanceOf(_piePlayerEvents.ModelSetEvent);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
describe('changeSession', () => {
|
|
46
|
+
beforeEach(() => {
|
|
47
|
+
el.session = {
|
|
48
|
+
value: {}
|
|
49
|
+
};
|
|
50
|
+
el.model = {
|
|
51
|
+
responseAreasToBeFilled: 1
|
|
52
|
+
};
|
|
53
|
+
// Clear previous dispatch calls
|
|
54
|
+
el.dispatchEvent.mockClear();
|
|
55
|
+
});
|
|
56
|
+
it('dispatches session changed event - add answer', () => {
|
|
57
|
+
el.changeSession({
|
|
58
|
+
0: '1'
|
|
59
|
+
});
|
|
60
|
+
expect(el.dispatchEvent).toHaveBeenCalled();
|
|
61
|
+
const event = el.dispatchEvent.mock.calls[el.dispatchEvent.mock.calls.length - 1][0];
|
|
62
|
+
expect(event).toBeInstanceOf(_piePlayerEvents.SessionChangedEvent);
|
|
63
|
+
});
|
|
64
|
+
it('dispatches session changed event - remove answer', () => {
|
|
65
|
+
el.model = {
|
|
66
|
+
responseAreasToBeFilled: 1
|
|
67
|
+
};
|
|
68
|
+
el.session = {
|
|
69
|
+
value: {
|
|
70
|
+
0: '1'
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
el.dispatchEvent.mockClear();
|
|
74
|
+
el.changeSession({
|
|
75
|
+
0: undefined
|
|
76
|
+
});
|
|
77
|
+
expect(el.dispatchEvent).toHaveBeenCalled();
|
|
78
|
+
const event = el.dispatchEvent.mock.calls[el.dispatchEvent.mock.calls.length - 1][0];
|
|
79
|
+
expect(event).toBeInstanceOf(_piePlayerEvents.SessionChangedEvent);
|
|
80
|
+
});
|
|
81
|
+
it('dispatches session changed event - add/remove answer', () => {
|
|
82
|
+
el.model = {
|
|
83
|
+
responseAreasToBeFilled: 2
|
|
84
|
+
};
|
|
85
|
+
el.session = {
|
|
86
|
+
value: {
|
|
87
|
+
0: '1'
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
el.dispatchEvent.mockClear();
|
|
91
|
+
el.changeSession({
|
|
92
|
+
0: '1',
|
|
93
|
+
1: '0'
|
|
94
|
+
});
|
|
95
|
+
expect(el.dispatchEvent).toHaveBeenCalled();
|
|
96
|
+
let event = el.dispatchEvent.mock.calls[el.dispatchEvent.mock.calls.length - 1][0];
|
|
97
|
+
expect(event).toBeInstanceOf(_piePlayerEvents.SessionChangedEvent);
|
|
98
|
+
el.dispatchEvent.mockClear();
|
|
99
|
+
el.changeSession({
|
|
100
|
+
0: '1',
|
|
101
|
+
1: undefined
|
|
102
|
+
});
|
|
103
|
+
expect(el.dispatchEvent).toHaveBeenCalled();
|
|
104
|
+
event = el.dispatchEvent.mock.calls[el.dispatchEvent.mock.calls.length - 1][0];
|
|
105
|
+
expect(event).toBeInstanceOf(_piePlayerEvents.SessionChangedEvent);
|
|
106
|
+
el.dispatchEvent.mockClear();
|
|
107
|
+
el.changeSession({
|
|
108
|
+
0: undefined,
|
|
109
|
+
1: undefined
|
|
110
|
+
});
|
|
111
|
+
expect(el.dispatchEvent).toHaveBeenCalled();
|
|
112
|
+
event = el.dispatchEvent.mock.calls[el.dispatchEvent.mock.calls.length - 1][0];
|
|
113
|
+
expect(event).toBeInstanceOf(_piePlayerEvents.SessionChangedEvent);
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9waWVQbGF5ZXJFdmVudHMiLCJfaW5kZXgiLCJtb2NrUmVuZGVyIiwiamVzdCIsImZuIiwibW9ja1VubW91bnQiLCJtb2NrIiwiY3JlYXRlUm9vdCIsInJlbmRlciIsInVubW91bnQiLCJyZW5kZXJNYXRoIiwiZGVzY3JpYmUiLCJlbCIsImJlZm9yZUFsbCIsImN1c3RvbUVsZW1lbnRzIiwiZ2V0IiwiZGVmaW5lIiwiRHJhZ0luVGhlQmxhbmsiLCJiZWZvcmVFYWNoIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiX3JlbmRlciIsImRpc3BhdGNoRXZlbnQiLCJpdCIsIm1vZGVsIiwiZXhwZWN0IiwidG9IYXZlQmVlbkNhbGxlZCIsImV2ZW50IiwiY2FsbHMiLCJsZW5ndGgiLCJ0b0JlSW5zdGFuY2VPZiIsIk1vZGVsU2V0RXZlbnQiLCJzZXNzaW9uIiwidmFsdWUiLCJyZXNwb25zZUFyZWFzVG9CZUZpbGxlZCIsIm1vY2tDbGVhciIsImNoYW5nZVNlc3Npb24iLCJTZXNzaW9uQ2hhbmdlZEV2ZW50IiwidW5kZWZpbmVkIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL19fdGVzdHNfXy9pbmRleC50ZXN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBNb2RlbFNldEV2ZW50LCBTZXNzaW9uQ2hhbmdlZEV2ZW50IH0gZnJvbSAnQHBpZS1mcmFtZXdvcmsvcGllLXBsYXllci1ldmVudHMnO1xuaW1wb3J0IERyYWdJblRoZUJsYW5rIGZyb20gJy4uL2luZGV4JztcblxuLy8gTW9jayByZWFjdC1kb20vY2xpZW50XG5jb25zdCBtb2NrUmVuZGVyID0gamVzdC5mbigpO1xuY29uc3QgbW9ja1VubW91bnQgPSBqZXN0LmZuKCk7XG5qZXN0Lm1vY2soJ3JlYWN0LWRvbS9jbGllbnQnLCAoKSA9PiAoe1xuICBjcmVhdGVSb290OiBqZXN0LmZuKCgpID0+ICh7XG4gICAgcmVuZGVyOiBtb2NrUmVuZGVyLFxuICAgIHVubW91bnQ6IG1vY2tVbm1vdW50LFxuICB9KSksXG59KSk7XG5cbmplc3QubW9jaygnQHBpZS1saWIvbWF0aC1yZW5kZXJpbmcnLCAoKSA9PiAoeyByZW5kZXJNYXRoOiBqZXN0LmZuKCkgfSkpO1xuXG5kZXNjcmliZSgnZHJhZy1pbi10aGUtYmxhbmsnLCAoKSA9PiB7XG4gIGxldCBlbDtcblxuICBiZWZvcmVBbGwoKCkgPT4ge1xuICAgIC8vIFJlZ2lzdGVyIHRoZSBjdXN0b20gZWxlbWVudCBpZiBub3QgYWxyZWFkeSByZWdpc3RlcmVkXG4gICAgaWYgKCFjdXN0b21FbGVtZW50cy5nZXQoJ2RyYWctaW4tdGhlLWJsYW5rLXRlc3QnKSkge1xuICAgICAgY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdkcmFnLWluLXRoZS1ibGFuay10ZXN0JywgRHJhZ0luVGhlQmxhbmspO1xuICAgIH1cbiAgfSk7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkcmFnLWluLXRoZS1ibGFuay10ZXN0Jyk7XG4gICAgXG4gICAgLy8gTW9jayBfcmVuZGVyIHRvIGF2b2lkIGpzZG9tIGlubmVySFRNTCBpc3N1ZXNcbiAgICBlbC5fcmVuZGVyID0gamVzdC5mbigpO1xuICAgIFxuICAgIC8vIE1vY2sgZGlzcGF0Y2hFdmVudFxuICAgIGVsLmRpc3BhdGNoRXZlbnQgPSBqZXN0LmZuKCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdldmVudHMnLCAoKSA9PiB7XG4gICAgZGVzY3JpYmUoJ21vZGVsJywgKCkgPT4ge1xuICAgICAgaXQoJ2Rpc3BhdGNoZXMgbW9kZWwgc2V0IGV2ZW50JywgKCkgPT4ge1xuICAgICAgICBlbC5tb2RlbCA9IHt9O1xuICAgICAgICBleHBlY3QoZWwuZGlzcGF0Y2hFdmVudCkudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgICAgICBjb25zdCBldmVudCA9IGVsLmRpc3BhdGNoRXZlbnQubW9jay5jYWxsc1tlbC5kaXNwYXRjaEV2ZW50Lm1vY2suY2FsbHMubGVuZ3RoIC0gMV1bMF07XG4gICAgICAgIGV4cGVjdChldmVudCkudG9CZUluc3RhbmNlT2YoTW9kZWxTZXRFdmVudCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjaGFuZ2VTZXNzaW9uJywgKCkgPT4ge1xuICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIGVsLnNlc3Npb24gPSB7IHZhbHVlOiB7fSB9O1xuICAgICAgICBlbC5tb2RlbCA9IHsgcmVzcG9uc2VBcmVhc1RvQmVGaWxsZWQ6IDEgfTtcbiAgICAgICAgLy8gQ2xlYXIgcHJldmlvdXMgZGlzcGF0Y2ggY2FsbHNcbiAgICAgICAgZWwuZGlzcGF0Y2hFdmVudC5tb2NrQ2xlYXIoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnZGlzcGF0Y2hlcyBzZXNzaW9uIGNoYW5nZWQgZXZlbnQgLSBhZGQgYW5zd2VyJywgKCkgPT4ge1xuICAgICAgICBlbC5jaGFuZ2VTZXNzaW9uKHsgMDogJzEnIH0pO1xuICAgICAgICBleHBlY3QoZWwuZGlzcGF0Y2hFdmVudCkudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgICAgICBjb25zdCBldmVudCA9IGVsLmRpc3BhdGNoRXZlbnQubW9jay5jYWxsc1tlbC5kaXNwYXRjaEV2ZW50Lm1vY2suY2FsbHMubGVuZ3RoIC0gMV1bMF07XG4gICAgICAgIGV4cGVjdChldmVudCkudG9CZUluc3RhbmNlT2YoU2Vzc2lvbkNoYW5nZWRFdmVudCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2Rpc3BhdGNoZXMgc2Vzc2lvbiBjaGFuZ2VkIGV2ZW50IC0gcmVtb3ZlIGFuc3dlcicsICgpID0+IHtcbiAgICAgICAgZWwubW9kZWwgPSB7IHJlc3BvbnNlQXJlYXNUb0JlRmlsbGVkOiAxIH07XG4gICAgICAgIGVsLnNlc3Npb24gPSB7IHZhbHVlOiB7IDA6ICcxJyB9IH07XG4gICAgICAgIGVsLmRpc3BhdGNoRXZlbnQubW9ja0NsZWFyKCk7XG4gICAgICAgIFxuICAgICAgICBlbC5jaGFuZ2VTZXNzaW9uKHsgMDogdW5kZWZpbmVkIH0pO1xuICAgICAgICBleHBlY3QoZWwuZGlzcGF0Y2hFdmVudCkudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgICAgICBjb25zdCBldmVudCA9IGVsLmRpc3BhdGNoRXZlbnQubW9jay5jYWxsc1tlbC5kaXNwYXRjaEV2ZW50Lm1vY2suY2FsbHMubGVuZ3RoIC0gMV1bMF07XG4gICAgICAgIGV4cGVjdChldmVudCkudG9CZUluc3RhbmNlT2YoU2Vzc2lvbkNoYW5nZWRFdmVudCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2Rpc3BhdGNoZXMgc2Vzc2lvbiBjaGFuZ2VkIGV2ZW50IC0gYWRkL3JlbW92ZSBhbnN3ZXInLCAoKSA9PiB7XG4gICAgICAgIGVsLm1vZGVsID0geyByZXNwb25zZUFyZWFzVG9CZUZpbGxlZDogMiB9O1xuICAgICAgICBlbC5zZXNzaW9uID0geyB2YWx1ZTogeyAwOiAnMScgfSB9O1xuICAgICAgICBlbC5kaXNwYXRjaEV2ZW50Lm1vY2tDbGVhcigpO1xuICAgICAgICBcbiAgICAgICAgZWwuY2hhbmdlU2Vzc2lvbih7IDA6ICcxJywgMTogJzAnIH0pO1xuICAgICAgICBleHBlY3QoZWwuZGlzcGF0Y2hFdmVudCkudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgICAgICBsZXQgZXZlbnQgPSBlbC5kaXNwYXRjaEV2ZW50Lm1vY2suY2FsbHNbZWwuZGlzcGF0Y2hFdmVudC5tb2NrLmNhbGxzLmxlbmd0aCAtIDFdWzBdO1xuICAgICAgICBleHBlY3QoZXZlbnQpLnRvQmVJbnN0YW5jZU9mKFNlc3Npb25DaGFuZ2VkRXZlbnQpO1xuXG4gICAgICAgIGVsLmRpc3BhdGNoRXZlbnQubW9ja0NsZWFyKCk7XG4gICAgICAgIGVsLmNoYW5nZVNlc3Npb24oeyAwOiAnMScsIDE6IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgZXhwZWN0KGVsLmRpc3BhdGNoRXZlbnQpLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICAgICAgZXZlbnQgPSBlbC5kaXNwYXRjaEV2ZW50Lm1vY2suY2FsbHNbZWwuZGlzcGF0Y2hFdmVudC5tb2NrLmNhbGxzLmxlbmd0aCAtIDFdWzBdO1xuICAgICAgICBleHBlY3QoZXZlbnQpLnRvQmVJbnN0YW5jZU9mKFNlc3Npb25DaGFuZ2VkRXZlbnQpO1xuXG4gICAgICAgIGVsLmRpc3BhdGNoRXZlbnQubW9ja0NsZWFyKCk7XG4gICAgICAgIGVsLmNoYW5nZVNlc3Npb24oeyAwOiB1bmRlZmluZWQsIDE6IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgZXhwZWN0KGVsLmRpc3BhdGNoRXZlbnQpLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICAgICAgZXZlbnQgPSBlbC5kaXNwYXRjaEV2ZW50Lm1vY2suY2FsbHNbZWwuZGlzcGF0Y2hFdmVudC5tb2NrLmNhbGxzLmxlbmd0aCAtIDFdWzBdO1xuICAgICAgICBleHBlY3QoZXZlbnQpLnRvQmVJbnN0YW5jZU9mKFNlc3Npb25DaGFuZ2VkRXZlbnQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGdCQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxNQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFFQTtBQUNBLE1BQU1HLFVBQVUsR0FBR0MsSUFBSSxDQUFDQyxFQUFFLENBQUMsQ0FBQztBQUM1QixNQUFNQyxXQUFXLEdBQUdGLElBQUksQ0FBQ0MsRUFBRSxDQUFDLENBQUM7QUFDN0JELElBQUksQ0FBQ0csSUFBSSxDQUFDLGtCQUFrQixFQUFFLE9BQU87RUFDbkNDLFVBQVUsRUFBRUosSUFBSSxDQUFDQyxFQUFFLENBQUMsT0FBTztJQUN6QkksTUFBTSxFQUFFTixVQUFVO0lBQ2xCTyxPQUFPLEVBQUVKO0VBQ1gsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFD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
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _react = _interopRequireDefault(require("react"));
|
|
5
|
+
var _react2 = require("@testing-library/react");
|
|
6
|
+
var _styles = require("@mui/material/styles");
|
|
7
|
+
var _main = require("../main");
|
|
8
|
+
jest.mock('@pie-lib/render-ui', () => ({
|
|
9
|
+
PreviewPrompt: ({
|
|
10
|
+
prompt
|
|
11
|
+
}) => /*#__PURE__*/_react.default.createElement("div", {
|
|
12
|
+
"data-testid": "preview-prompt"
|
|
13
|
+
}, prompt),
|
|
14
|
+
Collapsible: ({
|
|
15
|
+
children
|
|
16
|
+
}) => /*#__PURE__*/_react.default.createElement("div", {
|
|
17
|
+
"data-testid": "collapsible"
|
|
18
|
+
}, children),
|
|
19
|
+
UiLayout: ({
|
|
20
|
+
children
|
|
21
|
+
}) => /*#__PURE__*/_react.default.createElement("div", {
|
|
22
|
+
"data-testid": "ui-layout"
|
|
23
|
+
}, children),
|
|
24
|
+
hasText: jest.fn(() => true),
|
|
25
|
+
hasMedia: jest.fn(() => false),
|
|
26
|
+
color: {
|
|
27
|
+
text: () => '#000',
|
|
28
|
+
background: () => '#fff'
|
|
29
|
+
}
|
|
30
|
+
}));
|
|
31
|
+
jest.mock('@pie-lib/correct-answer-toggle', () => ({
|
|
32
|
+
__esModule: true,
|
|
33
|
+
default: props => /*#__PURE__*/_react.default.createElement("div", {
|
|
34
|
+
"data-testid": "correct-answer-toggle"
|
|
35
|
+
}, props.children)
|
|
36
|
+
}));
|
|
37
|
+
jest.mock('@pie-lib/mask-markup', () => ({
|
|
38
|
+
DragInTheBlank: props => /*#__PURE__*/_react.default.createElement("div", {
|
|
39
|
+
"data-testid": "drag-in-the-blank"
|
|
40
|
+
}, props.children)
|
|
41
|
+
}));
|
|
42
|
+
const theme = (0, _styles.createTheme)();
|
|
43
|
+
describe('Main', () => {
|
|
44
|
+
let onChange;
|
|
45
|
+
beforeEach(() => {
|
|
46
|
+
onChange = jest.fn();
|
|
47
|
+
});
|
|
48
|
+
const renderMain = (extras = {}) => {
|
|
49
|
+
const props = {
|
|
50
|
+
model: {
|
|
51
|
+
prompt: 'Prompt',
|
|
52
|
+
mode: 'gather',
|
|
53
|
+
rationale: 'Rationale',
|
|
54
|
+
teacherInstructions: 'Teacher Instructions',
|
|
55
|
+
rationaleEnabled: true,
|
|
56
|
+
promptEnabled: true,
|
|
57
|
+
teacherInstructionsEnabled: true,
|
|
58
|
+
studentInstructionsEnabled: true,
|
|
59
|
+
id: '1',
|
|
60
|
+
element: 'drag-in-the-blank',
|
|
61
|
+
markup: '{{0}} + {{1}} = 15',
|
|
62
|
+
disabled: false,
|
|
63
|
+
choices: [{
|
|
64
|
+
value: '<div>9</div>',
|
|
65
|
+
id: '1'
|
|
66
|
+
}, {
|
|
67
|
+
value: '<div>6</div>',
|
|
68
|
+
id: '0'
|
|
69
|
+
}],
|
|
70
|
+
choicesPosition: 'below',
|
|
71
|
+
correctResponse: {
|
|
72
|
+
0: '0',
|
|
73
|
+
1: '1'
|
|
74
|
+
},
|
|
75
|
+
duplicates: true,
|
|
76
|
+
alternateResponses: [['1'], ['0']],
|
|
77
|
+
feedback: {},
|
|
78
|
+
...extras
|
|
79
|
+
},
|
|
80
|
+
value: {
|
|
81
|
+
0: '1',
|
|
82
|
+
1: '0'
|
|
83
|
+
},
|
|
84
|
+
onChange
|
|
85
|
+
};
|
|
86
|
+
return (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_styles.ThemeProvider, {
|
|
87
|
+
theme: theme
|
|
88
|
+
}, /*#__PURE__*/_react.default.createElement(_main.Main, props)));
|
|
89
|
+
};
|
|
90
|
+
describe('render', () => {
|
|
91
|
+
it('should render in gather mode', () => {
|
|
92
|
+
const {
|
|
93
|
+
container
|
|
94
|
+
} = renderMain();
|
|
95
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
96
|
+
});
|
|
97
|
+
it('should render in view mode', () => {
|
|
98
|
+
const {
|
|
99
|
+
container
|
|
100
|
+
} = renderMain({
|
|
101
|
+
mode: 'view'
|
|
102
|
+
});
|
|
103
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
104
|
+
});
|
|
105
|
+
it('should render in evaluate mode', () => {
|
|
106
|
+
const {
|
|
107
|
+
container
|
|
108
|
+
} = renderMain({
|
|
109
|
+
mode: 'evaluate'
|
|
110
|
+
});
|
|
111
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
112
|
+
});
|
|
113
|
+
it('should render without teacher instructions', () => {
|
|
114
|
+
const {
|
|
115
|
+
container
|
|
116
|
+
} = renderMain({
|
|
117
|
+
teacherInstructions: null
|
|
118
|
+
});
|
|
119
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
120
|
+
});
|
|
121
|
+
it('should render without rationale', () => {
|
|
122
|
+
const {
|
|
123
|
+
container
|
|
124
|
+
} = renderMain({
|
|
125
|
+
rationale: null
|
|
126
|
+
});
|
|
127
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
128
|
+
});
|
|
129
|
+
it('should render without prompt', () => {
|
|
130
|
+
const {
|
|
131
|
+
container
|
|
132
|
+
} = renderMain({
|
|
133
|
+
prompt: null
|
|
134
|
+
});
|
|
135
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfc3R5bGVzIiwiX21haW4iLCJqZXN0IiwibW9jayIsIlByZXZpZXdQcm9tcHQiLCJwcm9tcHQiLCJkZWZhdWx0IiwiY3JlYXRlRWxlbWVudCIsIkNvbGxhcHNpYmxlIiwiY2hpbGRyZW4iLCJVaUxheW91dCIsImhhc1RleHQiLCJmbiIsImhhc01lZGlhIiwiY29sb3IiLCJ0ZXh0IiwiYmFja2dyb3VuZCIsIl9fZXNNb2R1bGUiLCJwcm9wcyIsIkRyYWdJblRoZUJsYW5rIiwidGhlbWUiLCJjcmVhdGVUaGVtZSIsImRlc2NyaWJlIiwib25DaGFuZ2UiLCJiZWZvcmVFYWNoIiwicmVuZGVyTWFpbiIsImV4dHJhcyIsIm1vZGVsIiwibW9kZSIsInJhdGlvbmFsZSIsInRlYWNoZXJJbnN0cnVjdGlvbnMiLCJyYXRpb25hbGVFbmFibGVkIiwicHJvbXB0RW5hYmxlZCIsInRlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkIiwic3R1ZGVudEluc3RydWN0aW9uc0VuYWJsZWQiLCJpZCIsImVsZW1lbnQiLCJtYXJrdXAiLCJkaXNhYmxlZCIsImNob2ljZXMiLCJ2YWx1ZSIsImNob2ljZXNQb3NpdGlvbiIsImNvcnJlY3RSZXNwb25zZSIsImR1cGxpY2F0ZXMiLCJhbHRlcm5hdGVSZXNwb25zZXMiLCJmZWVkYmFjayIsInJlbmRlciIsIlRoZW1lUHJvdmlkZXIiLCJNYWluIiwiaXQiLCJjb250YWluZXIiLCJleHBlY3QiLCJmaXJzdENoaWxkIiwidG9CZUluVGhlRG9jdW1lbnQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL21haW4udGVzdC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gJ0B0ZXN0aW5nLWxpYnJhcnkvcmVhY3QnO1xuaW1wb3J0IHsgVGhlbWVQcm92aWRlciwgY3JlYXRlVGhlbWUgfSBmcm9tICdAbXVpL21hdGVyaWFsL3N0eWxlcyc7XG5cbmltcG9ydCB7IE1haW4gfSBmcm9tICcuLi9tYWluJztcblxuamVzdC5tb2NrKCdAcGllLWxpYi9yZW5kZXItdWknLCAoKSA9PiAoe1xuICBQcmV2aWV3UHJvbXB0OiAoeyBwcm9tcHQgfSkgPT4gPGRpdiBkYXRhLXRlc3RpZD1cInByZXZpZXctcHJvbXB0XCI+e3Byb21wdH08L2Rpdj4sXG4gIENvbGxhcHNpYmxlOiAoeyBjaGlsZHJlbiB9KSA9PiA8ZGl2IGRhdGEtdGVzdGlkPVwiY29sbGFwc2libGVcIj57Y2hpbGRyZW59PC9kaXY+LFxuICBVaUxheW91dDogKHsgY2hpbGRyZW4gfSkgPT4gPGRpdiBkYXRhLXRlc3RpZD1cInVpLWxheW91dFwiPntjaGlsZHJlbn08L2Rpdj4sXG4gIGhhc1RleHQ6IGplc3QuZm4oKCkgPT4gdHJ1ZSksXG4gIGhhc01lZGlhOiBqZXN0LmZuKCgpID0+IGZhbHNlKSxcbiAgY29sb3I6IHtcbiAgICB0ZXh0OiAoKSA9PiAnIzAwMCcsXG4gICAgYmFja2dyb3VuZDogKCkgPT4gJyNmZmYnLFxuICB9LFxufSkpO1xuXG5qZXN0Lm1vY2soJ0BwaWUtbGliL2NvcnJlY3QtYW5zd2VyLXRvZ2dsZScsICgpID0+ICh7XG4gIF9fZXNNb2R1bGU6IHRydWUsXG4gIGRlZmF1bHQ6IChwcm9wcykgPT4gPGRpdiBkYXRhLXRlc3RpZD1cImNvcnJlY3QtYW5zd2VyLXRvZ2dsZVwiPntwcm9wcy5jaGlsZHJlbn08L2Rpdj4sXG59KSk7XG5cbmplc3QubW9jaygnQHBpZS1saWIvbWFzay1tYXJrdXAnLCAoKSA9PiAoe1xuICBEcmFnSW5UaGVCbGFuazogKHByb3BzKSA9PiA8ZGl2IGRhdGEtdGVzdGlkPVwiZHJhZy1pbi10aGUtYmxhbmtcIj57cHJvcHMuY2hpbGRyZW59PC9kaXY+LFxufSkpO1xuXG5jb25zdCB0aGVtZSA9IGNyZWF0ZVRoZW1lKCk7XG5cbmRlc2NyaWJlKCdNYWluJywgKCkgPT4ge1xuICBsZXQgb25DaGFuZ2U7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgb25DaGFuZ2UgPSBqZXN0LmZuKCk7XG4gIH0pO1xuXG4gIGNvbnN0IHJlbmRlck1haW4gPSAoZXh0cmFzID0ge30pID0+IHtcbiAgICBjb25zdCBwcm9wcyA9IHtcbiAgICAgIG1vZGVsOiB7XG4gICAgICAgIHByb21wdDogJ1Byb21wdCcsXG4gICAgICAgIG1vZGU6ICdnYXRoZXInLFxuICAgICAgICByYXRpb25hbGU6ICdSYXRpb25hbGUnLFxuICAgICAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiAnVGVhY2hlciBJbnN0cnVjdGlvbnMnLFxuICAgICAgICByYXRpb25hbGVFbmFibGVkOiB0cnVlLFxuICAgICAgICBwcm9tcHRFbmFibGVkOiB0cnVlLFxuICAgICAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgc3R1ZGVudEluc3RydWN0aW9uc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgIGlkOiAnMScsXG4gICAgICAgIGVsZW1lbnQ6ICdkcmFnLWluLXRoZS1ibGFuaycsXG4gICAgICAgIG1hcmt1cDogJ3t7MH19ICsge3sxfX0gPSAxNScsXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgIHsgdmFsdWU6ICc8ZGl2Pjk8L2Rpdj4nLCBpZDogJzEnIH0sXG4gICAgICAgICAgeyB2YWx1ZTogJzxkaXY+NjwvZGl2PicsIGlkOiAnMCcgfSxcbiAgICAgICAgXSxcbiAgICAgICAgY2hvaWNlc1Bvc2l0aW9uOiAnYmVsb3cnLFxuICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IHsgMDogJzAnLCAxOiAnMScgfSxcbiAgICAgICAgZHVwbGljYXRlczogdHJ1ZSxcbiAgICAgICAgYWx0ZXJuYXRlUmVzcG9uc2VzOiBbWycxJ10sIFsnMCddXSxcbiAgICAgICAgZmVlZGJhY2s6IHt9LFxuICAgICAgICAuLi5leHRyYXMsXG4gICAgICB9LFxuICAgICAgdmFsdWU6IHsgMDogJzEnLCAxOiAnMCcgfSxcbiAgICAgIG9uQ2hhbmdlLFxuICAgIH07XG5cbiAgICByZXR1cm4gcmVuZGVyKFxuICAgICAgPFRoZW1lUHJvdmlkZXIgdGhlbWU9e3RoZW1lfT5cbiAgICAgICAgPE1haW4gey4uLnByb3BzfSAvPlxuICAgICAgPC9UaGVtZVByb3ZpZGVyPlxuICAgICk7XG4gIH07XG5cbiAgZGVzY3JpYmUoJ3JlbmRlcicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJlbmRlciBpbiBnYXRoZXIgbW9kZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJNYWluKCk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlbmRlciBpbiB2aWV3IG1vZGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyTWFpbih7IG1vZGU6ICd2aWV3JyB9KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVuZGVyIGluIGV2YWx1YXRlIG1vZGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyTWFpbih7IG1vZGU6ICdldmFsdWF0ZScgfSk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlbmRlciB3aXRob3V0IHRlYWNoZXIgaW5zdHJ1Y3Rpb25zJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlck1haW4oeyB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiBudWxsIH0pO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZW5kZXIgd2l0aG91dCByYXRpb25hbGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyTWFpbih7IHJhdGlvbmFsZTogbnVsbCB9KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVuZGVyIHdpdGhvdXQgcHJvbXB0JywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlck1haW4oeyBwcm9tcHQ6IG51bGwgfSk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLE9BQUEsR0FBQUYsT0FBQTtBQUVBLElBQUFHLEtBQUEsR0FBQUgsT0FBQTtBQUVBSSxJQUFJLENBQUNDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxPQUFPO0VBQ3JDQyxhQUFhLEVBQUVBLENBQUM7SUFBRUM7RUFBTyxDQUFDLGtCQUFLVCxNQUFBLENBQUFVLE9BQUEsQ0FBQUMsYUFBQTtJQUFLLGVBQVk7RUFBZ0IsR0FBRUYsTUFBWSxDQUFDO0VBQy9FRyxXQUFXLEVBQUVBLENBQUM7SUFBRUM7RUFBUyxDQUFDLGtCQUFLYixNQUFBLENBQUFVLE9BQUEsQ0FBQUMsYUFBQTtJQUFLLGVBQVk7RUFBYSxHQUFFRSxRQUFjLENBQUM7RUFDOUVDLFFBQVEsRUFBRUEsQ0FBQztJQUFFRDtFQUFTLENBQUMsa0JBQUtiLE1BQUEsQ0FBQVUsT0FBQSxDQUFBQyxhQUFBO0lBQUssZUFBWTtFQUFXLEdBQUVFLFFBQWMsQ0FBQztFQUN6RUUs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LENBQUMsR0FBR3pCLFVBQVUsQ0FBQyxDQUFDO01BQ2xDMEIsTUFBTSxDQUFDRCxTQUFTLENBQUNFLFVBQVUsQ0FBQyxDQUFDQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2xELENBQUMsQ0FBQztJQUVGSixFQUFFLENBQUMsNEJBQTRCLEVBQUUsTUFBTTtNQUNyQyxNQUFNO1FBQUVDO01BQVUsQ0FBQyxHQUFHekIsVUFBVSxDQUFDO1FBQUVHLElBQUksRUFBRTtNQUFPLENBQUMsQ0FBQztNQUNsRHVCLE1BQU0sQ0FBQ0QsU0FBUyxDQUFDRSxVQUFVLENBQUMsQ0FBQ0MsaUJBQWlCLENBQUMsQ0FBQztJQUNsRCxDQUFDLENBQUM7SUFFRkosRUFBRSxDQUFDLGdDQUFnQyxFQUFFLE1BQU07TUFDekMsTUFBTTtRQUFFQztNQUFVLENBQUMsR0FBR3pCLFVBQVUsQ0FBQztRQUFFRyxJQUFJLEVBQUU7TUFBVyxDQUFDLENBQUM7TUFDdER1QixNQUFNLENBQUNELFNBQVMsQ0FBQ0UsVUFBVSxDQUFDLENBQUNDLGlCQUFpQixDQUFDLENBQUM7SUFDbEQsQ0FBQyxDQUFDO0lBRUZKLEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRSxNQUFNO01BQ3JELE1BQU07UUFBRUM7TUFBVSxDQUFDLEdBQUd6QixVQUFVLENBQUM7UUFBRUssbUJBQW1CLEVBQUU7TUFBSyxDQUFDLENBQUM7TUFDL0RxQixNQUFNLENBQUNELFNBQVMsQ0FBQ0UsVUFBVSxDQUFDLENBQUNDLGlCQUFpQixDQUFDLENBQUM7SUFDbEQsQ0FBQyxDQUFDO0lBRUZKLEVBQUUsQ0FBQyxpQ0FBaUMsRUFBRSxNQUFNO01BQzFDLE1BQU07UUFBRUM7TUFBVSxDQUFDLEdBQUd6QixVQUFVLENBQUM7UUFBRUksU0FBUyxFQUFFO01BQUssQ0FBQyxDQUFDO01BQ3JEc0IsTUFBTSxDQUFDRCxTQUFTLENBQUNFLFVBQVUsQ0FBQyxDQUFDQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2xELENBQUMsQ0FBQztJQUVGSixFQUFFLENBQUMsOEJBQThCLEVBQUUsTUFBTTtNQUN2QyxNQUFNO1FBQUVDO01BQVUsQ0FBQyxHQUFHekIsVUFBVSxDQUFDO1FBQUVwQixNQUFNLEVBQUU7TUFBSyxDQUFDLENBQUM7TUFDbEQ4QyxNQUFNLENBQUNELFNBQVMsQ0FBQ0UsVUFBVSxDQUFDLENBQUNDLGlCQUFpQixDQUFDLENBQUM7SUFDbEQsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwiaWdub3JlTGlzdCI6W119
|
package/lib/index.js
CHANGED
|
@@ -21,7 +21,7 @@ const isComplete = (session, model, audioComplete, elementContext) => {
|
|
|
21
21
|
if (autoplayAudioEnabled && completeAudioEnabled && !audioComplete) {
|
|
22
22
|
if (elementContext) {
|
|
23
23
|
const audio = elementContext.querySelector('audio');
|
|
24
|
-
const isInsidePrompt = audio && audio.closest('
|
|
24
|
+
const isInsidePrompt = audio && audio.closest('#preview-prompt');
|
|
25
25
|
|
|
26
26
|
// only require audio completion if audio exists and is inside the prompt
|
|
27
27
|
if (audio && isInsidePrompt) {
|
|
@@ -116,7 +116,7 @@ class DragInTheBlank extends HTMLElement {
|
|
|
116
116
|
if (mutation.type === 'childList') {
|
|
117
117
|
if (this._audioInitialized) return;
|
|
118
118
|
const audio = this.querySelector('audio');
|
|
119
|
-
const isInsidePrompt = audio && audio.closest('
|
|
119
|
+
const isInsidePrompt = audio && audio.closest('#preview-prompt');
|
|
120
120
|
if (!this._model) return;
|
|
121
121
|
if (!this._model.autoplayAudioEnabled) return;
|
|
122
122
|
if (audio && !isInsidePrompt) return;
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_client","_mathRendering","_renderUi","_piePlayerEvents","_main","isComplete","session","model","audioComplete","elementContext","autoplayAudioEnabled","completeAudioEnabled","responseAreasToBeFilled","audio","querySelector","isInsidePrompt","closest","value","filledResponseAreas","Object","values","filter","val","length","exports","DragInTheBlank","HTMLElement","constructor","_defineProperty2","default","_model","_session","elem","React","createElement","Main","onChange","changeSession","_root","createRoot","render","setTimeout","renderMath","dispatchEvent","SessionChangedEvent","tagName","toLowerCase","selector","dispatchChangedEvent","_render","_audioInitialized","m","ModelSetEvent","s","_createAudioInfoToast","info","document","id","assign","style","position","top","width","height","display","justifyContent","alignItems","background","zIndex","cursor","img","src","EnableAudioAutoplayImage","alt","appendChild","connectedCallback","observer","MutationObserver","mutationsList","forEach","mutation","type","container","enableAudio","play","removeChild","removeEventListener","paused","addEventListener","handlePlaying","audioStartTime","Date","getTime","handleEnded","audioEndTime","waitTime","_audio","_handlePlaying","_handleEnded","_enableAudio","disconnect","observe","childList","subtree","disconnectedCallback","unmount"],"sources":["../src/index.js"],"sourcesContent":["import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport { EnableAudioAutoplayImage } from '@pie-lib/render-ui';\nimport { ModelSetEvent, SessionChangedEvent } from '@pie-framework/pie-player-events';\nimport Main from './main';\n\nexport const isComplete = (session, model, audioComplete, elementContext) => {\n const { autoplayAudioEnabled, completeAudioEnabled, responseAreasToBeFilled } = model || {};\n\n if (autoplayAudioEnabled && completeAudioEnabled && !audioComplete) {\n if (elementContext) {\n const audio = elementContext.querySelector('audio');\n const isInsidePrompt = audio && audio.closest('.preview-prompt');\n\n // only require audio completion if audio exists and is inside the prompt\n if (audio && isInsidePrompt) {\n return false;\n }\n }\n }\n\n if (!session || !session.value) {\n return false;\n }\n\n const filledResponseAreas = Object.values(session.value || {}).filter((val) => !!val).length;\n\n return filledResponseAreas >= responseAreasToBeFilled;\n};\n\nexport default class DragInTheBlank extends HTMLElement {\n constructor() {\n super();\n this._model = null;\n this._session = null;\n this._audioInitialized = false;\n this.audioComplete = false;\n this._root = null;\n }\n\n set model(m) {\n this._model = m;\n this.dispatchEvent(\n new ModelSetEvent(\n this.tagName.toLowerCase(),\n isComplete(this._session, this._model, this.audioComplete, this),\n !!this._model,\n ),\n );\n // reset the audioInitialized to false since the model changed, and we might need to reinitialize the audio\n this._audioInitialized = false;\n this._render();\n }\n\n set session(s) {\n this._session = s;\n this._render();\n }\n\n get session() {\n return this._session;\n }\n\n _render = () => {\n if (this._model && this._session) {\n let elem = React.createElement(Main, {\n model: this._model,\n value: this._session.value,\n onChange: this.changeSession,\n });\n\n if (!this._root) {\n this._root = createRoot(this);\n }\n this._root.render(elem);\n setTimeout(() => renderMath(this), 0);\n }\n };\n\n dispatchChangedEvent = () => {\n this.dispatchEvent(\n new SessionChangedEvent(\n this.tagName.toLowerCase(),\n isComplete(this._session, this._model, this.audioComplete, this),\n ),\n );\n };\n\n changeSession = (value) => {\n this.session.value = value;\n this.session.selector = 'Mouse';\n\n this.dispatchChangedEvent();\n this._render();\n };\n\n _createAudioInfoToast() {\n const info = document.createElement('div');\n info.id = 'play-audio-info';\n\n Object.assign(info.style, {\n position: 'absolute',\n top: 0,\n width: '100%',\n height: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n background: 'white',\n zIndex: '1000',\n cursor: 'pointer',\n });\n\n const img = document.createElement('img');\n img.src = EnableAudioAutoplayImage;\n img.alt = 'Click anywhere to enable audio autoplay';\n img.width = 500;\n img.height = 300;\n\n info.appendChild(img);\n return info;\n }\n\n connectedCallback() {\n this._render();\n\n // Observation: audio in Chrome will have the autoplay attribute,\n // while other browsers will not have the autoplay attribute and will need a user interaction to play the audio\n // This workaround fixes the issue of audio being cached and played on any user interaction in Safari and Firefox\n const observer = new MutationObserver((mutationsList, observer) => {\n mutationsList.forEach((mutation) => {\n if (mutation.type === 'childList') {\n if (this._audioInitialized) return;\n const audio = this.querySelector('audio');\n const isInsidePrompt = audio && audio.closest('.preview-prompt');\n\n if (!this._model) return;\n if (!this._model.autoplayAudioEnabled) return;\n if (audio && !isInsidePrompt) return;\n if (!audio) return;\n\n const info = this._createAudioInfoToast();\n const container = this.querySelector('#main-container');\n const enableAudio = () => {\n if (this.querySelector('#play-audio-info')) {\n audio.play();\n container.removeChild(info);\n }\n\n document.removeEventListener('click', enableAudio);\n };\n\n // if the audio is paused, it means the user has not interacted with the page yet and the audio will not play\n // FIX FOR SAFARI: play with a slight delay to check if autoplay was blocked\n setTimeout(() => {\n if (audio.paused && !this.querySelector('#play-audio-info')) {\n // add info message as a toast to enable audio playback\n container.appendChild(info);\n document.addEventListener('click', enableAudio);\n } else {\n document.removeEventListener('click', enableAudio);\n }\n }, 500);\n\n // we need to listen for the playing event to remove the toast in case the audio plays because of re-rendering\n const handlePlaying = () => {\n //timestamp when auto-played audio started playing\n this._session.audioStartTime = this._session.audioStartTime || new Date().getTime();\n\n const info = this.querySelector('#play-audio-info');\n if (info) {\n container.removeChild(info);\n }\n\n audio.removeEventListener('playing', handlePlaying);\n };\n\n audio.addEventListener('playing', handlePlaying);\n\n // we need to listen for the ended event to update the isComplete state\n const handleEnded = () => {\n //timestamp when auto-played audio completed playing\n this._session.audioEndTime = this._session.audioEndTime || new Date().getTime();\n\n let { audioStartTime, audioEndTime, waitTime } = this._session;\n if (!waitTime && audioStartTime && audioEndTime) {\n // waitTime is elapsed time the user waited for auto-played audio to finish\n this._session.waitTime = audioEndTime - audioStartTime;\n }\n\n this.audioComplete = true;\n this.dispatchChangedEvent();\n audio.removeEventListener('ended', handleEnded);\n };\n\n audio.addEventListener('ended', handleEnded);\n\n // store references to remove later\n this._audio = audio;\n this._handlePlaying = handlePlaying;\n this._handleEnded = handleEnded;\n this._enableAudio = enableAudio;\n // set to true to prevent multiple initializations\n this._audioInitialized = true;\n\n observer.disconnect();\n }\n });\n });\n\n observer.observe(this, { childList: true, subtree: true });\n }\n\n disconnectedCallback() {\n document.removeEventListener('click', this._enableAudio);\n\n if (this._audio) {\n this._audio.removeEventListener('playing', this._handlePlaying);\n this._audio.removeEventListener('ended', this._handleEnded);\n this._audio = null;\n }\n\n if (this._root) {\n this._root.unmount();\n this._root = null;\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_client","_mathRendering","_renderUi","_piePlayerEvents","_main","isComplete","session","model","audioComplete","elementContext","autoplayAudioEnabled","completeAudioEnabled","responseAreasToBeFilled","audio","querySelector","isInsidePrompt","closest","value","filledResponseAreas","Object","values","filter","val","length","exports","DragInTheBlank","HTMLElement","constructor","_defineProperty2","default","_model","_session","elem","React","createElement","Main","onChange","changeSession","_root","createRoot","render","setTimeout","renderMath","dispatchEvent","SessionChangedEvent","tagName","toLowerCase","selector","dispatchChangedEvent","_render","_audioInitialized","m","ModelSetEvent","s","_createAudioInfoToast","info","document","id","assign","style","position","top","width","height","display","justifyContent","alignItems","background","zIndex","cursor","img","src","EnableAudioAutoplayImage","alt","appendChild","connectedCallback","observer","MutationObserver","mutationsList","forEach","mutation","type","container","enableAudio","play","removeChild","removeEventListener","paused","addEventListener","handlePlaying","audioStartTime","Date","getTime","handleEnded","audioEndTime","waitTime","_audio","_handlePlaying","_handleEnded","_enableAudio","disconnect","observe","childList","subtree","disconnectedCallback","unmount"],"sources":["../src/index.js"],"sourcesContent":["import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport { EnableAudioAutoplayImage } from '@pie-lib/render-ui';\nimport { ModelSetEvent, SessionChangedEvent } from '@pie-framework/pie-player-events';\nimport Main from './main';\n\nexport const isComplete = (session, model, audioComplete, elementContext) => {\n const { autoplayAudioEnabled, completeAudioEnabled, responseAreasToBeFilled } = model || {};\n\n if (autoplayAudioEnabled && completeAudioEnabled && !audioComplete) {\n if (elementContext) {\n const audio = elementContext.querySelector('audio');\n const isInsidePrompt = audio && audio.closest('#preview-prompt');\n\n // only require audio completion if audio exists and is inside the prompt\n if (audio && isInsidePrompt) {\n return false;\n }\n }\n }\n\n if (!session || !session.value) {\n return false;\n }\n\n const filledResponseAreas = Object.values(session.value || {}).filter((val) => !!val).length;\n\n return filledResponseAreas >= responseAreasToBeFilled;\n};\n\nexport default class DragInTheBlank extends HTMLElement {\n constructor() {\n super();\n this._model = null;\n this._session = null;\n this._audioInitialized = false;\n this.audioComplete = false;\n this._root = null;\n }\n\n set model(m) {\n this._model = m;\n this.dispatchEvent(\n new ModelSetEvent(\n this.tagName.toLowerCase(),\n isComplete(this._session, this._model, this.audioComplete, this),\n !!this._model,\n ),\n );\n // reset the audioInitialized to false since the model changed, and we might need to reinitialize the audio\n this._audioInitialized = false;\n this._render();\n }\n\n set session(s) {\n this._session = s;\n this._render();\n }\n\n get session() {\n return this._session;\n }\n\n _render = () => {\n if (this._model && this._session) {\n let elem = React.createElement(Main, {\n model: this._model,\n value: this._session.value,\n onChange: this.changeSession,\n });\n\n if (!this._root) {\n this._root = createRoot(this);\n }\n this._root.render(elem);\n setTimeout(() => renderMath(this), 0);\n }\n };\n\n dispatchChangedEvent = () => {\n this.dispatchEvent(\n new SessionChangedEvent(\n this.tagName.toLowerCase(),\n isComplete(this._session, this._model, this.audioComplete, this),\n ),\n );\n };\n\n changeSession = (value) => {\n this.session.value = value;\n this.session.selector = 'Mouse';\n\n this.dispatchChangedEvent();\n this._render();\n };\n\n _createAudioInfoToast() {\n const info = document.createElement('div');\n info.id = 'play-audio-info';\n\n Object.assign(info.style, {\n position: 'absolute',\n top: 0,\n width: '100%',\n height: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n background: 'white',\n zIndex: '1000',\n cursor: 'pointer',\n });\n\n const img = document.createElement('img');\n img.src = EnableAudioAutoplayImage;\n img.alt = 'Click anywhere to enable audio autoplay';\n img.width = 500;\n img.height = 300;\n\n info.appendChild(img);\n return info;\n }\n\n connectedCallback() {\n this._render();\n\n // Observation: audio in Chrome will have the autoplay attribute,\n // while other browsers will not have the autoplay attribute and will need a user interaction to play the audio\n // This workaround fixes the issue of audio being cached and played on any user interaction in Safari and Firefox\n const observer = new MutationObserver((mutationsList, observer) => {\n mutationsList.forEach((mutation) => {\n if (mutation.type === 'childList') {\n if (this._audioInitialized) return;\n const audio = this.querySelector('audio');\n const isInsidePrompt = audio && audio.closest('#preview-prompt');\n\n if (!this._model) return;\n if (!this._model.autoplayAudioEnabled) return;\n if (audio && !isInsidePrompt) return;\n if (!audio) return;\n\n const info = this._createAudioInfoToast();\n const container = this.querySelector('#main-container');\n const enableAudio = () => {\n if (this.querySelector('#play-audio-info')) {\n audio.play();\n container.removeChild(info);\n }\n\n document.removeEventListener('click', enableAudio);\n };\n\n // if the audio is paused, it means the user has not interacted with the page yet and the audio will not play\n // FIX FOR SAFARI: play with a slight delay to check if autoplay was blocked\n setTimeout(() => {\n if (audio.paused && !this.querySelector('#play-audio-info')) {\n // add info message as a toast to enable audio playback\n container.appendChild(info);\n document.addEventListener('click', enableAudio);\n } else {\n document.removeEventListener('click', enableAudio);\n }\n }, 500);\n\n // we need to listen for the playing event to remove the toast in case the audio plays because of re-rendering\n const handlePlaying = () => {\n //timestamp when auto-played audio started playing\n this._session.audioStartTime = this._session.audioStartTime || new Date().getTime();\n\n const info = this.querySelector('#play-audio-info');\n if (info) {\n container.removeChild(info);\n }\n\n audio.removeEventListener('playing', handlePlaying);\n };\n\n audio.addEventListener('playing', handlePlaying);\n\n // we need to listen for the ended event to update the isComplete state\n const handleEnded = () => {\n //timestamp when auto-played audio completed playing\n this._session.audioEndTime = this._session.audioEndTime || new Date().getTime();\n\n let { audioStartTime, audioEndTime, waitTime } = this._session;\n if (!waitTime && audioStartTime && audioEndTime) {\n // waitTime is elapsed time the user waited for auto-played audio to finish\n this._session.waitTime = audioEndTime - audioStartTime;\n }\n\n this.audioComplete = true;\n this.dispatchChangedEvent();\n audio.removeEventListener('ended', handleEnded);\n };\n\n audio.addEventListener('ended', handleEnded);\n\n // store references to remove later\n this._audio = audio;\n this._handlePlaying = handlePlaying;\n this._handleEnded = handleEnded;\n this._enableAudio = enableAudio;\n // set to true to prevent multiple initializations\n this._audioInitialized = true;\n\n observer.disconnect();\n }\n });\n });\n\n observer.observe(this, { childList: true, subtree: true });\n }\n\n disconnectedCallback() {\n document.removeEventListener('click', this._enableAudio);\n\n if (this._audio) {\n this._audio.removeEventListener('playing', this._handlePlaying);\n this._audio.removeEventListener('ended', this._handleEnded);\n this._audio = null;\n }\n\n if (this._root) {\n this._root.unmount();\n this._root = null;\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
7
|
-
"version": "10.2.
|
|
7
|
+
"version": "10.2.2-beta.2",
|
|
8
8
|
"description": "",
|
|
9
9
|
"scripts": {
|
|
10
10
|
"postpublish": "../../scripts/postpublish"
|
|
@@ -15,11 +15,11 @@
|
|
|
15
15
|
"@mui/icons-material": "^7.3.4",
|
|
16
16
|
"@mui/material": "^7.3.4",
|
|
17
17
|
"@pie-framework/pie-player-events": "^0.1.0",
|
|
18
|
-
"@pie-lib/correct-answer-toggle": "4.0.
|
|
19
|
-
"@pie-lib/drag": "4.
|
|
20
|
-
"@pie-lib/mask-markup": "3.0.
|
|
18
|
+
"@pie-lib/correct-answer-toggle": "4.0.5",
|
|
19
|
+
"@pie-lib/drag": "4.0.6",
|
|
20
|
+
"@pie-lib/mask-markup": "3.1.0-beta.6",
|
|
21
21
|
"@pie-lib/math-rendering": "5.1.0",
|
|
22
|
-
"@pie-lib/render-ui": "
|
|
22
|
+
"@pie-lib/render-ui": "6.1.3",
|
|
23
23
|
"lodash-es": "^4.17.23",
|
|
24
24
|
"prop-types": "^15.8.1",
|
|
25
25
|
"react": "18.3.1",
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
},
|
|
28
28
|
"author": "",
|
|
29
29
|
"license": "ISC",
|
|
30
|
-
"gitHead": "
|
|
30
|
+
"gitHead": "fcf6139719821e97ab40cb60e9a953fe427d86a4",
|
|
31
31
|
"main": "lib/index.js",
|
|
32
32
|
"module": "src/index.js"
|
|
33
33
|
}
|