@pie-lib/editable-html 10.0.0-beta.7 → 10.0.0
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.json +1 -1
- package/CHANGELOG.md +81 -0
- package/LICENSE.md +5 -0
- package/lib/editor.js +410 -543
- package/lib/editor.js.map +1 -1
- package/lib/index.js +200 -101
- package/lib/index.js.map +1 -1
- package/lib/parse-html.js +5 -6
- package/lib/parse-html.js.map +1 -1
- package/lib/plugins/characters/custom-popper.js +12 -2
- package/lib/plugins/characters/custom-popper.js.map +1 -1
- package/lib/plugins/characters/index.js +71 -19
- package/lib/plugins/characters/index.js.map +1 -1
- package/lib/plugins/characters/utils.js.map +1 -1
- package/lib/plugins/html/icons/index.js +38 -0
- package/lib/plugins/html/icons/index.js.map +1 -0
- package/lib/plugins/html/index.js +75 -0
- package/lib/plugins/html/index.js.map +1 -0
- package/lib/plugins/image/alt-dialog.js +26 -0
- package/lib/plugins/image/alt-dialog.js.map +1 -1
- package/lib/plugins/image/component.js +124 -90
- package/lib/plugins/image/component.js.map +1 -1
- package/lib/plugins/image/image-toolbar.js +45 -7
- package/lib/plugins/image/image-toolbar.js.map +1 -1
- package/lib/plugins/image/index.js +91 -113
- package/lib/plugins/image/index.js.map +1 -1
- package/lib/plugins/image/insert-image-handler.js +54 -72
- package/lib/plugins/image/insert-image-handler.js.map +1 -1
- package/lib/plugins/index.js +71 -31
- package/lib/plugins/index.js.map +1 -1
- package/lib/plugins/list/index.js +129 -58
- package/lib/plugins/list/index.js.map +1 -1
- package/lib/plugins/math/index.js +152 -118
- package/lib/plugins/math/index.js.map +1 -1
- package/lib/plugins/media/index.js +185 -168
- package/lib/plugins/media/index.js.map +1 -1
- package/lib/plugins/media/media-dialog.js +197 -110
- package/lib/plugins/media/media-dialog.js.map +1 -1
- package/lib/plugins/media/media-toolbar.js +24 -4
- package/lib/plugins/media/media-toolbar.js.map +1 -1
- package/lib/plugins/media/media-wrapper.js +65 -23
- package/lib/plugins/media/media-wrapper.js.map +1 -1
- package/lib/plugins/respArea/drag-in-the-blank/choice.js +50 -10
- package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +1 -1
- package/lib/plugins/respArea/drag-in-the-blank/index.js +22 -9
- package/lib/plugins/respArea/drag-in-the-blank/index.js.map +1 -1
- package/lib/plugins/respArea/explicit-constructed-response/index.js +9 -4
- package/lib/plugins/respArea/explicit-constructed-response/index.js.map +1 -1
- package/lib/plugins/respArea/icons/index.js +18 -1
- package/lib/plugins/respArea/icons/index.js.map +1 -1
- package/lib/plugins/respArea/index.js +133 -122
- package/lib/plugins/respArea/index.js.map +1 -1
- package/lib/plugins/respArea/inline-dropdown/index.js +10 -4
- package/lib/plugins/respArea/inline-dropdown/index.js.map +1 -1
- package/lib/plugins/respArea/utils.js +33 -15
- package/lib/plugins/respArea/utils.js.map +1 -1
- package/lib/plugins/table/icons/index.js +7 -0
- package/lib/plugins/table/icons/index.js.map +1 -1
- package/lib/plugins/table/index.js +279 -390
- package/lib/plugins/table/index.js.map +1 -1
- package/lib/plugins/table/table-toolbar.js +47 -14
- package/lib/plugins/table/table-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/default-toolbar.js +63 -51
- package/lib/plugins/toolbar/default-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/done-button.js +9 -1
- package/lib/plugins/toolbar/done-button.js.map +1 -1
- package/lib/plugins/toolbar/editor-and-toolbar.js +140 -83
- package/lib/plugins/toolbar/editor-and-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/index.js +5 -0
- package/lib/plugins/toolbar/index.js.map +1 -1
- package/lib/plugins/toolbar/toolbar-buttons.js +39 -8
- package/lib/plugins/toolbar/toolbar-buttons.js.map +1 -1
- package/lib/plugins/toolbar/toolbar.js +261 -225
- package/lib/plugins/toolbar/toolbar.js.map +1 -1
- package/lib/plugins/utils.js +16 -19
- package/lib/plugins/utils.js.map +1 -1
- package/lib/serialization.js +70 -11
- package/lib/serialization.js.map +1 -1
- package/lib/theme.js.map +1 -1
- package/package.json +18 -17
- package/src/editor.jsx +139 -434
- package/src/index.jsx +96 -62
- package/src/plugins/characters/index.jsx +17 -12
- package/src/plugins/html/icons/index.jsx +19 -0
- package/src/plugins/html/index.jsx +68 -0
- package/src/plugins/image/component.jsx +38 -60
- package/src/plugins/image/index.jsx +42 -95
- package/src/plugins/image/insert-image-handler.js +27 -62
- package/src/plugins/index.jsx +39 -21
- package/src/plugins/list/index.jsx +90 -62
- package/src/plugins/math/index.jsx +70 -93
- package/src/plugins/media/index.jsx +117 -146
- package/src/plugins/media/media-dialog.js +9 -10
- package/src/plugins/media/media-wrapper.jsx +27 -29
- package/src/plugins/respArea/drag-in-the-blank/index.jsx +4 -5
- package/src/plugins/respArea/explicit-constructed-response/index.jsx +1 -2
- package/src/plugins/respArea/index.jsx +84 -114
- package/src/plugins/respArea/inline-dropdown/index.jsx +2 -3
- package/src/plugins/respArea/utils.jsx +28 -23
- package/src/plugins/table/index.jsx +214 -334
- package/src/plugins/table/table-toolbar.jsx +4 -3
- package/src/plugins/toolbar/default-toolbar.jsx +30 -48
- package/src/plugins/toolbar/editor-and-toolbar.jsx +114 -114
- package/src/plugins/toolbar/toolbar.jsx +224 -254
- package/src/plugins/utils.js +0 -16
- package/src/serialization.jsx +1 -1
- package/lib/components.js +0 -92
- package/lib/components.js.map +0 -1
- package/lib/new-serialization.js +0 -280
- package/lib/new-serialization.js.map +0 -1
- package/lib/plugins/hotKeys/index.js +0 -60
- package/lib/plugins/hotKeys/index.js.map +0 -1
- package/lib/test-serializer.js +0 -138
- package/lib/test-serializer.js.map +0 -1
- package/src/components.js +0 -135
- package/src/new-serialization.jsx +0 -310
- package/src/plugins/hotKeys/index.js +0 -54
- package/src/test-serializer.js +0 -132
|
@@ -1,29 +1,45 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
6
7
|
});
|
|
7
8
|
exports.CustomToolbarComp = void 0;
|
|
8
9
|
exports["default"] = MathPlugin;
|
|
9
10
|
exports.serialization = exports.inlineMath = void 0;
|
|
11
|
+
|
|
10
12
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
13
|
+
|
|
11
14
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
12
|
-
|
|
13
|
-
var _slate = require("slate");
|
|
14
|
-
var _slateReact = require("slate-react");
|
|
15
|
-
var _slateHyperscript = require("slate-hyperscript");
|
|
15
|
+
|
|
16
16
|
var _Functions = _interopRequireDefault(require("@material-ui/icons/Functions"));
|
|
17
|
+
|
|
18
|
+
var _slate = require("slate");
|
|
19
|
+
|
|
17
20
|
var _mathToolbar = require("@pie-lib/math-toolbar");
|
|
21
|
+
|
|
18
22
|
var _mathRendering = require("@pie-lib/math-rendering");
|
|
23
|
+
|
|
24
|
+
var _react = _interopRequireDefault(require("react"));
|
|
25
|
+
|
|
19
26
|
var _debug = _interopRequireDefault(require("debug"));
|
|
27
|
+
|
|
28
|
+
var _slatePropTypes = _interopRequireDefault(require("slate-prop-types"));
|
|
29
|
+
|
|
20
30
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
31
|
+
|
|
32
|
+
var _serialization = require("../../serialization");
|
|
33
|
+
|
|
21
34
|
var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
|
|
22
|
-
|
|
35
|
+
|
|
23
36
|
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; }
|
|
37
|
+
|
|
24
38
|
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; }
|
|
39
|
+
|
|
25
40
|
var log = (0, _debug["default"])('@pie-lib:editable-html:plugins:math');
|
|
26
41
|
var TEXT_NODE = 3;
|
|
42
|
+
|
|
27
43
|
function generateAdditionalKeys() {
|
|
28
44
|
var keyData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
29
45
|
return keyData.map(function (key) {
|
|
@@ -34,50 +50,59 @@ function generateAdditionalKeys() {
|
|
|
34
50
|
label: key
|
|
35
51
|
};
|
|
36
52
|
});
|
|
37
|
-
}
|
|
53
|
+
} // eslint-disable-next-line react/display-name
|
|
54
|
+
|
|
38
55
|
|
|
39
|
-
// eslint-disable-next-line react/display-name
|
|
40
56
|
var CustomToolbarComp = /*#__PURE__*/_react["default"].memo(function (props) {
|
|
41
57
|
var node = props.node,
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
58
|
+
value = props.value,
|
|
59
|
+
onFocus = props.onFocus,
|
|
60
|
+
onBlur = props.onBlur,
|
|
61
|
+
onClick = props.onClick;
|
|
62
|
+
|
|
47
63
|
var _ref = props || {},
|
|
48
|
-
|
|
64
|
+
pluginProps = _ref.pluginProps;
|
|
65
|
+
|
|
49
66
|
var _ref2 = pluginProps || {},
|
|
50
|
-
|
|
67
|
+
math = _ref2.math;
|
|
68
|
+
|
|
51
69
|
var _ref3 = math || {},
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
70
|
+
keypadMode = _ref3.keypadMode,
|
|
71
|
+
customKeys = _ref3.customKeys,
|
|
72
|
+
_ref3$controlledKeypa = _ref3.controlledKeypadMode,
|
|
73
|
+
controlledKeypadMode = _ref3$controlledKeypa === void 0 ? true : _ref3$controlledKeypa;
|
|
74
|
+
|
|
56
75
|
var onDone = function onDone(latex) {
|
|
57
|
-
var update = _objectSpread(_objectSpread({}, node.data), {}, {
|
|
76
|
+
var update = _objectSpread(_objectSpread({}, node.data.toObject()), {}, {
|
|
58
77
|
latex: latex
|
|
59
78
|
});
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
79
|
+
|
|
80
|
+
var change = value.change().setNodeByKey(node.key, {
|
|
81
|
+
data: update
|
|
82
|
+
});
|
|
83
|
+
var nextText = value.document.getNextText(node.key);
|
|
84
|
+
change.moveFocusTo(nextText.key, 0).moveAnchorTo(nextText.key, 0);
|
|
85
|
+
props.onToolbarDone(change, false);
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
var onChange = function onChange(latex) {
|
|
89
|
+
var update = _objectSpread(_objectSpread({}, node.data.toObject()), {}, {
|
|
90
|
+
latex: latex
|
|
69
91
|
});
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
unit: 'offset'
|
|
92
|
+
|
|
93
|
+
var change = value.change().setNodeByKey(node.key, {
|
|
94
|
+
data: update
|
|
74
95
|
});
|
|
96
|
+
log('call onToolbarChange:', change);
|
|
97
|
+
props.onDataChange(node.key, update);
|
|
75
98
|
};
|
|
76
|
-
|
|
99
|
+
|
|
100
|
+
var latex = node.data.get('latex');
|
|
77
101
|
return /*#__PURE__*/_react["default"].createElement(_mathToolbar.MathToolbar, {
|
|
78
102
|
autoFocus: true,
|
|
79
103
|
additionalKeys: generateAdditionalKeys(customKeys),
|
|
80
104
|
latex: latex,
|
|
105
|
+
onChange: onChange,
|
|
81
106
|
onDone: onDone,
|
|
82
107
|
onBlur: onBlur,
|
|
83
108
|
onFocus: onFocus,
|
|
@@ -87,43 +112,36 @@ var CustomToolbarComp = /*#__PURE__*/_react["default"].memo(function (props) {
|
|
|
87
112
|
});
|
|
88
113
|
}, function (prev, next) {
|
|
89
114
|
var node = prev.node,
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
115
|
+
_prev$pluginProps = prev.pluginProps;
|
|
116
|
+
_prev$pluginProps = _prev$pluginProps === void 0 ? {} : _prev$pluginProps;
|
|
117
|
+
var _prev$pluginProps$mat = _prev$pluginProps.math;
|
|
118
|
+
_prev$pluginProps$mat = _prev$pluginProps$mat === void 0 ? {} : _prev$pluginProps$mat;
|
|
119
|
+
var keypadMode = _prev$pluginProps$mat.keypadMode,
|
|
120
|
+
controlledKeypadMode = _prev$pluginProps$mat.controlledKeypadMode;
|
|
96
121
|
var nodeNext = next.node,
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
122
|
+
_next$pluginProps = next.pluginProps;
|
|
123
|
+
_next$pluginProps = _next$pluginProps === void 0 ? {} : _next$pluginProps;
|
|
124
|
+
var _next$pluginProps$mat = _next$pluginProps.math;
|
|
125
|
+
_next$pluginProps$mat = _next$pluginProps$mat === void 0 ? {} : _next$pluginProps$mat;
|
|
126
|
+
var keypadModeNext = _next$pluginProps$mat.keypadMode,
|
|
127
|
+
controlledKeypadModeNext = _next$pluginProps$mat.controlledKeypadMode;
|
|
103
128
|
var keypadModeChanged = keypadMode !== keypadModeNext;
|
|
104
129
|
var controlledKeypadModeChanged = controlledKeypadMode !== controlledKeypadModeNext;
|
|
105
|
-
var equal = (
|
|
130
|
+
var equal = node.equals(nodeNext);
|
|
106
131
|
return equal && !keypadModeChanged && !controlledKeypadModeChanged;
|
|
107
132
|
});
|
|
133
|
+
|
|
108
134
|
exports.CustomToolbarComp = CustomToolbarComp;
|
|
109
135
|
CustomToolbarComp.propTypes = {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
type: _propTypes["default"].string,
|
|
113
|
-
children: _propTypes["default"].array,
|
|
114
|
-
data: _propTypes["default"].object
|
|
115
|
-
}).isRequired,
|
|
116
|
-
value: _propTypes["default"].arrayOf(_propTypes["default"].shape({
|
|
117
|
-
type: _propTypes["default"].string,
|
|
118
|
-
children: _propTypes["default"].array,
|
|
119
|
-
data: _propTypes["default"].object
|
|
120
|
-
})).isRequired,
|
|
136
|
+
node: _slatePropTypes["default"].node.isRequired,
|
|
137
|
+
value: _slatePropTypes["default"].value,
|
|
121
138
|
onToolbarDone: _propTypes["default"].func,
|
|
139
|
+
onDataChange: _propTypes["default"].func,
|
|
122
140
|
onFocus: _propTypes["default"].func,
|
|
123
141
|
onClick: _propTypes["default"].func,
|
|
124
142
|
onBlur: _propTypes["default"].func
|
|
125
143
|
};
|
|
126
|
-
|
|
144
|
+
|
|
127
145
|
function MathPlugin(opts) {
|
|
128
146
|
MathPlugin.mathMlOptions = {
|
|
129
147
|
mmlOutput: opts.mmlOutput,
|
|
@@ -133,11 +151,16 @@ function MathPlugin(opts) {
|
|
|
133
151
|
name: 'math',
|
|
134
152
|
toolbar: {
|
|
135
153
|
icon: /*#__PURE__*/_react["default"].createElement(_Functions["default"], null),
|
|
136
|
-
onClick: function onClick(
|
|
154
|
+
onClick: function onClick(value, onChange) {
|
|
137
155
|
log('[insertMath]');
|
|
138
156
|
var math = inlineMath();
|
|
139
|
-
|
|
157
|
+
var change = value.change().insertInline(math);
|
|
158
|
+
onChange(change);
|
|
159
|
+
},
|
|
160
|
+
supports: function supports(node) {
|
|
161
|
+
return node && node.object === 'inline' && node.type === 'math';
|
|
140
162
|
},
|
|
163
|
+
|
|
141
164
|
/**
|
|
142
165
|
* Return a react component function
|
|
143
166
|
* @param node {Slate.Node}
|
|
@@ -147,20 +170,6 @@ function MathPlugin(opts) {
|
|
|
147
170
|
*/
|
|
148
171
|
CustomToolbarComp: CustomToolbarComp
|
|
149
172
|
},
|
|
150
|
-
rules: function rules(editor) {
|
|
151
|
-
var isVoid = editor.isVoid,
|
|
152
|
-
isInline = editor.isInline;
|
|
153
|
-
editor.isVoid = function (element) {
|
|
154
|
-
return mathTypes.includes(element.type) ? true : isVoid(element);
|
|
155
|
-
};
|
|
156
|
-
editor.isInline = function (element) {
|
|
157
|
-
return mathTypes.includes(element.type) ? true : isInline(element);
|
|
158
|
-
};
|
|
159
|
-
return editor;
|
|
160
|
-
},
|
|
161
|
-
supports: function supports(node) {
|
|
162
|
-
return mathTypes.includes(node.type);
|
|
163
|
-
},
|
|
164
173
|
schema: {
|
|
165
174
|
document: {
|
|
166
175
|
match: [{
|
|
@@ -181,22 +190,23 @@ function MathPlugin(opts) {
|
|
|
181
190
|
log('[renderNode]: data:', props.node.data);
|
|
182
191
|
return /*#__PURE__*/_react["default"].createElement(_mathToolbar.MathPreview, props);
|
|
183
192
|
}
|
|
184
|
-
|
|
185
193
|
/**
|
|
186
194
|
* Here for rendering mathml content
|
|
187
195
|
*/
|
|
196
|
+
|
|
197
|
+
|
|
188
198
|
if (props.node.type === 'mathml') {
|
|
189
|
-
var html = props.node.data.html;
|
|
190
|
-
return /*#__PURE__*/_react["default"].createElement("span",
|
|
191
|
-
contentEditable: false,
|
|
199
|
+
var html = props.node.data.get('html');
|
|
200
|
+
return /*#__PURE__*/_react["default"].createElement("span", (0, _extends2["default"])({}, props.attributes, {
|
|
192
201
|
dangerouslySetInnerHTML: {
|
|
193
202
|
__html: html
|
|
194
203
|
}
|
|
195
|
-
}))
|
|
204
|
+
}));
|
|
196
205
|
}
|
|
197
206
|
}
|
|
198
207
|
};
|
|
199
208
|
}
|
|
209
|
+
|
|
200
210
|
MathPlugin.ROUND_BRACKETS = 'round_brackets';
|
|
201
211
|
MathPlugin.SQUARE_BRACKETS = 'square_brackets';
|
|
202
212
|
MathPlugin.DOLLAR = 'dollar';
|
|
@@ -204,28 +214,30 @@ MathPlugin.DOUBLE_DOLLAR = 'double_dollar';
|
|
|
204
214
|
MathPlugin.mathMlOptions = {};
|
|
205
215
|
MathPlugin.propTypes = {
|
|
206
216
|
attributes: _propTypes["default"].object,
|
|
207
|
-
node:
|
|
217
|
+
node: _slatePropTypes["default"].node
|
|
208
218
|
};
|
|
219
|
+
|
|
209
220
|
var inlineMath = function inlineMath() {
|
|
210
|
-
return {
|
|
221
|
+
return _slate.Inline.create({
|
|
222
|
+
object: 'inline',
|
|
211
223
|
type: 'math',
|
|
224
|
+
isVoid: true,
|
|
212
225
|
data: {
|
|
213
226
|
latex: ''
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
text: ''
|
|
217
|
-
}]
|
|
218
|
-
};
|
|
227
|
+
}
|
|
228
|
+
});
|
|
219
229
|
};
|
|
230
|
+
|
|
220
231
|
exports.inlineMath = inlineMath;
|
|
232
|
+
|
|
221
233
|
var htmlDecode = function htmlDecode(input) {
|
|
222
234
|
var doc = new DOMParser().parseFromString(input, 'text/html');
|
|
223
235
|
return doc.documentElement.textContent;
|
|
224
236
|
};
|
|
237
|
+
|
|
225
238
|
var getTagName = function getTagName(el) {
|
|
226
239
|
return (el && el.tagName || '').toLowerCase();
|
|
227
240
|
};
|
|
228
|
-
|
|
229
241
|
/**
|
|
230
242
|
* Makes sure that strings that contain stuff like:
|
|
231
243
|
* x<y are not transformed into x by the DOMParser because it thinks
|
|
@@ -233,10 +245,11 @@ var getTagName = function getTagName(el) {
|
|
|
233
245
|
* @param input
|
|
234
246
|
* @returns {*}
|
|
235
247
|
*/
|
|
248
|
+
|
|
249
|
+
|
|
236
250
|
var lessThanHandling = function lessThanHandling(input) {
|
|
237
|
-
var arrowSplit = input.split('<');
|
|
251
|
+
var arrowSplit = input.split('<'); // if we don't have at least 2 characters there's no point in checking
|
|
238
252
|
|
|
239
|
-
// if we don't have at least 2 characters there's no point in checking
|
|
240
253
|
if (input.length > 2) {
|
|
241
254
|
return arrowSplit.reduce(function (st, part) {
|
|
242
255
|
/*
|
|
@@ -248,13 +261,16 @@ var lessThanHandling = function lessThanHandling(input) {
|
|
|
248
261
|
if (part.match(/<[a-zA-Z/][\s\S]*>/gi)) {
|
|
249
262
|
return "".concat(st).concat(st ? '<' : '').concat(part);
|
|
250
263
|
}
|
|
264
|
+
|
|
251
265
|
return "".concat(st).concat(st ? '<' : '').concat(part);
|
|
252
266
|
}, '');
|
|
253
267
|
}
|
|
268
|
+
|
|
254
269
|
return input;
|
|
255
270
|
};
|
|
271
|
+
|
|
256
272
|
var serialization = {
|
|
257
|
-
deserialize: function deserialize(el
|
|
273
|
+
deserialize: function deserialize(el) {
|
|
258
274
|
var tagName = getTagName(el);
|
|
259
275
|
/**
|
|
260
276
|
* This is used for when there's a wrapper over the mathml element.
|
|
@@ -263,74 +279,91 @@ var serialization = {
|
|
|
263
279
|
* an inline child and the block is of type block
|
|
264
280
|
* This is for legacy content only since our math rendering is valid for the core slate rules
|
|
265
281
|
*/
|
|
266
|
-
var hasMathChild = _newSerialization.BLOCK_TAGS[tagName] && el.childNodes.length === 1 && getTagName(el.firstChild) === 'math';
|
|
267
|
-
log('[deserialize] name: ', tagName);
|
|
268
282
|
|
|
283
|
+
var hasMathChild = _serialization.BLOCK_TAGS[tagName] && el.childNodes.length === 1 && getTagName(el.firstChild) === 'math';
|
|
284
|
+
log('[deserialize] name: ', tagName);
|
|
269
285
|
/**
|
|
270
286
|
* This is here in order to be able to render mathml content
|
|
271
287
|
*/
|
|
288
|
+
|
|
272
289
|
if (tagName === 'math' || el.dataset && el.dataset.type === 'mathml' || hasMathChild) {
|
|
273
290
|
var newHtml = hasMathChild ? el.innerHTML : el.outerHTML;
|
|
291
|
+
|
|
274
292
|
if (MathPlugin.mathMlOptions.mmlEditing) {
|
|
275
293
|
var htmlToUse = (0, _mathRendering.mmlToLatex)(newHtml);
|
|
276
294
|
var latex = htmlDecode(htmlToUse);
|
|
295
|
+
|
|
277
296
|
var _unWrapMath = (0, _mathRendering.unWrapMath)(latex),
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
297
|
+
unwrapped = _unWrapMath.unwrapped,
|
|
298
|
+
wrapType = _unWrapMath.wrapType;
|
|
299
|
+
|
|
300
|
+
return {
|
|
301
|
+
object: 'inline',
|
|
281
302
|
type: 'math',
|
|
303
|
+
isVoid: true,
|
|
304
|
+
nodes: [],
|
|
282
305
|
data: {
|
|
283
306
|
latex: unwrapped,
|
|
284
307
|
wrapper: wrapType
|
|
285
308
|
}
|
|
286
|
-
}
|
|
309
|
+
};
|
|
287
310
|
}
|
|
288
|
-
|
|
311
|
+
|
|
312
|
+
return {
|
|
313
|
+
object: 'inline',
|
|
314
|
+
isVoid: true,
|
|
289
315
|
type: 'mathml',
|
|
290
316
|
data: {
|
|
291
317
|
html: newHtml
|
|
292
318
|
}
|
|
293
|
-
}
|
|
319
|
+
};
|
|
294
320
|
}
|
|
321
|
+
|
|
295
322
|
if (el.nodeType === TEXT_NODE) {
|
|
296
323
|
return;
|
|
297
324
|
}
|
|
325
|
+
|
|
298
326
|
if (tagName !== 'span') {
|
|
299
327
|
return;
|
|
300
328
|
}
|
|
329
|
+
|
|
301
330
|
var hasLatex = el.hasAttribute('data-latex') || el.hasAttribute('latex');
|
|
331
|
+
|
|
302
332
|
if (hasLatex) {
|
|
303
333
|
var _latex = htmlDecode(el.innerHTML);
|
|
334
|
+
|
|
304
335
|
var _unWrapMath2 = (0, _mathRendering.unWrapMath)(_latex),
|
|
305
|
-
|
|
306
|
-
|
|
336
|
+
_unwrapped = _unWrapMath2.unwrapped,
|
|
337
|
+
_wrapType = _unWrapMath2.wrapType;
|
|
338
|
+
|
|
307
339
|
log('[deserialize]: noBrackets: ', _unwrapped, _wrapType);
|
|
308
|
-
return
|
|
340
|
+
return {
|
|
341
|
+
object: 'inline',
|
|
309
342
|
type: 'math',
|
|
343
|
+
isVoid: true,
|
|
344
|
+
nodes: [],
|
|
310
345
|
data: {
|
|
311
346
|
latex: _unwrapped,
|
|
312
347
|
wrapper: _wrapType
|
|
313
348
|
}
|
|
314
|
-
}
|
|
349
|
+
};
|
|
315
350
|
}
|
|
316
351
|
},
|
|
317
352
|
serialize: function serialize(object) {
|
|
318
353
|
if (object.type === 'math') {
|
|
319
|
-
var
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
354
|
+
var l = object.data.get('latex');
|
|
355
|
+
var wrapper = object.data.get('wrapper');
|
|
356
|
+
log('[serialize] latex: ', l);
|
|
357
|
+
var decoded = htmlDecode(lessThanHandling(l));
|
|
358
|
+
|
|
324
359
|
if (MathPlugin.mathMlOptions.mmlOutput) {
|
|
325
360
|
var res = (0, _mathRendering.renderMath)("<span data-latex=\"\" data-raw=\"".concat(decoded, "\">").concat((0, _mathRendering.wrapMath)(decoded, wrapper), "</span>"));
|
|
326
|
-
var newLatex = (0, _mathRendering.mmlToLatex)(res);
|
|
327
|
-
|
|
328
|
-
// we need to remove all the spaces from the latex to be able to compare it
|
|
329
|
-
var strippedL = latex.replace(/\s/g, '');
|
|
330
|
-
var strippedNewL = newLatex.replace(/\s/g, '');
|
|
361
|
+
var newLatex = (0, _mathRendering.mmlToLatex)(res); // we need to remove all the spaces from the latex to be able to compare it
|
|
331
362
|
|
|
332
|
-
|
|
363
|
+
var strippedL = l.replace(/\s/g, '');
|
|
364
|
+
var strippedNewL = newLatex.replace(/\s/g, ''); // we check if the latex keeps his form after being converted to mathml and back to latex
|
|
333
365
|
// if it does we can safely convert it to mathml
|
|
366
|
+
|
|
334
367
|
if ((0, _isEqual["default"])(strippedL, strippedNewL)) {
|
|
335
368
|
return /*#__PURE__*/_react["default"].createElement("span", {
|
|
336
369
|
"data-type": "mathml",
|
|
@@ -340,22 +373,23 @@ var serialization = {
|
|
|
340
373
|
});
|
|
341
374
|
} else {
|
|
342
375
|
// if it doesn't we keep the latex version
|
|
343
|
-
console.log('This latex can not be safely converted to mathml:',
|
|
344
|
-
console.warn('This latex can not be safely converted to mathml:',
|
|
376
|
+
console.log('This latex can not be safely converted to mathml:', l, 'so we will keep the latex version!!!');
|
|
377
|
+
console.warn('This latex can not be safely converted to mathml:', l, 'so we will keep the latex version!!!');
|
|
345
378
|
}
|
|
346
379
|
}
|
|
380
|
+
|
|
347
381
|
return /*#__PURE__*/_react["default"].createElement("span", {
|
|
348
382
|
"data-latex": "",
|
|
349
383
|
"data-raw": decoded
|
|
350
384
|
}, (0, _mathRendering.wrapMath)(decoded, wrapper));
|
|
351
385
|
}
|
|
352
|
-
|
|
353
386
|
/**
|
|
354
387
|
* Here for rendering mathml content
|
|
355
388
|
*/
|
|
389
|
+
|
|
390
|
+
|
|
356
391
|
if (object.type === 'mathml') {
|
|
357
|
-
var
|
|
358
|
-
html = _ref5.html;
|
|
392
|
+
var html = object.data.get('html');
|
|
359
393
|
return /*#__PURE__*/_react["default"].createElement("span", {
|
|
360
394
|
"data-type": "mathml",
|
|
361
395
|
dangerouslySetInnerHTML: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_slate","_slateReact","_slateHyperscript","_Functions","_mathToolbar","_mathRendering","_debug","_propTypes","_isEqual","_newSerialization","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","log","debug","TEXT_NODE","generateAdditionalKeys","keyData","undefined","map","name","latex","write","label","CustomToolbarComp","React","memo","props","node","nodePath","onFocus","onBlur","onClick","editor","_ref","pluginProps","_ref2","math","_ref3","keypadMode","customKeys","_ref3$controlledKeypa","controlledKeypadMode","onDone","update","data","type","path","properties","newProperties","ReactEditor","focus","Transforms","move","distance","unit","createElement","MathToolbar","autoFocus","additionalKeys","prev","next","_prev$pluginProps","_prev$pluginProps2","_prev$pluginProps2$ma","_prev$pluginProps2$ma2","nodeNext","_next$pluginProps","_next$pluginProps2","_next$pluginProps2$ma","_next$pluginProps2$ma2","keypadModeNext","controlledKeypadModeNext","keypadModeChanged","controlledKeypadModeChanged","equal","isEqual","exports","propTypes","PropTypes","shape","string","children","array","isRequired","value","arrayOf","onToolbarDone","func","mathTypes","MathPlugin","opts","mathMlOptions","mmlOutput","mmlEditing","toolbar","icon","inlineMath","insertNode","rules","isVoid","isInline","element","includes","supports","schema","document","match","pluginStyles","parentNode","p","position","top","renderNode","MathPreview","html","_extends2","attributes","contentEditable","dangerouslySetInnerHTML","__html","ROUND_BRACKETS","SQUARE_BRACKETS","DOLLAR","DOUBLE_DOLLAR","text","htmlDecode","input","doc","DOMParser","parseFromString","documentElement","textContent","getTagName","el","tagName","toLowerCase","lessThanHandling","arrowSplit","split","reduce","st","part","concat","serialization","deserialize","hasMathChild","BLOCK_TAGS","childNodes","firstChild","dataset","newHtml","innerHTML","outerHTML","htmlToUse","mmlToLatex","_unWrapMath","unWrapMath","unwrapped","wrapType","jsx","wrapper","nodeType","hasLatex","hasAttribute","_unWrapMath2","serialize","_ref4","decoded","res","renderMath","wrapMath","newLatex","strippedL","replace","strippedNewL","console","warn","_ref5"],"sources":["../../../src/plugins/math/index.jsx"],"sourcesContent":["import React from 'react';\nimport { Editor, Inline, Transforms } from 'slate';\nimport { ReactEditor } from 'slate-react';\nimport { jsx } from 'slate-hyperscript';\nimport Functions from '@material-ui/icons/Functions';\nimport { MathPreview, MathToolbar } from '@pie-lib/math-toolbar';\nimport { wrapMath, unWrapMath, mmlToLatex, renderMath } from '@pie-lib/math-rendering';\nimport debug from 'debug';\nimport PropTypes from 'prop-types';\nimport isEqual from 'lodash/isEqual';\n\nimport { BLOCK_TAGS } from '../../new-serialization';\nconst log = debug('@pie-lib:editable-html:plugins:math');\n\nconst TEXT_NODE = 3;\n\nfunction generateAdditionalKeys(keyData = []) {\n return keyData.map((key) => ({\n name: key,\n latex: key,\n write: key,\n label: key,\n }));\n}\n\n// eslint-disable-next-line react/display-name\nexport const CustomToolbarComp = React.memo(\n (props) => {\n const { node, nodePath, onFocus, onBlur, onClick, editor } = props;\n const { pluginProps } = props || {};\n const { math } = pluginProps || {};\n const { keypadMode, customKeys, controlledKeypadMode = true } = math || {};\n\n const onDone = (latex) => {\n const update = {\n ...node.data,\n latex\n };\n editor.apply({\n type: 'set_node',\n path: nodePath,\n properties: {\n data: node.data\n },\n newProperties: { data: update }\n });\n ReactEditor.focus(editor);\n Transforms.move(editor, { distance: 1, unit: 'offset' });\n };\n\n const latex = node.data.latex;\n\n return (\n <MathToolbar\n autoFocus\n additionalKeys={generateAdditionalKeys(customKeys)}\n latex={latex}\n onDone={onDone}\n onBlur={onBlur}\n onFocus={onFocus}\n onClick={onClick}\n keypadMode={keypadMode}\n controlledKeypadMode={controlledKeypadMode}\n />\n );\n },\n (prev, next) => {\n const { node, pluginProps: { math: { keypadMode, controlledKeypadMode } = {} } = {} } = prev;\n const {\n node: nodeNext,\n pluginProps: { math: { keypadMode: keypadModeNext, controlledKeypadMode: controlledKeypadModeNext } = {} } = {},\n } = next;\n const keypadModeChanged = keypadMode !== keypadModeNext;\n const controlledKeypadModeChanged = controlledKeypadMode !== controlledKeypadModeNext;\n\n const equal = isEqual(node, nodeNext);\n return equal && !keypadModeChanged && !controlledKeypadModeChanged;\n },\n);\n\nCustomToolbarComp.propTypes = {\n editor: PropTypes.object,\n node: PropTypes.shape({\n type: PropTypes.string,\n children: PropTypes.array,\n data: PropTypes.object\n }).isRequired,\n value: PropTypes.arrayOf(\n PropTypes.shape({\n type: PropTypes.string,\n children: PropTypes.array,\n data: PropTypes.object\n })\n ).isRequired,\n onToolbarDone: PropTypes.func,\n onFocus: PropTypes.func,\n onClick: PropTypes.func,\n onBlur: PropTypes.func,\n};\n\nconst mathTypes = ['math', 'mathml'];\n\nexport default function MathPlugin(opts) {\n MathPlugin.mathMlOptions = {\n mmlOutput: opts.mmlOutput,\n mmlEditing: opts.mmlEditing,\n };\n\n return {\n name: 'math',\n toolbar: {\n icon: <Functions />,\n onClick: editor => {\n log('[insertMath]');\n const math = inlineMath();\n\n editor.insertNode(math);\n },\n /**\n * Return a react component function\n * @param node {Slate.Node}\n * @param value {Slate.Value}\n * @param onDone {(change?: Slate.Change, finishEditing :boolea) => void} - a function to call once the toolbar\n * has made any changes, call with the node.key and a data object.\n */\n CustomToolbarComp,\n },\n rules: editor => {\n const { isVoid, isInline } = editor;\n\n editor.isVoid = element => {\n return mathTypes.includes(element.type) ? true : isVoid(element);\n };\n\n editor.isInline = element => {\n return mathTypes.includes(element.type) ? true : isInline(element);\n };\n\n return editor;\n },\n supports: node => mathTypes.includes(node.type),\n schema: {\n document: { match: [{ type: 'math' }] },\n },\n\n pluginStyles: (node, parentNode, p) => {\n if (p) {\n return {\n position: 'absolute',\n top: 'initial',\n };\n }\n },\n\n renderNode: (props) => {\n if (props.node.type === 'math') {\n log('[renderNode]: data:', props.node.data);\n return <MathPreview {...props} />;\n }\n\n /**\n * Here for rendering mathml content\n */\n if (props.node.type === 'mathml') {\n const { data: { html } } = props.node;\n\n return (\n <span>\n <span {...props.attributes} contentEditable={false} dangerouslySetInnerHTML={{ __html: html }} />\n {props.children}\n </span>\n );\n }\n },\n };\n}\n\nMathPlugin.ROUND_BRACKETS = 'round_brackets';\nMathPlugin.SQUARE_BRACKETS = 'square_brackets';\nMathPlugin.DOLLAR = 'dollar';\nMathPlugin.DOUBLE_DOLLAR = 'double_dollar';\nMathPlugin.mathMlOptions = {};\n\nMathPlugin.propTypes = {\n attributes: PropTypes.object,\n node: PropTypes.node,\n};\n\nexport const inlineMath = () => ({\n type: 'math',\n data: {\n latex: '',\n },\n children: [{ text: '' }],\n});\n\nconst htmlDecode = (input) => {\n const doc = new DOMParser().parseFromString(input, 'text/html');\n\n return doc.documentElement.textContent;\n};\n\nconst getTagName = (el) => {\n return ((el && el.tagName) || '').toLowerCase();\n};\n\n/**\n * Makes sure that strings that contain stuff like:\n * x<y are not transformed into x by the DOMParser because it thinks\n * that <y is the start of a dom element tag\n * @param input\n * @returns {*}\n */\nconst lessThanHandling = (input) => {\n const arrowSplit = input.split('<');\n\n // if we don't have at least 2 characters there's no point in checking\n if (input.length > 2) {\n return arrowSplit.reduce((st, part) => {\n /*\n We check if this element resulted is:\n div - continuation of a beginning of a HTML element\n /div - closing of a HTML tag\n br/> - beginning and closing of a html TAG\n */\n if (part.match(/<[a-zA-Z/][\\s\\S]*>/gi)) {\n return `${st}${st ? '<' : ''}${part}`;\n }\n\n return `${st}${st ? '<' : ''}${part}`;\n }, '');\n }\n\n return input;\n};\n\nexport const serialization = {\n deserialize(el, children) {\n const tagName = getTagName(el);\n /**\n * This is used for when there's a wrapper over the mathml element.\n * Because of this slate rule: \"Only allow block nodes or inline and text nodes in blocks.\"\n * The element that contains only the mathml is removed (along with the math) because it has\n * an inline child and the block is of type block\n * This is for legacy content only since our math rendering is valid for the core slate rules\n */\n const hasMathChild = BLOCK_TAGS[tagName] && el.childNodes.length === 1 && getTagName(el.firstChild) === 'math';\n log('[deserialize] name: ', tagName);\n\n /**\n * This is here in order to be able to render mathml content\n */\n if (tagName === 'math' || (el.dataset && el.dataset.type === 'mathml') || hasMathChild) {\n const newHtml = hasMathChild ? el.innerHTML : el.outerHTML;\n\n if (MathPlugin.mathMlOptions.mmlEditing) {\n const htmlToUse = mmlToLatex(newHtml);\n const latex = htmlDecode(htmlToUse);\n const { unwrapped, wrapType } = unWrapMath(latex);\n\n return jsx('element', {\n type: 'math',\n data: {\n latex: unwrapped,\n wrapper: wrapType,\n },\n });\n }\n\n return jsx('element', {\n type: 'mathml',\n data: {\n html: newHtml,\n },\n });\n }\n\n if (el.nodeType === TEXT_NODE) {\n return;\n }\n\n if (tagName !== 'span') {\n return;\n }\n\n const hasLatex = el.hasAttribute('data-latex') || el.hasAttribute('latex');\n\n if (hasLatex) {\n const latex = htmlDecode(el.innerHTML);\n const { unwrapped, wrapType } = unWrapMath(latex);\n log('[deserialize]: noBrackets: ', unwrapped, wrapType);\n\n return jsx('element', {\n type: 'math',\n data: {\n latex: unwrapped,\n wrapper: wrapType,\n },\n });\n }\n },\n serialize(object) {\n if (object.type === 'math') {\n const { latex, wrapper } = object.data || {};\n log('[serialize] latex: ', latex);\n const decoded = htmlDecode(lessThanHandling(latex));\n\n if (MathPlugin.mathMlOptions.mmlOutput) {\n const res = renderMath(`<span data-latex=\"\" data-raw=\"${decoded}\">${wrapMath(decoded, wrapper)}</span>`);\n const newLatex = mmlToLatex(res);\n\n // we need to remove all the spaces from the latex to be able to compare it\n const strippedL = latex.replace(/\\s/g, '');\n const strippedNewL = newLatex.replace(/\\s/g, '');\n\n // we check if the latex keeps his form after being converted to mathml and back to latex\n // if it does we can safely convert it to mathml\n if (isEqual(strippedL, strippedNewL)) {\n return <span data-type=\"mathml\" dangerouslySetInnerHTML={{ __html: res }} />;\n } else {\n // if it doesn't we keep the latex version\n console.log('This latex can not be safely converted to mathml:', latex, 'so we will keep the latex version!!!');\n console.warn('This latex can not be safely converted to mathml:', latex, 'so we will keep the latex version!!!');\n }\n }\n\n return (\n <span data-latex=\"\" data-raw={decoded}>\n {wrapMath(decoded, wrapper)}\n </span>\n );\n }\n\n /**\n * Here for rendering mathml content\n */\n if (object.type === 'mathml') {\n const { html } = object.data || {};\n\n return <span data-type=\"mathml\" dangerouslySetInnerHTML={{ __html: html }} />;\n }\n },\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/plugins/math/index.jsx"],"names":["log","TEXT_NODE","generateAdditionalKeys","keyData","map","key","name","latex","write","label","CustomToolbarComp","React","memo","props","node","value","onFocus","onBlur","onClick","pluginProps","math","keypadMode","customKeys","controlledKeypadMode","onDone","update","data","toObject","change","setNodeByKey","nextText","document","getNextText","moveFocusTo","moveAnchorTo","onToolbarDone","onChange","onDataChange","get","prev","next","nodeNext","keypadModeNext","controlledKeypadModeNext","keypadModeChanged","controlledKeypadModeChanged","equal","equals","propTypes","SlatePropTypes","isRequired","PropTypes","func","MathPlugin","opts","mathMlOptions","mmlOutput","mmlEditing","toolbar","icon","inlineMath","insertInline","supports","object","type","schema","match","pluginStyles","parentNode","p","position","top","renderNode","html","attributes","__html","ROUND_BRACKETS","SQUARE_BRACKETS","DOLLAR","DOUBLE_DOLLAR","Inline","create","isVoid","htmlDecode","input","doc","DOMParser","parseFromString","documentElement","textContent","getTagName","el","tagName","toLowerCase","lessThanHandling","arrowSplit","split","length","reduce","st","part","serialization","deserialize","hasMathChild","BLOCK_TAGS","childNodes","firstChild","dataset","newHtml","innerHTML","outerHTML","htmlToUse","unwrapped","wrapType","nodes","wrapper","nodeType","hasLatex","hasAttribute","serialize","l","decoded","res","newLatex","strippedL","replace","strippedNewL","console","warn"],"mappings":"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","sourcesContent":["import Functions from '@material-ui/icons/Functions';\nimport { Inline } from 'slate';\nimport { MathPreview, MathToolbar } from '@pie-lib/math-toolbar';\nimport { wrapMath, unWrapMath, mmlToLatex, renderMath } from '@pie-lib/math-rendering';\nimport React from 'react';\nimport debug from 'debug';\nimport SlatePropTypes from 'slate-prop-types';\nimport PropTypes from 'prop-types';\n\nimport { BLOCK_TAGS } from '../../serialization';\nimport isEqual from 'lodash/isEqual';\nconst log = debug('@pie-lib:editable-html:plugins:math');\n\nconst TEXT_NODE = 3;\n\nfunction generateAdditionalKeys(keyData = []) {\n return keyData.map((key) => ({\n name: key,\n latex: key,\n write: key,\n label: key,\n }));\n}\n\n// eslint-disable-next-line react/display-name\nexport const CustomToolbarComp = React.memo(\n (props) => {\n const { node, value, onFocus, onBlur, onClick } = props;\n const { pluginProps } = props || {};\n const { math } = pluginProps || {};\n const { keypadMode, customKeys, controlledKeypadMode = true } = math || {};\n\n const onDone = (latex) => {\n const update = {\n ...node.data.toObject(),\n latex,\n };\n const change = value.change().setNodeByKey(node.key, { data: update });\n\n const nextText = value.document.getNextText(node.key);\n\n change.moveFocusTo(nextText.key, 0).moveAnchorTo(nextText.key, 0);\n\n props.onToolbarDone(change, false);\n };\n\n const onChange = (latex) => {\n const update = {\n ...node.data.toObject(),\n latex,\n };\n const change = value.change().setNodeByKey(node.key, { data: update });\n log('call onToolbarChange:', change);\n props.onDataChange(node.key, update);\n };\n\n const latex = node.data.get('latex');\n\n return (\n <MathToolbar\n autoFocus\n additionalKeys={generateAdditionalKeys(customKeys)}\n latex={latex}\n onChange={onChange}\n onDone={onDone}\n onBlur={onBlur}\n onFocus={onFocus}\n onClick={onClick}\n keypadMode={keypadMode}\n controlledKeypadMode={controlledKeypadMode}\n />\n );\n },\n (prev, next) => {\n const { node, pluginProps: { math: { keypadMode, controlledKeypadMode } = {} } = {} } = prev;\n const {\n node: nodeNext,\n pluginProps: { math: { keypadMode: keypadModeNext, controlledKeypadMode: controlledKeypadModeNext } = {} } = {},\n } = next;\n const keypadModeChanged = keypadMode !== keypadModeNext;\n const controlledKeypadModeChanged = controlledKeypadMode !== controlledKeypadModeNext;\n\n const equal = node.equals(nodeNext);\n return equal && !keypadModeChanged && !controlledKeypadModeChanged;\n },\n);\n\nCustomToolbarComp.propTypes = {\n node: SlatePropTypes.node.isRequired,\n value: SlatePropTypes.value,\n onToolbarDone: PropTypes.func,\n onDataChange: PropTypes.func,\n onFocus: PropTypes.func,\n onClick: PropTypes.func,\n onBlur: PropTypes.func,\n};\n\nexport default function MathPlugin(opts) {\n MathPlugin.mathMlOptions = {\n mmlOutput: opts.mmlOutput,\n mmlEditing: opts.mmlEditing,\n };\n\n return {\n name: 'math',\n toolbar: {\n icon: <Functions />,\n onClick: (value, onChange) => {\n log('[insertMath]');\n const math = inlineMath();\n const change = value.change().insertInline(math);\n onChange(change);\n },\n supports: (node) => node && node.object === 'inline' && node.type === 'math',\n /**\n * Return a react component function\n * @param node {Slate.Node}\n * @param value {Slate.Value}\n * @param onDone {(change?: Slate.Change, finishEditing :boolea) => void} - a function to call once the toolbar\n * has made any changes, call with the node.key and a data object.\n */\n CustomToolbarComp,\n },\n schema: {\n document: { match: [{ type: 'math' }] },\n },\n\n pluginStyles: (node, parentNode, p) => {\n if (p) {\n return {\n position: 'absolute',\n top: 'initial',\n };\n }\n },\n\n renderNode: (props) => {\n if (props.node.type === 'math') {\n log('[renderNode]: data:', props.node.data);\n return <MathPreview {...props} />;\n }\n\n /**\n * Here for rendering mathml content\n */\n if (props.node.type === 'mathml') {\n const html = props.node.data.get('html');\n\n return <span {...props.attributes} dangerouslySetInnerHTML={{ __html: html }} />;\n }\n },\n };\n}\n\nMathPlugin.ROUND_BRACKETS = 'round_brackets';\nMathPlugin.SQUARE_BRACKETS = 'square_brackets';\nMathPlugin.DOLLAR = 'dollar';\nMathPlugin.DOUBLE_DOLLAR = 'double_dollar';\nMathPlugin.mathMlOptions = {};\n\nMathPlugin.propTypes = {\n attributes: PropTypes.object,\n node: SlatePropTypes.node,\n};\n\nexport const inlineMath = () =>\n Inline.create({\n object: 'inline',\n type: 'math',\n isVoid: true,\n data: {\n latex: '',\n },\n });\n\nconst htmlDecode = (input) => {\n const doc = new DOMParser().parseFromString(input, 'text/html');\n\n return doc.documentElement.textContent;\n};\n\nconst getTagName = (el) => {\n return ((el && el.tagName) || '').toLowerCase();\n};\n\n/**\n * Makes sure that strings that contain stuff like:\n * x<y are not transformed into x by the DOMParser because it thinks\n * that <y is the start of a dom element tag\n * @param input\n * @returns {*}\n */\nconst lessThanHandling = (input) => {\n const arrowSplit = input.split('<');\n\n // if we don't have at least 2 characters there's no point in checking\n if (input.length > 2) {\n return arrowSplit.reduce((st, part) => {\n /*\n We check if this element resulted is:\n div - continuation of a beginning of a HTML element\n /div - closing of a HTML tag\n br/> - beginning and closing of a html TAG\n */\n if (part.match(/<[a-zA-Z/][\\s\\S]*>/gi)) {\n return `${st}${st ? '<' : ''}${part}`;\n }\n\n return `${st}${st ? '<' : ''}${part}`;\n }, '');\n }\n\n return input;\n};\n\nexport const serialization = {\n deserialize(el) {\n const tagName = getTagName(el);\n /**\n * This is used for when there's a wrapper over the mathml element.\n * Because of this slate rule: \"Only allow block nodes or inline and text nodes in blocks.\"\n * The element that contains only the mathml is removed (along with the math) because it has\n * an inline child and the block is of type block\n * This is for legacy content only since our math rendering is valid for the core slate rules\n */\n const hasMathChild = BLOCK_TAGS[tagName] && el.childNodes.length === 1 && getTagName(el.firstChild) === 'math';\n log('[deserialize] name: ', tagName);\n\n /**\n * This is here in order to be able to render mathml content\n */\n if (tagName === 'math' || (el.dataset && el.dataset.type === 'mathml') || hasMathChild) {\n const newHtml = hasMathChild ? el.innerHTML : el.outerHTML;\n\n if (MathPlugin.mathMlOptions.mmlEditing) {\n const htmlToUse = mmlToLatex(newHtml);\n const latex = htmlDecode(htmlToUse);\n const { unwrapped, wrapType } = unWrapMath(latex);\n\n return {\n object: 'inline',\n type: 'math',\n isVoid: true,\n nodes: [],\n data: {\n latex: unwrapped,\n wrapper: wrapType,\n },\n };\n }\n\n return {\n object: 'inline',\n isVoid: true,\n type: 'mathml',\n data: {\n html: newHtml,\n },\n };\n }\n\n if (el.nodeType === TEXT_NODE) {\n return;\n }\n\n if (tagName !== 'span') {\n return;\n }\n\n const hasLatex = el.hasAttribute('data-latex') || el.hasAttribute('latex');\n\n if (hasLatex) {\n const latex = htmlDecode(el.innerHTML);\n const { unwrapped, wrapType } = unWrapMath(latex);\n log('[deserialize]: noBrackets: ', unwrapped, wrapType);\n return {\n object: 'inline',\n type: 'math',\n isVoid: true,\n nodes: [],\n data: {\n latex: unwrapped,\n wrapper: wrapType,\n },\n };\n }\n },\n serialize(object) {\n if (object.type === 'math') {\n const l = object.data.get('latex');\n const wrapper = object.data.get('wrapper');\n log('[serialize] latex: ', l);\n const decoded = htmlDecode(lessThanHandling(l));\n\n if (MathPlugin.mathMlOptions.mmlOutput) {\n const res = renderMath(`<span data-latex=\"\" data-raw=\"${decoded}\">${wrapMath(decoded, wrapper)}</span>`);\n const newLatex = mmlToLatex(res);\n\n // we need to remove all the spaces from the latex to be able to compare it\n const strippedL = l.replace(/\\s/g, '');\n const strippedNewL = newLatex.replace(/\\s/g, '');\n\n // we check if the latex keeps his form after being converted to mathml and back to latex\n // if it does we can safely convert it to mathml\n if (isEqual(strippedL, strippedNewL)) {\n return <span data-type=\"mathml\" dangerouslySetInnerHTML={{ __html: res }} />;\n } else {\n // if it doesn't we keep the latex version\n console.log('This latex can not be safely converted to mathml:', l, 'so we will keep the latex version!!!');\n console.warn('This latex can not be safely converted to mathml:', l, 'so we will keep the latex version!!!');\n }\n }\n\n return (\n <span data-latex=\"\" data-raw={decoded}>\n {wrapMath(decoded, wrapper)}\n </span>\n );\n }\n\n /**\n * Here for rendering mathml content\n */\n if (object.type === 'mathml') {\n const html = object.data.get('html');\n\n return <span data-type=\"mathml\" dangerouslySetInnerHTML={{ __html: html }} />;\n }\n },\n};\n"],"file":"index.js"}
|