@seafile/seafile-editor 2.0.23 → 2.0.25-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/editors/inline-editor/index.js +9 -2
- package/dist/editors/slate-editor/style.css +2 -2
- package/dist/extension/commons/dropdown-menu-item/index.css +0 -2
- package/dist/extension/commons/insert-element-dialog/index.js +0 -6
- package/dist/extension/commons/menu/menu.css +2 -1
- package/dist/extension/commons/select/index.js +1 -1
- package/dist/extension/commons/select/style.css +3 -3
- package/dist/extension/plugins/image/menu/index.js +4 -12
- package/dist/extension/plugins/table/context-menu/index.js +1 -1
- package/dist/extension/plugins/table/context-menu/style.css +2 -2
- package/dist/extension/plugins/table/menu/index.js +1 -1
- package/dist/extension/toolbar/header-toolbar/index.js +10 -1
- package/dist/extension/toolbar/header-toolbar/insert-toolbar/index.js +5 -3
- package/dist/extension/toolbar/inline-toolbar/index.css +4 -0
- package/dist/extension/toolbar/inline-toolbar/index.js +12 -3
- package/dist/hooks/use-insert-image.js +3 -0
- package/dist/pages/longtext-inline-editor/index.css +4 -0
- package/dist/pages/longtext-inline-editor/index.js +7 -2
- package/dist/pages/longtext-inline-editor/normal-editor.js +7 -2
- package/dist/pages/simple-editor.js +13 -3
- package/dist/slate-convert/slate-to-md/index.js +14 -5
- package/package.json +2 -2
- package/public/media/seafile-editor-font/iconfont.eot +0 -0
- package/public/media/seafile-editor-font/iconfont.svg +2 -2
- 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 -12
|
@@ -18,9 +18,10 @@ var _core = require("../../extension/core");
|
|
|
18
18
|
var _common = require("../../utils/common");
|
|
19
19
|
var _eventTypes = require("../../constants/event-types");
|
|
20
20
|
var _elementTypes = require("../../extension/constants/element-types");
|
|
21
|
+
var _useInsertImage = _interopRequireDefault(require("../../hooks/use-insert-image"));
|
|
21
22
|
require("./index.css");
|
|
22
23
|
const isMacOS = (0, _common.isMac)();
|
|
23
|
-
const InlineEditor = _ref => {
|
|
24
|
+
const InlineEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
|
|
24
25
|
let {
|
|
25
26
|
enableEdit,
|
|
26
27
|
value,
|
|
@@ -45,6 +46,7 @@ const InlineEditor = _ref => {
|
|
|
45
46
|
const eventProxy = (0, _react.useMemo)(() => {
|
|
46
47
|
return new _eventHandler.default(editor);
|
|
47
48
|
}, [editor]);
|
|
49
|
+
(0, _useInsertImage.default)(editor);
|
|
48
50
|
const decorate = (0, _extension.useHighlight)(editor);
|
|
49
51
|
const onChange = (0, _react.useCallback)(value => {
|
|
50
52
|
setSlateValue(value);
|
|
@@ -154,6 +156,11 @@ const InlineEditor = _ref => {
|
|
|
154
156
|
};
|
|
155
157
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
156
158
|
}, []);
|
|
159
|
+
(0, _react.useImperativeHandle)(ref, () => {
|
|
160
|
+
return {
|
|
161
|
+
getEditor: () => editor
|
|
162
|
+
};
|
|
163
|
+
}, [editor]);
|
|
157
164
|
const onEditorClick = (0, _react.useCallback)(() => {
|
|
158
165
|
if (!enableEdit) {
|
|
159
166
|
focusRangeRef.current = editor.selection;
|
|
@@ -195,5 +202,5 @@ const InlineEditor = _ref => {
|
|
|
195
202
|
onKeyDown: eventProxy.onKeyDown,
|
|
196
203
|
onCopy: eventProxy.onCopy
|
|
197
204
|
})))))));
|
|
198
|
-
};
|
|
205
|
+
});
|
|
199
206
|
var _default = exports.default = InlineEditor;
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
.sf-slate-editor-container .sf-slate-editor-toolbar {
|
|
11
11
|
display: flex;
|
|
12
12
|
justify-content: center;
|
|
13
|
-
height:
|
|
13
|
+
height: 37px;
|
|
14
14
|
align-items: center;
|
|
15
15
|
padding: 0 10px;
|
|
16
16
|
background-color: #fff;
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
|
|
27
27
|
.sf-slate-editor-container .sf-slate-editor-content {
|
|
28
28
|
width: 100%;
|
|
29
|
-
height: calc(100% -
|
|
29
|
+
height: calc(100% - 37px);
|
|
30
30
|
display: flex;
|
|
31
31
|
background: #f5f5f5;
|
|
32
32
|
position: relative;
|
|
@@ -13,7 +13,6 @@
|
|
|
13
13
|
|
|
14
14
|
.sf-dropdown-menu .sf-dropdown-item-right-icon {
|
|
15
15
|
color: #999;
|
|
16
|
-
transform: scale(.8);
|
|
17
16
|
}
|
|
18
17
|
|
|
19
18
|
.sf-dropdown-menu .sf-dropdown-item-with-left-icon {
|
|
@@ -45,7 +44,6 @@
|
|
|
45
44
|
|
|
46
45
|
.sf-dropdown-menu .sf-dropdown-item-right-icon {
|
|
47
46
|
color: #999;
|
|
48
|
-
transform: scale(.8);
|
|
49
47
|
}
|
|
50
48
|
|
|
51
49
|
.sf-dropdown-menu .sf-dropdown-item-content .sf-dropdown-item-content-icon {
|
|
@@ -12,7 +12,6 @@ var _eventBus = _interopRequireDefault(require("../../../utils/event-bus"));
|
|
|
12
12
|
var _eventTypes = require("../../../constants/event-types");
|
|
13
13
|
var _constants = require("../../constants");
|
|
14
14
|
var _linkModal = _interopRequireDefault(require("../../plugins/link/menu/link-modal"));
|
|
15
|
-
var _imageMenuDialog = _interopRequireDefault(require("../../plugins/image/menu/image-menu-dialog"));
|
|
16
15
|
var _formulaModal = _interopRequireDefault(require("../../plugins/formula/menu/formula-modal"));
|
|
17
16
|
const InsertElementDialog = _ref => {
|
|
18
17
|
let {
|
|
@@ -78,11 +77,6 @@ const InsertElementDialog = _ref => {
|
|
|
78
77
|
linkTitle: linkInfo.linkTitle,
|
|
79
78
|
linkUrl: linkInfo.linkUrl
|
|
80
79
|
});
|
|
81
|
-
} else if (_constants.ELementTypes.IMAGE === dialogType) {
|
|
82
|
-
return isOpenLinkModal && /*#__PURE__*/_react.default.createElement(_imageMenuDialog.default, {
|
|
83
|
-
closeDialog: onCloseModal,
|
|
84
|
-
editor: editor
|
|
85
|
-
});
|
|
86
80
|
} else if (_constants.ELementTypes.FORMULA === dialogType) {
|
|
87
81
|
return isOpenLinkModal && /*#__PURE__*/_react.default.createElement(_formulaModal.default, {
|
|
88
82
|
onCloseModal: onCloseModal,
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
display: flex;
|
|
8
8
|
align-items: center;
|
|
9
9
|
justify-content: center;
|
|
10
|
+
border-radius: 0 !important;
|
|
10
11
|
}
|
|
11
12
|
|
|
12
13
|
.sf-menu-group .sf-menu-group-item {
|
|
@@ -33,7 +34,7 @@
|
|
|
33
34
|
}
|
|
34
35
|
|
|
35
36
|
.sf-menu-group .sf-menu-group-item .iconfont {
|
|
36
|
-
font-size:
|
|
37
|
+
font-size: 12px;
|
|
37
38
|
}
|
|
38
39
|
|
|
39
40
|
/* sf-menu-with-dropdown */
|
|
@@ -108,7 +108,7 @@ class Select extends _react.default.Component {
|
|
|
108
108
|
className: `control-container ${isActive ? 'active' : ''}`,
|
|
109
109
|
onClick: this.onSelectToggle
|
|
110
110
|
}, !currentOption && /*#__PURE__*/_react.default.createElement("span", {
|
|
111
|
-
className: "label placeholder"
|
|
111
|
+
className: "label placeholder-content"
|
|
112
112
|
}, placeholder), currentOption && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("span", {
|
|
113
113
|
className: `control-icon ${currentOption.iconClass}`
|
|
114
114
|
}), /*#__PURE__*/_react.default.createElement("span", {
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
box-shadow: 0 0 0 2px rgb(70 127 207 / 25%);
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
.select-container .control-container .placeholder {
|
|
28
|
+
.select-container .control-container .placeholder-content {
|
|
29
29
|
color: #BFBFBF;
|
|
30
30
|
}
|
|
31
31
|
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
position: absolute;
|
|
60
60
|
left: 0;
|
|
61
61
|
display: flex;
|
|
62
|
-
min-width:
|
|
62
|
+
min-width: 120px;
|
|
63
63
|
max-height: 265px;
|
|
64
64
|
margin-top: 4px;
|
|
65
65
|
padding: 8px 0;
|
|
@@ -112,7 +112,7 @@
|
|
|
112
112
|
flex-shrink: 0;
|
|
113
113
|
display: flex;
|
|
114
114
|
align-items: center;
|
|
115
|
-
min-width:
|
|
115
|
+
min-width: 120px;
|
|
116
116
|
height: 32px;
|
|
117
117
|
padding: 0 12px;
|
|
118
118
|
cursor: pointer;
|
|
@@ -9,8 +9,6 @@ exports.default = void 0;
|
|
|
9
9
|
var _react = _interopRequireWildcard(require("react"));
|
|
10
10
|
var _elementTypes = require("../../../constants/element-types");
|
|
11
11
|
var _menusConfig = require("../../../constants/menus-config");
|
|
12
|
-
var _eventBus = _interopRequireDefault(require("../../../../utils/event-bus"));
|
|
13
|
-
var _eventTypes = require("../../../../constants/event-types");
|
|
14
12
|
var _helper = require("../helper");
|
|
15
13
|
var _dropdownMenuItem = _interopRequireDefault(require("../../../commons/dropdown-menu-item"));
|
|
16
14
|
var _reactstrap = require("reactstrap");
|
|
@@ -22,7 +20,8 @@ const ImageMenu = _ref => {
|
|
|
22
20
|
let {
|
|
23
21
|
readonly,
|
|
24
22
|
editor,
|
|
25
|
-
toggle
|
|
23
|
+
toggle,
|
|
24
|
+
setIsShowInternetImageModal
|
|
26
25
|
} = _ref;
|
|
27
26
|
const {
|
|
28
27
|
t
|
|
@@ -35,13 +34,6 @@ const ImageMenu = _ref => {
|
|
|
35
34
|
e.nativeEvent.stopImmediatePropagation();
|
|
36
35
|
(_fileInputRef$current = fileInputRef.current) === null || _fileInputRef$current === void 0 ? void 0 : _fileInputRef$current.click();
|
|
37
36
|
}, [toggle]);
|
|
38
|
-
const handleInsertNetworkImage = () => {
|
|
39
|
-
toggle && toggle();
|
|
40
|
-
const eventBus = _eventBus.default.getInstance();
|
|
41
|
-
eventBus.dispatch(_eventTypes.INTERNAL_EVENTS.INSERT_ELEMENT, {
|
|
42
|
-
type: _elementTypes.IMAGE
|
|
43
|
-
});
|
|
44
|
-
};
|
|
45
37
|
const handleUploadLocalImage = (0, _react.useCallback)(async e => {
|
|
46
38
|
const file = e.target.files[0];
|
|
47
39
|
if (!file) return;
|
|
@@ -53,7 +45,7 @@ const ImageMenu = _ref => {
|
|
|
53
45
|
menuConfig: menuConfig,
|
|
54
46
|
className: "pr-2"
|
|
55
47
|
}, !readonly && /*#__PURE__*/_react.default.createElement("i", {
|
|
56
|
-
className: "iconfont icon-
|
|
48
|
+
className: "iconfont icon-right-slide sf-dropdown-item-right-icon"
|
|
57
49
|
})), !readonly && /*#__PURE__*/_react.default.createElement(_reactstrap.UncontrolledPopover, {
|
|
58
50
|
target: menuConfig.id,
|
|
59
51
|
trigger: "hover",
|
|
@@ -68,7 +60,7 @@ const ImageMenu = _ref => {
|
|
|
68
60
|
onClick: openFileDIalog
|
|
69
61
|
}, t('Upload_local_image')), /*#__PURE__*/_react.default.createElement("div", {
|
|
70
62
|
className: "sf-dropdown-menu-item",
|
|
71
|
-
onClick:
|
|
63
|
+
onClick: () => setIsShowInternetImageModal(true)
|
|
72
64
|
}, t('Insert_network_image')))), /*#__PURE__*/_react.default.createElement("input", {
|
|
73
65
|
ref: fileInputRef,
|
|
74
66
|
onClick: openFileDIalog,
|
|
@@ -114,7 +114,7 @@ const ContextMenu = _ref => {
|
|
|
114
114
|
ref: horizontalAlignRef,
|
|
115
115
|
className: "sf-context-menu-item sf-dropdown-menu-item side-extendable"
|
|
116
116
|
}, /*#__PURE__*/_react.default.createElement("span", null, t('Horizontal_align')), /*#__PURE__*/_react.default.createElement("i", {
|
|
117
|
-
className: "iconfont icon-
|
|
117
|
+
className: "iconfont icon-right-slide"
|
|
118
118
|
})), horizontalAlignRef.current && /*#__PURE__*/_react.default.createElement(_horizontalAlignPopover.default, {
|
|
119
119
|
target: horizontalAlignRef,
|
|
120
120
|
editor: editor,
|
|
@@ -35,7 +35,7 @@ const TableMenu = _ref => {
|
|
|
35
35
|
menuConfig: menuConfig,
|
|
36
36
|
className: "pr-2"
|
|
37
37
|
}, !disabled && /*#__PURE__*/_react.default.createElement("i", {
|
|
38
|
-
className: "iconfont icon-
|
|
38
|
+
className: "iconfont icon-right-slide sf-dropdown-item-right-icon"
|
|
39
39
|
})), !disabled && isOpenTableSizeSelector && /*#__PURE__*/_react.default.createElement(_tableSizeSelector.default, {
|
|
40
40
|
ref: tablePopoverRef,
|
|
41
41
|
editor: editor,
|
|
@@ -21,6 +21,7 @@ var _menu7 = _interopRequireDefault(require("../../plugins/clear-format/menu"));
|
|
|
21
21
|
var _shortcutDialog = _interopRequireDefault(require("../user-help/shortcut-dialog"));
|
|
22
22
|
var _insertElementDialog = _interopRequireDefault(require("../../commons/insert-element-dialog"));
|
|
23
23
|
var _insertToolbar = _interopRequireDefault(require("./insert-toolbar"));
|
|
24
|
+
var _imageMenuDialog = _interopRequireDefault(require("../../plugins/image/menu/image-menu-dialog"));
|
|
24
25
|
require("./style.css");
|
|
25
26
|
const Toolbar = _ref => {
|
|
26
27
|
let {
|
|
@@ -32,10 +33,14 @@ const Toolbar = _ref => {
|
|
|
32
33
|
isSupportColumn = false
|
|
33
34
|
} = _ref;
|
|
34
35
|
(0, _useSelectionUpdate.default)();
|
|
36
|
+
const [isShowInternetImageModal, setIsShowInternetImageModal] = (0, _react.useState)(false);
|
|
35
37
|
const [isShowHelpModal, setIsShowHelpModal] = (0, _react.useState)(false);
|
|
36
38
|
const onHelpIconToggle = (0, _react.useCallback)(() => {
|
|
37
39
|
setIsShowHelpModal(!isShowHelpModal);
|
|
38
40
|
}, [isShowHelpModal]);
|
|
41
|
+
const onToggleImageDialog = (0, _react.useCallback)(() => {
|
|
42
|
+
setIsShowInternetImageModal(false);
|
|
43
|
+
}, []);
|
|
39
44
|
const commonProps = {
|
|
40
45
|
editor,
|
|
41
46
|
readonly,
|
|
@@ -47,7 +52,8 @@ const Toolbar = _ref => {
|
|
|
47
52
|
editor: editor,
|
|
48
53
|
readonly: readonly,
|
|
49
54
|
isSupportFormula: isSupportFormula,
|
|
50
|
-
isSupportColumn: isSupportColumn
|
|
55
|
+
isSupportColumn: isSupportColumn,
|
|
56
|
+
setIsShowInternetImageModal: setIsShowInternetImageModal
|
|
51
57
|
})), /*#__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
58
|
type: _constants.TEXT_STYLE_MAP.ITALIC
|
|
53
59
|
})), /*#__PURE__*/_react.default.createElement(_menu3.default, Object.assign({}, commonProps, {
|
|
@@ -70,6 +76,9 @@ const Toolbar = _ref => {
|
|
|
70
76
|
toggleShortcutDialog: onHelpIconToggle
|
|
71
77
|
}), /*#__PURE__*/_react.default.createElement(_insertElementDialog.default, {
|
|
72
78
|
editor: editor
|
|
79
|
+
}), isShowInternetImageModal && /*#__PURE__*/_react.default.createElement(_imageMenuDialog.default, {
|
|
80
|
+
editor: editor,
|
|
81
|
+
closeDialog: onToggleImageDialog
|
|
73
82
|
}));
|
|
74
83
|
};
|
|
75
84
|
var _default = exports.default = Toolbar;
|
|
@@ -25,7 +25,8 @@ const InsertToolbar = _ref => {
|
|
|
25
25
|
editor,
|
|
26
26
|
readonly,
|
|
27
27
|
isSupportFormula,
|
|
28
|
-
isSupportColumn
|
|
28
|
+
isSupportColumn,
|
|
29
|
+
setIsShowInternetImageModal
|
|
29
30
|
} = _ref;
|
|
30
31
|
const [isShowMenu, setMenuShow] = (0, _react.useState)(false);
|
|
31
32
|
const {
|
|
@@ -61,7 +62,8 @@ const InsertToolbar = _ref => {
|
|
|
61
62
|
const props = {
|
|
62
63
|
editor,
|
|
63
64
|
readonly,
|
|
64
|
-
toggle
|
|
65
|
+
toggle,
|
|
66
|
+
setIsShowInternetImageModal
|
|
65
67
|
};
|
|
66
68
|
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("button", {
|
|
67
69
|
type: "button",
|
|
@@ -72,7 +74,7 @@ const InsertToolbar = _ref => {
|
|
|
72
74
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
73
75
|
className: "sf-menu-with-dropdown-icon"
|
|
74
76
|
}, /*#__PURE__*/_react.default.createElement("i", {
|
|
75
|
-
className: "iconfont icon-
|
|
77
|
+
className: "iconfont icon-insert mr-1"
|
|
76
78
|
}), /*#__PURE__*/_react.default.createElement("span", {
|
|
77
79
|
className: "text-truncate"
|
|
78
80
|
}, t('Insert'))), /*#__PURE__*/_react.default.createElement("div", {
|
|
@@ -20,6 +20,7 @@ var _elementTypes = require("../../constants/element-types");
|
|
|
20
20
|
var _menu7 = _interopRequireDefault(require("../../plugins/clear-format/menu"));
|
|
21
21
|
var _shortcutDialog = _interopRequireDefault(require("../user-help/shortcut-dialog"));
|
|
22
22
|
var _insertToolbar = _interopRequireDefault(require("../header-toolbar/insert-toolbar"));
|
|
23
|
+
var _imageMenuDialog = _interopRequireDefault(require("../../plugins/image/menu/image-menu-dialog"));
|
|
23
24
|
require("./index.css");
|
|
24
25
|
const InlineToolbar = _ref => {
|
|
25
26
|
let {
|
|
@@ -32,10 +33,14 @@ const InlineToolbar = _ref => {
|
|
|
32
33
|
onExpandEditorToggle
|
|
33
34
|
} = _ref;
|
|
34
35
|
(0, _useSelectionUpdate.default)();
|
|
36
|
+
const [isShowInternetImageModal, setIsShowInternetImageModal] = (0, _react.useState)(false);
|
|
35
37
|
const [isShowHelpModal, setIsShowHelpModal] = (0, _react.useState)(false);
|
|
36
38
|
const onHelpIconToggle = (0, _react.useCallback)(() => {
|
|
37
39
|
setIsShowHelpModal(!isShowHelpModal);
|
|
38
40
|
}, [isShowHelpModal]);
|
|
41
|
+
const onToggleImageDialog = (0, _react.useCallback)(() => {
|
|
42
|
+
setIsShowInternetImageModal(false);
|
|
43
|
+
}, []);
|
|
39
44
|
const commonProps = {
|
|
40
45
|
editor,
|
|
41
46
|
readonly,
|
|
@@ -47,7 +52,8 @@ const InlineToolbar = _ref => {
|
|
|
47
52
|
editor: editor,
|
|
48
53
|
readonly: readonly,
|
|
49
54
|
isSupportFormula: isSupportFormula,
|
|
50
|
-
isSupportColumn: isSupportColumn
|
|
55
|
+
isSupportColumn: isSupportColumn,
|
|
56
|
+
setIsShowInternetImageModal: setIsShowInternetImageModal
|
|
51
57
|
})), /*#__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
58
|
type: _constants.TEXT_STYLE_MAP.ITALIC
|
|
53
59
|
})), /*#__PURE__*/_react.default.createElement(_menu3.default, Object.assign({}, commonProps, {
|
|
@@ -56,11 +62,11 @@ const InlineToolbar = _ref => {
|
|
|
56
62
|
type: _constants.TEXT_STYLE_MAP.UNDERLINE
|
|
57
63
|
})), /*#__PURE__*/_react.default.createElement(_menu3.default, Object.assign({}, commonProps, {
|
|
58
64
|
type: _constants.TEXT_STYLE_MAP.CODE
|
|
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, {
|
|
65
|
+
})), /*#__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(_commons.MenuGroup, null, /*#__PURE__*/_react.default.createElement(_commons.MoreMenu, commonProps, /*#__PURE__*/_react.default.createElement(_commons.MenuGroup, null, /*#__PURE__*/_react.default.createElement(_menu6.default, Object.assign({}, commonProps, {
|
|
60
66
|
type: _elementTypes.ORDERED_LIST
|
|
61
67
|
})), /*#__PURE__*/_react.default.createElement(_menu6.default, Object.assign({}, commonProps, {
|
|
62
68
|
type: _elementTypes.UNORDERED_LIST
|
|
63
|
-
}))
|
|
69
|
+
})), /*#__PURE__*/_react.default.createElement(_menu7.default, commonProps)), !isRichEditor && /*#__PURE__*/_react.default.createElement("div", {
|
|
64
70
|
className: "sf-menu-group-item sf-slate-help-info-control",
|
|
65
71
|
onClick: onHelpIconToggle
|
|
66
72
|
}, /*#__PURE__*/_react.default.createElement("span", {
|
|
@@ -70,6 +76,9 @@ const InlineToolbar = _ref => {
|
|
|
70
76
|
}))), isShowHelpModal && /*#__PURE__*/_react.default.createElement(_shortcutDialog.default, {
|
|
71
77
|
isRichEditor: isRichEditor,
|
|
72
78
|
toggleShortcutDialog: onHelpIconToggle
|
|
79
|
+
}), isShowInternetImageModal && /*#__PURE__*/_react.default.createElement(_imageMenuDialog.default, {
|
|
80
|
+
editor: editor,
|
|
81
|
+
closeDialog: onToggleImageDialog
|
|
73
82
|
}));
|
|
74
83
|
};
|
|
75
84
|
var _default = exports.default = InlineToolbar;
|
|
@@ -19,6 +19,7 @@ const useSeafileUtils = editor => {
|
|
|
19
19
|
isImage,
|
|
20
20
|
selection
|
|
21
21
|
} = _ref;
|
|
22
|
+
console.log('insertImage');
|
|
22
23
|
if (isImage) {
|
|
23
24
|
(0, _helper.insertSeafileImage)({
|
|
24
25
|
editor,
|
|
@@ -27,6 +28,7 @@ const useSeafileUtils = editor => {
|
|
|
27
28
|
selection
|
|
28
29
|
});
|
|
29
30
|
} else {
|
|
31
|
+
console.log('insertSeafileLink');
|
|
30
32
|
(0, _helper2.insertSeafileLink)({
|
|
31
33
|
editor,
|
|
32
34
|
title,
|
|
@@ -35,6 +37,7 @@ const useSeafileUtils = editor => {
|
|
|
35
37
|
});
|
|
36
38
|
}
|
|
37
39
|
};
|
|
40
|
+
console.log('123232');
|
|
38
41
|
const eventBus = _eventBus.default.getInstance();
|
|
39
42
|
const subscribe = eventBus.subscribe(_eventTypes.EXTERNAL_EVENTS.INSERT_IMAGE, insertImage);
|
|
40
43
|
return subscribe;
|
|
@@ -32,6 +32,7 @@ const LongTextInlineEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) =>
|
|
|
32
32
|
text: value
|
|
33
33
|
} : value);
|
|
34
34
|
const longTextValueChangedRef = (0, _react.useRef)(false);
|
|
35
|
+
const editorRef = (0, _react.useRef)(null);
|
|
35
36
|
const {
|
|
36
37
|
isWindowsWechat
|
|
37
38
|
} = (0, _react.useMemo)(() => {
|
|
@@ -69,11 +70,13 @@ const LongTextInlineEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) =>
|
|
|
69
70
|
}, [enableEdit, closeEditor]);
|
|
70
71
|
(0, _react.useImperativeHandle)(ref, () => {
|
|
71
72
|
return {
|
|
73
|
+
isWindowsWechat: isWindowsWechat,
|
|
72
74
|
enableEdit: enableEdit,
|
|
73
75
|
openEditor: openEditor,
|
|
74
|
-
closeEditor: closeEditor
|
|
76
|
+
closeEditor: closeEditor,
|
|
77
|
+
getEditor: () => editorRef.current.getEditor()
|
|
75
78
|
};
|
|
76
|
-
}, [enableEdit, openEditor, closeEditor]);
|
|
79
|
+
}, [enableEdit, openEditor, closeEditor, isWindowsWechat, editorRef]);
|
|
77
80
|
const handelEnableEdit = (0, _react.useCallback)(() => {
|
|
78
81
|
onClick && onClick();
|
|
79
82
|
openEditor();
|
|
@@ -86,6 +89,7 @@ const LongTextInlineEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) =>
|
|
|
86
89
|
}, isWindowsWechat ? /*#__PURE__*/_react.default.createElement(_fallbackEditor.default, {
|
|
87
90
|
enableEdit: enableEdit,
|
|
88
91
|
value: valueRef.current.text,
|
|
92
|
+
ref: editorRef,
|
|
89
93
|
onChange: onEditorValueChanged,
|
|
90
94
|
closeEditor: closeEditor
|
|
91
95
|
}) : /*#__PURE__*/_react.default.createElement(_normalEditor.default, {
|
|
@@ -97,6 +101,7 @@ const LongTextInlineEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) =>
|
|
|
97
101
|
autoSave: autoSave,
|
|
98
102
|
saveDelay: saveDelay,
|
|
99
103
|
isCheckBrowser: isCheckBrowser,
|
|
104
|
+
ref: editorRef,
|
|
100
105
|
editorApi: editorApi,
|
|
101
106
|
onSaveEditorValue: onSaveEditorValue,
|
|
102
107
|
onEditorValueChanged: onEditorValueChanged
|
|
@@ -13,7 +13,7 @@ var _getPreviewContent = _interopRequireDefault(require("../../utils/get-preview
|
|
|
13
13
|
var _markdownPreview = _interopRequireDefault(require("../markdown-preview"));
|
|
14
14
|
var _longtextEditorDialog = _interopRequireDefault(require("../longtext-editor-dialog"));
|
|
15
15
|
var _slateConvert = require("../../slate-convert");
|
|
16
|
-
const NormalEditor = _ref => {
|
|
16
|
+
const NormalEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
|
|
17
17
|
let {
|
|
18
18
|
enableEdit,
|
|
19
19
|
handelEnableEdit,
|
|
@@ -91,6 +91,11 @@ const NormalEditor = _ref => {
|
|
|
91
91
|
timer && clearTimeout(timer);
|
|
92
92
|
};
|
|
93
93
|
}, [autoSave, saveDelay, handelAutoSave]);
|
|
94
|
+
(0, _react.useImperativeHandle)(ref, () => {
|
|
95
|
+
return {
|
|
96
|
+
getEditor: () => editorRef.current.getEditor()
|
|
97
|
+
};
|
|
98
|
+
}, [editorRef]);
|
|
94
99
|
if (!enableEdit && !valueRef.current.text) {
|
|
95
100
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
96
101
|
className: (0, _classnames.default)('sf-long-text-inline-editor-container', {
|
|
@@ -138,5 +143,5 @@ const NormalEditor = _ref => {
|
|
|
138
143
|
onEditorValueChanged: saveValue,
|
|
139
144
|
onCloseEditorDialog: onCloseEditorDialog
|
|
140
145
|
}));
|
|
141
|
-
};
|
|
146
|
+
});
|
|
142
147
|
var _default = exports.default = NormalEditor;
|
|
@@ -29,8 +29,13 @@ const SimpleEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
|
|
|
29
29
|
const {
|
|
30
30
|
isLoadingMathJax
|
|
31
31
|
} = (0, _useMathjax.default)(mathJaxSource);
|
|
32
|
+
const editorRef = (0, _react.useRef)(null);
|
|
32
33
|
(0, _react.useImperativeHandle)(ref, () => {
|
|
33
34
|
return {
|
|
35
|
+
getEditor: () => {
|
|
36
|
+
var _editorRef$current;
|
|
37
|
+
return (_editorRef$current = editorRef.current) === null || _editorRef$current === void 0 ? void 0 : _editorRef$current.getEditor();
|
|
38
|
+
},
|
|
34
39
|
getValue: () => {
|
|
35
40
|
const mdStringValue = (0, _slateConvert.slateToMdString)(richValue);
|
|
36
41
|
return mdStringValue;
|
|
@@ -39,7 +44,7 @@ const SimpleEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
|
|
|
39
44
|
return richValue;
|
|
40
45
|
}
|
|
41
46
|
};
|
|
42
|
-
}, [richValue]);
|
|
47
|
+
}, [richValue, editorRef]);
|
|
43
48
|
(0, _react.useEffect)(() => {
|
|
44
49
|
if (!isFetching) {
|
|
45
50
|
const richValue = (0, _slateConvert.mdStringToSlate)(value);
|
|
@@ -61,12 +66,17 @@ const SimpleEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
|
|
|
61
66
|
onContentChanged: onContentChanged,
|
|
62
67
|
...otherProps
|
|
63
68
|
};
|
|
69
|
+
console.log(otherProps);
|
|
64
70
|
if (isFetching || isLoading || isLoadingMathJax) {
|
|
65
71
|
return /*#__PURE__*/_react.default.createElement(_loading.default, null);
|
|
66
72
|
}
|
|
67
73
|
if (isInline) {
|
|
68
|
-
return /*#__PURE__*/_react.default.createElement(_inlineEditor.default, props
|
|
74
|
+
return /*#__PURE__*/_react.default.createElement(_inlineEditor.default, Object.assign({}, props, {
|
|
75
|
+
ref: editorRef
|
|
76
|
+
}));
|
|
69
77
|
}
|
|
70
|
-
return /*#__PURE__*/_react.default.createElement(_simpleSlateEditor.default, props
|
|
78
|
+
return /*#__PURE__*/_react.default.createElement(_simpleSlateEditor.default, Object.assign({}, props, {
|
|
79
|
+
ref: editorRef
|
|
80
|
+
}));
|
|
71
81
|
});
|
|
72
82
|
var _default = exports.default = SimpleEditor;
|
|
@@ -17,16 +17,25 @@ const isContentValid = value => {
|
|
|
17
17
|
if (!value || !Array.isArray(value)) return false;
|
|
18
18
|
return true;
|
|
19
19
|
};
|
|
20
|
+
const isEmptyParagraph = node => {
|
|
21
|
+
const voidNodeTypes = ['image', 'column', 'formula'];
|
|
22
|
+
if (node.type !== _constants.PARAGRAPH) return false;
|
|
23
|
+
const hasBlock = node.children.some(item => voidNodeTypes.includes(item.type));
|
|
24
|
+
const hasHtml = node.children.some(item => item.type === 'html');
|
|
25
|
+
if (hasBlock) return false;
|
|
26
|
+
if (hasHtml) return false;
|
|
27
|
+
if (_slate.Node.string(node).length !== 0) return false;
|
|
28
|
+
return true;
|
|
29
|
+
};
|
|
20
30
|
|
|
21
31
|
// slateNode -> mdast -> mdString
|
|
22
32
|
const slateToMdString = value => {
|
|
23
33
|
if (!isContentValid(value)) return '';
|
|
24
34
|
if (value.length === 0) return '';
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
35
|
+
|
|
36
|
+
// is only one empty paragraph child
|
|
37
|
+
if (value.length === 1 && isEmptyParagraph(value[0])) {
|
|
38
|
+
return '';
|
|
30
39
|
}
|
|
31
40
|
|
|
32
41
|
// slateNode -> mdast
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seafile/seafile-editor",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.25beta",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
"react-i18next": "12.1.4",
|
|
65
65
|
"react-router": "6.16.0",
|
|
66
66
|
"react-router-dom": "6.16.0",
|
|
67
|
-
"seafile-js": "0.2.
|
|
67
|
+
"seafile-js": "0.2.238",
|
|
68
68
|
"style-loader": "3.3.3",
|
|
69
69
|
"terser-webpack-plugin": "5.3.9",
|
|
70
70
|
"url-loader": "4.1.1",
|
|
Binary file
|
|
@@ -14,9 +14,9 @@
|
|
|
14
14
|
/>
|
|
15
15
|
<missing-glyph />
|
|
16
16
|
|
|
17
|
-
<glyph glyph-name="
|
|
17
|
+
<glyph glyph-name="insert" unicode="" d="M512 896c281.6 0 512-230.4 512-512s-230.4-512-512-512S0 102.4 0 384 230.4 896 512 896z m0-96C281.6 800 96 614.4 96 384s185.6-416 416-416 416 185.6 416 416S742.4 800 512 800z m0-160c25.6 0 48-22.4 48-48v-160h160c25.6 0 48-22.4 48-48s-22.4-48-48-48H560v-160c0-25.6-22.4-48-48-48s-48 22.4-48 48V336H304c-25.6 0-48 22.4-48 48s22.4 48 48 48h160V592c0 25.6 22.4 48 48 48z" horiz-adv-x="1024" />
|
|
18
18
|
|
|
19
|
-
<glyph glyph-name="
|
|
19
|
+
<glyph glyph-name="right-slide" unicode="" d="M672 416l-268.8 214.4c-32 25.6-83.2 6.4-83.2-32v-428.8c0-35.2 48-57.6 83.2-32L672 352c19.2 16 19.2 48 0 64z" horiz-adv-x="1024" />
|
|
20
20
|
|
|
21
21
|
<glyph glyph-name="center-horizontally" unicode="" d="M800 832v-96H224V832h576z m224-352v96H0v-96h1024z m0-544v96H0v-96h1024zM224 288v-96h576v96H224z" horiz-adv-x="1024" />
|
|
22
22
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
@font-face {
|
|
2
|
-
font-family: "iconfont";
|
|
3
|
-
|
|
4
|
-
src: url('./seafile-editor-font/iconfont.eot?t=
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
url('./seafile-editor-font/iconfont.woff?t=1752721246164') format('woff'),
|
|
10
|
-
url('./seafile-editor-font/iconfont.ttf?t=1752721246164') format('truetype'),
|
|
11
|
-
url('./seafile-editor-font/iconfont.svg?t=1752721246164#iconfont') format('svg');
|
|
2
|
+
font-family: "iconfont"; /* Project id 4375832 */
|
|
3
|
+
src: url('./seafile-editor-font/iconfont.eot?t=1753239248033'); /* IE9 */
|
|
4
|
+
src: url('./seafile-editor-font/iconfont.eot?t=1753239248033#iefix') format('embedded-opentype'), /* IE6-IE8 */
|
|
5
|
+
url('./seafile-editor-font/iconfont.woff2?t=1753239248033') format('woff2'),
|
|
6
|
+
url('./seafile-editor-font/iconfont.woff?t=1753239248033') format('woff'),
|
|
7
|
+
url('./seafile-editor-font/iconfont.ttf?t=1753239248033') format('truetype'),
|
|
8
|
+
url('./seafile-editor-font/iconfont.svg?t=1753239248033#iconfont') format('svg');
|
|
12
9
|
}
|
|
13
10
|
|
|
14
11
|
.iconfont {
|
|
@@ -19,11 +16,11 @@
|
|
|
19
16
|
-moz-osx-font-smoothing: grayscale;
|
|
20
17
|
}
|
|
21
18
|
|
|
22
|
-
.icon-
|
|
19
|
+
.icon-insert:before {
|
|
23
20
|
content: "\e6a6";
|
|
24
21
|
}
|
|
25
22
|
|
|
26
|
-
.icon-
|
|
23
|
+
.icon-right-slide:before {
|
|
27
24
|
content: "\e6a7";
|
|
28
25
|
}
|
|
29
26
|
|
|
@@ -278,3 +275,4 @@
|
|
|
278
275
|
.icon-users:before {
|
|
279
276
|
content: "\e67f";
|
|
280
277
|
}
|
|
278
|
+
|