@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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pie-element/drag-in-the-blank-controller",
3
3
  "private": true,
4
- "version": "9.1.4",
4
+ "version": "9.4.0-beta.8",
5
5
  "description": "",
6
6
  "main": "lib/index.js",
7
7
  "module": "src/index.js",
@@ -0,0 +1,11 @@
1
+ {
2
+ "hash": "1227334533",
3
+ "info": [
4
+ {
5
+ "pie": "@pie-element/drag-in-the-blank",
6
+ "version": {
7
+ "requested": "latest"
8
+ }
9
+ }
10
+ ]
11
+ }
@@ -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('.preview-prompt');
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('.preview-prompt');
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.0",
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.6",
19
- "@pie-lib/drag": "4.1.1",
20
- "@pie-lib/mask-markup": "3.0.16",
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": "7.0.0",
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": "e299866c75466c3c3f12469e783c129c800f24fb",
30
+ "gitHead": "fcf6139719821e97ab40cb60e9a953fe427d86a4",
31
31
  "main": "lib/index.js",
32
32
  "module": "src/index.js"
33
33
  }