@pie-lib/editable-html 11.1.1 → 11.2.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +43 -167
- package/NEXT.CHANGELOG.json +1 -0
- package/lib/block-tags.js +25 -0
- package/lib/block-tags.js.map +1 -0
- package/lib/constants.js +16 -0
- package/lib/constants.js.map +1 -0
- package/lib/editor.js +348 -87
- package/lib/editor.js.map +1 -1
- package/lib/index.js +25 -9
- package/lib/index.js.map +1 -1
- package/lib/plugins/characters/index.js +8 -3
- package/lib/plugins/characters/index.js.map +1 -1
- package/lib/plugins/characters/utils.js +12 -12
- package/lib/plugins/characters/utils.js.map +1 -1
- package/lib/plugins/css/icons/index.js +37 -0
- package/lib/plugins/css/icons/index.js.map +1 -0
- package/lib/plugins/css/index.js +397 -0
- package/lib/plugins/css/index.js.map +1 -0
- package/lib/plugins/customPlugin/index.js +114 -0
- package/lib/plugins/customPlugin/index.js.map +1 -0
- package/lib/plugins/html/index.js +11 -7
- package/lib/plugins/html/index.js.map +1 -1
- package/lib/plugins/image/index.js +2 -1
- package/lib/plugins/image/index.js.map +1 -1
- package/lib/plugins/image/insert-image-handler.js +13 -4
- package/lib/plugins/image/insert-image-handler.js.map +1 -1
- package/lib/plugins/index.js +270 -11
- package/lib/plugins/index.js.map +1 -1
- package/lib/plugins/list/index.js +130 -0
- package/lib/plugins/list/index.js.map +1 -1
- package/lib/plugins/math/index.js +91 -56
- package/lib/plugins/math/index.js.map +1 -1
- package/lib/plugins/media/index.js +5 -2
- package/lib/plugins/media/index.js.map +1 -1
- package/lib/plugins/media/media-dialog.js +98 -57
- package/lib/plugins/media/media-dialog.js.map +1 -1
- package/lib/plugins/rendering/index.js +46 -0
- package/lib/plugins/rendering/index.js.map +1 -0
- package/lib/plugins/respArea/drag-in-the-blank/choice.js +5 -2
- package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +1 -1
- package/lib/plugins/respArea/explicit-constructed-response/index.js +11 -9
- package/lib/plugins/respArea/explicit-constructed-response/index.js.map +1 -1
- package/lib/plugins/respArea/index.js +69 -21
- package/lib/plugins/respArea/index.js.map +1 -1
- package/lib/plugins/respArea/inline-dropdown/index.js +10 -5
- package/lib/plugins/respArea/inline-dropdown/index.js.map +1 -1
- package/lib/plugins/respArea/math-templated/index.js +130 -0
- package/lib/plugins/respArea/math-templated/index.js.map +1 -0
- package/lib/plugins/respArea/utils.js +16 -1
- package/lib/plugins/respArea/utils.js.map +1 -1
- package/lib/plugins/table/CustomTablePlugin.js +133 -0
- package/lib/plugins/table/CustomTablePlugin.js.map +1 -0
- package/lib/plugins/table/index.js +43 -59
- package/lib/plugins/table/index.js.map +1 -1
- package/lib/plugins/table/table-toolbar.js +33 -4
- package/lib/plugins/table/table-toolbar.js.map +1 -1
- package/lib/plugins/textAlign/icons/index.js +226 -0
- package/lib/plugins/textAlign/icons/index.js.map +1 -0
- package/lib/plugins/textAlign/index.js +34 -0
- package/lib/plugins/textAlign/index.js.map +1 -0
- package/lib/plugins/toolbar/default-toolbar.js +82 -27
- package/lib/plugins/toolbar/default-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/done-button.js +5 -2
- package/lib/plugins/toolbar/done-button.js.map +1 -1
- package/lib/plugins/toolbar/editor-and-toolbar.js +18 -19
- package/lib/plugins/toolbar/editor-and-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/toolbar-buttons.js +44 -11
- package/lib/plugins/toolbar/toolbar-buttons.js.map +1 -1
- package/lib/plugins/toolbar/toolbar.js +35 -11
- package/lib/plugins/toolbar/toolbar.js.map +1 -1
- package/lib/serialization.js +233 -44
- package/lib/serialization.js.map +1 -1
- package/package.json +11 -6
- package/src/__tests__/editor.test.jsx +363 -0
- package/src/__tests__/serialization.test.js +291 -0
- package/src/__tests__/utils.js +36 -0
- package/src/block-tags.js +17 -0
- package/src/constants.js +7 -0
- package/src/editor.jsx +303 -49
- package/src/index.jsx +19 -10
- package/src/plugins/characters/index.jsx +11 -3
- package/src/plugins/characters/utils.js +12 -12
- package/src/plugins/css/icons/index.jsx +17 -0
- package/src/plugins/css/index.jsx +346 -0
- package/src/plugins/customPlugin/index.jsx +85 -0
- package/src/plugins/html/index.jsx +9 -6
- package/src/plugins/image/__tests__/__snapshots__/component.test.jsx.snap +51 -0
- package/src/plugins/image/__tests__/__snapshots__/image-toolbar-logic.test.jsx.snap +27 -0
- package/src/plugins/image/__tests__/__snapshots__/image-toolbar.test.jsx.snap +44 -0
- package/src/plugins/image/__tests__/component.test.jsx +41 -0
- package/src/plugins/image/__tests__/image-toolbar-logic.test.jsx +42 -0
- package/src/plugins/image/__tests__/image-toolbar.test.jsx +11 -0
- package/src/plugins/image/__tests__/index.test.js +95 -0
- package/src/plugins/image/__tests__/insert-image-handler.test.js +113 -0
- package/src/plugins/image/__tests__/mock-change.js +15 -0
- package/src/plugins/image/index.jsx +2 -1
- package/src/plugins/image/insert-image-handler.js +13 -6
- package/src/plugins/index.jsx +248 -5
- package/src/plugins/list/__tests__/index.test.js +54 -0
- package/src/plugins/list/index.jsx +130 -0
- package/src/plugins/math/__tests__/__snapshots__/index.test.jsx.snap +48 -0
- package/src/plugins/math/__tests__/index.test.jsx +245 -0
- package/src/plugins/math/index.jsx +87 -56
- package/src/plugins/media/__tests__/index.test.js +75 -0
- package/src/plugins/media/index.jsx +3 -2
- package/src/plugins/media/media-dialog.js +106 -57
- package/src/plugins/rendering/index.js +31 -0
- package/src/plugins/respArea/drag-in-the-blank/choice.jsx +4 -1
- package/src/plugins/respArea/explicit-constructed-response/index.jsx +10 -8
- package/src/plugins/respArea/index.jsx +53 -7
- package/src/plugins/respArea/inline-dropdown/index.jsx +13 -6
- package/src/plugins/respArea/math-templated/index.jsx +104 -0
- package/src/plugins/respArea/utils.jsx +11 -0
- package/src/plugins/table/CustomTablePlugin.js +113 -0
- package/src/plugins/table/__tests__/__snapshots__/table-toolbar.test.jsx.snap +44 -0
- package/src/plugins/table/__tests__/index.test.jsx +401 -0
- package/src/plugins/table/__tests__/table-toolbar.test.jsx +42 -0
- package/src/plugins/table/index.jsx +46 -59
- package/src/plugins/table/table-toolbar.jsx +39 -2
- package/src/plugins/textAlign/icons/index.jsx +139 -0
- package/src/plugins/textAlign/index.jsx +23 -0
- package/src/plugins/toolbar/__tests__/__snapshots__/default-toolbar.test.jsx.snap +923 -0
- package/src/plugins/toolbar/__tests__/__snapshots__/editor-and-toolbar.test.jsx.snap +20 -0
- package/src/plugins/toolbar/__tests__/__snapshots__/toolbar-buttons.test.jsx.snap +36 -0
- package/src/plugins/toolbar/__tests__/__snapshots__/toolbar.test.jsx.snap +46 -0
- package/src/plugins/toolbar/__tests__/default-toolbar.test.jsx +94 -0
- package/src/plugins/toolbar/__tests__/editor-and-toolbar.test.jsx +37 -0
- package/src/plugins/toolbar/__tests__/toolbar-buttons.test.jsx +51 -0
- package/src/plugins/toolbar/__tests__/toolbar.test.jsx +106 -0
- package/src/plugins/toolbar/default-toolbar.jsx +82 -20
- package/src/plugins/toolbar/done-button.jsx +3 -1
- package/src/plugins/toolbar/editor-and-toolbar.jsx +18 -13
- package/src/plugins/toolbar/toolbar-buttons.jsx +52 -11
- package/src/plugins/toolbar/toolbar.jsx +31 -8
- package/src/serialization.jsx +213 -38
- package/README.md +0 -45
- package/deploy.sh +0 -16
- package/playground/image/data.js +0 -59
- package/playground/image/index.html +0 -22
- package/playground/image/index.jsx +0 -81
- package/playground/index.html +0 -25
- package/playground/mathquill/index.html +0 -22
- package/playground/mathquill/index.jsx +0 -155
- package/playground/package.json +0 -15
- package/playground/prod-test/index.html +0 -22
- package/playground/prod-test/index.jsx +0 -28
- package/playground/schema-override/data.js +0 -29
- package/playground/schema-override/image-plugin.jsx +0 -41
- package/playground/schema-override/index.html +0 -21
- package/playground/schema-override/index.jsx +0 -97
- package/playground/serialization/data.js +0 -29
- package/playground/serialization/image-plugin.jsx +0 -41
- package/playground/serialization/index.html +0 -22
- package/playground/serialization/index.jsx +0 -12
- package/playground/static.json +0 -3
- package/playground/table-examples.html +0 -70
- package/playground/webpack.config.js +0 -42
- package/static.json +0 -1
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports["default"] = void 0;
|
|
9
|
+
|
|
10
|
+
var _slateEditTable = _interopRequireDefault(require("slate-edit-table"));
|
|
11
|
+
|
|
12
|
+
var _utils = require("slate-edit-table/dist/utils");
|
|
13
|
+
|
|
14
|
+
var _handlers = require("slate-edit-table/dist/handlers");
|
|
15
|
+
|
|
16
|
+
var _options = _interopRequireDefault(require("slate-edit-table/dist/options"));
|
|
17
|
+
|
|
18
|
+
var _changes = require("slate-edit-table/dist/changes");
|
|
19
|
+
|
|
20
|
+
function onBackspace(event, change, editor, opts) {
|
|
21
|
+
var _startCell$nodes;
|
|
22
|
+
|
|
23
|
+
var value = change.value;
|
|
24
|
+
var startBlock = value.startBlock,
|
|
25
|
+
endBlock = value.endBlock,
|
|
26
|
+
selection = value.selection,
|
|
27
|
+
document = value.document;
|
|
28
|
+
var startCell = document.getClosest(startBlock.key, opts.isCell);
|
|
29
|
+
var endCell = document.getClosest(endBlock.key, opts.isCell);
|
|
30
|
+
var startBlockIndex = startCell === null || startCell === void 0 ? void 0 : (_startCell$nodes = startCell.nodes) === null || _startCell$nodes === void 0 ? void 0 : _startCell$nodes.findIndex(function (block) {
|
|
31
|
+
return block.key == startBlock.key;
|
|
32
|
+
}); // If a cursor is collapsed at the start of the first block, do nothing
|
|
33
|
+
|
|
34
|
+
if (startBlockIndex === 0 && selection.isAtStartOf(startBlock)) {
|
|
35
|
+
if (startBlock.isVoid) {
|
|
36
|
+
// Delete the block normally if it is a void block
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
event.preventDefault();
|
|
41
|
+
return change;
|
|
42
|
+
} // If "normal" deletion, we continue
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
if (startCell === endCell) {
|
|
46
|
+
return undefined;
|
|
47
|
+
} // If cursor is between multiple blocks,
|
|
48
|
+
// we clear the content of the cells.
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
event.preventDefault();
|
|
52
|
+
var blocks = value.blocks; // Get all cells that contains the selection
|
|
53
|
+
|
|
54
|
+
var cells = blocks.map(function (node) {
|
|
55
|
+
return node.type === opts.typeCell ? node : document.getClosest(node.key, function (a) {
|
|
56
|
+
return a.type === opts.typeCell;
|
|
57
|
+
});
|
|
58
|
+
}).toSet(); // If the cursor is at the very end of the first cell, ignore it.
|
|
59
|
+
// If the cursor is at the very start of the last cell, ignore it.
|
|
60
|
+
// This behavior is to compensate hanging selection behaviors:
|
|
61
|
+
// https://github.com/ianstormtaylor/slate/pull/1605
|
|
62
|
+
|
|
63
|
+
var ignoreFirstCell = value.selection.collapseToStart().isAtEndOf(cells.first());
|
|
64
|
+
var ignoreLastCell = value.selection.collapseToEnd().isAtStartOf(cells.last());
|
|
65
|
+
var cellsToClear = cells;
|
|
66
|
+
|
|
67
|
+
if (ignoreFirstCell) {
|
|
68
|
+
cellsToClear = cellsToClear.rest();
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
if (ignoreLastCell) {
|
|
72
|
+
cellsToClear = cellsToClear.butLast();
|
|
73
|
+
} // Clear all the selection
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
cellsToClear.forEach(function (cell) {
|
|
77
|
+
return (0, _changes.clearCell)(opts, change, cell);
|
|
78
|
+
}); // Update the selection properly, and avoid reset of selection
|
|
79
|
+
|
|
80
|
+
var updatedStartCell = change.value.document.getDescendant(cellsToClear.first().key);
|
|
81
|
+
return change.collapseToStartOf(updatedStartCell);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
var KEY_ENTER = 'Enter';
|
|
85
|
+
var KEY_TAB = 'Tab';
|
|
86
|
+
var KEY_BACKSPACE = 'Backspace';
|
|
87
|
+
var KEY_DOWN = 'ArrowDown';
|
|
88
|
+
var KEY_UP = 'ArrowUp';
|
|
89
|
+
/**
|
|
90
|
+
* User is pressing a key in the editor
|
|
91
|
+
*/
|
|
92
|
+
|
|
93
|
+
function onKeyDown(opts, event, change, editor) {
|
|
94
|
+
// Only handle events in cells
|
|
95
|
+
if (!(0, _utils.isSelectionInTable)(opts, change.value)) {
|
|
96
|
+
return undefined;
|
|
97
|
+
} // Build arguments list
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
var args = [event, change, editor, opts];
|
|
101
|
+
|
|
102
|
+
switch (event.key) {
|
|
103
|
+
case KEY_ENTER:
|
|
104
|
+
if (event.metaKey && opts.exitBlockType) {
|
|
105
|
+
return _handlers.onModEnter.apply(void 0, args);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
return _handlers.onEnter.apply(void 0, args);
|
|
109
|
+
|
|
110
|
+
case KEY_TAB:
|
|
111
|
+
return _handlers.onTab.apply(void 0, args);
|
|
112
|
+
|
|
113
|
+
case KEY_BACKSPACE:
|
|
114
|
+
return onBackspace.apply(void 0, args);
|
|
115
|
+
|
|
116
|
+
case KEY_DOWN:
|
|
117
|
+
case KEY_UP:
|
|
118
|
+
return _handlers.onUpDown.apply(void 0, args);
|
|
119
|
+
|
|
120
|
+
default:
|
|
121
|
+
return undefined;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
var _default = function _default(opts) {
|
|
126
|
+
var core = (0, _slateEditTable["default"])(opts);
|
|
127
|
+
var tableOpts = new _options["default"](opts);
|
|
128
|
+
core.onKeyDown = onKeyDown.bind(null, tableOpts);
|
|
129
|
+
return core;
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
exports["default"] = _default;
|
|
133
|
+
//# sourceMappingURL=CustomTablePlugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/plugins/table/CustomTablePlugin.js"],"names":["onBackspace","event","change","editor","opts","value","startBlock","endBlock","selection","document","startCell","getClosest","key","isCell","endCell","startBlockIndex","nodes","findIndex","block","isAtStartOf","isVoid","undefined","preventDefault","blocks","cells","map","node","type","typeCell","a","toSet","ignoreFirstCell","collapseToStart","isAtEndOf","first","ignoreLastCell","collapseToEnd","last","cellsToClear","rest","butLast","forEach","cell","updatedStartCell","getDescendant","collapseToStartOf","KEY_ENTER","KEY_TAB","KEY_BACKSPACE","KEY_DOWN","KEY_UP","onKeyDown","args","metaKey","exitBlockType","onModEnter","onEnter","onTab","onUpDown","core","tableOpts","TableOptions","bind"],"mappings":"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","sourcesContent":["import EditTable from 'slate-edit-table';\nimport { isSelectionInTable } from 'slate-edit-table/dist/utils';\nimport { onEnter, onModEnter, onTab, onUpDown } from 'slate-edit-table/dist/handlers';\nimport TableOptions from 'slate-edit-table/dist/options';\nimport { clearCell } from 'slate-edit-table/dist/changes';\n\nfunction onBackspace(event, change, editor, opts) {\n const { value } = change;\n const { startBlock, endBlock, selection, document } = value;\n\n const startCell = document.getClosest(startBlock.key, opts.isCell);\n const endCell = document.getClosest(endBlock.key, opts.isCell);\n\n const startBlockIndex = startCell?.nodes?.findIndex((block) => block.key == startBlock.key);\n\n // If a cursor is collapsed at the start of the first block, do nothing\n if (startBlockIndex === 0 && selection.isAtStartOf(startBlock)) {\n if (startBlock.isVoid) {\n // Delete the block normally if it is a void block\n return undefined;\n }\n\n event.preventDefault();\n return change;\n }\n\n // If \"normal\" deletion, we continue\n if (startCell === endCell) {\n return undefined;\n }\n\n // If cursor is between multiple blocks,\n // we clear the content of the cells.\n event.preventDefault();\n\n const { blocks } = value;\n\n // Get all cells that contains the selection\n const cells = blocks\n .map((node) =>\n node.type === opts.typeCell ? node : document.getClosest(node.key, (a) => a.type === opts.typeCell),\n )\n .toSet();\n\n // If the cursor is at the very end of the first cell, ignore it.\n // If the cursor is at the very start of the last cell, ignore it.\n // This behavior is to compensate hanging selection behaviors:\n // https://github.com/ianstormtaylor/slate/pull/1605\n const ignoreFirstCell = value.selection.collapseToStart().isAtEndOf(cells.first());\n const ignoreLastCell = value.selection.collapseToEnd().isAtStartOf(cells.last());\n\n let cellsToClear = cells;\n if (ignoreFirstCell) {\n cellsToClear = cellsToClear.rest();\n }\n if (ignoreLastCell) {\n cellsToClear = cellsToClear.butLast();\n }\n\n // Clear all the selection\n cellsToClear.forEach((cell) => clearCell(opts, change, cell));\n\n // Update the selection properly, and avoid reset of selection\n const updatedStartCell = change.value.document.getDescendant(cellsToClear.first().key);\n return change.collapseToStartOf(updatedStartCell);\n}\n\nconst KEY_ENTER = 'Enter';\nconst KEY_TAB = 'Tab';\nconst KEY_BACKSPACE = 'Backspace';\nconst KEY_DOWN = 'ArrowDown';\nconst KEY_UP = 'ArrowUp';\n\n/**\n * User is pressing a key in the editor\n */\nfunction onKeyDown(opts, event, change, editor) {\n // Only handle events in cells\n if (!isSelectionInTable(opts, change.value)) {\n return undefined;\n }\n\n // Build arguments list\n const args = [event, change, editor, opts];\n\n switch (event.key) {\n case KEY_ENTER:\n if (event.metaKey && opts.exitBlockType) {\n return onModEnter(...args);\n }\n return onEnter(...args);\n\n case KEY_TAB:\n return onTab(...args);\n case KEY_BACKSPACE:\n return onBackspace(...args);\n case KEY_DOWN:\n case KEY_UP:\n return onUpDown(...args);\n default:\n return undefined;\n }\n}\n\nexport default (opts) => {\n const core = EditTable(opts);\n\n const tableOpts = new TableOptions(opts);\n\n core.onKeyDown = onKeyDown.bind(null, tableOpts);\n\n return core;\n};\n"],"file":"CustomTablePlugin.js"}
|
|
@@ -13,8 +13,6 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
|
|
|
13
13
|
|
|
14
14
|
var _react = _interopRequireDefault(require("react"));
|
|
15
15
|
|
|
16
|
-
var _slateEditTable = _interopRequireDefault(require("slate-edit-table"));
|
|
17
|
-
|
|
18
16
|
var _slate = require("slate");
|
|
19
17
|
|
|
20
18
|
var _debug = _interopRequireDefault(require("debug"));
|
|
@@ -33,6 +31,8 @@ var _reactAttrConverter = _interopRequireDefault(require("react-attr-converter")
|
|
|
33
31
|
|
|
34
32
|
var _toStyle = require("to-style");
|
|
35
33
|
|
|
34
|
+
var _CustomTablePlugin = _interopRequireDefault(require("./CustomTablePlugin"));
|
|
35
|
+
|
|
36
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
37
|
|
|
38
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; }
|
|
@@ -114,9 +114,7 @@ exports.moveFocusToBeginningOfTable = moveFocusToBeginningOfTable;
|
|
|
114
114
|
var _default = function _default(opts, toolbarPlugins
|
|
115
115
|
/* : {toolbar: {}}[] */
|
|
116
116
|
) {
|
|
117
|
-
var core = (0,
|
|
118
|
-
typeContent: 'div'
|
|
119
|
-
}); // fix outdated schema
|
|
117
|
+
var core = (0, _CustomTablePlugin["default"])(opts); // fix outdated schema
|
|
120
118
|
|
|
121
119
|
if (core.schema && core.schema.blocks) {
|
|
122
120
|
Object.keys(core.schema.blocks).forEach(function (key) {
|
|
@@ -163,7 +161,9 @@ var _default = function _default(opts, toolbarPlugins
|
|
|
163
161
|
};
|
|
164
162
|
|
|
165
163
|
core.toolbar = {
|
|
164
|
+
type: 'table',
|
|
166
165
|
icon: /*#__PURE__*/_react["default"].createElement(_GridOn["default"], null),
|
|
166
|
+
ariaLabel: 'Insert Table',
|
|
167
167
|
onClick: function onClick(value, onChange) {
|
|
168
168
|
log('insert table');
|
|
169
169
|
var change = value.change();
|
|
@@ -184,7 +184,7 @@ var _default = function _default(opts, toolbarPlugins
|
|
|
184
184
|
/**
|
|
185
185
|
* Note - the node may not be a table node - it may be a node inside a table.
|
|
186
186
|
*/
|
|
187
|
-
customToolbar: function customToolbar(node, value, onToolbarDone) {
|
|
187
|
+
customToolbar: function customToolbar(node, value, onToolbarDone, getFocusedValue) {
|
|
188
188
|
log('[customToolbar] node.data: ', node.data);
|
|
189
189
|
var tableBlock = core.utils.getTableBlock(value.document, node === null || node === void 0 ? void 0 : node.key);
|
|
190
190
|
log('[customToolbar] tableBlock: ', tableBlock);
|
|
@@ -235,6 +235,7 @@ var _default = function _default(opts, toolbarPlugins
|
|
|
235
235
|
|
|
236
236
|
var Tb = function Tb() {
|
|
237
237
|
return /*#__PURE__*/_react["default"].createElement(_tableToolbar["default"], {
|
|
238
|
+
getFocusedValue: getFocusedValue,
|
|
238
239
|
plugins: toolbarPlugins,
|
|
239
240
|
onChange: function onChange(c) {
|
|
240
241
|
return onToolbarDone(c, false);
|
|
@@ -282,73 +283,56 @@ var _default = function _default(opts, toolbarPlugins
|
|
|
282
283
|
};
|
|
283
284
|
|
|
284
285
|
core.normalizeNode = function (node) {
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
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
|
+
}
|
|
291
302
|
});
|
|
292
303
|
|
|
293
|
-
if (!
|
|
294
|
-
return;
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
var nodeToSearch = node.getParent(tableAdded.key) || node;
|
|
298
|
-
var shouldAddTextAfterNode = false;
|
|
299
|
-
var indexToNotHaveTableOn = nodeToSearch.nodes.size - 1;
|
|
300
|
-
var indexOfLastTable = nodeToSearch.nodes.findLastIndex(function (d) {
|
|
301
|
-
return d.type === 'table';
|
|
302
|
-
}); // if the last table in the document is of type table, we need to do the change
|
|
303
|
-
|
|
304
|
-
if (indexOfLastTable === indexToNotHaveTableOn) {
|
|
305
|
-
shouldAddTextAfterNode = true;
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
if (!shouldAddTextAfterNode) {
|
|
304
|
+
if (!addNodeBeforeArray.length) {
|
|
309
305
|
return;
|
|
310
306
|
}
|
|
311
307
|
|
|
312
308
|
return function (change) {
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
var newBlock = _slate.Block.create({
|
|
320
|
-
object: 'block',
|
|
321
|
-
type: 'div'
|
|
322
|
-
}); // we add an empty block but that it's going to be normalized
|
|
323
|
-
// because it will add the empty text to it like it should
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
change.insertBlock(newBlock);
|
|
327
|
-
change.withoutNormalization(function () {
|
|
328
|
-
// we do these changes without normalization
|
|
329
|
-
// we get the text previous to the new block added
|
|
330
|
-
var prevText = change.value.document.getPreviousText(newBlock.key);
|
|
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
|
|
331
315
|
|
|
332
|
-
|
|
333
|
-
var _prevText$text, _prevText$text2;
|
|
316
|
+
var indexToAdd = tablePath.splice(-1)[0];
|
|
334
317
|
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
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
|
|
338
322
|
|
|
323
|
+
return;
|
|
324
|
+
}
|
|
339
325
|
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
moveFocusToBeginningOfTable(change);
|
|
346
|
-
});
|
|
347
|
-
}
|
|
326
|
+
if (!n.nextNode) {
|
|
327
|
+
// inserting block key after table
|
|
328
|
+
change.insertNodeByPath(tablePath, indexToAdd + 1, newBlock);
|
|
329
|
+
}
|
|
330
|
+
});
|
|
348
331
|
};
|
|
349
332
|
};
|
|
350
333
|
|
|
351
334
|
core.renderNode = Node;
|
|
335
|
+
core.name = 'table';
|
|
352
336
|
return core;
|
|
353
337
|
};
|
|
354
338
|
|
|
@@ -1 +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","typeContent","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","onClick","onChange","border","insertBlock","supports","isSelectionInTable","customToolbar","onToolbarDone","tableBlock","hasBorder","addRow","changes","insertRow","addColumn","insertColumn","removeRow","removeColumn","removeTable","toggleBorder","set","onDone","Tb","c","Node","normalizeNode","tableAdded","nodeToSearch","getParent","shouldAddTextAfterNode","indexToNotHaveTableOn","size","indexOfLastTable","findLastIndex","tableJSON","removeNodeByKey","newBlock","withoutNormalization","prevText","getPreviousText","moveFocusTo","text","length","moveAnchorTo","renderNode","parseStyleString","s","regex","match","result","exec","trim","reactAttributes","o","camelize","addUnits","attributesToMap","el","acc","attribute","getAttribute","styleString","reactStyleObject","reduce","v","name","cellAttributes","serialization","deserialize","next","tag","tagName","toLowerCase","Array","from","childNodes","serialize"],"mappings":"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","sourcesContent":["import React from 'react';\nimport EditTable from 'slate-edit-table';\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';\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 = EditTable({\n typeContent: 'div',\n });\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 icon: <GridOn />,\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) => {\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 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 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 if (node.object !== 'document') {\n return;\n }\n\n const tableAdded = node.findDescendant((d) => d.data && d.data.get('newTable'));\n\n if (!tableAdded) {\n return;\n }\n\n const nodeToSearch = node.getParent(tableAdded.key) || node;\n let shouldAddTextAfterNode = false;\n const indexToNotHaveTableOn = nodeToSearch.nodes.size - 1;\n const indexOfLastTable = nodeToSearch.nodes.findLastIndex((d) => d.type === 'table');\n\n // if the last table in the document is of type table, we need to do the change\n if (indexOfLastTable === indexToNotHaveTableOn) {\n shouldAddTextAfterNode = true;\n }\n\n if (!shouldAddTextAfterNode) {\n return;\n }\n\n return (change) => {\n if (shouldAddTextAfterNode) {\n const tableJSON = tableAdded.toJSON();\n\n // we remove the table node because otherwise we can't add the empty block after it\n // we need a block that contains text in order to do it\n change.removeNodeByKey(tableAdded.key);\n\n const newBlock = Block.create({\n object: 'block',\n type: 'div',\n });\n\n // we add an empty block but that it's going to be normalized\n // because it will add the empty text to it like it should\n change.insertBlock(newBlock);\n\n change.withoutNormalization(() => {\n // we do these changes without normalization\n\n // we get the text previous to the new block added\n const prevText = change.value.document.getPreviousText(newBlock.key);\n\n if (prevText) {\n // we move focus to the previous text\n change.moveFocusTo(prevText.key, prevText.text?.length).moveAnchorTo(prevText.key, prevText.text?.length);\n }\n\n // we insert the table block between the first block with text and the last block with text\n change.insertBlock({\n ...tableJSON,\n data: {\n ...tableJSON.data,\n newTable: true,\n },\n });\n\n moveFocusToBeginningOfTable(change);\n });\n }\n };\n };\n\n core.renderNode = Node;\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"}
|
|
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"}
|
|
@@ -9,6 +9,8 @@ exports["default"] = exports.TableToolbar = void 0;
|
|
|
9
9
|
|
|
10
10
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
11
11
|
|
|
12
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
13
|
+
|
|
12
14
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
13
15
|
|
|
14
16
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
@@ -41,6 +43,10 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
|
41
43
|
|
|
42
44
|
var _debug = _interopRequireDefault(require("debug"));
|
|
43
45
|
|
|
46
|
+
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; }
|
|
47
|
+
|
|
48
|
+
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; }
|
|
49
|
+
|
|
44
50
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
|
|
45
51
|
|
|
46
52
|
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
@@ -74,6 +80,7 @@ var TableToolbar = /*#__PURE__*/function (_React$Component) {
|
|
|
74
80
|
key: "render",
|
|
75
81
|
value: function render() {
|
|
76
82
|
var _this$props = this.props,
|
|
83
|
+
getFocusedValue = _this$props.getFocusedValue,
|
|
77
84
|
plugins = _this$props.plugins,
|
|
78
85
|
value = _this$props.value,
|
|
79
86
|
onChange = _this$props.onChange,
|
|
@@ -85,7 +92,22 @@ var TableToolbar = /*#__PURE__*/function (_React$Component) {
|
|
|
85
92
|
onToggleBorder = _this$props.onToggleBorder,
|
|
86
93
|
hasBorder = _this$props.hasBorder,
|
|
87
94
|
classes = _this$props.classes;
|
|
88
|
-
log('[render] hasBorder:', hasBorder);
|
|
95
|
+
log('[render] hasBorder:', hasBorder); // we're separating the response area plugin because we want to display it next to the done button
|
|
96
|
+
|
|
97
|
+
var filteredPlugins = (plugins || []).reduce(function (acc, plugin) {
|
|
98
|
+
if (plugin.name === 'response_area') {
|
|
99
|
+
return _objectSpread(_objectSpread({}, acc), {}, {
|
|
100
|
+
respAreaPlugin: plugin
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return _objectSpread(_objectSpread({}, acc), {}, {
|
|
105
|
+
otherPlugins: [].concat((0, _toConsumableArray2["default"])(acc.otherPlugins), [plugin])
|
|
106
|
+
});
|
|
107
|
+
}, {
|
|
108
|
+
respAreaPlugin: null,
|
|
109
|
+
otherPlugins: []
|
|
110
|
+
});
|
|
89
111
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
90
112
|
className: classes.tableToolbar
|
|
91
113
|
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
@@ -100,17 +122,24 @@ var TableToolbar = /*#__PURE__*/function (_React$Component) {
|
|
|
100
122
|
onClick: onRemoveColumn
|
|
101
123
|
}, /*#__PURE__*/_react["default"].createElement(_icons.RemoveColumn, null)), /*#__PURE__*/_react["default"].createElement(_toolbarButtons.Button, {
|
|
102
124
|
onClick: onRemoveTable
|
|
103
|
-
}, /*#__PURE__*/_react["default"].createElement(_icons.RemoveTable, null)),
|
|
125
|
+
}, /*#__PURE__*/_react["default"].createElement(_icons.RemoveTable, null)), (filteredPlugins.otherPlugins || []).map(function (p, index) {
|
|
104
126
|
return /*#__PURE__*/_react["default"].createElement(_defaultToolbar.ToolbarButton, (0, _extends2["default"])({
|
|
105
127
|
key: "plugin-".concat(index)
|
|
106
128
|
}, p.toolbar, {
|
|
107
129
|
value: value,
|
|
108
|
-
onChange: onChange
|
|
130
|
+
onChange: onChange,
|
|
131
|
+
getFocusedValue: getFocusedValue
|
|
109
132
|
}));
|
|
110
133
|
}), /*#__PURE__*/_react["default"].createElement(_toolbarButtons.Button, {
|
|
111
134
|
onClick: onToggleBorder,
|
|
112
135
|
active: hasBorder
|
|
113
|
-
}, /*#__PURE__*/_react["default"].createElement(_BorderAll["default"], null))), /*#__PURE__*/_react["default"].createElement(
|
|
136
|
+
}, /*#__PURE__*/_react["default"].createElement(_BorderAll["default"], null))), filteredPlugins.respAreaPlugin && /*#__PURE__*/_react["default"].createElement(_defaultToolbar.ToolbarButton, (0, _extends2["default"])({
|
|
137
|
+
key: 'plugin-response-area'
|
|
138
|
+
}, filteredPlugins.respAreaPlugin.toolbar, {
|
|
139
|
+
value: value,
|
|
140
|
+
onChange: onChange,
|
|
141
|
+
getFocusedValue: getFocusedValue
|
|
142
|
+
})), /*#__PURE__*/_react["default"].createElement(_doneButton.DoneButton, {
|
|
114
143
|
onClick: this.onDone
|
|
115
144
|
}));
|
|
116
145
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/plugins/table/table-toolbar.jsx"],"names":["log","TableToolbar","e","onDone","props","preventDefault","plugins","value","onChange","onAddRow","onRemoveRow","onAddColumn","onRemoveColumn","onRemoveTable","onToggleBorder","hasBorder","classes","tableToolbar","toolbarButtons","map","p","index","toolbar","React","Component","PropTypes","array","isRequired","object","func","bool","styles","width","display","justifyContent"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/plugins/table/table-toolbar.jsx"],"names":["log","TableToolbar","e","onDone","props","preventDefault","getFocusedValue","plugins","value","onChange","onAddRow","onRemoveRow","onAddColumn","onRemoveColumn","onRemoveTable","onToggleBorder","hasBorder","classes","filteredPlugins","reduce","acc","plugin","name","respAreaPlugin","otherPlugins","tableToolbar","toolbarButtons","map","p","index","toolbar","React","Component","PropTypes","array","isRequired","object","func","bool","styles","width","display","justifyContent"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport { Button } from '../toolbar/toolbar-buttons';\nimport { DoneButton } from '../toolbar/done-button';\nimport BorderAll from '@material-ui/icons/BorderAll';\nimport { ToolbarButton } from '../toolbar/default-toolbar';\n\nimport { AddRow, AddColumn, RemoveColumn, RemoveRow, RemoveTable } from './icons';\nimport PropTypes from 'prop-types';\nimport debug from 'debug';\n\nconst log = debug('@pie-lib:editable-html:plugins:table-toolbar');\n\nexport class TableToolbar extends React.Component {\n static propTypes = {\n plugins: PropTypes.array.isRequired,\n value: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n onAddRow: PropTypes.func.isRequired,\n onRemoveRow: PropTypes.func.isRequired,\n onAddColumn: PropTypes.func.isRequired,\n onRemoveColumn: PropTypes.func.isRequired,\n onRemoveTable: PropTypes.func.isRequired,\n onToggleBorder: PropTypes.func.isRequired,\n hasBorder: PropTypes.bool,\n onDone: PropTypes.func.isRequired,\n classes: PropTypes.object.isRequired,\n };\n\n static defaultProps = {\n plugins: [],\n value: {},\n onChange: () => {},\n };\n\n onDone = (e) => {\n const { onDone } = this.props;\n e.preventDefault();\n onDone();\n };\n\n render() {\n const {\n getFocusedValue,\n plugins,\n value,\n onChange,\n onAddRow,\n onRemoveRow,\n onAddColumn,\n onRemoveColumn,\n onRemoveTable,\n onToggleBorder,\n hasBorder,\n classes,\n } = this.props;\n log('[render] hasBorder:', hasBorder);\n\n // we're separating the response area plugin because we want to display it next to the done button\n const filteredPlugins = (plugins || []).reduce(\n (acc, plugin) => {\n if (plugin.name === 'response_area') {\n return {\n ...acc,\n respAreaPlugin: plugin,\n };\n }\n\n return {\n ...acc,\n otherPlugins: [...acc.otherPlugins, plugin],\n };\n },\n {\n respAreaPlugin: null,\n otherPlugins: [],\n },\n );\n\n return (\n <div className={classes.tableToolbar}>\n <div className={classes.toolbarButtons}>\n <Button onClick={onAddRow}>\n <AddRow />\n </Button>\n <Button onClick={onRemoveRow}>\n <RemoveRow />\n </Button>\n <Button onClick={onAddColumn}>\n <AddColumn />\n </Button>\n <Button onClick={onRemoveColumn}>\n <RemoveColumn />\n </Button>\n <Button onClick={onRemoveTable}>\n <RemoveTable />\n </Button>\n {(filteredPlugins.otherPlugins || []).map((p, index) => (\n <ToolbarButton\n key={`plugin-${index}`}\n {...p.toolbar}\n value={value}\n onChange={onChange}\n getFocusedValue={getFocusedValue}\n />\n ))}\n <Button onClick={onToggleBorder} active={hasBorder}>\n <BorderAll />\n </Button>\n </div>\n {filteredPlugins.respAreaPlugin && (\n <ToolbarButton\n key={'plugin-response-area'}\n {...filteredPlugins.respAreaPlugin.toolbar}\n value={value}\n onChange={onChange}\n getFocusedValue={getFocusedValue}\n />\n )}\n <DoneButton onClick={this.onDone} />\n </div>\n );\n }\n}\n\nconst styles = () => ({\n tableToolbar: {\n width: '100%',\n display: 'flex',\n justifyContent: 'space-between',\n },\n toolbarButtons: {\n display: 'flex',\n },\n});\nexport default withStyles(styles)(TableToolbar);\n"],"file":"table-toolbar.js"}
|