@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.
Files changed (118) hide show
  1. package/CHANGELOG.json +1 -1
  2. package/CHANGELOG.md +81 -0
  3. package/LICENSE.md +5 -0
  4. package/lib/editor.js +410 -543
  5. package/lib/editor.js.map +1 -1
  6. package/lib/index.js +200 -101
  7. package/lib/index.js.map +1 -1
  8. package/lib/parse-html.js +5 -6
  9. package/lib/parse-html.js.map +1 -1
  10. package/lib/plugins/characters/custom-popper.js +12 -2
  11. package/lib/plugins/characters/custom-popper.js.map +1 -1
  12. package/lib/plugins/characters/index.js +71 -19
  13. package/lib/plugins/characters/index.js.map +1 -1
  14. package/lib/plugins/characters/utils.js.map +1 -1
  15. package/lib/plugins/html/icons/index.js +38 -0
  16. package/lib/plugins/html/icons/index.js.map +1 -0
  17. package/lib/plugins/html/index.js +75 -0
  18. package/lib/plugins/html/index.js.map +1 -0
  19. package/lib/plugins/image/alt-dialog.js +26 -0
  20. package/lib/plugins/image/alt-dialog.js.map +1 -1
  21. package/lib/plugins/image/component.js +124 -90
  22. package/lib/plugins/image/component.js.map +1 -1
  23. package/lib/plugins/image/image-toolbar.js +45 -7
  24. package/lib/plugins/image/image-toolbar.js.map +1 -1
  25. package/lib/plugins/image/index.js +91 -113
  26. package/lib/plugins/image/index.js.map +1 -1
  27. package/lib/plugins/image/insert-image-handler.js +54 -72
  28. package/lib/plugins/image/insert-image-handler.js.map +1 -1
  29. package/lib/plugins/index.js +71 -31
  30. package/lib/plugins/index.js.map +1 -1
  31. package/lib/plugins/list/index.js +129 -58
  32. package/lib/plugins/list/index.js.map +1 -1
  33. package/lib/plugins/math/index.js +152 -118
  34. package/lib/plugins/math/index.js.map +1 -1
  35. package/lib/plugins/media/index.js +185 -168
  36. package/lib/plugins/media/index.js.map +1 -1
  37. package/lib/plugins/media/media-dialog.js +197 -110
  38. package/lib/plugins/media/media-dialog.js.map +1 -1
  39. package/lib/plugins/media/media-toolbar.js +24 -4
  40. package/lib/plugins/media/media-toolbar.js.map +1 -1
  41. package/lib/plugins/media/media-wrapper.js +65 -23
  42. package/lib/plugins/media/media-wrapper.js.map +1 -1
  43. package/lib/plugins/respArea/drag-in-the-blank/choice.js +50 -10
  44. package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +1 -1
  45. package/lib/plugins/respArea/drag-in-the-blank/index.js +22 -9
  46. package/lib/plugins/respArea/drag-in-the-blank/index.js.map +1 -1
  47. package/lib/plugins/respArea/explicit-constructed-response/index.js +9 -4
  48. package/lib/plugins/respArea/explicit-constructed-response/index.js.map +1 -1
  49. package/lib/plugins/respArea/icons/index.js +18 -1
  50. package/lib/plugins/respArea/icons/index.js.map +1 -1
  51. package/lib/plugins/respArea/index.js +133 -122
  52. package/lib/plugins/respArea/index.js.map +1 -1
  53. package/lib/plugins/respArea/inline-dropdown/index.js +10 -4
  54. package/lib/plugins/respArea/inline-dropdown/index.js.map +1 -1
  55. package/lib/plugins/respArea/utils.js +33 -15
  56. package/lib/plugins/respArea/utils.js.map +1 -1
  57. package/lib/plugins/table/icons/index.js +7 -0
  58. package/lib/plugins/table/icons/index.js.map +1 -1
  59. package/lib/plugins/table/index.js +279 -390
  60. package/lib/plugins/table/index.js.map +1 -1
  61. package/lib/plugins/table/table-toolbar.js +47 -14
  62. package/lib/plugins/table/table-toolbar.js.map +1 -1
  63. package/lib/plugins/toolbar/default-toolbar.js +63 -51
  64. package/lib/plugins/toolbar/default-toolbar.js.map +1 -1
  65. package/lib/plugins/toolbar/done-button.js +9 -1
  66. package/lib/plugins/toolbar/done-button.js.map +1 -1
  67. package/lib/plugins/toolbar/editor-and-toolbar.js +140 -83
  68. package/lib/plugins/toolbar/editor-and-toolbar.js.map +1 -1
  69. package/lib/plugins/toolbar/index.js +5 -0
  70. package/lib/plugins/toolbar/index.js.map +1 -1
  71. package/lib/plugins/toolbar/toolbar-buttons.js +39 -8
  72. package/lib/plugins/toolbar/toolbar-buttons.js.map +1 -1
  73. package/lib/plugins/toolbar/toolbar.js +261 -225
  74. package/lib/plugins/toolbar/toolbar.js.map +1 -1
  75. package/lib/plugins/utils.js +16 -19
  76. package/lib/plugins/utils.js.map +1 -1
  77. package/lib/serialization.js +70 -11
  78. package/lib/serialization.js.map +1 -1
  79. package/lib/theme.js.map +1 -1
  80. package/package.json +18 -17
  81. package/src/editor.jsx +139 -434
  82. package/src/index.jsx +96 -62
  83. package/src/plugins/characters/index.jsx +17 -12
  84. package/src/plugins/html/icons/index.jsx +19 -0
  85. package/src/plugins/html/index.jsx +68 -0
  86. package/src/plugins/image/component.jsx +38 -60
  87. package/src/plugins/image/index.jsx +42 -95
  88. package/src/plugins/image/insert-image-handler.js +27 -62
  89. package/src/plugins/index.jsx +39 -21
  90. package/src/plugins/list/index.jsx +90 -62
  91. package/src/plugins/math/index.jsx +70 -93
  92. package/src/plugins/media/index.jsx +117 -146
  93. package/src/plugins/media/media-dialog.js +9 -10
  94. package/src/plugins/media/media-wrapper.jsx +27 -29
  95. package/src/plugins/respArea/drag-in-the-blank/index.jsx +4 -5
  96. package/src/plugins/respArea/explicit-constructed-response/index.jsx +1 -2
  97. package/src/plugins/respArea/index.jsx +84 -114
  98. package/src/plugins/respArea/inline-dropdown/index.jsx +2 -3
  99. package/src/plugins/respArea/utils.jsx +28 -23
  100. package/src/plugins/table/index.jsx +214 -334
  101. package/src/plugins/table/table-toolbar.jsx +4 -3
  102. package/src/plugins/toolbar/default-toolbar.jsx +30 -48
  103. package/src/plugins/toolbar/editor-and-toolbar.jsx +114 -114
  104. package/src/plugins/toolbar/toolbar.jsx +224 -254
  105. package/src/plugins/utils.js +0 -16
  106. package/src/serialization.jsx +1 -1
  107. package/lib/components.js +0 -92
  108. package/lib/components.js.map +0 -1
  109. package/lib/new-serialization.js +0 -280
  110. package/lib/new-serialization.js.map +0 -1
  111. package/lib/plugins/hotKeys/index.js +0 -60
  112. package/lib/plugins/hotKeys/index.js.map +0 -1
  113. package/lib/test-serializer.js +0 -138
  114. package/lib/test-serializer.js.map +0 -1
  115. package/src/components.js +0 -135
  116. package/src/new-serialization.jsx +0 -310
  117. package/src/plugins/hotKeys/index.js +0 -54
  118. 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
