@pie-element/drag-in-the-blank 8.3.2-next.3 → 8.3.2-tip-tap.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 +11 -0
- package/configure/CHANGELOG.md +11 -0
- package/configure/lib/__tests__/choice.test.js +128 -0
- package/configure/lib/__tests__/choices.test.js +350 -0
- package/configure/lib/__tests__/main.test.js +174 -0
- package/configure/lib/__tests__/markupUtils.test.js +105 -0
- package/configure/lib/choices.js +2 -2
- package/configure/lib/choices.js.map +1 -1
- package/configure/lib/main.js +6 -6
- package/configure/lib/main.js.map +1 -1
- package/configure/package.json +5 -5
- package/controller/CHANGELOG.md +11 -0
- package/controller/lib/__tests__/index.test.js +1135 -0
- package/controller/package.json +1 -1
- package/docs/demo/pie.manifest.json +11 -0
- package/lib/__tests__/index.test.js +130 -0
- package/lib/__tests__/main.test.js +92 -0
- package/package.json +5 -5
- package/LICENSE.md +0 -5
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
6
|
+
|
|
7
|
+
var _enzyme = require("enzyme");
|
|
8
|
+
|
|
9
|
+
var _react = _interopRequireDefault(require("react"));
|
|
10
|
+
|
|
11
|
+
var _main = require("../main");
|
|
12
|
+
|
|
13
|
+
var _defaults = _interopRequireDefault(require("../defaults"));
|
|
14
|
+
|
|
15
|
+
var _markupUtils = require("../markupUtils");
|
|
16
|
+
|
|
17
|
+
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; }
|
|
18
|
+
|
|
19
|
+
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; }
|
|
20
|
+
|
|
21
|
+
jest.mock('@pie-lib/config-ui', function () {
|
|
22
|
+
return {
|
|
23
|
+
choiceUtils: {
|
|
24
|
+
firstAvailableIndex: jest.fn()
|
|
25
|
+
},
|
|
26
|
+
settings: {
|
|
27
|
+
Panel: function Panel(props) {
|
|
28
|
+
return /*#__PURE__*/_react["default"].createElement("div", props);
|
|
29
|
+
},
|
|
30
|
+
toggle: jest.fn(),
|
|
31
|
+
radio: jest.fn(),
|
|
32
|
+
dropdown: jest.fn()
|
|
33
|
+
},
|
|
34
|
+
layout: {
|
|
35
|
+
ConfigLayout: function ConfigLayout(props) {
|
|
36
|
+
return /*#__PURE__*/_react["default"].createElement("div", null, props.children);
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
InputContainer: function InputContainer(props) {
|
|
40
|
+
return /*#__PURE__*/_react["default"].createElement("div", null, props.children);
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
});
|
|
44
|
+
var model = {
|
|
45
|
+
markup: '{{0}} + {{1}} = 15',
|
|
46
|
+
prompt: '<p>Solve the equation below.</p>',
|
|
47
|
+
choices: [{
|
|
48
|
+
value: '<div>6</div>',
|
|
49
|
+
id: '0'
|
|
50
|
+
}, {
|
|
51
|
+
value: '<div>9</div>',
|
|
52
|
+
id: '1'
|
|
53
|
+
}],
|
|
54
|
+
choicesPosition: 'below',
|
|
55
|
+
correctResponse: {
|
|
56
|
+
0: '0',
|
|
57
|
+
1: '1'
|
|
58
|
+
},
|
|
59
|
+
duplicates: true,
|
|
60
|
+
alternateResponses: [['1'], ['0']],
|
|
61
|
+
rationale: '<p>A correct response is shown below:</p><ul><li>2/6 = 1/3</li><li>4/8 = 1/2</li><li>6/10 = 3/5</li><li>9/12 = 3/4</li></ul>'
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
var prepareModel = function prepareModel() {
|
|
65
|
+
var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
66
|
+
|
|
67
|
+
var joinedObj = _objectSpread(_objectSpread({}, _defaults["default"].model), model);
|
|
68
|
+
|
|
69
|
+
var slateMarkup = model.slateMarkup || (0, _markupUtils.createSlateMarkup)(joinedObj.markup, joinedObj.choices, joinedObj.correctResponse);
|
|
70
|
+
var processedMarkup = (0, _markupUtils.processMarkup)(slateMarkup);
|
|
71
|
+
return _objectSpread(_objectSpread({}, joinedObj), {}, {
|
|
72
|
+
slateMarkup: slateMarkup,
|
|
73
|
+
markup: processedMarkup.markup,
|
|
74
|
+
correctResponse: processedMarkup.correctResponse
|
|
75
|
+
});
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
describe('Main', function () {
|
|
79
|
+
var onModelChanged = jest.fn();
|
|
80
|
+
var onConfigurationChanged = jest.fn();
|
|
81
|
+
|
|
82
|
+
var wrapper = function wrapper(extras) {
|
|
83
|
+
var defaults = {
|
|
84
|
+
onModelChanged: onModelChanged,
|
|
85
|
+
onConfigurationChanged: onConfigurationChanged,
|
|
86
|
+
classes: {},
|
|
87
|
+
model: prepareModel(_objectSpread(_objectSpread({}, model), extras)),
|
|
88
|
+
configuration: _defaults["default"].configuration
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
var props = _objectSpread({}, defaults);
|
|
92
|
+
|
|
93
|
+
return (0, _enzyme.shallow)( /*#__PURE__*/_react["default"].createElement(_main.Main, props));
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
describe('snapshot', function () {
|
|
97
|
+
it('renders with teacher instructions, prompt and rationale even if not set', function () {
|
|
98
|
+
expect(wrapper()).toMatchSnapshot();
|
|
99
|
+
});
|
|
100
|
+
it('renders without teacher instructions, prompt and rationale', function () {
|
|
101
|
+
expect(wrapper({
|
|
102
|
+
promptEnabled: false,
|
|
103
|
+
teacherInstructionsEnabled: false,
|
|
104
|
+
rationaleEnabled: false
|
|
105
|
+
})).toMatchSnapshot();
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
describe('logic', function () {
|
|
109
|
+
var w;
|
|
110
|
+
beforeEach(function () {
|
|
111
|
+
w = wrapper();
|
|
112
|
+
});
|
|
113
|
+
describe('onModelChange', function () {
|
|
114
|
+
it('changes the model', function () {
|
|
115
|
+
w.instance().onModelChange({
|
|
116
|
+
promptEnabled: false
|
|
117
|
+
});
|
|
118
|
+
expect(onModelChanged).toBeCalledWith(_objectSpread(_objectSpread({}, prepareModel(model)), {}, {
|
|
119
|
+
promptEnabled: false
|
|
120
|
+
}));
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
describe('onPromptChanged', function () {
|
|
124
|
+
it('changes the prompt value', function () {
|
|
125
|
+
w.instance().onPromptChanged('This is the new prompt');
|
|
126
|
+
expect(onModelChanged).toBeCalledWith(_objectSpread(_objectSpread({}, prepareModel(model)), {}, {
|
|
127
|
+
prompt: 'This is the new prompt'
|
|
128
|
+
}));
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
describe('onRationaleChanged', function () {
|
|
132
|
+
it('changes the rationale value', function () {
|
|
133
|
+
w.instance().onRationaleChanged('New Rationale');
|
|
134
|
+
expect(onModelChanged).toBeCalledWith(_objectSpread(_objectSpread({}, prepareModel(model)), {}, {
|
|
135
|
+
rationale: 'New Rationale'
|
|
136
|
+
}));
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
describe('onTeacherInstructionsChanged', function () {
|
|
140
|
+
it('changes the teacher instructions value', function () {
|
|
141
|
+
w.instance().onTeacherInstructionsChanged('New Teacher Instructions');
|
|
142
|
+
expect(onModelChanged).toBeCalledWith(_objectSpread(_objectSpread({}, prepareModel(model)), {}, {
|
|
143
|
+
teacherInstructions: 'New Teacher Instructions'
|
|
144
|
+
}));
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
describe('onMarkupChanged', function () {
|
|
148
|
+
it('changes slate markup value', function () {
|
|
149
|
+
var slateMarkup = '<span data-type="drag_in_the_blank" data-index="0" data-id="0" data-value="<div>6</div>"></span> + <span data-type="drag_in_the_blank" data-index="1" data-id="1" data-value="<div>9</div>"></span> = 15eggs';
|
|
150
|
+
w.instance().onMarkupChanged(slateMarkup);
|
|
151
|
+
expect(onModelChanged).toBeCalledWith(_objectSpread(_objectSpread({}, prepareModel(model)), {}, {
|
|
152
|
+
slateMarkup: slateMarkup
|
|
153
|
+
}));
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
describe('onResponsesChanged', function () {
|
|
157
|
+
it('changes choices and slateMarkup as well', function () {
|
|
158
|
+
var newChoices = [{
|
|
159
|
+
value: '<div>6</div>',
|
|
160
|
+
id: '0'
|
|
161
|
+
}, {
|
|
162
|
+
value: '<div>3^2</div>',
|
|
163
|
+
id: '1'
|
|
164
|
+
}];
|
|
165
|
+
w.instance().onResponsesChanged(newChoices);
|
|
166
|
+
expect(onModelChanged).toBeCalledWith(_objectSpread(_objectSpread({}, prepareModel(model)), {}, {
|
|
167
|
+
slateMarkup: '<span data-type="drag_in_the_blank" data-index="0" data-id="0" data-value="<div>6</div>"></span> + <span data-type="drag_in_the_blank" data-index="1" data-id="1" data-value="<div>3^2</div>"></span> = 15',
|
|
168
|
+
choices: newChoices
|
|
169
|
+
}));
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vbWFpbi50ZXN0LmpzeCJdLCJuYW1lcyI6WyJqZXN0IiwibW9jayIsImNob2ljZVV0aWxzIiwiZmlyc3RBdmFpbGFibGVJbmRleCIsImZuIiwic2V0dGluZ3MiLCJQYW5lbCIsInByb3BzIiwidG9nZ2xlIiwicmFkaW8iLCJkcm9wZG93biIsImxheW91dCIsIkNvbmZpZ0xheW91dCIsImNoaWxkcmVuIiwiSW5wdXRDb250YWluZXIiLCJtb2RlbCIsIm1hcmt1cCIsInByb21wdCIsImNob2ljZXMiLCJ2YWx1ZSIsImlkIiwiY2hvaWNlc1Bvc2l0aW9uIiwiY29ycmVjdFJlc3BvbnNlIiwiZHVwbGljYXRlcyIsImFsdGVybmF0ZVJlc3BvbnNlcyIsInJhdGlvbmFsZSIsInByZXBhcmVNb2RlbCIsImpvaW5lZE9iaiIsInNlbnNpYmxlRGVmYXVsdHMiLCJzbGF0ZU1hcmt1cCIsInByb2Nlc3NlZE1hcmt1cCIsImRlc2NyaWJlIiwib25Nb2RlbENoYW5nZWQiLCJvbkNvbmZpZ3VyYXRpb25DaGFuZ2VkIiwid3JhcHBlciIsImV4dHJhcyIsImRlZmF1bHRzIiwiY2xhc3NlcyIsImNvbmZpZ3VyYXRpb24iLCJpdCIsImV4cGVjdCIsInRvTWF0Y2hTbmFwc2hvdCIsInByb21wdEVuYWJsZWQiLCJ0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZCIsInJhdGlvbmFsZUVuYWJsZWQiLCJ3IiwiYmVmb3JlRWFjaCIsImluc3RhbmNlIiwib25Nb2RlbENoYW5nZSIsInRvQmVDYWxsZWRXaXRoIiwib25Qcm9tcHRDaGFuZ2VkIiwib25SYXRpb25hbGVDaGFuZ2VkIiwib25UZWFjaGVySW5zdHJ1Y3Rpb25zQ2hhbmdlZCIsInRlYWNoZXJJbnN0cnVjdGlvbnMiLCJvbk1hcmt1cENoYW5nZWQiLCJuZXdDaG9pY2VzIiwib25SZXNwb25zZXNDaGFuZ2VkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7Ozs7O0FBRUFBLElBQUksQ0FBQ0MsSUFBTCxDQUFVLG9CQUFWLEVBQWdDO0FBQUEsU0FBTztBQUNyQ0MsSUFBQUEsV0FBVyxFQUFFO0FBQ1hDLE1BQUFBLG1CQUFtQixFQUFFSCxJQUFJLENBQUNJLEVBQUw7QUFEVixLQUR3QjtBQUlyQ0MsSUFBQUEsUUFBUSxFQUFFO0FBQ1JDLE1BQUFBLEtBQUssRUFBRSxlQUFDQyxLQUFEO0FBQUEsNEJBQVcsdUNBQVNBLEtBQVQsQ0FBWDtBQUFBLE9BREM7QUFFUkMsTUFBQUEsTUFBTSxFQUFFUixJQUFJLENBQUNJLEVBQUwsRUFGQTtBQUdSSyxNQUFBQSxLQUFLLEVBQUVULElBQUksQ0FBQ0ksRUFBTCxFQUhDO0FBSVJNLE1BQUFBLFFBQVEsRUFBRVYsSUFBSSxDQUFDSSxFQUFMO0FBSkYsS0FKMkI7QUFVckNPLElBQUFBLE1BQU0sRUFBRTtBQUNOQyxNQUFBQSxZQUFZLEVBQUUsc0JBQUNMLEtBQUQ7QUFBQSw0QkFBVyw2Q0FBTUEsS0FBSyxDQUFDTSxRQUFaLENBQVg7QUFBQTtBQURSLEtBVjZCO0FBYXJDQyxJQUFBQSxjQUFjLEVBQUUsd0JBQUNQLEtBQUQ7QUFBQSwwQkFBVyw2Q0FBTUEsS0FBSyxDQUFDTSxRQUFaLENBQVg7QUFBQTtBQWJxQixHQUFQO0FBQUEsQ0FBaEM7QUFnQkEsSUFBTUUsS0FBSyxHQUFHO0FBQ1pDLEVBQUFBLE1BQU0sRUFBRSxvQkFESTtBQUVaQyxFQUFBQSxNQUFNLEVBQUUsa0NBRkk7QUFHWkMsRUFBQUEsT0FBTyxFQUFFLENBQ1A7QUFBRUMsSUFBQUEsS0FBSyxFQUFFLGNBQVQ7QUFBeUJDLElBQUFBLEVBQUUsRUFBRTtBQUE3QixHQURPLEVBRVA7QUFBRUQsSUFBQUEsS0FBSyxFQUFFLGNBQVQ7QUFBeUJDLElBQUFBLEVBQUUsRUFBRTtBQUE3QixHQUZPLENBSEc7QUFPWkMsRUFBQUEsZUFBZSxFQUFFLE9BUEw7QUFRWkMsRUFBQUEsZUFBZSxFQUFFO0FBQ2YsT0FBRyxHQURZO0FBRWYsT0FBRztBQUZZLEdBUkw7QUFZWkMsRUFBQUEsVUFBVSxFQUFFLElBWkE7QUFhWkMsRUFBQUEsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLEdBQUQsQ0FBRCxFQUFRLENBQUMsR0FBRCxDQUFSLENBYlI7QUFjWkMsRUFBQUEsU0FBUyxFQUNQO0FBZlUsQ0FBZDs7QUFrQkEsSUFBTUMsWUFBWSxHQUFHLFNBQWZBLFlBQWUsR0FBZ0I7QUFBQSxNQUFmWCxLQUFlLHVFQUFQLEVBQU87O0FBQ25DLE1BQU1ZLFNBQVMsbUNBQ1ZDLHFCQUFpQmIsS0FEUCxHQUVWQSxLQUZVLENBQWY7O0FBSUEsTUFBTWMsV0FBVyxHQUNmZCxLQUFLLENBQUNjLFdBQU4sSUFBcUIsb0NBQWtCRixTQUFTLENBQUNYLE1BQTVCLEVBQW9DVyxTQUFTLENBQUNULE9BQTlDLEVBQXVEUyxTQUFTLENBQUNMLGVBQWpFLENBRHZCO0FBRUEsTUFBTVEsZUFBZSxHQUFHLGdDQUFjRCxXQUFkLENBQXhCO0FBRUEseUNBQ0tGLFNBREw7QUFFRUUsSUFBQUEsV0FBVyxFQUFYQSxXQUZGO0FBR0ViLElBQUFBLE1BQU0sRUFBRWMsZUFBZSxDQUFDZCxNQUgxQjtBQUlFTSxJQUFBQSxlQUFlLEVBQUVRLGVBQWUsQ0FBQ1I7QUFKbkM7QUFNRCxDQWZEOztBQWlCQVMsUUFBUSxDQUFDLE1BQUQsRUFBUyxZQUFNO0FBQ3JCLE1BQUlDLGNBQWMsR0FBR2hDLElBQUksQ0FBQ0ksRUFBTCxFQUFyQjtBQUNBLE1BQUk2QixzQkFBc0IsR0FBR2pDLElBQUksQ0FBQ0ksRUFBTCxFQUE3Qjs7QUFFQSxNQUFNOEIsT0FBTyxHQUFHLFNBQVZBLE9BQVUsQ0FBQ0MsTUFBRCxFQUFZO0FBQzFCLFFBQU1DLFFBQVEsR0FBRztBQUNmSixNQUFBQSxjQUFjLEVBQWRBLGNBRGU7QUFFZkMsTUFBQUEsc0JBQXNCLEVBQXRCQSxzQkFGZTtBQUdmSSxNQUFBQSxPQUFPLEVBQUUsRUFITTtBQUlmdEIsTUFBQUEsS0FBSyxFQUFFVyxZQUFZLGlDQUNkWCxLQURjLEdBRWRvQixNQUZjLEVBSko7QUFRZkcsTUFBQUEsYUFBYSxFQUFFVixxQkFBaUJVO0FBUmpCLEtBQWpCOztBQVVBLFFBQU0vQixLQUFLLHFCQUFRNkIsUUFBUixDQUFYOztBQUVBLFdBQU8sbUNBQVEsZ0NBQUMsVUFBRCxFQUFVN0IsS0FBVixDQUFSLENBQVA7QUFDRCxHQWREOztBQWdCQXdCLEVBQUFBLFFBQVEsQ0FBQyxVQUFELEVBQWEsWUFBTTtBQUN6QlEsSUFBQUEsRUFBRSxDQUFDLHlFQUFELEVBQTRFLFlBQU07QUFDbEZDLE1BQUFBLE1BQU0sQ0FBQ04sT0FBTyxFQUFSLENBQU4sQ0FBa0JPLGVBQWxCO0FBQ0QsS0FGQyxDQUFGO0FBSUFGLElBQUFBLEVBQUUsQ0FBQyw0REFBRCxFQUErRCxZQUFNO0FBQ3JFQyxNQUFBQSxNQUFNLENBQ0pOLE9BQU8sQ0FBQztBQUNOUSxRQUFBQSxhQUFhLEVBQUUsS0FEVDtBQUVOQyxRQUFBQSwwQkFBMEIsRUFBRSxLQUZ0QjtBQUdOQyxRQUFBQSxnQkFBZ0IsRUFBRTtBQUhaLE9BQUQsQ0FESCxDQUFOLENBTUVILGVBTkY7QUFPRCxLQVJDLENBQUY7QUFTRCxHQWRPLENBQVI7QUFnQkFWLEVBQUFBLFFBQVEsQ0FBQyxPQUFELEVBQVUsWUFBTTtBQUN0QixRQUFJYyxDQUFKO0FBRUFDLElBQUFBLFVBQVUsQ0FBQyxZQUFNO0FBQ2ZELE1BQUFBLENBQUMsR0FBR1gsT0FBTyxFQUFYO0FBQ0QsS0FGUyxDQUFWO0FBSUFILElBQUFBLFFBQVEsQ0FBQyxlQUFELEVBQWtCLFlBQU07QUFDOUJRLE1BQUFBLEVBQUUsQ0FBQyxtQkFBRCxFQUFzQixZQUFNO0FBQzVCTSxRQUFBQSxDQUFDLENBQUNFLFFBQUYsR0FBYUMsYUFBYixDQUEyQjtBQUFFTixVQUFBQSxhQUFhLEVBQUU7QUFBakIsU0FBM0I7QUFFQUYsUUFBQUEsTUFBTSxDQUFDUixjQUFELENBQU4sQ0FBdUJpQixjQUF2QixpQ0FDS3ZCLFlBQVksQ0FBQ1gsS0FBRCxDQURqQjtBQUVFMkIsVUFBQUEsYUFBYSxFQUFFO0FBRmpCO0FBSUQsT0FQQyxDQUFGO0FBUUQsS0FUTyxDQUFSO0FBV0FYLElBQUFBLFFBQVEsQ0FBQyxpQkFBRCxFQUFvQixZQUFNO0FBQ2hDUSxNQUFBQSxFQUFFLENBQUMsMEJBQUQsRUFBNkIsWUFBTTtBQUNuQ00sUUFBQUEsQ0FBQyxDQUFDRSxRQUFGLEdBQWFHLGVBQWIsQ0FBNkIsd0JBQTdCO0FBRUFWLFFBQUFBLE1BQU0sQ0FBQ1IsY0FBRCxDQUFOLENBQXVCaUIsY0FBdkIsaUNBQ0t2QixZQUFZLENBQUNYLEtBQUQsQ0FEakI7QUFFRUUsVUFBQUEsTUFBTSxFQUFFO0FBRlY7QUFJRCxPQVBDLENBQUY7QUFRRCxLQVRPLENBQVI7QUFXQWMsSUFBQUEsUUFBUSxDQUFDLG9CQUFELEVBQXVCLFlBQU07QUFDbkNRLE1BQUFBLEVBQUUsQ0FBQyw2QkFBRCxFQUFnQyxZQUFNO0FBQ3RDTSxRQUFBQSxDQUFDLENBQUNFLFFBQUYsR0FBYUksa0JBQWIsQ0FBZ0MsZUFBaEM7QUFFQVgsUUFBQUEsTUFBTSxDQUFDUixjQUFELENBQU4sQ0FBdUJpQixjQUF2QixpQ0FDS3ZCLFlBQVksQ0FBQ1gsS0FBRCxDQURqQjtBQUVFVSxVQUFBQSxTQUFTLEVBQUU7QUFGYjtBQUlELE9BUEMsQ0FBRjtBQVFELEtBVE8sQ0FBUjtBQVdBTSxJQUFBQSxRQUFRLENBQUMsOEJBQUQsRUFBaUMsWUFBTTtBQUM3Q1EsTUFBQUEsRUFBRSxDQUFDLHdDQUFELEVBQTJDLFlBQU07QUFDakRNLFFBQUFBLENBQUMsQ0FBQ0UsUUFBRixHQUFhSyw0QkFBYixDQUEwQywwQkFBMUM7QUFFQVosUUFBQUEsTUFBTSxDQUFDUixjQUFELENBQU4sQ0FBdUJpQixjQUF2QixpQ0FDS3ZCLFlBQVksQ0FBQ1gsS0FBRCxDQURqQjtBQUVFc0MsVUFBQUEsbUJBQW1CLEVBQUU7QUFGdkI7QUFJRCxPQVBDLENBQUY7QUFRRCxLQVRPLENBQVI7QUFXQXRCLElBQUFBLFFBQVEsQ0FBQyxpQkFBRCxFQUFvQixZQUFNO0FBQ2hDUSxNQUFBQSxFQUFFLENBQUMsNEJBQUQsRUFBK0IsWUFBTTtBQUNyQyxZQUFNVixXQUFXLEdBQ2Ysc09BREY7QUFHQWdCLFFBQUFBLENBQUMsQ0FBQ0UsUUFBRixHQUFhTyxlQUFiLENBQTZCekIsV0FBN0I7QUFFQVcsUUFBQUEsTUFBTSxDQUFDUixjQUFELENBQU4sQ0FBdUJpQixjQUF2QixpQ0FDS3ZCLFlBQVksQ0FBQ1gsS0FBRCxDQURqQjtBQUVFYyxVQUFBQSxXQUFXLEVBQVhBO0FBRkY7QUFJRCxPQVZDLENBQUY7QUFXRCxLQVpPLENBQVI7QUFjQUUsSUFBQUEsUUFBUSxDQUFDLG9CQUFELEVBQXVCLFlBQU07QUFDbkNRLE1BQUFBLEVBQUUsQ0FBQyx5Q0FBRCxFQUE0QyxZQUFNO0FBQ2xELFlBQU1nQixVQUFVLEdBQUcsQ0FDakI7QUFBRXBDLFVBQUFBLEtBQUssRUFBRSxjQUFUO0FBQXlCQyxVQUFBQSxFQUFFLEVBQUU7QUFBN0IsU0FEaUIsRUFFakI7QUFBRUQsVUFBQUEsS0FBSyxFQUFFLGdCQUFUO0FBQTJCQyxVQUFBQSxFQUFFLEVBQUU7QUFBL0IsU0FGaUIsQ0FBbkI7QUFLQXlCLFFBQUFBLENBQUMsQ0FBQ0UsUUFBRixHQUFhUyxrQkFBYixDQUFnQ0QsVUFBaEM7QUFFQWYsUUFBQUEsTUFBTSxDQUFDUixjQUFELENBQU4sQ0FBdUJpQixjQUF2QixpQ0FDS3ZCLFlBQVksQ0FBQ1gsS0FBRCxDQURqQjtBQUVFYyxVQUFBQSxXQUFXLEVBQ1Qsb09BSEo7QUFJRVgsVUFBQUEsT0FBTyxFQUFFcUM7QUFKWDtBQU1ELE9BZEMsQ0FBRjtBQWVELEtBaEJPLENBQVI7QUFpQkQsR0FsRk8sQ0FBUjtBQW1GRCxDQXZITyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2hhbGxvdyB9IGZyb20gJ2VuenltZSc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgeyBNYWluIH0gZnJvbSAnLi4vbWFpbic7XG5pbXBvcnQgc2Vuc2libGVEZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cyc7XG5pbXBvcnQgeyBjcmVhdGVTbGF0ZU1hcmt1cCwgcHJvY2Vzc01hcmt1cCB9IGZyb20gJy4uL21hcmt1cFV0aWxzJztcblxuamVzdC5tb2NrKCdAcGllLWxpYi9jb25maWctdWknLCAoKSA9PiAoe1xuICBjaG9pY2VVdGlsczoge1xuICAgIGZpcnN0QXZhaWxhYmxlSW5kZXg6IGplc3QuZm4oKSxcbiAgfSxcbiAgc2V0dGluZ3M6IHtcbiAgICBQYW5lbDogKHByb3BzKSA9PiA8ZGl2IHsuLi5wcm9wc30gLz4sXG4gICAgdG9nZ2xlOiBqZXN0LmZuKCksXG4gICAgcmFkaW86IGplc3QuZm4oKSxcbiAgICBkcm9wZG93bjogamVzdC5mbigpLFxuICB9LFxuICBsYXlvdXQ6IHtcbiAgICBDb25maWdMYXlvdXQ6IChwcm9wcykgPT4gPGRpdj57cHJvcHMuY2hpbGRyZW59PC9kaXY+LFxuICB9LFxuICBJbnB1dENvbnRhaW5lcjogKHByb3BzKSA9PiA8ZGl2Pntwcm9wcy5jaGlsZHJlbn08L2Rpdj4sXG59KSk7XG5cbmNvbnN0IG1vZGVsID0ge1xuICBtYXJrdXA6ICd7ezB9fSArIHt7MX19ID0gMTUnLFxuICBwcm9tcHQ6ICc8cD5Tb2x2ZSB0aGUgZXF1YXRpb24gYmVsb3cuPC9wPicsXG4gIGNob2ljZXM6IFtcbiAgICB7IHZhbHVlOiAnPGRpdj42PC9kaXY+JywgaWQ6ICcwJyB9LFxuICAgIHsgdmFsdWU6ICc8ZGl2Pjk8L2Rpdj4nLCBpZDogJzEnIH0sXG4gIF0sXG4gIGNob2ljZXNQb3NpdGlvbjogJ2JlbG93JyxcbiAgY29ycmVjdFJlc3BvbnNlOiB7XG4gICAgMDogJzAnLFxuICAgIDE6ICcxJyxcbiAgfSxcbiAgZHVwbGljYXRlczogdHJ1ZSxcbiAgYWx0ZXJuYXRlUmVzcG9uc2VzOiBbWycxJ10sIFsnMCddXSxcbiAgcmF0aW9uYWxlOlxuICAgICc8cD5BIGNvcnJlY3QgcmVzcG9uc2UgaXMgc2hvd24gYmVsb3c6PC9wPjx1bD48bGk+Mi82ID0gMS8zPC9saT48bGk+NC84ID0gMS8yPC9saT48bGk+Ni8xMCA9IDMvNTwvbGk+PGxpPjkvMTIgPSAzLzQ8L2xpPjwvdWw+Jyxcbn07XG5cbmNvbnN0IHByZXBhcmVNb2RlbCA9IChtb2RlbCA9IHt9KSA9PiB7XG4gIGNvbnN0IGpvaW5lZE9iaiA9IHtcbiAgICAuLi5zZW5zaWJsZURlZmF1bHRzLm1vZGVsLFxuICAgIC4uLm1vZGVsLFxuICB9O1xuICBjb25zdCBzbGF0ZU1hcmt1cCA9XG4gICAgbW9kZWwuc2xhdGVNYXJrdXAgfHwgY3JlYXRlU2xhdGVNYXJrdXAoam9pbmVkT2JqLm1hcmt1cCwgam9pbmVkT2JqLmNob2ljZXMsIGpvaW5lZE9iai5jb3JyZWN0UmVzcG9uc2UpO1xuICBjb25zdCBwcm9jZXNzZWRNYXJrdXAgPSBwcm9jZXNzTWFya3VwKHNsYXRlTWFya3VwKTtcblxuICByZXR1cm4ge1xuICAgIC4uLmpvaW5lZE9iaixcbiAgICBzbGF0ZU1hcmt1cCxcbiAgICBtYXJrdXA6IHByb2Nlc3NlZE1hcmt1cC5tYXJrdXAsXG4gICAgY29ycmVjdFJlc3BvbnNlOiBwcm9jZXNzZWRNYXJrdXAuY29ycmVjdFJlc3BvbnNlLFxuICB9O1xufTtcblxuZGVzY3JpYmUoJ01haW4nLCAoKSA9PiB7XG4gIGxldCBvbk1vZGVsQ2hhbmdlZCA9IGplc3QuZm4oKTtcbiAgbGV0IG9uQ29uZmlndXJhdGlvbkNoYW5nZWQgPSBqZXN0LmZuKCk7XG5cbiAgY29uc3Qgd3JhcHBlciA9IChleHRyYXMpID0+IHtcbiAgICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICAgIG9uTW9kZWxDaGFuZ2VkLFxuICAgICAgb25Db25maWd1cmF0aW9uQ2hhbmdlZCxcbiAgICAgIGNsYXNzZXM6IHt9LFxuICAgICAgbW9kZWw6IHByZXBhcmVNb2RlbCh7XG4gICAgICAgIC4uLm1vZGVsLFxuICAgICAgICAuLi5leHRyYXMsXG4gICAgICB9KSxcbiAgICAgIGNvbmZpZ3VyYXRpb246IHNlbnNpYmxlRGVmYXVsdHMuY29uZmlndXJhdGlvbixcbiAgICB9O1xuICAgIGNvbnN0IHByb3BzID0geyAuLi5kZWZhdWx0cyB9O1xuXG4gICAgcmV0dXJuIHNoYWxsb3coPE1haW4gey4uLnByb3BzfSAvPik7XG4gIH07XG5cbiAgZGVzY3JpYmUoJ3NuYXBzaG90JywgKCkgPT4ge1xuICAgIGl0KCdyZW5kZXJzIHdpdGggdGVhY2hlciBpbnN0cnVjdGlvbnMsIHByb21wdCBhbmQgcmF0aW9uYWxlIGV2ZW4gaWYgbm90IHNldCcsICgpID0+IHtcbiAgICAgIGV4cGVjdCh3cmFwcGVyKCkpLnRvTWF0Y2hTbmFwc2hvdCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgd2l0aG91dCB0ZWFjaGVyIGluc3RydWN0aW9ucywgcHJvbXB0IGFuZCByYXRpb25hbGUnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoXG4gICAgICAgIHdyYXBwZXIoe1xuICAgICAgICAgIHByb21wdEVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgIHRlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgICByYXRpb25hbGVFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgfSksXG4gICAgICApLnRvTWF0Y2hTbmFwc2hvdCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnbG9naWMnLCAoKSA9PiB7XG4gICAgbGV0IHc7XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgIHcgPSB3cmFwcGVyKCk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnb25Nb2RlbENoYW5nZScsICgpID0+IHtcbiAgICAgIGl0KCdjaGFuZ2VzIHRoZSBtb2RlbCcsICgpID0+IHtcbiAgICAgICAgdy5pbnN0YW5jZSgpLm9uTW9kZWxDaGFuZ2UoeyBwcm9tcHRFbmFibGVkOiBmYWxzZSB9KTtcblxuICAgICAgICBleHBlY3Qob25Nb2RlbENoYW5nZWQpLnRvQmVDYWxsZWRXaXRoKHtcbiAgICAgICAgICAuLi5wcmVwYXJlTW9kZWwobW9kZWwpLFxuICAgICAgICAgIHByb21wdEVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ29uUHJvbXB0Q2hhbmdlZCcsICgpID0+IHtcbiAgICAgIGl0KCdjaGFuZ2VzIHRoZSBwcm9tcHQgdmFsdWUnLCAoKSA9PiB7XG4gICAgICAgIHcuaW5zdGFuY2UoKS5vblByb21wdENoYW5nZWQoJ1RoaXMgaXMgdGhlIG5ldyBwcm9tcHQnKTtcblxuICAgICAgICBleHBlY3Qob25Nb2RlbENoYW5nZWQpLnRvQmVDYWxsZWRXaXRoKHtcbiAgICAgICAgICAuLi5wcmVwYXJlTW9kZWwobW9kZWwpLFxuICAgICAgICAgIHByb21wdDogJ1RoaXMgaXMgdGhlIG5ldyBwcm9tcHQnLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ29uUmF0aW9uYWxlQ2hhbmdlZCcsICgpID0+IHtcbiAgICAgIGl0KCdjaGFuZ2VzIHRoZSByYXRpb25hbGUgdmFsdWUnLCAoKSA9PiB7XG4gICAgICAgIHcuaW5zdGFuY2UoKS5vblJhdGlvbmFsZUNoYW5nZWQoJ05ldyBSYXRpb25hbGUnKTtcblxuICAgICAgICBleHBlY3Qob25Nb2RlbENoYW5nZWQpLnRvQmVDYWxsZWRXaXRoKHtcbiAgICAgICAgICAuLi5wcmVwYXJlTW9kZWwobW9kZWwpLFxuICAgICAgICAgIHJhdGlvbmFsZTogJ05ldyBSYXRpb25hbGUnLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ29uVGVhY2hlckluc3RydWN0aW9uc0NoYW5nZWQnLCAoKSA9PiB7XG4gICAgICBpdCgnY2hhbmdlcyB0aGUgdGVhY2hlciBpbnN0cnVjdGlvbnMgdmFsdWUnLCAoKSA9PiB7XG4gICAgICAgIHcuaW5zdGFuY2UoKS5vblRlYWNoZXJJbnN0cnVjdGlvbnNDaGFuZ2VkKCdOZXcgVGVhY2hlciBJbnN0cnVjdGlvbnMnKTtcblxuICAgICAgICBleHBlY3Qob25Nb2RlbENoYW5nZWQpLnRvQmVDYWxsZWRXaXRoKHtcbiAgICAgICAgICAuLi5wcmVwYXJlTW9kZWwobW9kZWwpLFxuICAgICAgICAgIHRlYWNoZXJJbnN0cnVjdGlvbnM6ICdOZXcgVGVhY2hlciBJbnN0cnVjdGlvbnMnLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ29uTWFya3VwQ2hhbmdlZCcsICgpID0+IHtcbiAgICAgIGl0KCdjaGFuZ2VzIHNsYXRlIG1hcmt1cCB2YWx1ZScsICgpID0+IHtcbiAgICAgICAgY29uc3Qgc2xhdGVNYXJrdXAgPVxuICAgICAgICAgICc8c3BhbiBkYXRhLXR5cGU9XCJkcmFnX2luX3RoZV9ibGFua1wiIGRhdGEtaW5kZXg9XCIwXCIgZGF0YS1pZD1cIjBcIiBkYXRhLXZhbHVlPVwiJmx0O2RpdiZndDs2Jmx0Oy9kaXYmZ3Q7XCI+PC9zcGFuPiArIDxzcGFuIGRhdGEtdHlwZT1cImRyYWdfaW5fdGhlX2JsYW5rXCIgZGF0YS1pbmRleD1cIjFcIiBkYXRhLWlkPVwiMVwiIGRhdGEtdmFsdWU9XCImbHQ7ZGl2Jmd0OzkmbHQ7L2RpdiZndDtcIj48L3NwYW4+ID0gMTVlZ2dzJztcblxuICAgICAgICB3Lmluc3RhbmNlKCkub25NYXJrdXBDaGFuZ2VkKHNsYXRlTWFya3VwKTtcblxuICAgICAgICBleHBlY3Qob25Nb2RlbENoYW5nZWQpLnRvQmVDYWxsZWRXaXRoKHtcbiAgICAgICAgICAuLi5wcmVwYXJlTW9kZWwobW9kZWwpLFxuICAgICAgICAgIHNsYXRlTWFya3VwLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ29uUmVzcG9uc2VzQ2hhbmdlZCcsICgpID0+IHtcbiAgICAgIGl0KCdjaGFuZ2VzIGNob2ljZXMgYW5kIHNsYXRlTWFya3VwIGFzIHdlbGwnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld0Nob2ljZXMgPSBbXG4gICAgICAgICAgeyB2YWx1ZTogJzxkaXY+NjwvZGl2PicsIGlkOiAnMCcgfSxcbiAgICAgICAgICB7IHZhbHVlOiAnPGRpdj4zXjI8L2Rpdj4nLCBpZDogJzEnIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgdy5pbnN0YW5jZSgpLm9uUmVzcG9uc2VzQ2hhbmdlZChuZXdDaG9pY2VzKTtcblxuICAgICAgICBleHBlY3Qob25Nb2RlbENoYW5nZWQpLnRvQmVDYWxsZWRXaXRoKHtcbiAgICAgICAgICAuLi5wcmVwYXJlTW9kZWwobW9kZWwpLFxuICAgICAgICAgIHNsYXRlTWFya3VwOlxuICAgICAgICAgICAgJzxzcGFuIGRhdGEtdHlwZT1cImRyYWdfaW5fdGhlX2JsYW5rXCIgZGF0YS1pbmRleD1cIjBcIiBkYXRhLWlkPVwiMFwiIGRhdGEtdmFsdWU9XCImbHQ7ZGl2Jmd0OzYmbHQ7L2RpdiZndDtcIj48L3NwYW4+ICsgPHNwYW4gZGF0YS10eXBlPVwiZHJhZ19pbl90aGVfYmxhbmtcIiBkYXRhLWluZGV4PVwiMVwiIGRhdGEtaWQ9XCIxXCIgZGF0YS12YWx1ZT1cIiZsdDtkaXYmZ3Q7M14yJmx0Oy9kaXYmZ3Q7XCI+PC9zcGFuPiA9IDE1JyxcbiAgICAgICAgICBjaG9pY2VzOiBuZXdDaG9pY2VzLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _markupUtils = require("../markupUtils");
|
|
4
|
+
|
|
5
|
+
describe('markupUtils', function () {
|
|
6
|
+
describe('createElementFromHTML', function () {
|
|
7
|
+
it('should create dom element from string', function () {
|
|
8
|
+
var el = (0, _markupUtils.createElementFromHTML)("<div>Foo Bar</div>");
|
|
9
|
+
expect(el.outerHTML).toEqual('<div><div>Foo Bar</div></div>');
|
|
10
|
+
});
|
|
11
|
+
});
|
|
12
|
+
describe('removeUnwantedCharacters', function () {
|
|
13
|
+
it('should remove \\t and \\n characters', function () {
|
|
14
|
+
expect((0, _markupUtils.removeUnwantedCharacters)('<div>foo\t\nbar</div>')).toEqual('<div>foobar</div>');
|
|
15
|
+
});
|
|
16
|
+
it('should remove \\t and \\n characters', function () {
|
|
17
|
+
expect((0, _markupUtils.removeUnwantedCharacters)('<div>foo\\t\\nbar</div>')).toEqual('<div>foobar</div>');
|
|
18
|
+
});
|
|
19
|
+
it('should replace \\" with "', function () {
|
|
20
|
+
expect((0, _markupUtils.removeUnwantedCharacters)('<div>"foo bar"</div>')).toEqual('<div>"foo bar"</div>');
|
|
21
|
+
});
|
|
22
|
+
it('should replace \\/ with /', function () {
|
|
23
|
+
expect((0, _markupUtils.removeUnwantedCharacters)('<div>foo/bar</div>')).toEqual('<div>foo/bar</div>');
|
|
24
|
+
});
|
|
25
|
+
it('should not remove \\t character which has latex like \\times', function () {
|
|
26
|
+
expect((0, _markupUtils.removeUnwantedCharacters)('<div><span data-latex="" data-raw="3\\times3\\div2">3\\times3\\div2</span></div>')).toEqual('<div><span data-latex="" data-raw="3\\times3\\div2">3\\times3\\div2</span></div>');
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
describe('processMarkup', function () {
|
|
30
|
+
it('should get choices, markup and correctResponse from markup', function () {
|
|
31
|
+
var markup = ['<div>', '<span data-type="drag_in_the_blank" data-value="foobar" data-id="0"></span>', '<span data-type="drag_in_the_blank" data-value="barfoo" data-id="1"></span>', '</div>'].join('');
|
|
32
|
+
var processed = (0, _markupUtils.processMarkup)(markup);
|
|
33
|
+
expect(processed).toEqual(expect.objectContaining({
|
|
34
|
+
markup: ['<div>', '{{0}}', '{{1}}', '</div>'].join(''),
|
|
35
|
+
choices: [{
|
|
36
|
+
value: 'foobar',
|
|
37
|
+
id: '0'
|
|
38
|
+
}, {
|
|
39
|
+
value: 'barfoo',
|
|
40
|
+
id: '1'
|
|
41
|
+
}],
|
|
42
|
+
correctResponse: {
|
|
43
|
+
0: '0',
|
|
44
|
+
1: '1'
|
|
45
|
+
}
|
|
46
|
+
}));
|
|
47
|
+
}); // TODO: not sure if this test is very good
|
|
48
|
+
|
|
49
|
+
it('should get value with replaced with a regular space', function () {
|
|
50
|
+
var markup = ['<div>', '<span data-type="drag_in_the_blank" data-value="foo bar" data-id="0"></span>', '</div>'].join('');
|
|
51
|
+
var processed = (0, _markupUtils.processMarkup)(markup);
|
|
52
|
+
expect(encodeURIComponent(processed.choices[0].value)).toEqual('foo%C2%A0bar');
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
describe('createSlateMarkup', function () {
|
|
56
|
+
it('should create slate markup from the regular markup, choices and correctResponses', function () {
|
|
57
|
+
var markup = ['<div>', '{{0}}', '{{1}}', '</div>'].join('');
|
|
58
|
+
var choices = [{
|
|
59
|
+
value: 'foobar',
|
|
60
|
+
id: '0'
|
|
61
|
+
}, {
|
|
62
|
+
value: 'barfoo',
|
|
63
|
+
id: '1'
|
|
64
|
+
}];
|
|
65
|
+
var correctResponse = {
|
|
66
|
+
0: '0',
|
|
67
|
+
1: '1'
|
|
68
|
+
};
|
|
69
|
+
var slateMarkup = (0, _markupUtils.createSlateMarkup)(markup, choices, correctResponse);
|
|
70
|
+
expect(slateMarkup).toEqual(['<div>', '<span data-type="drag_in_the_blank" data-index="0" data-id="0" data-value="foobar"></span>', '<span data-type="drag_in_the_blank" data-index="1" data-id="1" data-value="barfoo"></span>', '</div>'].join(''));
|
|
71
|
+
});
|
|
72
|
+
it('should handle choices with empty values', function () {
|
|
73
|
+
var markup = ['<div>', '{{0}}', '{{1}}', '</div>'].join('');
|
|
74
|
+
var choices = [{
|
|
75
|
+
value: 'foobar',
|
|
76
|
+
id: '0'
|
|
77
|
+
}, {
|
|
78
|
+
value: '',
|
|
79
|
+
id: '1'
|
|
80
|
+
}];
|
|
81
|
+
var correctResponse = {
|
|
82
|
+
0: '0',
|
|
83
|
+
1: '1'
|
|
84
|
+
};
|
|
85
|
+
var slateMarkup = (0, _markupUtils.createSlateMarkup)(markup, choices, correctResponse);
|
|
86
|
+
expect(slateMarkup).toEqual(['<div>', '<span data-type="drag_in_the_blank" data-index="0" data-id="0" data-value="foobar"></span>', '<span data-type="drag_in_the_blank" data-index="1" data-id="" data-value=""></span>', '</div>'].join(''));
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
describe('choiceIsEmpty', function () {
|
|
90
|
+
it('should return false if choice is null or undefined', function () {
|
|
91
|
+
expect((0, _markupUtils.choiceIsEmpty)(null)).toEqual(false);
|
|
92
|
+
expect((0, _markupUtils.choiceIsEmpty)(undefined)).toEqual(false);
|
|
93
|
+
});
|
|
94
|
+
it('should handle choices with no value provided', function () {
|
|
95
|
+
expect((0, _markupUtils.choiceIsEmpty)({})).toEqual(true);
|
|
96
|
+
});
|
|
97
|
+
it('should handle choices with img tags provided', function () {
|
|
98
|
+
var markup = ['<div>', '<img src="foobar" />', '</div>'].join('');
|
|
99
|
+
expect((0, _markupUtils.choiceIsEmpty)({
|
|
100
|
+
value: markup
|
|
101
|
+
})).toEqual(false);
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vbWFya3VwVXRpbHMudGVzdC5qc3giXSwibmFtZXMiOlsiZGVzY3JpYmUiLCJpdCIsImVsIiwiZXhwZWN0Iiwib3V0ZXJIVE1MIiwidG9FcXVhbCIsIm1hcmt1cCIsImpvaW4iLCJwcm9jZXNzZWQiLCJvYmplY3RDb250YWluaW5nIiwiY2hvaWNlcyIsInZhbHVlIiwiaWQiLCJjb3JyZWN0UmVzcG9uc2UiLCJlbmNvZGVVUklDb21wb25lbnQiLCJzbGF0ZU1hcmt1cCIsInVuZGVmaW5lZCJdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7QUFRQUEsUUFBUSxDQUFDLGFBQUQsRUFBZ0IsWUFBTTtBQUM1QkEsRUFBQUEsUUFBUSxDQUFDLHVCQUFELEVBQTBCLFlBQU07QUFDdENDLElBQUFBLEVBQUUsQ0FBQyx1Q0FBRCxFQUEwQyxZQUFNO0FBQ2hELFVBQU1DLEVBQUUsR0FBRyw2REFBWDtBQUVBQyxNQUFBQSxNQUFNLENBQUNELEVBQUUsQ0FBQ0UsU0FBSixDQUFOLENBQXFCQyxPQUFyQixDQUE2QiwrQkFBN0I7QUFDRCxLQUpDLENBQUY7QUFLRCxHQU5PLENBQVI7QUFRQUwsRUFBQUEsUUFBUSxDQUFDLDBCQUFELEVBQTZCLFlBQU07QUFDekNDLElBQUFBLEVBQUUsQ0FBQyxzQ0FBRCxFQUF5QyxZQUFNO0FBQy9DRSxNQUFBQSxNQUFNLENBQUMsMkNBQXlCLHVCQUF6QixDQUFELENBQU4sQ0FBMERFLE9BQTFELENBQWtFLG1CQUFsRTtBQUNELEtBRkMsQ0FBRjtBQUlBSixJQUFBQSxFQUFFLENBQUMsc0NBQUQsRUFBeUMsWUFBTTtBQUMvQ0UsTUFBQUEsTUFBTSxDQUFDLDJDQUF5Qix5QkFBekIsQ0FBRCxDQUFOLENBQTRERSxPQUE1RCxDQUFvRSxtQkFBcEU7QUFDRCxLQUZDLENBQUY7QUFJQUosSUFBQUEsRUFBRSxDQUFDLDJCQUFELEVBQThCLFlBQU07QUFDcENFLE1BQUFBLE1BQU0sQ0FBQywyQ0FBeUIsc0JBQXpCLENBQUQs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QU0sQ0FBQyxnQ0FBYyxFQUFkLENBQUQsQ0FBTixDQUEwQkUsT0FBMUIsQ0FBa0MsSUFBbEM7QUFDRCxLQUZDLENBQUY7QUFJQUosSUFBQUEsRUFBRSxDQUFDLDhDQUFELEVBQWlELFlBQU07QUFDdkQsVUFBTUssTUFBTSxHQUFHLENBQUMsT0FBRCxFQUFVLHNCQUFWLEVBQWtDLFFBQWxDLEVBQTRDQyxJQUE1QyxDQUFpRCxFQUFqRCxDQUFmO0FBRUFKLE1BQUFBLE1BQU0sQ0FBQyxnQ0FBYztBQUFFUSxRQUFBQSxLQUFLLEVBQUVMO0FBQVQsT0FBZCxDQUFELENBQU4sQ0FBeUNELE9BQXpDLENBQWlELEtBQWpEO0FBQ0QsS0FKQyxDQUFGO0FBS0QsR0FoQk8sQ0FBUjtBQWlCRCxDQXhKTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgY2hvaWNlSXNFbXB0eSxcbiAgY3JlYXRlRWxlbWVudEZyb21IVE1MLFxuICBjcmVhdGVTbGF0ZU1hcmt1cCxcbiAgcHJvY2Vzc01hcmt1cCxcbiAgcmVtb3ZlVW53YW50ZWRDaGFyYWN0ZXJzLFxufSBmcm9tICcuLi9tYXJrdXBVdGlscyc7XG5cbmRlc2NyaWJlKCdtYXJrdXBVdGlscycsICgpID0+IHtcbiAgZGVzY3JpYmUoJ2NyZWF0ZUVsZW1lbnRGcm9tSFRNTCcsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGNyZWF0ZSBkb20gZWxlbWVudCBmcm9tIHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IGVsID0gY3JlYXRlRWxlbWVudEZyb21IVE1MKGA8ZGl2PkZvbyBCYXI8L2Rpdj5gKTtcblxuICAgICAgZXhwZWN0KGVsLm91dGVySFRNTCkudG9FcXVhbCgnPGRpdj48ZGl2PkZvbyBCYXI8L2Rpdj48L2Rpdj4nKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlbW92ZVVud2FudGVkQ2hhcmFjdGVycycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJlbW92ZSBcXFxcdCBhbmQgXFxcXG4gY2hhcmFjdGVycycsICgpID0+IHtcbiAgICAgIGV4cGVjdChyZW1vdmVVbndhbnRlZENoYXJhY3RlcnMoJzxkaXY+Zm9vXFx0XFxuYmFyPC9kaXY+JykpLnRvRXF1YWwoJzxkaXY+Zm9vYmFyPC9kaXY+Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlbW92ZSBcXFxcdCBhbmQgXFxcXG4gY2hhcmFjdGVycycsICgpID0+IHtcbiAgICAgIGV4cGVjdChyZW1vdmVVbndhbnRlZENoYXJhY3RlcnMoJzxkaXY+Zm9vXFxcXHRcXFxcbmJhcjwvZGl2PicpKS50b0VxdWFsKCc8ZGl2PmZvb2JhcjwvZGl2PicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXBsYWNlIFxcXFxcIiB3aXRoIFwiJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHJlbW92ZVVud2FudGVkQ2hhcmFjdGVycygnPGRpdj5cImZvbyBiYXJcIjwvZGl2PicpKS50b0VxdWFsKCc8ZGl2PlwiZm9vIGJhclwiPC9kaXY+Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlcGxhY2UgXFxcXC8gd2l0aCAvJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHJlbW92ZVVud2FudGVkQ2hhcmFjdGVycygnPGRpdj5mb28vYmFyPC9kaXY+JykpLnRvRXF1YWwoJzxkaXY+Zm9vL2JhcjwvZGl2PicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgcmVtb3ZlIFxcXFx0IGNoYXJhY3RlciB3aGljaCBoYXMgbGF0ZXggbGlrZSBcXFxcdGltZXMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoXG4gICAgICAgIHJlbW92ZVVud2FudGVkQ2hhcmFjdGVycygnPGRpdj48c3BhbiBkYXRhLWxhdGV4PVwiXCIgZGF0YS1yYXc9XCIzXFxcXHRpbWVzM1xcXFxkaXYyXCI+M1xcXFx0aW1lczNcXFxcZGl2Mjwvc3Bhbj48L2Rpdj4nKSxcbiAgICAgICkudG9FcXVhbCgnPGRpdj48c3BhbiBkYXRhLWxhdGV4PVwiXCIgZGF0YS1yYXc9XCIzXFxcXHRpbWVzM1xcXFxkaXYyXCI+M1xcXFx0aW1lczNcXFxcZGl2Mjwvc3Bhbj48L2Rpdj4nKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3Byb2Nlc3NNYXJrdXAnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBnZXQgY2hvaWNlcywgbWFya3VwIGFuZCBjb3JyZWN0UmVzcG9uc2UgZnJvbSBtYXJrdXAnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtYXJrdXAgPSBbXG4gICAgICAgICc8ZGl2PicsXG4gICAgICAgICc8c3BhbiBkYXRhLXR5cGU9XCJkcmFnX2luX3RoZV9ibGFua1wiIGRhdGEtdmFsdWU9XCJmb29iYXJcIiBkYXRhLWlkPVwiMFwiPjwvc3Bhbj4nLFxuICAgICAgICAnPHNwYW4gZGF0YS10eXBlPVwiZHJhZ19pbl90aGVfYmxhbmtcIiBkYXRhLXZhbHVlPVwiYmFyZm9vXCIgZGF0YS1pZD1cIjFcIj48L3NwYW4+JyxcbiAgICAgICAgJzwvZGl2PicsXG4gICAgICBdLmpvaW4oJycpO1xuICAgICAgY29uc3QgcHJvY2Vzc2VkID0gcHJvY2Vzc01hcmt1cChtYXJrdXApO1xuXG4gICAgICBleHBlY3QocHJvY2Vzc2VkKS50b0VxdWFsKFxuICAgICAgICBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgbWFya3VwOiBbJzxkaXY+JywgJ3t7MH19JywgJ3t7MX19JywgJzwvZGl2PiddLmpvaW4oJycpLFxuICAgICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFsdWU6ICdmb29iYXInLFxuICAgICAgICAgICAgICBpZDogJzAnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFsdWU6ICdiYXJmb28nLFxuICAgICAgICAgICAgICBpZDogJzEnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGNvcnJlY3RSZXNwb25zZToge1xuICAgICAgICAgICAgMDogJzAnLFxuICAgICAgICAgICAgMTogJzEnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIC8vIFRPRE86IG5vdCBzdXJlIGlmIHRoaXMgdGVzdCBpcyB2ZXJ5IGdvb2RcbiAgICBpdCgnc2hvdWxkIGdldCB2YWx1ZSB3aXRoICZuYnNwOyByZXBsYWNlZCB3aXRoIGEgcmVndWxhciBzcGFjZScsICgpID0+IHtcbiAgICAgIGNvbnN0IG1hcmt1cCA9IFtcbiAgICAgICAgJzxkaXY+JyxcbiAgICAgICAgJzxzcGFuIGRhdGEtdHlwZT1cImRyYWdfaW5fdGhlX2JsYW5rXCIgZGF0YS12YWx1ZT1cImZvbyZuYnNwO2JhclwiIGRhdGEtaWQ9XCIwXCI+PC9zcGFuPicsXG4gICAgICAgICc8L2Rpdj4nLFxuICAgICAgXS5qb2luKCcnKTtcbiAgICAgIGNvbnN0IHByb2Nlc3NlZCA9IHByb2Nlc3NNYXJrdXAobWFya3VwKTtcblxuICAgICAgZXhwZWN0KGVuY29kZVVSSUNvbXBvbmVudChwcm9jZXNzZWQuY2hvaWNlc1swXS52YWx1ZSkpLnRvRXF1YWwoJ2ZvbyVDMiVBMGJhcicpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY3JlYXRlU2xhdGVNYXJrdXAnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBjcmVhdGUgc2xhdGUgbWFya3VwIGZyb20gdGhlIHJlZ3VsYXIgbWFya3VwLCBjaG9pY2VzIGFuZCBjb3JyZWN0UmVzcG9uc2VzJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWFya3VwID0gWyc8ZGl2PicsICd7ezB9fScsICd7ezF9fScsICc8L2Rpdj4nXS5qb2luKCcnKTtcbiAgICAgIGNvbnN0IGNob2ljZXMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICB2YWx1ZTogJ2Zvb2JhcicsXG4gICAgICAgICAgaWQ6ICcwJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHZhbHVlOiAnYmFyZm9vJyxcbiAgICAgICAgICBpZDogJzEnLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGNvcnJlY3RSZXNwb25zZSA9IHtcbiAgICAgICAgMDogJzAnLFxuICAgICAgICAxOiAnMScsXG4gICAgICB9O1xuICAgICAgY29uc3Qgc2xhdGVNYXJrdXAgPSBjcmVhdGVTbGF0ZU1hcmt1cChtYXJrdXAsIGNob2ljZXMsIGNvcnJlY3RSZXNwb25zZSk7XG5cbiAgICAgIGV4cGVjdChzbGF0ZU1hcmt1cCkudG9FcXVhbChcbiAgICAgICAgW1xuICAgICAgICAgICc8ZGl2PicsXG4gICAgICAgICAgJzxzcGFuIGRhdGEtdHlwZT1cImRyYWdfaW5fdGhlX2JsYW5rXCIgZGF0YS1pbmRleD1cIjBcIiBkYXRhLWlkPVwiMFwiIGRhdGEtdmFsdWU9XCJmb29iYXJcIj48L3NwYW4+JyxcbiAgICAgICAgICAnPHNwYW4gZGF0YS10eXBlPVwiZHJhZ19pbl90aGVfYmxhbmtcIiBkYXRhLWluZGV4PVwiMVwiIGRhdGEtaWQ9XCIxXCIgZGF0YS12YWx1ZT1cImJhcmZvb1wiPjwvc3Bhbj4nLFxuICAgICAgICAgICc8L2Rpdj4nLFxuICAgICAgICBdLmpvaW4oJycpLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIGNob2ljZXMgd2l0aCBlbXB0eSB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtYXJrdXAgPSBbJzxkaXY+JywgJ3t7MH19JywgJ3t7MX19JywgJzwvZGl2PiddLmpvaW4oJycpO1xuICAgICAgY29uc3QgY2hvaWNlcyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHZhbHVlOiAnZm9vYmFyJyxcbiAgICAgICAgICBpZDogJzAnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgIGlkOiAnMScsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgY29ycmVjdFJlc3BvbnNlID0ge1xuICAgICAgICAwOiAnMCcsXG4gICAgICAgIDE6ICcxJyxcbiAgICAgIH07XG4gICAgICBjb25zdCBzbGF0ZU1hcmt1cCA9IGNyZWF0ZVNsYXRlTWFya3VwKG1hcmt1cCwgY2hvaWNlcywgY29ycmVjdFJlc3BvbnNlKTtcblxuICAgICAgZXhwZWN0KHNsYXRlTWFya3VwKS50b0VxdWFsKFxuICAgICAgICBbXG4gICAgICAgICAgJzxkaXY+JyxcbiAgICAgICAgICAnPHNwYW4gZGF0YS10eXBlPVwiZHJhZ19pbl90aGVfYmxhbmtcIiBkYXRhLWluZGV4PVwiMFwiIGRhdGEtaWQ9XCIwXCIgZGF0YS12YWx1ZT1cImZvb2JhclwiPjwvc3Bhbj4nLFxuICAgICAgICAgICc8c3BhbiBkYXRhLXR5cGU9XCJkcmFnX2luX3RoZV9ibGFua1wiIGRhdGEtaW5kZXg9XCIxXCIgZGF0YS1pZD1cIlwiIGRhdGEtdmFsdWU9XCJcIj48L3NwYW4+JyxcbiAgICAgICAgICAnPC9kaXY+JyxcbiAgICAgICAgXS5qb2luKCcnKSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjaG9pY2VJc0VtcHR5JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGlmIGNob2ljZSBpcyBudWxsIG9yIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChjaG9pY2VJc0VtcHR5KG51bGwpKS50b0VxdWFsKGZhbHNlKTtcblxuICAgICAgZXhwZWN0KGNob2ljZUlzRW1wdHkodW5kZWZpbmVkKSkudG9FcXVhbChmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBjaG9pY2VzIHdpdGggbm8gdmFsdWUgcHJvdmlkZWQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoY2hvaWNlSXNFbXB0eSh7fSkpLnRvRXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBjaG9pY2VzIHdpdGggaW1nIHRhZ3MgcHJvdmlkZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtYXJrdXAgPSBbJzxkaXY+JywgJzxpbWcgc3JjPVwiZm9vYmFyXCIgLz4nLCAnPC9kaXY+J10uam9pbignJyk7XG5cbiAgICAgIGV4cGVjdChjaG9pY2VJc0VtcHR5KHsgdmFsdWU6IG1hcmt1cCB9KSkudG9FcXVhbChmYWxzZSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
package/configure/lib/choices.js
CHANGED
|
@@ -29,7 +29,7 @@ var _reactDom = _interopRequireDefault(require("react-dom"));
|
|
|
29
29
|
|
|
30
30
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
31
31
|
|
|
32
|
-
var
|
|
32
|
+
var _editableHtmlTipTap = _interopRequireDefault(require("@pie-lib/editable-html-tip-tap"));
|
|
33
33
|
|
|
34
34
|
var _mathRendering = require("@pie-lib/math-rendering");
|
|
35
35
|
|
|
@@ -305,7 +305,7 @@ var Choices = /*#__PURE__*/function (_React$Component) {
|
|
|
305
305
|
minWidth: '100%',
|
|
306
306
|
zIndex: '100'
|
|
307
307
|
}
|
|
308
|
-
}, /*#__PURE__*/_react["default"].createElement(
|
|
308
|
+
}, /*#__PURE__*/_react["default"].createElement(_editableHtmlTipTap["default"], {
|
|
309
309
|
ref: function ref(_ref) {
|
|
310
310
|
return _this2.focusedNodeRef = _ref;
|
|
311
311
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/choices.jsx"],"names":["styles","theme","design","display","flexDirection","marginBottom","spacing","unit","addButton","marginLeft","altChoices","alignItems","flexWrap","justifyContent","marginTop","margin","errorText","fontSize","typography","color","palette","error","main","paddingBottom","Choices","warning","open","domNode","ReactDOM","findDOMNode","prevValue","val","key","props","onChange","model","choices","correctResponse","alternateResponses","duplicatedValue","find","c","value","id","newChoices","filter","setState","text","map","choice","usedForResponse","Object","keys","forEach","responseKey","values","alternate","indexOf","newChoicesWithoutTheEmptyOne","focusedEl","oldChoices","maxId","length","Math","max","parseInt","newId","duplicates","includes","rerenderMath","focusedNodeRef","focus","state","classes","mathMlOptions","maxChoices","toolbarOpts","uploadSoundSupport","imageSupport","pluginProps","maxImageWidth","maxImageHeight","maxLength","visibleChoices","getVisibleChoices","onAddChoice","index","minWidth","zIndex","ref","prompt","language","preventDone","onChoiceChanged","undefined","e","inInInsertCharacter","relatedTarget","closest","onChoiceFocus","onChoiceRemove","React","Component","PropTypes","bool","string","object","isRequired","func","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 { AlertDialog } from '@pie-lib/config-ui';\nimport Button from '@material-ui/core/Button';\nimport { withStyles } from '@material-ui/core/styles';\n\nimport Choice from './choice';\nimport { choiceIsEmpty } from './markupUtils';\n\nconst styles = (theme) => ({\n design: {\n display: 'flex',\n flexDirection: 'column',\n marginBottom: theme.spacing.unit * 1.5,\n },\n addButton: {\n marginLeft: 'auto',\n },\n altChoices: {\n alignItems: 'flex-start',\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'space-evenly',\n marginTop: theme.spacing.unit,\n\n '& > *': {\n margin: theme.spacing.unit,\n },\n },\n errorText: {\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n paddingBottom: theme.spacing.unit * 2,\n },\n});\n\nexport class Choices extends React.Component {\n static propTypes = {\n duplicates: PropTypes.bool,\n error: PropTypes.string,\n model: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n classes: PropTypes.object.isRequired,\n toolbarOpts: PropTypes.object,\n pluginProps: PropTypes.object,\n maxChoices: PropTypes.number,\n uploadSoundSupport: PropTypes.object,\n maxImageWidth: PropTypes.number,\n maxImageHeight: PropTypes.number,\n maxLength: PropTypes.number,\n };\n\n state = { warning: { open: false } };\n preventDone = false;\n\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 warning: {\n open: true,\n text: 'Identical answer choices are not allowed and the changes will be discarded.',\n },\n });\n\n return;\n }\n\n const newChoices = choices?.map((choice) => (choice.id === key ? { ...choice, value: val } : choice)) || [];\n\n if (!choiceIsEmpty({ value: val })) {\n onChange(newChoices);\n\n return;\n }\n\n // if the edited content is empty, its usage has to be searched in the correct response definitions\n let usedForResponse = false;\n\n if (correctResponse) {\n Object.keys(correctResponse).forEach((responseKey) => {\n if (correctResponse[responseKey] === key) {\n usedForResponse = true;\n }\n });\n }\n\n if (alternateResponses && !usedForResponse) {\n Object.values(alternateResponses).forEach((alternate) => {\n if (alternate.indexOf(key) >= 0) {\n usedForResponse = true;\n }\n });\n }\n\n if (usedForResponse) {\n this.setState({\n warning: {\n open: true,\n text: 'Answer choices cannot be blank and the changes will be discarded.',\n },\n });\n\n return;\n }\n\n const newChoicesWithoutTheEmptyOne = newChoices.filter((choice) => choice.id !== key);\n\n onChange(newChoicesWithoutTheEmptyOne);\n\n this.setState({\n warning: {\n open: true,\n text: 'Answer choices cannot be blank.',\n },\n });\n };\n\n onChoiceFocus = (id) =>\n this.setState({\n focusedEl: id,\n });\n\n onAddChoice = () => {\n const {\n model: { choices: oldChoices },\n onChange,\n } = this.props;\n\n // find the maximum existing id and add 1 to generate the new id so we avoid duplicates\n const maxId = oldChoices.length > 0 \n ? Math.max(...oldChoices.map(choice => parseInt(choice.id, 10) || 0))\n : -1;\n const newId = `${maxId + 1}`;\n\n this.setState(\n {\n focusedEl: newId,\n },\n () => {\n onChange([\n ...oldChoices,\n {\n id: newId,\n value: '',\n },\n ]);\n },\n );\n };\n\n onChoiceRemove = (id) => {\n const {\n onChange,\n model: { choices },\n } = this.props;\n const newChoices = (choices || []).filter((choice) => choice.id !== id);\n\n onChange(newChoices);\n };\n\n getVisibleChoices = () => {\n const {\n duplicates,\n model: { choices, correctResponse },\n } = this.props;\n\n if (!choices) {\n return [];\n }\n\n if (duplicates) {\n return choices;\n }\n\n // if duplicates not allowed, remove the choices that are used to define the correct response\n return choices.filter((choice) => !(correctResponse && Object.values(correctResponse).includes(choice.id)));\n };\n\n render() {\n const { focusedEl, warning } = this.state;\n const {\n classes,\n duplicates,\n error,\n mathMlOptions = {},\n maxChoices,\n model: { choices },\n toolbarOpts,\n uploadSoundSupport,\n imageSupport = {},\n pluginProps = {},\n maxImageWidth,\n maxImageHeight,\n maxLength,\n } = this.props;\n const visibleChoices = this.getVisibleChoices() || [];\n return (\n <div className={classes.design}>\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\n <div className={classes.altChoices}>\n {visibleChoices.map((choice, index) =>\n focusedEl === choice.id ? (\n <div\n key={index}\n style={{\n minWidth: '100%',\n zIndex: '100',\n }}\n >\n <EditableHtml\n ref={(ref) => (this.focusedNodeRef = ref)}\n className={classes.prompt}\n imageSupport={imageSupport}\n markup={choice.value}\n pluginProps={pluginProps}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n onChange={(val) => {\n if (this.preventDone) {\n return;\n }\n\n this.onChoiceChanged(choice.value, val, choice.id);\n }}\n onDone={() => {\n if (this.preventDone) {\n return;\n }\n\n this.setState({\n focusedEl: undefined,\n });\n }}\n onBlur={(e) => {\n const inInInsertCharacter = e.relatedTarget && e.relatedTarget.closest('.insert-character-dialog');\n\n this.preventDone = inInInsertCharacter;\n }}\n disableUnderline\n toolbarOpts={toolbarOpts}\n uploadSoundSupport={uploadSoundSupport}\n mathMlOptions={mathMlOptions}\n maxImageHeight={maxImageHeight}\n maxImageWidth={maxImageWidth}\n charactersLimit={maxLength}\n />\n </div>\n ) : (\n <Choice\n key={index}\n duplicates={duplicates}\n targetId=\"0\"\n choice={choice}\n error={error}\n onClick={() => this.onChoiceFocus(choice.id)}\n onRemoveChoice={() => this.onChoiceRemove(choice.id)}\n />\n ),\n )}\n </div>\n {error && <div className={classes.errorText}>{error}</div>}\n\n <AlertDialog\n open={warning.open}\n title=\"Warning\"\n text={warning.text}\n onConfirm={() => this.setState({ warning: { open: false } })}\n />\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":["styles","theme","design","display","flexDirection","marginBottom","spacing","unit","addButton","marginLeft","altChoices","alignItems","flexWrap","justifyContent","marginTop","margin","errorText","fontSize","typography","color","palette","error","main","paddingBottom","Choices","warning","open","domNode","ReactDOM","findDOMNode","prevValue","val","key","props","onChange","model","choices","correctResponse","alternateResponses","duplicatedValue","find","c","value","id","newChoices","filter","setState","text","map","choice","usedForResponse","Object","keys","forEach","responseKey","values","alternate","indexOf","newChoicesWithoutTheEmptyOne","focusedEl","oldChoices","maxId","length","Math","max","parseInt","newId","duplicates","includes","rerenderMath","focusedNodeRef","focus","state","classes","mathMlOptions","maxChoices","toolbarOpts","uploadSoundSupport","imageSupport","pluginProps","maxImageWidth","maxImageHeight","maxLength","visibleChoices","getVisibleChoices","onAddChoice","index","minWidth","zIndex","ref","prompt","language","preventDone","onChoiceChanged","undefined","e","inInInsertCharacter","relatedTarget","closest","onChoiceFocus","onChoiceRemove","React","Component","PropTypes","bool","string","object","isRequired","func","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-tip-tap';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport { AlertDialog } from '@pie-lib/config-ui';\nimport Button from '@material-ui/core/Button';\nimport { withStyles } from '@material-ui/core/styles';\n\nimport Choice from './choice';\nimport { choiceIsEmpty } from './markupUtils';\n\nconst styles = (theme) => ({\n design: {\n display: 'flex',\n flexDirection: 'column',\n marginBottom: theme.spacing.unit * 1.5,\n },\n addButton: {\n marginLeft: 'auto',\n },\n altChoices: {\n alignItems: 'flex-start',\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'space-evenly',\n marginTop: theme.spacing.unit,\n\n '& > *': {\n margin: theme.spacing.unit,\n },\n },\n errorText: {\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n paddingBottom: theme.spacing.unit * 2,\n },\n});\n\nexport class Choices extends React.Component {\n static propTypes = {\n duplicates: PropTypes.bool,\n error: PropTypes.string,\n model: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n classes: PropTypes.object.isRequired,\n toolbarOpts: PropTypes.object,\n pluginProps: PropTypes.object,\n maxChoices: PropTypes.number,\n uploadSoundSupport: PropTypes.object,\n maxImageWidth: PropTypes.number,\n maxImageHeight: PropTypes.number,\n maxLength: PropTypes.number,\n };\n\n state = { warning: { open: false } };\n preventDone = false;\n\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 warning: {\n open: true,\n text: 'Identical answer choices are not allowed and the changes will be discarded.',\n },\n });\n\n return;\n }\n\n const newChoices = choices?.map((choice) => (choice.id === key ? { ...choice, value: val } : choice)) || [];\n\n if (!choiceIsEmpty({ value: val })) {\n onChange(newChoices);\n\n return;\n }\n\n // if the edited content is empty, its usage has to be searched in the correct response definitions\n let usedForResponse = false;\n\n if (correctResponse) {\n Object.keys(correctResponse).forEach((responseKey) => {\n if (correctResponse[responseKey] === key) {\n usedForResponse = true;\n }\n });\n }\n\n if (alternateResponses && !usedForResponse) {\n Object.values(alternateResponses).forEach((alternate) => {\n if (alternate.indexOf(key) >= 0) {\n usedForResponse = true;\n }\n });\n }\n\n if (usedForResponse) {\n this.setState({\n warning: {\n open: true,\n text: 'Answer choices cannot be blank and the changes will be discarded.',\n },\n });\n\n return;\n }\n\n const newChoicesWithoutTheEmptyOne = newChoices.filter((choice) => choice.id !== key);\n\n onChange(newChoicesWithoutTheEmptyOne);\n\n this.setState({\n warning: {\n open: true,\n text: 'Answer choices cannot be blank.',\n },\n });\n };\n\n onChoiceFocus = (id) =>\n this.setState({\n focusedEl: id,\n });\n\n onAddChoice = () => {\n const {\n model: { choices: oldChoices },\n onChange,\n } = this.props;\n\n // find the maximum existing id and add 1 to generate the new id so we avoid duplicates\n const maxId = oldChoices.length > 0\n ? Math.max(...oldChoices.map(choice => parseInt(choice.id, 10) || 0))\n : -1;\n const newId = `${maxId + 1}`;\n\n this.setState(\n {\n focusedEl: newId,\n },\n () => {\n onChange([\n ...oldChoices,\n {\n id: newId,\n value: '',\n },\n ]);\n },\n );\n };\n\n onChoiceRemove = (id) => {\n const {\n onChange,\n model: { choices },\n } = this.props;\n const newChoices = (choices || []).filter((choice) => choice.id !== id);\n\n onChange(newChoices);\n };\n\n getVisibleChoices = () => {\n const {\n duplicates,\n model: { choices, correctResponse },\n } = this.props;\n\n if (!choices) {\n return [];\n }\n\n if (duplicates) {\n return choices;\n }\n\n // if duplicates not allowed, remove the choices that are used to define the correct response\n return choices.filter((choice) => !(correctResponse && Object.values(correctResponse).includes(choice.id)));\n };\n\n render() {\n const { focusedEl, warning } = this.state;\n const {\n classes,\n duplicates,\n error,\n mathMlOptions = {},\n maxChoices,\n model: { choices },\n toolbarOpts,\n uploadSoundSupport,\n imageSupport = {},\n pluginProps = {},\n maxImageWidth,\n maxImageHeight,\n maxLength,\n } = this.props;\n const visibleChoices = this.getVisibleChoices() || [];\n return (\n <div className={classes.design}>\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\n <div className={classes.altChoices}>\n {visibleChoices.map((choice, index) =>\n focusedEl === choice.id ? (\n <div\n key={index}\n style={{\n minWidth: '100%',\n zIndex: '100',\n }}\n >\n <EditableHtml\n ref={(ref) => (this.focusedNodeRef = ref)}\n className={classes.prompt}\n imageSupport={imageSupport}\n markup={choice.value}\n pluginProps={pluginProps}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n onChange={(val) => {\n if (this.preventDone) {\n return;\n }\n\n this.onChoiceChanged(choice.value, val, choice.id);\n }}\n onDone={() => {\n if (this.preventDone) {\n return;\n }\n\n this.setState({\n focusedEl: undefined,\n });\n }}\n onBlur={(e) => {\n const inInInsertCharacter = e.relatedTarget && e.relatedTarget.closest('.insert-character-dialog');\n\n this.preventDone = inInInsertCharacter;\n }}\n disableUnderline\n toolbarOpts={toolbarOpts}\n uploadSoundSupport={uploadSoundSupport}\n mathMlOptions={mathMlOptions}\n maxImageHeight={maxImageHeight}\n maxImageWidth={maxImageWidth}\n charactersLimit={maxLength}\n />\n </div>\n ) : (\n <Choice\n key={index}\n duplicates={duplicates}\n targetId=\"0\"\n choice={choice}\n error={error}\n onClick={() => this.onChoiceFocus(choice.id)}\n onRemoveChoice={() => this.onChoiceRemove(choice.id)}\n />\n ),\n )}\n </div>\n {error && <div className={classes.errorText}>{error}</div>}\n\n <AlertDialog\n open={warning.open}\n title=\"Warning\"\n text={warning.text}\n onConfirm={() => this.setState({ warning: { open: false } })}\n />\n </div>\n );\n }\n}\n\nconst Styled = withStyles(styles)(Choices);\n\nexport default Styled;\n"],"file":"choices.js"}
|
package/configure/lib/main.js
CHANGED
|
@@ -29,7 +29,7 @@ var _reactDom = _interopRequireDefault(require("react-dom"));
|
|
|
29
29
|
|
|
30
30
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
31
31
|
|
|
32
|
-
var
|
|
32
|
+
var _editableHtmlTipTap = _interopRequireWildcard(require("@pie-lib/editable-html-tip-tap"));
|
|
33
33
|
|
|
34
34
|
var _configUi = require("@pie-lib/config-ui");
|
|
35
35
|
|
|
@@ -286,7 +286,7 @@ var Main = /*#__PURE__*/function (_React$Component) {
|
|
|
286
286
|
}, teacherInstructionsEnabled && /*#__PURE__*/_react["default"].createElement(_configUi.InputContainer, {
|
|
287
287
|
label: teacherInstructions.label,
|
|
288
288
|
className: classes.promptHolder
|
|
289
|
-
}, /*#__PURE__*/_react["default"].createElement(
|
|
289
|
+
}, /*#__PURE__*/_react["default"].createElement(_editableHtmlTipTap["default"], {
|
|
290
290
|
className: classes.prompt,
|
|
291
291
|
markup: model.teacherInstructions || '',
|
|
292
292
|
onChange: this.onTeacherInstructionsChanged,
|
|
@@ -310,7 +310,7 @@ var Main = /*#__PURE__*/function (_React$Component) {
|
|
|
310
310
|
}, teacherInstructionsError)), promptEnabled && /*#__PURE__*/_react["default"].createElement(_configUi.InputContainer, {
|
|
311
311
|
label: prompt.label,
|
|
312
312
|
className: classes.promptHolder
|
|
313
|
-
}, /*#__PURE__*/_react["default"].createElement(
|
|
313
|
+
}, /*#__PURE__*/_react["default"].createElement(_editableHtmlTipTap["default"], {
|
|
314
314
|
className: classes.prompt,
|
|
315
315
|
markup: model.prompt,
|
|
316
316
|
onChange: this.onPromptChanged,
|
|
@@ -351,8 +351,8 @@ var Main = /*#__PURE__*/function (_React$Component) {
|
|
|
351
351
|
style: {
|
|
352
352
|
marginLeft: '5px'
|
|
353
353
|
}
|
|
354
|
-
}))), /*#__PURE__*/_react["default"].createElement(
|
|
355
|
-
activePlugins:
|
|
354
|
+
}))), /*#__PURE__*/_react["default"].createElement(_editableHtmlTipTap["default"], {
|
|
355
|
+
activePlugins: _editableHtmlTipTap.ALL_PLUGINS,
|
|
356
356
|
responseAreaProps: {
|
|
357
357
|
type: 'drag-in-the-blank',
|
|
358
358
|
options: {
|
|
@@ -399,7 +399,7 @@ var Main = /*#__PURE__*/function (_React$Component) {
|
|
|
399
399
|
}), rationaleEnabled && /*#__PURE__*/_react["default"].createElement(_configUi.InputContainer, {
|
|
400
400
|
label: rationale.label,
|
|
401
401
|
className: classes.promptHolder
|
|
402
|
-
}, /*#__PURE__*/_react["default"].createElement(
|
|
402
|
+
}, /*#__PURE__*/_react["default"].createElement(_editableHtmlTipTap["default"], {
|
|
403
403
|
className: classes.prompt,
|
|
404
404
|
markup: model.rationale || '',
|
|
405
405
|
onChange: this.onRationaleChanged,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/main.jsx"],"names":["dropdown","settings","toggle","Panel","styles","theme","promptHolder","width","paddingTop","spacing","unit","marginBottom","markup","minHeight","paddingBottom","choiceConfiguration","text","fontSize","typography","tooltip","whiteSpace","maxWidth","errorText","color","palette","error","main","flexContainer","display","alignItems","Main","newVal","props","onModelChanged","model","prompt","rationale","teacherInstructions","slateMarkup","choices","correctResponse","domNode","ReactDOM","findDOMNode","classes","configuration","onConfigurationChanged","imageSupport","uploadSoundSupport","addChoice","baseInputConfiguration","contentDimensions","duplicates","partialScoring","lockChoiceOrder","choicesPosition","spellCheck","settingsPanelDisabled","maxChoices","maxResponseAreas","maxImageWidth","maxImageHeight","withRubric","mathMlOptions","language","languageChoices","maxLength","rationaleEnabled","promptEnabled","teacherInstructionsEnabled","spellCheckEnabled","toolbarEditorPosition","errors","extraCSSRules","choicesError","correctResponseError","promptError","rationaleError","responseAreasError","teacherInstructionsError","validationMessage","defaultImageMaxWidth","defaultImageMaxHeight","toolbarOpts","position","panelSettings","label","enabled","options","panelProperties","rubricEnabled","getPluginProps","Object","assign","onModelChange","Settings","Properties","onTeacherInstructionsChanged","inputConfiguration","onPromptChanged","marginLeft","ALL_PLUGINS","type","onMarkupChanged","onResponsesChanged","choice","onRationaleChanged","React","Component","PropTypes","object","isRequired","disableSidePanel","bool","func","shape","add","Styled"],"mappings":"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","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport EditableHtml, { ALL_PLUGINS } from '@pie-lib/editable-html';\nimport { InputContainer, layout, settings } from '@pie-lib/config-ui';\nimport { withDragContext } from '@pie-lib/drag';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport { withStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport Info from '@material-ui/icons/Info';\nimport Tooltip from '@material-ui/core/Tooltip';\n\nimport Choices from './choices';\nimport { createSlateMarkup } from './markupUtils';\nimport { generateValidationMessage } from '../utils';\n\nconst { dropdown, toggle, Panel } = settings;\n\nconst styles = (theme) => ({\n promptHolder: {\n width: '100%',\n paddingTop: theme.spacing.unit * 2,\n marginBottom: theme.spacing.unit * 2,\n },\n markup: {\n minHeight: '235px',\n paddingTop: theme.spacing.unit,\n paddingBottom: theme.spacing.unit * 2,\n width: '100%',\n '& [data-slate-editor=\"true\"]': {\n minHeight: '235px',\n },\n },\n choiceConfiguration: {\n paddingTop: theme.spacing.unit * 2,\n paddingBottom: theme.spacing.unit * 2,\n },\n text: {\n fontSize: theme.typography.fontSize + 2,\n },\n tooltip: {\n fontSize: theme.typography.fontSize - 2,\n whiteSpace: 'pre',\n maxWidth: '500px',\n },\n errorText: {\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n paddingTop: theme.spacing.unit,\n },\n flexContainer: {\n display: 'flex',\n alignItems: 'center',\n },\n});\n\nexport class Main extends React.Component {\n static propTypes = {\n configuration: PropTypes.object.isRequired,\n model: PropTypes.object.isRequired,\n disableSidePanel: PropTypes.bool,\n onModelChanged: PropTypes.func.isRequired,\n onConfigurationChanged: PropTypes.func.isRequired,\n classes: PropTypes.object.isRequired,\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n uploadSoundSupport: PropTypes.object,\n };\n\n state = {};\n\n componentDidUpdate() {\n // eslint-disable-next-line\n const domNode = ReactDOM.findDOMNode(this);\n\n renderMath(domNode);\n }\n\n onModelChange = (newVal) => {\n this.props.onModelChanged({\n ...this.props.model,\n ...newVal,\n });\n };\n\n onPromptChanged = (prompt) => {\n this.props.onModelChanged({\n ...this.props.model,\n prompt,\n });\n };\n\n onRationaleChanged = (rationale) => {\n this.props.onModelChanged({\n ...this.props.model,\n rationale,\n });\n };\n\n onTeacherInstructionsChanged = (teacherInstructions) => {\n this.props.onModelChanged({\n ...this.props.model,\n teacherInstructions,\n });\n };\n\n onMarkupChanged = (slateMarkup) => {\n this.props.onModelChanged({\n ...this.props.model,\n slateMarkup,\n });\n };\n\n onResponsesChanged = (choices) => {\n const {\n model: { correctResponse, markup },\n } = this.props;\n const slateMarkup = createSlateMarkup(markup, choices, correctResponse);\n\n this.props.onModelChanged({\n ...this.props.model,\n slateMarkup,\n choices,\n });\n };\n\n render() {\n const { classes, model, configuration, onConfigurationChanged, imageSupport, uploadSoundSupport } = this.props;\n const {\n addChoice = {},\n baseInputConfiguration = {},\n contentDimensions = {},\n duplicates = {},\n prompt = {},\n partialScoring = {},\n lockChoiceOrder = {},\n rationale = {},\n teacherInstructions = {},\n choicesPosition = {},\n spellCheck = {},\n settingsPanelDisabled,\n maxChoices,\n maxResponseAreas,\n maxImageWidth = {},\n maxImageHeight = {},\n withRubric = {},\n mathMlOptions = {},\n language = {},\n languageChoices = {},\n maxLength = {},\n } = configuration || {};\n const {\n rationaleEnabled,\n promptEnabled,\n teacherInstructionsEnabled,\n spellCheckEnabled,\n toolbarEditorPosition,\n errors,\n extraCSSRules,\n } = model || {};\n\n const {\n choicesError,\n correctResponseError,\n prompt: promptError,\n rationale: rationaleError,\n responseAreasError,\n teacherInstructions: teacherInstructionsError,\n } = errors || {};\n const validationMessage = generateValidationMessage(configuration);\n\n const defaultImageMaxWidth = maxImageWidth && maxImageWidth.prompt;\n const defaultImageMaxHeight = maxImageHeight && maxImageHeight.prompt;\n\n const toolbarOpts = {\n position: toolbarEditorPosition === 'top' ? 'top' : 'bottom',\n };\n\n const panelSettings = {\n partialScoring: partialScoring.settings && toggle(partialScoring.label),\n duplicates: duplicates.settings && toggle(duplicates.label),\n lockChoiceOrder: lockChoiceOrder.settings && toggle(lockChoiceOrder.label),\n choicesPosition: choicesPosition.settings && dropdown(choicesPosition.label, ['above', 'below', 'left', 'right']),\n 'language.enabled': language.settings && toggle(language.label, true),\n language: language.settings && language.enabled && dropdown(languageChoices.label, languageChoices.options),\n };\n\n const panelProperties = {\n teacherInstructionsEnabled: teacherInstructions.settings && toggle(teacherInstructions.label),\n rationaleEnabled: rationale.settings && toggle(rationale.label),\n spellCheckEnabled: spellCheck.settings && toggle(spellCheck.label),\n promptEnabled: prompt.settings && toggle(prompt.label),\n rubricEnabled: withRubric?.settings && toggle(withRubric?.label),\n };\n\n const getPluginProps = (props) => {\n return Object.assign(\n {\n ...baseInputConfiguration,\n },\n props || {},\n );\n };\n\n return (\n <layout.ConfigLayout\n extraCSSRules={extraCSSRules}\n dimensions={contentDimensions}\n hideSettings={settingsPanelDisabled}\n settings={\n <Panel\n model={model}\n configuration={configuration}\n onChangeModel={(model) => this.onModelChange(model)}\n onChangeConfiguration={(configuration) => onConfigurationChanged(configuration, true)}\n groups={{\n Settings: panelSettings,\n Properties: panelProperties,\n }}\n />\n }\n >\n {teacherInstructionsEnabled && (\n <InputContainer label={teacherInstructions.label} className={classes.promptHolder}>\n <EditableHtml\n className={classes.prompt}\n markup={model.teacherInstructions || ''}\n onChange={this.onTeacherInstructionsChanged}\n imageSupport={imageSupport}\n nonEmpty={false}\n error={teacherInstructionsError}\n toolbarOpts={toolbarOpts}\n pluginProps={getPluginProps(teacherInstructions?.inputConfiguration)}\n spellCheck={spellCheckEnabled}\n maxImageWidth={(maxImageWidth && maxImageWidth.teacherInstructions) || defaultImageMaxWidth}\n maxImageHeight={(maxImageHeight && maxImageHeight.teacherInstructions) || defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n />\n {teacherInstructionsError && <div className={classes.errorText}>{teacherInstructionsError}</div>}\n </InputContainer>\n )}\n\n {promptEnabled && (\n <InputContainer label={prompt.label} className={classes.promptHolder}>\n <EditableHtml\n className={classes.prompt}\n markup={model.prompt}\n onChange={this.onPromptChanged}\n imageSupport={imageSupport}\n nonEmpty={false}\n disableUnderline\n error={promptError}\n toolbarOpts={toolbarOpts}\n pluginProps={getPluginProps(prompt?.inputConfiguration)}\n spellCheck={spellCheckEnabled}\n maxImageWidth={defaultImageMaxWidth}\n maxImageHeight={defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n />\n {promptError && <div className={classes.errorText}>{promptError}</div>}\n </InputContainer>\n )}\n\n <div className={classes.flexContainer}>\n <Typography className={classes.text} component={'div'}>\n Define Template, Choices, and Correct Responses\n </Typography>\n <Tooltip\n classes={{ tooltip: classes.tooltip }}\n disableFocusListener\n disableTouchListener\n placement={'right'}\n title={validationMessage}\n >\n <Info fontSize={'small'} color={'primary'} style={{ marginLeft: '5px' }} />\n </Tooltip>\n </div>\n\n <EditableHtml\n activePlugins={ALL_PLUGINS}\n responseAreaProps={{\n type: 'drag-in-the-blank',\n options: {\n duplicates: model.duplicates,\n },\n maxResponseAreas: maxResponseAreas,\n }}\n pluginProps={getPluginProps()}\n className={classes.markup}\n markup={model.slateMarkup}\n onChange={this.onMarkupChanged}\n imageSupport={imageSupport}\n disableImageAlignmentButtons={true}\n nonEmpty={false}\n disableUnderline\n error={responseAreasError || correctResponseError}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheckEnabled}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n />\n {responseAreasError && <div className={classes.errorText}>{responseAreasError}</div>}\n {correctResponseError && <div className={classes.errorText}>{correctResponseError}</div>}\n\n <Choices\n model={model}\n imageSupport={imageSupport}\n duplicates={model.duplicates}\n error={choicesError}\n onChange={this.onResponsesChanged}\n toolbarOpts={toolbarOpts}\n maxChoices={maxChoices}\n uploadSoundSupport={uploadSoundSupport}\n mathMlOptions={mathMlOptions}\n pluginProps={getPluginProps(addChoice?.inputConfiguration)}\n maxImageWidth={(maxImageWidth && maxImageWidth.choice) || defaultImageMaxWidth}\n maxImageHeight={(maxImageHeight && maxImageHeight.choice) || defaultImageMaxHeight}\n maxLength={maxLength}\n />\n\n {rationaleEnabled && (\n <InputContainer label={rationale.label} className={classes.promptHolder}>\n <EditableHtml\n className={classes.prompt}\n markup={model.rationale || ''}\n onChange={this.onRationaleChanged}\n imageSupport={imageSupport}\n error={rationaleError}\n toolbarOpts={toolbarOpts}\n pluginProps={getPluginProps(rationale?.inputConfiguration)}\n spellCheck={spellCheckEnabled}\n maxImageWidth={(maxImageWidth && maxImageWidth.rationale) || defaultImageMaxWidth}\n maxImageHeight={(maxImageHeight && maxImageHeight.rationale) || defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n />\n {rationaleError && <div className={classes.errorText}>{rationaleError}</div>}\n </InputContainer>\n )}\n </layout.ConfigLayout>\n );\n }\n}\n\nconst Styled = withStyles(styles)(Main);\n\nexport default withDragContext(Styled);\n"],"file":"main.js"}
|
|
1
|
+
{"version":3,"sources":["../src/main.jsx"],"names":["dropdown","settings","toggle","Panel","styles","theme","promptHolder","width","paddingTop","spacing","unit","marginBottom","markup","minHeight","paddingBottom","choiceConfiguration","text","fontSize","typography","tooltip","whiteSpace","maxWidth","errorText","color","palette","error","main","flexContainer","display","alignItems","Main","newVal","props","onModelChanged","model","prompt","rationale","teacherInstructions","slateMarkup","choices","correctResponse","domNode","ReactDOM","findDOMNode","classes","configuration","onConfigurationChanged","imageSupport","uploadSoundSupport","addChoice","baseInputConfiguration","contentDimensions","duplicates","partialScoring","lockChoiceOrder","choicesPosition","spellCheck","settingsPanelDisabled","maxChoices","maxResponseAreas","maxImageWidth","maxImageHeight","withRubric","mathMlOptions","language","languageChoices","maxLength","rationaleEnabled","promptEnabled","teacherInstructionsEnabled","spellCheckEnabled","toolbarEditorPosition","errors","extraCSSRules","choicesError","correctResponseError","promptError","rationaleError","responseAreasError","teacherInstructionsError","validationMessage","defaultImageMaxWidth","defaultImageMaxHeight","toolbarOpts","position","panelSettings","label","enabled","options","panelProperties","rubricEnabled","getPluginProps","Object","assign","onModelChange","Settings","Properties","onTeacherInstructionsChanged","inputConfiguration","onPromptChanged","marginLeft","ALL_PLUGINS","type","onMarkupChanged","onResponsesChanged","choice","onRationaleChanged","React","Component","PropTypes","object","isRequired","disableSidePanel","bool","func","shape","add","Styled"],"mappings":"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","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport EditableHtml, { ALL_PLUGINS } from '@pie-lib/editable-html-tip-tap';\nimport { InputContainer, layout, settings } from '@pie-lib/config-ui';\nimport { withDragContext } from '@pie-lib/drag';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport { withStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport Info from '@material-ui/icons/Info';\nimport Tooltip from '@material-ui/core/Tooltip';\n\nimport Choices from './choices';\nimport { createSlateMarkup } from './markupUtils';\nimport { generateValidationMessage } from '../utils';\n\nconst { dropdown, toggle, Panel } = settings;\n\nconst styles = (theme) => ({\n promptHolder: {\n width: '100%',\n paddingTop: theme.spacing.unit * 2,\n marginBottom: theme.spacing.unit * 2,\n },\n markup: {\n minHeight: '235px',\n paddingTop: theme.spacing.unit,\n paddingBottom: theme.spacing.unit * 2,\n width: '100%',\n '& [data-slate-editor=\"true\"]': {\n minHeight: '235px',\n },\n },\n choiceConfiguration: {\n paddingTop: theme.spacing.unit * 2,\n paddingBottom: theme.spacing.unit * 2,\n },\n text: {\n fontSize: theme.typography.fontSize + 2,\n },\n tooltip: {\n fontSize: theme.typography.fontSize - 2,\n whiteSpace: 'pre',\n maxWidth: '500px',\n },\n errorText: {\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n paddingTop: theme.spacing.unit,\n },\n flexContainer: {\n display: 'flex',\n alignItems: 'center',\n },\n});\n\nexport class Main extends React.Component {\n static propTypes = {\n configuration: PropTypes.object.isRequired,\n model: PropTypes.object.isRequired,\n disableSidePanel: PropTypes.bool,\n onModelChanged: PropTypes.func.isRequired,\n onConfigurationChanged: PropTypes.func.isRequired,\n classes: PropTypes.object.isRequired,\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n uploadSoundSupport: PropTypes.object,\n };\n\n state = {};\n\n componentDidUpdate() {\n // eslint-disable-next-line\n const domNode = ReactDOM.findDOMNode(this);\n\n renderMath(domNode);\n }\n\n onModelChange = (newVal) => {\n this.props.onModelChanged({\n ...this.props.model,\n ...newVal,\n });\n };\n\n onPromptChanged = (prompt) => {\n this.props.onModelChanged({\n ...this.props.model,\n prompt,\n });\n };\n\n onRationaleChanged = (rationale) => {\n this.props.onModelChanged({\n ...this.props.model,\n rationale,\n });\n };\n\n onTeacherInstructionsChanged = (teacherInstructions) => {\n this.props.onModelChanged({\n ...this.props.model,\n teacherInstructions,\n });\n };\n\n onMarkupChanged = (slateMarkup) => {\n this.props.onModelChanged({\n ...this.props.model,\n slateMarkup,\n });\n };\n\n onResponsesChanged = (choices) => {\n const {\n model: { correctResponse, markup },\n } = this.props;\n const slateMarkup = createSlateMarkup(markup, choices, correctResponse);\n\n this.props.onModelChanged({\n ...this.props.model,\n slateMarkup,\n choices,\n });\n };\n\n render() {\n const { classes, model, configuration, onConfigurationChanged, imageSupport, uploadSoundSupport } = this.props;\n const {\n addChoice = {},\n baseInputConfiguration = {},\n contentDimensions = {},\n duplicates = {},\n prompt = {},\n partialScoring = {},\n lockChoiceOrder = {},\n rationale = {},\n teacherInstructions = {},\n choicesPosition = {},\n spellCheck = {},\n settingsPanelDisabled,\n maxChoices,\n maxResponseAreas,\n maxImageWidth = {},\n maxImageHeight = {},\n withRubric = {},\n mathMlOptions = {},\n language = {},\n languageChoices = {},\n maxLength = {},\n } = configuration || {};\n const {\n rationaleEnabled,\n promptEnabled,\n teacherInstructionsEnabled,\n spellCheckEnabled,\n toolbarEditorPosition,\n errors,\n extraCSSRules,\n } = model || {};\n\n const {\n choicesError,\n correctResponseError,\n prompt: promptError,\n rationale: rationaleError,\n responseAreasError,\n teacherInstructions: teacherInstructionsError,\n } = errors || {};\n const validationMessage = generateValidationMessage(configuration);\n\n const defaultImageMaxWidth = maxImageWidth && maxImageWidth.prompt;\n const defaultImageMaxHeight = maxImageHeight && maxImageHeight.prompt;\n\n const toolbarOpts = {\n position: toolbarEditorPosition === 'top' ? 'top' : 'bottom',\n };\n\n const panelSettings = {\n partialScoring: partialScoring.settings && toggle(partialScoring.label),\n duplicates: duplicates.settings && toggle(duplicates.label),\n lockChoiceOrder: lockChoiceOrder.settings && toggle(lockChoiceOrder.label),\n choicesPosition: choicesPosition.settings && dropdown(choicesPosition.label, ['above', 'below', 'left', 'right']),\n 'language.enabled': language.settings && toggle(language.label, true),\n language: language.settings && language.enabled && dropdown(languageChoices.label, languageChoices.options),\n };\n\n const panelProperties = {\n teacherInstructionsEnabled: teacherInstructions.settings && toggle(teacherInstructions.label),\n rationaleEnabled: rationale.settings && toggle(rationale.label),\n spellCheckEnabled: spellCheck.settings && toggle(spellCheck.label),\n promptEnabled: prompt.settings && toggle(prompt.label),\n rubricEnabled: withRubric?.settings && toggle(withRubric?.label),\n };\n\n const getPluginProps = (props) => {\n return Object.assign(\n {\n ...baseInputConfiguration,\n },\n props || {},\n );\n };\n\n return (\n <layout.ConfigLayout\n extraCSSRules={extraCSSRules}\n dimensions={contentDimensions}\n hideSettings={settingsPanelDisabled}\n settings={\n <Panel\n model={model}\n configuration={configuration}\n onChangeModel={(model) => this.onModelChange(model)}\n onChangeConfiguration={(configuration) => onConfigurationChanged(configuration, true)}\n groups={{\n Settings: panelSettings,\n Properties: panelProperties,\n }}\n />\n }\n >\n {teacherInstructionsEnabled && (\n <InputContainer label={teacherInstructions.label} className={classes.promptHolder}>\n <EditableHtml\n className={classes.prompt}\n markup={model.teacherInstructions || ''}\n onChange={this.onTeacherInstructionsChanged}\n imageSupport={imageSupport}\n nonEmpty={false}\n error={teacherInstructionsError}\n toolbarOpts={toolbarOpts}\n pluginProps={getPluginProps(teacherInstructions?.inputConfiguration)}\n spellCheck={spellCheckEnabled}\n maxImageWidth={(maxImageWidth && maxImageWidth.teacherInstructions) || defaultImageMaxWidth}\n maxImageHeight={(maxImageHeight && maxImageHeight.teacherInstructions) || defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n />\n {teacherInstructionsError && <div className={classes.errorText}>{teacherInstructionsError}</div>}\n </InputContainer>\n )}\n\n {promptEnabled && (\n <InputContainer label={prompt.label} className={classes.promptHolder}>\n <EditableHtml\n className={classes.prompt}\n markup={model.prompt}\n onChange={this.onPromptChanged}\n imageSupport={imageSupport}\n nonEmpty={false}\n disableUnderline\n error={promptError}\n toolbarOpts={toolbarOpts}\n pluginProps={getPluginProps(prompt?.inputConfiguration)}\n spellCheck={spellCheckEnabled}\n maxImageWidth={defaultImageMaxWidth}\n maxImageHeight={defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n />\n {promptError && <div className={classes.errorText}>{promptError}</div>}\n </InputContainer>\n )}\n\n <div className={classes.flexContainer}>\n <Typography className={classes.text} component={'div'}>\n Define Template, Choices, and Correct Responses\n </Typography>\n <Tooltip\n classes={{ tooltip: classes.tooltip }}\n disableFocusListener\n disableTouchListener\n placement={'right'}\n title={validationMessage}\n >\n <Info fontSize={'small'} color={'primary'} style={{ marginLeft: '5px' }} />\n </Tooltip>\n </div>\n\n <EditableHtml\n activePlugins={ALL_PLUGINS}\n responseAreaProps={{\n type: 'drag-in-the-blank',\n options: {\n duplicates: model.duplicates,\n },\n maxResponseAreas: maxResponseAreas,\n }}\n pluginProps={getPluginProps()}\n className={classes.markup}\n markup={model.slateMarkup}\n onChange={this.onMarkupChanged}\n imageSupport={imageSupport}\n disableImageAlignmentButtons={true}\n nonEmpty={false}\n disableUnderline\n error={responseAreasError || correctResponseError}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheckEnabled}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n />\n {responseAreasError && <div className={classes.errorText}>{responseAreasError}</div>}\n {correctResponseError && <div className={classes.errorText}>{correctResponseError}</div>}\n\n <Choices\n model={model}\n imageSupport={imageSupport}\n duplicates={model.duplicates}\n error={choicesError}\n onChange={this.onResponsesChanged}\n toolbarOpts={toolbarOpts}\n maxChoices={maxChoices}\n uploadSoundSupport={uploadSoundSupport}\n mathMlOptions={mathMlOptions}\n pluginProps={getPluginProps(addChoice?.inputConfiguration)}\n maxImageWidth={(maxImageWidth && maxImageWidth.choice) || defaultImageMaxWidth}\n maxImageHeight={(maxImageHeight && maxImageHeight.choice) || defaultImageMaxHeight}\n maxLength={maxLength}\n />\n\n {rationaleEnabled && (\n <InputContainer label={rationale.label} className={classes.promptHolder}>\n <EditableHtml\n className={classes.prompt}\n markup={model.rationale || ''}\n onChange={this.onRationaleChanged}\n imageSupport={imageSupport}\n error={rationaleError}\n toolbarOpts={toolbarOpts}\n pluginProps={getPluginProps(rationale?.inputConfiguration)}\n spellCheck={spellCheckEnabled}\n maxImageWidth={(maxImageWidth && maxImageWidth.rationale) || defaultImageMaxWidth}\n maxImageHeight={(maxImageHeight && maxImageHeight.rationale) || defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n />\n {rationaleError && <div className={classes.errorText}>{rationaleError}</div>}\n </InputContainer>\n )}\n </layout.ConfigLayout>\n );\n }\n}\n\nconst Styled = withStyles(styles)(Main);\n\nexport default withDragContext(Styled);\n"],"file":"main.js"}
|