@pie-lib/editable-html 11.1.1 → 11.2.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. package/CHANGELOG.md +43 -167
  2. package/NEXT.CHANGELOG.json +1 -0
  3. package/lib/block-tags.js +25 -0
  4. package/lib/block-tags.js.map +1 -0
  5. package/lib/constants.js +16 -0
  6. package/lib/constants.js.map +1 -0
  7. package/lib/editor.js +348 -87
  8. package/lib/editor.js.map +1 -1
  9. package/lib/index.js +25 -9
  10. package/lib/index.js.map +1 -1
  11. package/lib/plugins/characters/index.js +8 -3
  12. package/lib/plugins/characters/index.js.map +1 -1
  13. package/lib/plugins/characters/utils.js +12 -12
  14. package/lib/plugins/characters/utils.js.map +1 -1
  15. package/lib/plugins/css/icons/index.js +37 -0
  16. package/lib/plugins/css/icons/index.js.map +1 -0
  17. package/lib/plugins/css/index.js +397 -0
  18. package/lib/plugins/css/index.js.map +1 -0
  19. package/lib/plugins/customPlugin/index.js +114 -0
  20. package/lib/plugins/customPlugin/index.js.map +1 -0
  21. package/lib/plugins/html/index.js +11 -7
  22. package/lib/plugins/html/index.js.map +1 -1
  23. package/lib/plugins/image/index.js +2 -1
  24. package/lib/plugins/image/index.js.map +1 -1
  25. package/lib/plugins/image/insert-image-handler.js +13 -4
  26. package/lib/plugins/image/insert-image-handler.js.map +1 -1
  27. package/lib/plugins/index.js +270 -11
  28. package/lib/plugins/index.js.map +1 -1
  29. package/lib/plugins/list/index.js +130 -0
  30. package/lib/plugins/list/index.js.map +1 -1
  31. package/lib/plugins/math/index.js +91 -56
  32. package/lib/plugins/math/index.js.map +1 -1
  33. package/lib/plugins/media/index.js +5 -2
  34. package/lib/plugins/media/index.js.map +1 -1
  35. package/lib/plugins/media/media-dialog.js +98 -57
  36. package/lib/plugins/media/media-dialog.js.map +1 -1
  37. package/lib/plugins/rendering/index.js +46 -0
  38. package/lib/plugins/rendering/index.js.map +1 -0
  39. package/lib/plugins/respArea/drag-in-the-blank/choice.js +5 -2
  40. package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +1 -1
  41. package/lib/plugins/respArea/explicit-constructed-response/index.js +11 -9
  42. package/lib/plugins/respArea/explicit-constructed-response/index.js.map +1 -1
  43. package/lib/plugins/respArea/index.js +69 -21
  44. package/lib/plugins/respArea/index.js.map +1 -1
  45. package/lib/plugins/respArea/inline-dropdown/index.js +10 -5
  46. package/lib/plugins/respArea/inline-dropdown/index.js.map +1 -1
  47. package/lib/plugins/respArea/math-templated/index.js +130 -0
  48. package/lib/plugins/respArea/math-templated/index.js.map +1 -0
  49. package/lib/plugins/respArea/utils.js +16 -1
  50. package/lib/plugins/respArea/utils.js.map +1 -1
  51. package/lib/plugins/table/CustomTablePlugin.js +133 -0
  52. package/lib/plugins/table/CustomTablePlugin.js.map +1 -0
  53. package/lib/plugins/table/index.js +43 -59
  54. package/lib/plugins/table/index.js.map +1 -1
  55. package/lib/plugins/table/table-toolbar.js +33 -4
  56. package/lib/plugins/table/table-toolbar.js.map +1 -1
  57. package/lib/plugins/textAlign/icons/index.js +226 -0
  58. package/lib/plugins/textAlign/icons/index.js.map +1 -0
  59. package/lib/plugins/textAlign/index.js +34 -0
  60. package/lib/plugins/textAlign/index.js.map +1 -0
  61. package/lib/plugins/toolbar/default-toolbar.js +82 -27
  62. package/lib/plugins/toolbar/default-toolbar.js.map +1 -1
  63. package/lib/plugins/toolbar/done-button.js +5 -2
  64. package/lib/plugins/toolbar/done-button.js.map +1 -1
  65. package/lib/plugins/toolbar/editor-and-toolbar.js +18 -19
  66. package/lib/plugins/toolbar/editor-and-toolbar.js.map +1 -1
  67. package/lib/plugins/toolbar/toolbar-buttons.js +44 -11
  68. package/lib/plugins/toolbar/toolbar-buttons.js.map +1 -1
  69. package/lib/plugins/toolbar/toolbar.js +35 -11
  70. package/lib/plugins/toolbar/toolbar.js.map +1 -1
  71. package/lib/serialization.js +233 -44
  72. package/lib/serialization.js.map +1 -1
  73. package/package.json +11 -6
  74. package/src/__tests__/editor.test.jsx +363 -0
  75. package/src/__tests__/serialization.test.js +291 -0
  76. package/src/__tests__/utils.js +36 -0
  77. package/src/block-tags.js +17 -0
  78. package/src/constants.js +7 -0
  79. package/src/editor.jsx +303 -49
  80. package/src/index.jsx +19 -10
  81. package/src/plugins/characters/index.jsx +11 -3
  82. package/src/plugins/characters/utils.js +12 -12
  83. package/src/plugins/css/icons/index.jsx +17 -0
  84. package/src/plugins/css/index.jsx +346 -0
  85. package/src/plugins/customPlugin/index.jsx +85 -0
  86. package/src/plugins/html/index.jsx +9 -6
  87. package/src/plugins/image/__tests__/__snapshots__/component.test.jsx.snap +51 -0
  88. package/src/plugins/image/__tests__/__snapshots__/image-toolbar-logic.test.jsx.snap +27 -0
  89. package/src/plugins/image/__tests__/__snapshots__/image-toolbar.test.jsx.snap +44 -0
  90. package/src/plugins/image/__tests__/component.test.jsx +41 -0
  91. package/src/plugins/image/__tests__/image-toolbar-logic.test.jsx +42 -0
  92. package/src/plugins/image/__tests__/image-toolbar.test.jsx +11 -0
  93. package/src/plugins/image/__tests__/index.test.js +95 -0
  94. package/src/plugins/image/__tests__/insert-image-handler.test.js +113 -0
  95. package/src/plugins/image/__tests__/mock-change.js +15 -0
  96. package/src/plugins/image/index.jsx +2 -1
  97. package/src/plugins/image/insert-image-handler.js +13 -6
  98. package/src/plugins/index.jsx +248 -5
  99. package/src/plugins/list/__tests__/index.test.js +54 -0
  100. package/src/plugins/list/index.jsx +130 -0
  101. package/src/plugins/math/__tests__/__snapshots__/index.test.jsx.snap +48 -0
  102. package/src/plugins/math/__tests__/index.test.jsx +245 -0
  103. package/src/plugins/math/index.jsx +87 -56
  104. package/src/plugins/media/__tests__/index.test.js +75 -0
  105. package/src/plugins/media/index.jsx +3 -2
  106. package/src/plugins/media/media-dialog.js +106 -57
  107. package/src/plugins/rendering/index.js +31 -0
  108. package/src/plugins/respArea/drag-in-the-blank/choice.jsx +4 -1
  109. package/src/plugins/respArea/explicit-constructed-response/index.jsx +10 -8
  110. package/src/plugins/respArea/index.jsx +53 -7
  111. package/src/plugins/respArea/inline-dropdown/index.jsx +13 -6
  112. package/src/plugins/respArea/math-templated/index.jsx +104 -0
  113. package/src/plugins/respArea/utils.jsx +11 -0
  114. package/src/plugins/table/CustomTablePlugin.js +113 -0
  115. package/src/plugins/table/__tests__/__snapshots__/table-toolbar.test.jsx.snap +44 -0
  116. package/src/plugins/table/__tests__/index.test.jsx +401 -0
  117. package/src/plugins/table/__tests__/table-toolbar.test.jsx +42 -0
  118. package/src/plugins/table/index.jsx +46 -59
  119. package/src/plugins/table/table-toolbar.jsx +39 -2
  120. package/src/plugins/textAlign/icons/index.jsx +139 -0
  121. package/src/plugins/textAlign/index.jsx +23 -0
  122. package/src/plugins/toolbar/__tests__/__snapshots__/default-toolbar.test.jsx.snap +923 -0
  123. package/src/plugins/toolbar/__tests__/__snapshots__/editor-and-toolbar.test.jsx.snap +20 -0
  124. package/src/plugins/toolbar/__tests__/__snapshots__/toolbar-buttons.test.jsx.snap +36 -0
  125. package/src/plugins/toolbar/__tests__/__snapshots__/toolbar.test.jsx.snap +46 -0
  126. package/src/plugins/toolbar/__tests__/default-toolbar.test.jsx +94 -0
  127. package/src/plugins/toolbar/__tests__/editor-and-toolbar.test.jsx +37 -0
  128. package/src/plugins/toolbar/__tests__/toolbar-buttons.test.jsx +51 -0
  129. package/src/plugins/toolbar/__tests__/toolbar.test.jsx +106 -0
  130. package/src/plugins/toolbar/default-toolbar.jsx +82 -20
  131. package/src/plugins/toolbar/done-button.jsx +3 -1
  132. package/src/plugins/toolbar/editor-and-toolbar.jsx +18 -13
  133. package/src/plugins/toolbar/toolbar-buttons.jsx +52 -11
  134. package/src/plugins/toolbar/toolbar.jsx +31 -8
  135. package/src/serialization.jsx +213 -38
  136. package/README.md +0 -45
  137. package/deploy.sh +0 -16
  138. package/playground/image/data.js +0 -59
  139. package/playground/image/index.html +0 -22
  140. package/playground/image/index.jsx +0 -81
  141. package/playground/index.html +0 -25
  142. package/playground/mathquill/index.html +0 -22
  143. package/playground/mathquill/index.jsx +0 -155
  144. package/playground/package.json +0 -15
  145. package/playground/prod-test/index.html +0 -22
  146. package/playground/prod-test/index.jsx +0 -28
  147. package/playground/schema-override/data.js +0 -29
  148. package/playground/schema-override/image-plugin.jsx +0 -41
  149. package/playground/schema-override/index.html +0 -21
  150. package/playground/schema-override/index.jsx +0 -97
  151. package/playground/serialization/data.js +0 -29
  152. package/playground/serialization/image-plugin.jsx +0 -41
  153. package/playground/serialization/index.html +0 -22
  154. package/playground/serialization/index.jsx +0 -12
  155. package/playground/static.json +0 -3
  156. package/playground/table-examples.html +0 -70
  157. package/playground/webpack.config.js +0 -42
  158. package/static.json +0 -1
