@pie-lib/editable-html 12.1.0-next.0 → 12.1.0-next.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +40 -0
- package/package.json +7 -7
- package/lib/__tests__/editor-utils.test.js +0 -164
- package/lib/__tests__/serialization.test.js +0 -242
- package/lib/__tests__/utils.js +0 -79
- package/lib/block-tags.js +0 -24
- package/lib/block-tags.js.map +0 -1
- package/lib/constants.js +0 -11
- package/lib/constants.js.map +0 -1
- package/lib/editor.js +0 -1224
- package/lib/editor.js.map +0 -1
- package/lib/index.js +0 -208
- package/lib/index.js.map +0 -1
- package/lib/parse-html.js +0 -16
- package/lib/parse-html.js.map +0 -1
- package/lib/plugins/characters/custom-popper.js +0 -57
- package/lib/plugins/characters/custom-popper.js.map +0 -1
- package/lib/plugins/characters/index.js +0 -265
- package/lib/plugins/characters/index.js.map +0 -1
- package/lib/plugins/characters/utils.js +0 -378
- package/lib/plugins/characters/utils.js.map +0 -1
- package/lib/plugins/css/icons/index.js +0 -25
- package/lib/plugins/css/icons/index.js.map +0 -1
- package/lib/plugins/css/index.js +0 -338
- package/lib/plugins/css/index.js.map +0 -1
- package/lib/plugins/customPlugin/index.js +0 -98
- package/lib/plugins/customPlugin/index.js.map +0 -1
- package/lib/plugins/html/icons/index.js +0 -30
- package/lib/plugins/html/icons/index.js.map +0 -1
- package/lib/plugins/html/index.js +0 -71
- package/lib/plugins/html/index.js.map +0 -1
- package/lib/plugins/image/__tests__/component.test.js +0 -96
- package/lib/plugins/image/__tests__/image-toolbar-logic.test.js +0 -131
- package/lib/plugins/image/__tests__/image-toolbar.test.js +0 -22
- package/lib/plugins/image/__tests__/index.test.js +0 -90
- package/lib/plugins/image/__tests__/insert-image-handler.test.js +0 -112
- package/lib/plugins/image/__tests__/mock-change.js +0 -22
- package/lib/plugins/image/alt-dialog.js +0 -100
- package/lib/plugins/image/alt-dialog.js.map +0 -1
- package/lib/plugins/image/component.js +0 -343
- package/lib/plugins/image/component.js.map +0 -1
- package/lib/plugins/image/image-toolbar.js +0 -137
- package/lib/plugins/image/image-toolbar.js.map +0 -1
- package/lib/plugins/image/index.js +0 -223
- package/lib/plugins/image/index.js.map +0 -1
- package/lib/plugins/image/insert-image-handler.js +0 -140
- package/lib/plugins/image/insert-image-handler.js.map +0 -1
- package/lib/plugins/index.js +0 -342
- package/lib/plugins/index.js.map +0 -1
- package/lib/plugins/list/__tests__/index.test.js +0 -64
- package/lib/plugins/list/index.js +0 -288
- package/lib/plugins/list/index.js.map +0 -1
- package/lib/plugins/math/__tests__/index.test.js +0 -284
- package/lib/plugins/math/index.js +0 -402
- package/lib/plugins/math/index.js.map +0 -1
- package/lib/plugins/media/__tests__/index.test.js +0 -69
- package/lib/plugins/media/index.js +0 -330
- package/lib/plugins/media/index.js.map +0 -1
- package/lib/plugins/media/media-dialog.js +0 -594
- package/lib/plugins/media/media-dialog.js.map +0 -1
- package/lib/plugins/media/media-toolbar.js +0 -76
- package/lib/plugins/media/media-toolbar.js.map +0 -1
- package/lib/plugins/media/media-wrapper.js +0 -64
- package/lib/plugins/media/media-wrapper.js.map +0 -1
- package/lib/plugins/rendering/index.js +0 -36
- package/lib/plugins/rendering/index.js.map +0 -1
- package/lib/plugins/respArea/drag-in-the-blank/choice.js +0 -271
- package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +0 -1
- package/lib/plugins/respArea/drag-in-the-blank/index.js +0 -55
- package/lib/plugins/respArea/drag-in-the-blank/index.js.map +0 -1
- package/lib/plugins/respArea/drag-in-the-blank/utils.js +0 -38
- package/lib/plugins/respArea/drag-in-the-blank/utils.js.map +0 -1
- package/lib/plugins/respArea/explicit-constructed-response/index.js +0 -50
- package/lib/plugins/respArea/explicit-constructed-response/index.js.map +0 -1
- package/lib/plugins/respArea/icons/index.js +0 -72
- package/lib/plugins/respArea/icons/index.js.map +0 -1
- package/lib/plugins/respArea/index.js +0 -287
- package/lib/plugins/respArea/index.js.map +0 -1
- package/lib/plugins/respArea/inline-dropdown/index.js +0 -67
- package/lib/plugins/respArea/inline-dropdown/index.js.map +0 -1
- package/lib/plugins/respArea/math-templated/index.js +0 -112
- package/lib/plugins/respArea/math-templated/index.js.map +0 -1
- package/lib/plugins/respArea/utils.js +0 -95
- package/lib/plugins/respArea/utils.js.map +0 -1
- package/lib/plugins/table/CustomTablePlugin.js +0 -116
- package/lib/plugins/table/CustomTablePlugin.js.map +0 -1
- package/lib/plugins/table/__tests__/index.test.js +0 -416
- package/lib/plugins/table/__tests__/table-toolbar.test.js +0 -81
- package/lib/plugins/table/icons/index.js +0 -55
- package/lib/plugins/table/icons/index.js.map +0 -1
- package/lib/plugins/table/index.js +0 -413
- package/lib/plugins/table/index.js.map +0 -1
- package/lib/plugins/table/table-toolbar.js +0 -138
- package/lib/plugins/table/table-toolbar.js.map +0 -1
- package/lib/plugins/textAlign/icons/index.js +0 -187
- package/lib/plugins/textAlign/icons/index.js.map +0 -1
- package/lib/plugins/textAlign/index.js +0 -26
- package/lib/plugins/textAlign/index.js.map +0 -1
- package/lib/plugins/toolbar/__tests__/default-toolbar.test.js +0 -154
- package/lib/plugins/toolbar/__tests__/editor-and-toolbar.test.js +0 -47
- package/lib/plugins/toolbar/__tests__/toolbar-buttons.test.js +0 -112
- package/lib/plugins/toolbar/__tests__/toolbar.test.js +0 -118
- package/lib/plugins/toolbar/default-toolbar.js +0 -180
- package/lib/plugins/toolbar/default-toolbar.js.map +0 -1
- package/lib/plugins/toolbar/done-button.js +0 -35
- package/lib/plugins/toolbar/done-button.js.map +0 -1
- package/lib/plugins/toolbar/editor-and-toolbar.js +0 -258
- package/lib/plugins/toolbar/editor-and-toolbar.js.map +0 -1
- package/lib/plugins/toolbar/index.js +0 -29
- package/lib/plugins/toolbar/index.js.map +0 -1
- package/lib/plugins/toolbar/toolbar-buttons.js +0 -145
- package/lib/plugins/toolbar/toolbar-buttons.js.map +0 -1
- package/lib/plugins/toolbar/toolbar.js +0 -307
- package/lib/plugins/toolbar/toolbar.js.map +0 -1
- package/lib/plugins/utils.js +0 -42
- package/lib/plugins/utils.js.map +0 -1
- package/lib/serialization.js +0 -571
- package/lib/serialization.js.map +0 -1
- package/lib/shared/alert-dialog.js +0 -68
- package/lib/theme.js +0 -8
- package/lib/theme.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_styles","StyledPath","styled","fill","SvgIcon","Component","SvgIconComponent","props","createElement","xmlns","version","width","height","viewBox","displayName","concat","name","AddRow","exports","_extends2","d","RemoveRow","AddColumn","RemoveColumn","RemoveTable"],"sources":["../../../../src/plugins/table/icons/index.jsx"],"sourcesContent":["import React from 'react';\nimport { styled } from '@mui/material/styles';\n\nconst StyledPath = styled('path')({\n fill: 'grey',\n '&:hover': {\n fill: 'black',\n },\n});\n\nconst SvgIcon = (Component) => {\n const SvgIconComponent = (props) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <Component {...props} />\n </svg>\n );\n SvgIconComponent.displayName = `SvgIcon(${Component.displayName || Component.name || 'Component'})`;\n return SvgIconComponent;\n};\nexport const AddRow = SvgIcon((props) => (\n <StyledPath\n {...props}\n d=\"M22,10A2,2 0 0,1 20,12H4A2,2 0 0,1 2,10V3H4V5H8V3H10V5H14V3H16V5H20V3H22V10M4,10H8V7H4V10M10,10H14V7H10V10M20,10V7H16V10H20M11,14H13V17H16V19H13V22H11V19H8V17H11V14Z\"\n />\n));\n\nexport const RemoveRow = SvgIcon((props) => (\n <StyledPath\n {...props}\n d=\"M9.41,13L12,15.59L14.59,13L16,14.41L13.41,17L16,19.59L14.59,21L12,18.41L9.41,21L8,19.59L10.59,17L8,14.41L9.41,13M22,9A2,2 0 0,1 20,11H4A2,2 0 0,1 2,9V6A2,2 0 0,1 4,4H20A2,2 0 0,1 22,6V9M4,9H8V6H4V9M10,9H14V6H10V9M16,9H20V6H16V9Z\"\n />\n));\n\nexport const AddColumn = SvgIcon((props) => (\n <StyledPath\n {...props}\n d=\"M11,2A2,2 0 0,1 13,4V20A2,2 0 0,1 11,22H2V2H11M4,10V14H11V10H4M4,16V20H11V16H4M4,4V8H11V4H4M15,11H18V8H20V11H23V13H20V16H18V13H15V11Z\"\n />\n));\n\nexport const RemoveColumn = SvgIcon((props) => (\n <StyledPath\n {...props}\n d=\"M4,2H11A2,2 0 0,1 13,4V20A2,2 0 0,1 11,22H4A2,2 0 0,1 2,20V4A2,2 0 0,1 4,2M4,10V14H11V10H4M4,16V20H11V16H4M4,4V8H11V4H4M17.59,12L15,9.41L16.41,8L19,10.59L21.59,8L23,9.41L20.41,12L23,14.59L21.59,16L19,13.41L16.41,16L15,14.59L17.59,12Z\"\n />\n));\n\nexport const RemoveTable = SvgIcon((props) => (\n <StyledPath\n {...props}\n d=\"M15.46,15.88L16.88,14.46L19,16.59L21.12,14.46L22.54,15.88L20.41,18L22.54,20.12L21.12,21.54L19,19.41L16.88,21.54L15.46,20.12L17.59,18L15.46,15.88M4,3H18A2,2 0 0,1 20,5V12.08C18.45,11.82 16.92,12.18 15.68,13H12V17H13.08C12.97,17.68 12.97,18.35 13.08,19H4A2,2 0 0,1 2,17V5A2,2 0 0,1 4,3M4,7V11H10V7H4M12,7V11H18V7H12M4,13V17H10V13H4Z\"\n />\n));\n"],"mappings":";;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AAEA,IAAME,UAAU,GAAG,IAAAC,cAAM,EAAC,MAAM,CAAC,CAAC;EAChCC,IAAI,EAAE,MAAM;EACZ,SAAS,EAAE;IACTA,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAEF,IAAMC,OAAO,GAAG,SAAVA,OAAOA,CAAIC,SAAS,EAAK;EAC7B,IAAMC,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAIC,KAAK;IAAA,oBAC7BV,MAAA,YAAAW,aAAA;MAAKC,KAAK,EAAC,4BAA4B;MAACC,OAAO,EAAC,KAAK;MAACC,KAAK,EAAC,IAAI;MAACC,MAAM,EAAC,IAAI;MAACC,OAAO,EAAC;IAAW,gBAC9FhB,MAAA,YAAAW,aAAA,CAACH,SAAS,EAAKE,KAAQ,CACpB,CAAC;EAAA,CACP;EACDD,gBAAgB,CAACQ,WAAW,cAAAC,MAAA,CAAcV,SAAS,CAACS,WAAW,IAAIT,SAAS,CAACW,IAAI,IAAI,WAAW,MAAG;EACnG,OAAOV,gBAAgB;AACzB,CAAC;AACM,IAAMW,MAAM,GAAAC,OAAA,CAAAD,MAAA,GAAGb,OAAO,CAAC,UAACG,KAAK;EAAA,oBAClCV,MAAA,YAAAW,aAAA,CAACP,UAAU,MAAAkB,SAAA,iBACLZ,KAAK;IACTa,CAAC,EAAC;EAAuK,EAC1K,CAAC;AAAA,CACH,CAAC;AAEK,IAAMC,SAAS,GAAAH,OAAA,CAAAG,SAAA,GAAGjB,OAAO,CAAC,UAACG,KAAK;EAAA,oBACrCV,MAAA,YAAAW,aAAA,CAACP,UAAU,MAAAkB,SAAA,iBACLZ,KAAK;IACTa,CAAC,EAAC;EAAsO,EACzO,CAAC;AAAA,CACH,CAAC;AAEK,IAAME,SAAS,GAAAJ,OAAA,CAAAI,SAAA,GAAGlB,OAAO,CAAC,UAACG,KAAK;EAAA,oBACrCV,MAAA,YAAAW,aAAA,CAACP,UAAU,MAAAkB,SAAA,iBACLZ,KAAK;IACTa,CAAC,EAAC;EAAuI,EAC1I,CAAC;AAAA,CACH,CAAC;AAEK,IAAMG,YAAY,GAAAL,OAAA,CAAAK,YAAA,GAAGnB,OAAO,CAAC,UAACG,KAAK;EAAA,oBACxCV,MAAA,YAAAW,aAAA,CAACP,UAAU,MAAAkB,SAAA,iBACLZ,KAAK;IACTa,CAAC,EAAC;EAA2O,EAC9O,CAAC;AAAA,CACH,CAAC;AAEK,IAAMI,WAAW,GAAAN,OAAA,CAAAM,WAAA,GAAGpB,OAAO,CAAC,UAACG,KAAK;EAAA,oBACvCV,MAAA,YAAAW,aAAA,CAACP,UAAU,MAAAkB,SAAA,iBACLZ,KAAK;IACTa,CAAC,EAAC;EAA4U,EAC/U,CAAC;AAAA,CACH,CAAC","ignoreList":[]}
|
|
@@ -1,413 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.serialization = exports.reactAttributes = exports.parseStyleString = exports.moveFocusToBeginningOfTable = exports["default"] = void 0;
|
|
8
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
|
-
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
10
|
-
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
11
|
-
var _react = _interopRequireDefault(require("react"));
|
|
12
|
-
var _slate = require("slate");
|
|
13
|
-
var _debug = _interopRequireDefault(require("debug"));
|
|
14
|
-
var _GridOn = _interopRequireDefault(require("@mui/icons-material/GridOn"));
|
|
15
|
-
var _tableToolbar = _interopRequireDefault(require("./table-toolbar"));
|
|
16
|
-
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
17
|
-
var _slatePropTypes = _interopRequireDefault(require("slate-prop-types"));
|
|
18
|
-
var _styles = require("@mui/material/styles");
|
|
19
|
-
var _reactAttrConverter = _interopRequireDefault(require("react-attr-converter"));
|
|
20
|
-
var _toStyle = require("to-style");
|
|
21
|
-
var _CustomTablePlugin = _interopRequireDefault(require("./CustomTablePlugin"));
|
|
22
|
-
var _excluded = ["node"];
|
|
23
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
24
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
25
|
-
var log = (0, _debug["default"])('@pie-lib:editable-html:plugins:table');
|
|
26
|
-
var StyledTable = (0, _styles.styled)('table')({});
|
|
27
|
-
var StyledTableCell = (0, _styles.styled)(function (_ref) {
|
|
28
|
-
var node = _ref.node,
|
|
29
|
-
props = (0, _objectWithoutProperties2["default"])(_ref, _excluded);
|
|
30
|
-
var Tag = node.data.get('header') ? 'th' : 'td';
|
|
31
|
-
return /*#__PURE__*/_react["default"].createElement(Tag, props);
|
|
32
|
-
})({
|
|
33
|
-
'&': {
|
|
34
|
-
minWidth: '25px'
|
|
35
|
-
},
|
|
36
|
-
'&[data-cell-type="td"]': {
|
|
37
|
-
minWidth: '25px'
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
var Table = function Table(props) {
|
|
41
|
-
var nodeAttributes = dataToAttributes(props.node.data);
|
|
42
|
-
return /*#__PURE__*/_react["default"].createElement(StyledTable, (0, _extends2["default"])({}, props.attributes, nodeAttributes, {
|
|
43
|
-
onFocus: props.onFocus,
|
|
44
|
-
onBlur: props.onBlur
|
|
45
|
-
}), /*#__PURE__*/_react["default"].createElement("tbody", null, props.children));
|
|
46
|
-
};
|
|
47
|
-
Table.propTypes = {
|
|
48
|
-
attributes: _propTypes["default"].object,
|
|
49
|
-
onFocus: _propTypes["default"].func,
|
|
50
|
-
onBlur: _propTypes["default"].func,
|
|
51
|
-
node: _slatePropTypes["default"].node,
|
|
52
|
-
children: _propTypes["default"].oneOfType([_propTypes["default"].arrayOf(_propTypes["default"].node), _propTypes["default"].node]).isRequired
|
|
53
|
-
};
|
|
54
|
-
var TableRow = function TableRow(props) {
|
|
55
|
-
return /*#__PURE__*/_react["default"].createElement("tr", props.attributes, props.children);
|
|
56
|
-
};
|
|
57
|
-
TableRow.propTypes = {
|
|
58
|
-
attributes: _propTypes["default"].object,
|
|
59
|
-
onFocus: _propTypes["default"].func,
|
|
60
|
-
onBlur: _propTypes["default"].func,
|
|
61
|
-
children: _propTypes["default"].oneOfType([_propTypes["default"].arrayOf(_propTypes["default"].node), _propTypes["default"].node]).isRequired
|
|
62
|
-
};
|
|
63
|
-
var TableCell = function TableCell(props) {
|
|
64
|
-
var Tag = props.node.data.get('header') ? 'th' : 'td';
|
|
65
|
-
var nodeAttributes = dataToAttributes(props.node.data);
|
|
66
|
-
delete nodeAttributes.header;
|
|
67
|
-
return /*#__PURE__*/_react["default"].createElement(StyledTableCell, (0, _extends2["default"])({
|
|
68
|
-
as: Tag,
|
|
69
|
-
node: props.node
|
|
70
|
-
}, props.attributes, nodeAttributes, {
|
|
71
|
-
colSpan: props.node.data.get('colspan'),
|
|
72
|
-
"data-cell-type": Tag,
|
|
73
|
-
onFocus: props.onFocus,
|
|
74
|
-
onBlur: props.onBlur
|
|
75
|
-
}), props.children);
|
|
76
|
-
};
|
|
77
|
-
TableCell.propTypes = {
|
|
78
|
-
node: _slatePropTypes["default"].node.isRequired,
|
|
79
|
-
attributes: _propTypes["default"].object,
|
|
80
|
-
onFocus: _propTypes["default"].func,
|
|
81
|
-
onBlur: _propTypes["default"].func,
|
|
82
|
-
children: _propTypes["default"].oneOfType([_propTypes["default"].arrayOf(_propTypes["default"].node), _propTypes["default"].node]).isRequired
|
|
83
|
-
};
|
|
84
|
-
TableCell.propTypes = {
|
|
85
|
-
attributes: _propTypes["default"].object,
|
|
86
|
-
onFocus: _propTypes["default"].func,
|
|
87
|
-
onBlur: _propTypes["default"].func,
|
|
88
|
-
children: _propTypes["default"].oneOfType([_propTypes["default"].arrayOf(_propTypes["default"].node), _propTypes["default"].node]).isRequired
|
|
89
|
-
};
|
|
90
|
-
var moveFocusToBeginningOfTable = exports.moveFocusToBeginningOfTable = function moveFocusToBeginningOfTable(change) {
|
|
91
|
-
var addedTable = change.value.document.findDescendant(function (d) {
|
|
92
|
-
return !!d.data && !!d.data.get('newTable');
|
|
93
|
-
});
|
|
94
|
-
if (!addedTable) {
|
|
95
|
-
return;
|
|
96
|
-
}
|
|
97
|
-
change.collapseToStartOf(addedTable);
|
|
98
|
-
var update = addedTable.data.remove('newTable');
|
|
99
|
-
change.setNodeByKey(addedTable.key, {
|
|
100
|
-
data: update
|
|
101
|
-
});
|
|
102
|
-
};
|
|
103
|
-
var _default = exports["default"] = function _default(opts, toolbarPlugins /* : {toolbar: {}}[] */) {
|
|
104
|
-
var core = (0, _CustomTablePlugin["default"])(opts);
|
|
105
|
-
|
|
106
|
-
// fix outdated schema
|
|
107
|
-
|
|
108
|
-
if (core.schema && core.schema.blocks) {
|
|
109
|
-
Object.keys(core.schema.blocks).forEach(function (key) {
|
|
110
|
-
var block = core.schema.blocks[key];
|
|
111
|
-
if (block.parent) {
|
|
112
|
-
if (block.nodes[0].types) {
|
|
113
|
-
block.nodes[0] = {
|
|
114
|
-
type: block.nodes[0].types[0]
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
if (block.nodes[0].objects) {
|
|
118
|
-
block.nodes[0] = {
|
|
119
|
-
object: block.nodes[0].objects[0]
|
|
120
|
-
};
|
|
121
|
-
}
|
|
122
|
-
block.parent = {
|
|
123
|
-
type: block.parent.types[0]
|
|
124
|
-
};
|
|
125
|
-
} else {
|
|
126
|
-
block.nodes[0] = {
|
|
127
|
-
type: block.nodes[0].types[0]
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
core.utils.getTableBlock = function (containerNode, key) {
|
|
133
|
-
var node = containerNode.getDescendant(key);
|
|
134
|
-
var ancestors = containerNode.getAncestors(key).push(node);
|
|
135
|
-
return ancestors.findLast(function (p) {
|
|
136
|
-
return p.type === 'table';
|
|
137
|
-
});
|
|
138
|
-
};
|
|
139
|
-
core.utils.createTableWithOptions = function (row, columns, extra) {
|
|
140
|
-
var createdTable = core.utils.createTable(row, columns);
|
|
141
|
-
var newTable = _slate.Block.create(_objectSpread(_objectSpread({}, createdTable.toJSON()), extra));
|
|
142
|
-
return newTable;
|
|
143
|
-
};
|
|
144
|
-
core.toolbar = {
|
|
145
|
-
type: 'table',
|
|
146
|
-
icon: /*#__PURE__*/_react["default"].createElement(_GridOn["default"], null),
|
|
147
|
-
ariaLabel: 'Insert Table',
|
|
148
|
-
onClick: function onClick(value, onChange) {
|
|
149
|
-
log('insert table');
|
|
150
|
-
var change = value.change();
|
|
151
|
-
var newTable = core.utils.createTableWithOptions(2, 2, {
|
|
152
|
-
data: {
|
|
153
|
-
border: '1',
|
|
154
|
-
newTable: true
|
|
155
|
-
}
|
|
156
|
-
});
|
|
157
|
-
change.insertBlock(newTable);
|
|
158
|
-
moveFocusToBeginningOfTable(change);
|
|
159
|
-
onChange(change);
|
|
160
|
-
},
|
|
161
|
-
supports: function supports(node, value) {
|
|
162
|
-
return node && node.object === 'block' && core.utils.isSelectionInTable(value);
|
|
163
|
-
},
|
|
164
|
-
/**
|
|
165
|
-
* Note - the node may not be a table node - it may be a node inside a table.
|
|
166
|
-
*/
|
|
167
|
-
customToolbar: function customToolbar(node, value, onToolbarDone, getFocusedValue) {
|
|
168
|
-
log('[customToolbar] node.data: ', node.data);
|
|
169
|
-
var tableBlock = core.utils.getTableBlock(value.document, node === null || node === void 0 ? void 0 : node.key);
|
|
170
|
-
log('[customToolbar] tableBlock: ', tableBlock);
|
|
171
|
-
var hasBorder = function hasBorder() {
|
|
172
|
-
return tableBlock.data.get('border') && tableBlock.data.get('border') !== '0';
|
|
173
|
-
};
|
|
174
|
-
var addRow = function addRow() {
|
|
175
|
-
var change = core.changes.insertRow(value.change());
|
|
176
|
-
onToolbarDone(change, false);
|
|
177
|
-
};
|
|
178
|
-
var addColumn = function addColumn() {
|
|
179
|
-
var change = core.changes.insertColumn(value.change());
|
|
180
|
-
onToolbarDone(change, false);
|
|
181
|
-
};
|
|
182
|
-
var removeRow = function removeRow() {
|
|
183
|
-
var change = core.changes.removeRow(value.change());
|
|
184
|
-
onToolbarDone(change, false);
|
|
185
|
-
};
|
|
186
|
-
var removeColumn = function removeColumn() {
|
|
187
|
-
var change = core.changes.removeColumn(value.change());
|
|
188
|
-
onToolbarDone(change, false);
|
|
189
|
-
};
|
|
190
|
-
var removeTable = function removeTable() {
|
|
191
|
-
var change = core.changes.removeTable(value.change());
|
|
192
|
-
onToolbarDone(change, false);
|
|
193
|
-
};
|
|
194
|
-
var toggleBorder = function toggleBorder() {
|
|
195
|
-
var data = tableBlock.data;
|
|
196
|
-
var update = data.set('border', hasBorder() ? '0' : '1');
|
|
197
|
-
log('[toggleBorder] update: ', update);
|
|
198
|
-
var change = value.change().setNodeByKey(tableBlock.key, {
|
|
199
|
-
data: update
|
|
200
|
-
});
|
|
201
|
-
onToolbarDone(change, false);
|
|
202
|
-
};
|
|
203
|
-
var onDone = function onDone() {
|
|
204
|
-
log('[onDone] call onToolbarDone...');
|
|
205
|
-
onToolbarDone(null, true);
|
|
206
|
-
};
|
|
207
|
-
var Tb = function Tb() {
|
|
208
|
-
return /*#__PURE__*/_react["default"].createElement(_tableToolbar["default"], {
|
|
209
|
-
getFocusedValue: getFocusedValue,
|
|
210
|
-
plugins: toolbarPlugins,
|
|
211
|
-
onChange: function onChange(c) {
|
|
212
|
-
return onToolbarDone(c, false);
|
|
213
|
-
},
|
|
214
|
-
value: value,
|
|
215
|
-
onAddRow: addRow,
|
|
216
|
-
onRemoveRow: removeRow,
|
|
217
|
-
onAddColumn: addColumn,
|
|
218
|
-
onRemoveColumn: removeColumn,
|
|
219
|
-
onRemoveTable: removeTable,
|
|
220
|
-
hasBorder: hasBorder(),
|
|
221
|
-
onToggleBorder: toggleBorder,
|
|
222
|
-
onDone: onDone
|
|
223
|
-
});
|
|
224
|
-
};
|
|
225
|
-
return Tb;
|
|
226
|
-
}
|
|
227
|
-
};
|
|
228
|
-
var Node = function Node(props) {
|
|
229
|
-
switch (props.node.type) {
|
|
230
|
-
case 'table':
|
|
231
|
-
return /*#__PURE__*/_react["default"].createElement(Table, (0, _extends2["default"])({}, props, {
|
|
232
|
-
onFocus: opts.onFocus,
|
|
233
|
-
onBlur: opts.onBlur
|
|
234
|
-
}));
|
|
235
|
-
case 'table_row':
|
|
236
|
-
return /*#__PURE__*/_react["default"].createElement(TableRow, props);
|
|
237
|
-
case 'table_cell':
|
|
238
|
-
return /*#__PURE__*/_react["default"].createElement(TableCell, (0, _extends2["default"])({}, props, {
|
|
239
|
-
onFocus: opts.onFocus,
|
|
240
|
-
onBlur: opts.onBlur
|
|
241
|
-
}));
|
|
242
|
-
default:
|
|
243
|
-
return null;
|
|
244
|
-
}
|
|
245
|
-
};
|
|
246
|
-
Node.propTypes = {
|
|
247
|
-
node: _propTypes["default"].object
|
|
248
|
-
};
|
|
249
|
-
core.normalizeNode = function (node) {
|
|
250
|
-
var addNodeBeforeArray = [];
|
|
251
|
-
if (node.object !== 'document') return;
|
|
252
|
-
node.findDescendant(function (d) {
|
|
253
|
-
if (d.type === 'table') {
|
|
254
|
-
var tablePath = node.getPath(d.key);
|
|
255
|
-
var prevNode = node.getPreviousNode(tablePath);
|
|
256
|
-
var nextNode = node.getNextNode(tablePath);
|
|
257
|
-
if (!prevNode || !nextNode) {
|
|
258
|
-
addNodeBeforeArray.push({
|
|
259
|
-
node: d,
|
|
260
|
-
prevNode: prevNode,
|
|
261
|
-
nextNode: nextNode
|
|
262
|
-
});
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
});
|
|
266
|
-
if (!addNodeBeforeArray.length) {
|
|
267
|
-
return;
|
|
268
|
-
}
|
|
269
|
-
return function (change) {
|
|
270
|
-
var newBlock = {
|
|
271
|
-
object: 'block',
|
|
272
|
-
type: 'div'
|
|
273
|
-
};
|
|
274
|
-
addNodeBeforeArray.forEach(function (n) {
|
|
275
|
-
var tablePath = change.value.document.getPath(n.node.key).toJSON();
|
|
276
|
-
// removing tableIndex
|
|
277
|
-
var indexToAdd = tablePath.splice(-1)[0];
|
|
278
|
-
if (!n.prevNode) {
|
|
279
|
-
// inserting block key before table
|
|
280
|
-
change.insertNodeByPath(tablePath, indexToAdd, newBlock);
|
|
281
|
-
// this will trigger another normalization, which will figure out if there's not
|
|
282
|
-
// a block after the table and add it, so we exit for now
|
|
283
|
-
return;
|
|
284
|
-
}
|
|
285
|
-
if (!n.nextNode) {
|
|
286
|
-
// inserting block key after table
|
|
287
|
-
change.insertNodeByPath(tablePath, indexToAdd + 1, newBlock);
|
|
288
|
-
}
|
|
289
|
-
});
|
|
290
|
-
};
|
|
291
|
-
};
|
|
292
|
-
core.renderNode = Node;
|
|
293
|
-
core.name = 'table';
|
|
294
|
-
return core;
|
|
295
|
-
};
|
|
296
|
-
var parseStyleString = exports.parseStyleString = function parseStyleString(s) {
|
|
297
|
-
var regex = /([\w-]*)\s*:\s*([^;]*)/g;
|
|
298
|
-
var match;
|
|
299
|
-
var result = {};
|
|
300
|
-
while (match = regex.exec(s)) {
|
|
301
|
-
result[match[1]] = match[2].trim();
|
|
302
|
-
}
|
|
303
|
-
return result;
|
|
304
|
-
};
|
|
305
|
-
var reactAttributes = exports.reactAttributes = function reactAttributes(o) {
|
|
306
|
-
return (0, _toStyle.object)(o, {
|
|
307
|
-
camelize: true,
|
|
308
|
-
addUnits: false
|
|
309
|
-
});
|
|
310
|
-
};
|
|
311
|
-
var attributesToMap = function attributesToMap(el) {
|
|
312
|
-
return function (acc, attribute) {
|
|
313
|
-
var value = el.getAttribute(attribute);
|
|
314
|
-
if (value) {
|
|
315
|
-
if (attribute === 'style') {
|
|
316
|
-
var styleString = el.getAttribute(attribute);
|
|
317
|
-
var reactStyleObject = reactAttributes(parseStyleString(styleString));
|
|
318
|
-
acc['style'] = reactStyleObject;
|
|
319
|
-
} else {
|
|
320
|
-
acc[attribute] = el.getAttribute(attribute);
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
return acc;
|
|
324
|
-
};
|
|
325
|
-
};
|
|
326
|
-
var dataToAttributes = function dataToAttributes(data) {
|
|
327
|
-
if (!data || !data.get) {
|
|
328
|
-
return {};
|
|
329
|
-
}
|
|
330
|
-
return data.reduce(function (acc, v, name) {
|
|
331
|
-
if (v) {
|
|
332
|
-
acc[(0, _reactAttrConverter["default"])(name)] = v;
|
|
333
|
-
}
|
|
334
|
-
return acc;
|
|
335
|
-
}, {});
|
|
336
|
-
};
|
|
337
|
-
var attributes = ['border', 'cellpadding', 'cellspacing', 'class', 'style'];
|
|
338
|
-
var cellAttributes = ['colspan', 'rowspan', 'class', 'style'];
|
|
339
|
-
var serialization = exports.serialization = {
|
|
340
|
-
deserialize: function deserialize(el, next) {
|
|
341
|
-
var tag = el.tagName.toLowerCase();
|
|
342
|
-
switch (tag) {
|
|
343
|
-
case 'table':
|
|
344
|
-
{
|
|
345
|
-
var children = el.children.length === 1 && el.children[0].tagName.toLowerCase() === 'tbody' ? el.children[0].children : el.children;
|
|
346
|
-
var c = Array.from(children);
|
|
347
|
-
return {
|
|
348
|
-
object: 'block',
|
|
349
|
-
type: 'table',
|
|
350
|
-
nodes: next(c),
|
|
351
|
-
data: attributes.reduce(attributesToMap(el), {})
|
|
352
|
-
};
|
|
353
|
-
}
|
|
354
|
-
case 'th':
|
|
355
|
-
{
|
|
356
|
-
return {
|
|
357
|
-
object: 'block',
|
|
358
|
-
type: 'table_cell',
|
|
359
|
-
nodes: next(el.childNodes),
|
|
360
|
-
data: cellAttributes.reduce(attributesToMap(el), {
|
|
361
|
-
header: true
|
|
362
|
-
})
|
|
363
|
-
};
|
|
364
|
-
}
|
|
365
|
-
case 'tr':
|
|
366
|
-
{
|
|
367
|
-
return {
|
|
368
|
-
object: 'block',
|
|
369
|
-
type: 'table_row',
|
|
370
|
-
nodes: next(Array.from(el.children))
|
|
371
|
-
};
|
|
372
|
-
}
|
|
373
|
-
case 'td':
|
|
374
|
-
{
|
|
375
|
-
return {
|
|
376
|
-
object: 'block',
|
|
377
|
-
type: 'table_cell',
|
|
378
|
-
nodes: next(Array.from(el.childNodes)),
|
|
379
|
-
data: cellAttributes.reduce(attributesToMap(el), {
|
|
380
|
-
header: false
|
|
381
|
-
})
|
|
382
|
-
};
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
},
|
|
386
|
-
serialize: function serialize(object, children) {
|
|
387
|
-
if (object.object !== 'block') {
|
|
388
|
-
return;
|
|
389
|
-
}
|
|
390
|
-
switch (object.type) {
|
|
391
|
-
case 'table':
|
|
392
|
-
{
|
|
393
|
-
var _attributes = dataToAttributes(object.data);
|
|
394
|
-
return /*#__PURE__*/_react["default"].createElement("table", _attributes, /*#__PURE__*/_react["default"].createElement("tbody", null, children));
|
|
395
|
-
}
|
|
396
|
-
case 'table_row':
|
|
397
|
-
{
|
|
398
|
-
return /*#__PURE__*/_react["default"].createElement("tr", null, children);
|
|
399
|
-
}
|
|
400
|
-
case 'table_cell':
|
|
401
|
-
{
|
|
402
|
-
var _attributes2 = dataToAttributes(object.data);
|
|
403
|
-
delete _attributes2.header;
|
|
404
|
-
if (object.data.get('header')) {
|
|
405
|
-
return /*#__PURE__*/_react["default"].createElement("th", _attributes2, children);
|
|
406
|
-
} else {
|
|
407
|
-
return /*#__PURE__*/_react["default"].createElement("td", _attributes2, children);
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
}
|
|
412
|
-
};
|
|
413
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9zbGF0ZSIsIl9kZWJ1ZyIsIl9HcmlkT24iLCJfdGFibGVUb29sYmFyIiwiX3Byb3BUeXBlcyIsIl9zbGF0ZVByb3BUeXBlcyIsIl9zdHlsZXMiLCJfcmVhY3RBdHRyQ29udmVydGVyIiwiX3RvU3R5bGUiLCJfQ3VzdG9tVGFibGVQbHVnaW4iLCJfZXhjbHVkZWQiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsImxvZyIsImRlYnVnIiwiU3R5bGVkVGFibGUiLCJzdHlsZWQiLCJTdHlsZWRUYWJsZUNlbGwiLCJfcmVmIiwibm9kZSIsInByb3BzIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzMiIsIlRhZyIsImRhdGEiLCJnZXQiLCJjcmVhdGVFbGVtZW50IiwibWluV2lkdGgiLCJUYWJsZSIsIm5vZGVBdHRyaWJ1dGVzIiwiZGF0YVRvQXR0cmlidXRlcyIsIl9leHRlbmRzMiIsImF0dHJpYnV0ZXMiLCJvbkZvY3VzIiwib25CbHVyIiwiY2hpbGRyZW4iLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJvYmplY3QiLCJmdW5jIiwiU2xhdGVQcm9wVHlwZXMiLCJvbmVPZlR5cGUiLCJhcnJheU9mIiwiaXNSZXF1aXJlZCIsIlRhYmxlUm93IiwiVGFibGVDZWxsIiwiaGVhZGVyIiwiYXMiLCJjb2xTcGFuIiwibW92ZUZvY3VzVG9CZWdpbm5pbmdPZlRhYmxlIiwiZXhwb3J0cyIsImNoYW5nZSIsImFkZGVkVGFibGUiLCJ2YWx1ZSIsImRvY3VtZW50IiwiZmluZERlc2NlbmRhbnQiLCJkIiwiY29sbGFwc2VUb1N0YXJ0T2YiLCJ1cGRhdGUiLCJyZW1vdmUiLCJzZXROb2RlQnlLZXkiLCJrZXkiLCJfZGVmYXVsdCIsIm9wdHMiLCJ0b29sYmFyUGx1Z2lucyIsImNvcmUiLCJDdXN0b21UYWJsZVBsdWdpbiIsInNjaGVtYSIsImJsb2NrcyIsImJsb2NrIiwicGFyZW50Iiwibm9kZXMiLCJ0eXBlcyIsInR5cGUiLCJvYmplY3RzIiwidXRpbHMiLCJnZXRUYWJsZUJsb2NrIiwiY29udGFpbmVyTm9kZSIsImdldERlc2NlbmRhbnQiLCJhbmNlc3RvcnMiLCJnZXRBbmNlc3RvcnMiLCJmaW5kTGFzdCIsInAiLCJjcmVhdGVUYWJsZVdpdGhPcHRpb25zIiwicm93IiwiY29sdW1ucyIsImV4dHJhIiwiY3JlYXRlZFRhYmxlIiwiY3JlYXRlVGFibGUiLCJuZXdUYWJsZSIsIkJsb2NrIiwiY3JlYXRlIiwidG9KU09OIiwidG9vbGJhciIsImljb24iLCJhcmlhTGFiZWwiLCJvbkNsaWNrIiwib25DaGFuZ2UiLCJib3JkZXIiLCJpbnNlcnRCbG9jayIsInN1cHBvcnRzIiwiaXNTZWxlY3Rpb25JblRhYmxlIiwiY3VzdG9tVG9vbGJhciIsIm9uVG9vbGJhckRvbmUiLCJnZXRGb2N1c2VkVmFsdWUiLCJ0YWJsZUJsb2NrIiwiaGFzQm9yZGVyIiwiYWRkUm93IiwiY2hhbmdlcyIsImluc2VydFJvdyIsImFkZENvbHVtbiIsImluc2VydENvbHVtbiIsInJlbW92ZVJvdyIsInJlbW92ZUNvbHVtbiIsInJlbW92ZVRhYmxlIiwidG9nZ2xlQm9yZGVyIiwic2V0Iiwib25Eb25lIiwiVGIiLCJwbHVnaW5zIiwiYyIsIm9uQWRkUm93Iiwib25SZW1vdmVSb3ciLCJvbkFkZENvbHVtbiIsIm9uUmVtb3ZlQ29sdW1uIiwib25SZW1vdmVUYWJsZSIsIm9uVG9nZ2xlQm9yZGVyIiwiTm9kZSIsIm5vcm1hbGl6ZU5vZGUiLCJhZGROb2RlQmVmb3JlQXJyYXkiLCJ0YWJsZVBhdGgiLCJnZXRQYXRoIiwicHJldk5vZGUiLCJnZXRQcmV2aW91c05vZGUiLCJuZXh0Tm9kZSIsImdldE5leHROb2RlIiwibmV3QmxvY2siLCJuIiwiaW5kZXhUb0FkZCIsInNwbGljZSIsImluc2VydE5vZGVCeVBhdGgiLCJyZW5kZXJOb2RlIiwibmFtZSIsInBhcnNlU3R5bGVTdHJpbmciLCJzIiwicmVnZXgiLCJtYXRjaCIsInJlc3VsdCIsImV4ZWMiLCJ0cmltIiwicmVhY3RBdHRyaWJ1dGVzIiwidG9TdHlsZU9iamVjdCIsImNhbWVsaXplIiwiYWRkVW5pdHMiLCJhdHRyaWJ1dGVzVG9NYXAiLCJlbCIsImFjYyIsImF0dHJpYnV0ZSIsImdldEF0dHJpYnV0ZSIsInN0eWxlU3RyaW5nIiwicmVhY3RTdHlsZU9iamVjdCIsInJlZHVjZSIsInYiLCJjb252ZXJ0IiwiY2VsbEF0dHJpYnV0ZXMiLCJzZXJpYWxpemF0aW9uIiwiZGVzZXJpYWxpemUiLCJuZXh0IiwidGFnIiwidGFnTmFtZSIsInRvTG93ZXJDYXNlIiwiQXJyYXkiLCJmcm9tIiwiY2hpbGROb2RlcyIsInNlcmlhbGl6ZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wbHVnaW5zL3RhYmxlL2luZGV4LmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQmxvY2sgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IEdyaWRPbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL0dyaWRPbic7XG5pbXBvcnQgVGFibGVUb29sYmFyIGZyb20gJy4vdGFibGUtdG9vbGJhcic7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFNsYXRlUHJvcFR5cGVzIGZyb20gJ3NsYXRlLXByb3AtdHlwZXMnO1xuaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSAnQG11aS9tYXRlcmlhbC9zdHlsZXMnO1xuaW1wb3J0IGNvbnZlcnQgZnJvbSAncmVhY3QtYXR0ci1jb252ZXJ0ZXInO1xuaW1wb3J0IHsgb2JqZWN0IGFzIHRvU3R5bGVPYmplY3QgfSBmcm9tICd0by1zdHlsZSc7XG5pbXBvcnQgQ3VzdG9tVGFibGVQbHVnaW4gZnJvbSAnLi9DdXN0b21UYWJsZVBsdWdpbic7XG5cbmNvbnN0IGxvZyA9IGRlYnVnKCdAcGllLWxpYjplZGl0YWJsZS1odG1sOnBsdWdpbnM6dGFibGUnKTtcblxuY29uc3QgU3R5bGVkVGFibGUgPSBzdHlsZWQoJ3RhYmxlJykoe30pO1xuXG5jb25zdCBTdHlsZWRUYWJsZUNlbGwgPSBzdHlsZWQoKHsgbm9kZSwgLi4ucHJvcHMgfSkgPT4ge1xuICBjb25zdCBUYWcgPSBub2RlLmRhdGEuZ2V0KCdoZWFkZXInKSA/ICd0aCcgOiAndGQnO1xuICByZXR1cm4gPFRhZyB7Li4ucHJvcHN9IC8+O1xufSkoe1xuICAnJic6IHtcbiAgICBtaW5XaWR0aDogJzI1cHgnLFxuICB9LFxuICAnJltkYXRhLWNlbGwtdHlwZT1cInRkXCJdJzoge1xuICAgIG1pbldpZHRoOiAnMjVweCcsXG4gIH0sXG59KTtcblxuY29uc3QgVGFibGUgPSAocHJvcHMpID0+IHtcbiAgY29uc3Qgbm9kZUF0dHJpYnV0ZXMgPSBkYXRhVG9BdHRyaWJ1dGVzKHByb3BzLm5vZGUuZGF0YSk7XG5cbiAgcmV0dXJuIChcbiAgICA8U3R5bGVkVGFibGVcbiAgICAgIHsuLi5wcm9wcy5hdHRyaWJ1dGVzfVxuICAgICAgey4uLm5vZGVBdHRyaWJ1dGVzfVxuICAgICAgb25Gb2N1cz17cHJvcHMub25Gb2N1c31cbiAgICAgIG9uQmx1cj17cHJvcHMub25CbHVyfVxuICAgID5cbiAgICAgIDx0Ym9keT57cHJvcHMuY2hpbGRyZW59PC90Ym9keT5cbiAgICA8L1N0eWxlZFRhYmxlPlxuICApO1xufTtcblxuVGFibGUucHJvcFR5cGVzID0ge1xuICBhdHRyaWJ1dGVzOiBQcm9wVHlwZXMub2JqZWN0LFxuICBvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgbm9kZTogU2xhdGVQcm9wVHlwZXMubm9kZSxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5ub2RlKSwgUHJvcFR5cGVzLm5vZGVdKS5pc1JlcXVpcmVkLFxufTtcblxuY29uc3QgVGFibGVSb3cgPSAocHJvcHMpID0+IDx0ciB7Li4ucHJvcHMuYXR0cmlidXRlc30+e3Byb3BzLmNoaWxkcmVufTwvdHI+O1xuXG5UYWJsZVJvdy5wcm9wVHlwZXMgPSB7XG4gIGF0dHJpYnV0ZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm5vZGUpLCBQcm9wVHlwZXMubm9kZV0pLmlzUmVxdWlyZWQsXG59O1xuXG5jb25zdCBUYWJsZUNlbGwgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgVGFnID0gcHJvcHMubm9kZS5kYXRhLmdldCgnaGVhZGVyJykgPyAndGgnIDogJ3RkJztcbiAgY29uc3Qgbm9kZUF0dHJpYnV0ZXMgPSBkYXRhVG9BdHRyaWJ1dGVzKHByb3BzLm5vZGUuZGF0YSk7XG4gIGRlbGV0ZSBub2RlQXR0cmlidXRlcy5oZWFkZXI7XG5cbiAgcmV0dXJuIChcbiAgICA8U3R5bGVkVGFibGVDZWxsXG4gICAgICBhcz17VGFnfVxuICAgICAgbm9kZT17cHJvcHMubm9kZX1cbiAgICAgIHsuLi5wcm9wcy5hdHRyaWJ1dGVzfVxuICAgICAgey4uLm5vZGVBdHRyaWJ1dGVzfVxuICAgICAgY29sU3Bhbj17cHJvcHMubm9kZS5kYXRhLmdldCgnY29sc3BhbicpfVxuICAgICAgZGF0YS1jZWxsLXR5cGU9e1RhZ31cbiAgICAgIG9uRm9jdXM9e3Byb3BzLm9uRm9jdXN9XG4gICAgICBvbkJsdXI9e3Byb3BzLm9uQmx1cn1cbiAgICA+XG4gICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgPC9TdHlsZWRUYWJsZUNlbGw+XG4gICk7XG59O1xuXG5UYWJsZUNlbGwucHJvcFR5cGVzID0ge1xuICBub2RlOiBTbGF0ZVByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gIGF0dHJpYnV0ZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm5vZGUpLCBQcm9wVHlwZXMubm9kZV0pLmlzUmVxdWlyZWQsXG59O1xuXG5UYWJsZUNlbGwucHJvcFR5cGVzID0ge1xuICBhdHRyaWJ1dGVzOiBQcm9wVHlwZXMub2JqZWN0LFxuICBvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5ub2RlKSwgUHJvcFR5cGVzLm5vZGVdKS5pc1JlcXVpcmVkLFxufTtcblxuZXhwb3J0IGNvbnN0IG1vdmVGb2N1c1RvQmVnaW5uaW5nT2ZUYWJsZSA9IChjaGFuZ2UpID0+IHtcbiAgY29uc3QgYWRkZWRUYWJsZSA9IGNoYW5nZS52YWx1ZS5kb2N1bWVudC5maW5kRGVzY2VuZGFudCgoZCkgPT4gISFkLmRhdGEgJiYgISFkLmRhdGEuZ2V0KCduZXdUYWJsZScpKTtcblxuICBpZiAoIWFkZGVkVGFibGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjaGFuZ2UuY29sbGFwc2VUb1N0YXJ0T2YoYWRkZWRUYWJsZSk7XG5cbiAgY29uc3QgdXBkYXRlID0gYWRkZWRUYWJsZS5kYXRhLnJlbW92ZSgnbmV3VGFibGUnKTtcblxuICBjaGFuZ2Uuc2V0Tm9kZUJ5S2V5KGFkZGVkVGFibGUua2V5LCB7IGRhdGE6IHVwZGF0ZSB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IChvcHRzLCB0b29sYmFyUGx1Z2lucyAvKiA6ICB7dG9vbGJhcjoge319W10gKi8pID0+IHtcbiAgY29uc3QgY29yZSA9IEN1c3RvbVRhYmxlUGx1Z2luKG9wdHMpO1xuXG4gIC8vIGZpeCBvdXRkYXRlZCBzY2hlbWFcblxuICBpZiAoY29yZS5zY2hlbWEgJiYgY29yZS5zY2hlbWEuYmxvY2tzKSB7XG4gICAgT2JqZWN0LmtleXMoY29yZS5zY2hlbWEuYmxvY2tzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGNvbnN0IGJsb2NrID0gY29yZS5zY2hlbWEuYmxvY2tzW2tleV07XG5cbiAgICAgIGlmIChibG9jay5wYXJlbnQpIHtcbiAgICAgICAgaWYgKGJsb2NrLm5vZGVzWzBdLnR5cGVzKSB7XG4gICAgICAgICAgYmxvY2subm9kZXNbMF0gPSB7XG4gICAgICAgICAgICB0eXBlOiBibG9jay5ub2Rlc1swXS50eXBlc1swXSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJsb2NrLm5vZGVzWzBdLm9iamVjdHMpIHtcbiAgICAgICAgICBibG9jay5ub2Rlc1swXSA9IHtcbiAgICAgICAgICAgIG9iamVjdDogYmxvY2subm9kZXNbMF0ub2JqZWN0c1swXSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgYmxvY2sucGFyZW50ID0ge1xuICAgICAgICAgIHR5cGU6IGJsb2NrLnBhcmVudC50eXBlc1swXSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJsb2NrLm5vZGVzWzBdID0geyB0eXBlOiBibG9jay5ub2Rlc1swXS50eXBlc1swXSB9O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY29yZS51dGlscy5nZXRUYWJsZUJsb2NrID0gKGNvbnRhaW5lck5vZGUsIGtleSkgPT4ge1xuICAgIGNvbnN0IG5vZGUgPSBjb250YWluZXJOb2RlLmdldERlc2NlbmRhbnQoa2V5KTtcbiAgICBjb25zdCBhbmNlc3RvcnMgPSBjb250YWluZXJOb2RlLmdldEFuY2VzdG9ycyhrZXkpLnB1c2gobm9kZSk7XG4gICAgcmV0dXJuIGFuY2VzdG9ycy5maW5kTGFzdCgocCkgPT4gcC50eXBlID09PSAndGFibGUnKTtcbiAgfTtcblxuICBjb3JlLnV0aWxzLmNyZWF0ZVRhYmxlV2l0aE9wdGlvbnMgPSAocm93LCBjb2x1bW5zLCBleHRyYSkgPT4ge1xuICAgIGNvbnN0IGNyZWF0ZWRUYWJsZSA9IGNvcmUudXRpbHMuY3JlYXRlVGFibGUocm93LCBjb2x1bW5zKTtcbiAgICBjb25zdCBuZXdUYWJsZSA9IEJsb2NrLmNyZWF0ZSh7XG4gICAgICAuLi5jcmVhdGVkVGFibGUudG9KU09OKCksXG4gICAgICAuLi5leHRyYSxcbiAgICB9KTtcblxuICAgIHJldHVybiBuZXdUYWJsZTtcbiAgfTtcblxuICBjb3JlLnRvb2xiYXIgPSB7XG4gICAgdHlwZTogJ3RhYmxlJyxcbiAgICBpY29uOiA8R3JpZE9uIC8+LFxuICAgIGFyaWFMYWJlbDogJ0luc2VydCBUYWJsZScsXG4gICAgb25DbGljazogKHZhbHVlLCBvbkNoYW5nZSkgPT4ge1xuICAgICAgbG9nKCdpbnNlcnQgdGFibGUnKTtcbiAgICAgIGNvbnN0IGNoYW5nZSA9IHZhbHVlLmNoYW5nZSgpO1xuICAgICAgY29uc3QgbmV3VGFibGUgPSBjb3JlLnV0aWxzLmNyZWF0ZVRhYmxlV2l0aE9wdGlvbnMoMiwgMiwge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgYm9yZGVyOiAnMScsXG4gICAgICAgICAgbmV3VGFibGU6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY2hhbmdlLmluc2VydEJsb2NrKG5ld1RhYmxlKTtcblxuICAgICAgbW92ZUZvY3VzVG9CZWdpbm5pbmdPZlRhYmxlKGNoYW5nZSk7XG4gICAgICBvbkNoYW5nZShjaGFuZ2UpO1xuICAgIH0sXG4gICAgc3VwcG9ydHM6IChub2RlLCB2YWx1ZSkgPT4gbm9kZSAmJiBub2RlLm9iamVjdCA9PT0gJ2Jsb2NrJyAmJiBjb3JlLnV0aWxzLmlzU2VsZWN0aW9uSW5UYWJsZSh2YWx1ZSksXG4gICAgLyoqXG4gICAgICogTm90ZSAtIHRoZSBub2RlIG1heSBub3QgYmUgYSB0YWJsZSBub2RlIC0gaXQgbWF5IGJlIGEgbm9kZSBpbnNpZGUgYSB0YWJsZS5cbiAgICAgKi9cbiAgICBjdXN0b21Ub29sYmFyOiAobm9kZSwgdmFsdWUsIG9uVG9vbGJhckRvbmUsIGdldEZvY3VzZWRWYWx1ZSkgPT4ge1xuICAgICAgbG9nKCdbY3VzdG9tVG9vbGJhcl0gbm9kZS5kYXRhOiAnLCBub2RlLmRhdGEpO1xuXG4gICAgICBjb25zdCB0YWJsZUJsb2NrID0gY29yZS51dGlscy5nZXRUYWJsZUJsb2NrKHZhbHVlLmRvY3VtZW50LCBub2RlPy5rZXkpO1xuICAgICAgbG9nKCdbY3VzdG9tVG9vbGJhcl0gdGFibGVCbG9jazogJywgdGFibGVCbG9jayk7XG5cbiAgICAgIGNvbnN0IGhhc0JvcmRlciA9ICgpID0+IHRhYmxlQmxvY2suZGF0YS5nZXQoJ2JvcmRlcicpICYmIHRhYmxlQmxvY2suZGF0YS5nZXQoJ2JvcmRlcicpICE9PSAnMCc7XG4gICAgICBjb25zdCBhZGRSb3cgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoYW5nZSA9IGNvcmUuY2hhbmdlcy5pbnNlcnRSb3codmFsdWUuY2hhbmdlKCkpO1xuICAgICAgICBvblRvb2xiYXJEb25lKGNoYW5nZSwgZmFsc2UpO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgYWRkQ29sdW1uID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBjaGFuZ2UgPSBjb3JlLmNoYW5nZXMuaW5zZXJ0Q29sdW1uKHZhbHVlLmNoYW5nZSgpKTtcbiAgICAgICAgb25Ub29sYmFyRG9uZShjaGFuZ2UsIGZhbHNlKTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlbW92ZVJvdyA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgY2hhbmdlID0gY29yZS5jaGFuZ2VzLnJlbW92ZVJvdyh2YWx1ZS5jaGFuZ2UoKSk7XG4gICAgICAgIG9uVG9vbGJhckRvbmUoY2hhbmdlLCBmYWxzZSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZW1vdmVDb2x1bW4gPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoYW5nZSA9IGNvcmUuY2hhbmdlcy5yZW1vdmVDb2x1bW4odmFsdWUuY2hhbmdlKCkpO1xuICAgICAgICBvblRvb2xiYXJEb25lKGNoYW5nZSwgZmFsc2UpO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVtb3ZlVGFibGUgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoYW5nZSA9IGNvcmUuY2hhbmdlcy5yZW1vdmVUYWJsZSh2YWx1ZS5jaGFuZ2UoKSk7XG4gICAgICAgIG9uVG9vbGJhckRvbmUoY2hhbmdlLCBmYWxzZSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCB0b2dnbGVCb3JkZXIgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gdGFibGVCbG9jaztcbiAgICAgICAgY29uc3QgdXBkYXRlID0gZGF0YS5zZXQoJ2JvcmRlcicsIGhhc0JvcmRlcigpID8gJzAnIDogJzEnKTtcbiAgICAgICAgbG9nKCdbdG9nZ2xlQm9yZGVyXSB1cGRhdGU6ICcsIHVwZGF0ZSk7XG4gICAgICAgIGNvbnN0IGNoYW5nZSA9IHZhbHVlLmNoYW5nZSgpLnNldE5vZGVCeUtleSh0YWJsZUJsb2NrLmtleSwgeyBkYXRhOiB1cGRhdGUgfSk7XG4gICAgICAgIG9uVG9vbGJhckRvbmUoY2hhbmdlLCBmYWxzZSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvbkRvbmUgPSAoKSA9PiB7XG4gICAgICAgIGxvZygnW29uRG9uZV0gY2FsbCBvblRvb2xiYXJEb25lLi4uJyk7XG4gICAgICAgIG9uVG9vbGJhckRvbmUobnVsbCwgdHJ1ZSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBUYiA9ICgpID0+IChcbiAgICAgICAgPFRhYmxlVG9vbGJhclxuICAgICAgICAgIGdldEZvY3VzZWRWYWx1ZT17Z2V0Rm9jdXNlZFZhbHVlfVxuICAgICAgICAgIHBsdWdpbnM9e3Rvb2xiYXJQbHVnaW5zfVxuICAgICAgICAgIG9uQ2hhbmdlPXsoYykgPT4gb25Ub29sYmFyRG9uZShjLCBmYWxzZSl9XG4gICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgIG9uQWRkUm93PXthZGRSb3d9XG4gICAgICAgICAgb25SZW1vdmVSb3c9e3JlbW92ZVJvd31cbiAgICAgICAgICBvbkFkZENvbHVtbj17YWRkQ29sdW1ufVxuICAgICAgICAgIG9uUmVtb3ZlQ29sdW1uPXtyZW1vdmVDb2x1bW59XG4gICAgICAgICAgb25SZW1vdmVUYWJsZT17cmVtb3ZlVGFibGV9XG4gICAgICAgICAgaGFzQm9yZGVyPXtoYXNCb3JkZXIoKX1cbiAgICAgICAgICBvblRvZ2dsZUJvcmRlcj17dG9nZ2xlQm9yZGVyfVxuICAgICAgICAgIG9uRG9uZT17b25Eb25lfVxuICAgICAgICAvPlxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIFRiO1xuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgTm9kZSA9IChwcm9wcykgPT4ge1xuICAgIHN3aXRjaCAocHJvcHMubm9kZS50eXBlKSB7XG4gICAgICBjYXNlICd0YWJsZSc6XG4gICAgICAgIHJldHVybiA8VGFibGUgey4uLnByb3BzfSBvbkZvY3VzPXtvcHRzLm9uRm9jdXN9IG9uQmx1cj17b3B0cy5vbkJsdXJ9IC8+O1xuICAgICAgY2FzZSAndGFibGVfcm93JzpcbiAgICAgICAgcmV0dXJuIDxUYWJsZVJvdyB7Li4ucHJvcHN9IC8+O1xuICAgICAgY2FzZSAndGFibGVfY2VsbCc6XG4gICAgICAgIHJldHVybiA8VGFibGVDZWxsIHsuLi5wcm9wc30gb25Gb2N1cz17b3B0cy5vbkZvY3VzfSBvbkJsdXI9e29wdHMub25CbHVyfSAvPjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcbiAgTm9kZS5wcm9wVHlwZXMgPSB7XG4gICAgbm9kZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgfTtcblxuICBjb3JlLm5vcm1hbGl6ZU5vZGUgPSAobm9kZSkgPT4ge1xuICAgIGNvbnN0IGFkZE5vZGVCZWZvcmVBcnJheSA9IFtdO1xuXG4gICAgaWYgKG5vZGUub2JqZWN0ICE9PSAnZG9jdW1lbnQnKSByZXR1cm47XG5cbiAgICBub2RlLmZpbmREZXNjZW5kYW50KChkKSA9PiB7XG4gICAgICBpZiAoZC50eXBlID09PSAndGFibGUnKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlUGF0aCA9IG5vZGUuZ2V0UGF0aChkLmtleSk7XG4gICAgICAgIGNvbnN0IHByZXZOb2RlID0gbm9kZS5nZXRQcmV2aW91c05vZGUodGFibGVQYXRoKTtcbiAgICAgICAgY29uc3QgbmV4dE5vZGUgPSBub2RlLmdldE5leHROb2RlKHRhYmxlUGF0aCk7XG5cbiAgICAgICAgaWYgKCFwcmV2Tm9kZSB8fCAhbmV4dE5vZGUpIHtcbiAgICAgICAgICBhZGROb2RlQmVmb3JlQXJyYXkucHVzaCh7XG4gICAgICAgICAgICBub2RlOiBkLFxuICAgICAgICAgICAgcHJldk5vZGUsXG4gICAgICAgICAgICBuZXh0Tm9kZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCFhZGROb2RlQmVmb3JlQXJyYXkubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIChjaGFuZ2UpID0+IHtcbiAgICAgIGNvbnN0IG5ld0Jsb2NrID0ge1xuICAgICAgICBvYmplY3Q6ICdibG9jaycsXG4gICAgICAgIHR5cGU6ICdkaXYnLFxuICAgICAgfTtcblxuICAgICAgYWRkTm9kZUJlZm9yZUFycmF5LmZvckVhY2goKG4pID0+IHtcbiAgICAgICAgY29uc3QgdGFibGVQYXRoID0gY2hhbmdlLnZhbHVlLmRvY3VtZW50LmdldFBhdGgobi5ub2RlLmtleSkudG9KU09OKCk7XG4gICAgICAgIC8vIHJlbW92aW5nIHRhYmxlSW5kZXhcbiAgICAgICAgbGV0IGluZGV4VG9BZGQgPSB0YWJsZVBhdGguc3BsaWNlKC0xKVswXTtcblxuICAgICAgICBpZiAoIW4ucHJldk5vZGUpIHtcbiAgICAgICAgICAvLyBpbnNlcnRpbmcgYmxvY2sga2V5IGJlZm9yZSB0YWJsZVxuICAgICAgICAgIGNoYW5nZS5pbnNlcnROb2RlQnlQYXRoKHRhYmxlUGF0aCwgaW5kZXhUb0FkZCwgbmV3QmxvY2spO1xuICAgICAgICAgIC8vIHRoaXMgd2lsbCB0cmlnZ2VyIGFub3RoZXIgbm9ybWFsaXphdGlvbiwgd2hpY2ggd2lsbCBmaWd1cmUgb3V0IGlmIHRoZXJlJ3Mgbm90XG4gICAgICAgICAgLy8gYSBibG9jayBhZnRlciB0aGUgdGFibGUgYW5kIGFkZCBpdCwgc28gd2UgZXhpdCBmb3Igbm93XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFuLm5leHROb2RlKSB7XG4gICAgICAgICAgLy8gaW5zZXJ0aW5nIGJsb2NrIGtleSBhZnRlciB0YWJsZVxuICAgICAgICAgIGNoYW5nZS5pbnNlcnROb2RlQnlQYXRoKHRhYmxlUGF0aCwgaW5kZXhUb0FkZCArIDEsIG5ld0Jsb2NrKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgfTtcblxuICBjb3JlLnJlbmRlck5vZGUgPSBOb2RlO1xuICBjb3JlLm5hbWUgPSAndGFibGUnO1xuXG4gIHJldHVybiBjb3JlO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlU3R5bGVTdHJpbmcgPSAocykgPT4ge1xuICBjb25zdCByZWdleCA9IC8oW1xcdy1dKilcXHMqOlxccyooW147XSopL2c7XG4gIGxldCBtYXRjaDtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIHdoaWxlICgobWF0Y2ggPSByZWdleC5leGVjKHMpKSkge1xuICAgIHJlc3VsdFttYXRjaFsxXV0gPSBtYXRjaFsyXS50cmltKCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBjb25zdCByZWFjdEF0dHJpYnV0ZXMgPSAobykgPT4gdG9TdHlsZU9iamVjdChvLCB7IGNhbWVsaXplOiB0cnVlLCBhZGRVbml0czogZmFsc2UgfSk7XG5cbmNvbnN0IGF0dHJpYnV0ZXNUb01hcCA9IChlbCkgPT4gKGFjYywgYXR0cmlidXRlKSA9PiB7XG4gIGNvbnN0IHZhbHVlID0gZWwuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSk7XG4gIGlmICh2YWx1ZSkge1xuICAgIGlmIChhdHRyaWJ1dGUgPT09ICdzdHlsZScpIHtcbiAgICAgIGNvbnN0IHN0eWxlU3RyaW5nID0gZWwuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSk7XG4gICAgICBjb25zdCByZWFjdFN0eWxlT2JqZWN0ID0gcmVhY3RBdHRyaWJ1dGVzKHBhcnNlU3R5bGVTdHJpbmcoc3R5bGVTdHJpbmcpKTtcbiAgICAgIGFjY1snc3R5bGUnXSA9IHJlYWN0U3R5bGVPYmplY3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFjY1thdHRyaWJ1dGVdID0gZWwuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBhY2M7XG59O1xuXG5jb25zdCBkYXRhVG9BdHRyaWJ1dGVzID0gKGRhdGEpID0+IHtcbiAgaWYgKCFkYXRhIHx8ICFkYXRhLmdldCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHJldHVybiBkYXRhLnJlZHVjZSgoYWNjLCB2LCBuYW1lKSA9PiB7XG4gICAgaWYgKHYpIHtcbiAgICAgIGFjY1tjb252ZXJ0KG5hbWUpXSA9IHY7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn07XG5cbmNvbnN0IGF0dHJpYnV0ZXMgPSBbJ2JvcmRlcicsICdjZWxscGFkZGluZycsICdjZWxsc3BhY2luZycsICdjbGFzcycsICdzdHlsZSddO1xuXG5jb25zdCBjZWxsQXR0cmlidXRlcyA9IFsnY29sc3BhbicsICdyb3dzcGFuJywgJ2NsYXNzJywgJ3N0eWxlJ107XG5cbmV4cG9ydCBjb25zdCBzZXJpYWxpemF0aW9uID0ge1xuICBkZXNlcmlhbGl6ZShlbCwgbmV4dCkge1xuICAgIGNvbnN0IHRhZyA9IGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICBjYXNlICd0YWJsZSc6IHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPVxuICAgICAgICAgIGVsLmNoaWxkcmVuLmxlbmd0aCA9PT0gMSAmJiBlbC5jaGlsZHJlblswXS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICd0Ym9keSdcbiAgICAgICAgICAgID8gZWwuY2hpbGRyZW5bMF0uY2hpbGRyZW5cbiAgICAgICAgICAgIDogZWwuY2hpbGRyZW47XG4gICAgICAgIGNvbnN0IGMgPSBBcnJheS5mcm9tKGNoaWxkcmVuKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG9iamVjdDogJ2Jsb2NrJyxcbiAgICAgICAgICB0eXBlOiAndGFibGUnLFxuICAgICAgICAgIG5vZGVzOiBuZXh0KGMpLFxuICAgICAgICAgIGRhdGE6IGF0dHJpYnV0ZXMucmVkdWNlKGF0dHJpYnV0ZXNUb01hcChlbCksIHt9KSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY2FzZSAndGgnOiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgb2JqZWN0OiAnYmxvY2snLFxuICAgICAgICAgIHR5cGU6ICd0YWJsZV9jZWxsJyxcbiAgICAgICAgICBub2RlczogbmV4dChlbC5jaGlsZE5vZGVzKSxcbiAgICAgICAgICBkYXRhOiBjZWxsQXR0cmlidXRlcy5yZWR1Y2UoYXR0cmlidXRlc1RvTWFwKGVsKSwgeyBoZWFkZXI6IHRydWUgfSksXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3RyJzoge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG9iamVjdDogJ2Jsb2NrJyxcbiAgICAgICAgICB0eXBlOiAndGFibGVfcm93JyxcbiAgICAgICAgICBub2RlczogbmV4dChBcnJheS5mcm9tKGVsLmNoaWxkcmVuKSksXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3RkJzoge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG9iamVjdDogJ2Jsb2NrJyxcbiAgICAgICAgICB0eXBlOiAndGFibGVfY2VsbCcsXG4gICAgICAgICAgbm9kZXM6IG5leHQoQXJyYXkuZnJvbShlbC5jaGlsZE5vZGVzKSksXG4gICAgICAgICAgZGF0YTogY2VsbEF0dHJpYnV0ZXMucmVkdWNlKGF0dHJpYnV0ZXNUb01hcChlbCksIHsgaGVhZGVyOiBmYWxzZSB9KSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHNlcmlhbGl6ZShvYmplY3QsIGNoaWxkcmVuKSB7XG4gICAgaWYgKG9iamVjdC5vYmplY3QgIT09ICdibG9jaycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKG9iamVjdC50eXBlKSB7XG4gICAgICBjYXNlICd0YWJsZSc6IHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IGRhdGFUb0F0dHJpYnV0ZXMob2JqZWN0LmRhdGEpO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPHRhYmxlIHsuLi5hdHRyaWJ1dGVzfT5cbiAgICAgICAgICAgIDx0Ym9keT57Y2hpbGRyZW59PC90Ym9keT5cbiAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjYXNlICd0YWJsZV9yb3cnOiB7XG4gICAgICAgIHJldHVybiA8dHI+e2NoaWxkcmVufTwvdHI+O1xuICAgICAgfVxuXG4gICAgICBjYXNlICd0YWJsZV9jZWxsJzoge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gZGF0YVRvQXR0cmlidXRlcyhvYmplY3QuZGF0YSk7XG4gICAgICAgIGRlbGV0ZSBhdHRyaWJ1dGVzLmhlYWRlcjtcblxuICAgICAgICBpZiAob2JqZWN0LmRhdGEuZ2V0KCdoZWFkZXInKSkge1xuICAgICAgICAgIHJldHVybiA8dGggey4uLmF0dHJpYnV0ZXN9PntjaGlsZHJlbn08L3RoPjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gPHRkIHsuLi5hdHRyaWJ1dGVzfT57Y2hpbGRyZW59PC90ZD47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsTUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsT0FBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksYUFBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUssVUFBQSxHQUFBTixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU0sZUFBQSxHQUFBUCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU8sT0FBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsbUJBQUEsR0FBQVQsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFTLFFBQUEsR0FBQVQsT0FBQTtBQUNBLElBQUFVLGtCQUFBLEdBQUFYLHNCQUFBLENBQUFDLE9BQUE7QUFBb0QsSUFBQVcsU0FBQTtBQUFBLFNBQUFDLFFBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBSixDQUFBLE9BQUFHLE1BQUEsQ0FBQUUscUJBQUEsUUFBQUMsQ0FBQSxHQUFBSCxNQUFBLENBQUFFLHFCQUFBLENBQUFMLENBQUEsR0FBQUMsQ0FBQSxLQUFBSyxDQUFBLEdBQUFBLENBQUEsQ0FBQUMsTUFBQSxXQUFBTixDQUFBLFdBQUFFLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQVIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFRLFVBQUEsT0FBQVAs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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_slate","_debug","_GridOn","_tableToolbar","_propTypes","_slatePropTypes","_styles","_reactAttrConverter","_toStyle","_CustomTablePlugin","_excluded","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","log","debug","StyledTable","styled","StyledTableCell","_ref","node","props","_objectWithoutProperties2","Tag","data","get","createElement","minWidth","Table","nodeAttributes","dataToAttributes","_extends2","attributes","onFocus","onBlur","children","propTypes","PropTypes","object","func","SlatePropTypes","oneOfType","arrayOf","isRequired","TableRow","TableCell","header","as","colSpan","moveFocusToBeginningOfTable","exports","change","addedTable","value","document","findDescendant","d","collapseToStartOf","update","remove","setNodeByKey","key","_default","opts","toolbarPlugins","core","CustomTablePlugin","schema","blocks","block","parent","nodes","types","type","objects","utils","getTableBlock","containerNode","getDescendant","ancestors","getAncestors","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","plugins","c","onAddRow","onRemoveRow","onAddColumn","onRemoveColumn","onRemoveTable","onToggleBorder","Node","normalizeNode","addNodeBeforeArray","tablePath","getPath","prevNode","getPreviousNode","nextNode","getNextNode","newBlock","n","indexToAdd","splice","insertNodeByPath","renderNode","name","parseStyleString","s","regex","match","result","exec","trim","reactAttributes","toStyleObject","camelize","addUnits","attributesToMap","el","acc","attribute","getAttribute","styleString","reactStyleObject","reduce","v","convert","cellAttributes","serialization","deserialize","next","tag","tagName","toLowerCase","Array","from","childNodes","serialize"],"sources":["../../../src/plugins/table/index.jsx"],"sourcesContent":["import React from 'react';\nimport { Block } from 'slate';\nimport debug from 'debug';\nimport GridOn from '@mui/icons-material/GridOn';\nimport TableToolbar from './table-toolbar';\nimport PropTypes from 'prop-types';\nimport SlatePropTypes from 'slate-prop-types';\nimport { styled } from '@mui/material/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 StyledTable = styled('table')({});\n\nconst StyledTableCell = styled(({ node, ...props }) => {\n const Tag = node.data.get('header') ? 'th' : 'td';\n return <Tag {...props} />;\n})({\n '&': {\n minWidth: '25px',\n },\n '&[data-cell-type=\"td\"]': {\n minWidth: '25px',\n },\n});\n\nconst Table = (props) => {\n const nodeAttributes = dataToAttributes(props.node.data);\n\n return (\n <StyledTable\n {...props.attributes}\n {...nodeAttributes}\n onFocus={props.onFocus}\n onBlur={props.onBlur}\n >\n <tbody>{props.children}</tbody>\n </StyledTable>\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 = (props) => {\n const Tag = props.node.data.get('header') ? 'th' : 'td';\n const nodeAttributes = dataToAttributes(props.node.data);\n delete nodeAttributes.header;\n\n return (\n <StyledTableCell\n as={Tag}\n node={props.node}\n {...props.attributes}\n {...nodeAttributes}\n colSpan={props.node.data.get('colspan')}\n data-cell-type={Tag}\n onFocus={props.onFocus}\n onBlur={props.onBlur}\n >\n {props.children}\n </StyledTableCell>\n );\n};\n\nTableCell.propTypes = {\n node: SlatePropTypes.node.isRequired,\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\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"],"mappings":"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","ignoreList":[]}
|