@seafile/seafile-editor 2.0.19 → 2.0.20-beta
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/constants/event-types.js +4 -2
- package/dist/editors/inline-editor/index.js +34 -0
- package/dist/extension/commons/dropdown-menu-item/index.css +54 -0
- package/dist/extension/commons/dropdown-menu-item/index.js +60 -0
- package/dist/extension/commons/insert-element-dialog/index.js +50 -18
- package/dist/extension/commons/menu/menu-drop-down.js +1 -1
- package/dist/extension/commons/menu-shortcut-indicator/index.js +22 -0
- package/dist/extension/commons/menu-shortcut-indicator/style.css +18 -0
- package/dist/extension/commons/more-menu/index.js +2 -6
- package/dist/extension/constants/menus-config.js +7 -1
- package/dist/extension/plugins/code-block/menu/index.js +11 -12
- package/dist/extension/plugins/column/menu/index.js +14 -13
- package/dist/extension/plugins/formula/menu/formula-modal.js +2 -2
- package/dist/extension/plugins/formula/menu/index.js +15 -44
- package/dist/extension/plugins/header/menu/style.css +2 -2
- package/dist/extension/plugins/image/menu/image-menu-dialog.js +7 -10
- package/dist/extension/plugins/image/menu/image-menu-popover.js +1 -2
- package/dist/extension/plugins/image/menu/index.css +36 -0
- package/dist/extension/plugins/image/menu/index.js +57 -52
- package/dist/extension/plugins/table/constant.js +4 -1
- package/dist/extension/plugins/table/context-menu/horizontal-align-popover/index.js +77 -0
- package/dist/extension/plugins/table/context-menu/horizontal-align-popover/style.css +24 -0
- package/dist/extension/plugins/table/context-menu/index.js +20 -1
- package/dist/extension/plugins/table/context-menu/style.css +19 -0
- package/dist/extension/plugins/table/menu/index.js +14 -38
- package/dist/extension/plugins/table/menu/style.css +1 -0
- package/dist/extension/plugins/table/render-elem/index.js +6 -6
- package/dist/extension/toolbar/header-toolbar/index.js +17 -48
- package/dist/extension/toolbar/header-toolbar/insert-toolbar/index.js +100 -0
- package/dist/extension/toolbar/header-toolbar/insert-toolbar/style.css +47 -0
- package/dist/extension/toolbar/inline-toolbar/index.css +4 -0
- package/dist/extension/toolbar/inline-toolbar/index.js +17 -24
- package/dist/pages/longtext-inline-editor/fallback-editor.js +14 -0
- package/package.json +1 -1
- package/public/locales/en/seafile-editor.json +6 -1
- package/public/locales/zh-CN/seafile-editor.json +6 -1
- package/public/locales/zh_CN/seafile-editor.json +6 -1
- package/public/media/seafile-editor-font/iconfont.eot +0 -0
- package/public/media/seafile-editor-font/iconfont.svg +68 -60
- package/public/media/seafile-editor-font/iconfont.ttf +0 -0
- package/public/media/seafile-editor-font/iconfont.woff +0 -0
- package/public/media/seafile-editor-font/iconfont.woff2 +0 -0
- package/public/media/seafile-editor-font.css +139 -123
- /package/dist/extension/plugins/image/menu/{style.css → image-menu-popover.css} +0 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
.sf-insert-image-menu-popover-container {
|
|
2
|
+
padding: 8px 0;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.sf-insert-video-menu-popover-container {
|
|
6
|
+
padding: 8px 0;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.sf-dropdown-menu .sf-dropdown-menu-container {
|
|
10
|
+
min-width: 12rem;
|
|
11
|
+
z-index: 1500;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.sf-sub-dropdown-menu .popover {
|
|
15
|
+
left: -8px !important;
|
|
16
|
+
z-index: 1070;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.sf-sub-dropdown-menu .bs-popover-auto[x-placement^="left"] {
|
|
20
|
+
left: 8px !important;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.sf-dropdown-menu .sf-dropdown-menu-item {
|
|
24
|
+
height: 30px;
|
|
25
|
+
width: 100%;
|
|
26
|
+
padding: 3px 12px;
|
|
27
|
+
user-select: none;
|
|
28
|
+
display: flex;
|
|
29
|
+
align-items: center;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.sf-sub-dropdown-menu:hover,
|
|
33
|
+
.sf-dropdown-menu .sf-dropdown-menu-item:hover {
|
|
34
|
+
background-color: rgb(245, 245, 245);
|
|
35
|
+
cursor: pointer;
|
|
36
|
+
}
|
|
@@ -12,67 +12,72 @@ var _menusConfig = require("../../../constants/menus-config");
|
|
|
12
12
|
var _eventBus = _interopRequireDefault(require("../../../../utils/event-bus"));
|
|
13
13
|
var _eventTypes = require("../../../../constants/event-types");
|
|
14
14
|
var _helper = require("../helper");
|
|
15
|
-
var
|
|
16
|
-
var
|
|
15
|
+
var _dropdownMenuItem = _interopRequireDefault(require("../../../commons/dropdown-menu-item"));
|
|
16
|
+
var _reactstrap = require("reactstrap");
|
|
17
|
+
var _reactI18next = require("react-i18next");
|
|
18
|
+
var _constants = require("../../../../constants");
|
|
19
|
+
require("./index.css");
|
|
17
20
|
const menuConfig = _menusConfig.MENUS_CONFIG_MAP[_elementTypes.IMAGE];
|
|
18
21
|
const ImageMenu = _ref => {
|
|
19
22
|
let {
|
|
20
|
-
isRichEditor,
|
|
21
|
-
className,
|
|
22
23
|
readonly,
|
|
23
24
|
editor,
|
|
24
|
-
|
|
25
|
+
toggle
|
|
25
26
|
} = _ref;
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
if (clickIsInMenu) return;
|
|
33
|
-
}
|
|
34
|
-
setIsShowImagePopover(false);
|
|
35
|
-
unregisterEventHandler();
|
|
36
|
-
setTimeout(() => {
|
|
37
|
-
const eventBus = _eventBus.default.getInstance();
|
|
38
|
-
eventBus.dispatch(_eventTypes.INTERNAL_EVENTS.ON_TOGGLE_IMAGE_POPOVER, false);
|
|
39
|
-
}, 150);
|
|
40
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
41
|
-
}, []);
|
|
42
|
-
const registerEventHandler = (0, _react.useCallback)(() => {
|
|
43
|
-
document.addEventListener('mousedown', handleChangePopoverDisplayed);
|
|
44
|
-
}, [handleChangePopoverDisplayed]);
|
|
45
|
-
const unregisterEventHandler = (0, _react.useCallback)(() => {
|
|
46
|
-
document.removeEventListener('mousedown', handleChangePopoverDisplayed);
|
|
47
|
-
}, [handleChangePopoverDisplayed]);
|
|
48
|
-
const onImageMenuToggle = (0, _react.useCallback)(e => {
|
|
27
|
+
const {
|
|
28
|
+
t
|
|
29
|
+
} = (0, _reactI18next.useTranslation)(_constants.TRANSLATE_NAMESPACE);
|
|
30
|
+
const fileInputRef = (0, _react.useRef)(null);
|
|
31
|
+
const openFileDIalog = (0, _react.useCallback)(e => {
|
|
32
|
+
var _fileInputRef$current;
|
|
49
33
|
e.stopPropagation();
|
|
34
|
+
toggle && toggle();
|
|
50
35
|
e.nativeEvent.stopImmediatePropagation();
|
|
51
|
-
|
|
36
|
+
(_fileInputRef$current = fileInputRef.current) === null || _fileInputRef$current === void 0 ? void 0 : _fileInputRef$current.click();
|
|
37
|
+
}, [toggle]);
|
|
38
|
+
const handleInsertNetworkImage = () => {
|
|
39
|
+
toggle && toggle();
|
|
52
40
|
const eventBus = _eventBus.default.getInstance();
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
41
|
+
eventBus.dispatch(_eventTypes.INTERNAL_EVENTS.INSERT_ELEMENT, {
|
|
42
|
+
type: _elementTypes.IMAGE
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
const handleUploadLocalImage = (0, _react.useCallback)(async e => {
|
|
46
|
+
const file = e.target.files[0];
|
|
47
|
+
if (!file) return;
|
|
48
|
+
(0, _helper.handleUpdateImage)(editor, file);
|
|
49
|
+
e.target.value = null;
|
|
50
|
+
}, [editor]);
|
|
51
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
|
|
52
|
+
disabled: readonly,
|
|
53
|
+
menuConfig: menuConfig,
|
|
54
|
+
className: "pr-2"
|
|
55
|
+
}, !readonly && /*#__PURE__*/_react.default.createElement("i", {
|
|
56
|
+
className: "iconfont icon-sdoc-right-slide sf-dropdown-item-right-icon"
|
|
57
|
+
})), !readonly && /*#__PURE__*/_react.default.createElement(_reactstrap.UncontrolledPopover, {
|
|
58
|
+
target: menuConfig.id,
|
|
59
|
+
trigger: "hover",
|
|
60
|
+
className: "sf-menu-popover sf-dropdown-menu sf-sub-dropdown-menu sf-insert-image-menu-popover",
|
|
61
|
+
placement: "right-start",
|
|
62
|
+
hideArrow: true,
|
|
63
|
+
fade: false
|
|
64
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
65
|
+
className: "sf-insert-image-menu-popover-container sf-dropdown-menu-container"
|
|
66
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
67
|
+
className: "sf-dropdown-menu-item",
|
|
68
|
+
onClick: openFileDIalog
|
|
69
|
+
}, t('Upload_local_image')), /*#__PURE__*/_react.default.createElement("div", {
|
|
70
|
+
className: "sf-dropdown-menu-item",
|
|
71
|
+
onClick: handleInsertNetworkImage
|
|
72
|
+
}, t('Insert_network_image')))), /*#__PURE__*/_react.default.createElement("input", {
|
|
73
|
+
ref: fileInputRef,
|
|
74
|
+
onClick: openFileDIalog,
|
|
75
|
+
onChange: handleUploadLocalImage,
|
|
76
|
+
style: {
|
|
77
|
+
display: 'none'
|
|
78
|
+
},
|
|
79
|
+
type: "file",
|
|
80
|
+
accept: "image/*"
|
|
76
81
|
}));
|
|
77
82
|
};
|
|
78
83
|
var _default = exports.default = ImageMenu;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.TABLE_ROW_NODE_NAME = exports.TABLE_MAX_ROWS = exports.TABLE_MAX_COLUMNS = exports.TABLE_ELEMENT_POSITION = exports.TABLE_ELEMENT = exports.TABLE_CELL_NODE_NAME = exports.TABLE_BODY_NODE_NAME = void 0;
|
|
6
|
+
exports.TABLE_ROW_NODE_NAME = exports.TABLE_MAX_ROWS = exports.TABLE_MAX_COLUMNS = exports.TABLE_ELEMENT_POSITION = exports.TABLE_ELEMENT = exports.TABLE_CELL_STYLE = exports.TABLE_CELL_NODE_NAME = exports.TABLE_BODY_NODE_NAME = void 0;
|
|
7
7
|
const TABLE_CELL_NODE_NAME = exports.TABLE_CELL_NODE_NAME = 'td';
|
|
8
8
|
const TABLE_ROW_NODE_NAME = exports.TABLE_ROW_NODE_NAME = 'tr';
|
|
9
9
|
const TABLE_BODY_NODE_NAME = exports.TABLE_BODY_NODE_NAME = 'tbody';
|
|
@@ -18,4 +18,7 @@ const TABLE_ELEMENT = exports.TABLE_ELEMENT = {
|
|
|
18
18
|
const TABLE_ELEMENT_POSITION = exports.TABLE_ELEMENT_POSITION = {
|
|
19
19
|
AFTER: 'after',
|
|
20
20
|
BEFORE: 'before'
|
|
21
|
+
};
|
|
22
|
+
const TABLE_CELL_STYLE = exports.TABLE_CELL_STYLE = {
|
|
23
|
+
TEXT_ALIGN: 'textAlign'
|
|
21
24
|
};
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
10
|
+
var _reactI18next = require("react-i18next");
|
|
11
|
+
var _reactstrap = require("reactstrap");
|
|
12
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
13
|
+
var _core = require("../../../../core");
|
|
14
|
+
var _constants = require("../../../../../constants");
|
|
15
|
+
var _tableOperations = require("../../table-operations");
|
|
16
|
+
require("./style.css");
|
|
17
|
+
const HorizontalAlignPopover = _ref => {
|
|
18
|
+
let {
|
|
19
|
+
target,
|
|
20
|
+
editor,
|
|
21
|
+
readonly,
|
|
22
|
+
horizontalAlign
|
|
23
|
+
} = _ref;
|
|
24
|
+
const {
|
|
25
|
+
t
|
|
26
|
+
} = (0, _reactI18next.useTranslation)(_constants.TRANSLATE_NAMESPACE);
|
|
27
|
+
const setTextAlignStyle = (0, _react.useCallback)(textAlign => {
|
|
28
|
+
if (readonly) return;
|
|
29
|
+
(0, _tableOperations.changeColumnAlign)(editor, textAlign);
|
|
30
|
+
const focusPoint = editor.selection.focus;
|
|
31
|
+
// prevent select all text in the editor
|
|
32
|
+
(0, _core.focusEditor)(editor, focusPoint);
|
|
33
|
+
// Select last focus point
|
|
34
|
+
setTimeout(() => {
|
|
35
|
+
(0, _core.focusEditor)(editor, focusPoint);
|
|
36
|
+
}, 0);
|
|
37
|
+
}, [editor, readonly]);
|
|
38
|
+
return /*#__PURE__*/_react.default.createElement(_reactstrap.UncontrolledPopover, {
|
|
39
|
+
target: target.current,
|
|
40
|
+
trigger: "hover",
|
|
41
|
+
placement: "right-start",
|
|
42
|
+
hideArrow: true,
|
|
43
|
+
fade: false
|
|
44
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
45
|
+
className: "sf-dropdown-menu sf-table-alignment-menu"
|
|
46
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
47
|
+
className: "sf-dropdown-menu-item",
|
|
48
|
+
onMouseDown: () => setTextAlignStyle('left')
|
|
49
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
50
|
+
className: "sf-checked"
|
|
51
|
+
}, /*#__PURE__*/_react.default.createElement("i", {
|
|
52
|
+
className: (0, _classnames.default)('iconfont icon-check-mark', {
|
|
53
|
+
active: !horizontalAlign || horizontalAlign === 'left'
|
|
54
|
+
})
|
|
55
|
+
})), /*#__PURE__*/_react.default.createElement("span", {
|
|
56
|
+
className: "active"
|
|
57
|
+
}, t('Left'))), /*#__PURE__*/_react.default.createElement("div", {
|
|
58
|
+
className: "sf-dropdown-menu-item",
|
|
59
|
+
onMouseDown: () => setTextAlignStyle('center')
|
|
60
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
61
|
+
className: "sf-checked"
|
|
62
|
+
}, /*#__PURE__*/_react.default.createElement("i", {
|
|
63
|
+
className: (0, _classnames.default)('iconfont icon-check-mark', {
|
|
64
|
+
active: horizontalAlign === 'center'
|
|
65
|
+
})
|
|
66
|
+
})), /*#__PURE__*/_react.default.createElement("span", null, t('Center'))), /*#__PURE__*/_react.default.createElement("div", {
|
|
67
|
+
className: "sf-dropdown-menu-item",
|
|
68
|
+
onMouseDown: () => setTextAlignStyle('right')
|
|
69
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
70
|
+
className: "sf-checked"
|
|
71
|
+
}, /*#__PURE__*/_react.default.createElement("i", {
|
|
72
|
+
className: (0, _classnames.default)('iconfont icon-check-mark', {
|
|
73
|
+
active: horizontalAlign === 'right'
|
|
74
|
+
})
|
|
75
|
+
})), /*#__PURE__*/_react.default.createElement("span", null, t('Right')))));
|
|
76
|
+
};
|
|
77
|
+
var _default = exports.default = HorizontalAlignPopover;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
.sf-context-menu .sf-dropdown-menu {
|
|
2
|
+
display: flex;
|
|
3
|
+
flex-direction: column;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.sf-table-alignment-menu .sf-dropdown-menu-item {
|
|
7
|
+
padding: 4px 50px 4px 10px !important;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.sf-table-alignment-menu .sf-dropdown-menu-item .sf-checked {
|
|
11
|
+
margin-right: 6px;
|
|
12
|
+
height: 21px;
|
|
13
|
+
line-height: 21px;
|
|
14
|
+
width: 12px;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.sf-table-alignment-menu .sf-dropdown-menu-item .icon-check-mark {
|
|
18
|
+
display: none;
|
|
19
|
+
font-size: 12px !important;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.sf-table-alignment-menu .sf-dropdown-menu-item .icon-check-mark.active {
|
|
23
|
+
display: inline;
|
|
24
|
+
}
|
|
@@ -12,8 +12,12 @@ var _tableOperations = require("../table-operations");
|
|
|
12
12
|
var _constants = require("../../../../constants");
|
|
13
13
|
var _insertTableElement = _interopRequireDefault(require("./insert-table-element"));
|
|
14
14
|
var _constant = require("../constant");
|
|
15
|
+
var _core = require("../../../core");
|
|
16
|
+
var _elementTypes = require("../../../constants/element-types");
|
|
17
|
+
var _horizontalAlignPopover = _interopRequireDefault(require("./horizontal-align-popover"));
|
|
15
18
|
require("./style.css");
|
|
16
19
|
const ContextMenu = _ref => {
|
|
20
|
+
var _getSelectedNodeByTyp, _cellDom$style;
|
|
17
21
|
let {
|
|
18
22
|
element,
|
|
19
23
|
position,
|
|
@@ -22,9 +26,13 @@ const ContextMenu = _ref => {
|
|
|
22
26
|
} = _ref;
|
|
23
27
|
const [contextMenuStyle, setContextMenuStyle] = (0, _react.useState)({});
|
|
24
28
|
const contextMenuRef = (0, _react.useRef)(null);
|
|
29
|
+
const horizontalAlignRef = (0, _react.useRef)(null);
|
|
25
30
|
const {
|
|
26
31
|
t
|
|
27
32
|
} = (0, _reactI18next.useTranslation)(_constants.TRANSLATE_NAMESPACE);
|
|
33
|
+
const tableCellNodeId = (_getSelectedNodeByTyp = (0, _core.getSelectedNodeByType)(editor, _elementTypes.TABLE_CELL)) === null || _getSelectedNodeByTyp === void 0 ? void 0 : _getSelectedNodeByTyp.id;
|
|
34
|
+
const cellDom = document.querySelector(`td[data-id="${tableCellNodeId}"]`);
|
|
35
|
+
const horizontalAlign = cellDom === null || cellDom === void 0 ? void 0 : (_cellDom$style = cellDom.style) === null || _cellDom$style === void 0 ? void 0 : _cellDom$style[_constant.TABLE_CELL_STYLE.TEXT_ALIGN];
|
|
28
36
|
const currentRowsCount = (0, _react.useMemo)(() => {
|
|
29
37
|
const rows = element.children;
|
|
30
38
|
return rows.length;
|
|
@@ -100,6 +108,17 @@ const ContextMenu = _ref => {
|
|
|
100
108
|
}, t('Delete_column')), /*#__PURE__*/_react.default.createElement("button", {
|
|
101
109
|
onMouseDown: () => handleClickOperationBtn(_tableOperations.removeTable),
|
|
102
110
|
className: 'sf-context-menu-item sf-dropdown-menu-item'
|
|
103
|
-
}, t('Delete_table'))
|
|
111
|
+
}, t('Delete_table')), /*#__PURE__*/_react.default.createElement("div", {
|
|
112
|
+
className: 'sf-divider dropdown-divider'
|
|
113
|
+
}), /*#__PURE__*/_react.default.createElement("button", {
|
|
114
|
+
ref: horizontalAlignRef,
|
|
115
|
+
className: "sf-context-menu-item sf-dropdown-menu-item side-extendable"
|
|
116
|
+
}, /*#__PURE__*/_react.default.createElement("span", null, t('Horizontal_align')), /*#__PURE__*/_react.default.createElement("i", {
|
|
117
|
+
className: "iconfont icon-sdoc-right-slide"
|
|
118
|
+
})), horizontalAlignRef.current && /*#__PURE__*/_react.default.createElement(_horizontalAlignPopover.default, {
|
|
119
|
+
target: horizontalAlignRef,
|
|
120
|
+
editor: editor,
|
|
121
|
+
horizontalAlign: horizontalAlign
|
|
122
|
+
})));
|
|
104
123
|
};
|
|
105
124
|
var _default = exports.default = ContextMenu;
|
|
@@ -43,6 +43,10 @@
|
|
|
43
43
|
cursor: default;
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
+
.sf-context-menu .sf-divider.dropdown-divider {
|
|
47
|
+
border-top: 1px solid rgba(0, 40, 100, .12);
|
|
48
|
+
}
|
|
49
|
+
|
|
46
50
|
.sf-context-menu .sf-context-menu-item .insert-number {
|
|
47
51
|
margin-left: 50px;
|
|
48
52
|
display: flex;
|
|
@@ -68,3 +72,18 @@
|
|
|
68
72
|
.sf-context-menu .sf-context-menu-item:disabled .insert-number-input {
|
|
69
73
|
color: #adb5bd;
|
|
70
74
|
}
|
|
75
|
+
|
|
76
|
+
.sf-context-menu .sf-context-menu-item.sf-dropdown-menu-item:disabled {
|
|
77
|
+
pointer-events: none;
|
|
78
|
+
color: #adb5bd;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.side-extendable .icon-sdoc-right-slide {
|
|
82
|
+
color: #fff;
|
|
83
|
+
transform: scale(.6);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.sf-context-menu .sf-dropdown-menu-item:hover {
|
|
87
|
+
color: #fff;
|
|
88
|
+
background-color: #20a0ff;
|
|
89
|
+
}
|
|
@@ -7,63 +7,39 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports.default = void 0;
|
|
9
9
|
var _react = _interopRequireWildcard(require("react"));
|
|
10
|
-
var _menuItem = _interopRequireDefault(require("../../../commons/menu/menu-item"));
|
|
11
10
|
var _constants = require("../../../constants");
|
|
12
11
|
var _elementTypes = require("../../../constants/element-types");
|
|
13
12
|
var _helper = require("../helper");
|
|
14
13
|
var _tableSizeSelector = _interopRequireDefault(require("./table-size-selector"));
|
|
14
|
+
var _dropdownMenuItem = _interopRequireDefault(require("../../../commons/dropdown-menu-item"));
|
|
15
15
|
require("./style.css");
|
|
16
16
|
const menuConfig = _constants.MENUS_CONFIG_MAP[_elementTypes.TABLE];
|
|
17
17
|
const TableMenu = _ref => {
|
|
18
18
|
let {
|
|
19
19
|
editor,
|
|
20
20
|
readonly,
|
|
21
|
-
|
|
22
|
-
isRichEditor
|
|
21
|
+
toggle
|
|
23
22
|
} = _ref;
|
|
24
23
|
const [isOpenTableSizeSelector, setIsOpenTableSizeSelector] = (0, _react.useState)(false);
|
|
25
24
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
26
25
|
const disabled = (0, _react.useMemo)(() => (0, _helper.isDisabled)(editor, readonly), [editor.selection, readonly]);
|
|
27
|
-
const isActive = (0, _helper.isInTable)(editor);
|
|
28
26
|
const tablePopoverRef = (0, _react.useRef)(null);
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
const menu = tablePopoverRef.current;
|
|
32
|
-
const clickIsInMenu = menu && menu.contains(e.target) && menu !== e.target;
|
|
33
|
-
if (clickIsInMenu) return;
|
|
34
|
-
}
|
|
35
|
-
setIsOpenTableSizeSelector(false);
|
|
36
|
-
unregisterEvent();
|
|
37
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
38
|
-
}, []);
|
|
39
|
-
const registerEvent = (0, _react.useCallback)(() => {
|
|
40
|
-
document.addEventListener('mousedown', onHideSelector);
|
|
41
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
42
|
-
}, []);
|
|
43
|
-
const unregisterEvent = (0, _react.useCallback)(() => {
|
|
44
|
-
document.removeEventListener('mousedown', onHideSelector);
|
|
45
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
46
|
-
}, []);
|
|
47
|
-
const onMouseDown = (0, _react.useCallback)(e => {
|
|
48
|
-
e.stopPropagation();
|
|
49
|
-
e.preventDefault();
|
|
50
|
-
const newState = !isOpenTableSizeSelector;
|
|
51
|
-
setIsOpenTableSizeSelector(newState);
|
|
52
|
-
newState ? registerEvent() : unregisterEvent();
|
|
53
|
-
}, [isOpenTableSizeSelector, registerEvent, unregisterEvent]);
|
|
27
|
+
const handleMouseEnter = () => setIsOpenTableSizeSelector(true);
|
|
28
|
+
const handleMouseLeave = () => setIsOpenTableSizeSelector(false);
|
|
54
29
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
55
|
-
className: "
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
30
|
+
className: "table-menu-container",
|
|
31
|
+
onMouseEnter: handleMouseEnter,
|
|
32
|
+
onMouseLeave: handleMouseLeave
|
|
33
|
+
}, /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
|
|
59
34
|
disabled: disabled,
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
35
|
+
menuConfig: menuConfig,
|
|
36
|
+
className: "pr-2"
|
|
37
|
+
}, !disabled && /*#__PURE__*/_react.default.createElement("i", {
|
|
38
|
+
className: "iconfont icon-sdoc-right-slide sf-dropdown-item-right-icon"
|
|
39
|
+
})), !disabled && isOpenTableSizeSelector && /*#__PURE__*/_react.default.createElement(_tableSizeSelector.default, {
|
|
64
40
|
ref: tablePopoverRef,
|
|
65
41
|
editor: editor,
|
|
66
|
-
onHideSelector:
|
|
42
|
+
onHideSelector: toggle
|
|
67
43
|
}));
|
|
68
44
|
};
|
|
69
45
|
var _default = exports.default = TableMenu;
|
|
@@ -28,17 +28,17 @@ const RenderTableContainer = (_ref, editor) => {
|
|
|
28
28
|
rowIndex: -1,
|
|
29
29
|
colIndex: -1
|
|
30
30
|
});
|
|
31
|
+
const [isShowContextMenu, setIsShowContextMenu] = (0, _react.useState)(false);
|
|
32
|
+
const [contextMenuPosition, setContextMenuPosition] = (0, _react.useState)({
|
|
33
|
+
top: 0,
|
|
34
|
+
left: 0
|
|
35
|
+
});
|
|
31
36
|
const [, setSelectGridRange] = (0, _react.useState)({
|
|
32
37
|
startRowIndex: -1,
|
|
33
38
|
startColIndex: -1,
|
|
34
39
|
endRowIndex: -1,
|
|
35
40
|
endColIndex: -1
|
|
36
41
|
});
|
|
37
|
-
const [isShowContextMenu, setIsShowContextMenu] = (0, _react.useState)(false);
|
|
38
|
-
const [contextMenuPosition, setContextMenuPosition] = (0, _react.useState)({
|
|
39
|
-
top: 0,
|
|
40
|
-
left: 0
|
|
41
|
-
});
|
|
42
42
|
const isReadonly = (0, _slateReact.useReadOnly)();
|
|
43
43
|
(0, _react.useEffect)(() => {
|
|
44
44
|
if (isReadonly) return;
|
|
@@ -123,6 +123,7 @@ const RenderTableContainer = (_ref, editor) => {
|
|
|
123
123
|
const maxColIndex = Math.max(startColIndex, endColIndex);
|
|
124
124
|
// Select one cell
|
|
125
125
|
if (minRowIndex === maxRowIndex && minColIndex === maxColIndex) return;
|
|
126
|
+
|
|
126
127
|
// collapse selection
|
|
127
128
|
window.getSelection().collapseToEnd();
|
|
128
129
|
updateSelectedCellStyles(minRowIndex, maxRowIndex, minColIndex, maxColIndex);
|
|
@@ -206,7 +207,6 @@ const RenderTableCell = _ref3 => {
|
|
|
206
207
|
const editor = (0, _slateReact.useSlateStatic)();
|
|
207
208
|
const cellPath = (0, _core.findPath)(editor, element, [0, 0]);
|
|
208
209
|
const pathLength = cellPath.length;
|
|
209
|
-
// const rowIndex = cellPath[pathLength - 2];
|
|
210
210
|
const cellIndex = cellPath[pathLength - 1];
|
|
211
211
|
const rowEntry = _slate.Editor.parent(editor, cellPath);
|
|
212
212
|
const tableEntry = _slate.Editor.parent(editor, rowEntry[1]);
|
|
@@ -7,29 +7,20 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports.default = void 0;
|
|
9
9
|
var _react = _interopRequireWildcard(require("react"));
|
|
10
|
-
var _classnames = _interopRequireDefault(require("classnames"));
|
|
11
|
-
var _eventTypes = require("../../../constants/event-types");
|
|
12
10
|
var _useSelectionUpdate = _interopRequireDefault(require("../../../hooks/use-selection-update"));
|
|
13
|
-
var _eventBus = _interopRequireDefault(require("../../../utils/event-bus"));
|
|
14
11
|
var _commons = require("../../commons");
|
|
15
12
|
var _menu = _interopRequireDefault(require("../../plugins/blockquote/menu"));
|
|
16
13
|
var _menu2 = _interopRequireDefault(require("../../plugins/header/menu"));
|
|
17
14
|
var _menu3 = _interopRequireDefault(require("../../plugins/text-style/menu"));
|
|
18
15
|
var _menu4 = _interopRequireDefault(require("../../plugins/link/menu"));
|
|
19
16
|
var _constants = require("../../constants");
|
|
20
|
-
var _menu5 = _interopRequireDefault(require("../../plugins/
|
|
21
|
-
var _menu6 = _interopRequireDefault(require("../../plugins/
|
|
22
|
-
var _menu7 = _interopRequireDefault(require("../../plugins/check-list/menu"));
|
|
23
|
-
var _menu8 = _interopRequireDefault(require("../../plugins/list/menu"));
|
|
17
|
+
var _menu5 = _interopRequireDefault(require("../../plugins/check-list/menu"));
|
|
18
|
+
var _menu6 = _interopRequireDefault(require("../../plugins/list/menu"));
|
|
24
19
|
var _elementTypes = require("../../constants/element-types");
|
|
25
|
-
var
|
|
26
|
-
var _tableOperator = require("../../plugins/table/menu/table-operator");
|
|
27
|
-
var _helper = require("../../plugins/table/helper");
|
|
28
|
-
var _menu10 = _interopRequireDefault(require("../../plugins/formula/menu"));
|
|
29
|
-
var _menu11 = _interopRequireDefault(require("../../plugins/clear-format/menu"));
|
|
20
|
+
var _menu7 = _interopRequireDefault(require("../../plugins/clear-format/menu"));
|
|
30
21
|
var _shortcutDialog = _interopRequireDefault(require("../user-help/shortcut-dialog"));
|
|
31
|
-
var _menu12 = _interopRequireDefault(require("../../plugins/column/menu"));
|
|
32
22
|
var _insertElementDialog = _interopRequireDefault(require("../../commons/insert-element-dialog"));
|
|
23
|
+
var _insertToolbar = _interopRequireDefault(require("./insert-toolbar"));
|
|
33
24
|
require("./style.css");
|
|
34
25
|
const Toolbar = _ref => {
|
|
35
26
|
let {
|
|
@@ -41,35 +32,10 @@ const Toolbar = _ref => {
|
|
|
41
32
|
isSupportColumn = false
|
|
42
33
|
} = _ref;
|
|
43
34
|
(0, _useSelectionUpdate.default)();
|
|
44
|
-
const [isShowArticleInfo, setIsShowArticleInfo] = (0, _react.useState)(false);
|
|
45
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
46
|
-
const isShowSubTableMenu = (0, _react.useMemo)(() => (0, _helper.isInTable)(editor), [editor.selection]);
|
|
47
|
-
const updateArticleInfoState = (0, _react.useCallback)(() => {
|
|
48
|
-
const newState = !isShowArticleInfo;
|
|
49
|
-
setIsShowArticleInfo(newState);
|
|
50
|
-
const eventBus = _eventBus.default.getInstance();
|
|
51
|
-
eventBus.dispatch(_eventTypes.INTERNAL_EVENTS.ON_ARTICLE_INFO_TOGGLE, newState);
|
|
52
|
-
}, [isShowArticleInfo]);
|
|
53
|
-
const onHelpInfoToggle = (0, _react.useCallback)(state => {
|
|
54
|
-
if (state) setIsShowArticleInfo(false);
|
|
55
|
-
}, []);
|
|
56
|
-
(0, _react.useEffect)(() => {
|
|
57
|
-
const eventBus = _eventBus.default.getInstance();
|
|
58
|
-
// Trigger external events and close article info
|
|
59
|
-
const unsubscribeHelpInfo = eventBus.subscribe(_eventTypes.EXTERNAL_EVENTS.ON_HELP_INFO_TOGGLE, onHelpInfoToggle);
|
|
60
|
-
return () => {
|
|
61
|
-
unsubscribeHelpInfo();
|
|
62
|
-
};
|
|
63
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
64
|
-
}, []);
|
|
65
35
|
const [isShowHelpModal, setIsShowHelpModal] = (0, _react.useState)(false);
|
|
66
36
|
const onHelpIconToggle = (0, _react.useCallback)(() => {
|
|
67
37
|
setIsShowHelpModal(!isShowHelpModal);
|
|
68
38
|
}, [isShowHelpModal]);
|
|
69
|
-
const sideIconClass = (0, _classnames.default)('iconfont', {
|
|
70
|
-
'icon-angle-double-left': !isShowArticleInfo,
|
|
71
|
-
'icon-angle-double-right': isShowArticleInfo
|
|
72
|
-
});
|
|
73
39
|
const commonProps = {
|
|
74
40
|
editor,
|
|
75
41
|
readonly,
|
|
@@ -77,21 +43,24 @@ const Toolbar = _ref => {
|
|
|
77
43
|
};
|
|
78
44
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
79
45
|
className: "sf-slate-editor-toolbar"
|
|
80
|
-
}, isRichEditor && /*#__PURE__*/_react.default.createElement(_commons.MenuGroup, null), /*#__PURE__*/_react.default.createElement(_commons.MenuGroup, null, /*#__PURE__*/_react.default.createElement(
|
|
46
|
+
}, isRichEditor && /*#__PURE__*/_react.default.createElement(_commons.MenuGroup, null), /*#__PURE__*/_react.default.createElement(_commons.MenuGroup, null, /*#__PURE__*/_react.default.createElement(_insertToolbar.default, {
|
|
47
|
+
editor: editor,
|
|
48
|
+
readonly: readonly,
|
|
49
|
+
isSupportFormula: isSupportFormula,
|
|
50
|
+
isSupportColumn: isSupportColumn
|
|
51
|
+
})), /*#__PURE__*/_react.default.createElement(_commons.MenuGroup, null, /*#__PURE__*/_react.default.createElement(_menu2.default, commonProps)), /*#__PURE__*/_react.default.createElement(_commons.MenuGroup, null, /*#__PURE__*/_react.default.createElement(_menu3.default, Object.assign({}, commonProps, {
|
|
52
|
+
type: _constants.TEXT_STYLE_MAP.ITALIC
|
|
53
|
+
})), /*#__PURE__*/_react.default.createElement(_menu3.default, Object.assign({}, commonProps, {
|
|
81
54
|
type: _constants.TEXT_STYLE_MAP.BOLD
|
|
82
55
|
})), /*#__PURE__*/_react.default.createElement(_menu3.default, Object.assign({}, commonProps, {
|
|
83
|
-
type: _constants.TEXT_STYLE_MAP.
|
|
56
|
+
type: _constants.TEXT_STYLE_MAP.UNDERLINE
|
|
84
57
|
})), /*#__PURE__*/_react.default.createElement(_menu3.default, Object.assign({}, commonProps, {
|
|
85
58
|
type: _constants.TEXT_STYLE_MAP.CODE
|
|
86
|
-
})), /*#__PURE__*/_react.default.createElement(_menu4.default, commonProps)), /*#__PURE__*/_react.default.createElement(_commons.MenuGroup, null, /*#__PURE__*/_react.default.createElement(_menu.default, commonProps), /*#__PURE__*/_react.default.createElement(
|
|
87
|
-
type: _elementTypes.ORDERED_LIST
|
|
88
|
-
})), /*#__PURE__*/_react.default.createElement(_menu8.default, Object.assign({}, commonProps, {
|
|
59
|
+
})), /*#__PURE__*/_react.default.createElement(_menu4.default, commonProps)), /*#__PURE__*/_react.default.createElement(_commons.MenuGroup, null, /*#__PURE__*/_react.default.createElement(_menu.default, commonProps), /*#__PURE__*/_react.default.createElement(_menu5.default, commonProps), /*#__PURE__*/_react.default.createElement(_menu6.default, Object.assign({}, commonProps, {
|
|
89
60
|
type: _elementTypes.UNORDERED_LIST
|
|
90
|
-
}))
|
|
91
|
-
|
|
92
|
-
})),
|
|
93
|
-
className: "sf-menu-group sf-table-operations-group"
|
|
94
|
-
}, /*#__PURE__*/_react.default.createElement(_tableOperator.AlignmentDropDown, commonProps), /*#__PURE__*/_react.default.createElement(_tableOperator.ColumnOperationDropDownList, commonProps), /*#__PURE__*/_react.default.createElement(_tableOperator.RowOperationDropDownList, commonProps), /*#__PURE__*/_react.default.createElement(_tableOperator.RemoveTableMenu, commonProps)), /*#__PURE__*/_react.default.createElement(_commons.MenuGroup, null, /*#__PURE__*/_react.default.createElement(_menu11.default, commonProps)), !isRichEditor && /*#__PURE__*/_react.default.createElement("div", {
|
|
61
|
+
})), /*#__PURE__*/_react.default.createElement(_menu6.default, Object.assign({}, commonProps, {
|
|
62
|
+
type: _elementTypes.ORDERED_LIST
|
|
63
|
+
}))), /*#__PURE__*/_react.default.createElement(_commons.MenuGroup, null, /*#__PURE__*/_react.default.createElement(_menu7.default, commonProps)), !isRichEditor && /*#__PURE__*/_react.default.createElement("div", {
|
|
95
64
|
className: "sf-slate-help-info-control",
|
|
96
65
|
onClick: onHelpIconToggle
|
|
97
66
|
}, /*#__PURE__*/_react.default.createElement("span", {
|