@@ -5,7 +5,9 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.valueToHtml = exports.reduceMultipleBrs = exports.reactAttributes = exports.parseStyleString = exports.htmlToValue = exports.getBase64 = exports.TEXT_RULE = exports.BLOCK_TAGS = void 0;
8
+ exports.valueToHtml = exports.reduceMultipleBrs = exports.reactAttributes = exports.parseStyleString = exports.htmlToValue = exports.handleHtml = exports.getBase64 = exports.extraCSSRulesOpts = exports.TEXT_RULE = exports.INLINE_TAGS = void 0;
9
+
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
11
 
10
12
  var _slateHtmlSerializer = _interopRequireDefault(require("slate-html-serializer"));
11
13
 
@@ -15,6 +17,8 @@ var _debug = _interopRequireDefault(require("debug"));
15
17
 
16
18
  var _toStyle = require("to-style");
17
19
 
20
+ var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
21
+
18
22
  var _image = require("./plugins/image");
19
23
 
20
24
  var _math = require("./plugins/math");
@@ -29,40 +33,30 @@ var _respArea = require("./plugins/respArea");
29
33
 
30
34
  var _slate = require("slate");
31
35
 
32
- var log = (0, _debug["default"])('@pie-lib:editable-html:serialization');
33
- /**
34
- * Tags to blocks.
35
- *
36
- * @type {Object}
37
- */
36
+ var _blockTags = require("./block-tags");
38
37
 
39
- var BLOCK_TAGS = {
40
- div: 'div',
41
- span: 'span',
42
- p: 'paragraph',
43
- blockquote: 'quote',
44
- pre: 'code',
45
- h1: 'heading-one',
46
- h2: 'heading-two',
47
- h3: 'heading-three',
48
- h4: 'heading-four',
49
- h5: 'heading-five',
50
- h6: 'heading-six'
51
- };
38
+ 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; }
39
+
40
+ 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; }
41
+
42
+ var log = (0, _debug["default"])('@pie-lib:editable-html:serialization');
52
43
  /**
53
44
  * Tags to marks.
54
45
  *
55
46
  * @type {Object}
56
47
  */
57
48
 
58
- exports.BLOCK_TAGS = BLOCK_TAGS;
59
49
  var MARK_TAGS = {
60
50
  b: 'bold',
61
51
  em: 'italic',
62
52
  u: 'underline',
63
53
  s: 'strikethrough',
64
54
  code: 'code',
65
- strong: 'bold'
55
+ strong: 'bold',
56
+ blockquote: 'blockquote',
57
+ h3: 'h3',
58
+ sup: 'sup',
59
+ sub: 'sub'
66
60
  };
67
61
 
68
62
  var parseStyleString = function parseStyleString(s) {
@@ -123,7 +117,7 @@ var attributesToMap = function attributesToMap(el) {
123
117
  };
124
118
  };
125
119
 
126
- var attributes = ['border', 'cellpadding', 'cellspacing', 'class', 'style'];
120
+ var attributes = ['border', 'cellpadding', 'cellspacing', 'class', 'style', 'align'];
127
121
  /**
128
122
  * Serializer rules.
129
123
  *
@@ -133,7 +127,9 @@ var attributes = ['border', 'cellpadding', 'cellspacing', 'class', 'style'];
133
127
  var blocks = {
134
128
  deserialize: function deserialize(el, next) {
135
129
  log('[blocks:deserialize] block: ', el);
136
- var block = BLOCK_TAGS[el.tagName.toLowerCase()];
130
+
131
+ var block = _blockTags.BLOCK_TAGS[el.tagName.toLowerCase()];
132
+
137
133
  if (!block) return;
138
134
  log('[blocks:deserialize] block: ', block);
139
135
 
@@ -165,31 +161,138 @@ var blocks = {
165
161
  log('[blocks:serialize] object: ', object, children);
166
162
  var key;
167
163
 
168
- for (key in BLOCK_TAGS) {
169
- if (BLOCK_TAGS[key] === object.type) {
164
+ for (key in _blockTags.BLOCK_TAGS) {
165
+ if (_blockTags.BLOCK_TAGS[key] === object.type) {
166
+ var Tag = key;
167
+ return /*#__PURE__*/_react["default"].createElement(Tag, jsonData.attributes, children);
168
+ }
169
+ }
170
+ }
171
+ };
172
+ var INLINE_TAGS = {
173
+ span: 'span'
174
+ };
175
+ exports.INLINE_TAGS = INLINE_TAGS;
176
+ var inlines = {
177
+ deserialize: function deserialize(el, next) {
178
+ log('[inlines:deserialize] inline: ', el);
179
+ var inlineTag = INLINE_TAGS[el.tagName.toLowerCase()];
180
+ if (!inlineTag) return;
181
+ log('[inlines:deserialize] inline: ', inlineTag);
182
+
183
+ if (el.childNodes.length === 1) {
184
+ var cn = el.childNodes[0];
185
+
186
+ if (cn && cn.tagName && cn.tagName.toLowerCase() === inlineTag) {
187
+ log('[we have a child node of the same]...');
188
+ return;
189
+ }
190
+ }
191
+
192
+ return {
193
+ object: 'inline',
194
+ type: inlineTag,
195
+
196
+ /**
197
+ * Here for rendering styles for all inline elements
198
+ */
199
+ data: {
200
+ attributes: attributes.reduce(attributesToMap(el), {})
201
+ },
202
+ nodes: next(el.childNodes)
203
+ };
204
+ },
205
+ serialize: function serialize(object, children) {
206
+ if (object.object !== 'inline') return;
207
+ var jsonData = object.data.toJSON();
208
+ log('[inlines:serialize] object: ', object, children);
209
+ var key;
210
+
211
+ for (key in INLINE_TAGS) {
212
+ if (INLINE_TAGS[key] === object.type) {
170
213
  var Tag = key;
171
214
  return /*#__PURE__*/_react["default"].createElement(Tag, jsonData.attributes, children);
172
215
  }
173
216
  }
174
217
  }
175
218
  };
