@seafile/seafile-editor 1.0.84 → 1.0.85-beta1
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/editors/{simple-slate-editor /index.js → simple-slate-editor/index.js} +35 -12
- package/dist/extension/commons/expand-editor-menu.js +28 -0
- package/dist/extension/commons/index.js +15 -1
- package/dist/extension/commons/menu/menu.css +5 -1
- package/dist/extension/commons/more-menu/index.css +28 -0
- package/dist/extension/commons/more-menu/index.js +46 -0
- package/dist/extension/constants/menus-config.js +13 -1
- package/dist/extension/editor.js +8 -1
- package/dist/extension/index.js +12 -0
- package/dist/extension/toolbar/index.js +8 -1
- package/dist/extension/toolbar/inline-toolbar/index.css +40 -0
- package/dist/extension/toolbar/inline-toolbar/index.js +85 -0
- package/dist/index.js +7 -0
- package/dist/pages/longtext-inline-editor/ClickOutside/index.js +86 -0
- package/dist/pages/longtext-inline-editor/editor.js +135 -0
- package/dist/pages/longtext-inline-editor/formatter/index.css +31 -0
- package/dist/pages/longtext-inline-editor/formatter/index.js +66 -0
- package/dist/pages/longtext-inline-editor/index.css +71 -0
- package/dist/pages/longtext-inline-editor/index.js +128 -0
- package/dist/pages/seatable-editor.js +1 -1
- package/dist/pages/simple-editor.js +7 -3
- package/package.json +1 -1
- package/public/locales/cs/seafile-editor.json +2 -1
- package/public/locales/de/seafile-editor.json +2 -1
- package/public/locales/en/seafile-editor.json +6 -1
- package/public/locales/es/seafile-editor.json +2 -1
- package/public/locales/fr/seafile-editor.json +2 -1
- package/public/locales/it/seafile-editor.json +2 -1
- package/public/locales/ru/seafile-editor.json +2 -1
- package/public/locales/zh_CN/seafile-editor.json +2 -1
- package/public/media/seafile-editor-font/iconfont.eot +0 -0
- package/public/media/seafile-editor-font/iconfont.svg +2 -0
- 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 +10 -6
- package/readme.md +115 -24
- /package/dist/editors/{simple-slate-editor → simple-slate-editor}/style.css +0 -0
- /package/dist/editors/{simple-slate-editor → simple-slate-editor}/with-props-editor.js +0 -0
|
@@ -5,7 +5,7 @@ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWild
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.default =
|
|
8
|
+
exports.default = void 0;
|
|
9
9
|
var _react = _interopRequireWildcard(require("react"));
|
|
10
10
|
var _slateReact = require("slate-react");
|
|
11
11
|
var _slate = require("slate");
|
|
@@ -17,24 +17,30 @@ var _core = require("../../extension/core");
|
|
|
17
17
|
var _common = require("../../utils/common");
|
|
18
18
|
require("./style.css");
|
|
19
19
|
const isMacOS = (0, _common.isMac)();
|
|
20
|
-
|
|
20
|
+
const SimpleSlateEditor = _ref => {
|
|
21
21
|
let {
|
|
22
|
+
isInline,
|
|
23
|
+
focusNodePath,
|
|
22
24
|
value,
|
|
23
25
|
editorApi,
|
|
24
26
|
onSave,
|
|
25
27
|
columns,
|
|
26
28
|
onContentChanged,
|
|
27
|
-
isSupportFormula
|
|
29
|
+
isSupportFormula,
|
|
30
|
+
onExpandEditorToggle
|
|
28
31
|
} = _ref;
|
|
29
32
|
const [slateValue, setSlateValue] = (0, _react.useState)(value);
|
|
30
|
-
const editor = (0, _react.useMemo)(() => (0, _withPropsEditor.default)(_extension.baseEditor, {
|
|
33
|
+
const editor = (0, _react.useMemo)(() => (0, _withPropsEditor.default)(isInline ? _extension.inlineEditor : _extension.baseEditor, {
|
|
31
34
|
editorApi,
|
|
32
35
|
onSave,
|
|
33
36
|
columns
|
|
34
|
-
}), [columns, editorApi, onSave]);
|
|
37
|
+
}), [columns, editorApi, onSave, isInline]);
|
|
35
38
|
const eventProxy = (0, _react.useMemo)(() => {
|
|
36
39
|
return new _eventHandler.default(editor);
|
|
37
40
|
}, [editor]);
|
|
41
|
+
const ToolbarComponent = (0, _react.useMemo)(() => {
|
|
42
|
+
return isInline ? _extension.InlineToolbar : _extension.Toolbar;
|
|
43
|
+
}, [isInline]);
|
|
38
44
|
const decorate = (0, _extension.useHighlight)(editor);
|
|
39
45
|
const onChange = (0, _react.useCallback)(value => {
|
|
40
46
|
setSlateValue(value);
|
|
@@ -47,9 +53,21 @@ function SimpleSlateEditor(_ref) {
|
|
|
47
53
|
const eventBus = _eventBus.default.getInstance();
|
|
48
54
|
eventBus.dispatch('change');
|
|
49
55
|
}, [editor, onContentChanged]);
|
|
50
|
-
const
|
|
56
|
+
const focusNode = (0, _react.useCallback)((editor, focusNodePath) => {
|
|
51
57
|
const [firstNode] = editor.children;
|
|
52
58
|
if (!firstNode) return;
|
|
59
|
+
if (focusNodePath) {
|
|
60
|
+
const customFocusNodePath = (0, _core.getNode)(editor, focusNodePath);
|
|
61
|
+
if (customFocusNodePath) {
|
|
62
|
+
const startOfFirstNode = _slate.Editor.start(editor, focusNodePath);
|
|
63
|
+
const range = {
|
|
64
|
+
anchor: startOfFirstNode,
|
|
65
|
+
focus: startOfFirstNode
|
|
66
|
+
};
|
|
67
|
+
(0, _core.focusEditor)(editor, range);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
53
71
|
const [firstNodeFirstChild] = firstNode.children;
|
|
54
72
|
if (firstNodeFirstChild) {
|
|
55
73
|
const startOfFirstNode = _slate.Editor.start(editor, [0, 0]);
|
|
@@ -85,7 +103,7 @@ function SimpleSlateEditor(_ref) {
|
|
|
85
103
|
});
|
|
86
104
|
const timer = setTimeout(() => {
|
|
87
105
|
editor.forceNormalize = false;
|
|
88
|
-
|
|
106
|
+
focusNode(editor, focusNodePath);
|
|
89
107
|
}, 300);
|
|
90
108
|
return () => {
|
|
91
109
|
editor.forceNormalize = false;
|
|
@@ -108,15 +126,16 @@ function SimpleSlateEditor(_ref) {
|
|
|
108
126
|
const onEditorClick = (0, _react.useCallback)(() => {
|
|
109
127
|
const value = editor.children;
|
|
110
128
|
if (value.length === 1 && _slate.Node.string(value[0]).length === 0) {
|
|
111
|
-
|
|
129
|
+
focusNode(editor);
|
|
112
130
|
}
|
|
113
|
-
}, [editor,
|
|
131
|
+
}, [editor, focusNode]);
|
|
114
132
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
115
133
|
className: "sf-simple-slate-editor-container"
|
|
116
|
-
}, /*#__PURE__*/_react.default.createElement(
|
|
134
|
+
}, /*#__PURE__*/_react.default.createElement(ToolbarComponent, {
|
|
117
135
|
editor: editor,
|
|
118
136
|
isSupportFormula: isSupportFormula,
|
|
119
|
-
isSupportColumn: !!columns
|
|
137
|
+
isSupportColumn: !!columns,
|
|
138
|
+
onExpandEditorToggle: onExpandEditorToggle
|
|
120
139
|
}), /*#__PURE__*/_react.default.createElement("div", {
|
|
121
140
|
className: "sf-slate-editor-content",
|
|
122
141
|
onClick: onEditorClick
|
|
@@ -137,4 +156,8 @@ function SimpleSlateEditor(_ref) {
|
|
|
137
156
|
onKeyDown: eventProxy.onKeyDown,
|
|
138
157
|
onCopy: eventProxy.onCopy
|
|
139
158
|
})))))));
|
|
140
|
-
}
|
|
159
|
+
};
|
|
160
|
+
SimpleSlateEditor.defaultProps = {
|
|
161
|
+
isInline: false
|
|
162
|
+
};
|
|
163
|
+
var _default = exports.default = SimpleSlateEditor;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
var _constants = require("../constants");
|
|
10
|
+
var _menu = require("./menu");
|
|
11
|
+
const ExpandEditorMenu = _ref => {
|
|
12
|
+
let {
|
|
13
|
+
readonly,
|
|
14
|
+
isRichEditor,
|
|
15
|
+
onExpandEditorToggle,
|
|
16
|
+
className
|
|
17
|
+
} = _ref;
|
|
18
|
+
const config = _constants.MENUS_CONFIG_MAP[_constants.EXPAND_EDITOR];
|
|
19
|
+
return /*#__PURE__*/_react.default.createElement(_menu.MenuItem, Object.assign({
|
|
20
|
+
disabled: readonly,
|
|
21
|
+
isActive: false,
|
|
22
|
+
isRichEditor: isRichEditor,
|
|
23
|
+
type: _constants.EXPAND_EDITOR,
|
|
24
|
+
onMouseDown: onExpandEditorToggle,
|
|
25
|
+
className: className
|
|
26
|
+
}, config));
|
|
27
|
+
};
|
|
28
|
+
var _default = exports.default = ExpandEditorMenu;
|
|
@@ -10,6 +10,12 @@ Object.defineProperty(exports, "ElementPopover", {
|
|
|
10
10
|
return _elementPopover.default;
|
|
11
11
|
}
|
|
12
12
|
});
|
|
13
|
+
Object.defineProperty(exports, "ExpandEditorMenu", {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
get: function () {
|
|
16
|
+
return _expandEditorMenu.default;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
13
19
|
Object.defineProperty(exports, "MenuGroup", {
|
|
14
20
|
enumerable: true,
|
|
15
21
|
get: function () {
|
|
@@ -22,6 +28,12 @@ Object.defineProperty(exports, "MenuItem", {
|
|
|
22
28
|
return _menu.MenuItem;
|
|
23
29
|
}
|
|
24
30
|
});
|
|
31
|
+
Object.defineProperty(exports, "MoreMenu", {
|
|
32
|
+
enumerable: true,
|
|
33
|
+
get: function () {
|
|
34
|
+
return _moreMenu.default;
|
|
35
|
+
}
|
|
36
|
+
});
|
|
25
37
|
Object.defineProperty(exports, "Select", {
|
|
26
38
|
enumerable: true,
|
|
27
39
|
get: function () {
|
|
@@ -30,4 +42,6 @@ Object.defineProperty(exports, "Select", {
|
|
|
30
42
|
});
|
|
31
43
|
var _elementPopover = _interopRequireDefault(require("./element-popover"));
|
|
32
44
|
var _menu = require("./menu");
|
|
33
|
-
var _select = _interopRequireDefault(require("./select"));
|
|
45
|
+
var _select = _interopRequireDefault(require("./select"));
|
|
46
|
+
var _moreMenu = _interopRequireDefault(require("./more-menu"));
|
|
47
|
+
var _expandEditorMenu = _interopRequireDefault(require("./expand-editor-menu"));
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
.sf-editor-menu-popover {
|
|
2
|
+
padding: 8px 0;
|
|
3
|
+
min-width: 12rem;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.sf-editor-menu-popover .popover-inner .sf-slate-help-info-control {
|
|
7
|
+
height: 24px;
|
|
8
|
+
width: 24px;
|
|
9
|
+
margin: 4px 8px;
|
|
10
|
+
display: flex;
|
|
11
|
+
align-items: center;
|
|
12
|
+
justify-content: center;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.sf-editor-menu-popover .popover-inner .sf-slate-help-info-control:hover {
|
|
16
|
+
background-color: #f2f2f2;
|
|
17
|
+
border-radius: 2px;
|
|
18
|
+
cursor: pointer;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.sf-editor-menu-popover .popover-inner .sf-slate-help-info-control .icon-use-help {
|
|
22
|
+
font-size: 13px;
|
|
23
|
+
color: #555;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.sf-editor-menu-popover .bs-popover-auto[x-placement^=bottom] {
|
|
27
|
+
margin-top: 2px;
|
|
28
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
10
|
+
var _reactstrap = require("reactstrap");
|
|
11
|
+
var _constants = require("../../constants");
|
|
12
|
+
require("./index.css");
|
|
13
|
+
const MoreMenu = _ref => {
|
|
14
|
+
let {
|
|
15
|
+
className,
|
|
16
|
+
disabled,
|
|
17
|
+
isRichEditor,
|
|
18
|
+
children
|
|
19
|
+
} = _ref;
|
|
20
|
+
const validClassName = (0, _classnames.default)(className, {
|
|
21
|
+
'sf-rich-editor': isRichEditor,
|
|
22
|
+
'sf-icon-btn': true,
|
|
23
|
+
'sf-icon-btn-disabled': disabled,
|
|
24
|
+
'sf-icon-btn-hover': !disabled
|
|
25
|
+
});
|
|
26
|
+
const config = _constants.MENUS_CONFIG_MAP[_constants.MORE_OPERATION];
|
|
27
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("button", {
|
|
28
|
+
className: validClassName,
|
|
29
|
+
type: "button",
|
|
30
|
+
id: config.id
|
|
31
|
+
}, /*#__PURE__*/_react.default.createElement("i", {
|
|
32
|
+
className: config.iconClass
|
|
33
|
+
})), /*#__PURE__*/_react.default.createElement(_reactstrap.UncontrolledPopover, {
|
|
34
|
+
target: config.id,
|
|
35
|
+
className: "sf-editor-menu-popover sf-editor--more-menu-popover",
|
|
36
|
+
trigger: "legacy",
|
|
37
|
+
placement: "bottom-end",
|
|
38
|
+
hideArrow: true,
|
|
39
|
+
fade: false
|
|
40
|
+
}, children));
|
|
41
|
+
};
|
|
42
|
+
MoreMenu.defaultProps = {
|
|
43
|
+
isRichEditor: true,
|
|
44
|
+
className: 'sf-menu-group-item'
|
|
45
|
+
};
|
|
46
|
+
var _default = exports.default = MoreMenu;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.TEXT_STYLE_MAP = exports.TABLE_SUBMENU_MAP = exports.MENUS_CONFIG_MAP = exports.CLEAR_FORMAT = void 0;
|
|
6
|
+
exports.TEXT_STYLE_MAP = exports.TABLE_SUBMENU_MAP = exports.MORE_OPERATION = exports.MENUS_CONFIG_MAP = exports.EXPAND_EDITOR = exports.CLEAR_FORMAT = void 0;
|
|
7
7
|
var _elementTypes = require("./element-types");
|
|
8
8
|
const BOLD = 'bold';
|
|
9
9
|
const ITALIC = 'italic';
|
|
@@ -12,6 +12,8 @@ const CODE = 'code';
|
|
|
12
12
|
const DELETE = 'delete';
|
|
13
13
|
const ADD = 'add';
|
|
14
14
|
const CLEAR_FORMAT = exports.CLEAR_FORMAT = 'clear_format';
|
|
15
|
+
const MORE_OPERATION = exports.MORE_OPERATION = 'more_operation';
|
|
16
|
+
const EXPAND_EDITOR = exports.EXPAND_EDITOR = 'expand_editor';
|
|
15
17
|
const TEXT_STYLE_MAP = exports.TEXT_STYLE_MAP = {
|
|
16
18
|
BOLD: BOLD,
|
|
17
19
|
ITALIC: ITALIC,
|
|
@@ -142,5 +144,15 @@ const MENUS_CONFIG_MAP = exports.MENUS_CONFIG_MAP = {
|
|
|
142
144
|
id: "seafile_".concat(_elementTypes.COLUMN),
|
|
143
145
|
iconClass: 'iconfont icon-choose-column',
|
|
144
146
|
text: 'Insert_column'
|
|
147
|
+
},
|
|
148
|
+
[MORE_OPERATION]: {
|
|
149
|
+
id: "seafile_".concat(MORE_OPERATION),
|
|
150
|
+
iconClass: 'iconfont icon-more',
|
|
151
|
+
text: ''
|
|
152
|
+
},
|
|
153
|
+
[EXPAND_EDITOR]: {
|
|
154
|
+
id: "seafile_".concat(EXPAND_EDITOR),
|
|
155
|
+
iconClass: 'iconfont icon-fullscreen',
|
|
156
|
+
text: 'Expand_editor'
|
|
145
157
|
}
|
|
146
158
|
};
|
package/dist/extension/editor.js
CHANGED
|
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.createSlateEditor = exports.baseEditor = void 0;
|
|
7
|
+
exports.inlineEditor = exports.createSlateEditor = exports.baseEditor = void 0;
|
|
8
8
|
var _slate = require("slate");
|
|
9
9
|
var _slateHistory = require("slate-history");
|
|
10
10
|
var _slateReact = require("slate-react");
|
|
@@ -16,6 +16,13 @@ const baseEditor = exports.baseEditor = _plugins.default.reduce((editor, pluginI
|
|
|
16
16
|
}
|
|
17
17
|
return editor;
|
|
18
18
|
}, (0, _slateHistory.withHistory)((0, _slateReact.withReact)((0, _slate.createEditor)())));
|
|
19
|
+
const inlineEditor = exports.inlineEditor = _plugins.default.reduce((editor, pluginItem) => {
|
|
20
|
+
const withPlugin = pluginItem.editorPlugin;
|
|
21
|
+
if (withPlugin) {
|
|
22
|
+
return withPlugin(editor);
|
|
23
|
+
}
|
|
24
|
+
return editor;
|
|
25
|
+
}, (0, _slateHistory.withHistory)((0, _slateReact.withReact)((0, _slate.createEditor)())));
|
|
19
26
|
const createSlateEditor = () => {
|
|
20
27
|
const editor = _plugins.default.reduce((editor, pluginItem) => {
|
|
21
28
|
const withPlugin = pluginItem.editorPlugin;
|
package/dist/extension/index.js
CHANGED
|
@@ -10,6 +10,12 @@ Object.defineProperty(exports, "ELementTypes", {
|
|
|
10
10
|
return _constants.ELementTypes;
|
|
11
11
|
}
|
|
12
12
|
});
|
|
13
|
+
Object.defineProperty(exports, "InlineToolbar", {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
get: function () {
|
|
16
|
+
return _toolbar.InlineToolbar;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
13
19
|
Object.defineProperty(exports, "SetNodeToDecorations", {
|
|
14
20
|
enumerable: true,
|
|
15
21
|
get: function () {
|
|
@@ -34,6 +40,12 @@ Object.defineProperty(exports, "createSlateEditor", {
|
|
|
34
40
|
return _editor.createSlateEditor;
|
|
35
41
|
}
|
|
36
42
|
});
|
|
43
|
+
Object.defineProperty(exports, "inlineEditor", {
|
|
44
|
+
enumerable: true,
|
|
45
|
+
get: function () {
|
|
46
|
+
return _editor.inlineEditor;
|
|
47
|
+
}
|
|
48
|
+
});
|
|
37
49
|
Object.defineProperty(exports, "isEmptyParagraph", {
|
|
38
50
|
enumerable: true,
|
|
39
51
|
get: function () {
|
|
@@ -4,10 +4,17 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
+
Object.defineProperty(exports, "InlineToolbar", {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
get: function () {
|
|
10
|
+
return _inlineToolbar.default;
|
|
11
|
+
}
|
|
12
|
+
});
|
|
7
13
|
Object.defineProperty(exports, "Toolbar", {
|
|
8
14
|
enumerable: true,
|
|
9
15
|
get: function () {
|
|
10
16
|
return _headerToolbar.default;
|
|
11
17
|
}
|
|
12
18
|
});
|
|
13
|
-
var _headerToolbar = _interopRequireDefault(require("./header-toolbar"));
|
|
19
|
+
var _headerToolbar = _interopRequireDefault(require("./header-toolbar"));
|
|
20
|
+
var _inlineToolbar = _interopRequireDefault(require("./inline-toolbar"));
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
.sf-slate-editor-toolbar {
|
|
2
|
+
background-color: #fcfcfc !important;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.sf-slate-editor-toolbar .sf-slate-article-info-control {
|
|
6
|
+
position: absolute;
|
|
7
|
+
right: 20px;
|
|
8
|
+
height: 30px;
|
|
9
|
+
width: 30px;
|
|
10
|
+
line-height: 30px;
|
|
11
|
+
display: flex;
|
|
12
|
+
justify-content: center;
|
|
13
|
+
cursor: pointer;
|
|
14
|
+
color: #555;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.sf-slate-editor-toolbar .sf-slate-article-info-control:hover {
|
|
18
|
+
background-color: #e5e5e5;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.sf-slate-editor-toolbar .sf-slate-help-info-control {
|
|
22
|
+
position: absolute;
|
|
23
|
+
right: 20px;
|
|
24
|
+
height: 30px;
|
|
25
|
+
width: 30px;
|
|
26
|
+
line-height: 30px;
|
|
27
|
+
display: flex;
|
|
28
|
+
justify-content: center;
|
|
29
|
+
cursor: pointer;
|
|
30
|
+
color: #555;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.sf-slate-editor-toolbar .sf-slate-help-info-control > span:hover {
|
|
34
|
+
cursor: pointer;
|
|
35
|
+
color: #333;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.sf-slate-editor-toolbar .sf-slate-article-info-control .iconfont {
|
|
39
|
+
font-size: 13px;
|
|
40
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
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 _useSelectionUpdate = _interopRequireDefault(require("../../../hooks/use-selection-update"));
|
|
11
|
+
var _commons = require("../../commons");
|
|
12
|
+
var _menu = _interopRequireDefault(require("../../plugins/blockquote/menu"));
|
|
13
|
+
var _menu2 = _interopRequireDefault(require("../../plugins/header/menu"));
|
|
14
|
+
var _menu3 = _interopRequireDefault(require("../../plugins/text-style/menu"));
|
|
15
|
+
var _menu4 = _interopRequireDefault(require("../../plugins/link/menu"));
|
|
16
|
+
var _constants = require("../../constants");
|
|
17
|
+
var _menu5 = _interopRequireDefault(require("../../plugins/image/menu"));
|
|
18
|
+
var _menu6 = _interopRequireDefault(require("../../plugins/code-block/menu"));
|
|
19
|
+
var _menu7 = _interopRequireDefault(require("../../plugins/check-list/menu"));
|
|
20
|
+
var _menu8 = _interopRequireDefault(require("../../plugins/list/menu"));
|
|
21
|
+
var _elementTypes = require("../../constants/element-types");
|
|
22
|
+
var _tableOperator = require("../../plugins/table/menu/table-operator");
|
|
23
|
+
var _helper = require("../../plugins/table/helper");
|
|
24
|
+
var _menu9 = _interopRequireDefault(require("../../plugins/clear-format/menu"));
|
|
25
|
+
var _shortcutDialog = _interopRequireDefault(require("../user-help/shortcut-dialog"));
|
|
26
|
+
require("./index.css");
|
|
27
|
+
// import TableMenu from '../../plugins/table/menu';
|
|
28
|
+
// import FormulaMenu from '../../plugins/formula/menu';
|
|
29
|
+
// import ColumnMenu from '../../plugins/column/menu';
|
|
30
|
+
|
|
31
|
+
const InlineToolbar = _ref => {
|
|
32
|
+
let {
|
|
33
|
+
editor,
|
|
34
|
+
readonly = false,
|
|
35
|
+
isRichEditor = false,
|
|
36
|
+
isSupportFormula = false,
|
|
37
|
+
isSupportInsertSeafileImage = false,
|
|
38
|
+
isSupportColumn = false,
|
|
39
|
+
onExpandEditorToggle
|
|
40
|
+
} = _ref;
|
|
41
|
+
(0, _useSelectionUpdate.default)();
|
|
42
|
+
|
|
43
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
44
|
+
const isShowSubTableMenu = (0, _react.useMemo)(() => (0, _helper.isInTable)(editor), [editor.selection]);
|
|
45
|
+
const [isShowHelpModal, setIsShowHelpModal] = (0, _react.useState)(false);
|
|
46
|
+
const onHelpIconToggle = (0, _react.useCallback)(() => {
|
|
47
|
+
setIsShowHelpModal(!isShowHelpModal);
|
|
48
|
+
}, [isShowHelpModal]);
|
|
49
|
+
const commonProps = {
|
|
50
|
+
editor,
|
|
51
|
+
readonly,
|
|
52
|
+
isRichEditor
|
|
53
|
+
};
|
|
54
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
55
|
+
className: "sf-slate-editor-toolbar"
|
|
56
|
+
}, isRichEditor && /*#__PURE__*/_react.default.createElement(_commons.MenuGroup, null), /*#__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, {
|
|
57
|
+
type: _constants.TEXT_STYLE_MAP.BOLD
|
|
58
|
+
})), /*#__PURE__*/_react.default.createElement(_menu3.default, Object.assign({}, commonProps, {
|
|
59
|
+
type: _constants.TEXT_STYLE_MAP.ITALIC
|
|
60
|
+
})), /*#__PURE__*/_react.default.createElement(_menu3.default, Object.assign({}, commonProps, {
|
|
61
|
+
type: _constants.TEXT_STYLE_MAP.CODE
|
|
62
|
+
})), /*#__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(_menu7.default, commonProps), /*#__PURE__*/_react.default.createElement(_menu8.default, Object.assign({}, commonProps, {
|
|
63
|
+
type: _elementTypes.ORDERED_LIST
|
|
64
|
+
})), /*#__PURE__*/_react.default.createElement(_menu8.default, Object.assign({}, commonProps, {
|
|
65
|
+
type: _elementTypes.UNORDERED_LIST
|
|
66
|
+
}))), /*#__PURE__*/_react.default.createElement(_commons.MenuGroup, null, /*#__PURE__*/_react.default.createElement(_menu6.default, commonProps), /*#__PURE__*/_react.default.createElement(_commons.MoreMenu, commonProps, /*#__PURE__*/_react.default.createElement(_commons.MenuGroup, null, /*#__PURE__*/_react.default.createElement(_menu5.default, Object.assign({}, commonProps, {
|
|
67
|
+
isSupportInsertSeafileImage: isSupportInsertSeafileImage
|
|
68
|
+
}))), isShowSubTableMenu && /*#__PURE__*/_react.default.createElement(_commons.MenuGroup, {
|
|
69
|
+
className: "sf-menu-group sf-table-operations-group"
|
|
70
|
+
}, /*#__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(_menu9.default, commonProps)), !isRichEditor && /*#__PURE__*/_react.default.createElement("div", {
|
|
71
|
+
className: "sf-slate-help-info-control",
|
|
72
|
+
onClick: onHelpIconToggle
|
|
73
|
+
}, /*#__PURE__*/_react.default.createElement("span", {
|
|
74
|
+
className: "iconfont icon-use-help"
|
|
75
|
+
})))), onExpandEditorToggle && /*#__PURE__*/_react.default.createElement(_commons.MenuGroup, null, onExpandEditorToggle && /*#__PURE__*/_react.default.createElement(_commons.ExpandEditorMenu, Object.assign({}, commonProps, {
|
|
76
|
+
onExpandEditorToggle: onExpandEditorToggle
|
|
77
|
+
}))), isShowHelpModal && /*#__PURE__*/_react.default.createElement(_shortcutDialog.default, {
|
|
78
|
+
isRichEditor: isRichEditor,
|
|
79
|
+
toggleShortcutDialog: onHelpIconToggle
|
|
80
|
+
}));
|
|
81
|
+
};
|
|
82
|
+
InlineToolbar.defaultProps = {
|
|
83
|
+
readonly: false
|
|
84
|
+
};
|
|
85
|
+
var _default = exports.default = InlineToolbar;
|
package/dist/index.js
CHANGED
|
@@ -28,6 +28,12 @@ Object.defineProperty(exports, "LongTextEditorDialog", {
|
|
|
28
28
|
return _longtextEditorDialog.default;
|
|
29
29
|
}
|
|
30
30
|
});
|
|
31
|
+
Object.defineProperty(exports, "LongTextInlineEditor", {
|
|
32
|
+
enumerable: true,
|
|
33
|
+
get: function () {
|
|
34
|
+
return _longtextInlineEditor.default;
|
|
35
|
+
}
|
|
36
|
+
});
|
|
31
37
|
Object.defineProperty(exports, "MarkdownEditor", {
|
|
32
38
|
enumerable: true,
|
|
33
39
|
get: function () {
|
|
@@ -106,6 +112,7 @@ var _markdownView = _interopRequireDefault(require("./pages/markdown-view"));
|
|
|
106
112
|
var _simpleEditor = _interopRequireDefault(require("./pages/simple-editor"));
|
|
107
113
|
var _emailEditorDialog = _interopRequireDefault(require("./pages/email-editor-dialog"));
|
|
108
114
|
var _longtextEditorDialog = _interopRequireDefault(require("./pages/longtext-editor-dialog"));
|
|
115
|
+
var _longtextInlineEditor = _interopRequireDefault(require("./pages/longtext-inline-editor"));
|
|
109
116
|
var _markdownPreview = _interopRequireDefault(require("./pages/markdown-preview"));
|
|
110
117
|
var _seatableEditor = _interopRequireDefault(require("./pages/seatable-editor"));
|
|
111
118
|
var _seatableViewer = _interopRequireDefault(require("./pages/seatable-viewer"));
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/defineProperty"));
|
|
9
|
+
var _react = _interopRequireDefault(require("react"));
|
|
10
|
+
/**
|
|
11
|
+
* Detecting outside click on a react component is surprisingly hard.
|
|
12
|
+
* A general approach is to have a global click handler on the document
|
|
13
|
+
* which checks if the click target is inside the editor container or
|
|
14
|
+
* not using editorContainer.contains(e.target). This approach works well
|
|
15
|
+
* until portals are used for editors. Portals render children into a DOM
|
|
16
|
+
* node that exists outside the DOM hierarchy of the parent component so
|
|
17
|
+
* editorContainer.contains(e.target) does not work. Here are some examples
|
|
18
|
+
* of the DOM structure with different types of editors
|
|
19
|
+
*
|
|
20
|
+
*
|
|
21
|
+
* SimpleEditor for example Texbox (No Portals)
|
|
22
|
+
* <div react-data-grid>..<div>
|
|
23
|
+
* <div portal-created-by-the-grid-for-editors>
|
|
24
|
+
* <div editor-container>
|
|
25
|
+
* <div simple-editor>..</div>
|
|
26
|
+
* </div>
|
|
27
|
+
* <div>
|
|
28
|
+
*
|
|
29
|
+
* ComplexEditor for example Modals (using Portals)
|
|
30
|
+
* <div react-data-grid>..<div>
|
|
31
|
+
* <div portal-created-by-the-grid-for-editors>
|
|
32
|
+
* <div editor-container>
|
|
33
|
+
* // Nothing here
|
|
34
|
+
* </div>
|
|
35
|
+
* <div>
|
|
36
|
+
* <div portal-created-by-the-editor>
|
|
37
|
+
* <div complex-editor>..</div>
|
|
38
|
+
* </div>
|
|
39
|
+
*
|
|
40
|
+
*
|
|
41
|
+
* One approach to detect outside click is to use event bubbling through
|
|
42
|
+
* portals. An event fired from inside a portal will propagate to ancestors
|
|
43
|
+
* in the containing React tree, even if those elements are not ancestors
|
|
44
|
+
* in the DOM tree. This means a click handler can be attached on the document
|
|
45
|
+
* and on the editor container. The editor container can set a flag to notify
|
|
46
|
+
* that the click was inside the editor and the document click handler can use
|
|
47
|
+
* this flag to call onClickOutside. This approach however has a few caveats
|
|
48
|
+
* - Click handler on the document is set using document.addEventListener
|
|
49
|
+
* - Click handler on the editor container is set using onClick prop
|
|
50
|
+
*
|
|
51
|
+
* This means if a child component inside the editor calls e.stopPropagation
|
|
52
|
+
* then the click handler on the editor container will not be called whereas
|
|
53
|
+
* document click handler will be called.
|
|
54
|
+
* https://github.com/facebook/react/issues/12518
|
|
55
|
+
*
|
|
56
|
+
* To solve this issue onClickCapture event is used.
|
|
57
|
+
*/
|
|
58
|
+
|
|
59
|
+
class ClickOutside extends _react.default.Component {
|
|
60
|
+
constructor() {
|
|
61
|
+
super(...arguments);
|
|
62
|
+
(0, _defineProperty2.default)(this, "isClickedInside", false);
|
|
63
|
+
(0, _defineProperty2.default)(this, "handleDocumentClick", e => {
|
|
64
|
+
if (this.isClickedInside) {
|
|
65
|
+
this.isClickedInside = false;
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
this.props.onClickOutside(e);
|
|
69
|
+
});
|
|
70
|
+
(0, _defineProperty2.default)(this, "handleMouseDown", () => {
|
|
71
|
+
this.isClickedInside = true;
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
componentDidMount() {
|
|
75
|
+
document.addEventListener('mousedown', this.handleDocumentClick);
|
|
76
|
+
}
|
|
77
|
+
componentWillUnmount() {
|
|
78
|
+
document.removeEventListener('mousedown', this.handleDocumentClick);
|
|
79
|
+
}
|
|
80
|
+
render() {
|
|
81
|
+
return /*#__PURE__*/_react.default.cloneElement(_react.default.Children.only(this.props.children), {
|
|
82
|
+
onMouseDownCapture: this.handleMouseDown
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
var _default = exports.default = ClickOutside;
|