@pie-element/drag-in-the-blank 4.6.0 → 4.6.1-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,413 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- var _typeof = require("@babel/runtime/helpers/typeof");
6
-
7
- Object.defineProperty(exports, "__esModule", {
8
- value: true
9
- });
10
- exports["default"] = exports.Main = void 0;
11
-
12
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
-
14
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
15
-
16
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
17
-
18
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
19
-
20
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
21
-
22
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
23
-
24
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
25
-
26
- var _react = _interopRequireDefault(require("react"));
27
-
28
- var _reactDom = _interopRequireDefault(require("react-dom"));
29
-
30
- var _propTypes = _interopRequireDefault(require("prop-types"));
31
-
32
- var _editableHtml = _interopRequireWildcard(require("@pie-lib/editable-html"));
33
-
34
- var _configUi = require("@pie-lib/config-ui");
35
-
36
- var _drag = require("@pie-lib/drag");
37
-
38
- var _mathRendering = require("@pie-lib/math-rendering");
39
-
40
- var _styles = require("@material-ui/core/styles");
41
-
42
- var _Typography = _interopRequireDefault(require("@material-ui/core/Typography"));
43
-
44
- var _Info = _interopRequireDefault(require("@material-ui/icons/Info"));
45
-
46
- var _Tooltip = _interopRequireDefault(require("@material-ui/core/Tooltip"));
47
-
48
- var _choices = _interopRequireDefault(require("./choices"));
49
-
50
- var _markupUtils = require("./markupUtils");
51
-
52
- var _utils = require("../utils");
53
-
54
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
55
-
56
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
57
-
58
- 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; }
59
-
60
- 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; }
61
-
62
- 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); }; }
63
-
64
- 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; } }
65
-
66
- var dropdown = _configUi.settings.dropdown,
67
- toggle = _configUi.settings.toggle,
68
- Panel = _configUi.settings.Panel;
69
-
70
- var styles = function styles(theme) {
71
- return {
72
- promptHolder: {
73
- width: '100%',
74
- paddingBottom: theme.spacing.unit * 2,
75
- marginBottom: theme.spacing.unit * 2
76
- },
77
- prompt: {
78
- paddingTop: theme.spacing.unit * 2,
79
- width: '100%'
80
- },
81
- markup: {
82
- minHeight: '235px',
83
- paddingTop: theme.spacing.unit * 2,
84
- width: '100%',
85
- '& [data-slate-editor="true"]': {
86
- minHeight: '235px'
87
- }
88
- },
89
- design: {
90
- paddingTop: theme.spacing.unit * 3
91
- },
92
- choiceConfiguration: {
93
- paddingTop: theme.spacing.unit * 2,
94
- paddingBottom: theme.spacing.unit * 2
95
- },
96
- switchElement: {
97
- justifyContent: 'space-between',
98
- margin: 0
99
- },
100
- addButton: {
101
- "float": 'right'
102
- },
103
- text: {
104
- fontFamily: 'Cerebri Sans',
105
- fontSize: theme.typography.fontSize + 2,
106
- lineHeight: '19px',
107
- color: '#495B8F'
108
- },
109
- tooltip: {
110
- fontSize: theme.typography.fontSize - 2,
111
- whiteSpace: 'pre',
112
- maxWidth: '500px'
113
- },
114
- errorText: {
115
- fontSize: theme.typography.fontSize - 2,
116
- color: 'red',
117
- paddingTop: theme.spacing.unit
118
- },
119
- flexContainer: {
120
- display: 'flex',
121
- alignItems: 'end'
122
- }
123
- };
124
- };
125
-
126
- var Main = /*#__PURE__*/function (_React$Component) {
127
- (0, _inherits2["default"])(Main, _React$Component);
128
-
129
- var _super = _createSuper(Main);
130
-
131
- function Main() {
132
- var _this;
133
-
134
- (0, _classCallCheck2["default"])(this, Main);
135
-
136
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
137
- args[_key] = arguments[_key];
138
- }
139
-
140
- _this = _super.call.apply(_super, [this].concat(args));
141
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "state", {});
142
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onModelChange", function (newVal) {
143
- _this.props.onModelChanged(_objectSpread(_objectSpread({}, _this.props.model), newVal));
144
- });
145
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onPromptChanged", function (prompt) {
146
- _this.props.onModelChanged(_objectSpread(_objectSpread({}, _this.props.model), {}, {
147
- prompt: prompt
148
- }));
149
- });
150
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onRationaleChanged", function (rationale) {
151
- _this.props.onModelChanged(_objectSpread(_objectSpread({}, _this.props.model), {}, {
152
- rationale: rationale
153
- }));
154
- });
155
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onTeacherInstructionsChanged", function (teacherInstructions) {
156
- _this.props.onModelChanged(_objectSpread(_objectSpread({}, _this.props.model), {}, {
157
- teacherInstructions: teacherInstructions
158
- }));
159
- });
160
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onMarkupChanged", function (slateMarkup) {
161
- _this.props.onModelChanged(_objectSpread(_objectSpread({}, _this.props.model), {}, {
162
- slateMarkup: slateMarkup
163
- }));
164
- });
165
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onResponsesChanged", function (choices) {
166
- var _this$props$model = _this.props.model,
167
- correctResponse = _this$props$model.correctResponse,
168
- markup = _this$props$model.markup;
169
- var slateMarkup = (0, _markupUtils.createSlateMarkup)(markup, choices, correctResponse);
170
-
171
- _this.props.onModelChanged(_objectSpread(_objectSpread({}, _this.props.model), {}, {
172
- slateMarkup: slateMarkup,
173
- choices: choices
174
- }));
175
- });
176
- return _this;
177
- }
178
-
179
- (0, _createClass2["default"])(Main, [{
180
- key: "componentDidUpdate",
181
- value: function componentDidUpdate() {
182
- // eslint-disable-next-line
183
- var domNode = _reactDom["default"].findDOMNode(this);
184
-
185
- (0, _mathRendering.renderMath)(domNode);
186
- }
187
- }, {
188
- key: "render",
189
- value: function render() {
190
- var _this2 = this;
191
-
192
- var _this$props = this.props,
193
- classes = _this$props.classes,
194
- model = _this$props.model,
195
- configuration = _this$props.configuration,
196
- onConfigurationChanged = _this$props.onConfigurationChanged,
197
- imageSupport = _this$props.imageSupport,
198
- uploadSoundSupport = _this$props.uploadSoundSupport;
199
-
200
- var _ref = configuration || {},
201
- _ref$duplicates = _ref.duplicates,
202
- duplicates = _ref$duplicates === void 0 ? {} : _ref$duplicates,
203
- _ref$prompt = _ref.prompt,
204
- prompt = _ref$prompt === void 0 ? {} : _ref$prompt,
205
- _ref$partialScoring = _ref.partialScoring,
206
- partialScoring = _ref$partialScoring === void 0 ? {} : _ref$partialScoring,
207
- _ref$lockChoiceOrder = _ref.lockChoiceOrder,
208
- lockChoiceOrder = _ref$lockChoiceOrder === void 0 ? {} : _ref$lockChoiceOrder,
209
- _ref$rationale = _ref.rationale,
210
- rationale = _ref$rationale === void 0 ? {} : _ref$rationale,
211
- _ref$teacherInstructi = _ref.teacherInstructions,
212
- teacherInstructions = _ref$teacherInstructi === void 0 ? {} : _ref$teacherInstructi,
213
- _ref$choicesPosition = _ref.choicesPosition,
214
- choicesPosition = _ref$choicesPosition === void 0 ? {} : _ref$choicesPosition,
215
- _ref$spellCheck = _ref.spellCheck,
216
- spellCheck = _ref$spellCheck === void 0 ? {} : _ref$spellCheck,
217
- settingsPanelDisabled = _ref.settingsPanelDisabled,
218
- maxChoices = _ref.maxChoices,
219
- maxResponseAreas = _ref.maxResponseAreas,
220
- _ref$maxImageWidth = _ref.maxImageWidth,
221
- maxImageWidth = _ref$maxImageWidth === void 0 ? {} : _ref$maxImageWidth,
222
- _ref$maxImageHeight = _ref.maxImageHeight,
223
- maxImageHeight = _ref$maxImageHeight === void 0 ? {} : _ref$maxImageHeight,
224
- _ref$withRubric = _ref.withRubric,
225
- withRubric = _ref$withRubric === void 0 ? {} : _ref$withRubric;
226
-
227
- var _ref2 = model || {},
228
- rationaleEnabled = _ref2.rationaleEnabled,
229
- promptEnabled = _ref2.promptEnabled,
230
- teacherInstructionsEnabled = _ref2.teacherInstructionsEnabled,
231
- spellCheckEnabled = _ref2.spellCheckEnabled,
232
- toolbarEditorPosition = _ref2.toolbarEditorPosition,
233
- errors = _ref2.errors;
234
-
235
- var _ref3 = errors || {},
236
- responseAreasError = _ref3.responseAreasError,
237
- choicesError = _ref3.choicesError,
238
- correctResponseError = _ref3.correctResponseError;
239
-
240
- var validationMessage = (0, _utils.generateValidationMessage)(configuration);
241
- var defaultImageMaxWidth = maxImageWidth && maxImageWidth.prompt;
242
- var defaultImageMaxHeight = maxImageHeight && maxImageHeight.prompt;
243
- var toolbarOpts = {
244
- position: toolbarEditorPosition === 'top' ? 'top' : 'bottom'
245
- };
246
- var panelSettings = {
247
- partialScoring: partialScoring.settings && toggle(partialScoring.label),
248
- duplicates: duplicates.settings && toggle(duplicates.label),
249
- lockChoiceOrder: lockChoiceOrder.settings && toggle(lockChoiceOrder.label),
250
- choicesPosition: choicesPosition.settings && dropdown(choicesPosition.label, ['above', 'below', 'left', 'right'])
251
- };
252
- var panelProperties = {
253
- teacherInstructionsEnabled: teacherInstructions.settings && toggle(teacherInstructions.label),
254
- rationaleEnabled: rationale.settings && toggle(rationale.label),
255
- spellCheckEnabled: spellCheck.settings && toggle(spellCheck.label),
256
- promptEnabled: prompt.settings && toggle(prompt.label),
257
- rubricEnabled: (withRubric === null || withRubric === void 0 ? void 0 : withRubric.settings) && toggle(withRubric === null || withRubric === void 0 ? void 0 : withRubric.label)
258
- };
259
- return /*#__PURE__*/_react["default"].createElement("div", {
260
- className: classes.design
261
- }, /*#__PURE__*/_react["default"].createElement(_configUi.layout.ConfigLayout, {
262
- hideSettings: settingsPanelDisabled,
263
- settings: /*#__PURE__*/_react["default"].createElement(Panel, {
264
- model: model,
265
- configuration: configuration,
266
- onChangeModel: function onChangeModel(model) {
267
- return _this2.onModelChange(model);
268
- },
269
- onChangeConfiguration: function onChangeConfiguration(configuration) {
270
- return onConfigurationChanged(configuration, true);
271
- },
272
- groups: {
273
- Settings: panelSettings,
274
- Properties: panelProperties
275
- }
276
- })
277
- }, /*#__PURE__*/_react["default"].createElement("div", null, teacherInstructionsEnabled && /*#__PURE__*/_react["default"].createElement(_configUi.InputContainer, {
278
- label: teacherInstructions.label,
279
- className: classes.promptHolder
280
- }, /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
281
- className: classes.prompt,
282
- markup: model.teacherInstructions || '',
283
- onChange: this.onTeacherInstructionsChanged,
284
- imageSupport: imageSupport,
285
- nonEmpty: false,
286
- toolbarOpts: toolbarOpts,
287
- spellCheck: spellCheckEnabled,
288
- maxImageWidth: maxImageWidth && maxImageWidth.teacherInstructions || defaultImageMaxWidth,
289
- maxImageHeight: maxImageHeight && maxImageHeight.teacherInstructions || defaultImageMaxHeight,
290
- uploadSoundSupport: uploadSoundSupport,
291
- languageCharactersProps: [{
292
- language: 'spanish'
293
- }, {
294
- language: 'special'
295
- }]
296
- })), promptEnabled && /*#__PURE__*/_react["default"].createElement(_configUi.InputContainer, {
297
- label: prompt.label,
298
- className: classes.promptHolder
299
- }, /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
300
- className: classes.prompt,
301
- markup: model.prompt,
302
- onChange: this.onPromptChanged,
303
- imageSupport: imageSupport,
304
- nonEmpty: false,
305
- disableUnderline: true,
306
- toolbarOpts: toolbarOpts,
307
- spellCheck: spellCheckEnabled,
308
- maxImageWidth: defaultImageMaxWidth,
309
- maxImageHeight: defaultImageMaxHeight,
310
- uploadSoundSupport: uploadSoundSupport,
311
- languageCharactersProps: [{
312
- language: 'spanish'
313
- }, {
314
- language: 'special'
315
- }]
316
- })), /*#__PURE__*/_react["default"].createElement("div", {
317
- className: classes.flexContainer
318
- }, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
319
- className: classes.text
320
- }, "Define Template, Choices, and Correct Responses"), /*#__PURE__*/_react["default"].createElement(_Tooltip["default"], {
321
- classes: {
322
- tooltip: classes.tooltip
323
- },
324
- disableFocusListener: true,
325
- disableTouchListener: true,
326
- placement: 'right',
327
- title: validationMessage
328
- }, /*#__PURE__*/_react["default"].createElement(_Info["default"], {
329
- fontSize: 'small',
330
- color: 'primary',
331
- style: {
332
- marginLeft: '5px'
333
- }
334
- }))), /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
335
- activePlugins: _editableHtml.ALL_PLUGINS,
336
- responseAreaProps: {
337
- type: 'drag-in-the-blank',
338
- options: {
339
- duplicates: model.duplicates
340
- },
341
- maxResponseAreas: maxResponseAreas
342
- },
343
- className: classes.markup,
344
- markup: model.slateMarkup,
345
- onChange: this.onMarkupChanged,
346
- imageSupport: imageSupport,
347
- disableImageAlignmentButtons: true,
348
- nonEmpty: false,
349
- disableUnderline: true,
350
- error: responseAreasError || correctResponseError,
351
- toolbarOpts: toolbarOpts,
352
- spellCheck: spellCheckEnabled,
353
- uploadSoundSupport: uploadSoundSupport,
354
- languageCharactersProps: [{
355
- language: 'spanish'
356
- }, {
357
- language: 'special'
358
- }]
359
- }), responseAreasError && /*#__PURE__*/_react["default"].createElement("div", {
360
- className: classes.errorText
361
- }, responseAreasError), correctResponseError && /*#__PURE__*/_react["default"].createElement("div", {
362
- className: classes.errorText
363
- }, correctResponseError), /*#__PURE__*/_react["default"].createElement(_choices["default"], {
364
- model: model,
365
- duplicates: model.duplicates,
366
- error: choicesError,
367
- onChange: this.onResponsesChanged,
368
- toolbarOpts: toolbarOpts,
369
- maxChoices: maxChoices,
370
- uploadSoundSupport: uploadSoundSupport
371
- }), rationaleEnabled && /*#__PURE__*/_react["default"].createElement(_configUi.InputContainer, {
372
- label: rationale.label,
373
- className: classes.promptHolder
374
- }, /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
375
- className: classes.prompt,
376
- markup: model.rationale || '',
377
- onChange: this.onRationaleChanged,
378
- imageSupport: imageSupport,
379
- toolbarOpts: toolbarOpts,
380
- spellCheck: spellCheckEnabled,
381
- maxImageWidth: maxImageWidth && maxImageWidth.rationale || defaultImageMaxWidth,
382
- maxImageHeight: maxImageHeight && maxImageHeight.rationale || defaultImageMaxHeight,
383
- uploadSoundSupport: uploadSoundSupport,
384
- languageCharactersProps: [{
385
- language: 'spanish'
386
- }, {
387
- language: 'special'
388
- }]
389
- })))));
390
- }
391
- }]);
392
- return Main;
393
- }(_react["default"].Component);
394
-
395
- exports.Main = Main;
396
- (0, _defineProperty2["default"])(Main, "propTypes", {
397
- configuration: _propTypes["default"].object.isRequired,
398
- model: _propTypes["default"].object.isRequired,
399
- disableSidePanel: _propTypes["default"].bool,
400
- onModelChanged: _propTypes["default"].func.isRequired,
401
- onConfigurationChanged: _propTypes["default"].func.isRequired,
402
- classes: _propTypes["default"].object.isRequired,
403
- imageSupport: _propTypes["default"].shape({
404
- add: _propTypes["default"].func.isRequired,
405
- "delete": _propTypes["default"].func.isRequired
406
- })
407
- });
408
- var Styled = (0, _styles.withStyles)(styles)(Main);
409
-
410
- var _default = (0, _drag.withDragContext)(Styled);
411
-
412
- exports["default"] = _default;
413
- //# sourceMappingURL=main.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/main.jsx"],"names":["dropdown","settings","toggle","Panel","styles","theme","promptHolder","width","paddingBottom","spacing","unit","marginBottom","prompt","paddingTop","markup","minHeight","design","choiceConfiguration","switchElement","justifyContent","margin","addButton","text","fontFamily","fontSize","typography","lineHeight","color","tooltip","whiteSpace","maxWidth","errorText","flexContainer","display","alignItems","Main","newVal","props","onModelChanged","model","rationale","teacherInstructions","slateMarkup","choices","correctResponse","domNode","ReactDOM","findDOMNode","classes","configuration","onConfigurationChanged","imageSupport","uploadSoundSupport","duplicates","partialScoring","lockChoiceOrder","choicesPosition","spellCheck","settingsPanelDisabled","maxChoices","maxResponseAreas","maxImageWidth","maxImageHeight","withRubric","rationaleEnabled","promptEnabled","teacherInstructionsEnabled","spellCheckEnabled","toolbarEditorPosition","errors","responseAreasError","choicesError","correctResponseError","validationMessage","defaultImageMaxWidth","defaultImageMaxHeight","toolbarOpts","position","panelSettings","label","panelProperties","rubricEnabled","onModelChange","Settings","Properties","onTeacherInstructionsChanged","language","onPromptChanged","marginLeft","ALL_PLUGINS","type","options","onMarkupChanged","onResponsesChanged","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';\nconst { dropdown, toggle, Panel } = settings;\n\nconst styles = (theme) => ({\n promptHolder: {\n width: '100%',\n paddingBottom: theme.spacing.unit * 2,\n marginBottom: theme.spacing.unit * 2,\n },\n prompt: {\n paddingTop: theme.spacing.unit * 2,\n width: '100%',\n },\n markup: {\n minHeight: '235px',\n paddingTop: theme.spacing.unit * 2,\n width: '100%',\n '& [data-slate-editor=\"true\"]': {\n minHeight: '235px',\n },\n },\n design: {\n paddingTop: theme.spacing.unit * 3,\n },\n choiceConfiguration: {\n paddingTop: theme.spacing.unit * 2,\n paddingBottom: theme.spacing.unit * 2,\n },\n switchElement: {\n justifyContent: 'space-between',\n margin: 0,\n },\n addButton: {\n float: 'right',\n },\n text: {\n fontFamily: 'Cerebri Sans',\n fontSize: theme.typography.fontSize + 2,\n lineHeight: '19px',\n color: '#495B8F',\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: 'red',\n paddingTop: theme.spacing.unit,\n },\n flexContainer: {\n display: 'flex',\n alignItems: 'end',\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 };\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 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 } = configuration || {};\n const {\n rationaleEnabled,\n promptEnabled,\n teacherInstructionsEnabled,\n spellCheckEnabled,\n toolbarEditorPosition,\n errors,\n } = model || {};\n\n const { responseAreasError, choicesError, correctResponseError } = 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 };\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 return (\n <div className={classes.design}>\n <layout.ConfigLayout\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 <div>\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 toolbarOpts={toolbarOpts}\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 />\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 toolbarOpts={toolbarOpts}\n spellCheck={spellCheckEnabled}\n maxImageWidth={defaultImageMaxWidth}\n maxImageHeight={defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n />\n </InputContainer>\n )}\n\n <div className={classes.flexContainer}>\n <Typography className={classes.text}>Define Template, Choices, and Correct Responses</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 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 />\n {responseAreasError && <div className={classes.errorText}>{responseAreasError}</div>}\n {correctResponseError && <div className={classes.errorText}>{correctResponseError}</div>}\n\n <Choices\n model={model}\n duplicates={model.duplicates}\n error={choicesError}\n onChange={this.onResponsesChanged}\n toolbarOpts={toolbarOpts}\n maxChoices={maxChoices}\n uploadSoundSupport={uploadSoundSupport}\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 toolbarOpts={toolbarOpts}\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 />\n </InputContainer>\n )}\n </div>\n </layout.ConfigLayout>\n </div>\n );\n }\n}\n\nconst Styled = withStyles(styles)(Main);\n\nexport default withDragContext(Styled);\n"],"file":"main.js"}
@@ -1,105 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.removeUnwantedCharacters = exports.processMarkup = exports.createSlateMarkup = exports.createElementFromHTML = exports.choiceIsEmpty = void 0;
9
-
10
- var _escape = _interopRequireDefault(require("lodash/escape"));
11
-
12
- var _isUndefined = _interopRequireDefault(require("lodash/isUndefined"));
13
-
14
- var createElementFromHTML = function createElementFromHTML(htmlString) {
15
- var div = document.createElement('div');
16
- div.innerHTML = htmlString.trim();
17
- return div;
18
- }; // do not remove \t from \times, \triangle, \tan, \theta or \therefore
19
-
20
-
21
- exports.createElementFromHTML = createElementFromHTML;
22
- var tSymbols = 'imes|riangle|an|heta|herefore'; // do not remove \n from \nthroot, \nparallel, \ncong, \napprox, \neq, \ne or \nsim
23
-
24
- var nSymbols = 'throot|parallel|cong|approx|eq|e|sim'; // match all \t and \n that are not part of math symbols that starts with \t or \n
25
-
26
- var matchTabAndNewLine = new RegExp("(\\t(?!".concat(tSymbols, "))|(\\n(?!").concat(nSymbols, "))|(\\\\t(?!").concat(tSymbols, "))|(\\\\n(?!").concat(nSymbols, "))"), 'g');
27
-
28
- var removeUnwantedCharacters = function removeUnwantedCharacters(markup) {
29
- return markup.replace(matchTabAndNewLine, '').replace(/\\"/g, '"').replace(/\\\//g, '/');
30
- };
31
-
32
- exports.removeUnwantedCharacters = removeUnwantedCharacters;
33
-
34
- var processMarkup = function processMarkup(markup) {
35
- var newMarkup = removeUnwantedCharacters(markup);
36
- var slateMarkup = createElementFromHTML(newMarkup);
37
- var choices = [];
38
- var index = 0;
39
- slateMarkup.querySelectorAll('[data-type="drag_in_the_blank"]').forEach(function (s) {
40
- var value = s.dataset.value && s.dataset.value.replace(/&nbsp;/g, ' ').trim();
41
-
42
- if (!value) {
43
- value = '';
44
- }
45
-
46
- choices.push({
47
- value: value,
48
- id: s.dataset.id
49
- });
50
- s.replaceWith("{{".concat(index++, "}}"));
51
- });
52
- return {
53
- markup: slateMarkup.innerHTML,
54
- choices: choices,
55
- correctResponse: choices.reduce(function (obj, c, index) {
56
- obj[index] = !(0, _isUndefined["default"])(c.id) && c.id || '';
57
- return obj;
58
- }, {})
59
- };
60
- };
61
-
62
- exports.processMarkup = processMarkup;
63
- var REGEX = /\{\{(\d+)\}\}/g;
64
-
65
- var createSlateMarkup = function createSlateMarkup(markup, choices, correctResponse) {
66
- var newMarkup = removeUnwantedCharacters(markup);
67
- var index = 0;
68
- return newMarkup.replace(REGEX, function (match, g) {
69
- var correctId = correctResponse[g];
70
- var correctChoice = choices.find(function (c) {
71
- return c.id === correctId;
72
- });
73
-
74
- if (!correctChoice || !correctChoice.value) {
75
- correctChoice = {
76
- id: '',
77
- value: ''
78
- };
79
- }
80
-
81
- return "<span data-type=\"drag_in_the_blank\" data-index=\"".concat(index++, "\" data-id=\"").concat(correctChoice.id, "\" data-value=\"").concat((0, _escape["default"])(correctChoice.value), "\"></span>");
82
- });
83
- };
84
-
85
- exports.createSlateMarkup = createSlateMarkup;
86
-
87
- var choiceIsEmpty = function choiceIsEmpty(choice) {
88
- if (choice) {
89
- var _choice$value = choice.value,
90
- value = _choice$value === void 0 ? '' : _choice$value;
91
- var domEl = createElementFromHTML(value);
92
- Array.from(domEl.querySelectorAll('*')).forEach(function (domEl) {
93
- if (domEl.tagName !== 'IMG' && domEl.childNodes.length === 0) {
94
- domEl.remove();
95
- }
96
- });
97
- var newString = domEl.innerHTML.trim();
98
- return newString === '';
99
- }
100
-
101
- return false;
102
- };
103
-
104
- exports.choiceIsEmpty = choiceIsEmpty;
105
- //# sourceMappingURL=markupUtils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/markupUtils.js"],"names":["createElementFromHTML","htmlString","div","document","createElement","innerHTML","trim","tSymbols","nSymbols","matchTabAndNewLine","RegExp","removeUnwantedCharacters","markup","replace","processMarkup","newMarkup","slateMarkup","choices","index","querySelectorAll","forEach","s","value","dataset","push","id","replaceWith","correctResponse","reduce","obj","c","REGEX","createSlateMarkup","match","g","correctId","correctChoice","find","choiceIsEmpty","choice","domEl","Array","from","tagName","childNodes","length","remove","newString"],"mappings":"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","sourcesContent":["import escape from 'lodash/escape';\nimport isUndefined from 'lodash/isUndefined';\n\nexport const createElementFromHTML = (htmlString) => {\n const div = document.createElement('div');\n\n div.innerHTML = htmlString.trim();\n\n return div;\n};\n\n// do not remove \\t from \\times, \\triangle, \\tan, \\theta or \\therefore\nconst tSymbols = 'imes|riangle|an|heta|herefore';\n// do not remove \\n from \\nthroot, \\nparallel, \\ncong, \\napprox, \\neq, \\ne or \\nsim\nconst nSymbols = 'throot|parallel|cong|approx|eq|e|sim';\n// match all \\t and \\n that are not part of math symbols that starts with \\t or \\n\nconst matchTabAndNewLine = new RegExp(\n `(\\\\t(?!${tSymbols}))|(\\\\n(?!${nSymbols}))|(\\\\\\\\t(?!${tSymbols}))|(\\\\\\\\n(?!${nSymbols}))`,\n 'g',\n);\n\nexport const removeUnwantedCharacters = (markup) =>\n markup.replace(matchTabAndNewLine, '').replace(/\\\\\"/g, '\"').replace(/\\\\\\//g, '/');\n\nexport const processMarkup = (markup) => {\n const newMarkup = removeUnwantedCharacters(markup);\n const slateMarkup = createElementFromHTML(newMarkup);\n const choices = [];\n let index = 0;\n\n slateMarkup.querySelectorAll('[data-type=\"drag_in_the_blank\"]').forEach((s) => {\n let value = s.dataset.value && s.dataset.value.replace(/&nbsp;/g, ' ').trim();\n\n if (!value) {\n value = '';\n }\n\n choices.push({\n value,\n id: s.dataset.id,\n });\n\n s.replaceWith(`{{${index++}}}`);\n });\n\n return {\n markup: slateMarkup.innerHTML,\n choices: choices,\n correctResponse: choices.reduce((obj, c, index) => {\n obj[index] = (!isUndefined(c.id) && c.id) || '';\n\n return obj;\n }, {}),\n };\n};\n\nconst REGEX = /\\{\\{(\\d+)\\}\\}/g;\n\nexport const createSlateMarkup = (markup, choices, correctResponse) => {\n const newMarkup = removeUnwantedCharacters(markup);\n let index = 0;\n\n return newMarkup.replace(REGEX, (match, g) => {\n const correctId = correctResponse[g];\n let correctChoice = choices.find((c) => c.id === correctId);\n\n if (!correctChoice || !correctChoice.value) {\n correctChoice = {\n id: '',\n value: '',\n };\n }\n\n return `<span data-type=\"drag_in_the_blank\" data-index=\"${index++}\" data-id=\"${\n correctChoice.id\n }\" data-value=\"${escape(correctChoice.value)}\"></span>`;\n });\n};\n\nexport const choiceIsEmpty = (choice) => {\n if (choice) {\n const { value = '' } = choice;\n const domEl = createElementFromHTML(value);\n\n Array.from(domEl.querySelectorAll('*')).forEach((domEl) => {\n if (domEl.tagName !== 'IMG' && domEl.childNodes.length === 0) {\n domEl.remove();\n }\n });\n\n const newString = domEl.innerHTML.trim();\n\n return newString === '';\n }\n\n return false;\n};\n"],"file":"markupUtils.js"}
@@ -1,14 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports["default"] = void 0;
7
- var _default = {
8
- prompt: 'Which of these northern European countries are EU members?',
9
- choiceMode: 'checkbox',
10
- choicePrefix: 'numbers',
11
- choices: []
12
- };
13
- exports["default"] = _default;
14
- //# sourceMappingURL=defaults.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/defaults.js"],"names":["prompt","choiceMode","choicePrefix","choices"],"mappings":";;;;;;eAAe;AACbA,EAAAA,MAAM,EAAE,4DADK;AAEbC,EAAAA,UAAU,EAAE,UAFC;AAGbC,EAAAA,YAAY,EAAE,SAHD;AAIbC,EAAAA,OAAO,EAAE;AAJI,C","sourcesContent":["export default {\n prompt: 'Which of these northern European countries are EU members?',\n choiceMode: 'checkbox',\n choicePrefix: 'numbers',\n choices: [],\n};\n"],"file":"defaults.js"}