@pie-lib/editable-html 11.7.0 → 11.9.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 (101) hide show
  1. package/CHANGELOG.md +6 -10
  2. package/lib/block-tags.js +25 -0
  3. package/lib/block-tags.js.map +1 -0
  4. package/lib/constants.js +16 -0
  5. package/lib/constants.js.map +1 -0
  6. package/lib/editor.js +1355 -0
  7. package/lib/editor.js.map +1 -0
  8. package/lib/index.js +269 -0
  9. package/lib/index.js.map +1 -0
  10. package/lib/parse-html.js +16 -0
  11. package/lib/parse-html.js.map +1 -0
  12. package/lib/plugins/characters/custom-popper.js +73 -0
  13. package/lib/plugins/characters/custom-popper.js.map +1 -0
  14. package/lib/plugins/characters/index.js +305 -0
  15. package/lib/plugins/characters/index.js.map +1 -0
  16. package/lib/plugins/characters/utils.js +381 -0
  17. package/lib/plugins/characters/utils.js.map +1 -0
  18. package/lib/plugins/css/icons/index.js +37 -0
  19. package/lib/plugins/css/icons/index.js.map +1 -0
  20. package/lib/plugins/css/index.js +397 -0
  21. package/lib/plugins/css/index.js.map +1 -0
  22. package/lib/plugins/customPlugin/index.js +114 -0
  23. package/lib/plugins/customPlugin/index.js.map +1 -0
  24. package/lib/plugins/html/icons/index.js +38 -0
  25. package/lib/plugins/html/icons/index.js.map +1 -0
  26. package/lib/plugins/html/index.js +80 -0
  27. package/lib/plugins/html/index.js.map +1 -0
  28. package/lib/plugins/image/alt-dialog.js +129 -0
  29. package/lib/plugins/image/alt-dialog.js.map +1 -0
  30. package/lib/plugins/image/component.js +419 -0
  31. package/lib/plugins/image/component.js.map +1 -0
  32. package/lib/plugins/image/image-toolbar.js +177 -0
  33. package/lib/plugins/image/image-toolbar.js.map +1 -0
  34. package/lib/plugins/image/index.js +263 -0
  35. package/lib/plugins/image/index.js.map +1 -0
  36. package/lib/plugins/image/insert-image-handler.js +161 -0
  37. package/lib/plugins/image/insert-image-handler.js.map +1 -0
  38. package/lib/plugins/index.js +402 -0
  39. package/lib/plugins/index.js.map +1 -0
  40. package/lib/plugins/list/index.js +334 -0
  41. package/lib/plugins/list/index.js.map +1 -0
  42. package/lib/plugins/math/index.js +454 -0
  43. package/lib/plugins/math/index.js.map +1 -0
  44. package/lib/plugins/media/index.js +387 -0
  45. package/lib/plugins/media/index.js.map +1 -0
  46. package/lib/plugins/media/media-dialog.js +709 -0
  47. package/lib/plugins/media/media-dialog.js.map +1 -0
  48. package/lib/plugins/media/media-toolbar.js +101 -0
  49. package/lib/plugins/media/media-toolbar.js.map +1 -0
  50. package/lib/plugins/media/media-wrapper.js +93 -0
  51. package/lib/plugins/media/media-wrapper.js.map +1 -0
  52. package/lib/plugins/rendering/index.js +46 -0
  53. package/lib/plugins/rendering/index.js.map +1 -0
  54. package/lib/plugins/respArea/drag-in-the-blank/choice.js +254 -0
  55. package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +1 -0
  56. package/lib/plugins/respArea/drag-in-the-blank/index.js +97 -0
  57. package/lib/plugins/respArea/drag-in-the-blank/index.js.map +1 -0
  58. package/lib/plugins/respArea/explicit-constructed-response/index.js +57 -0
  59. package/lib/plugins/respArea/explicit-constructed-response/index.js.map +1 -0
  60. package/lib/plugins/respArea/icons/index.js +95 -0
  61. package/lib/plugins/respArea/icons/index.js.map +1 -0
  62. package/lib/plugins/respArea/index.js +341 -0
  63. package/lib/plugins/respArea/index.js.map +1 -0
  64. package/lib/plugins/respArea/inline-dropdown/index.js +75 -0
  65. package/lib/plugins/respArea/inline-dropdown/index.js.map +1 -0
  66. package/lib/plugins/respArea/math-templated/index.js +130 -0
  67. package/lib/plugins/respArea/math-templated/index.js.map +1 -0
  68. package/lib/plugins/respArea/utils.js +125 -0
  69. package/lib/plugins/respArea/utils.js.map +1 -0
  70. package/lib/plugins/table/CustomTablePlugin.js +133 -0
  71. package/lib/plugins/table/CustomTablePlugin.js.map +1 -0
  72. package/lib/plugins/table/icons/index.js +69 -0
  73. package/lib/plugins/table/icons/index.js.map +1 -0
  74. package/lib/plugins/table/index.js +483 -0
  75. package/lib/plugins/table/index.js.map +1 -0
  76. package/lib/plugins/table/table-toolbar.js +187 -0
  77. package/lib/plugins/table/table-toolbar.js.map +1 -0
  78. package/lib/plugins/textAlign/icons/index.js +226 -0
  79. package/lib/plugins/textAlign/icons/index.js.map +1 -0
  80. package/lib/plugins/textAlign/index.js +34 -0
  81. package/lib/plugins/textAlign/index.js.map +1 -0
  82. package/lib/plugins/toolbar/default-toolbar.js +229 -0
  83. package/lib/plugins/toolbar/default-toolbar.js.map +1 -0
  84. package/lib/plugins/toolbar/done-button.js +53 -0
  85. package/lib/plugins/toolbar/done-button.js.map +1 -0
  86. package/lib/plugins/toolbar/editor-and-toolbar.js +286 -0
  87. package/lib/plugins/toolbar/editor-and-toolbar.js.map +1 -0
  88. package/lib/plugins/toolbar/index.js +34 -0
  89. package/lib/plugins/toolbar/index.js.map +1 -0
  90. package/lib/plugins/toolbar/toolbar-buttons.js +194 -0
  91. package/lib/plugins/toolbar/toolbar-buttons.js.map +1 -0
  92. package/lib/plugins/toolbar/toolbar.js +376 -0
  93. package/lib/plugins/toolbar/toolbar.js.map +1 -0
  94. package/lib/plugins/utils.js +62 -0
  95. package/lib/plugins/utils.js.map +1 -0
  96. package/lib/serialization.js +677 -0
  97. package/lib/serialization.js.map +1 -0
  98. package/lib/shared/alert-dialog.js +75 -0
  99. package/lib/theme.js +9 -0
  100. package/lib/theme.js.map +1 -0
  101. package/package.json +8 -8
