@pie-element/select-text 9.6.1-next.2 → 9.6.2-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.
- package/CHANGELOG.md +0 -19
- package/configure/CHANGELOG.md +0 -18
- package/configure/lib/__tests__/design.test.js +214 -0
- package/configure/lib/defaultConfiguration.js +12 -1
- package/configure/lib/defaultConfiguration.js.map +1 -1
- package/configure/lib/design.js +450 -62
- package/configure/lib/design.js.map +1 -1
- package/configure/lib/index.js +7 -1
- package/configure/lib/index.js.map +1 -1
- package/configure/lib/utils.js +26 -2
- package/configure/lib/utils.js.map +1 -1
- package/configure/package.json +2 -2
- package/controller/CHANGELOG.md +0 -17
- package/controller/lib/__tests__/index.test.js +833 -0
- package/controller/lib/index.js +1 -0
- package/controller/lib/index.js.map +1 -1
- package/controller/package.json +2 -2
- package/docs/demo/generate.js +101 -44
- package/docs/demo/pie.manifest.json +11 -0
- package/lib/__tests__/index.test.js +91 -0
- package/lib/__tests__/main.test.js +83 -0
- package/lib/main.js +40 -6
- package/lib/main.js.map +1 -1
- package/module/configure.js +2540 -7020
- package/module/controller.js +1 -0
- package/module/demo.js +101 -44
- package/module/element.js +1106 -1139
- package/module/index.html +1 -1
- package/module/manifest.json +3 -3
- package/module/print-demo.js +101 -44
- package/module/print.html +1 -1
- package/module/print.js +1106 -1139
- package/package.json +3 -3
- package/LICENSE.md +0 -5
package/configure/lib/design.js
CHANGED
|
@@ -45,10 +45,26 @@ var _debug = _interopRequireDefault(require("debug"));
|
|
|
45
45
|
|
|
46
46
|
var _editableHtml = require("@pie-lib/pie-toolbox/editable-html");
|
|
47
47
|
|
|
48
|
+
var _mathRendering = require("@pie-lib/pie-toolbox/math-rendering");
|
|
49
|
+
|
|
48
50
|
var _Tooltip = _interopRequireDefault(require("@material-ui/core/Tooltip"));
|
|
49
51
|
|
|
50
52
|
var _utils = require("./utils");
|
|
51
53
|
|
|
54
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
55
|
+
|
|
56
|
+
var _Switch = _interopRequireDefault(require("@material-ui/core/Switch"));
|
|
57
|
+
|
|
58
|
+
var _FormControlLabel = _interopRequireDefault(require("@material-ui/core/FormControlLabel"));
|
|
59
|
+
|
|
60
|
+
var _reactDom = _interopRequireDefault(require("react-dom"));
|
|
61
|
+
|
|
62
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
|
63
|
+
|
|
64
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
65
|
+
|
|
66
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
67
|
+
|
|
52
68
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
53
69
|
|
|
54
70
|
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; }
|
|
@@ -79,7 +95,12 @@ var Design = /*#__PURE__*/function (_React$Component) {
|
|
|
79
95
|
u.tokens = [];
|
|
80
96
|
});
|
|
81
97
|
}, 200));
|
|
82
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeText", function (
|
|
98
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeText", function (text) {
|
|
99
|
+
_this.updateText(text);
|
|
100
|
+
|
|
101
|
+
_this.clearTokens();
|
|
102
|
+
});
|
|
103
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeTextEvent", function (event) {
|
|
83
104
|
return _this.updateText(event.target.value);
|
|
84
105
|
});
|
|
85
106
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeTokens", function (tokens, mode) {
|
|
@@ -93,6 +114,14 @@ var Design = /*#__PURE__*/function (_React$Component) {
|
|
|
93
114
|
u.maxSelections = Math.max(max, correctTokenCount);
|
|
94
115
|
});
|
|
95
116
|
});
|
|
117
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeTokenizedText", function (text) {
|
|
118
|
+
_this.apply(function (u) {
|
|
119
|
+
u.tokenizedText = text; // const correctTokenCount = tokens.filter((t) => t.correct).length;
|
|
120
|
+
// const max = isFinite(u.maxSelections) ? u.maxSelections : 0;
|
|
121
|
+
//
|
|
122
|
+
// u.maxSelections = Math.max(max, correctTokenCount);
|
|
123
|
+
});
|
|
124
|
+
});
|
|
96
125
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeMaxSelections", function (event, max) {
|
|
97
126
|
_this.apply(function (u) {
|
|
98
127
|
return u.maxSelections = max;
|
|
@@ -143,9 +172,193 @@ var Design = /*#__PURE__*/function (_React$Component) {
|
|
|
143
172
|
rationale: rationale
|
|
144
173
|
}));
|
|
145
174
|
});
|
|
175
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "createDOMAnnotation", function (elems, annotation) {
|
|
176
|
+
var classes = _this.props.classes;
|
|
177
|
+
var id = annotation.id;
|
|
178
|
+
(elems || []).forEach(function (elem) {
|
|
179
|
+
elem.dataset.id = id;
|
|
180
|
+
elem.className = (0, _classnames["default"])(classes.token); // elem.onclick = !disabled && this.handleClick;
|
|
181
|
+
// elem.onmouseover = this.handleHover;
|
|
182
|
+
// elem.onmouseout = this.handleCancelHover;
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "createNewAnnotation", function (selectedElems, selectionDetails) {
|
|
186
|
+
var annotation = _objectSpread({
|
|
187
|
+
id: [selectionDetails.start, selectionDetails.end, new Date().getTime()].join('-')
|
|
188
|
+
}, selectionDetails);
|
|
189
|
+
|
|
190
|
+
_this.createDOMAnnotation(selectedElems, annotation);
|
|
191
|
+
|
|
192
|
+
return annotation;
|
|
193
|
+
});
|
|
194
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "wrapSentencesInSpans", function (html) {
|
|
195
|
+
var onClickHandler = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
196
|
+
var classes = _this.props.classes;
|
|
197
|
+
var container = document.createElement('div');
|
|
198
|
+
container.innerHTML = html;
|
|
199
|
+
|
|
200
|
+
var splitSentences = function splitSentences(text) {
|
|
201
|
+
// Match sentences ending with punctuation:
|
|
202
|
+
// "." or "!" or "?"
|
|
203
|
+
var pattern = /([^.!?]+[.!?]+[\s"]*)|([^.!?]+$)/g;
|
|
204
|
+
var matches = text.match(pattern);
|
|
205
|
+
return matches || [];
|
|
206
|
+
};
|
|
207
|
+
|
|
208
|
+
var processNode = function processNode(node) {
|
|
209
|
+
if (node.nodeType === Node.TEXT_NODE) {
|
|
210
|
+
var sentences = splitSentences(node.textContent);
|
|
211
|
+
var fragment = document.createDocumentFragment();
|
|
212
|
+
|
|
213
|
+
var _iterator = _createForOfIteratorHelper(sentences),
|
|
214
|
+
_step;
|
|
215
|
+
|
|
216
|
+
try {
|
|
217
|
+
var _loop = function _loop() {
|
|
218
|
+
var sentence = _step.value;
|
|
219
|
+
|
|
220
|
+
if (sentence.trim()) {
|
|
221
|
+
var span = document.createElement('span');
|
|
222
|
+
span.textContent = sentence;
|
|
223
|
+
span.className = (0, _classnames["default"])(classes.token);
|
|
224
|
+
|
|
225
|
+
if (onClickHandler) {
|
|
226
|
+
span.addEventListener('click', function (e) {
|
|
227
|
+
onClickHandler(e, sentence);
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
fragment.appendChild(span);
|
|
232
|
+
} else {
|
|
233
|
+
fragment.appendChild(document.createTextNode(sentence));
|
|
234
|
+
}
|
|
235
|
+
};
|
|
236
|
+
|
|
237
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
238
|
+
_loop();
|
|
239
|
+
}
|
|
240
|
+
} catch (err) {
|
|
241
|
+
_iterator.e(err);
|
|
242
|
+
} finally {
|
|
243
|
+
_iterator.f();
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
node.replaceWith(fragment);
|
|
247
|
+
} else if (node.nodeType === Node.ELEMENT_NODE) {
|
|
248
|
+
Array.from(node.childNodes).forEach(processNode);
|
|
249
|
+
}
|
|
250
|
+
};
|
|
251
|
+
|
|
252
|
+
Array.from(container.childNodes).forEach(processNode);
|
|
253
|
+
return container;
|
|
254
|
+
});
|
|
255
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleSelection", function (event) {
|
|
256
|
+
var selection = window.getSelection(); // prevent unwanted selections
|
|
257
|
+
|
|
258
|
+
if (event.detail > 2) {
|
|
259
|
+
(0, _utils.clearSelection)();
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
if (selection && selection.rangeCount > 0) {
|
|
264
|
+
_this.wrapSelectionInSpan(selection);
|
|
265
|
+
|
|
266
|
+
(0, _utils.clearSelection)();
|
|
267
|
+
|
|
268
|
+
if (_this.textRef) {
|
|
269
|
+
var content = _this.textRef.getHTML();
|
|
270
|
+
|
|
271
|
+
_this.changeTokenizedText(content); // this.setState({ tokenizedText: content });
|
|
272
|
+
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
});
|
|
276
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleTokenClick", function (event) {
|
|
277
|
+
var correctMode = _this.state.correctMode;
|
|
278
|
+
|
|
279
|
+
if (!correctMode) {
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
event.target.classList.toggle('correct');
|
|
284
|
+
});
|
|
285
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "clearTokens", function () {
|
|
286
|
+
var model = _this.props.model;
|
|
287
|
+
|
|
288
|
+
if (_this.textRef) {
|
|
289
|
+
var container = document.createElement('div');
|
|
290
|
+
container.innerHTML = model.text; // Remove all children and add new content
|
|
291
|
+
|
|
292
|
+
_this.textRef.innerHTML = '';
|
|
293
|
+
|
|
294
|
+
_this.textRef.appendChild(container);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
_this.changeTokenizedText(model.text);
|
|
298
|
+
|
|
299
|
+
_this.setState({
|
|
300
|
+
tokenizedText: model.text
|
|
301
|
+
});
|
|
302
|
+
});
|
|
303
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "selectWords", function () {
|
|
304
|
+
var text = _this.state.text;
|
|
305
|
+
|
|
306
|
+
_this.clearTokens();
|
|
307
|
+
|
|
308
|
+
var tokenized = _this.wrapWordsInSpans(text, function (e) {
|
|
309
|
+
return _this.handleTokenClick(e);
|
|
310
|
+
});
|
|
311
|
+
|
|
312
|
+
console.log('words:', tokenized);
|
|
313
|
+
|
|
314
|
+
_this.changeTokenizedText(tokenized);
|
|
315
|
+
|
|
316
|
+
_this.setState({
|
|
317
|
+
tokenizedText: tokenized
|
|
318
|
+
});
|
|
319
|
+
});
|
|
320
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "selectSentences", function () {
|
|
321
|
+
var text = _this.state.text;
|
|
322
|
+
|
|
323
|
+
_this.clearTokens();
|
|
324
|
+
|
|
325
|
+
var container = _this.wrapSentencesInSpans(text); // Remove all children and add new content
|
|
326
|
+
|
|
327
|
+
|
|
328
|
+
_this.textRef.innerHTML = '';
|
|
329
|
+
|
|
330
|
+
_this.textRef.appendChild(container);
|
|
331
|
+
|
|
332
|
+
var tokenized = container.innerHTML;
|
|
333
|
+
console.log('sentences:', tokenized);
|
|
334
|
+
|
|
335
|
+
_this.changeTokenizedText(tokenized); // this.setState({ tokenizedText: tokenized });
|
|
336
|
+
|
|
337
|
+
});
|
|
338
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "selectParagraphs", function () {
|
|
339
|
+
var text = _this.state.text;
|
|
340
|
+
|
|
341
|
+
_this.clearTokens();
|
|
342
|
+
|
|
343
|
+
var container = _this.wrapParagraphContentInSpan(text); // Remove all children and add new content
|
|
344
|
+
|
|
345
|
+
|
|
346
|
+
_this.textRef.innerHTML = '';
|
|
347
|
+
|
|
348
|
+
_this.textRef.appendChild(container);
|
|
349
|
+
|
|
350
|
+
var tokenized = container.innerHTML;
|
|
351
|
+
console.log('paragraphs:', tokenized);
|
|
352
|
+
|
|
353
|
+
_this.changeTokenizedText(tokenized); // this.setState({ tokenizedText: tokenized });
|
|
354
|
+
|
|
355
|
+
});
|
|
146
356
|
var _model = _this.props.model;
|
|
147
357
|
_this.state = {
|
|
148
|
-
|
|
358
|
+
correctMode: false,
|
|
359
|
+
selectMode: false,
|
|
360
|
+
text: _model && _model.text || '',
|
|
361
|
+
tokenizedText: _model && _model.token || ''
|
|
149
362
|
};
|
|
150
363
|
return _this;
|
|
151
364
|
}
|
|
@@ -156,17 +369,160 @@ var Design = /*#__PURE__*/function (_React$Component) {
|
|
|
156
369
|
var model = nProps.model;
|
|
157
370
|
|
|
158
371
|
if (model && model.text) {
|
|
159
|
-
|
|
372
|
+
var _this$setState;
|
|
373
|
+
|
|
374
|
+
this.setState((_this$setState = {
|
|
160
375
|
text: model.text
|
|
161
|
-
});
|
|
376
|
+
}, (0, _defineProperty2["default"])(_this$setState, "text", model.text), (0, _defineProperty2["default"])(_this$setState, "tokenizedText", model.tokenizedText || model.text), _this$setState)); // model.tokens.forEach((annotation) => {
|
|
377
|
+
// console.log('annotation', annotation);
|
|
378
|
+
// const [domStart, domEnd] = getDOMNodes(annotation.start, annotation.end, this.textRef);
|
|
379
|
+
// console.log('domStart, domEnd', domStart, domEnd);
|
|
380
|
+
//
|
|
381
|
+
// if (domStart && domEnd) {
|
|
382
|
+
// const range = document.createRange();
|
|
383
|
+
//
|
|
384
|
+
// range.setStart(domStart.node, domStart.offset);
|
|
385
|
+
// range.setEnd(domEnd.node, domEnd.offset);
|
|
386
|
+
//
|
|
387
|
+
// const spans = wrapRange(range);
|
|
388
|
+
//
|
|
389
|
+
// this.createDOMAnnotation(spans, annotation);
|
|
390
|
+
// }
|
|
391
|
+
// });
|
|
162
392
|
}
|
|
163
393
|
}
|
|
394
|
+
}, {
|
|
395
|
+
key: "componentDidUpdate",
|
|
396
|
+
value: function componentDidUpdate() {
|
|
397
|
+
// console.log('UPDATED');
|
|
398
|
+
// console.log('this.state.text', this.state.text);
|
|
399
|
+
//eslint-disable-next-line
|
|
400
|
+
var domNode = _reactDom["default"].findDOMNode(this);
|
|
401
|
+
|
|
402
|
+
(0, _mathRendering.renderMath)(domNode);
|
|
403
|
+
}
|
|
404
|
+
}, {
|
|
405
|
+
key: "wrapWordsInSpans",
|
|
406
|
+
value: // addAnnotation = (type) => {
|
|
407
|
+
// const { annotations, onChange } = this.props;
|
|
408
|
+
// const annotation = this.createNewAnnotation('', type);
|
|
409
|
+
// const labelElem = getLabelElement(annotation.id);
|
|
410
|
+
//
|
|
411
|
+
// annotations.push(annotation);
|
|
412
|
+
//
|
|
413
|
+
// this.setState({
|
|
414
|
+
// openedMenu: false,
|
|
415
|
+
// openedEditor: true,
|
|
416
|
+
// annotationIndex: annotations.length - 1,
|
|
417
|
+
// annotation,
|
|
418
|
+
// labelElem,
|
|
419
|
+
// });
|
|
420
|
+
//
|
|
421
|
+
// onChange(annotations);
|
|
422
|
+
// };
|
|
423
|
+
// new functionalities
|
|
424
|
+
function wrapWordsInSpans(html, onClick) {
|
|
425
|
+
var classes = this.props.classes;
|
|
426
|
+
var container = document.createElement('div');
|
|
427
|
+
container.innerHTML = html;
|
|
428
|
+
|
|
429
|
+
var processNode = function processNode(node) {
|
|
430
|
+
if (node.nodeType === Node.TEXT_NODE) {
|
|
431
|
+
var words = node.textContent.split(/(\s+|\b)/); // split by word boundaries + spaces
|
|
432
|
+
|
|
433
|
+
var fragment = document.createDocumentFragment();
|
|
434
|
+
|
|
435
|
+
var _iterator2 = _createForOfIteratorHelper(words),
|
|
436
|
+
_step2;
|
|
437
|
+
|
|
438
|
+
try {
|
|
439
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
440
|
+
var word = _step2.value;
|
|
441
|
+
|
|
442
|
+
if (word.trim()) {
|
|
443
|
+
var span = document.createElement('span');
|
|
444
|
+
span.className = (0, _classnames["default"])(classes.token);
|
|
445
|
+
span.addEventListener('click', function (e) {
|
|
446
|
+
return onClick(e);
|
|
447
|
+
});
|
|
448
|
+
span.textContent = word;
|
|
449
|
+
fragment.appendChild(span);
|
|
450
|
+
} else {
|
|
451
|
+
fragment.appendChild(document.createTextNode(word));
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
} catch (err) {
|
|
455
|
+
_iterator2.e(err);
|
|
456
|
+
} finally {
|
|
457
|
+
_iterator2.f();
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
node.replaceWith(fragment);
|
|
461
|
+
} else if (node.nodeType === Node.ELEMENT_NODE) {
|
|
462
|
+
Array.from(node.childNodes).forEach(processNode);
|
|
463
|
+
}
|
|
464
|
+
};
|
|
465
|
+
|
|
466
|
+
Array.from(container.childNodes).forEach(processNode);
|
|
467
|
+
return container.innerHTML;
|
|
468
|
+
}
|
|
469
|
+
}, {
|
|
470
|
+
key: "wrapParagraphContentInSpan",
|
|
471
|
+
value: function wrapParagraphContentInSpan(html) {
|
|
472
|
+
var _this2 = this;
|
|
473
|
+
|
|
474
|
+
var classes = this.props.classes;
|
|
475
|
+
var container = document.createElement('div');
|
|
476
|
+
container.innerHTML = html;
|
|
477
|
+
container.querySelectorAll('p').forEach(function (p) {
|
|
478
|
+
var span = document.createElement('span');
|
|
479
|
+
span.className = (0, _classnames["default"])(classes.token);
|
|
480
|
+
span.addEventListener('click', _this2.handleTokenClick); // Move all children of <p> into the span
|
|
481
|
+
|
|
482
|
+
while (p.firstChild) {
|
|
483
|
+
span.appendChild(p.firstChild);
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
p.appendChild(span);
|
|
487
|
+
});
|
|
488
|
+
return container;
|
|
489
|
+
}
|
|
490
|
+
}, {
|
|
491
|
+
key: "wrapSelectionInSpan",
|
|
492
|
+
value: function wrapSelectionInSpan(selection) {
|
|
493
|
+
var classes = this.props.classes;
|
|
494
|
+
var range = selection.getRangeAt(0);
|
|
495
|
+
|
|
496
|
+
if (range.collapsed) {
|
|
497
|
+
console.log('Selection is collapsed (no text selected).');
|
|
498
|
+
return;
|
|
499
|
+
} // Extract the contents of the selection
|
|
500
|
+
|
|
501
|
+
|
|
502
|
+
var contents = range.extractContents(); // Create the span wrapper
|
|
503
|
+
|
|
504
|
+
var span = document.createElement('span');
|
|
505
|
+
span.className = (0, _classnames["default"])(classes.token);
|
|
506
|
+
span.addEventListener('click', this.handleTokenClick);
|
|
507
|
+
span.appendChild(contents); // Insert back into the DOM
|
|
508
|
+
|
|
509
|
+
range.insertNode(span); // Collapse the selection
|
|
510
|
+
|
|
511
|
+
selection.removeAllRanges();
|
|
512
|
+
}
|
|
164
513
|
}, {
|
|
165
514
|
key: "render",
|
|
166
515
|
value: function render() {
|
|
167
|
-
var _configuration$teache,
|
|
168
|
-
|
|
169
|
-
|
|
516
|
+
var _configuration$teache,
|
|
517
|
+
_configuration$prompt,
|
|
518
|
+
_this3 = this,
|
|
519
|
+
_configuration$ration;
|
|
520
|
+
|
|
521
|
+
var _this$state = this.state,
|
|
522
|
+
textValue = _this$state.text,
|
|
523
|
+
correctMode = _this$state.correctMode,
|
|
524
|
+
selectMode = _this$state.selectMode,
|
|
525
|
+
tokenizedText = _this$state.tokenizedText;
|
|
170
526
|
var _this$props6 = this.props,
|
|
171
527
|
classes = _this$props6.classes,
|
|
172
528
|
configuration = _this$props6.configuration,
|
|
@@ -336,65 +692,60 @@ var Design = /*#__PURE__*/function (_React$Component) {
|
|
|
336
692
|
mathMlOptions: mathMlOptions
|
|
337
693
|
}), promptError && /*#__PURE__*/_react["default"].createElement("div", {
|
|
338
694
|
className: classes.errorText
|
|
339
|
-
}, promptError)),
|
|
695
|
+
}, promptError)), /*#__PURE__*/_react["default"].createElement("div", {
|
|
696
|
+
className: classes.subheader
|
|
697
|
+
}, "NEW functionality", /*#__PURE__*/_react["default"].createElement(_FormControlLabel["default"], {
|
|
698
|
+
control: /*#__PURE__*/_react["default"].createElement(_Switch["default"], {
|
|
699
|
+
checked: selectMode,
|
|
700
|
+
onChange: function onChange() {
|
|
701
|
+
_this3.setState({
|
|
702
|
+
selectMode: !selectMode
|
|
703
|
+
}); // renderMath(this);
|
|
704
|
+
|
|
705
|
+
}
|
|
706
|
+
}),
|
|
707
|
+
label: "Select tokens"
|
|
708
|
+
})), selectMode && /*#__PURE__*/_react["default"].createElement(_textSelect.Controls, {
|
|
709
|
+
onClear: this.clearTokens,
|
|
710
|
+
onWords: this.selectWords,
|
|
711
|
+
onSentences: this.selectSentences,
|
|
712
|
+
onParagraphs: this.selectParagraphs,
|
|
713
|
+
setCorrectMode: correctMode,
|
|
714
|
+
onToggleCorrectMode: function onToggleCorrectMode() {
|
|
715
|
+
return _this3.setState({
|
|
716
|
+
correctMode: !correctMode
|
|
717
|
+
});
|
|
718
|
+
}
|
|
719
|
+
}), text.settings && /*#__PURE__*/_react["default"].createElement(_configUi.InputContainer, {
|
|
340
720
|
label: text.label || '',
|
|
341
721
|
className: classes.promptHolder
|
|
342
|
-
}, /*#__PURE__*/_react["default"].createElement(
|
|
343
|
-
className: classes.
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
onChange: this.changeText,
|
|
347
|
-
spellCheck: spellCheckEnabled
|
|
348
|
-
})), tokens.settings && /*#__PURE__*/_react["default"].createElement(_configUi.InputContainer, {
|
|
349
|
-
label: tokens.label || '',
|
|
350
|
-
className: classes.tokenizerContainer
|
|
351
|
-
}, /*#__PURE__*/_react["default"].createElement(_Tooltip["default"], {
|
|
352
|
-
classes: {
|
|
353
|
-
tooltip: classes.tooltip
|
|
722
|
+
}, selectMode ? /*#__PURE__*/_react["default"].createElement("div", {
|
|
723
|
+
className: classes.textContainer,
|
|
724
|
+
ref: function ref(r) {
|
|
725
|
+
return _this3.textRef = r;
|
|
354
726
|
},
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
}, /*#__PURE__*/_react["default"].createElement(_Info["default"], {
|
|
360
|
-
fontSize: 'small',
|
|
361
|
-
color: 'primary',
|
|
362
|
-
style: {
|
|
363
|
-
position: 'absolute',
|
|
364
|
-
left: '48px',
|
|
365
|
-
top: '-3px'
|
|
727
|
+
onMouseDown: selectMode && !correctMode ? _utils.clearSelection : function () {},
|
|
728
|
+
onMouseUp: selectMode && !correctMode ? this.handleSelection : function () {},
|
|
729
|
+
dangerouslySetInnerHTML: {
|
|
730
|
+
__html: tokenizedText
|
|
366
731
|
}
|
|
367
|
-
})
|
|
368
|
-
className: classes.
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
}), correctAnswer.settings && /*#__PURE__*/_react["default"].createElement(_Chip["default"], {
|
|
385
|
-
label: "".concat(correctAnswer.label, ": ").concat(tokensModel.filter(function (t) {
|
|
386
|
-
return t.correct;
|
|
387
|
-
}).length),
|
|
388
|
-
className: classes.chip
|
|
389
|
-
}), selectionCount.settings && /*#__PURE__*/_react["default"].createElement(_configUi.NumberTextField, {
|
|
390
|
-
min: tokensModel.filter(function (t) {
|
|
391
|
-
return t.correct;
|
|
392
|
-
}).length || 0,
|
|
393
|
-
label: "".concat(selectionCount.label, " (0:any)"),
|
|
394
|
-
max: tokensModel.length,
|
|
395
|
-
value: model.maxSelections,
|
|
396
|
-
onChange: this.changeMaxSelections,
|
|
397
|
-
className: classes.numberField
|
|
732
|
+
}) : /*#__PURE__*/_react["default"].createElement(_editableHtml.EditableHtml, {
|
|
733
|
+
className: classes.prompt,
|
|
734
|
+
markup: textValue,
|
|
735
|
+
onChange: this.changeText,
|
|
736
|
+
nonEmpty: false,
|
|
737
|
+
disableUnderline: true,
|
|
738
|
+
toolbarOpts: toolbarOpts,
|
|
739
|
+
pluginProps: getPluginProps(text === null || text === void 0 ? void 0 : text.inputConfiguration),
|
|
740
|
+
spellCheck: spellCheckEnabled,
|
|
741
|
+
imageSupport: imageSupport,
|
|
742
|
+
uploadSoundSupport: uploadSoundSupport,
|
|
743
|
+
languageCharactersProps: [{
|
|
744
|
+
language: 'spanish'
|
|
745
|
+
}, {
|
|
746
|
+
language: 'special'
|
|
747
|
+
}],
|
|
748
|
+
mathMlOptions: mathMlOptions
|
|
398
749
|
})), rationaleEnabled && /*#__PURE__*/_react["default"].createElement(_configUi.InputContainer, {
|
|
399
750
|
label: rationale.label || '',
|
|
400
751
|
className: classes.promptHolder
|
|
@@ -499,6 +850,43 @@ var _default = (0, _styles.withStyles)(function (theme) {
|
|
|
499
850
|
fontSize: theme.typography.fontSize - 2,
|
|
500
851
|
color: theme.palette.error.main,
|
|
501
852
|
paddingTop: theme.spacing.unit
|
|
853
|
+
},
|
|
854
|
+
subheader: {
|
|
855
|
+
paddingBottom: '8px',
|
|
856
|
+
borderBottom: '1px solid grey',
|
|
857
|
+
marginBottom: '16px',
|
|
858
|
+
marginTop: '24px',
|
|
859
|
+
display: 'flex',
|
|
860
|
+
alignItems: 'center',
|
|
861
|
+
justifyContent: 'space-between'
|
|
862
|
+
},
|
|
863
|
+
textContainer: {
|
|
864
|
+
padding: '15px 21px',
|
|
865
|
+
border: '1px solid #ccc',
|
|
866
|
+
borderRadius: '4px',
|
|
867
|
+
overflowY: 'scroll',
|
|
868
|
+
whiteSpace: 'pre-wrap',
|
|
869
|
+
overflowWrap: 'break-word',
|
|
870
|
+
'& p': {
|
|
871
|
+
margin: 0
|
|
872
|
+
},
|
|
873
|
+
'& span[data-latex]': {
|
|
874
|
+
userSelect: 'none',
|
|
875
|
+
'-webkit-user-select': 'none',
|
|
876
|
+
'-moz-user-select': 'none',
|
|
877
|
+
'-ms-user-select': 'none'
|
|
878
|
+
}
|
|
879
|
+
},
|
|
880
|
+
token: {
|
|
881
|
+
position: 'relative',
|
|
882
|
+
cursor: 'pointer',
|
|
883
|
+
backgroundColor: '#fff9c4',
|
|
884
|
+
'&:hover': {
|
|
885
|
+
backgroundColor: '#E5E0B0'
|
|
886
|
+
},
|
|
887
|
+
'&.correct': {
|
|
888
|
+
backgroundColor: '#4caf50'
|
|
889
|
+
}
|
|
502
890
|
}
|
|
503
891
|
};
|
|
504
892
|
})(Design);
|