219
+ var extraCSSRulesOpts = {};
220
+ exports.extraCSSRulesOpts = extraCSSRulesOpts;
221
+ var STYLES_MAP = {
222
+ h3: {
223
+ fontSize: 'inherit',
224
+ fontWeight: 'inherit'
225
+ },
226
+ blockquote: {
227
+ background: '#f9f9f9',
228
+ borderLeft: '5px solid #ccc',
229
+ margin: '1.5em 10px',
230
+ padding: '.5em 10px'
231
+ }
232
+ };
233
+ var reactToHTMLAttributesMap = {
234
+ "class": 'className'
235
+ };
176
236
  var marks = {
177
237
  deserialize: function deserialize(el, next) {
178
238
  var mark = MARK_TAGS[el.tagName.toLowerCase()];
179
- if (!mark) return;
239
+ var elClasses = el.getAttribute('class') || '';
240
+ var hasCSSRule = ((extraCSSRulesOpts === null || extraCSSRulesOpts === void 0 ? void 0 : extraCSSRulesOpts.names) || []).find(function (name) {
241
+ return elClasses === null || elClasses === void 0 ? void 0 : elClasses.includes(name);
242
+ });
243
+
244
+ if (!mark && !hasCSSRule) {
245
+ return;
246
+ }
247
+
180
248
  log('[deserialize] mark: ', mark);
249
+ var attrs = attributes.reduce(attributesToMap(el), {});
250
+ var data = (0, _isEmpty["default"])(attrs) ? undefined : {
251
+ attributes: attrs
252
+ };
181
253
  return {
182
254
  object: 'mark',
183
- type: mark,
255
+ type: hasCSSRule ? 'css' : mark,
256
+
257
+ /**
258
+ * Here for rendering styles for all elements
259
+ */
260
+ data: data,
184
261
  nodes: next(el.childNodes)
185
262
  };
186
263
  },
187
264
  serialize: function serialize(object, children) {
265
+ var _object$data, _jsonData$attributes;
266
+
267
+ var jsonData = ((_object$data = object.data) === null || _object$data === void 0 ? void 0 : _object$data.toJSON()) || {};
268
+ var elClasses = ((_jsonData$attributes = jsonData.attributes) === null || _jsonData$attributes === void 0 ? void 0 : _jsonData$attributes["class"]) || '';
269
+ var hasCSSRule = ((extraCSSRulesOpts === null || extraCSSRulesOpts === void 0 ? void 0 : extraCSSRulesOpts.names) || []).find(function (name) {
270
+ return elClasses === null || elClasses === void 0 ? void 0 : elClasses.includes(name);
271
+ });
272
+
273
+ if (hasCSSRule) {
274
+ var htmlAttrs = Object.keys(jsonData.attributes).reduce(function (obj, key) {
275
+ obj[reactToHTMLAttributesMap[key] || key] = jsonData.attributes[key];
276
+ return obj;
277
+ }, {});
278
+ return /*#__PURE__*/_react["default"].createElement("span", htmlAttrs, children);
279
+ }
280
+
188
281
  if (_slate.Mark.isMark(object)) {
189
282
  for (var key in MARK_TAGS) {
190
283
  if (MARK_TAGS[key] === object.type) {
191
284
  var Tag = key;
192
- return /*#__PURE__*/_react["default"].createElement(Tag, null, children);
285
+ var additionalStyles = STYLES_MAP[Tag];
286
+
287
+ if (additionalStyles) {
288
+ if (!jsonData.attributes) {
289
+ jsonData.attributes = {};
290
+ }
291
+
292
+ jsonData.attributes.style = _objectSpread(_objectSpread({}, jsonData.attributes.style), additionalStyles);
293
+ }
294
+
295
+ return /*#__PURE__*/_react["default"].createElement(Tag, jsonData.attributes, children);
193
296
  }
194
297
  }
195
298
  }
@@ -248,7 +351,7 @@ var TEXT_RULE = {
248
351
  }
249
352
  };
250
353
  exports.TEXT_RULE = TEXT_RULE;
251
- var RULES = [_list.serialization, _math.serialization, _media.serialization, _image.serialization, _table.serialization, _respArea.serialization, TEXT_RULE, blocks, marks];
354
+ var RULES = [_list.serialization, _math.serialization, _media.serialization, _image.serialization, _table.serialization, _respArea.serialization, TEXT_RULE, inlines, blocks, marks];
252
355
 
253
356
  function allWhitespace(node) {
254
357
  // Use ECMA-262 Edition 3 String and RegExp features
@@ -266,7 +369,12 @@ function defaultParseHtml(html) {
266
369
  var n = textNodes.nextNode();
267
370
 
268
371
  while (n) {
269
- if (allWhitespace(n) || n.nodeValue === "\u200B") {
372
+ var _n$nextSibling, _n$nextSibling$tagNam, _n$previousSibling, _n$previousSibling$ta;
373
+
374
+ var isWhiteSpace = allWhitespace(n);
375
+ var isNotNearMarkup = !MARK_TAGS[(_n$nextSibling = n.nextSibling) === null || _n$nextSibling === void 0 ? void 0 : (_n$nextSibling$tagNam = _n$nextSibling.tagName) === null || _n$nextSibling$tagNam === void 0 ? void 0 : _n$nextSibling$tagNam.toLowerCase()] && !MARK_TAGS[(_n$previousSibling = n.previousSibling) === null || _n$previousSibling === void 0 ? void 0 : (_n$previousSibling$ta = _n$previousSibling.tagName) === null || _n$previousSibling$ta === void 0 ? void 0 : _n$previousSibling$ta.toLowerCase()];
376
+
377
+ if (isWhiteSpace && isNotNearMarkup || n.nodeValue === "\u200B") {
270
378
  n.parentNode.removeChild(n);
271
379
  }
272
380
 
@@ -424,45 +532,126 @@ var reduceRedundantNewLineCharacters = function reduceRedundantNewLineCharacters
424
532
 
425
533
  return markup;
426
534
  };
535
+ /**
536
+ * Makes sure that the html provided respects the schema
537
+ * rules for the slate editor.
538
+ * @param markup
539
+ * @returns {string}
540
+ */
541
+
427
542
 
428
- var wrapHtmlProperly = function wrapHtmlProperly(markup) {
429
- var el = document.createElement('div');
430
- el.innerHTML = markup;
543
+ var fixHtmlCode = function fixHtmlCode(markup) {
544
+ var wrapperEl = document.createElement('div');
545
+ wrapperEl.innerHTML = markup;
431
546
  /**
432
547
  * DIV elements that are at the same level as paragraphs
433
548
  * are replaced with P elements for normalizing purposes
434
- * @param el
549
+ * @param child
550
+ */
551
+
552
+ var fixParagraphs = function fixParagraphs(child) {
553
+ var p = document.createElement('p');
554
+ p.innerHTML = child.innerHTML;
555
+ Array.from(child.attributes).forEach(function (attr) {
556
+ p.setAttribute(attr.name, attr.value);
557
+ });
558
+ child.replaceWith(p);
559
+ };
560
+ /**
561
+ * @summary Makes sure that tables are placed in the root document.
562
+ * @description This function removes the tables from the nodes that are
563
+ * placed inside the root element and places them exactly near
564
+ * the parent element.
565
+ * @param tableArray
435
566
  */
436
567
 
568
+
569
+ var fixTables = function fixTables(tableArray) {
570
+ tableArray.forEach(function (el) {
571
+ var index = el.index,
572
+ child = el.child,
573
+ parent = el.parent;
574
+ var nodesBefore = [];
575
+ var nodesAfter = [];
576
+ var allNodes = Array.from(parent.childNodes);
577
+ var i;
578
+
579
+ for (i = 0; i < allNodes.length; i++) {
580
+ var node = allNodes[i];
581
+
582
+ if (i < index) {
583
+ nodesBefore.push(node);
584
+ } else if (i > index) {
585
+ nodesAfter.push(node);
586
+ }
587
+ } // creating the element that is going to be placed instead of the parent
588
+
589
+
590
+ var beforeEl = document.createElement(parent.nodeName);
591
+ beforeEl.append.apply(beforeEl, nodesBefore); // replacing parent with the beforeElement
592
+
593
+ parent.replaceWith(beforeEl); // adding the table right after the before element
594
+
595
+ beforeEl.after(child); // creating the element that is going to be placed after the table
596
+
597
+ var afterEl = document.createElement(parent.nodeName);
598
+ afterEl.append.apply(afterEl, nodesAfter); // adding the after element near the table
599
+
600
+ child.after(afterEl);
601
+ });
602
+ };
603
+
604
+ var emptyBlockCheck = function emptyBlockCheck(node) {
605
+ return (node.nodeName === 'DIV' || node.nodeName === 'P' || node.nodeName === 'LI') && node.childNodes.length === 0;
606
+ };
607
+
437
608
  var parseNode = function parseNode(el) {
438
- var childArray = Array.from(el.children);
609
+ var childArray = Array.from(el.childNodes);
439
610
  var hasParagraphs = childArray.find(function (child) {
440
611
  return child.nodeName === 'P';
441
612
  });
442
- childArray.forEach(function (child) {
613
+ var tables = [];
614
+ childArray.forEach(function (child, index) {
443
615
  // removing empty blocks
444
- if ((child.nodeName === 'DIV' || child.nodeName === 'P') && child.childNodes.length === 0) {
616
+ if (emptyBlockCheck(child)) {
445
617
  child.remove();
446
618
  return;
447
619
  }
448
620
 
449
621
  if (hasParagraphs && child.nodeName === 'DIV') {
450
- var p = document.createElement('p');
451
- p.innerHTML = child.innerHTML;
452
- child.replaceWith(p);
622
+ fixParagraphs(child);
623
+ }
624
+
625
+ if (wrapperEl !== el && child.nodeName === 'TABLE') {
626
+ // we don't need to fix tables in the root element
627
+ tables.push({
628
+ index: index,
629
+ child: child,
630
+ parent: el
631
+ });
453
632
  }
454
633
 
455
634
  parseNode(child);
456
635
  });
636
+
637
+ if (tables.length) {
638
+ fixTables(tables);
639
+ }
457
640
  };
458
641
 
459
- parseNode(el);
460
- return el.innerHTML;
642
+ parseNode(wrapperEl);
643
+ return wrapperEl.innerHTML;
461
644
  };
462
645
 
646
+ var handleHtml = function handleHtml(html) {
647
+ return fixHtmlCode(reduceRedundantNewLineCharacters(reduceMultipleBrs(html)));
648
+ };
649
+
650
+ exports.handleHtml = handleHtml;
651
+
463
652
  var htmlToValue = function htmlToValue(html) {
464
653
  try {
465
- return serializer.deserialize(wrapHtmlProperly(reduceRedundantNewLineCharacters(reduceMultipleBrs(html))));
654
+ return serializer.deserialize(handleHtml(html));
466
655
  } catch (e) {
467
656
  // eslint-disable-next-line no-console
468
657
  console.log("Couldn't parse html: ", e);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/serialization.jsx"],"names":["log","BLOCK_TAGS","div","span","p","blockquote","pre","h1","h2","h3","h4","h5","h6","MARK_TAGS","b","em","u","s","code","strong","parseStyleString","regex","match","result","exec","trim","getBase64","file","Promise","resolve","reject","reader","FileReader","readAsDataURL","onload","onerror","error","reactAttributes","o","camelize","addUnits","attributesToMap","el","acc","attribute","value","getAttribute","styleString","reactStyleObject","attributes","blocks","deserialize","next","block","tagName","toLowerCase","childNodes","length","cn","object","type","data","reduce","nodes","serialize","children","jsonData","toJSON","key","Tag","marks","mark","Mark","isMark","findPreviousText","nodeName","previousSibling","TEXT_RULE","normalize","leaves","text","nodeValue","obj","split","array","i","push","RULES","listSerialization","mathSerialization","mediaSerialization","imgSerialization","tableSerialization","responseAreaSerialization","allWhitespace","node","test","textContent","defaultParseHtml","html","DOMParser","Error","parsed","parseFromString","body","textNodes","document","createTreeWalker","NodeFilter","SHOW_TEXT","n","nextNode","parentNode","removeChild","parseHtml","window","serializer","Html","defaultBlock","rules","_extends","Object","assign","target","arguments","source","prototype","hasOwnProperty","call","options","undefined","_options$toJSON","fragment","Array","from","deserializeElements","memo","original","_block","isVoid","json","schema","ret","Value","fromJSON","reduceMultipleBrs","markup","replace","e","console","reduceRedundantNewLineCharacters","wrapHtmlProperly","createElement","innerHTML","parseNode","childArray","hasParagraphs","find","child","forEach","remove","replaceWith","htmlToValue","valueToHtml"],"mappings":"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","sourcesContent":["import Html from 'slate-html-serializer';\nimport React from 'react';\nimport debug from 'debug';\nimport { object as toStyleObject } from 'to-style';\n\nimport { serialization as imgSerialization } from './plugins/image';\nimport { serialization as mathSerialization } from './plugins/math';\nimport { serialization as mediaSerialization } from './plugins/media';\nimport { serialization as listSerialization } from './plugins/list';\nimport { serialization as tableSerialization } from './plugins/table';\nimport { serialization as responseAreaSerialization } from './plugins/respArea';\nimport { Mark, Value } from 'slate';\n\nconst log = debug('@pie-lib:editable-html:serialization');\n\n/**\n * Tags to blocks.\n *\n * @type {Object}\n */\n\nexport const BLOCK_TAGS = {\n div: 'div',\n span: 'span',\n p: 'paragraph',\n blockquote: 'quote',\n pre: 'code',\n h1: 'heading-one',\n h2: 'heading-two',\n h3: 'heading-three',\n h4: 'heading-four',\n h5: 'heading-five',\n h6: 'heading-six',\n};\n\n/**\n * Tags to marks.\n *\n * @type {Object}\n */\n\nconst MARK_TAGS = {\n b: 'bold',\n em: 'italic',\n u: 'underline',\n s: 'strikethrough',\n code: 'code',\n strong: 'bold',\n};\n\nexport const parseStyleString = (s) => {\n const regex = /([\\w-]*)\\s*:\\s*([^;]*)/g;\n let match;\n const result = {};\n while ((match = regex.exec(s))) {\n result[match[1]] = match[2].trim();\n }\n return result;\n};\n\nexport const getBase64 = (file) => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => resolve(reader.result);\n reader.onerror = (error) => reject(error);\n });\n};\n\nexport const reactAttributes = (o) => toStyleObject(o, { camelize: true, addUnits: false });\n\nconst attributesToMap = (el) => (acc, attribute) => {\n const value = el.getAttribute(attribute);\n if (value) {\n if (attribute === 'style') {\n const styleString = el.getAttribute(attribute);\n const reactStyleObject = reactAttributes(parseStyleString(styleString));\n acc['style'] = reactStyleObject;\n } else {\n acc[attribute] = el.getAttribute(attribute);\n }\n }\n return acc;\n};\n\nconst attributes = ['border', 'cellpadding', 'cellspacing', 'class', 'style'];\n\n/**\n * Serializer rules.\n *\n * @type {Array}\n */\n\nconst blocks = {\n deserialize(el, next) {\n log('[blocks:deserialize] block: ', el);\n const block = BLOCK_TAGS[el.tagName.toLowerCase()];\n if (!block) return;\n log('[blocks:deserialize] block: ', block);\n\n if (el.childNodes.length === 1) {\n const cn = el.childNodes[0];\n if (cn && cn.tagName && cn.tagName.toLowerCase() === block) {\n log('[we have a child node of the same]...');\n return;\n }\n }\n\n return {\n object: 'block',\n type: block,\n /**\n * Here for rendering styles for all block elements\n */\n data: { attributes: attributes.reduce(attributesToMap(el), {}) },\n nodes: next(el.childNodes),\n };\n },\n serialize: (object, children) => {\n if (object.object !== 'block') return;\n\n const jsonData = object.data.toJSON();\n\n log('[blocks:serialize] object: ', object, children);\n let key;\n\n for (key in BLOCK_TAGS) {\n if (BLOCK_TAGS[key] === object.type) {\n const Tag = key;\n\n return <Tag {...jsonData.attributes}>{children}</Tag>;\n }\n }\n },\n};\n\nconst marks = {\n deserialize(el, next) {\n const mark = MARK_TAGS[el.tagName.toLowerCase()];\n if (!mark) return;\n log('[deserialize] mark: ', mark);\n return {\n object: 'mark',\n type: mark,\n nodes: next(el.childNodes),\n };\n },\n serialize(object, children) {\n if (Mark.isMark(object)) {\n for (var key in MARK_TAGS) {\n if (MARK_TAGS[key] === object.type) {\n const Tag = key;\n return <Tag>{children}</Tag>;\n }\n }\n }\n },\n};\n\n// eslint-disable-next-line no-unused-vars\nconst findPreviousText = (el) => {\n if (el.nodeName === '#text') {\n return el;\n }\n\n if (el.previousSibling) {\n return findPreviousText(el.previousSibling);\n }\n\n return null;\n};\n\nexport const TEXT_RULE = {\n deserialize(el) {\n /**\n * This needs to be called on the dom element in order to merge the adjacent text nodes together\n * */\n el.normalize();\n\n if (el.tagName && el.tagName.toLowerCase() === 'br') {\n return {\n object: 'text',\n leaves: [\n {\n object: 'leaf',\n text: '\\n',\n },\n ],\n };\n }\n\n if (el.nodeName === '#text') {\n if (el.nodeValue && el.nodeValue.match(/<!--.*?-->/)) return;\n\n log('[text:deserialize] return text object..');\n return {\n object: 'text',\n leaves: [\n {\n object: 'leaf',\n text: el.nodeValue,\n },\n ],\n };\n }\n },\n\n serialize(obj, children) {\n if (obj.object === 'string') {\n return children.split('\\n').reduce((array, text, i) => {\n if (i !== 0) array.push(<br />);\n array.push(text);\n return array;\n }, []);\n }\n },\n};\n\nconst RULES = [\n listSerialization,\n mathSerialization,\n mediaSerialization,\n imgSerialization,\n tableSerialization,\n responseAreaSerialization,\n TEXT_RULE,\n blocks,\n marks,\n];\n\nfunction allWhitespace(node) {\n // Use ECMA-262 Edition 3 String and RegExp features\n return !/[^\\t\\n\\r ]/.test(node.textContent);\n}\n\nfunction defaultParseHtml(html) {\n if (typeof DOMParser === 'undefined') {\n throw new Error(\n 'The native `DOMParser` global which the `Html` serializer uses by default is not present in this environment. You must supply the `options.parseHtml` function instead.',\n );\n }\n\n const parsed = new DOMParser().parseFromString(html, 'text/html');\n\n const { body } = parsed;\n var textNodes = document.createTreeWalker(body, NodeFilter.SHOW_TEXT, null, null);\n var n = textNodes.nextNode();\n\n while (n) {\n if (allWhitespace(n) || n.nodeValue === '\\u200B') {\n n.parentNode.removeChild(n);\n }\n n = textNodes.nextNode();\n }\n\n return body;\n}\n\n/** If this lib is used on the server side, we need to bypass using the DOMParser - just put in a stub. */\nconst parseHtml =\n typeof window === 'undefined'\n ? () => ({\n childNodes: [],\n })\n : defaultParseHtml;\n\nconst serializer = new Html({\n defaultBlock: 'div',\n rules: RULES,\n parseHtml,\n});\n\nconst _extends =\n Object.assign ||\n function(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n/**\n * This is needed in order to override the function that eventually leads\n * to the max iteration of 12, which in most cases it's not enough. The newer versions\n * have a different way to calculate this, but updating to a newer version of slate\n * requires a lot of work fixing other issues. So we just increase the rules by 1000,\n * which means a lot of iterations.\n * Below is the code that calculates the max iterations.\n * var max = schema.stack.plugins.length + schema.rules.length + 1;\n */\nserializer.deserialize = function deserialize(html) {\n const options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const _options$toJSON = options.toJSON;\n const toJSON = _options$toJSON === undefined ? false : _options$toJSON;\n const defaultBlock = this.defaultBlock;\n const parseHtml = this.parseHtml;\n\n const fragment = parseHtml(html);\n const children = Array.from(fragment.childNodes);\n let nodes = this.deserializeElements(children);\n\n // COMPAT: ensure that all top-level inline nodes are wrapped into a block.\n nodes = nodes.reduce(function(memo, node, i, original) {\n if (node.object === 'block') {\n memo.push(node);\n return memo;\n }\n\n if (i > 0 && original[i - 1].object !== 'block') {\n const _block = memo[memo.length - 1];\n\n _block.nodes.push(node);\n return memo;\n }\n\n const block = _extends({ object: 'block', data: {}, isVoid: false }, defaultBlock, {\n nodes: [node],\n });\n\n memo.push(block);\n return memo;\n }, []);\n\n if (nodes.length === 0) {\n nodes = [\n _extends({ object: 'block', data: {}, isVoid: false }, defaultBlock, {\n nodes: [{ object: 'text', leaves: [{ object: 'leaf', text: '', marks: [] }] }],\n }),\n ];\n }\n\n const json = {\n object: 'value',\n document: {\n object: 'document',\n data: {},\n nodes: nodes,\n },\n schema: {\n rules: [],\n },\n };\n\n let i;\n\n for (i = 0; i < 3000; i++) {\n json.schema.rules.push({\n match: { object: 'document' },\n nodes: [{ match: { object: 'block' } }],\n });\n }\n\n const ret = toJSON ? json : Value.fromJSON(json);\n\n if (ret) {\n return ret;\n }\n\n return null;\n};\n\nexport const reduceMultipleBrs = (markup) => {\n try {\n return markup.replace(/(<br\\s*\\/?>){3,}/gi, '<br>');\n } catch (e) {\n // eslint-disable-next-line no-console\n console.log(\"Couldn't remove <br/> tags: \", e);\n }\n\n return markup;\n};\n\nconst reduceRedundantNewLineCharacters = (markup) => {\n try {\n return markup.replace(/\\n/gi, '');\n } catch (e) {\n // eslint-disable-next-line no-console\n console.log(\"Couldn't remove <br/> tags: \", e);\n }\n\n return markup;\n};\n\nconst wrapHtmlProperly = (markup) => {\n const el = document.createElement('div');\n\n el.innerHTML = markup;\n\n /**\n * DIV elements that are at the same level as paragraphs\n * are replaced with P elements for normalizing purposes\n * @param el\n */\n const parseNode = (el) => {\n const childArray = Array.from(el.children);\n const hasParagraphs = childArray.find((child) => child.nodeName === 'P');\n\n childArray.forEach((child) => {\n // removing empty blocks\n if ((child.nodeName === 'DIV' || child.nodeName === 'P') && child.childNodes.length === 0) {\n child.remove();\n return;\n }\n\n if (hasParagraphs && child.nodeName === 'DIV') {\n const p = document.createElement('p');\n\n p.innerHTML = child.innerHTML;\n child.replaceWith(p);\n }\n\n parseNode(child);\n });\n };\n\n parseNode(el);\n\n return el.innerHTML;\n};\n\nexport const htmlToValue = (html) => {\n try {\n return serializer.deserialize(wrapHtmlProperly(reduceRedundantNewLineCharacters(reduceMultipleBrs(html))));\n } catch (e) {\n // eslint-disable-next-line no-console\n console.log(\"Couldn't parse html: \", e);\n return {};\n }\n};\n\nexport const valueToHtml = (value) => serializer.serialize(value);\n\n/**\n *\n * <div><div>a</div></div> -> <div>a</div>\n *\n * <div><div>a</div><div>b</div></div> -> <div>a</div><div>b</div>\n * <div><div>a</div>4444<div>b</div></div> -> <div>a</div>4444<div>b</div>\n */\n"],"file":"serialization.js"}
1
+ {"version":3,"sources":["../src/serialization.jsx"],"names":["log","MARK_TAGS","b","em","u","s","code","strong","blockquote","h3","sup","sub","parseStyleString","regex","match","result","exec","trim","getBase64","file","Promise","resolve","reject","reader","FileReader","readAsDataURL","onload","onerror","error","reactAttributes","o","camelize","addUnits","attributesToMap","el","acc","attribute","value","getAttribute","styleString","reactStyleObject","attributes","blocks","deserialize","next","block","BLOCK_TAGS","tagName","toLowerCase","childNodes","length","cn","object","type","data","reduce","nodes","serialize","children","jsonData","toJSON","key","Tag","INLINE_TAGS","span","inlines","inlineTag","extraCSSRulesOpts","STYLES_MAP","fontSize","fontWeight","background","borderLeft","margin","padding","reactToHTMLAttributesMap","marks","mark","elClasses","hasCSSRule","names","find","name","includes","attrs","undefined","htmlAttrs","Object","keys","obj","Mark","isMark","additionalStyles","style","findPreviousText","nodeName","previousSibling","TEXT_RULE","normalize","leaves","text","nodeValue","split","array","i","push","RULES","listSerialization","mathSerialization","mediaSerialization","imgSerialization","tableSerialization","responseAreaSerialization","allWhitespace","node","test","textContent","defaultParseHtml","html","DOMParser","Error","parsed","parseFromString","body","textNodes","document","createTreeWalker","NodeFilter","SHOW_TEXT","n","nextNode","isWhiteSpace","isNotNearMarkup","nextSibling","parentNode","removeChild","parseHtml","window","serializer","Html","defaultBlock","rules","_extends","assign","target","arguments","source","prototype","hasOwnProperty","call","options","_options$toJSON","fragment","Array","from","deserializeElements","memo","original","_block","isVoid","json","schema","ret","Value","fromJSON","reduceMultipleBrs","markup","replace","e","console","reduceRedundantNewLineCharacters","fixHtmlCode","wrapperEl","createElement","innerHTML","fixParagraphs","child","p","forEach","attr","setAttribute","replaceWith","fixTables","tableArray","index","parent","nodesBefore","nodesAfter","allNodes","beforeEl","append","after","afterEl","emptyBlockCheck","parseNode","childArray","hasParagraphs","tables","remove","handleHtml","htmlToValue","valueToHtml"],"mappings":"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","sourcesContent":["import Html from 'slate-html-serializer';\nimport React from 'react';\nimport debug from 'debug';\nimport { object as toStyleObject } from 'to-style';\nimport isEmpty from 'lodash/isEmpty';\n\nimport { serialization as imgSerialization } from './plugins/image';\nimport { serialization as mathSerialization } from './plugins/math';\nimport { serialization as mediaSerialization } from './plugins/media';\nimport { serialization as listSerialization } from './plugins/list';\nimport { serialization as tableSerialization } from './plugins/table';\nimport { serialization as responseAreaSerialization } from './plugins/respArea';\nimport { Mark, Value } from 'slate';\nimport { BLOCK_TAGS } from './block-tags';\n\nconst log = debug('@pie-lib:editable-html:serialization');\n\n/**\n * Tags to marks.\n *\n * @type {Object}\n */\n\nconst MARK_TAGS = {\n b: 'bold',\n em: 'italic',\n u: 'underline',\n s: 'strikethrough',\n code: 'code',\n strong: 'bold',\n blockquote: 'blockquote',\n h3: 'h3',\n sup: 'sup',\n sub: 'sub',\n};\n\nexport const parseStyleString = (s) => {\n const regex = /([\\w-]*)\\s*:\\s*([^;]*)/g;\n let match;\n const result = {};\n while ((match = regex.exec(s))) {\n result[match[1]] = match[2].trim();\n }\n return result;\n};\n\nexport const getBase64 = (file) => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => resolve(reader.result);\n reader.onerror = (error) => reject(error);\n });\n};\n\nexport const reactAttributes = (o) => toStyleObject(o, { camelize: true, addUnits: false });\n\nconst attributesToMap = (el) => (acc, attribute) => {\n const value = el.getAttribute(attribute);\n if (value) {\n if (attribute === 'style') {\n const styleString = el.getAttribute(attribute);\n const reactStyleObject = reactAttributes(parseStyleString(styleString));\n acc['style'] = reactStyleObject;\n } else {\n acc[attribute] = el.getAttribute(attribute);\n }\n }\n return acc;\n};\n\nconst attributes = ['border', 'cellpadding', 'cellspacing', 'class', 'style', 'align'];\n\n/**\n * Serializer rules.\n *\n * @type {Array}\n */\n\nconst blocks = {\n deserialize(el, next) {\n log('[blocks:deserialize] block: ', el);\n const block = BLOCK_TAGS[el.tagName.toLowerCase()];\n if (!block) return;\n log('[blocks:deserialize] block: ', block);\n\n if (el.childNodes.length === 1) {\n const cn = el.childNodes[0];\n if (cn && cn.tagName && cn.tagName.toLowerCase() === block) {\n log('[we have a child node of the same]...');\n return;\n }\n }\n\n return {\n object: 'block',\n type: block,\n /**\n * Here for rendering styles for all block elements\n */\n data: { attributes: attributes.reduce(attributesToMap(el), {}) },\n nodes: next(el.childNodes),\n };\n },\n serialize: (object, children) => {\n if (object.object !== 'block') return;\n\n const jsonData = object.data.toJSON();\n\n log('[blocks:serialize] object: ', object, children);\n let key;\n\n for (key in BLOCK_TAGS) {\n if (BLOCK_TAGS[key] === object.type) {\n const Tag = key;\n\n return <Tag {...jsonData.attributes}>{children}</Tag>;\n }\n }\n },\n};\n\nexport const INLINE_TAGS = {\n span: 'span',\n};\n\nconst inlines = {\n deserialize(el, next) {\n log('[inlines:deserialize] inline: ', el);\n const inlineTag = INLINE_TAGS[el.tagName.toLowerCase()];\n if (!inlineTag) return;\n log('[inlines:deserialize] inline: ', inlineTag);\n\n if (el.childNodes.length === 1) {\n const cn = el.childNodes[0];\n if (cn && cn.tagName && cn.tagName.toLowerCase() === inlineTag) {\n log('[we have a child node of the same]...');\n return;\n }\n }\n\n return {\n object: 'inline',\n type: inlineTag,\n /**\n * Here for rendering styles for all inline elements\n */\n data: { attributes: attributes.reduce(attributesToMap(el), {}) },\n nodes: next(el.childNodes),\n };\n },\n serialize: (object, children) => {\n if (object.object !== 'inline') return;\n\n const jsonData = object.data.toJSON();\n\n log('[inlines:serialize] object: ', object, children);\n let key;\n\n for (key in INLINE_TAGS) {\n if (INLINE_TAGS[key] === object.type) {\n const Tag = key;\n\n return <Tag {...jsonData.attributes}>{children}</Tag>;\n }\n }\n },\n};\n\nexport const extraCSSRulesOpts = {};\n\nconst STYLES_MAP = {\n h3: {\n fontSize: 'inherit',\n fontWeight: 'inherit',\n },\n blockquote: {\n background: '#f9f9f9',\n borderLeft: '5px solid #ccc',\n margin: '1.5em 10px',\n padding: '.5em 10px',\n },\n};\n\nconst reactToHTMLAttributesMap = {\n class: 'className',\n};\n\nconst marks = {\n deserialize(el, next) {\n const mark = MARK_TAGS[el.tagName.toLowerCase()];\n const elClasses = el.getAttribute('class') || '';\n const hasCSSRule = (extraCSSRulesOpts?.names || []).find((name) => elClasses?.includes(name));\n\n if (!mark && !hasCSSRule) {\n return;\n }\n\n log('[deserialize] mark: ', mark);\n const attrs = attributes.reduce(attributesToMap(el), {});\n const data = isEmpty(attrs) ? undefined : { attributes: attrs };\n\n return {\n object: 'mark',\n type: hasCSSRule ? 'css' : mark,\n /**\n * Here for rendering styles for all elements\n */\n data,\n nodes: next(el.childNodes),\n };\n },\n serialize(object, children) {\n const jsonData = object.data?.toJSON() || {};\n const elClasses = jsonData.attributes?.class || '';\n const hasCSSRule = (extraCSSRulesOpts?.names || []).find((name) => elClasses?.includes(name));\n\n if (hasCSSRule) {\n const htmlAttrs = Object.keys(jsonData.attributes).reduce((obj, key) => {\n obj[reactToHTMLAttributesMap[key] || key] = jsonData.attributes[key];\n return obj;\n }, {});\n\n return <span {...htmlAttrs}>{children}</span>;\n }\n\n if (Mark.isMark(object)) {\n for (var key in MARK_TAGS) {\n if (MARK_TAGS[key] === object.type) {\n const Tag = key;\n const additionalStyles = STYLES_MAP[Tag];\n\n if (additionalStyles) {\n if (!jsonData.attributes) {\n jsonData.attributes = {};\n }\n\n jsonData.attributes.style = {\n ...jsonData.attributes.style,\n ...additionalStyles,\n };\n }\n\n return <Tag {...jsonData.attributes}>{children}</Tag>;\n }\n }\n }\n },\n};\n\n// eslint-disable-next-line no-unused-vars\nconst findPreviousText = (el) => {\n if (el.nodeName === '#text') {\n return el;\n }\n\n if (el.previousSibling) {\n return findPreviousText(el.previousSibling);\n }\n\n return null;\n};\n\nexport const TEXT_RULE = {\n deserialize(el) {\n /**\n * This needs to be called on the dom element in order to merge the adjacent text nodes together\n * */\n el.normalize();\n\n if (el.tagName && el.tagName.toLowerCase() === 'br') {\n return {\n object: 'text',\n leaves: [\n {\n object: 'leaf',\n text: '\\n',\n },\n ],\n };\n }\n\n if (el.nodeName === '#text') {\n if (el.nodeValue && el.nodeValue.match(/<!--.*?-->/)) return;\n\n log('[text:deserialize] return text object..');\n return {\n object: 'text',\n leaves: [\n {\n object: 'leaf',\n text: el.nodeValue,\n },\n ],\n };\n }\n },\n\n serialize(obj, children) {\n if (obj.object === 'string') {\n return children.split('\\n').reduce((array, text, i) => {\n if (i !== 0) array.push(<br />);\n array.push(text);\n return array;\n }, []);\n }\n },\n};\n\nconst RULES = [\n listSerialization,\n mathSerialization,\n mediaSerialization,\n imgSerialization,\n tableSerialization,\n responseAreaSerialization,\n TEXT_RULE,\n inlines,\n blocks,\n marks,\n];\n\nfunction allWhitespace(node) {\n // Use ECMA-262 Edition 3 String and RegExp features\n return !/[^\\t\\n\\r ]/.test(node.textContent);\n}\n\nfunction defaultParseHtml(html) {\n if (typeof DOMParser === 'undefined') {\n throw new Error(\n 'The native `DOMParser` global which the `Html` serializer uses by default is not present in this environment. You must supply the `options.parseHtml` function instead.',\n );\n }\n\n const parsed = new DOMParser().parseFromString(html, 'text/html');\n\n const { body } = parsed;\n var textNodes = document.createTreeWalker(body, NodeFilter.SHOW_TEXT, null, null);\n var n = textNodes.nextNode();\n\n while (n) {\n const isWhiteSpace = allWhitespace(n);\n const isNotNearMarkup =\n !MARK_TAGS[n.nextSibling?.tagName?.toLowerCase()] && !MARK_TAGS[n.previousSibling?.tagName?.toLowerCase()];\n\n if ((isWhiteSpace && isNotNearMarkup) || n.nodeValue === '\\u200B') {\n n.parentNode.removeChild(n);\n }\n n = textNodes.nextNode();\n }\n\n return body;\n}\n\n/** If this lib is used on the server side, we need to bypass using the DOMParser - just put in a stub. */\nconst parseHtml =\n typeof window === 'undefined'\n ? () => ({\n childNodes: [],\n })\n : defaultParseHtml;\n\nconst serializer = new Html({\n defaultBlock: 'div',\n rules: RULES,\n parseHtml,\n});\n\nconst _extends =\n Object.assign ||\n function(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n/**\n * This is needed in order to override the function that eventually leads\n * to the max iteration of 12, which in most cases it's not enough. The newer versions\n * have a different way to calculate this, but updating to a newer version of slate\n * requires a lot of work fixing other issues. So we just increase the rules by 1000,\n * which means a lot of iterations.\n * Below is the code that calculates the max iterations.\n * var max = schema.stack.plugins.length + schema.rules.length + 1;\n */\nserializer.deserialize = function deserialize(html) {\n const options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const _options$toJSON = options.toJSON;\n const toJSON = _options$toJSON === undefined ? false : _options$toJSON;\n const defaultBlock = this.defaultBlock;\n const parseHtml = this.parseHtml;\n\n const fragment = parseHtml(html);\n const children = Array.from(fragment.childNodes);\n let nodes = this.deserializeElements(children);\n\n // COMPAT: ensure that all top-level inline nodes are wrapped into a block.\n nodes = nodes.reduce(function(memo, node, i, original) {\n if (node.object === 'block') {\n memo.push(node);\n return memo;\n }\n\n if (i > 0 && original[i - 1].object !== 'block') {\n const _block = memo[memo.length - 1];\n\n _block.nodes.push(node);\n return memo;\n }\n\n const block = _extends({ object: 'block', data: {}, isVoid: false }, defaultBlock, {\n nodes: [node],\n });\n\n memo.push(block);\n return memo;\n }, []);\n\n if (nodes.length === 0) {\n nodes = [\n _extends({ object: 'block', data: {}, isVoid: false }, defaultBlock, {\n nodes: [{ object: 'text', leaves: [{ object: 'leaf', text: '', marks: [] }] }],\n }),\n ];\n }\n\n const json = {\n object: 'value',\n document: {\n object: 'document',\n data: {},\n nodes: nodes,\n },\n schema: {\n rules: [],\n },\n };\n\n let i;\n\n for (i = 0; i < 3000; i++) {\n json.schema.rules.push({\n match: { object: 'document' },\n nodes: [{ match: { object: 'block' } }],\n });\n }\n\n const ret = toJSON ? json : Value.fromJSON(json);\n\n if (ret) {\n return ret;\n }\n\n return null;\n};\n\nexport const reduceMultipleBrs = (markup) => {\n try {\n return markup.replace(/(<br\\s*\\/?>){3,}/gi, '<br>');\n } catch (e) {\n // eslint-disable-next-line no-console\n console.log(\"Couldn't remove <br/> tags: \", e);\n }\n\n return markup;\n};\n\nconst reduceRedundantNewLineCharacters = (markup) => {\n try {\n return markup.replace(/\\n/gi, '');\n } catch (e) {\n // eslint-disable-next-line no-console\n console.log(\"Couldn't remove <br/> tags: \", e);\n }\n\n return markup;\n};\n\n/**\n * Makes sure that the html provided respects the schema\n * rules for the slate editor.\n * @param markup\n * @returns {string}\n */\nconst fixHtmlCode = (markup) => {\n const wrapperEl = document.createElement('div');\n\n wrapperEl.innerHTML = markup;\n\n /**\n * DIV elements that are at the same level as paragraphs\n * are replaced with P elements for normalizing purposes\n * @param child\n */\n const fixParagraphs = (child) => {\n const p = document.createElement('p');\n\n p.innerHTML = child.innerHTML;\n\n Array.from(child.attributes).forEach((attr) => {\n p.setAttribute(attr.name, attr.value);\n });\n child.replaceWith(p);\n };\n\n /**\n * @summary Makes sure that tables are placed in the root document.\n * @description This function removes the tables from the nodes that are\n * placed inside the root element and places them exactly near\n * the parent element.\n * @param tableArray\n */\n const fixTables = (tableArray) => {\n tableArray.forEach((el) => {\n const { index, child, parent } = el;\n const nodesBefore = [];\n const nodesAfter = [];\n const allNodes = Array.from(parent.childNodes);\n let i;\n\n for (i = 0; i < allNodes.length; i++) {\n const node = allNodes[i];\n\n if (i < index) {\n nodesBefore.push(node);\n } else if (i > index) {\n nodesAfter.push(node);\n }\n }\n\n // creating the element that is going to be placed instead of the parent\n const beforeEl = document.createElement(parent.nodeName);\n\n beforeEl.append(...nodesBefore);\n\n // replacing parent with the beforeElement\n parent.replaceWith(beforeEl);\n\n // adding the table right after the before element\n beforeEl.after(child);\n\n // creating the element that is going to be placed after the table\n const afterEl = document.createElement(parent.nodeName);\n\n afterEl.append(...nodesAfter);\n\n // adding the after element near the table\n child.after(afterEl);\n });\n };\n\n const emptyBlockCheck = (node) =>\n (node.nodeName === 'DIV' || node.nodeName === 'P' || node.nodeName === 'LI') && node.childNodes.length === 0;\n\n const parseNode = (el) => {\n const childArray = Array.from(el.childNodes);\n const hasParagraphs = childArray.find((child) => child.nodeName === 'P');\n const tables = [];\n\n childArray.forEach((child, index) => {\n // removing empty blocks\n if (emptyBlockCheck(child)) {\n child.remove();\n return;\n }\n\n if (hasParagraphs && child.nodeName === 'DIV') {\n fixParagraphs(child);\n }\n\n if (wrapperEl !== el && child.nodeName === 'TABLE') {\n // we don't need to fix tables in the root element\n tables.push({\n index,\n child,\n parent: el,\n });\n }\n\n parseNode(child);\n });\n\n if (tables.length) {\n fixTables(tables);\n }\n };\n\n parseNode(wrapperEl);\n\n return wrapperEl.innerHTML;\n};\n\nexport const handleHtml = (html) => fixHtmlCode(reduceRedundantNewLineCharacters(reduceMultipleBrs(html)));\n\nexport const htmlToValue = (html) => {\n try {\n return serializer.deserialize(handleHtml(html));\n } catch (e) {\n // eslint-disable-next-line no-console\n console.log(\"Couldn't parse html: \", e);\n return {};\n }\n};\n\nexport const valueToHtml = (value) => serializer.serialize(value);\n\n/**\n *\n * <div><div>a</div></div> -> <div>a</div>\n *\n * <div><div>a</div><div>b</div></div> -> <div>a</div><div>b</div>\n * <div><div>a</div>4444<div>b</div></div> -> <div>a</div>4444<div>b</div>\n */\n"],"file":"serialization.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pie-lib/editable-html",
3
- "version": "11.1.1",
3
+ "version": "11.2.0-beta.1",
4
4
  "description": "",
5
5
  "license": "ISC",
6
6
  "main": "lib/index.js",
@@ -10,10 +10,14 @@
10
10
  "@material-ui/core": "^3.8.3",
11
11
  "@material-ui/icons": "^3.0.2",
12
12
  "@material-ui/styles": "^3.0.0-alpha.10",
13
- "@pie-lib/drag": "^2.2.9",
14
- "@pie-lib/math-rendering": "2.5.18",
15
- "@pie-lib/math-toolbar": "^1.11.30",
16
- "@pie-lib/render-ui": "^4.15.9",
13
+ "@pie-lib/config-ui": "latest",
14
+ "@pie-lib/drag": "latest",
15
+ "@pie-lib/icons": "latest",
16
+ "@pie-lib/math-input": "latest",
17
+ "@pie-lib/math-rendering": "latest",
18
+ "@pie-lib/math-toolbar": "latest",
19
+ "@pie-lib/render-ui": "latest",
20
+ "@pie-lib/tools": "latest",
17
21
  "change-case": "^3.0.2",
18
22
  "classnames": "^2.2.6",
19
23
  "debug": "^4.1.1",
@@ -28,6 +32,7 @@
28
32
  "slate-dev-environment": "^0.2.0",
29
33
  "slate-edit-list": "^0.11.3",
30
34
  "slate-edit-table": "^0.17.0",
35
+ "slate-hotkeys": "0.2.11",
31
36
  "slate-html-serializer": "^0.6.12",
32
37
  "slate-plain-serializer": "^0.5.26",
33
38
  "slate-prop-types": "^0.4.38",
@@ -47,6 +52,6 @@
47
52
  "publishConfig": {
48
53
  "access": "public"
49
54
  },
50
- "gitHead": "f58d513825e9ad0a542818a9e16331a380416060",
55
+ "gitHead": "e2aa3ddac60f49bcb8c2562370f496323642f453",
51
56
  "scripts": {}
52
57
  }