@pie-element/drag-in-the-blank 3.10.2 → 3.10.3-next.1008
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 +172 -0
- package/configure/CHANGELOG.md +120 -0
- package/configure/lib/choice.js +1 -1
- package/configure/lib/choice.js.map +1 -1
- package/configure/lib/choices.js +45 -23
- package/configure/lib/choices.js.map +1 -1
- package/configure/lib/defaults.js +18 -2
- package/configure/lib/defaults.js.map +1 -1
- package/configure/lib/index.js +3 -3
- package/configure/lib/main.js +107 -16
- package/configure/lib/main.js.map +1 -1
- package/configure/lib/markupUtils.js +9 -3
- package/configure/lib/markupUtils.js.map +1 -1
- package/configure/package.json +4 -4
- package/configure/utils.js +14 -0
- package/controller/CHANGELOG.md +16 -0
- package/controller/lib/index.js +35 -3
- package/controller/lib/index.js.map +1 -1
- package/controller/lib/utils.js +1 -1
- package/controller/lib/utils.js.map +1 -1
- package/controller/package.json +1 -1
- package/docs/config-schema.json +94 -0
- package/docs/config-schema.json.md +73 -1
- package/docs/demo/generate.js +2 -1
- package/docs/pie-schema.json +43 -0
- package/docs/pie-schema.json.md +35 -0
- package/lib/index.js +6 -2
- package/lib/index.js.map +1 -1
- package/lib/main.js +14 -28
- package/lib/main.js.map +1 -1
- package/package.json +6 -6
- package/module/configure.js +0 -1393
- package/module/controller.js +0 -21609
- package/module/demo.js +0 -65
- package/module/element.js +0 -218
- package/module/index.html +0 -16
- package/module/manifest.json +0 -10
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,178 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [3.13.6](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank@3.13.5...@pie-element/drag-in-the-blank@3.13.6) (2022-03-28)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @pie-element/drag-in-the-blank
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
## [3.13.5](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank@3.13.4...@pie-element/drag-in-the-blank@3.13.5) (2022-03-22)
|
|
15
|
+
|
|
16
|
+
**Note:** Version bump only for package @pie-element/drag-in-the-blank
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
## [3.13.4](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank@3.13.3...@pie-element/drag-in-the-blank@3.13.4) (2022-03-08)
|
|
23
|
+
|
|
24
|
+
**Note:** Version bump only for package @pie-element/drag-in-the-blank
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
## [3.13.3](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank@3.13.2...@pie-element/drag-in-the-blank@3.13.3) (2022-03-08)
|
|
31
|
+
|
|
32
|
+
**Note:** Version bump only for package @pie-element/drag-in-the-blank
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
## [3.13.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank@3.13.1...@pie-element/drag-in-the-blank@3.13.2) (2022-02-21)
|
|
39
|
+
|
|
40
|
+
**Note:** Version bump only for package @pie-element/drag-in-the-blank
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
## [3.13.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank@3.13.0...@pie-element/drag-in-the-blank@3.13.1) (2022-02-04)
|
|
47
|
+
|
|
48
|
+
**Note:** Version bump only for package @pie-element/drag-in-the-blank
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
# [3.13.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank@3.12.8...@pie-element/drag-in-the-blank@3.13.0) (2022-01-24)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
### Bug Fixes
|
|
58
|
+
|
|
59
|
+
* use preview prompt for prompt, rationale and teacher instructions to fix table rendering PD-1456 ([f330601](https://github.com/pie-framework/pie-elements/commit/f3306019a2d1c8ce3e2783823dfe9ef0a0394e4f))
|
|
60
|
+
* **drag-in-the-blank:** fix validation behavior PD-1404 ([02f3f5c](https://github.com/pie-framework/pie-elements/commit/02f3f5ca82b03d54e055a3d746027e8b5ac66790))
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
### Features
|
|
64
|
+
|
|
65
|
+
* **drag-in-the-blank, inline-dropdown:** move rationale after the item content PD-1379 ([fd71c58](https://github.com/pie-framework/pie-elements/commit/fd71c5853bdd63b31a746241dd5649e5de051300))
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
## [3.12.8](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank@3.12.7...@pie-element/drag-in-the-blank@3.12.8) (2022-01-10)
|
|
72
|
+
|
|
73
|
+
**Note:** Version bump only for package @pie-element/drag-in-the-blank
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
## [3.12.7](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank@3.12.6...@pie-element/drag-in-the-blank@3.12.7) (2021-12-23)
|
|
80
|
+
|
|
81
|
+
**Note:** Version bump only for package @pie-element/drag-in-the-blank
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
## [3.12.5](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank@3.12.4...@pie-element/drag-in-the-blank@3.12.5) (2021-12-13)
|
|
88
|
+
|
|
89
|
+
**Note:** Version bump only for package @pie-element/drag-in-the-blank
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
## [3.12.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank@3.12.1...@pie-element/drag-in-the-blank@3.12.2) (2021-11-29)
|
|
96
|
+
|
|
97
|
+
**Note:** Version bump only for package @pie-element/drag-in-the-blank
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
## [3.12.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank@3.11.4...@pie-element/drag-in-the-blank@3.12.1) (2021-11-11)
|
|
104
|
+
|
|
105
|
+
**Note:** Version bump only for package @pie-element/drag-in-the-blank
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
# [3.12.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank@3.10.2...@pie-element/drag-in-the-blank@3.12.0) (2021-11-11)
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
### Bug Fixes
|
|
115
|
+
|
|
116
|
+
* pie-lib updates ([e521c2f](https://github.com/pie-framework/pie-elements/commit/e521c2f1a44aa7f3e14f82a1cee05ceb484ed0a6))
|
|
117
|
+
* Updated pie-lib versions ([2fe4c5d](https://github.com/pie-framework/pie-elements/commit/2fe4c5d0be2d40f5fdb34815855695a7f1087f56))
|
|
118
|
+
* Updated pie-lib versions ([1c23830](https://github.com/pie-framework/pie-elements/commit/1c23830fc75d1de5f7bb3bb16de3c665ae5fa350))
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
### Features
|
|
122
|
+
|
|
123
|
+
* **drag-in-the-blank:** set toolbar editor position to bottom ([8a16b0f](https://github.com/pie-framework/pie-elements/commit/8a16b0f2965af63ab6e20267131cc1da19dce8e1))
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
## [3.11.4](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank@3.11.3...@pie-element/drag-in-the-blank@3.11.4) (2021-10-18)
|
|
131
|
+
|
|
132
|
+
**Note:** Version bump only for package @pie-element/drag-in-the-blank
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
## [3.11.3](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank@3.11.2...@pie-element/drag-in-the-blank@3.11.3) (2021-10-04)
|
|
139
|
+
|
|
140
|
+
**Note:** Version bump only for package @pie-element/drag-in-the-blank
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
## [3.11.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank@3.11.1...@pie-element/drag-in-the-blank@3.11.2) (2021-09-20)
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
### Bug Fixes
|
|
150
|
+
|
|
151
|
+
* pie-lib updates ([e521c2f](https://github.com/pie-framework/pie-elements/commit/e521c2f1a44aa7f3e14f82a1cee05ceb484ed0a6))
|
|
152
|
+
* Updated pie-lib versions ([2fe4c5d](https://github.com/pie-framework/pie-elements/commit/2fe4c5d0be2d40f5fdb34815855695a7f1087f56))
|
|
153
|
+
* Updated pie-lib versions ([1c23830](https://github.com/pie-framework/pie-elements/commit/1c23830fc75d1de5f7bb3bb16de3c665ae5fa350))
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
## [3.11.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank@3.11.0...@pie-element/drag-in-the-blank@3.11.1) (2021-09-01)
|
|
160
|
+
|
|
161
|
+
**Note:** Version bump only for package @pie-element/drag-in-the-blank
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
# [3.11.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank@3.10.2...@pie-element/drag-in-the-blank@3.11.0) (2021-08-05)
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
### Features
|
|
171
|
+
|
|
172
|
+
* **drag-in-the-blank:** set toolbar editor position to bottom ([8a16b0f](https://github.com/pie-framework/pie-elements/commit/8a16b0f2965af63ab6e20267131cc1da19dce8e1))
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
|
|
6
178
|
## [3.10.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank@3.10.0...@pie-element/drag-in-the-blank@3.10.2) (2021-08-05)
|
|
7
179
|
|
|
8
180
|
|
package/configure/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,126 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [3.6.19](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank-configure@3.6.18...@pie-element/drag-in-the-blank-configure@3.6.19) (2022-03-28)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @pie-element/drag-in-the-blank-configure
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
## [3.6.18](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank-configure@3.6.17...@pie-element/drag-in-the-blank-configure@3.6.18) (2022-03-22)
|
|
15
|
+
|
|
16
|
+
**Note:** Version bump only for package @pie-element/drag-in-the-blank-configure
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
## [3.6.17](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank-configure@3.6.16...@pie-element/drag-in-the-blank-configure@3.6.17) (2022-03-08)
|
|
23
|
+
|
|
24
|
+
**Note:** Version bump only for package @pie-element/drag-in-the-blank-configure
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
## [3.6.16](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank-configure@3.6.15...@pie-element/drag-in-the-blank-configure@3.6.16) (2022-03-08)
|
|
31
|
+
|
|
32
|
+
**Note:** Version bump only for package @pie-element/drag-in-the-blank-configure
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
## [3.6.15](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank-configure@3.6.14...@pie-element/drag-in-the-blank-configure@3.6.15) (2022-02-21)
|
|
39
|
+
|
|
40
|
+
**Note:** Version bump only for package @pie-element/drag-in-the-blank-configure
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
## [3.6.14](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank-configure@3.6.13...@pie-element/drag-in-the-blank-configure@3.6.14) (2022-02-04)
|
|
47
|
+
|
|
48
|
+
**Note:** Version bump only for package @pie-element/drag-in-the-blank-configure
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
## [3.6.13](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank-configure@3.6.12...@pie-element/drag-in-the-blank-configure@3.6.13) (2022-01-24)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
### Bug Fixes
|
|
58
|
+
|
|
59
|
+
* **drag-in-the-blank:** fix validation behavior PD-1404 ([02f3f5c](https://github.com/pie-framework/pie-elements/commit/02f3f5ca82b03d54e055a3d746027e8b5ac66790))
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
## [3.6.12](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank-configure@3.6.11...@pie-element/drag-in-the-blank-configure@3.6.12) (2022-01-10)
|
|
66
|
+
|
|
67
|
+
**Note:** Version bump only for package @pie-element/drag-in-the-blank-configure
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
## [3.6.11](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank-configure@3.6.10...@pie-element/drag-in-the-blank-configure@3.6.11) (2021-12-23)
|
|
74
|
+
|
|
75
|
+
**Note:** Version bump only for package @pie-element/drag-in-the-blank-configure
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
## [3.6.9](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank-configure@3.6.8...@pie-element/drag-in-the-blank-configure@3.6.9) (2021-12-13)
|
|
82
|
+
|
|
83
|
+
**Note:** Version bump only for package @pie-element/drag-in-the-blank-configure
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
## [3.6.6](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank-configure@3.6.5...@pie-element/drag-in-the-blank-configure@3.6.6) (2021-11-29)
|
|
90
|
+
|
|
91
|
+
**Note:** Version bump only for package @pie-element/drag-in-the-blank-configure
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
## [3.6.5](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank-configure@3.6.4...@pie-element/drag-in-the-blank-configure@3.6.5) (2021-10-04)
|
|
98
|
+
|
|
99
|
+
**Note:** Version bump only for package @pie-element/drag-in-the-blank-configure
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
## [3.6.4](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank-configure@3.6.3...@pie-element/drag-in-the-blank-configure@3.6.4) (2021-09-20)
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
### Bug Fixes
|
|
109
|
+
|
|
110
|
+
* pie-lib updates ([e521c2f](https://github.com/pie-framework/pie-elements/commit/e521c2f1a44aa7f3e14f82a1cee05ceb484ed0a6))
|
|
111
|
+
* Updated pie-lib versions ([2fe4c5d](https://github.com/pie-framework/pie-elements/commit/2fe4c5d0be2d40f5fdb34815855695a7f1087f56))
|
|
112
|
+
* Updated pie-lib versions ([1c23830](https://github.com/pie-framework/pie-elements/commit/1c23830fc75d1de5f7bb3bb16de3c665ae5fa350))
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
## [3.6.3](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank-configure@3.6.2...@pie-element/drag-in-the-blank-configure@3.6.3) (2021-08-05)
|
|
119
|
+
|
|
120
|
+
**Note:** Version bump only for package @pie-element/drag-in-the-blank-configure
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
|
|
6
126
|
## [3.6.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank-configure@3.6.0...@pie-element/drag-in-the-blank-configure@3.6.2) (2021-08-05)
|
|
7
127
|
|
|
8
128
|
|
package/configure/lib/choice.js
CHANGED
|
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports["default"] = exports.
|
|
8
|
+
exports.tileSource = exports["default"] = exports.BlankContent = void 0;
|
|
9
9
|
|
|
10
10
|
var _react = _interopRequireDefault(require("react"));
|
|
11
11
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/choice.jsx"],"names":["GripIcon","style","margin","propTypes","PropTypes","object","BlankContent","theme","choice","border","palette","primary","main","disabled","props","connectDragSource","onClick","onRemoveChoice","display","minWidth","minHeight","background","boxSizing","borderRadius","overflow","position","padding","top","left","color","zIndex","__html","value","right","e","preventDefault","stopPropagation","tileSource","canDrag","alert","beginDrag","id","targetId","instanceId","connect","monitor","dragSource","isDragging"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA,IAAMA,QAAQ,GAAG,SAAXA,QAAW,OAAe;AAAA,MAAZC,KAAY,QAAZA,KAAY;AAC9B,sBACE;AAAM,IAAA,KAAK,EAAEA;AAAb,kBACE,gCAAC,oBAAD;AACE,IAAA,KAAK,EAAE;AACLC,MAAAA,MAAM,EAAE;AADH;AADT,IADF,eAME,gCAAC,oBAAD,OANF,CADF;AAUD,CAXD;;AAaAF,QAAQ,CAACG,SAAT,GAAqB;AACnBF,EAAAA,KAAK,EAAEG,sBAAUC;AADE,CAArB;AAIO,IAAMC,YAAY,GAAG,wBAAW,UAAAC,KAAK;AAAA,SAAK;AAC/CC,IAAAA,MAAM,EAAE;AACNC,MAAAA,MAAM,sBAAeF,KAAK,CAACG,OAAN,CAAcC,OAAd,CAAsBC,IAArC;AADA,KADuC;AAI/CC,IAAAA,QAAQ,EAAE;AAJqC,GAAL;AAAA,CAAhB,EAKxB,UAAAC,KAAK,EAAI;
|
|
1
|
+
{"version":3,"sources":["../src/choice.jsx"],"names":["GripIcon","style","margin","propTypes","PropTypes","object","BlankContent","theme","choice","border","palette","primary","main","disabled","props","connectDragSource","onClick","onRemoveChoice","display","minWidth","minHeight","background","boxSizing","borderRadius","overflow","position","padding","top","left","color","zIndex","__html","value","right","e","preventDefault","stopPropagation","tileSource","canDrag","alert","beginDrag","id","targetId","instanceId","connect","monitor","dragSource","isDragging"],"mappings":"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","sourcesContent":["import React from 'react';\nimport MoreVert from '@material-ui/icons/MoreVert';\nimport Delete from '@material-ui/icons/Delete';\nimport { DragSource } from 'react-dnd';\nimport { withStyles } from '@material-ui/core/styles';\nimport { choiceIsEmpty } from './markupUtils';\nimport PropTypes from 'prop-types';\n\nconst GripIcon = ({ style }) => {\n return (\n <span style={style}>\n <MoreVert\n style={{\n margin: '0 -16px'\n }}\n />\n <MoreVert />\n </span>\n );\n};\n\nGripIcon.propTypes = {\n style: PropTypes.object,\n};\n\nexport const BlankContent = withStyles(theme => ({\n choice: {\n border: `solid 0px ${theme.palette.primary.main}`\n },\n disabled: {}\n}))(props => {\n const { connectDragSource, choice, onClick, onRemoveChoice } = props;\n\n return connectDragSource(\n <div\n style={{\n display: 'inline-flex',\n minWidth: '178px',\n minHeight: '36px',\n background: '#FFF',\n border: '1px solid #C0C3CF',\n boxSizing: 'border-box',\n borderRadius: '3px',\n overflow: 'hidden',\n position: 'relative',\n padding: '8px 35px 8px 35px'\n }}\n onClick={onClick}\n >\n <GripIcon\n style={{\n position: 'absolute',\n top: '6px',\n left: '15px',\n color: '#9B9B9B',\n zIndex: 2\n }}\n />\n <span\n dangerouslySetInnerHTML={{\n __html: choice.value\n }}\n />\n <Delete\n style={{\n position: 'absolute',\n top: '6px',\n right: '0',\n color: '#9B9B9B',\n zIndex: 2\n }}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n\n onRemoveChoice(e);\n }}\n />\n </div>\n );\n});\n\nexport const tileSource = {\n canDrag(props) {\n if (choiceIsEmpty(props.choice)) {\n alert('You need to define a value for an answer choice before it can be associated with a response area.');\n return false;\n }\n\n return !props.disabled;\n },\n beginDrag(props) {\n return {\n id: props.targetId,\n value: props.choice,\n instanceId: props.instanceId\n };\n }\n};\n\nexport default DragSource('drag-in-the-blank-choice', tileSource, (connect, monitor) => ({\n connectDragSource: connect.dragSource(),\n isDragging: monitor.isDragging()\n}))(BlankContent);\n"],"file":"choice.js"}
|
package/configure/lib/choices.js
CHANGED
|
@@ -49,22 +49,23 @@ var _DialogTitle = _interopRequireDefault(require("@material-ui/core/DialogTitle
|
|
|
49
49
|
|
|
50
50
|
var _DialogActions = _interopRequireDefault(require("@material-ui/core/DialogActions"));
|
|
51
51
|
|
|
52
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
52
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
53
53
|
|
|
54
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
54
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
55
55
|
|
|
56
56
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
|
|
57
57
|
|
|
58
|
-
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try {
|
|
58
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
59
59
|
|
|
60
60
|
window.renMath = _mathRendering.renderMath;
|
|
61
61
|
|
|
62
62
|
var InfoDialog = function InfoDialog(_ref) {
|
|
63
63
|
var open = _ref.open,
|
|
64
|
+
title = _ref.title,
|
|
64
65
|
onOk = _ref.onOk;
|
|
65
66
|
return /*#__PURE__*/_react["default"].createElement(_Dialog["default"], {
|
|
66
67
|
open: open
|
|
67
|
-
}, /*#__PURE__*/_react["default"].createElement(_DialogTitle["default"], null,
|
|
68
|
+
}, /*#__PURE__*/_react["default"].createElement(_DialogTitle["default"], null, title || ''), /*#__PURE__*/_react["default"].createElement(_DialogActions["default"], null, onOk && /*#__PURE__*/_react["default"].createElement(_Button["default"], {
|
|
68
69
|
onClick: onOk,
|
|
69
70
|
color: "primary"
|
|
70
71
|
}, "OK")));
|
|
@@ -72,7 +73,8 @@ var InfoDialog = function InfoDialog(_ref) {
|
|
|
72
73
|
|
|
73
74
|
InfoDialog.propTypes = {
|
|
74
75
|
open: _propTypes["default"].bool,
|
|
75
|
-
onOk: _propTypes["default"].func
|
|
76
|
+
onOk: _propTypes["default"].func,
|
|
77
|
+
title: _propTypes["default"].string
|
|
76
78
|
};
|
|
77
79
|
|
|
78
80
|
var styles = function styles(theme) {
|
|
@@ -113,6 +115,12 @@ var Choices = /*#__PURE__*/function (_React$Component) {
|
|
|
113
115
|
open: false
|
|
114
116
|
}
|
|
115
117
|
});
|
|
118
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "rerenderMath", function () {
|
|
119
|
+
//eslint-disable-next-line
|
|
120
|
+
var domNode = _reactDom["default"].findDOMNode((0, _assertThisInitialized2["default"])(_this));
|
|
121
|
+
|
|
122
|
+
(0, _mathRendering.renderMath)(domNode);
|
|
123
|
+
});
|
|
116
124
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onChoiceChanged", function (prevValue, val, key) {
|
|
117
125
|
var _this$props = _this.props,
|
|
118
126
|
onChange = _this$props.onChange,
|
|
@@ -120,22 +128,26 @@ var Choices = /*#__PURE__*/function (_React$Component) {
|
|
|
120
128
|
var choices = model.choices,
|
|
121
129
|
correctResponse = model.correctResponse,
|
|
122
130
|
alternateResponses = model.alternateResponses;
|
|
123
|
-
var
|
|
124
|
-
return c.value === val;
|
|
125
|
-
});
|
|
126
|
-
|
|
127
|
-
if (
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
+
var duplicatedValue = (choices || []).find(function (c) {
|
|
132
|
+
return c.value === val && c.id !== key;
|
|
133
|
+
}); // discard the new added choice or the changes if the choice would be a duplicate to one that already exists
|
|
134
|
+
|
|
135
|
+
if (duplicatedValue) {
|
|
136
|
+
if (prevValue === '') {
|
|
137
|
+
// remove the new added choice from choices
|
|
138
|
+
var _newChoices = (choices || []).filter(function (c) {
|
|
139
|
+
return c.id !== key;
|
|
140
|
+
});
|
|
131
141
|
|
|
132
|
-
|
|
142
|
+
onChange(_newChoices);
|
|
143
|
+
}
|
|
133
144
|
|
|
134
145
|
_this.setState({
|
|
135
146
|
dialog: {
|
|
136
147
|
open: true,
|
|
148
|
+
message: 'Identical answer choices are not allowed and the changes will be discarded',
|
|
137
149
|
onOk: function onOk() {
|
|
138
|
-
_this.setState({
|
|
150
|
+
return _this.setState({
|
|
139
151
|
dialog: {
|
|
140
152
|
open: false
|
|
141
153
|
}
|
|
@@ -252,12 +264,14 @@ var Choices = /*#__PURE__*/function (_React$Component) {
|
|
|
252
264
|
}
|
|
253
265
|
|
|
254
266
|
(0, _createClass2["default"])(Choices, [{
|
|
267
|
+
key: "componentDidMount",
|
|
268
|
+
value: function componentDidMount() {
|
|
269
|
+
this.rerenderMath();
|
|
270
|
+
}
|
|
271
|
+
}, {
|
|
255
272
|
key: "componentDidUpdate",
|
|
256
273
|
value: function componentDidUpdate() {
|
|
257
|
-
|
|
258
|
-
var domNode = _reactDom["default"].findDOMNode(this);
|
|
259
|
-
|
|
260
|
-
(0, _mathRendering.renderMath)(domNode);
|
|
274
|
+
this.rerenderMath();
|
|
261
275
|
|
|
262
276
|
if (this.focusedNodeRef) {
|
|
263
277
|
this.focusedNodeRef.focus('end');
|
|
@@ -273,18 +287,23 @@ var Choices = /*#__PURE__*/function (_React$Component) {
|
|
|
273
287
|
dialog = _this$state.dialog;
|
|
274
288
|
var _this$props5 = this.props,
|
|
275
289
|
classes = _this$props5.classes,
|
|
276
|
-
duplicates = _this$props5.duplicates
|
|
290
|
+
duplicates = _this$props5.duplicates,
|
|
291
|
+
toolbarOpts = _this$props5.toolbarOpts,
|
|
292
|
+
maxChoices = _this$props5.maxChoices,
|
|
293
|
+
choices = _this$props5.model.choices;
|
|
277
294
|
var visibleChoices = this.getVisibleChoices() || [];
|
|
278
295
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
279
296
|
className: classes.design
|
|
280
297
|
}, /*#__PURE__*/_react["default"].createElement(InfoDialog, {
|
|
281
298
|
open: dialog.open,
|
|
299
|
+
title: dialog.message,
|
|
282
300
|
onOk: dialog.onOk
|
|
283
301
|
}), /*#__PURE__*/_react["default"].createElement(_Button["default"], {
|
|
284
302
|
className: classes.addButton,
|
|
285
303
|
variant: "contained",
|
|
286
304
|
color: "primary",
|
|
287
|
-
onClick: this.onAddChoice
|
|
305
|
+
onClick: this.onAddChoice,
|
|
306
|
+
disabled: maxChoices && choices && maxChoices === choices.length
|
|
288
307
|
}, "Add Choice"), /*#__PURE__*/_react["default"].createElement("div", {
|
|
289
308
|
className: classes.altChoices
|
|
290
309
|
}, visibleChoices.map(function (c, index) {
|
|
@@ -317,7 +336,8 @@ var Choices = /*#__PURE__*/function (_React$Component) {
|
|
|
317
336
|
focusedEl: undefined
|
|
318
337
|
});
|
|
319
338
|
},
|
|
320
|
-
disableUnderline: true
|
|
339
|
+
disableUnderline: true,
|
|
340
|
+
toolbarOpts: toolbarOpts
|
|
321
341
|
}));
|
|
322
342
|
}
|
|
323
343
|
|
|
@@ -344,7 +364,9 @@ exports.Choices = Choices;
|
|
|
344
364
|
duplicates: _propTypes["default"].bool,
|
|
345
365
|
model: _propTypes["default"].object.isRequired,
|
|
346
366
|
onChange: _propTypes["default"].func.isRequired,
|
|
347
|
-
classes: _propTypes["default"].object.isRequired
|
|
367
|
+
classes: _propTypes["default"].object.isRequired,
|
|
368
|
+
toolbarOpts: _propTypes["default"].object,
|
|
369
|
+
maxChoices: _propTypes["default"].number
|
|
348
370
|
});
|
|
349
371
|
var Styled = (0, _styles.withStyles)(styles)(Choices);
|
|
350
372
|
var _default = Styled;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/choices.jsx"],"names":["window","renMath","renderMath","InfoDialog","open","onOk","propTypes","PropTypes","bool","func","styles","theme","design","marginTop","spacing","unit","altChoices","alignItems","display","flexWrap","justifyContent","padding","marginBottom","Choices","dialog","prevValue","val","key","props","onChange","model","choices","correctResponse","alternateResponses","exists","filter","c","value","length","newChoices","id","setState","map","usedForResponse","Object","keys","forEach","responseKey","values","alternate","indexOf","alert","newChoicesWithoutTheEmptyOne","choice","focusedEl","oldChoices","duplicates","v","domNode","ReactDOM","findDOMNode","focusedNodeRef","focus","state","classes","visibleChoices","getVisibleChoices","addButton","onAddChoice","index","minWidth","zIndex","ref","prompt","video","disabled","audio","onChoiceChanged","undefined","onChoiceFocus","handleChoiceRemove","React","Component","object","isRequired","Styled"],"mappings":"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","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport EditableHtml from '@pie-lib/editable-html';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport find from 'lodash/find';\nimport Button from '@material-ui/core/Button';\nimport Choice from './choice';\nimport { choiceIsEmpty } from './markupUtils';\nimport { withStyles } from '@material-ui/core/styles';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogActions from '@material-ui/core/DialogActions';\n\nwindow.renMath = renderMath;\n\nconst InfoDialog = ({ open, onOk }) => (\n <Dialog open={open}>\n <DialogTitle>Identical answer choices are not allowed and will be discarded</DialogTitle>\n <DialogActions>\n {onOk && (\n <Button onClick={onOk} color=\"primary\">\n OK\n </Button>\n )}\n </DialogActions>\n </Dialog>\n);\n\nInfoDialog.propTypes = {\n open: PropTypes.bool,\n onOk: PropTypes.func,\n};\n\nconst styles = theme => ({\n design: {\n marginTop: theme.spacing.unit * 2\n },\n altChoices: {\n alignItems: 'flex-start',\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'space-evenly',\n padding: '20px 0 0 0',\n '& > *': {\n marginBottom: '20px'\n }\n }\n});\n\nexport class Choices extends React.Component {\n static propTypes = {\n duplicates: PropTypes.bool,\n model: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n classes: PropTypes.object.isRequired\n };\n\n state = {\n dialog: {\n open: false\n }\n };\n\n componentDidUpdate() {\n //eslint-disable-next-line\n const domNode = ReactDOM.findDOMNode(this);\n\n renderMath(domNode);\n\n if (this.focusedNodeRef) {\n this.focusedNodeRef.focus('end');\n }\n }\n\n onChoiceChanged = (prevValue, val, key) => {\n const { onChange, model } = this.props;\n const { choices, correctResponse, alternateResponses } = model;\n const exists = (choices || []).filter(c => c.value === val);\n\n if(exists.length) {\n const newChoices = (choices || []).filter(c => c.id !== key);\n\n onChange(newChoices);\n\n this.setState({\n dialog: {\n open: true,\n onOk: () => {\n this.setState(\n {\n dialog: {\n open: false\n }\n }\n );\n }\n }\n });\n\n return;\n }\n\n const newChoices = choices\n ? choices.map(c => {\n if (c.id === key) {\n return { ...c, value: val };\n }\n\n return c;\n })\n : [];\n\n if (choiceIsEmpty({ value: val })) {\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) {\n Object.values(alternateResponses).forEach(alternate => {\n if (alternate.indexOf(key) >= 0) {\n usedForResponse = true;\n }\n });\n }\n\n if (usedForResponse) {\n alert('Answer choices cannot be blank.');\n } else {\n if (!choiceIsEmpty({ value: prevValue })) {\n // if the previous value was not empty, it means that the choice can be deleted\n const newChoicesWithoutTheEmptyOne = newChoices.filter(choice => choice.id !== key);\n\n onChange(newChoicesWithoutTheEmptyOne);\n } else {\n onChange(newChoices);\n }\n }\n } else {\n onChange(newChoices);\n }\n };\n\n onChoiceFocus = id => this.setState({\n focusedEl: id\n });\n\n onAddChoice = () => {\n const { model: { choices: oldChoices }, onChange } = this.props;\n\n this.setState({\n focusedEl: `${oldChoices.length}`\n }, () => {\n onChange([\n ...oldChoices,\n {\n id: `${oldChoices.length}`,\n value: ''\n }\n ]\n );\n });\n };\n\n handleChoiceRemove = id => {\n const { onChange, model: { choices } } = this.props;\n const newChoices = choices.filter(c => c.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 => !find(correctResponse, v => v === choice.id));\n };\n\n render() {\n const { focusedEl, dialog } = this.state;\n const {\n classes,\n duplicates,\n } = this.props;\n const visibleChoices = this.getVisibleChoices() || [];\n\n return (\n <div className={classes.design}>\n <InfoDialog\n open={dialog.open}\n onOk={dialog.onOk}\n />\n <Button\n className={classes.addButton}\n variant=\"contained\"\n color=\"primary\"\n onClick={this.onAddChoice}\n >\n Add Choice\n </Button>\n <div\n className={classes.altChoices}\n >\n {\n visibleChoices.map((c, index) => {\n if (focusedEl === c.id) {\n return (\n <div\n key={index}\n style={{\n minWidth: '100%',\n zIndex: '100'\n }}\n >\n <EditableHtml\n ref={ref => (this.focusedNodeRef = ref)}\n className={classes.prompt}\n markup={c.value}\n pluginProps={{\n video: {\n disabled: true\n },\n audio: {\n disabled: true\n }\n }}\n onChange={val => this.onChoiceChanged(c.value, val, c.id)}\n onDone={() => {\n this.setState({\n focusedEl: undefined\n });\n }}\n disableUnderline\n />\n </div>\n );\n }\n\n return (\n <Choice\n key={index}\n duplicates={duplicates}\n targetId=\"0\"\n choice={c}\n onClick={() => this.onChoiceFocus(c.id)}\n onRemoveChoice={() => this.handleChoiceRemove(c.id)}\n />\n );\n })\n }\n </div>\n </div>\n );\n }\n}\n\nconst Styled = withStyles(styles)(Choices);\n\nexport default Styled;\n"],"file":"choices.js"}
|
|
1
|
+
{"version":3,"sources":["../src/choices.jsx"],"names":["window","renMath","renderMath","InfoDialog","open","title","onOk","propTypes","PropTypes","bool","func","string","styles","theme","design","marginTop","spacing","unit","altChoices","alignItems","display","flexWrap","justifyContent","padding","marginBottom","Choices","dialog","domNode","ReactDOM","findDOMNode","prevValue","val","key","props","onChange","model","choices","correctResponse","alternateResponses","duplicatedValue","find","c","value","id","newChoices","filter","setState","message","map","usedForResponse","Object","keys","forEach","responseKey","values","alternate","indexOf","alert","newChoicesWithoutTheEmptyOne","choice","focusedEl","oldChoices","length","duplicates","v","rerenderMath","focusedNodeRef","focus","state","classes","toolbarOpts","maxChoices","visibleChoices","getVisibleChoices","addButton","onAddChoice","index","minWidth","zIndex","ref","prompt","video","disabled","audio","onChoiceChanged","undefined","onChoiceFocus","handleChoiceRemove","React","Component","object","isRequired","number","Styled"],"mappings":"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","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport EditableHtml from '@pie-lib/editable-html';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport find from 'lodash/find';\nimport Button from '@material-ui/core/Button';\nimport Choice from './choice';\nimport { choiceIsEmpty } from './markupUtils';\nimport { withStyles } from '@material-ui/core/styles';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogActions from '@material-ui/core/DialogActions';\n\nwindow.renMath = renderMath;\n\nconst InfoDialog = ({ open, title, onOk }) => (\n <Dialog open={open}>\n <DialogTitle>{title || ''}</DialogTitle>\n <DialogActions>\n {onOk && (\n <Button onClick={onOk} color=\"primary\">\n OK\n </Button>\n )}\n </DialogActions>\n </Dialog>\n);\n\nInfoDialog.propTypes = {\n open: PropTypes.bool,\n onOk: PropTypes.func,\n title: PropTypes.string\n};\n\nconst styles = theme => ({\n design: {\n marginTop: theme.spacing.unit * 2\n },\n altChoices: {\n alignItems: 'flex-start',\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'space-evenly',\n padding: '20px 0 0 0',\n '& > *': {\n marginBottom: '20px'\n }\n }\n});\n\nexport class Choices extends React.Component {\n static propTypes = {\n duplicates: PropTypes.bool,\n model: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n classes: PropTypes.object.isRequired,\n toolbarOpts: PropTypes.object,\n maxChoices: PropTypes.number\n };\n\n state = {\n dialog: {\n open: false\n }\n };\n\n componentDidMount() {\n this.rerenderMath();\n }\n\n componentDidUpdate() {\n this.rerenderMath();\n\n if (this.focusedNodeRef) {\n this.focusedNodeRef.focus('end');\n }\n }\n\n rerenderMath = () => {\n //eslint-disable-next-line\n const domNode = ReactDOM.findDOMNode(this);\n\n renderMath(domNode);\n }\n\n onChoiceChanged = (prevValue, val, key) => {\n const { onChange, model } = this.props;\n const { choices, correctResponse, alternateResponses } = model;\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 dialog: {\n open: true,\n message: 'Identical answer choices are not allowed and the changes will be discarded',\n onOk: () => this.setState({ dialog: { open: false }})\n }\n });\n\n return;\n }\n\n const newChoices = choices\n ? choices.map(c => {\n if (c.id === key) {\n return { ...c, value: val };\n }\n\n return c;\n })\n : [];\n\n if (choiceIsEmpty({ value: val })) {\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) {\n Object.values(alternateResponses).forEach(alternate => {\n if (alternate.indexOf(key) >= 0) {\n usedForResponse = true;\n }\n });\n }\n\n if (usedForResponse) {\n alert('Answer choices cannot be blank.');\n } else {\n if (!choiceIsEmpty({ value: prevValue })) {\n // if the previous value was not empty, it means that the choice can be deleted\n const newChoicesWithoutTheEmptyOne = newChoices.filter(choice => choice.id !== key);\n\n onChange(newChoicesWithoutTheEmptyOne);\n } else {\n onChange(newChoices);\n }\n }\n } else {\n onChange(newChoices);\n }\n };\n\n onChoiceFocus = id => this.setState({\n focusedEl: id\n });\n\n onAddChoice = () => {\n const { model: { choices: oldChoices }, onChange } = this.props;\n\n this.setState({\n focusedEl: `${oldChoices.length}`\n }, () => {\n onChange([\n ...oldChoices,\n {\n id: `${oldChoices.length}`,\n value: ''\n }\n ]\n );\n });\n };\n\n handleChoiceRemove = id => {\n const { onChange, model: { choices } } = this.props;\n const newChoices = choices.filter(c => c.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 => !find(correctResponse, v => v === choice.id));\n };\n\n render() {\n const { focusedEl, dialog } = this.state;\n const {\n classes,\n duplicates,\n toolbarOpts,\n maxChoices,\n model: { choices }\n } = this.props;\n const visibleChoices = this.getVisibleChoices() || [];\n\n return (\n <div className={classes.design}>\n <InfoDialog\n open={dialog.open}\n title={dialog.message}\n onOk={dialog.onOk}\n />\n <Button\n className={classes.addButton}\n variant=\"contained\"\n color=\"primary\"\n onClick={this.onAddChoice}\n disabled={maxChoices && choices && maxChoices === choices.length}\n >\n Add Choice\n </Button>\n <div\n className={classes.altChoices}\n >\n {\n visibleChoices.map((c, index) => {\n if (focusedEl === c.id) {\n return (\n <div\n key={index}\n style={{\n minWidth: '100%',\n zIndex: '100'\n }}\n >\n <EditableHtml\n ref={ref => (this.focusedNodeRef = ref)}\n className={classes.prompt}\n markup={c.value}\n pluginProps={{\n video: {\n disabled: true\n },\n audio: {\n disabled: true\n }\n }}\n onChange={val => this.onChoiceChanged(c.value, val, c.id)}\n onDone={() => {\n this.setState({\n focusedEl: undefined\n });\n }}\n disableUnderline\n toolbarOpts={toolbarOpts}\n />\n </div>\n );\n }\n\n return (\n <Choice\n key={index}\n duplicates={duplicates}\n targetId=\"0\"\n choice={c}\n onClick={() => this.onChoiceFocus(c.id)}\n onRemoveChoice={() => this.handleChoiceRemove(c.id)}\n />\n );\n })\n }\n </div>\n </div>\n );\n }\n}\n\nconst Styled = withStyles(styles)(Choices);\n\nexport default Styled;\n"],"file":"choices.js"}
|
|
@@ -9,7 +9,6 @@ var _default = {
|
|
|
9
9
|
disabled: false,
|
|
10
10
|
mode: 'gather',
|
|
11
11
|
prompt: 'Use the inputs to complete the sentence',
|
|
12
|
-
shuffle: true,
|
|
13
12
|
markup: '',
|
|
14
13
|
choices: [],
|
|
15
14
|
choicesPosition: 'below',
|
|
@@ -18,9 +17,15 @@ var _default = {
|
|
|
18
17
|
rationaleEnabled: true,
|
|
19
18
|
promptEnabled: true,
|
|
20
19
|
teacherInstructionsEnabled: true,
|
|
21
|
-
studentInstructionsEnabled: true
|
|
20
|
+
studentInstructionsEnabled: true,
|
|
21
|
+
toolbarEditorPosition: 'bottom'
|
|
22
22
|
},
|
|
23
23
|
configuration: {
|
|
24
|
+
spellCheck: {
|
|
25
|
+
label: 'Spellcheck',
|
|
26
|
+
settings: false,
|
|
27
|
+
enabled: true
|
|
28
|
+
},
|
|
24
29
|
choicesPosition: {
|
|
25
30
|
settings: true,
|
|
26
31
|
label: 'Choices Position'
|
|
@@ -48,6 +53,17 @@ var _default = {
|
|
|
48
53
|
teacherInstructions: {
|
|
49
54
|
settings: true,
|
|
50
55
|
label: 'Teacher Instructions'
|
|
56
|
+
},
|
|
57
|
+
maxResponseAreas: 10,
|
|
58
|
+
maxImageWidth: {
|
|
59
|
+
teacherInstructions: 300,
|
|
60
|
+
prompt: 300,
|
|
61
|
+
rationale: 300
|
|
62
|
+
},
|
|
63
|
+
maxImageHeight: {
|
|
64
|
+
teacherInstructions: 300,
|
|
65
|
+
prompt: 300,
|
|
66
|
+
rationale: 300
|
|
51
67
|
}
|
|
52
68
|
}
|
|
53
69
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/defaults.js"],"names":["model","disabled","mode","prompt","
|
|
1
|
+
{"version":3,"sources":["../src/defaults.js"],"names":["model","disabled","mode","prompt","markup","choices","choicesPosition","correctResponse","duplicates","rationaleEnabled","promptEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","toolbarEditorPosition","configuration","spellCheck","label","settings","enabled","lockChoiceOrder","partialScoring","rationale","teacherInstructions","maxResponseAreas","maxImageWidth","maxImageHeight"],"mappings":";;;;;;eAAe;AACbA,EAAAA,KAAK,EAAE;AACLC,IAAAA,QAAQ,EAAE,KADL;AAELC,IAAAA,IAAI,EAAE,QAFD;AAGLC,IAAAA,MAAM,EAAE,yCAHH;AAILC,IAAAA,MAAM,EAAE,EAJH;AAKLC,IAAAA,OAAO,EAAE,EALJ;AAMLC,IAAAA,eAAe,EAAE,OANZ;AAOLC,IAAAA,eAAe,EAAE,EAPZ;AAQLC,IAAAA,UAAU,EAAE,IARP;AASLC,IAAAA,gBAAgB,EAAE,IATb;AAULC,IAAAA,aAAa,EAAE,IAVV;AAWLC,IAAAA,0BAA0B,EAAE,IAXvB;AAYLC,IAAAA,0BAA0B,EAAE,IAZvB;AAaLC,IAAAA,qBAAqB,EAAE;AAblB,GADM;AAgBbC,EAAAA,aAAa,EAAE;AACbC,IAAAA,UAAU,EAAE;AACVC,MAAAA,KAAK,EAAE,YADG;AAEVC,MAAAA,QAAQ,EAAE,KAFA;AAGVC,MAAAA,OAAO,EAAC;AAHE,KADC;AAMbZ,IAAAA,eAAe,EAAE;AACfW,MAAAA,QAAQ,EAAE,IADK;AAEfD,MAAAA,KAAK,EAAE;AAFQ,KANJ;AAUbb,IAAAA,MAAM,EAAE;AACNc,MAAAA,QAAQ,EAAE,IADJ;AAEND,MAAAA,KAAK,EAAE;AAFD,KAVK;AAcbR,IAAAA,UAAU,EAAE;AACVS,MAAAA,QAAQ,EAAE,IADA;AAEVD,MAAAA,KAAK,EAAE;AAFG,KAdC;AAkBbG,IAAAA,eAAe,EAAE;AACfF,MAAAA,QAAQ,EAAE,IADK;AAEfD,MAAAA,KAAK,EAAE;AAFQ,KAlBJ;AAsBbI,IAAAA,cAAc,EAAE;AACdH,MAAAA,QAAQ,EAAE,KADI;AAEdD,MAAAA,KAAK,EAAE;AAFO,KAtBH;AA0BbK,IAAAA,SAAS,EAAE;AACTJ,MAAAA,QAAQ,EAAE,IADD;AAETD,MAAAA,KAAK,EAAE;AAFE,KA1BE;AA8BbM,IAAAA,mBAAmB,EAAE;AACnBL,MAAAA,QAAQ,EAAE,IADS;AAEnBD,MAAAA,KAAK,EAAE;AAFY,KA9BR;AAkCbO,IAAAA,gBAAgB,EAAE,EAlCL;AAmCbC,IAAAA,aAAa,EAAE;AACbF,MAAAA,mBAAmB,EAAE,GADR;AAEbnB,MAAAA,MAAM,EAAE,GAFK;AAGbkB,MAAAA,SAAS,EAAE;AAHE,KAnCF;AAwCbI,IAAAA,cAAc,EAAE;AACdH,MAAAA,mBAAmB,EAAE,GADP;AAEdnB,MAAAA,MAAM,EAAE,GAFM;AAGdkB,MAAAA,SAAS,EAAE;AAHG;AAxCH;AAhBF,C","sourcesContent":["export default {\n model: {\n disabled: false,\n mode: 'gather',\n prompt: 'Use the inputs to complete the sentence',\n markup: '',\n choices: [],\n choicesPosition: 'below',\n correctResponse: {},\n duplicates: true,\n rationaleEnabled: true,\n promptEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n toolbarEditorPosition: 'bottom',\n },\n configuration: {\n spellCheck: {\n label: 'Spellcheck',\n settings: false,\n enabled:true\n },\n choicesPosition: {\n settings: true,\n label: 'Choices Position'\n },\n prompt: {\n settings: true,\n label: 'Prompt'\n },\n duplicates: {\n settings: true,\n label: 'Duplicates'\n },\n lockChoiceOrder: {\n settings: true,\n label: 'Lock Choice Order'\n },\n partialScoring: {\n settings: false,\n label: 'Allow Partial Scoring'\n },\n rationale: {\n settings: true,\n label: 'Rationale'\n },\n teacherInstructions: {\n settings: true,\n label: 'Teacher Instructions'\n },\n maxResponseAreas: 10,\n maxImageWidth: {\n teacherInstructions: 300,\n prompt: 300,\n rationale: 300,\n },\n maxImageHeight: {\n teacherInstructions: 300,\n prompt: 300,\n rationale: 300,\n }\n }\n};\n"],"file":"defaults.js"}
|