@seafile/sdoc-editor 0.1.56 → 0.1.57-test0
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/dist/basic-sdk/editor.js +1 -1
- package/dist/basic-sdk/extension/constants/element-type.js +5 -1
- package/dist/basic-sdk/extension/constants/index.js +14 -2
- package/dist/basic-sdk/extension/core/queries/index.js +8 -0
- package/dist/basic-sdk/extension/plugins/blockquote/render-elem.js +6 -1
- package/dist/basic-sdk/extension/plugins/check-list/render-elem.js +8 -4
- package/dist/basic-sdk/extension/plugins/header/render-elem.js +6 -2
- package/dist/basic-sdk/extension/plugins/html/plugin.js +8 -6
- package/dist/basic-sdk/extension/plugins/index.js +3 -2
- package/dist/basic-sdk/extension/plugins/list/render-elem.js +16 -2
- package/dist/basic-sdk/extension/plugins/table/constants/index.js +5 -1
- package/dist/basic-sdk/extension/plugins/table/helpers.js +159 -22
- package/dist/basic-sdk/extension/plugins/table/menu/active-table-menu/index.js +3 -3
- package/dist/basic-sdk/extension/plugins/table/plugin.js +2 -2
- package/dist/basic-sdk/extension/plugins/table/render/hooks.js +17 -0
- package/dist/basic-sdk/extension/plugins/table/render/index.css +137 -0
- package/dist/basic-sdk/extension/plugins/table/render/index.js +161 -0
- package/dist/basic-sdk/extension/plugins/table/render/render-cell.js +48 -14
- package/dist/basic-sdk/extension/plugins/table/render/render-row.js +122 -7
- package/dist/basic-sdk/extension/plugins/table/render/resize-handler.js +109 -0
- package/dist/basic-sdk/extension/plugins/table/render/resize-handlers.js +27 -0
- package/dist/basic-sdk/extension/plugins/table/render/table-root.js +38 -0
- package/dist/basic-sdk/extension/plugins/table/render-elem.js +1 -1
- package/dist/basic-sdk/extension/plugins/text-align/helpers.js +43 -0
- package/dist/basic-sdk/extension/plugins/text-align/index.js +2 -0
- package/dist/basic-sdk/extension/plugins/text-align/menu/index.js +105 -0
- package/dist/basic-sdk/extension/plugins/text-align/menu/style.css +61 -0
- package/dist/basic-sdk/extension/render/render-element.js +9 -3
- package/dist/basic-sdk/extension/toolbar/index.js +3 -0
- package/dist/basic-sdk/utils/mouse-event.js +59 -0
- package/dist/basic-sdk/utils/object-utils.js +1 -0
- package/dist/components/doc-info/index.js +19 -4
- package/dist/config.js +16 -0
- package/dist/constants/index.js +1 -0
- package/dist/pages/simple-editor.js +3 -1
- package/package.json +1 -1
- package/public/locales/en/sdoc-editor.json +5 -1
- package/public/media/sdoc-editor-font.css +2 -2
- package/dist/basic-sdk/extension/plugins/table/render/context.js +0 -5
- package/dist/basic-sdk/extension/plugins/table/render/render-table/index.css +0 -72
- package/dist/basic-sdk/extension/plugins/table/render/render-table/index.js +0 -94
package/dist/basic-sdk/editor.js
CHANGED
|
@@ -100,7 +100,7 @@ var SDocEditor = function SDocEditor(_ref) {
|
|
|
100
100
|
doc: slateValue,
|
|
101
101
|
docUuid: config.docUuid
|
|
102
102
|
}), /*#__PURE__*/React.createElement("div", {
|
|
103
|
-
className: "flex-fill o-auto"
|
|
103
|
+
className: "flex-fill o-auto sdoc-editor-article-container"
|
|
104
104
|
}, /*#__PURE__*/React.createElement(Slate, {
|
|
105
105
|
editor: editor,
|
|
106
106
|
value: slateValue,
|
|
@@ -28,4 +28,8 @@ export var TABLE_CELL = 'table-cell';
|
|
|
28
28
|
export var FORMULA = 'formula';
|
|
29
29
|
export var COLUMN = 'column';
|
|
30
30
|
export var TEXT_STYLE = 'text-style';
|
|
31
|
-
export var BOLD_ITALIC = 'bold-italic';
|
|
31
|
+
export var BOLD_ITALIC = 'bold-italic';
|
|
32
|
+
export var TEXT_ALIGN = 'text-align';
|
|
33
|
+
export var ALIGN_LEFT = 'align-left';
|
|
34
|
+
export var ALIGN_RIGHT = 'align-right';
|
|
35
|
+
export var ALIGN_CENTER = 'align-center';
|
|
@@ -2,7 +2,7 @@ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
|
2
2
|
var _MENUS_CONFIG_MAP, _HEADER_TITLE_MAP, _TABLE_ELEMENT_SPAN;
|
|
3
3
|
// extension plugin
|
|
4
4
|
import * as ELEMENT_TYPE from './element-type';
|
|
5
|
-
import { BLOCKQUOTE, HEADER, HEADER1, HEADER2, HEADER3, HEADER4, HEADER5, HEADER6, PARAGRAPH, BOLD, ITALIC, UNDERLINE, STRIKETHROUGH, ORDERED_LIST, UNORDERED_LIST, LIST_ITEM, LIST_LIC, CHECK_LIST, CHECK_LIST_ITEM, LINK, HTML, CODE_BLOCK, CODE_LINE, IMAGE, TABLE, TABLE_CELL, TABLE_ROW, FORMULA, COLUMN, TEXT_STYLE, BOLD_ITALIC } from './element-type';
|
|
5
|
+
import { BLOCKQUOTE, HEADER, HEADER1, HEADER2, HEADER3, HEADER4, HEADER5, HEADER6, PARAGRAPH, BOLD, ITALIC, UNDERLINE, STRIKETHROUGH, ORDERED_LIST, UNORDERED_LIST, LIST_ITEM, LIST_LIC, CHECK_LIST, CHECK_LIST_ITEM, LINK, HTML, CODE_BLOCK, CODE_LINE, IMAGE, TABLE, TABLE_CELL, TABLE_ROW, FORMULA, COLUMN, TEXT_STYLE, BOLD_ITALIC, TEXT_ALIGN, ALIGN_LEFT, ALIGN_RIGHT, ALIGN_CENTER } from './element-type';
|
|
6
6
|
import KEYBOARD from './keyboard';
|
|
7
7
|
|
|
8
8
|
// history
|
|
@@ -69,6 +69,18 @@ export var MENUS_CONFIG_MAP = (_MENUS_CONFIG_MAP = {}, _defineProperty(_MENUS_CO
|
|
|
69
69
|
iconClass: 'sdocfont sdoc-strikethrough',
|
|
70
70
|
text: 'strikethrough',
|
|
71
71
|
type: 'STRIKETHROUGH'
|
|
72
|
+
}]), _defineProperty(_MENUS_CONFIG_MAP, TEXT_ALIGN, [{
|
|
73
|
+
id: ALIGN_LEFT,
|
|
74
|
+
iconClass: 'sdocfont sdoc-align-left',
|
|
75
|
+
type: 'left'
|
|
76
|
+
}, {
|
|
77
|
+
id: ALIGN_CENTER,
|
|
78
|
+
iconClass: 'sdocfont sdoc-align-center',
|
|
79
|
+
type: 'center'
|
|
80
|
+
}, {
|
|
81
|
+
id: ALIGN_RIGHT,
|
|
82
|
+
iconClass: 'sdocfont sdoc-align-right',
|
|
83
|
+
type: 'right'
|
|
72
84
|
}]), _defineProperty(_MENUS_CONFIG_MAP, UNDO, {
|
|
73
85
|
id: UNDO,
|
|
74
86
|
iconClass: 'sdocfont sdoc-revoke',
|
|
@@ -101,4 +113,4 @@ export var TABLE_ELEMENT_POSITION = {
|
|
|
101
113
|
AFTER: 'after',
|
|
102
114
|
BEFORE: 'before'
|
|
103
115
|
};
|
|
104
|
-
export { BLOCKQUOTE, HEADER, HEADER1, HEADER2, HEADER3, HEADER4, HEADER5, HEADER6, PARAGRAPH, BOLD, ITALIC, UNDERLINE, STRIKETHROUGH, ORDERED_LIST, UNORDERED_LIST, LIST_ITEM, LIST_LIC, CHECK_LIST, CHECK_LIST_ITEM, LINK, HTML, CODE_BLOCK, CODE_LINE, IMAGE, TABLE, TABLE_CELL, TABLE_ROW, FORMULA, COLUMN, TEXT_STYLE, BOLD_ITALIC, ELEMENT_TYPE, KEYBOARD };
|
|
116
|
+
export { BLOCKQUOTE, HEADER, HEADER1, HEADER2, HEADER3, HEADER4, HEADER5, HEADER6, PARAGRAPH, BOLD, ITALIC, UNDERLINE, STRIKETHROUGH, ORDERED_LIST, UNORDERED_LIST, LIST_ITEM, LIST_LIC, CHECK_LIST, CHECK_LIST_ITEM, LINK, HTML, CODE_BLOCK, CODE_LINE, IMAGE, TABLE, TABLE_CELL, TABLE_ROW, FORMULA, COLUMN, TEXT_STYLE, BOLD_ITALIC, TEXT_ALIGN, ALIGN_LEFT, ALIGN_RIGHT, ALIGN_CENTER, ELEMENT_TYPE, KEYBOARD };
|
|
@@ -5,6 +5,7 @@ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
|
5
5
|
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
6
6
|
var _excluded = ["at"];
|
|
7
7
|
import { Editor, Text, Path, Span, Element, Node, Range } from '@seafile/slate';
|
|
8
|
+
import { ReactEditor } from '@seafile/slate-react';
|
|
8
9
|
import { match } from '../utils';
|
|
9
10
|
import ObjectUtils from '../../../utils/object-utils';
|
|
10
11
|
|
|
@@ -22,6 +23,13 @@ export var getQueryOptions = function getQueryOptions(editor, options) {
|
|
|
22
23
|
match: newMatch
|
|
23
24
|
});
|
|
24
25
|
};
|
|
26
|
+
export var findPath = function findPath(editor, node, defaultPath) {
|
|
27
|
+
try {
|
|
28
|
+
return ReactEditor.findPath(editor, node);
|
|
29
|
+
} catch (_unused) {
|
|
30
|
+
return defaultPath;
|
|
31
|
+
}
|
|
32
|
+
};
|
|
25
33
|
|
|
26
34
|
// get node
|
|
27
35
|
export var getNode = function getNode(editor, path) {
|
|
@@ -3,8 +3,13 @@ var renderBlockquote = function renderBlockquote(props, editor) {
|
|
|
3
3
|
var attributes = props.attributes,
|
|
4
4
|
children = props.children,
|
|
5
5
|
element = props.element;
|
|
6
|
+
var style = {
|
|
7
|
+
textAlign: element.align
|
|
8
|
+
};
|
|
6
9
|
return /*#__PURE__*/React.createElement("blockquote", Object.assign({
|
|
7
10
|
"data-id": element.id
|
|
8
|
-
}, attributes
|
|
11
|
+
}, attributes, {
|
|
12
|
+
style: style
|
|
13
|
+
}), children);
|
|
9
14
|
};
|
|
10
15
|
export default renderBlockquote;
|
|
@@ -43,13 +43,17 @@ var CheckListItem = /*#__PURE__*/function (_React$PureComponent) {
|
|
|
43
43
|
var _this$props2 = this.props,
|
|
44
44
|
attributes = _this$props2.attributes,
|
|
45
45
|
children = _this$props2.children,
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
element = _this$props2.element;
|
|
47
|
+
var _ref = element || {},
|
|
48
|
+
id = _ref.id,
|
|
49
|
+
align = _ref.align,
|
|
49
50
|
_ref$checked = _ref.checked,
|
|
50
51
|
checked = _ref$checked === void 0 ? false : _ref$checked;
|
|
52
|
+
var style = {
|
|
53
|
+
textAlign: align
|
|
54
|
+
};
|
|
51
55
|
return /*#__PURE__*/React.createElement("div", Object.assign({
|
|
52
|
-
"data-id":
|
|
56
|
+
"data-id": id
|
|
53
57
|
}, attributes, {
|
|
54
58
|
style: style
|
|
55
59
|
}), /*#__PURE__*/React.createElement("span", {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
1
2
|
import React from 'react';
|
|
2
3
|
import { Node } from '@seafile/slate';
|
|
3
4
|
import { Placeholder } from '../../core';
|
|
@@ -9,6 +10,9 @@ var renderHeader = function renderHeader(props, editor) {
|
|
|
9
10
|
var type = element.type;
|
|
10
11
|
var level = type.split('header')[1];
|
|
11
12
|
var Tag = "h".concat(level);
|
|
13
|
+
var style = {
|
|
14
|
+
textAlign: element.align
|
|
15
|
+
};
|
|
12
16
|
var isShowPlaceHolder = false;
|
|
13
17
|
var firstChild = editor.children[0];
|
|
14
18
|
if (firstChild.id === element.id && Node.string(element) === '' && !isComposing) {
|
|
@@ -18,9 +22,9 @@ var renderHeader = function renderHeader(props, editor) {
|
|
|
18
22
|
id: element.id,
|
|
19
23
|
"data-id": element.id
|
|
20
24
|
}, attributes, {
|
|
21
|
-
style: {
|
|
25
|
+
style: _objectSpread({
|
|
22
26
|
position: isShowPlaceHolder ? 'relative' : ''
|
|
23
|
-
}
|
|
27
|
+
}, style)
|
|
24
28
|
}), isShowPlaceHolder && /*#__PURE__*/React.createElement(Placeholder, {
|
|
25
29
|
title: 'Please_enter_title'
|
|
26
30
|
}), children);
|
|
@@ -3,13 +3,15 @@ var withHtml = function withHtml(editor) {
|
|
|
3
3
|
var insertData = editor.insertData;
|
|
4
4
|
var newEditor = editor;
|
|
5
5
|
newEditor.insertData = function (data) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
if (!newEditor.insertFragmentData(data)) {
|
|
7
|
+
var htmlContent = data.getData('text/html') || '';
|
|
8
|
+
if (htmlContent) {
|
|
9
|
+
var content = deserializeHtml(htmlContent);
|
|
10
|
+
editor.insertFragment(content);
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
insertData(data);
|
|
11
14
|
}
|
|
12
|
-
insertData(data);
|
|
13
15
|
};
|
|
14
16
|
return newEditor;
|
|
15
17
|
};
|
|
@@ -9,6 +9,7 @@ import CodeBlockPlugin from './code-block';
|
|
|
9
9
|
import ImagePlugin from './image';
|
|
10
10
|
import TablePlugin from './table';
|
|
11
11
|
import HtmlPlugin from './html';
|
|
12
|
-
|
|
12
|
+
import TextAlignPlugin from './text-align';
|
|
13
|
+
var Plugins = [MarkDownPlugin, HtmlPlugin, HeaderPlugin, LinkPlugin, BlockquotePlugin, ListPlugin, CheckListPlugin, CodeBlockPlugin, ImagePlugin, TablePlugin, TextPlugin, TextAlignPlugin];
|
|
13
14
|
export default Plugins;
|
|
14
|
-
export { MarkDownPlugin, HeaderPlugin, LinkPlugin, BlockquotePlugin, ListPlugin, CheckListPlugin, CodeBlockPlugin, ImagePlugin, TablePlugin, TextPlugin, HtmlPlugin };
|
|
15
|
+
export { MarkDownPlugin, HeaderPlugin, LinkPlugin, BlockquotePlugin, ListPlugin, CheckListPlugin, CodeBlockPlugin, ImagePlugin, TablePlugin, TextPlugin, HtmlPlugin, TextAlignPlugin };
|
|
@@ -7,16 +7,30 @@ var renderList = function renderList(props, editor) {
|
|
|
7
7
|
var Tag = node.type === ORDERED_LIST ? 'ol' : 'ul';
|
|
8
8
|
return /*#__PURE__*/React.createElement(Tag, Object.assign({
|
|
9
9
|
"data-id": node.id,
|
|
10
|
-
className: "list-container"
|
|
10
|
+
className: "list-container d-flex flex-column"
|
|
11
11
|
}, attributes), children);
|
|
12
12
|
};
|
|
13
13
|
var renderListItem = function renderListItem(props, editor) {
|
|
14
14
|
var attributes = props.attributes,
|
|
15
15
|
children = props.children,
|
|
16
16
|
element = props.element;
|
|
17
|
+
var align = element.children[0].align;
|
|
18
|
+
var className = '';
|
|
19
|
+
switch (align) {
|
|
20
|
+
case 'center':
|
|
21
|
+
className = 'align-self-center';
|
|
22
|
+
break;
|
|
23
|
+
case 'right':
|
|
24
|
+
className = 'align-self-end';
|
|
25
|
+
break;
|
|
26
|
+
default:
|
|
27
|
+
className = '';
|
|
28
|
+
}
|
|
17
29
|
return /*#__PURE__*/React.createElement("li", Object.assign({
|
|
18
30
|
"data-id": element.id
|
|
19
|
-
}, attributes
|
|
31
|
+
}, attributes, {
|
|
32
|
+
className: className
|
|
33
|
+
}), children);
|
|
20
34
|
};
|
|
21
35
|
var renderListLic = function renderListLic(props, editor) {
|
|
22
36
|
var attributes = props.attributes,
|
|
@@ -5,4 +5,8 @@ export var EMPTY_SELECTED_RANGE = {
|
|
|
5
5
|
maxRowIndex: -1,
|
|
6
6
|
minColIndex: -1,
|
|
7
7
|
maxColIndex: -1
|
|
8
|
-
};
|
|
8
|
+
};
|
|
9
|
+
export var TABLE_MAX_WIDTH = 672; // 673 = 794 - 2[borderLeft + borderRight] - 120[paddingLeft + paddingRight]
|
|
10
|
+
|
|
11
|
+
export var TABLE_ROW_MIN_HEIGHT = 42;
|
|
12
|
+
export var TABLE_CELL_MIN_WIDTH = 35;
|
|
@@ -3,10 +3,9 @@ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
|
3
3
|
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
4
4
|
import slugid from 'slugid';
|
|
5
5
|
import { Editor, Range, Transforms } from '@seafile/slate';
|
|
6
|
-
import { getNodeType, getParentNode, getSelectedNodeByType, isTextNode, getSelectedElems,
|
|
7
|
-
import { getNodePathById } from '../../../socket/helpers';
|
|
6
|
+
import { getNodeType, getParentNode, getSelectedNodeByType, isTextNode, getSelectedElems, focusEditor, getNode, findPath } from '../../core';
|
|
8
7
|
import { ELEMENT_TYPE, TABLE_ELEMENT, TABLE_ELEMENT_POSITION } from '../../constants';
|
|
9
|
-
import { TABLE_MAX_ROWS, TABLE_MAX_COLUMNS, EMPTY_SELECTED_RANGE } from './constants';
|
|
8
|
+
import { TABLE_MAX_ROWS, TABLE_MAX_COLUMNS, EMPTY_SELECTED_RANGE, TABLE_ROW_MIN_HEIGHT, TABLE_CELL_MIN_WIDTH, TABLE_MAX_WIDTH } from './constants';
|
|
10
9
|
import EventBus from '../../../utils/event-bus';
|
|
11
10
|
import { EXTERNAL_EVENT } from '../../../../constants';
|
|
12
11
|
import ObjectUtils from '../../../utils/object-utils';
|
|
@@ -60,7 +59,10 @@ export var generateTableRow = function generateTableRow(colsCount) {
|
|
|
60
59
|
return {
|
|
61
60
|
id: slugid.nice(),
|
|
62
61
|
type: ELEMENT_TYPE.TABLE_ROW,
|
|
63
|
-
children: children
|
|
62
|
+
children: children,
|
|
63
|
+
style: {
|
|
64
|
+
minHeight: TABLE_ROW_MIN_HEIGHT
|
|
65
|
+
}
|
|
64
66
|
};
|
|
65
67
|
};
|
|
66
68
|
export var generateEmptyTable = function generateEmptyTable() {
|
|
@@ -72,10 +74,18 @@ export var generateEmptyTable = function generateEmptyTable() {
|
|
|
72
74
|
var tableRow = generateTableRow(colsCount);
|
|
73
75
|
children.push(tableRow);
|
|
74
76
|
}
|
|
77
|
+
var columnWidth = Math.max(TABLE_CELL_MIN_WIDTH, parseInt(TABLE_MAX_WIDTH / colsCount));
|
|
78
|
+
var columns = [];
|
|
79
|
+
for (var _i = 0; _i < colsCount; _i++) {
|
|
80
|
+
columns.push({
|
|
81
|
+
width: columnWidth
|
|
82
|
+
});
|
|
83
|
+
}
|
|
75
84
|
return {
|
|
76
85
|
id: slugid.nice(),
|
|
77
86
|
type: ELEMENT_TYPE.TABLE,
|
|
78
|
-
children: children
|
|
87
|
+
children: children,
|
|
88
|
+
columns: columns
|
|
79
89
|
};
|
|
80
90
|
};
|
|
81
91
|
export var insertTable = function insertTable(editor, size, selection) {
|
|
@@ -90,16 +100,16 @@ export var getSelectedInfo = function getSelectedInfo(editor) {
|
|
|
90
100
|
var currentTable = getSelectedNodeByType(editor, ELEMENT_TYPE.TABLE);
|
|
91
101
|
var currentRow = getSelectedNodeByType(editor, ELEMENT_TYPE.TABLE_ROW);
|
|
92
102
|
var currentCell = getSelectedNodeByType(editor, ELEMENT_TYPE.TABLE_CELL);
|
|
93
|
-
var currentCellPath =
|
|
103
|
+
var currentCellPath = findPath(editor, currentCell);
|
|
94
104
|
return {
|
|
95
105
|
table: currentTable,
|
|
96
|
-
tablePath:
|
|
106
|
+
tablePath: findPath(editor, currentTable),
|
|
97
107
|
tableSize: [currentTable.children.length, currentRow.children.length],
|
|
98
108
|
row: currentRow,
|
|
99
|
-
rowPath:
|
|
109
|
+
rowPath: findPath(editor, currentRow),
|
|
100
110
|
rowIndex: currentCellPath[currentCellPath.length - 2],
|
|
101
111
|
cell: currentCell,
|
|
102
|
-
cellPath:
|
|
112
|
+
cellPath: findPath(editor, currentCell),
|
|
103
113
|
cellIndex: currentCellPath[currentCellPath.length - 1]
|
|
104
114
|
};
|
|
105
115
|
};
|
|
@@ -128,13 +138,15 @@ export var setTextStyle = function setTextStyle(editor, style) {
|
|
|
128
138
|
var firstTableCellNodePath;
|
|
129
139
|
selectedNodes.forEach(function (node) {
|
|
130
140
|
if (node.type === ELEMENT_TYPE.TABLE_CELL) {
|
|
131
|
-
var
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
141
|
+
var path = findPath(editor, node);
|
|
142
|
+
if (path) {
|
|
143
|
+
firstTableCellNodePath = firstTableCellNodePath ? firstTableCellNodePath : path;
|
|
144
|
+
Transforms.setNodes(editor, {
|
|
145
|
+
style: _objectSpread(_objectSpread({}, node.style), style)
|
|
146
|
+
}, {
|
|
147
|
+
at: path
|
|
148
|
+
});
|
|
149
|
+
}
|
|
138
150
|
}
|
|
139
151
|
});
|
|
140
152
|
if (firstTableCellNodePath) {
|
|
@@ -151,6 +163,7 @@ export var insertTableElement = function insertTableElement(editor, type) {
|
|
|
151
163
|
var position = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : TABLE_ELEMENT_POSITION.AFTER;
|
|
152
164
|
var count = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;
|
|
153
165
|
var _getSelectedInfo = getSelectedInfo(editor),
|
|
166
|
+
table = _getSelectedInfo.table,
|
|
154
167
|
tablePath = _getSelectedInfo.tablePath,
|
|
155
168
|
tableSize = _getSelectedInfo.tableSize,
|
|
156
169
|
rowIndex = _getSelectedInfo.rowIndex,
|
|
@@ -175,9 +188,11 @@ export var insertTableElement = function insertTableElement(editor, type) {
|
|
|
175
188
|
if (tableSize[1] >= TABLE_MAX_COLUMNS) return;
|
|
176
189
|
var newCellIndex = position === TABLE_ELEMENT_POSITION.AFTER ? cellIndex + 1 : cellIndex;
|
|
177
190
|
var _validCount = Math.min(TABLE_MAX_COLUMNS - tableSize[1], count);
|
|
191
|
+
var newColumns = getTableColumnsAfterInsertColumn(editor, table, newCellIndex, _validCount);
|
|
192
|
+
updateColumnWidth(editor, table, newColumns);
|
|
178
193
|
for (var j = 0; j < _validCount; j++) {
|
|
179
|
-
for (var
|
|
180
|
-
var newCellPath = [].concat(_toConsumableArray(tablePath), [
|
|
194
|
+
for (var _i2 = 0; _i2 < tableSize[0]; _i2++) {
|
|
195
|
+
var newCellPath = [].concat(_toConsumableArray(tablePath), [_i2, newCellIndex]);
|
|
181
196
|
var newCell = generateTableCell();
|
|
182
197
|
Transforms.insertNodes(editor, newCell, {
|
|
183
198
|
at: newCellPath
|
|
@@ -207,6 +222,7 @@ var removeTable = function removeTable(editor, path) {
|
|
|
207
222
|
};
|
|
208
223
|
export var removeTableElement = function removeTableElement(editor, type) {
|
|
209
224
|
var _getSelectedInfo3 = getSelectedInfo(editor),
|
|
225
|
+
table = _getSelectedInfo3.table,
|
|
210
226
|
tablePath = _getSelectedInfo3.tablePath,
|
|
211
227
|
tableSize = _getSelectedInfo3.tableSize,
|
|
212
228
|
rowPath = _getSelectedInfo3.rowPath,
|
|
@@ -261,10 +277,13 @@ export var removeTableElement = function removeTableElement(editor, type) {
|
|
|
261
277
|
removeTable(editor, tablePath);
|
|
262
278
|
return;
|
|
263
279
|
}
|
|
264
|
-
|
|
280
|
+
var _columns = getTableColumns(editor, table);
|
|
281
|
+
var _newColumns = [].concat(_toConsumableArray(_columns.slice(0, minColIndex)), _toConsumableArray(_columns.slice(maxColIndex + 1)));
|
|
282
|
+
updateColumnWidth(editor, table, _newColumns);
|
|
283
|
+
for (var _i3 = 0; _i3 < tableSize[0]; _i3++) {
|
|
265
284
|
for (var j = minColIndex; j <= maxColIndex; j++) {
|
|
266
285
|
// count
|
|
267
|
-
var cellPath = [].concat(_toConsumableArray(tablePath), [
|
|
286
|
+
var cellPath = [].concat(_toConsumableArray(tablePath), [_i3, minColIndex]);
|
|
268
287
|
Transforms.removeNodes(editor, {
|
|
269
288
|
at: cellPath
|
|
270
289
|
});
|
|
@@ -274,8 +293,12 @@ export var removeTableElement = function removeTableElement(editor, type) {
|
|
|
274
293
|
focusEditor(editor, _focusPath3);
|
|
275
294
|
return;
|
|
276
295
|
}
|
|
277
|
-
|
|
278
|
-
|
|
296
|
+
var columns = getTableColumns(editor, table);
|
|
297
|
+
var newColumns = columns.slice(0);
|
|
298
|
+
newColumns.splice(cellIndex, 1);
|
|
299
|
+
updateColumnWidth(editor, table, newColumns);
|
|
300
|
+
for (var _i4 = 0; _i4 < tableSize[0]; _i4++) {
|
|
301
|
+
var _cellPath = [].concat(_toConsumableArray(tablePath), [_i4, cellIndex]);
|
|
279
302
|
Transforms.removeNodes(editor, {
|
|
280
303
|
at: _cellPath
|
|
281
304
|
});
|
|
@@ -292,4 +315,118 @@ export var setTableSelectedRange = function setTableSelectedRange(editor, range)
|
|
|
292
315
|
return;
|
|
293
316
|
}
|
|
294
317
|
editor.tableSelectedRange = EMPTY_SELECTED_RANGE;
|
|
318
|
+
};
|
|
319
|
+
export var updateTableRowHeight = function updateTableRowHeight(editor, element, rowHeight) {
|
|
320
|
+
var path = findPath(editor, element);
|
|
321
|
+
var targetNode = getNode(editor, path);
|
|
322
|
+
if (targetNode.style && targetNode.style.minHeight === rowHeight) return;
|
|
323
|
+
Transforms.setNodes(editor, {
|
|
324
|
+
style: _objectSpread(_objectSpread({}, targetNode.style), {}, {
|
|
325
|
+
minHeight: rowHeight
|
|
326
|
+
})
|
|
327
|
+
}, {
|
|
328
|
+
at: path
|
|
329
|
+
});
|
|
330
|
+
};
|
|
331
|
+
export var updateColumnWidth = function updateColumnWidth(editor, element, columns) {
|
|
332
|
+
var path = findPath(editor, element);
|
|
333
|
+
Transforms.setNodes(editor, {
|
|
334
|
+
columns: columns
|
|
335
|
+
}, {
|
|
336
|
+
at: path
|
|
337
|
+
});
|
|
338
|
+
};
|
|
339
|
+
export var getTableColumnsWidth = function getTableColumnsWidth() {
|
|
340
|
+
var columns = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
341
|
+
if (!Array.isArray(columns) || columns.length === 0) return 0;
|
|
342
|
+
return columns.reduce(function (pre, cur) {
|
|
343
|
+
return pre + cur.width;
|
|
344
|
+
}, 0);
|
|
345
|
+
};
|
|
346
|
+
export var getTableColumnsAfterInsertColumn = function getTableColumnsAfterInsertColumn(editor, element, targetColumnIndex, insertColumnCount) {
|
|
347
|
+
var columns = getTableColumns(editor, element);
|
|
348
|
+
var newColumns = columns.slice(0);
|
|
349
|
+
var totalColumnsWidth = getTableColumnsWidth(columns);
|
|
350
|
+
var targetColumn = columns[targetColumnIndex] || columns[targetColumnIndex - 1];
|
|
351
|
+
var targetInsertColumnsWidth = targetColumn.width * insertColumnCount;
|
|
352
|
+
|
|
353
|
+
// Currently in scrolling state, insert directly
|
|
354
|
+
if (totalColumnsWidth > TABLE_MAX_WIDTH) {
|
|
355
|
+
for (var i = 0; i < insertColumnCount; i++) {
|
|
356
|
+
newColumns.splice(targetColumnIndex, 0, targetColumn);
|
|
357
|
+
}
|
|
358
|
+
return newColumns;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
// Not currently scrolling
|
|
362
|
+
// It is not a scroll state after inserting a new column
|
|
363
|
+
if (totalColumnsWidth + targetInsertColumnsWidth < TABLE_MAX_WIDTH) {
|
|
364
|
+
for (var _i5 = 0; _i5 < insertColumnCount; _i5++) {
|
|
365
|
+
newColumns.push(targetColumn);
|
|
366
|
+
}
|
|
367
|
+
return newColumns;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
// After inserting a new column is a scrolling state
|
|
371
|
+
for (var _i6 = 0; _i6 < insertColumnCount; _i6++) {
|
|
372
|
+
totalColumnsWidth += targetColumn.width;
|
|
373
|
+
newColumns.splice(targetColumnIndex, 0, targetColumn);
|
|
374
|
+
}
|
|
375
|
+
var proportion = totalColumnsWidth / (TABLE_MAX_WIDTH - 1);
|
|
376
|
+
return newColumns.map(function (column) {
|
|
377
|
+
return _objectSpread(_objectSpread({}, column), {}, {
|
|
378
|
+
width: Math.max(parseInt(column.width / proportion), TABLE_CELL_MIN_WIDTH)
|
|
379
|
+
});
|
|
380
|
+
});
|
|
381
|
+
};
|
|
382
|
+
export var getTableColumns = function getTableColumns(editor, element) {
|
|
383
|
+
if (!element) return [];
|
|
384
|
+
var tableElement = element;
|
|
385
|
+
if (element.type === ELEMENT_TYPE.TABLE_CELL) {
|
|
386
|
+
var cellPath = findPath(editor, element);
|
|
387
|
+
var tablePath = cellPath.slice(0, -2);
|
|
388
|
+
tableElement = getNode(editor, tablePath);
|
|
389
|
+
}
|
|
390
|
+
var _tableElement = tableElement,
|
|
391
|
+
columns = _tableElement.columns,
|
|
392
|
+
children = _tableElement.children;
|
|
393
|
+
if (columns) return columns;
|
|
394
|
+
var columnsCount = children[0].children.length;
|
|
395
|
+
var initColumns = [];
|
|
396
|
+
for (var i = 0; i < columnsCount; i++) {
|
|
397
|
+
var column = {
|
|
398
|
+
width: Math.max(TABLE_CELL_MIN_WIDTH, parseInt(TABLE_MAX_WIDTH / columnsCount))
|
|
399
|
+
};
|
|
400
|
+
initColumns.push(column);
|
|
401
|
+
}
|
|
402
|
+
return initColumns;
|
|
403
|
+
};
|
|
404
|
+
export var getCellColumn = function getCellColumn(editor, cellElement) {
|
|
405
|
+
var column = {
|
|
406
|
+
width: TABLE_CELL_MIN_WIDTH
|
|
407
|
+
};
|
|
408
|
+
if (!editor || !cellElement) return column;
|
|
409
|
+
var cellPath = findPath(editor, cellElement);
|
|
410
|
+
if (!cellPath) return column;
|
|
411
|
+
var pathLength = cellPath.length;
|
|
412
|
+
var cellIndex = cellPath[pathLength - 1];
|
|
413
|
+
var tablePath = cellPath.slice(0, -2);
|
|
414
|
+
var tableElement = getNode(editor, tablePath);
|
|
415
|
+
var columns = tableElement.columns;
|
|
416
|
+
if (columns) {
|
|
417
|
+
column = columns[cellIndex];
|
|
418
|
+
} else {
|
|
419
|
+
var columnsCount = tableElement.children[0].children.length;
|
|
420
|
+
column = {
|
|
421
|
+
width: Math.max(TABLE_CELL_MIN_WIDTH, parseInt(TABLE_MAX_WIDTH / columnsCount))
|
|
422
|
+
};
|
|
423
|
+
}
|
|
424
|
+
return column;
|
|
425
|
+
};
|
|
426
|
+
export var getFirstTableCell = function getFirstTableCell(element) {
|
|
427
|
+
var tableCellElement = element;
|
|
428
|
+
while (tableCellElement && !(tableCellElement.hasAttribute('row-index') && tableCellElement.hasAttribute('cell-index'))) {
|
|
429
|
+
tableCellElement = tableCellElement.parentNode;
|
|
430
|
+
}
|
|
431
|
+
return tableCellElement;
|
|
295
432
|
};
|
|
@@ -54,7 +54,7 @@ var ActiveTableMenu = /*#__PURE__*/function (_Component) {
|
|
|
54
54
|
var t = _this.props.t;
|
|
55
55
|
return /*#__PURE__*/React.createElement(CommonMenu, {
|
|
56
56
|
id: "text-align",
|
|
57
|
-
iconClass: "sdocfont sdoc-left
|
|
57
|
+
iconClass: "sdocfont sdoc-align-left mr-1",
|
|
58
58
|
ref: function ref(_ref) {
|
|
59
59
|
return _this.textAlignRef = _ref;
|
|
60
60
|
}
|
|
@@ -62,12 +62,12 @@ var ActiveTableMenu = /*#__PURE__*/function (_Component) {
|
|
|
62
62
|
className: "dropdown-item",
|
|
63
63
|
onClick: _this.setTextAlignStyle.bind(_assertThisInitialized(_this), 'left')
|
|
64
64
|
}, /*#__PURE__*/React.createElement("i", {
|
|
65
|
-
className: "sdocfont sdoc-left
|
|
65
|
+
className: "sdocfont sdoc-align-left mr-2"
|
|
66
66
|
}), t('left')), /*#__PURE__*/React.createElement("button", {
|
|
67
67
|
className: "dropdown-item",
|
|
68
68
|
onClick: _this.setTextAlignStyle.bind(_assertThisInitialized(_this), 'center')
|
|
69
69
|
}, /*#__PURE__*/React.createElement("i", {
|
|
70
|
-
className: "sdocfont sdoc-center
|
|
70
|
+
className: "sdocfont sdoc-align-center mr-2"
|
|
71
71
|
}), t('center')), /*#__PURE__*/React.createElement("button", {
|
|
72
72
|
className: "dropdown-item",
|
|
73
73
|
onClick: _this.setTextAlignStyle.bind(_assertThisInitialized(_this), 'right')
|
|
@@ -9,7 +9,7 @@ import { getNodeType, getParentNode, getSelectedNodeByType, isTextNode, isLastNo
|
|
|
9
9
|
import { ELEMENT_TYPE, TABLE_ELEMENT, TABLE_ELEMENT_POSITION, KEYBOARD } from '../../constants';
|
|
10
10
|
import { TABLE_MAX_ROWS, EMPTY_SELECTED_RANGE } from './constants';
|
|
11
11
|
import ObjectUtils from '../../../utils/object-utils';
|
|
12
|
-
import { getSelectedInfo } from './helpers';
|
|
12
|
+
import { getSelectedInfo, insertTableElement } from './helpers';
|
|
13
13
|
var deleteHandler = function deleteHandler(editor) {
|
|
14
14
|
var selection = editor.selection,
|
|
15
15
|
tableSelectedRange = editor.tableSelectedRange;
|
|
@@ -352,7 +352,7 @@ var withTable = function withTable(editor) {
|
|
|
352
352
|
tablePath = _getSelectedInfo4.tablePath,
|
|
353
353
|
tableSize = _getSelectedInfo4.tableSize;
|
|
354
354
|
if (tableSize[0] === TABLE_MAX_ROWS) return;
|
|
355
|
-
|
|
355
|
+
insertTableElement(newEditor, TABLE_ELEMENT.ROW, TABLE_ELEMENT_POSITION.AFTER);
|
|
356
356
|
Transforms.select(newEditor, [].concat(_toConsumableArray(tablePath), [tableSize[0], 0]));
|
|
357
357
|
return;
|
|
358
358
|
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { createContext, useContext } from 'react';
|
|
2
|
+
export var TableRootContext = createContext();
|
|
3
|
+
export var useTableRootContext = function useTableRootContext() {
|
|
4
|
+
return useContext(TableRootContext);
|
|
5
|
+
};
|
|
6
|
+
export var TableContext = createContext();
|
|
7
|
+
export var useTableContext = function useTableContext() {
|
|
8
|
+
return useContext(TableContext);
|
|
9
|
+
};
|
|
10
|
+
export var ResizeHandlersContext = createContext();
|
|
11
|
+
export var useResizeHandlersContext = function useResizeHandlersContext() {
|
|
12
|
+
return useContext(ResizeHandlersContext);
|
|
13
|
+
};
|
|
14
|
+
export var SettingSelectRangeContext = createContext();
|
|
15
|
+
export var useSettingSelectRangeContext = function useSettingSelectRangeContext() {
|
|
16
|
+
return useContext(SettingSelectRangeContext);
|
|
17
|
+
};
|