@seafile/sdoc-editor 0.1.138 → 0.1.140
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/assets/css/simple-viewer.css +6 -0
- package/dist/basic-sdk/assets/css/default.css +4 -0
- package/dist/basic-sdk/assets/css/dropdown-menu.css +47 -2
- package/dist/basic-sdk/comment/comment/comment-list.css +1 -1
- package/dist/basic-sdk/constants/index.js +2 -1
- package/dist/basic-sdk/editor.js +5 -2
- package/dist/basic-sdk/extension/commons/color-menu/index.js +1 -1
- package/dist/basic-sdk/extension/commons/dropdown-menu-item/index.css +4 -0
- package/dist/basic-sdk/extension/commons/dropdown-menu-item/index.js +38 -0
- package/dist/basic-sdk/extension/commons/insert-element-dialog/index.js +105 -0
- package/dist/basic-sdk/extension/constants/index.js +25 -16
- package/dist/basic-sdk/extension/plugins/code-block/helpers.js +53 -29
- package/dist/basic-sdk/extension/plugins/code-block/hover-menu/index.js +3 -4
- package/dist/basic-sdk/extension/plugins/code-block/menu/index.js +23 -66
- package/dist/basic-sdk/extension/plugins/image/dialogs/insert-web-image-dialog.js +56 -67
- package/dist/basic-sdk/extension/plugins/image/helpers.js +16 -3
- package/dist/basic-sdk/extension/plugins/image/menu/index.js +51 -150
- package/dist/basic-sdk/extension/plugins/image/plugin.js +2 -1
- package/dist/basic-sdk/extension/plugins/link/dialog/add-link-dialog/index.js +129 -0
- package/dist/basic-sdk/extension/plugins/link/helpers.js +31 -11
- package/dist/basic-sdk/extension/plugins/link/hover/index.js +38 -0
- package/dist/basic-sdk/extension/plugins/link/menu/index.js +26 -68
- package/dist/basic-sdk/extension/plugins/link/render-elem.js +17 -23
- package/dist/basic-sdk/extension/plugins/sdoc-link/{dialogs → dialog}/select-sdoc-file-dialog/index.js +4 -10
- package/dist/basic-sdk/extension/plugins/sdoc-link/hover-menu/index.css +0 -42
- package/dist/basic-sdk/extension/plugins/sdoc-link/hover-menu/index.js +10 -10
- package/dist/basic-sdk/extension/plugins/sdoc-link/menu/index.js +23 -82
- package/dist/basic-sdk/extension/plugins/sdoc-link/render-elem.js +10 -5
- package/dist/basic-sdk/extension/plugins/table/dialog/custom-table-size-dialog/index.js +87 -100
- package/dist/basic-sdk/extension/plugins/table/helpers.js +13 -3
- package/dist/basic-sdk/extension/plugins/table/menu/table-menu/index.js +32 -58
- package/dist/basic-sdk/extension/plugins/table/popover/table-size-popover/index.js +99 -135
- package/dist/basic-sdk/extension/plugins/text-style/render-elem.js +1 -1
- package/dist/basic-sdk/extension/toolbar/header-toolbar/index.js +4 -23
- package/dist/basic-sdk/extension/toolbar/header-toolbar/insert-toolbar/index.css +18 -0
- package/dist/basic-sdk/extension/toolbar/header-toolbar/insert-toolbar/index.js +94 -0
- package/dist/basic-sdk/extension/toolbar/side-toolbar/helpers.js +2 -67
- package/dist/basic-sdk/extension/toolbar/side-toolbar/index.js +4 -0
- package/dist/basic-sdk/extension/toolbar/side-toolbar/insert-below-menu.js +4 -7
- package/dist/basic-sdk/extension/toolbar/side-toolbar/insert-block-menu.js +70 -76
- package/dist/basic-sdk/extension/toolbar/side-toolbar/side-menu.css +0 -40
- package/dist/basic-sdk/extension/toolbar/side-toolbar/side-menu.js +43 -27
- package/dist/basic-sdk/extension/toolbar/side-toolbar/transform-menus.js +7 -10
- package/dist/basic-sdk/highlight-decorate/index.js +2 -1
- package/dist/basic-sdk/highlight-decorate/setNodeToDecorations.js +2 -1
- package/dist/pages/simple-viewer.js +21 -7
- package/package.json +1 -1
- package/public/media/sdoc-editor-font/iconfont.eot +0 -0
- package/public/media/sdoc-editor-font/iconfont.svg +2 -0
- package/public/media/sdoc-editor-font/iconfont.ttf +0 -0
- package/public/media/sdoc-editor-font/iconfont.woff +0 -0
- package/public/media/sdoc-editor-font/iconfont.woff2 +0 -0
- package/public/media/sdoc-editor-font.css +10 -6
- package/dist/basic-sdk/extension/plugins/image/menu/style.css +0 -43
- package/dist/basic-sdk/extension/plugins/link/menu/add-link-dialog.js +0 -151
- package/dist/basic-sdk/extension/plugins/link/menu/hover-link-dialog.js +0 -51
- package/dist/basic-sdk/extension/plugins/sdoc-link/menu/index.css +0 -54
- package/dist/basic-sdk/extension/toolbar/side-toolbar/side-menu-item.js +0 -35
- /package/dist/basic-sdk/extension/plugins/sdoc-link/{dialogs → dialog}/select-sdoc-file-dialog/index.css +0 -0
- /package/dist/basic-sdk/extension/plugins/sdoc-link/{dialogs → dialog}/select-sdoc-file-dialog/local-files/index.css +0 -0
- /package/dist/basic-sdk/extension/plugins/sdoc-link/{dialogs → dialog}/select-sdoc-file-dialog/local-files/index.js +0 -0
|
@@ -6,7 +6,7 @@ import slugid from 'slugid';
|
|
|
6
6
|
import { Editor, Range, Transforms, Point, Node } from '@seafile/slate';
|
|
7
7
|
import { ReactEditor } from '@seafile/slate-react';
|
|
8
8
|
import { getNodeType, getParentNode, getSelectedNodeByType, isTextNode, getSelectedElems, focusEditor, getNode, findPath, replaceNodeChildren } from '../../core';
|
|
9
|
-
import { ELEMENT_TYPE, KEYBOARD, CLIPBOARD_FORMAT_KEY } from '../../constants';
|
|
9
|
+
import { ELEMENT_TYPE, KEYBOARD, CLIPBOARD_FORMAT_KEY, INSERT_POSITION } from '../../constants';
|
|
10
10
|
import { TABLE_MAX_ROWS, TABLE_MAX_COLUMNS, EMPTY_SELECTED_RANGE, TABLE_ROW_MIN_HEIGHT, TABLE_CELL_MIN_WIDTH, TABLE_ELEMENT, TABLE_ELEMENT_POSITION } from './constants';
|
|
11
11
|
import EventBus from '../../../utils/event-bus';
|
|
12
12
|
import { INTERNAL_EVENT, PAGE_EDIT_AREA_WIDTH } from '../../../constants';
|
|
@@ -93,10 +93,20 @@ export var generateEmptyTable = function generateEmptyTable(editor) {
|
|
|
93
93
|
};
|
|
94
94
|
};
|
|
95
95
|
export var insertTable = function insertTable(editor, size, selection) {
|
|
96
|
+
var position = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : INSERT_POSITION.CURRENT;
|
|
96
97
|
if (!size) return;
|
|
97
|
-
if (
|
|
98
|
+
if (position !== INSERT_POSITION.AFTER) {
|
|
99
|
+
if (isTableMenuDisabled(editor)) return;
|
|
100
|
+
}
|
|
98
101
|
var tableNode = generateEmptyTable(editor, size);
|
|
99
|
-
var
|
|
102
|
+
var validSelection = selection || editor.selection;
|
|
103
|
+
var path = Editor.path(editor, validSelection);
|
|
104
|
+
if (position === INSERT_POSITION.AFTER) {
|
|
105
|
+
Transforms.insertNodes(editor, tableNode, {
|
|
106
|
+
at: [path[0] + 1]
|
|
107
|
+
});
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
100
110
|
Transforms.insertNodes(editor, tableNode, {
|
|
101
111
|
at: [path[0]]
|
|
102
112
|
});
|
|
@@ -1,62 +1,36 @@
|
|
|
1
|
-
import
|
|
2
|
-
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
|
|
3
|
-
import _createClass from "@babel/runtime/helpers/esm/createClass";
|
|
4
|
-
import _inherits from "@babel/runtime/helpers/esm/inherits";
|
|
5
|
-
import _createSuper from "@babel/runtime/helpers/esm/createSuper";
|
|
6
|
-
import React from 'react';
|
|
1
|
+
import React, { useCallback } from 'react';
|
|
7
2
|
import { withTranslation } from 'react-i18next';
|
|
8
3
|
import { insertTable, isTableMenuDisabled } from '../../helpers';
|
|
9
|
-
import {
|
|
10
|
-
import { MenuItem } from '../../../../commons';
|
|
4
|
+
import { MENUS_CONFIG_MAP, ELEMENT_TYPE, INSERT_POSITION } from '../../../../constants';
|
|
11
5
|
import TableSizePopover from '../../popover/table-size-popover';
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
className = _this$props2.className;
|
|
43
|
-
var menuConfig = MENUS_CONFIG_MAP[TABLE];
|
|
44
|
-
var props = _objectSpread(_objectSpread({
|
|
45
|
-
isRichEditor: isRichEditor,
|
|
46
|
-
className: className
|
|
47
|
-
}, menuConfig), {}, {
|
|
48
|
-
disabled: this.isDisabled(),
|
|
49
|
-
isActive: this.isActive(),
|
|
50
|
-
onMouseDown: function onMouseDown() {}
|
|
51
|
-
});
|
|
52
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
53
|
-
className: "table-menu"
|
|
54
|
-
}, /*#__PURE__*/React.createElement(MenuItem, props)), /*#__PURE__*/React.createElement(TableSizePopover, {
|
|
55
|
-
target: menuConfig.id,
|
|
56
|
-
createTable: this.createTable
|
|
57
|
-
}));
|
|
58
|
-
}
|
|
59
|
-
}]);
|
|
60
|
-
return TableMenu;
|
|
61
|
-
}(React.Component);
|
|
6
|
+
import ElementDropdownMenuItem from '../../../../commons/dropdown-menu-item';
|
|
7
|
+
import { INTERNAL_EVENT } from '../../../../../constants';
|
|
8
|
+
var TableMenu = function TableMenu(_ref) {
|
|
9
|
+
var editor = _ref.editor,
|
|
10
|
+
readonly = _ref.readonly,
|
|
11
|
+
eventBus = _ref.eventBus;
|
|
12
|
+
var disabled = isTableMenuDisabled(editor, readonly);
|
|
13
|
+
var menuConfig = MENUS_CONFIG_MAP[ELEMENT_TYPE.TABLE];
|
|
14
|
+
var createTable = useCallback(function (size) {
|
|
15
|
+
insertTable(editor, size, editor.selection, INSERT_POSITION.CURRENT);
|
|
16
|
+
}, [editor]);
|
|
17
|
+
var openDialog = useCallback(function () {
|
|
18
|
+
eventBus.dispatch(INTERNAL_EVENT.INSERT_ELEMENT, {
|
|
19
|
+
type: ELEMENT_TYPE.TABLE
|
|
20
|
+
});
|
|
21
|
+
}, [eventBus]);
|
|
22
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ElementDropdownMenuItem, {
|
|
23
|
+
disabled: disabled,
|
|
24
|
+
menuConfig: menuConfig,
|
|
25
|
+
className: "pr-2"
|
|
26
|
+
}, !disabled && /*#__PURE__*/React.createElement("i", {
|
|
27
|
+
className: "sdocfont sdoc-right-slide sdoc-dropdown-item-right-icon"
|
|
28
|
+
})), !disabled && /*#__PURE__*/React.createElement(TableSizePopover, {
|
|
29
|
+
target: menuConfig.id,
|
|
30
|
+
trigger: "hover",
|
|
31
|
+
placement: "right-start",
|
|
32
|
+
createTable: createTable,
|
|
33
|
+
openDialog: openDialog
|
|
34
|
+
}));
|
|
35
|
+
};
|
|
62
36
|
export default withTranslation('sdoc-editor')(TableMenu);
|
|
@@ -1,142 +1,106 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import _inherits from "@babel/runtime/helpers/esm/inherits";
|
|
4
|
-
import _createSuper from "@babel/runtime/helpers/esm/createSuper";
|
|
5
|
-
import React, { Component } from 'react';
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
2
|
+
import React, { useCallback, useRef, useState } from 'react';
|
|
6
3
|
import classnames from 'classnames';
|
|
7
|
-
import {
|
|
4
|
+
import { useTranslation } from 'react-i18next';
|
|
8
5
|
import { UncontrolledPopover } from 'reactstrap';
|
|
9
|
-
import CustomTableSizeDialog from '../../dialog/custom-table-size-dialog';
|
|
10
6
|
import './index.css';
|
|
11
|
-
var TableSizePopover =
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
var
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
onClick: _this.createTable,
|
|
75
|
-
onMouseEnter: function onMouseEnter(event) {
|
|
76
|
-
return _this.onMouseEnter(event, [i, j]);
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
children.push(child);
|
|
80
|
-
};
|
|
81
|
-
for (var j = 1; j <= displaySize[1]; j++) {
|
|
82
|
-
_loop2(j);
|
|
83
|
-
}
|
|
84
|
-
tableSize.push( /*#__PURE__*/React.createElement("div", {
|
|
85
|
-
key: "sdoc-table-size-row-".concat(i),
|
|
86
|
-
className: "sdoc-table-size-row d-flex"
|
|
87
|
-
}, children));
|
|
7
|
+
var TableSizePopover = function TableSizePopover(_ref) {
|
|
8
|
+
var target = _ref.target,
|
|
9
|
+
_ref$trigger = _ref.trigger,
|
|
10
|
+
trigger = _ref$trigger === void 0 ? 'legacy' : _ref$trigger,
|
|
11
|
+
_ref$placement = _ref.placement,
|
|
12
|
+
placement = _ref$placement === void 0 ? 'bottom-start' : _ref$placement,
|
|
13
|
+
popperClassName = _ref.popperClassName,
|
|
14
|
+
createTable = _ref.createTable,
|
|
15
|
+
openDialog = _ref.openDialog;
|
|
16
|
+
var minSize = [4, 4];
|
|
17
|
+
var maxSize = [10, 10];
|
|
18
|
+
var _useTranslation = useTranslation(),
|
|
19
|
+
t = _useTranslation.t;
|
|
20
|
+
var _useState = useState([4, 4]),
|
|
21
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
22
|
+
displaySize = _useState2[0],
|
|
23
|
+
setDisplaySize = _useState2[1];
|
|
24
|
+
var _useState3 = useState([0, 0]),
|
|
25
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
26
|
+
selectedSize = _useState4[0],
|
|
27
|
+
setSelectedSize = _useState4[1];
|
|
28
|
+
var ref = useRef(null);
|
|
29
|
+
var _onMouseEnter = useCallback(function (event) {
|
|
30
|
+
var cellPosition = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [1, 1];
|
|
31
|
+
var newDisplaySize = displaySize.slice(0);
|
|
32
|
+
var cellPositionX = cellPosition[0];
|
|
33
|
+
var cellPositionY = cellPosition[1];
|
|
34
|
+
newDisplaySize[0] = cellPositionX < minSize[0] ? minSize[0] : cellPositionX + 1;
|
|
35
|
+
newDisplaySize[1] = cellPositionY < minSize[1] ? minSize[1] : cellPositionY + 1;
|
|
36
|
+
if (newDisplaySize[0] > maxSize[0]) {
|
|
37
|
+
newDisplaySize[0] = maxSize[0];
|
|
38
|
+
}
|
|
39
|
+
if (newDisplaySize[1] > maxSize[1]) {
|
|
40
|
+
newDisplaySize[1] = maxSize[1];
|
|
41
|
+
}
|
|
42
|
+
setDisplaySize(newDisplaySize);
|
|
43
|
+
setSelectedSize(cellPosition);
|
|
44
|
+
|
|
45
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
46
|
+
}, [displaySize, selectedSize, maxSize, minSize]);
|
|
47
|
+
var onCreateTable = useCallback(function () {
|
|
48
|
+
createTable(selectedSize);
|
|
49
|
+
ref && ref.current && ref.current.toggle();
|
|
50
|
+
|
|
51
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
52
|
+
}, [selectedSize, ref]);
|
|
53
|
+
var renderTableSize = useCallback(function () {
|
|
54
|
+
var tableSize = [];
|
|
55
|
+
var _loop = function _loop(i) {
|
|
56
|
+
var children = [];
|
|
57
|
+
var _loop2 = function _loop2(j) {
|
|
58
|
+
var isSelectedChild = i <= selectedSize[0] && selectedSize[0] !== 0 && j <= selectedSize[1] && selectedSize[1] !== 0;
|
|
59
|
+
var child = /*#__PURE__*/React.createElement("div", {
|
|
60
|
+
key: "sdoc-table-size-cell-".concat(i, "-").concat(j),
|
|
61
|
+
className: classnames('sdoc-table-size-cell', {
|
|
62
|
+
'active': isSelectedChild
|
|
63
|
+
}),
|
|
64
|
+
onClick: onCreateTable,
|
|
65
|
+
onMouseEnter: function onMouseEnter(event) {
|
|
66
|
+
return _onMouseEnter(event, [i, j]);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
children.push(child);
|
|
88
70
|
};
|
|
89
|
-
for (var
|
|
90
|
-
|
|
71
|
+
for (var j = 1; j <= displaySize[1]; j++) {
|
|
72
|
+
_loop2(j);
|
|
91
73
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
_this.state = {
|
|
97
|
-
displaySize: [4, 4],
|
|
98
|
-
selectedSize: [0, 0],
|
|
99
|
-
isShowCustomSizeDialog: false
|
|
74
|
+
tableSize.push( /*#__PURE__*/React.createElement("div", {
|
|
75
|
+
key: "sdoc-table-size-row-".concat(i),
|
|
76
|
+
className: "sdoc-table-size-row d-flex"
|
|
77
|
+
}, children));
|
|
100
78
|
};
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
_createClass(TableSizePopover, [{
|
|
104
|
-
key: "render",
|
|
105
|
-
value: function render() {
|
|
106
|
-
var _this$state2 = this.state,
|
|
107
|
-
selectedSize = _this$state2.selectedSize,
|
|
108
|
-
isShowCustomSizeDialog = _this$state2.isShowCustomSizeDialog;
|
|
109
|
-
var _this$props = this.props,
|
|
110
|
-
_this$props$trigger = _this$props.trigger,
|
|
111
|
-
trigger = _this$props$trigger === void 0 ? 'legacy' : _this$props$trigger,
|
|
112
|
-
_this$props$placement = _this$props.placement,
|
|
113
|
-
placement = _this$props$placement === void 0 ? 'bottom-start' : _this$props$placement,
|
|
114
|
-
popperClassName = _this$props.popperClassName,
|
|
115
|
-
t = _this$props.t;
|
|
116
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(UncontrolledPopover, {
|
|
117
|
-
target: this.props.target,
|
|
118
|
-
className: "sdoc-selected-table-size-popover",
|
|
119
|
-
trigger: trigger,
|
|
120
|
-
placement: placement,
|
|
121
|
-
hideArrow: true,
|
|
122
|
-
fade: false,
|
|
123
|
-
ref: this.setRef,
|
|
124
|
-
popperClassName: popperClassName
|
|
125
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
126
|
-
className: "sdoc-selected-table-size-container w-100 h-100 d-flex flex-column"
|
|
127
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
128
|
-
className: "sdoc-selected-table-size-tip w-100 "
|
|
129
|
-
}, "".concat(selectedSize[0], " x ").concat(selectedSize[1])), /*#__PURE__*/React.createElement("div", {
|
|
130
|
-
className: "sdoc-table-size-select"
|
|
131
|
-
}, this.renderTableSize()), /*#__PURE__*/React.createElement("div", {
|
|
132
|
-
className: "sdoc-selected-table-size-custom",
|
|
133
|
-
onClick: this.openCustomTableSizeDialog
|
|
134
|
-
}, t('Customize_the_number_of_rows_and_columns')))), isShowCustomSizeDialog && /*#__PURE__*/React.createElement(CustomTableSizeDialog, {
|
|
135
|
-
toggle: this.closeCustomTableSizeDialog,
|
|
136
|
-
submit: this.createCustomSizeTable
|
|
137
|
-
}));
|
|
79
|
+
for (var i = 1; i <= displaySize[0]; i++) {
|
|
80
|
+
_loop(i);
|
|
138
81
|
}
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
82
|
+
return tableSize;
|
|
83
|
+
|
|
84
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
85
|
+
}, [displaySize, selectedSize]);
|
|
86
|
+
return /*#__PURE__*/React.createElement(UncontrolledPopover, {
|
|
87
|
+
target: target,
|
|
88
|
+
className: "sdoc-selected-table-size-popover sdoc-sub-dropdown-menu",
|
|
89
|
+
trigger: trigger,
|
|
90
|
+
placement: placement,
|
|
91
|
+
hideArrow: true,
|
|
92
|
+
fade: false,
|
|
93
|
+
ref: ref,
|
|
94
|
+
popperClassName: popperClassName
|
|
95
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
96
|
+
className: "sdoc-selected-table-size-container w-100 h-100 d-flex flex-column"
|
|
97
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
98
|
+
className: "sdoc-selected-table-size-tip w-100 "
|
|
99
|
+
}, "".concat(selectedSize[0], " x ").concat(selectedSize[1])), /*#__PURE__*/React.createElement("div", {
|
|
100
|
+
className: "sdoc-table-size-select"
|
|
101
|
+
}, renderTableSize()), /*#__PURE__*/React.createElement("div", {
|
|
102
|
+
className: "sdoc-selected-table-size-custom",
|
|
103
|
+
onClick: openDialog
|
|
104
|
+
}, t('Customize_the_number_of_rows_and_columns'))));
|
|
105
|
+
};
|
|
106
|
+
export default TableSizePopover;
|
|
@@ -29,7 +29,7 @@ var renderText = function renderText(props, editor) {
|
|
|
29
29
|
if (leaf['font-size']) {
|
|
30
30
|
var fontSize = leaf['font-size'];
|
|
31
31
|
if (typeof fontSize === 'number') {
|
|
32
|
-
style['fontSize'] = "".concat(fontSize, "
|
|
32
|
+
style['fontSize'] = "".concat(fontSize, "pt");
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
var font = leaf['font'] || DEFAULT_FONT;
|
|
@@ -3,19 +3,15 @@ import useSelectionUpdate from '../../../hooks/use-selection-update';
|
|
|
3
3
|
import { ORDERED_LIST, UNORDERED_LIST } from '../../constants';
|
|
4
4
|
import { MenuGroup } from '../../commons';
|
|
5
5
|
import QuoteMenu from '../../plugins/blockquote/menu';
|
|
6
|
-
import LinkMenu from '../../plugins/link/menu';
|
|
7
6
|
import ListMenu from '../../plugins/list/menu';
|
|
8
|
-
import ImageMenu from '../../plugins/image/menu';
|
|
9
7
|
import HeaderMenu from '../../plugins/header/menu';
|
|
10
8
|
import CheckListMenu from '../../plugins/check-list/menu';
|
|
11
9
|
import TextStyleMenuList from '../../plugins/text-style/menu';
|
|
12
|
-
import CodeBlockMenu from '../../plugins/code-block/menu';
|
|
13
10
|
import TextAlignMenu from '../../plugins/text-align/menu';
|
|
14
|
-
import { TableMenu, ActiveTableMenu } from '../../plugins/table/menu';
|
|
15
11
|
import ClearFormatMenu from '../../plugins/clear-format/menu';
|
|
16
12
|
import HistoryMenu from './redo-undo';
|
|
17
13
|
import Font from '../../plugins/font/menu';
|
|
18
|
-
import
|
|
14
|
+
import InsertToolbar from './insert-toolbar';
|
|
19
15
|
var Toolbar = function Toolbar(_ref) {
|
|
20
16
|
var editor = _ref.editor,
|
|
21
17
|
readonly = _ref.readonly;
|
|
@@ -28,6 +24,9 @@ var Toolbar = function Toolbar(_ref) {
|
|
|
28
24
|
}), /*#__PURE__*/React.createElement(ClearFormatMenu, {
|
|
29
25
|
editor: editor,
|
|
30
26
|
readonly: readonly
|
|
27
|
+
})), /*#__PURE__*/React.createElement(MenuGroup, null, /*#__PURE__*/React.createElement(InsertToolbar, {
|
|
28
|
+
editor: editor,
|
|
29
|
+
readonly: readonly
|
|
31
30
|
})), /*#__PURE__*/React.createElement(HeaderMenu, {
|
|
32
31
|
editor: editor,
|
|
33
32
|
readonly: readonly
|
|
@@ -54,24 +53,6 @@ var Toolbar = function Toolbar(_ref) {
|
|
|
54
53
|
}), /*#__PURE__*/React.createElement(TextAlignMenu, {
|
|
55
54
|
editor: editor,
|
|
56
55
|
readonly: readonly
|
|
57
|
-
})), /*#__PURE__*/React.createElement(MenuGroup, null, /*#__PURE__*/React.createElement(CodeBlockMenu, {
|
|
58
|
-
editor: editor,
|
|
59
|
-
readonly: readonly
|
|
60
|
-
}), /*#__PURE__*/React.createElement(TableMenu, {
|
|
61
|
-
editor: editor,
|
|
62
|
-
readonly: readonly
|
|
63
|
-
})), /*#__PURE__*/React.createElement(ActiveTableMenu, {
|
|
64
|
-
editor: editor,
|
|
65
|
-
readonly: readonly
|
|
66
|
-
}), /*#__PURE__*/React.createElement(MenuGroup, null, /*#__PURE__*/React.createElement(ImageMenu, {
|
|
67
|
-
editor: editor,
|
|
68
|
-
readonly: readonly
|
|
69
|
-
}), /*#__PURE__*/React.createElement(LinkMenu, {
|
|
70
|
-
editor: editor,
|
|
71
|
-
readonly: readonly
|
|
72
|
-
})), /*#__PURE__*/React.createElement(MenuGroup, null, /*#__PURE__*/React.createElement(SdocLinkMenu, {
|
|
73
|
-
editor: editor,
|
|
74
|
-
readonly: readonly
|
|
75
56
|
})));
|
|
76
57
|
};
|
|
77
58
|
Toolbar.defaultProps = {
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
.menu-group .menu-group-item.sdoc-insert-toolbar-btn {
|
|
2
|
+
width: 140px;
|
|
3
|
+
display: flex;
|
|
4
|
+
align-items: center;
|
|
5
|
+
justify-content: space-between;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.menu-group .sdoc-insert-toolbar-btn .sdoc-menu-with-dropdown-icon {
|
|
9
|
+
flex: 1;
|
|
10
|
+
justify-content: flex-start;
|
|
11
|
+
padding-left: 5px;
|
|
12
|
+
padding-right: 2px;
|
|
13
|
+
font-size: 14px;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.sdoc-insert-menu-popover .popover {
|
|
17
|
+
min-width: 200px;
|
|
18
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
2
|
+
import React, { useState, useRef, useCallback, useMemo } from 'react';
|
|
3
|
+
import { useTranslation } from 'react-i18next';
|
|
4
|
+
import { UncontrolledPopover } from 'reactstrap';
|
|
5
|
+
import classnames from 'classnames';
|
|
6
|
+
import ImageMenu from '../../../plugins/image/menu';
|
|
7
|
+
import TableMenu from '../../../plugins/table/menu/table-menu';
|
|
8
|
+
import LinkMenu from '../../../plugins/link/menu';
|
|
9
|
+
import CodeBlockMenu from '../../../plugins/code-block/menu';
|
|
10
|
+
import SdocLinkMenu from '../../../plugins/sdoc-link/menu';
|
|
11
|
+
import EventBus from '../../../../utils/event-bus';
|
|
12
|
+
import './index.css';
|
|
13
|
+
var InsertToolbar = function InsertToolbar(_ref) {
|
|
14
|
+
var isRichEditor = _ref.isRichEditor,
|
|
15
|
+
className = _ref.className,
|
|
16
|
+
editor = _ref.editor,
|
|
17
|
+
readonly = _ref.readonly;
|
|
18
|
+
var _useState = useState(false),
|
|
19
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
20
|
+
isShowMenu = _useState2[0],
|
|
21
|
+
setMenuShow = _useState2[1];
|
|
22
|
+
var _useTranslation = useTranslation(),
|
|
23
|
+
t = _useTranslation.t;
|
|
24
|
+
var popoverRef = useRef(null);
|
|
25
|
+
var disabled = readonly;
|
|
26
|
+
var insertButtonRef = useRef(null);
|
|
27
|
+
var insertToolbarId = 'sdoc-insert-toolbar-btn';
|
|
28
|
+
var eventBus = useMemo(function () {
|
|
29
|
+
return EventBus.getInstance();
|
|
30
|
+
}, []);
|
|
31
|
+
var toggle = useCallback(function (event) {
|
|
32
|
+
popoverRef.current && popoverRef.current.toggle();
|
|
33
|
+
setMenuShow(!isShowMenu);
|
|
34
|
+
|
|
35
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
36
|
+
}, [isShowMenu]);
|
|
37
|
+
var validClassName = classnames(className, 'sdoc-menu-with-dropdown sdoc-insert-toolbar-btn', {
|
|
38
|
+
'menu-show': isShowMenu,
|
|
39
|
+
'disabled': disabled,
|
|
40
|
+
'rich-icon-btn d-flex': isRichEditor,
|
|
41
|
+
'rich-icon-btn-disabled': isRichEditor && disabled,
|
|
42
|
+
'rich-icon-btn-hover': isRichEditor && !disabled,
|
|
43
|
+
'btn btn-icon btn-secondary btn-active d-flex': !isRichEditor
|
|
44
|
+
});
|
|
45
|
+
var caretIconClass = "sdoc-menu-with-dropdown-triangle-icon sdocfont sdoc-".concat(isShowMenu ? 'caret-up' : 'drop-down');
|
|
46
|
+
var _ref2 = insertButtonRef.current ? insertButtonRef.current.getBoundingClientRect() : {
|
|
47
|
+
bottom: 92.5
|
|
48
|
+
},
|
|
49
|
+
bottom = _ref2.bottom;
|
|
50
|
+
var props = {
|
|
51
|
+
eventBus: eventBus,
|
|
52
|
+
editor: editor,
|
|
53
|
+
readonly: readonly,
|
|
54
|
+
toggle: toggle
|
|
55
|
+
};
|
|
56
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("button", {
|
|
57
|
+
type: "button",
|
|
58
|
+
className: validClassName,
|
|
59
|
+
id: insertToolbarId,
|
|
60
|
+
disabled: disabled,
|
|
61
|
+
ref: insertButtonRef
|
|
62
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
63
|
+
className: "sdoc-menu-with-dropdown-icon"
|
|
64
|
+
}, /*#__PURE__*/React.createElement("i", {
|
|
65
|
+
className: "sdocfont sdoc-insert mr-1"
|
|
66
|
+
}), /*#__PURE__*/React.createElement("span", {
|
|
67
|
+
className: "text-truncate"
|
|
68
|
+
}, t('Insert'))), !disabled && /*#__PURE__*/React.createElement("div", {
|
|
69
|
+
className: "sdoc-menu-with-dropdown-triangle"
|
|
70
|
+
}, /*#__PURE__*/React.createElement("span", {
|
|
71
|
+
className: caretIconClass
|
|
72
|
+
}))), !disabled && /*#__PURE__*/React.createElement(UncontrolledPopover, {
|
|
73
|
+
target: insertToolbarId,
|
|
74
|
+
className: "sdoc-menu-popover sdoc-dropdown-menu sdoc-insert-menu-popover",
|
|
75
|
+
trigger: "legacy",
|
|
76
|
+
placement: "bottom-start",
|
|
77
|
+
hideArrow: true,
|
|
78
|
+
toggle: toggle,
|
|
79
|
+
fade: false,
|
|
80
|
+
ref: popoverRef
|
|
81
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
82
|
+
className: "sdoc-insert-menu-container sdoc-dropdown-menu-container",
|
|
83
|
+
style: {
|
|
84
|
+
maxHeight: window.innerHeight - bottom - 100
|
|
85
|
+
}
|
|
86
|
+
}, /*#__PURE__*/React.createElement(ImageMenu, props), /*#__PURE__*/React.createElement(TableMenu, props), /*#__PURE__*/React.createElement(LinkMenu, props), /*#__PURE__*/React.createElement(CodeBlockMenu, props), /*#__PURE__*/React.createElement("div", {
|
|
87
|
+
className: "sdoc-dropdown-menu-divider"
|
|
88
|
+
}), /*#__PURE__*/React.createElement(SdocLinkMenu, props))));
|
|
89
|
+
};
|
|
90
|
+
InsertToolbar.defaultProps = {
|
|
91
|
+
isRichEditor: true,
|
|
92
|
+
className: 'menu-group-item'
|
|
93
|
+
};
|
|
94
|
+
export default InsertToolbar;
|
|
@@ -1,13 +1,8 @@
|
|
|
1
|
-
import { Transforms
|
|
1
|
+
import { Transforms } from '@seafile/slate';
|
|
2
2
|
import { ReactEditor } from '@seafile/slate-react';
|
|
3
3
|
import copy from 'copy-to-clipboard';
|
|
4
|
-
import slugid from 'slugid';
|
|
5
4
|
import { toggleList } from '../../plugins/list/transforms';
|
|
6
|
-
import {
|
|
7
|
-
import { generateEmptyTable } from '../../plugins/table/helpers';
|
|
8
|
-
import { genLinkNode } from '../../plugins/link/helpers';
|
|
9
|
-
import { generateEmptyElement } from '../../core';
|
|
10
|
-
import { ORDERED_LIST, UNORDERED_LIST, PARAGRAPH, CHECK_LIST_ITEM, CODE_BLOCK, CODE_LINE } from '../../constants';
|
|
5
|
+
import { ORDERED_LIST, UNORDERED_LIST, PARAGRAPH, CHECK_LIST_ITEM } from '../../constants';
|
|
11
6
|
export var onSetNodeType = function onSetNodeType(editor, element, type) {
|
|
12
7
|
if (!type) return;
|
|
13
8
|
if ([ORDERED_LIST, UNORDERED_LIST].includes(type)) {
|
|
@@ -54,66 +49,6 @@ export var onDeleteNode = function onDeleteNode(editor, element) {
|
|
|
54
49
|
at: path
|
|
55
50
|
});
|
|
56
51
|
};
|
|
57
|
-
export var insertBelowImage = function insertBelowImage(editor, src, selection) {
|
|
58
|
-
if (!src) return;
|
|
59
|
-
var p = generateEmptyElement(PARAGRAPH);
|
|
60
|
-
var imageNode = generateImageNode(src);
|
|
61
|
-
p.children[0] = imageNode;
|
|
62
|
-
var path = Editor.path(editor, selection);
|
|
63
|
-
Transforms.insertNodes(editor, p, {
|
|
64
|
-
at: [path[0] + 1]
|
|
65
|
-
});
|
|
66
|
-
};
|
|
67
|
-
export var insertBelowCodeBlock = function insertBelowCodeBlock(editor, language) {
|
|
68
|
-
var newCodeBlockNode = {
|
|
69
|
-
id: slugid.nice(),
|
|
70
|
-
type: CODE_BLOCK,
|
|
71
|
-
language: language,
|
|
72
|
-
style: {
|
|
73
|
-
white_space: 'nowrap' // default nowrap
|
|
74
|
-
},
|
|
75
|
-
|
|
76
|
-
children: [{
|
|
77
|
-
id: slugid.nice(),
|
|
78
|
-
type: CODE_LINE,
|
|
79
|
-
children: [{
|
|
80
|
-
text: '',
|
|
81
|
-
id: slugid.nice()
|
|
82
|
-
}]
|
|
83
|
-
}]
|
|
84
|
-
};
|
|
85
|
-
var path = Editor.path(editor, editor.selection);
|
|
86
|
-
Transforms.insertNodes(editor, newCodeBlockNode, {
|
|
87
|
-
mode: 'highest',
|
|
88
|
-
at: [path[0] + 1]
|
|
89
|
-
});
|
|
90
|
-
};
|
|
91
|
-
export var insertBelowTable = function insertBelowTable(editor, size, selection) {
|
|
92
|
-
if (!size) return;
|
|
93
|
-
var tableNode = generateEmptyTable(editor, size);
|
|
94
|
-
var path = Editor.path(editor, selection);
|
|
95
|
-
Transforms.insertNodes(editor, tableNode, {
|
|
96
|
-
at: [path[0] + 1]
|
|
97
|
-
});
|
|
98
|
-
};
|
|
99
|
-
export var insertBelowLink = function insertBelowLink(editor, title, url) {
|
|
100
|
-
if (!title || !url) return;
|
|
101
|
-
var p = generateEmptyElement(PARAGRAPH);
|
|
102
|
-
var linkNode = genLinkNode(url, title);
|
|
103
|
-
p.children[0] = {
|
|
104
|
-
id: slugid.nice(),
|
|
105
|
-
text: ' '
|
|
106
|
-
};
|
|
107
|
-
p.children[1] = linkNode;
|
|
108
|
-
p.children[2] = {
|
|
109
|
-
id: slugid.nice(),
|
|
110
|
-
text: ' '
|
|
111
|
-
};
|
|
112
|
-
var path = Editor.path(editor, editor.selection);
|
|
113
|
-
Transforms.insertNodes(editor, p, {
|
|
114
|
-
at: [path[0] + 1]
|
|
115
|
-
});
|
|
116
|
-
};
|
|
117
52
|
export var getDomTopHeight = function getDomTopHeight(dom) {
|
|
118
53
|
var HEADER_HEIGHT = 56 + 44;
|
|
119
54
|
var rect = dom.getBoundingClientRect();
|
|
@@ -42,6 +42,8 @@ var SideToolbar = function SideToolbar() {
|
|
|
42
42
|
setMenuPosition({});
|
|
43
43
|
setSlateNode(null);
|
|
44
44
|
setActive(false);
|
|
45
|
+
|
|
46
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
45
47
|
}, []);
|
|
46
48
|
useEffect(function () {
|
|
47
49
|
var observerRefValue;
|
|
@@ -81,6 +83,8 @@ var SideToolbar = function SideToolbar() {
|
|
|
81
83
|
var eventBus = EventBus.getInstance();
|
|
82
84
|
var unSubscribeMouseEnter = eventBus.subscribe(INTERNAL_EVENT.ON_MOUSE_ENTER_BLOCK, handleMouseEnter);
|
|
83
85
|
return unSubscribeMouseEnter;
|
|
86
|
+
|
|
87
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
84
88
|
}, [editor, isShowSideMenu, scrollRef]);
|
|
85
89
|
var onActiveToggle = useCallback(function () {
|
|
86
90
|
if (isShowSideMenu) return;
|