@@ -0,0 +1,483 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.serialization = exports.reactAttributes = exports.parseStyleString = exports.moveFocusToBeginningOfTable = exports["default"] = void 0;
9
+
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+
12
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
+
14
+ var _react = _interopRequireDefault(require("react"));
15
+
16
+ var _slate = require("slate");
17
+
18
+ var _debug = _interopRequireDefault(require("debug"));
19
+
20
+ var _GridOn = _interopRequireDefault(require("@material-ui/icons/GridOn"));
21
+
22
+ var _tableToolbar = _interopRequireDefault(require("./table-toolbar"));
23
+
24
+ var _propTypes = _interopRequireDefault(require("prop-types"));
25
+
26
+ var _slatePropTypes = _interopRequireDefault(require("slate-prop-types"));
27
+
28
+ var _styles = require("@material-ui/core/styles");
29
+
30
+ var _reactAttrConverter = _interopRequireDefault(require("react-attr-converter"));
31
+
32
+ var _toStyle = require("to-style");
33
+
34
+ var _CustomTablePlugin = _interopRequireDefault(require("./CustomTablePlugin"));
35
+
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
+
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
+
40
+ var log = (0, _debug["default"])('@pie-lib:editable-html:plugins:table');
41
+ var Table = (0, _styles.withStyles)(function () {
42
+ return {
43
+ table: {}
44
+ };
45
+ })(function (props) {
46
+ var nodeAttributes = dataToAttributes(props.node.data);
47
+ return /*#__PURE__*/_react["default"].createElement("table", (0, _extends2["default"])({
48
+ className: props.classes.table
49
+ }, props.attributes, nodeAttributes, {
50
+ onFocus: props.onFocus,
51
+ onBlur: props.onBlur
52
+ }), /*#__PURE__*/_react["default"].createElement("tbody", null, props.children));
53
+ });
54
+ Table.propTypes = {
55
+ attributes: _propTypes["default"].object,
56
+ onFocus: _propTypes["default"].func,
57
+ onBlur: _propTypes["default"].func,
58
+ node: _slatePropTypes["default"].node,
59
+ children: _propTypes["default"].oneOfType([_propTypes["default"].arrayOf(_propTypes["default"].node), _propTypes["default"].node]).isRequired
60
+ };
61
+
62
+ var TableRow = function TableRow(props) {
63
+ return /*#__PURE__*/_react["default"].createElement("tr", props.attributes, props.children);
64
+ };
65
+
66
+ TableRow.propTypes = {
67
+ attributes: _propTypes["default"].object,
68
+ onFocus: _propTypes["default"].func,
69
+ onBlur: _propTypes["default"].func,
70
+ children: _propTypes["default"].oneOfType([_propTypes["default"].arrayOf(_propTypes["default"].node), _propTypes["default"].node]).isRequired
71
+ };
72
+ var TableCell = (0, _styles.withStyles)(function () {
73
+ return {
74
+ td: {
75
+ minWidth: '25px'
76
+ }
77
+ };
78
+ })(function (props) {
79
+ var Tag = props.node.data.get('header') ? 'th' : 'td';
80
+ var nodeAttributes = dataToAttributes(props.node.data);
81
+ delete nodeAttributes.header;
82
+ return /*#__PURE__*/_react["default"].createElement(Tag, (0, _extends2["default"])({}, props.attributes, nodeAttributes, {
83
+ colSpan: props.node.data.get('colspan'),
84
+ className: props.classes[Tag],
85
+ onFocus: props.onFocus,
86
+ onBlur: props.onBlur
87
+ }), props.children);
88
+ });
89
+ TableCell.propTypes = {
90
+ attributes: _propTypes["default"].object,
91
+ onFocus: _propTypes["default"].func,
92
+ onBlur: _propTypes["default"].func,
93
+ children: _propTypes["default"].oneOfType([_propTypes["default"].arrayOf(_propTypes["default"].node), _propTypes["default"].node]).isRequired
94
+ };
95
+
96
+ var moveFocusToBeginningOfTable = function moveFocusToBeginningOfTable(change) {
97
+ var addedTable = change.value.document.findDescendant(function (d) {
98
+ return !!d.data && !!d.data.get('newTable');
99
+ });
100
+
101
+ if (!addedTable) {
102
+ return;
103
+ }
104
+
105
+ change.collapseToStartOf(addedTable);
106
+ var update = addedTable.data.remove('newTable');
107
+ change.setNodeByKey(addedTable.key, {
108
+ data: update
109
+ });
110
+ };
111
+
112
+ exports.moveFocusToBeginningOfTable = moveFocusToBeginningOfTable;
113
+
114
+ var _default = function _default(opts, toolbarPlugins
115
+ /* : {toolbar: {}}[] */
116
+ ) {
117
+ var core = (0, _CustomTablePlugin["default"])(opts); // fix outdated schema
118
+
119
+ if (core.schema && core.schema.blocks) {
120
+ Object.keys(core.schema.blocks).forEach(function (key) {
121
+ var block = core.schema.blocks[key];
122
+
123
+ if (block.parent) {
124
+ if (block.nodes[0].types) {
125
+ block.nodes[0] = {
126
+ type: block.nodes[0].types[0]
127
+ };
128
+ }
129
+
130
+ if (block.nodes[0].objects) {
131
+ block.nodes[0] = {
132
+ object: block.nodes[0].objects[0]
133
+ };
134
+ }
135
+
136
+ block.parent = {
137
+ type: block.parent.types[0]
138
+ };
139
+ } else {
140
+ block.nodes[0] = {
141
+ type: block.nodes[0].types[0]
142
+ };
143
+ }
144
+ });
145
+ }
146
+
147
+ core.utils.getTableBlock = function (containerNode, key) {
148
+ var node = containerNode.getDescendant(key);
149
+ var ancestors = containerNode.getAncestors(key).push(node);
150
+ return ancestors.findLast(function (p) {
151
+ return p.type === 'table';
152
+ });
153
+ };
154
+
155
+ core.utils.createTableWithOptions = function (row, columns, extra) {
156
+ var createdTable = core.utils.createTable(row, columns);
157
+
158
+ var newTable = _slate.Block.create(_objectSpread(_objectSpread({}, createdTable.toJSON()), extra));
159
+
160
+ return newTable;
161
+ };
162
+
163
+ core.toolbar = {
164
+ type: 'table',
165
+ icon: /*#__PURE__*/_react["default"].createElement(_GridOn["default"], null),
166
+ ariaLabel: 'Insert Table',
167
+ onClick: function onClick(value, onChange) {
168
+ log('insert table');
169
+ var change = value.change();
170
+ var newTable = core.utils.createTableWithOptions(2, 2, {
171
+ data: {
172
+ border: '1',
173
+ newTable: true
174
+ }
175
+ });
176
+ change.insertBlock(newTable);
177
+ moveFocusToBeginningOfTable(change);
178
+ onChange(change);
179
+ },
180
+ supports: function supports(node, value) {
181
+ return node && node.object === 'block' && core.utils.isSelectionInTable(value);
182
+ },
183
+
184
+ /**
185
+ * Note - the node may not be a table node - it may be a node inside a table.
186
+ */
187
+ customToolbar: function customToolbar(node, value, onToolbarDone, getFocusedValue) {
188
+ log('[customToolbar] node.data: ', node.data);
189
+ var tableBlock = core.utils.getTableBlock(value.document, node === null || node === void 0 ? void 0 : node.key);
190
+ log('[customToolbar] tableBlock: ', tableBlock);
191
+
192
+ var hasBorder = function hasBorder() {
193
+ return tableBlock.data.get('border') && tableBlock.data.get('border') !== '0';
194
+ };
195
+
196
+ var addRow = function addRow() {
197
+ var change = core.changes.insertRow(value.change());
198
+ onToolbarDone(change, false);
199
+ };
200
+
201
+ var addColumn = function addColumn() {
202
+ var change = core.changes.insertColumn(value.change());
203
+ onToolbarDone(change, false);
204
+ };
205
+
206
+ var removeRow = function removeRow() {
207
+ var change = core.changes.removeRow(value.change());
208
+ onToolbarDone(change, false);
209
+ };
210
+
211
+ var removeColumn = function removeColumn() {
212
+ var change = core.changes.removeColumn(value.change());
213
+ onToolbarDone(change, false);
214
+ };
215
+
216
+ var removeTable = function removeTable() {
217
+ var change = core.changes.removeTable(value.change());
218
+ onToolbarDone(change, false);
219
+ };
220
+
221
+ var toggleBorder = function toggleBorder() {
222
+ var data = tableBlock.data;
223
+ var update = data.set('border', hasBorder() ? '0' : '1');
224
+ log('[toggleBorder] update: ', update);
225
+ var change = value.change().setNodeByKey(tableBlock.key, {
226
+ data: update
227
+ });
228
+ onToolbarDone(change, false);
229
+ };
230
+
231
+ var onDone = function onDone() {
232
+ log('[onDone] call onToolbarDone...');
233
+ onToolbarDone(null, true);
234
+ };
235
+
236
+ var Tb = function Tb() {
237
+ return /*#__PURE__*/_react["default"].createElement(_tableToolbar["default"], {
238
+ getFocusedValue: getFocusedValue,
239
+ plugins: toolbarPlugins,
240
+ onChange: function onChange(c) {
241
+ return onToolbarDone(c, false);
242
+ },
243
+ value: value,
244
+ onAddRow: addRow,
245
+ onRemoveRow: removeRow,
246
+ onAddColumn: addColumn,
247
+ onRemoveColumn: removeColumn,
248
+ onRemoveTable: removeTable,
249
+ hasBorder: hasBorder(),
250
+ onToggleBorder: toggleBorder,
251
+ onDone: onDone
252
+ });
253
+ };
254
+
255
+ return Tb;
256
+ }
257
+ };
258
+
259
+ var Node = function Node(props) {
260
+ switch (props.node.type) {
261
+ case 'table':
262
+ return /*#__PURE__*/_react["default"].createElement(Table, (0, _extends2["default"])({}, props, {
263
+ onFocus: opts.onFocus,
264
+ onBlur: opts.onBlur
265
+ }));
266
+
267
+ case 'table_row':
268
+ return /*#__PURE__*/_react["default"].createElement(TableRow, props);
269
+
270
+ case 'table_cell':
271
+ return /*#__PURE__*/_react["default"].createElement(TableCell, (0, _extends2["default"])({}, props, {
272
+ onFocus: opts.onFocus,
273
+ onBlur: opts.onBlur
274
+ }));
275
+
276
+ default:
277
+ return null;
278
+ }
279
+ };
280
+
281
+ Node.propTypes = {
282
+ node: _propTypes["default"].object
283
+ };
284
+
285
+ core.normalizeNode = function (node) {
286
+ var addNodeBeforeArray = [];
287
+ if (node.object !== 'document') return;
288
+ node.findDescendant(function (d) {
289
+ if (d.type === 'table') {
290
+ var tablePath = node.getPath(d.key);
291
+ var prevNode = node.getPreviousNode(tablePath);
292
+ var nextNode = node.getNextNode(tablePath);
293
+
294
+ if (!prevNode || !nextNode) {
295
+ addNodeBeforeArray.push({
296
+ node: d,
297
+ prevNode: prevNode,
298
+ nextNode: nextNode
299
+ });
300
+ }
301
+ }
302
+ });
303
+
304
+ if (!addNodeBeforeArray.length) {
305
+ return;
306
+ }
307
+
308
+ return function (change) {
309
+ var newBlock = {
310
+ object: 'block',
311
+ type: 'div'
312
+ };
313
+ addNodeBeforeArray.forEach(function (n) {
314
+ var tablePath = change.value.document.getPath(n.node.key).toJSON(); // removing tableIndex
315
+
316
+ var indexToAdd = tablePath.splice(-1)[0];
317
+
318
+ if (!n.prevNode) {
319
+ // inserting block key before table
320
+ change.insertNodeByPath(tablePath, indexToAdd, newBlock); // this will trigger another normalization, which will figure out if there's not
321
+ // a block after the table and add it, so we exit for now
322
+
323
+ return;
324
+ }
325
+
326
+ if (!n.nextNode) {
327
+ // inserting block key after table
328
+ change.insertNodeByPath(tablePath, indexToAdd + 1, newBlock);
329
+ }
330
+ });
331
+ };
332
+ };
333
+
334
+ core.renderNode = Node;
335
+ core.name = 'table';
336
+ return core;
337
+ };
338
+
339
+ exports["default"] = _default;
340
+
341
+ var parseStyleString = function parseStyleString(s) {
342
+ var regex = /([\w-]*)\s*:\s*([^;]*)/g;
343
+ var match;
344
+ var result = {};
345
+
346
+ while (match = regex.exec(s)) {
347
+ result[match[1]] = match[2].trim();
348
+ }
349
+
350
+ return result;
351
+ };
352
+
353
+ exports.parseStyleString = parseStyleString;
354
+
355
+ var reactAttributes = function reactAttributes(o) {
356
+ return (0, _toStyle.object)(o, {
357
+ camelize: true,
358
+ addUnits: false
359
+ });
360
+ };
361
+
362
+ exports.reactAttributes = reactAttributes;
363
+
364
+ var attributesToMap = function attributesToMap(el) {
365
+ return function (acc, attribute) {
366
+ var value = el.getAttribute(attribute);
367
+
368
+ if (value) {
369
+ if (attribute === 'style') {
370
+ var styleString = el.getAttribute(attribute);
371
+ var reactStyleObject = reactAttributes(parseStyleString(styleString));
372
+ acc['style'] = reactStyleObject;
373
+ } else {
374
+ acc[attribute] = el.getAttribute(attribute);
375
+ }
376
+ }
377
+
378
+ return acc;
379
+ };
380
+ };
381
+
382
+ var dataToAttributes = function dataToAttributes(data) {
383
+ if (!data || !data.get) {
384
+ return {};
385
+ }
386
+
387
+ return data.reduce(function (acc, v, name) {
388
+ if (v) {
389
+ acc[(0, _reactAttrConverter["default"])(name)] = v;
390
+ }
391
+
392
+ return acc;
393
+ }, {});
394
+ };
395
+
396
+ var attributes = ['border', 'cellpadding', 'cellspacing', 'class', 'style'];
397
+ var cellAttributes = ['colspan', 'rowspan', 'class', 'style'];
398
+ var serialization = {
399
+ deserialize: function deserialize(el, next) {
400
+ var tag = el.tagName.toLowerCase();
401
+
402
+ switch (tag) {
403
+ case 'table':
404
+ {
405
+ var children = el.children.length === 1 && el.children[0].tagName.toLowerCase() === 'tbody' ? el.children[0].children : el.children;
406
+ var c = Array.from(children);
407
+ return {
408
+ object: 'block',
409
+ type: 'table',
410
+ nodes: next(c),
411
+ data: attributes.reduce(attributesToMap(el), {})
412
+ };
413
+ }
414
+
415
+ case 'th':
416
+ {
417
+ return {
418
+ object: 'block',
419
+ type: 'table_cell',
420
+ nodes: next(el.childNodes),
421
+ data: cellAttributes.reduce(attributesToMap(el), {
422
+ header: true
423
+ })
424
+ };
425
+ }
426
+
427
+ case 'tr':
428
+ {
429
+ return {
430
+ object: 'block',
431
+ type: 'table_row',
432
+ nodes: next(Array.from(el.children))
433
+ };
434
+ }
435
+
436
+ case 'td':
437
+ {
438
+ return {
439
+ object: 'block',
440
+ type: 'table_cell',
441
+ nodes: next(Array.from(el.childNodes)),
442
+ data: cellAttributes.reduce(attributesToMap(el), {
443
+ header: false
444
+ })
445
+ };
446
+ }
447
+ }
448
+ },
449
+ serialize: function serialize(object, children) {
450
+ if (object.object !== 'block') {
451
+ return;
452
+ }
453
+
454
+ switch (object.type) {
455
+ case 'table':
456
+ {
457
+ var _attributes = dataToAttributes(object.data);
458
+
459
+ return /*#__PURE__*/_react["default"].createElement("table", _attributes, /*#__PURE__*/_react["default"].createElement("tbody", null, children));
460
+ }
461
+
462
+ case 'table_row':
463
+ {
464
+ return /*#__PURE__*/_react["default"].createElement("tr", null, children);
465
+ }
466
+
467
+ case 'table_cell':
468
+ {
469
+ var _attributes2 = dataToAttributes(object.data);
470
+
471
+ delete _attributes2.header;
472
+
473
+ if (object.data.get('header')) {
474
+ return /*#__PURE__*/_react["default"].createElement("th", _attributes2, children);
475
+ } else {
476
+ return /*#__PURE__*/_react["default"].createElement("td", _attributes2, children);
477
+ }
478
+ }
479
+ }
480
+ }
481
+ };
482
+ exports.serialization = serialization;
483
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/plugins/table/index.jsx"],"names":["log","Table","table","props","nodeAttributes","dataToAttributes","node","data","classes","attributes","onFocus","onBlur","children","propTypes","PropTypes","object","func","SlatePropTypes","oneOfType","arrayOf","isRequired","TableRow","TableCell","td","minWidth","Tag","get","header","moveFocusToBeginningOfTable","change","addedTable","value","document","findDescendant","d","collapseToStartOf","update","remove","setNodeByKey","key","opts","toolbarPlugins","core","schema","blocks","Object","keys","forEach","block","parent","nodes","types","type","objects","utils","getTableBlock","containerNode","getDescendant","ancestors","getAncestors","push","findLast","p","createTableWithOptions","row","columns","extra","createdTable","createTable","newTable","Block","create","toJSON","toolbar","icon","ariaLabel","onClick","onChange","border","insertBlock","supports","isSelectionInTable","customToolbar","onToolbarDone","getFocusedValue","tableBlock","hasBorder","addRow","changes","insertRow","addColumn","insertColumn","removeRow","removeColumn","removeTable","toggleBorder","set","onDone","Tb","c","Node","normalizeNode","addNodeBeforeArray","tablePath","getPath","prevNode","getPreviousNode","nextNode","getNextNode","length","newBlock","n","indexToAdd","splice","insertNodeByPath","renderNode","name","parseStyleString","s","regex","match","result","exec","trim","reactAttributes","o","camelize","addUnits","attributesToMap","el","acc","attribute","getAttribute","styleString","reactStyleObject","reduce","v","cellAttributes","serialization","deserialize","next","tag","tagName","toLowerCase","Array","from","childNodes","serialize"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { Block } from 'slate';\nimport debug from 'debug';\nimport GridOn from '@material-ui/icons/GridOn';\nimport TableToolbar from './table-toolbar';\nimport PropTypes from 'prop-types';\nimport SlatePropTypes from 'slate-prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport convert from 'react-attr-converter';\nimport { object as toStyleObject } from 'to-style';\nimport CustomTablePlugin from './CustomTablePlugin';\n\nconst log = debug('@pie-lib:editable-html:plugins:table');\n\nconst Table = withStyles(() => ({\n table: {},\n}))((props) => {\n const nodeAttributes = dataToAttributes(props.node.data);\n\n return (\n <table\n className={props.classes.table}\n {...props.attributes}\n {...nodeAttributes}\n onFocus={props.onFocus}\n onBlur={props.onBlur}\n >\n <tbody>{props.children}</tbody>\n </table>\n );\n});\n\nTable.propTypes = {\n attributes: PropTypes.object,\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n node: SlatePropTypes.node,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,\n};\n\nconst TableRow = (props) => <tr {...props.attributes}>{props.children}</tr>;\n\nTableRow.propTypes = {\n attributes: PropTypes.object,\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,\n};\n\nconst TableCell = withStyles(() => ({\n td: {\n minWidth: '25px',\n },\n}))((props) => {\n const Tag = props.node.data.get('header') ? 'th' : 'td';\n\n const nodeAttributes = dataToAttributes(props.node.data);\n delete nodeAttributes.header;\n\n return (\n <Tag\n {...props.attributes}\n {...nodeAttributes}\n colSpan={props.node.data.get('colspan')}\n className={props.classes[Tag]}\n onFocus={props.onFocus}\n onBlur={props.onBlur}\n >\n {props.children}\n </Tag>\n );\n});\n\nTableCell.propTypes = {\n attributes: PropTypes.object,\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,\n};\n\nexport const moveFocusToBeginningOfTable = (change) => {\n const addedTable = change.value.document.findDescendant((d) => !!d.data && !!d.data.get('newTable'));\n\n if (!addedTable) {\n return;\n }\n\n change.collapseToStartOf(addedTable);\n\n const update = addedTable.data.remove('newTable');\n\n change.setNodeByKey(addedTable.key, { data: update });\n};\n\nexport default (opts, toolbarPlugins /* : {toolbar: {}}[] */) => {\n const core = CustomTablePlugin(opts);\n\n // fix outdated schema\n\n if (core.schema && core.schema.blocks) {\n Object.keys(core.schema.blocks).forEach((key) => {\n const block = core.schema.blocks[key];\n\n if (block.parent) {\n if (block.nodes[0].types) {\n block.nodes[0] = {\n type: block.nodes[0].types[0],\n };\n }\n\n if (block.nodes[0].objects) {\n block.nodes[0] = {\n object: block.nodes[0].objects[0],\n };\n }\n\n block.parent = {\n type: block.parent.types[0],\n };\n } else {\n block.nodes[0] = { type: block.nodes[0].types[0] };\n }\n });\n }\n\n core.utils.getTableBlock = (containerNode, key) => {\n const node = containerNode.getDescendant(key);\n const ancestors = containerNode.getAncestors(key).push(node);\n return ancestors.findLast((p) => p.type === 'table');\n };\n\n core.utils.createTableWithOptions = (row, columns, extra) => {\n const createdTable = core.utils.createTable(row, columns);\n const newTable = Block.create({\n ...createdTable.toJSON(),\n ...extra,\n });\n\n return newTable;\n };\n\n core.toolbar = {\n type: 'table',\n icon: <GridOn />,\n ariaLabel: 'Insert Table',\n onClick: (value, onChange) => {\n log('insert table');\n const change = value.change();\n const newTable = core.utils.createTableWithOptions(2, 2, {\n data: {\n border: '1',\n newTable: true,\n },\n });\n\n change.insertBlock(newTable);\n\n moveFocusToBeginningOfTable(change);\n onChange(change);\n },\n supports: (node, value) => node && node.object === 'block' && core.utils.isSelectionInTable(value),\n /**\n * Note - the node may not be a table node - it may be a node inside a table.\n */\n customToolbar: (node, value, onToolbarDone, getFocusedValue) => {\n log('[customToolbar] node.data: ', node.data);\n\n const tableBlock = core.utils.getTableBlock(value.document, node?.key);\n log('[customToolbar] tableBlock: ', tableBlock);\n\n const hasBorder = () => tableBlock.data.get('border') && tableBlock.data.get('border') !== '0';\n const addRow = () => {\n const change = core.changes.insertRow(value.change());\n onToolbarDone(change, false);\n };\n\n const addColumn = () => {\n const change = core.changes.insertColumn(value.change());\n onToolbarDone(change, false);\n };\n\n const removeRow = () => {\n const change = core.changes.removeRow(value.change());\n onToolbarDone(change, false);\n };\n\n const removeColumn = () => {\n const change = core.changes.removeColumn(value.change());\n onToolbarDone(change, false);\n };\n\n const removeTable = () => {\n const change = core.changes.removeTable(value.change());\n onToolbarDone(change, false);\n };\n\n const toggleBorder = () => {\n const { data } = tableBlock;\n const update = data.set('border', hasBorder() ? '0' : '1');\n log('[toggleBorder] update: ', update);\n const change = value.change().setNodeByKey(tableBlock.key, { data: update });\n onToolbarDone(change, false);\n };\n\n const onDone = () => {\n log('[onDone] call onToolbarDone...');\n onToolbarDone(null, true);\n };\n\n const Tb = () => (\n <TableToolbar\n getFocusedValue={getFocusedValue}\n plugins={toolbarPlugins}\n onChange={(c) => onToolbarDone(c, false)}\n value={value}\n onAddRow={addRow}\n onRemoveRow={removeRow}\n onAddColumn={addColumn}\n onRemoveColumn={removeColumn}\n onRemoveTable={removeTable}\n hasBorder={hasBorder()}\n onToggleBorder={toggleBorder}\n onDone={onDone}\n />\n );\n\n return Tb;\n },\n };\n\n const Node = (props) => {\n switch (props.node.type) {\n case 'table':\n return <Table {...props} onFocus={opts.onFocus} onBlur={opts.onBlur} />;\n case 'table_row':\n return <TableRow {...props} />;\n case 'table_cell':\n return <TableCell {...props} onFocus={opts.onFocus} onBlur={opts.onBlur} />;\n default:\n return null;\n }\n };\n Node.propTypes = {\n node: PropTypes.object,\n };\n\n core.normalizeNode = (node) => {\n const addNodeBeforeArray = [];\n\n if (node.object !== 'document') return;\n\n node.findDescendant((d) => {\n if (d.type === 'table') {\n const tablePath = node.getPath(d.key);\n const prevNode = node.getPreviousNode(tablePath);\n const nextNode = node.getNextNode(tablePath);\n\n if (!prevNode || !nextNode) {\n addNodeBeforeArray.push({\n node: d,\n prevNode,\n nextNode,\n });\n }\n }\n });\n\n if (!addNodeBeforeArray.length) {\n return;\n }\n\n return (change) => {\n const newBlock = {\n object: 'block',\n type: 'div',\n };\n\n addNodeBeforeArray.forEach((n) => {\n const tablePath = change.value.document.getPath(n.node.key).toJSON();\n // removing tableIndex\n let indexToAdd = tablePath.splice(-1)[0];\n\n if (!n.prevNode) {\n // inserting block key before table\n change.insertNodeByPath(tablePath, indexToAdd, newBlock);\n // this will trigger another normalization, which will figure out if there's not\n // a block after the table and add it, so we exit for now\n return;\n }\n\n if (!n.nextNode) {\n // inserting block key after table\n change.insertNodeByPath(tablePath, indexToAdd + 1, newBlock);\n }\n });\n };\n };\n\n core.renderNode = Node;\n core.name = 'table';\n\n return core;\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 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 dataToAttributes = (data) => {\n if (!data || !data.get) {\n return {};\n }\n\n return data.reduce((acc, v, name) => {\n if (v) {\n acc[convert(name)] = v;\n }\n return acc;\n }, {});\n};\n\nconst attributes = ['border', 'cellpadding', 'cellspacing', 'class', 'style'];\n\nconst cellAttributes = ['colspan', 'rowspan', 'class', 'style'];\n\nexport const serialization = {\n deserialize(el, next) {\n const tag = el.tagName.toLowerCase();\n\n switch (tag) {\n case 'table': {\n const children =\n el.children.length === 1 && el.children[0].tagName.toLowerCase() === 'tbody'\n ? el.children[0].children\n : el.children;\n const c = Array.from(children);\n\n return {\n object: 'block',\n type: 'table',\n nodes: next(c),\n data: attributes.reduce(attributesToMap(el), {}),\n };\n }\n\n case 'th': {\n return {\n object: 'block',\n type: 'table_cell',\n nodes: next(el.childNodes),\n data: cellAttributes.reduce(attributesToMap(el), { header: true }),\n };\n }\n\n case 'tr': {\n return {\n object: 'block',\n type: 'table_row',\n nodes: next(Array.from(el.children)),\n };\n }\n\n case 'td': {\n return {\n object: 'block',\n type: 'table_cell',\n nodes: next(Array.from(el.childNodes)),\n data: cellAttributes.reduce(attributesToMap(el), { header: false }),\n };\n }\n }\n },\n serialize(object, children) {\n if (object.object !== 'block') {\n return;\n }\n\n switch (object.type) {\n case 'table': {\n const attributes = dataToAttributes(object.data);\n\n return (\n <table {...attributes}>\n <tbody>{children}</tbody>\n </table>\n );\n }\n\n case 'table_row': {\n return <tr>{children}</tr>;\n }\n\n case 'table_cell': {\n const attributes = dataToAttributes(object.data);\n delete attributes.header;\n\n if (object.data.get('header')) {\n return <th {...attributes}>{children}</th>;\n } else {\n return <td {...attributes}>{children}</td>;\n }\n }\n }\n },\n};\n"],"file":"index.js"}