- var _react = _interopRequireDefault(require("react"));
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
- var _newSerialization = require("../../new-serialization");
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
- nodePath = props.nodePath,
43
- onFocus = props.onFocus,
44
- onBlur = props.onBlur,
45
- onClick = props.onClick,
46
- editor = props.editor;
58
+ value = props.value,
59
+ onFocus = props.onFocus,
60
+ onBlur = props.onBlur,
61
+ onClick = props.onClick;
62
+
47
63
  var _ref = props || {},
48
- pluginProps = _ref.pluginProps;
64
+ pluginProps = _ref.pluginProps;
65
+
49
66
  var _ref2 = pluginProps || {},
50
- math = _ref2.math;
67
+ math = _ref2.math;
68
+
51
69
  var _ref3 = math || {},
52
- keypadMode = _ref3.keypadMode,
53
- customKeys = _ref3.customKeys,
54
- _ref3$controlledKeypa = _ref3.controlledKeypadMode,
55
- controlledKeypadMode = _ref3$controlledKeypa === void 0 ? true : _ref3$controlledKeypa;
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
- editor.apply({
61
- type: 'set_node',
62
- path: nodePath,
63
- properties: {
64
- data: node.data
65
- },
66
- newProperties: {
67
- data: update
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
- _slateReact.ReactEditor.focus(editor);
71
- _slate.Transforms.move(editor, {
72
- distance: 1,
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
- var latex = node.data.latex;
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
- _prev$pluginProps = prev.pluginProps,
91
- _prev$pluginProps2 = _prev$pluginProps === void 0 ? {} : _prev$pluginProps,
92
- _prev$pluginProps2$ma = _prev$pluginProps2.math,
93
- _prev$pluginProps2$ma2 = _prev$pluginProps2$ma === void 0 ? {} : _prev$pluginProps2$ma,
94
- keypadMode = _prev$pluginProps2$ma2.keypadMode,
95
- controlledKeypadMode = _prev$pluginProps2$ma2.controlledKeypadMode;
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
- _next$pluginProps = next.pluginProps,
98
- _next$pluginProps2 = _next$pluginProps === void 0 ? {} : _next$pluginProps,
99
- _next$pluginProps2$ma = _next$pluginProps2.math,
100
- _next$pluginProps2$ma2 = _next$pluginProps2$ma === void 0 ? {} : _next$pluginProps2$ma,
101
- keypadModeNext = _next$pluginProps2$ma2.keypadMode,
102
- controlledKeypadModeNext = _next$pluginProps2$ma2.controlledKeypadMode;
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 = (0, _isEqual["default"])(node, nodeNext);
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
- editor: _propTypes["default"].object,
111
- node: _propTypes["default"].shape({
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
- var mathTypes = ['math', 'mathml'];
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(editor) {
154
+ onClick: function onClick(value, onChange) {
137
155
  log('[insertMath]');
138
156
  var math = inlineMath();
139
- editor.insertNode(math);
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", null, /*#__PURE__*/_react["default"].createElement("span", (0, _extends2["default"])({}, props.attributes, {
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
- })), props.children);
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: _propTypes["default"].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
- children: [{
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 ? '&lt;' : '').concat(part);
252
266
  }, '');
253
267
  }
268
+
254
269
  return input;
255
270
  };
271
+
256
272
  var serialization = {
257
- deserialize: function deserialize(el, children) {
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
- unwrapped = _unWrapMath.unwrapped,
279
- wrapType = _unWrapMath.wrapType;
280
- return (0, _slateHyperscript.jsx)('element', {
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
- return (0, _slateHyperscript.jsx)('element', {
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
- _unwrapped = _unWrapMath2.unwrapped,
306
- _wrapType = _unWrapMath2.wrapType;
336
+ _unwrapped = _unWrapMath2.unwrapped,
337
+ _wrapType = _unWrapMath2.wrapType;
338
+
307
339
  log('[deserialize]: noBrackets: ', _unwrapped, _wrapType);
308
- return (0, _slateHyperscript.jsx)('element', {
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 _ref4 = object.data || {},
320
- latex = _ref4.latex,
321
- wrapper = _ref4.wrapper;
322
- log('[serialize] latex: ', latex);
323
- var decoded = htmlDecode(lessThanHandling(latex));
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
- // we check if the latex keeps his form after being converted to mathml and back to latex
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:', latex, 'so we will keep the latex version!!!');
344
- console.warn('This latex can not be safely converted to mathml:', latex, 'so we will keep the latex version!!!');
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 _ref5 = object.data || {},
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 ? '&lt;' : ''}${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 ? '&lt;' : ''}${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"}