@seafile/sdoc-editor 1.0.50 → 1.0.53
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/basic-sdk/comment/components/comment-item-content.js +3 -3
- package/dist/basic-sdk/comment/components/comment-item-wrapper.js +6 -5
- package/dist/basic-sdk/comment/components/comment-list.js +3 -3
- package/dist/basic-sdk/comment/components/global-comment/index.js +3 -3
- package/dist/basic-sdk/comment/provider/comment-context-provider.js +3 -2
- package/dist/basic-sdk/comment/provider/notification-context-provider.js +3 -2
- package/dist/basic-sdk/comment/reducer/comment-reducer.js +50 -24
- package/dist/basic-sdk/comment/reducer/notification-reducer.js +9 -7
- package/dist/basic-sdk/cursor/helper.js +11 -4
- package/dist/basic-sdk/editor/comment-article.js +3 -3
- package/dist/basic-sdk/editor/sdoc-comment-editor.js +5 -4
- package/dist/basic-sdk/editor/sdoc-editor.js +5 -4
- package/dist/basic-sdk/editor/wiki-editor.js +5 -4
- package/dist/basic-sdk/extension/commons/dropdown-menu-item/index.css +4 -0
- package/dist/basic-sdk/extension/commons/dropdown-menu-item/index.js +7 -6
- package/dist/basic-sdk/extension/commons/file-insert-dialog/index.js +7 -6
- package/dist/basic-sdk/extension/commons/select/field-setting.js +6 -5
- package/dist/basic-sdk/extension/commons/select-file-dialog/index.js +6 -4
- package/dist/basic-sdk/extension/core/queries/index.js +21 -20
- package/dist/basic-sdk/extension/core/transforms/remove-node-children.js +3 -3
- package/dist/basic-sdk/extension/core/transforms/replace-node.js +13 -9
- package/dist/basic-sdk/extension/core/transforms/update-parent-node.js +3 -2
- package/dist/basic-sdk/extension/core/utils/index.js +4 -5
- package/dist/basic-sdk/extension/plugins/blockquote/helpers.js +3 -3
- package/dist/basic-sdk/extension/plugins/blockquote/menu/index.js +4 -5
- package/dist/basic-sdk/extension/plugins/check-list/menu/index.js +4 -5
- package/dist/basic-sdk/extension/plugins/clear-format/menu/index.js +4 -5
- package/dist/basic-sdk/extension/plugins/code-block/hover-menu/index.js +1 -0
- package/dist/basic-sdk/extension/plugins/code-block/plugin.js +6 -3
- package/dist/basic-sdk/extension/plugins/code-block/render-elem.js +3 -3
- package/dist/basic-sdk/extension/plugins/file-link/render-elem.js +6 -3
- package/dist/basic-sdk/extension/plugins/header/render-elem.js +16 -11
- package/dist/basic-sdk/extension/plugins/image/helpers.js +9 -7
- package/dist/basic-sdk/extension/plugins/image/hover-menu/index.js +7 -3
- package/dist/basic-sdk/extension/plugins/image/menu/index.js +7 -7
- package/dist/basic-sdk/extension/plugins/image/plugin.js +2 -2
- package/dist/basic-sdk/extension/plugins/image/render-elem.js +17 -10
- package/dist/basic-sdk/extension/plugins/link/helpers.js +3 -3
- package/dist/basic-sdk/extension/plugins/link/menu/index.js +4 -5
- package/dist/basic-sdk/extension/plugins/list/menu/index.js +4 -5
- package/dist/basic-sdk/extension/plugins/list/plugin/on-tab-handle.js +6 -3
- package/dist/basic-sdk/extension/plugins/list/transforms/insert-list-item.js +4 -2
- package/dist/basic-sdk/extension/plugins/list/transforms/toggle-list.js +6 -4
- package/dist/basic-sdk/extension/plugins/markdown/plugin.js +17 -6
- package/dist/basic-sdk/extension/plugins/mention/plugin.js +6 -5
- package/dist/basic-sdk/extension/plugins/paragraph/render-elem.js +4 -4
- package/dist/basic-sdk/extension/plugins/sdoc-link/helpers.js +3 -2
- package/dist/basic-sdk/extension/plugins/sdoc-link/render/render-elem.js +6 -3
- package/dist/basic-sdk/extension/plugins/search-replace/helper.js +6 -5
- package/dist/basic-sdk/extension/plugins/seatable-column/helpers.js +6 -3
- package/dist/basic-sdk/extension/plugins/seatable-column/menu/column-list-menu.js +16 -12
- package/dist/basic-sdk/extension/plugins/seatable-column/menu/index.js +11 -7
- package/dist/basic-sdk/extension/plugins/seatable-column/render-elem.js +6 -6
- package/dist/basic-sdk/extension/plugins/seatable-tables/helpers.js +3 -2
- package/dist/basic-sdk/extension/plugins/seatable-tables/menu/index.js +9 -7
- package/dist/basic-sdk/extension/plugins/seatable-tables/menu/seatable-list.js +11 -11
- package/dist/basic-sdk/extension/plugins/seatable-tables/render-element/index.css +23 -1
- package/dist/basic-sdk/extension/plugins/seatable-tables/render-element/record-header.js +3 -3
- package/dist/basic-sdk/extension/plugins/seatable-tables/render-element/seatable-table.js +8 -7
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/department-filter/_department-utils.js +3 -3
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/department-filter/department-single-select.js +3 -3
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/rate-item/index.js +3 -3
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/index.js +4 -2
- package/dist/basic-sdk/extension/plugins/table/helpers.js +32 -16
- package/dist/basic-sdk/extension/plugins/table/menu/table-context-menu/index.css +2 -1
- package/dist/basic-sdk/extension/plugins/table/plugin.js +6 -5
- package/dist/basic-sdk/extension/plugins/table/render/index.js +6 -3
- package/dist/basic-sdk/extension/plugins/table/render/render-cell.js +15 -6
- package/dist/basic-sdk/extension/plugins/table/render/resize-handlers/column-resize-handler.js +6 -5
- package/dist/basic-sdk/extension/plugins/table/render/resize-handlers/first-column-left-resize-handler.js +3 -3
- package/dist/basic-sdk/extension/plugins/table/render/resize-mask/index.js +19 -15
- package/dist/basic-sdk/extension/plugins/table/render/table-root.js +3 -3
- package/dist/basic-sdk/extension/plugins/text-style/caret.js +6 -5
- package/dist/basic-sdk/extension/plugins/text-style/menu/comemnt-editor-menu.js +4 -3
- package/dist/basic-sdk/extension/plugins/text-style/menu/index.js +4 -3
- package/dist/basic-sdk/extension/plugins/text-style/render-elem.js +3 -5
- package/dist/basic-sdk/extension/render/custom-element.js +12 -8
- package/dist/basic-sdk/extension/render/render-comment-editor-element.js +12 -8
- package/dist/basic-sdk/extension/toolbar/header-toolbar/redo-undo.js +8 -9
- package/dist/basic-sdk/extension/toolbar/insert-element-toolbar/index.js +30 -11
- package/dist/basic-sdk/extension/toolbar/side-toolbar/insert-block-menu.js +25 -10
- package/dist/basic-sdk/extension/toolbar/side-toolbar/side-menu.css +0 -1
- package/dist/basic-sdk/extension/toolbar/side-toolbar/side-menu.js +1 -1
- package/dist/basic-sdk/extension/utils/index.js +22 -0
- package/dist/basic-sdk/highlight/setNodeToDecorations.js +4 -4
- package/dist/basic-sdk/node-id/helpers.js +6 -5
- package/dist/basic-sdk/socket/helpers.js +6 -5
- package/dist/basic-sdk/socket/socket-client.js +4 -4
- package/dist/basic-sdk/utils/diff.js +43 -29
- package/dist/basic-sdk/utils/object-utils.js +4 -2
- package/dist/basic-sdk/utils/rebase.js +37 -21
- package/dist/components/toast/alert.js +24 -105
- package/dist/components/toast/index.css +118 -0
- package/dist/components/toast/toast.js +2 -41
- package/dist/components/toast/toastManager.js +9 -23
- package/dist/components/toast/toaster.js +13 -9
- package/dist/components/tooltip/index.js +7 -6
- package/dist/layout/content.js +5 -8
- package/dist/layout/header.js +5 -8
- package/dist/layout/layout.js +4 -6
- package/dist/pages/document-plugin-editor.js +1 -1
- package/dist/slate-convert/md-to-slate/transform.js +30 -23
- package/dist/slate-convert/slate-to-md/transform.js +3 -3
- package/package.json +35 -40
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
1
|
import { Transforms, Node } from '@seafile/slate';
|
|
3
2
|
export const removeNodeChildren = (editor, path, options) => {
|
|
4
3
|
const nodeChildren = Node.children(editor, path, {
|
|
5
4
|
reverse: true
|
|
6
5
|
});
|
|
7
6
|
for (const [, childPath] of nodeChildren) {
|
|
8
|
-
Transforms.removeNodes(editor,
|
|
7
|
+
Transforms.removeNodes(editor, {
|
|
8
|
+
...options,
|
|
9
9
|
at: childPath
|
|
10
|
-
})
|
|
10
|
+
});
|
|
11
11
|
}
|
|
12
12
|
};
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
1
|
import { Editor, Transforms } from '@seafile/slate';
|
|
3
2
|
import { removeNodeChildren } from './remove-node-children';
|
|
4
3
|
export const replaceNodeChildren = (editor, _ref) => {
|
|
@@ -10,9 +9,10 @@ export const replaceNodeChildren = (editor, _ref) => {
|
|
|
10
9
|
} = _ref;
|
|
11
10
|
Editor.withoutNormalizing(editor, () => {
|
|
12
11
|
removeNodeChildren(editor, at, removeOptions);
|
|
13
|
-
Transforms.insertNodes(editor, nodes,
|
|
12
|
+
Transforms.insertNodes(editor, nodes, {
|
|
13
|
+
...insertOptions,
|
|
14
14
|
at: at.concat([0])
|
|
15
|
-
})
|
|
15
|
+
});
|
|
16
16
|
});
|
|
17
17
|
};
|
|
18
18
|
export const replaceNode = function (editor) {
|
|
@@ -23,17 +23,21 @@ export const replaceNode = function (editor) {
|
|
|
23
23
|
removeOptions
|
|
24
24
|
} = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
25
25
|
Editor.withoutNormalizing(editor, () => {
|
|
26
|
-
Transforms.removeNodes(editor,
|
|
26
|
+
Transforms.removeNodes(editor, {
|
|
27
|
+
at,
|
|
28
|
+
...removeOptions
|
|
29
|
+
});
|
|
30
|
+
Transforms.insertNodes(editor, nodes, {
|
|
31
|
+
...insertOptions,
|
|
27
32
|
at
|
|
28
|
-
}
|
|
29
|
-
Transforms.insertNodes(editor, nodes, _objectSpread(_objectSpread({}, insertOptions), {}, {
|
|
30
|
-
at
|
|
31
|
-
}));
|
|
33
|
+
});
|
|
32
34
|
});
|
|
33
35
|
};
|
|
34
36
|
export const deleteNodeMark = function (editor, path, element) {
|
|
35
37
|
let marks = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
|
|
36
|
-
const newElement =
|
|
38
|
+
const newElement = {
|
|
39
|
+
...element
|
|
40
|
+
};
|
|
37
41
|
marks.forEach(markItem => {
|
|
38
42
|
newElement[markItem] && delete newElement[markItem];
|
|
39
43
|
});
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
1
|
import { REBASE_MARK_KEY } from '../../../constants';
|
|
3
2
|
import { getNode } from '../queries';
|
|
4
3
|
import { replaceNode } from './replace-node';
|
|
@@ -6,7 +5,9 @@ export const updateRebaseParentNodeByPath = (editor, path) => {
|
|
|
6
5
|
const parentPath = path.slice(0, -1);
|
|
7
6
|
const parentNode = getNode(editor, parentPath);
|
|
8
7
|
if (parentNode.children.filter(item => item[REBASE_MARK_KEY.REBASE_TYPE]).length !== 0) return;
|
|
9
|
-
const newParentElement =
|
|
8
|
+
const newParentElement = {
|
|
9
|
+
...parentNode
|
|
10
|
+
};
|
|
10
11
|
newParentElement[REBASE_MARK_KEY.REBASE_TYPE] && delete newParentElement[REBASE_MARK_KEY.REBASE_TYPE];
|
|
11
12
|
newParentElement[REBASE_MARK_KEY.OLD_ELEMENT] && delete newParentElement[REBASE_MARK_KEY.OLD_ELEMENT];
|
|
12
13
|
newParentElement[REBASE_MARK_KEY.ORIGIN] && delete newParentElement[REBASE_MARK_KEY.ORIGIN];
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
1
|
import React from 'react';
|
|
3
2
|
import slugid from 'slugid';
|
|
4
3
|
import { useTranslation } from 'react-i18next';
|
|
@@ -33,12 +32,12 @@ export const generateDefaultParagraph = () => {
|
|
|
33
32
|
export const generateEmptyElement = function (type) {
|
|
34
33
|
let props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
35
34
|
let text = arguments.length > 2 ? arguments[2] : undefined;
|
|
36
|
-
return
|
|
35
|
+
return {
|
|
37
36
|
id: slugid.nice(),
|
|
38
|
-
type
|
|
39
|
-
|
|
37
|
+
type,
|
|
38
|
+
...props,
|
|
40
39
|
children: [generateDefaultText(text)]
|
|
41
|
-
}
|
|
40
|
+
};
|
|
42
41
|
};
|
|
43
42
|
export function Placeholder(props) {
|
|
44
43
|
const {
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
1
|
import { Editor, Transforms, Element, Node } from '@seafile/slate';
|
|
3
2
|
import slugid from 'slugid';
|
|
4
3
|
import { BLOCKQUOTE, CHECK_LIST_ITEM, IMAGE, ORDERED_LIST, PARAGRAPH, UNORDERED_LIST, CODE_BLOCK, TABLE, CALL_OUT } from '../../constants';
|
|
@@ -83,9 +82,10 @@ export const getFormattedElements = data => {
|
|
|
83
82
|
// Merge quote block
|
|
84
83
|
let preElement = elements[elements.length - 1];
|
|
85
84
|
if ((preElement === null || preElement === void 0 ? void 0 : preElement.type) === BLOCKQUOTE && (item === null || item === void 0 ? void 0 : item.type) === BLOCKQUOTE) {
|
|
86
|
-
elements[elements.length - 1] =
|
|
85
|
+
elements[elements.length - 1] = {
|
|
86
|
+
...preElement,
|
|
87
87
|
children: [...preElement.children, ...item.children]
|
|
88
|
-
}
|
|
88
|
+
};
|
|
89
89
|
} else {
|
|
90
90
|
elements.push(item);
|
|
91
91
|
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
1
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
3
2
|
import React from 'react';
|
|
4
3
|
import { BLOCKQUOTE, MENUS_CONFIG_MAP } from '../../../constants';
|
|
@@ -34,14 +33,14 @@ class QuoteMenu extends React.Component {
|
|
|
34
33
|
className
|
|
35
34
|
} = this.props;
|
|
36
35
|
const menuConfig = MENUS_CONFIG_MAP[BLOCKQUOTE];
|
|
37
|
-
const props =
|
|
36
|
+
const props = {
|
|
38
37
|
isRichEditor,
|
|
39
|
-
className
|
|
40
|
-
|
|
38
|
+
className,
|
|
39
|
+
...menuConfig,
|
|
41
40
|
disabled: this.isDisabled(),
|
|
42
41
|
isActive: this.isActive(),
|
|
43
42
|
onMouseDown: this.onMouseDown
|
|
44
|
-
}
|
|
43
|
+
};
|
|
45
44
|
return /*#__PURE__*/React.createElement(MenuItem, props);
|
|
46
45
|
}
|
|
47
46
|
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
1
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
3
2
|
import React from 'react';
|
|
4
3
|
import { CHECK_LIST_ITEM, MENUS_CONFIG_MAP, PARAGRAPH } from '../../../constants';
|
|
@@ -37,14 +36,14 @@ class CheckListMenu extends React.Component {
|
|
|
37
36
|
className
|
|
38
37
|
} = this.props;
|
|
39
38
|
const menuConfig = MENUS_CONFIG_MAP[CHECK_LIST_ITEM];
|
|
40
|
-
const props =
|
|
39
|
+
const props = {
|
|
41
40
|
isRichEditor,
|
|
42
|
-
className
|
|
43
|
-
|
|
41
|
+
className,
|
|
42
|
+
...menuConfig,
|
|
44
43
|
disabled: this.isDisabled(),
|
|
45
44
|
isActive: this.isActive(),
|
|
46
45
|
onMouseDown: this.onMouseDown
|
|
47
|
-
}
|
|
46
|
+
};
|
|
48
47
|
return /*#__PURE__*/React.createElement(MenuItem, props);
|
|
49
48
|
}
|
|
50
49
|
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
1
|
import React, { useCallback } from 'react';
|
|
3
2
|
import { CLEAR_FORMAT, MENUS_CONFIG_MAP } from '../../../constants';
|
|
4
3
|
import { MenuItem } from '../../../commons';
|
|
@@ -15,14 +14,14 @@ const ClearFormatMenu = _ref => {
|
|
|
15
14
|
clearStyles(editor);
|
|
16
15
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
17
16
|
}, []);
|
|
18
|
-
const props =
|
|
17
|
+
const props = {
|
|
19
18
|
isRichEditor,
|
|
20
|
-
className
|
|
21
|
-
|
|
19
|
+
className,
|
|
20
|
+
...menuConfig,
|
|
22
21
|
disabled: isMenuDisabled(editor, readonly),
|
|
23
22
|
isActive: false,
|
|
24
23
|
'onMouseDown': onMouseDown
|
|
25
|
-
}
|
|
24
|
+
};
|
|
26
25
|
return /*#__PURE__*/React.createElement(MenuItem, props);
|
|
27
26
|
};
|
|
28
27
|
export default ClearFormatMenu;
|
|
@@ -181,6 +181,7 @@ const CodeBlockHoverMenu = _ref2 => {
|
|
|
181
181
|
}, /*#__PURE__*/React.createElement("div", {
|
|
182
182
|
className: "sdoc-search-langs"
|
|
183
183
|
}, /*#__PURE__*/React.createElement(Input, {
|
|
184
|
+
autoFocus: true,
|
|
184
185
|
placeholder: t('Search_language'),
|
|
185
186
|
onChange: onChange
|
|
186
187
|
})), /*#__PURE__*/React.createElement(LangList, {
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
1
|
import slugid from 'slugid';
|
|
3
2
|
import isHotkey from 'is-hotkey';
|
|
4
3
|
import { Transforms, Node, Range, Editor } from '@seafile/slate';
|
|
@@ -41,7 +40,9 @@ const withCodeBlock = editor => {
|
|
|
41
40
|
options['at'] = [path[0]];
|
|
42
41
|
}
|
|
43
42
|
const codeBlockNode = JSON.parse(data.getData('text/code-block'));
|
|
44
|
-
return Transforms.insertNodes(newEditor, codeBlockNode,
|
|
43
|
+
return Transforms.insertNodes(newEditor, codeBlockNode, {
|
|
44
|
+
...options
|
|
45
|
+
});
|
|
45
46
|
}
|
|
46
47
|
insertData(data);
|
|
47
48
|
};
|
|
@@ -195,7 +196,9 @@ const withCodeBlock = editor => {
|
|
|
195
196
|
offset: 0,
|
|
196
197
|
path: newEditor.selection.focus.path
|
|
197
198
|
},
|
|
198
|
-
focus:
|
|
199
|
+
focus: {
|
|
200
|
+
...newEditor.selection.focus
|
|
201
|
+
}
|
|
199
202
|
};
|
|
200
203
|
const str = Editor.string(newEditor, range);
|
|
201
204
|
if (str.trim() === '') {
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
1
|
import React, { useCallback, useEffect, useState, useRef } from 'react';
|
|
3
2
|
import { ReactEditor, useReadOnly } from '@seafile/slate-react';
|
|
4
3
|
import { Transforms } from '@seafile/slate';
|
|
@@ -46,9 +45,10 @@ const CodeBlock = _ref => {
|
|
|
46
45
|
}, []);
|
|
47
46
|
const onChangeAutoLineWrap = useCallback(autoWrap => {
|
|
48
47
|
const path = ReactEditor.findPath(editor, element);
|
|
49
|
-
const newStyle =
|
|
48
|
+
const newStyle = {
|
|
49
|
+
...style,
|
|
50
50
|
white_space: autoWrap
|
|
51
|
-
}
|
|
51
|
+
};
|
|
52
52
|
Transforms.setNodes(editor, {
|
|
53
53
|
style: newStyle
|
|
54
54
|
}, {
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
1
|
import React, { useCallback, useEffect, useState, useRef } from 'react';
|
|
3
2
|
import { useReadOnly } from '@seafile/slate-react';
|
|
4
3
|
import classnames from 'classnames';
|
|
@@ -95,9 +94,13 @@ const FileLink = _ref => {
|
|
|
95
94
|
}, []);
|
|
96
95
|
let style = {};
|
|
97
96
|
if (element.add) {
|
|
98
|
-
style =
|
|
97
|
+
style = {
|
|
98
|
+
...ADDED_STYLE
|
|
99
|
+
};
|
|
99
100
|
} else if (element.delete) {
|
|
100
|
-
style =
|
|
101
|
+
style = {
|
|
102
|
+
...DELETED_STYLE
|
|
103
|
+
};
|
|
101
104
|
}
|
|
102
105
|
if (style.computed_background_color) {
|
|
103
106
|
style['backgroundColor'] = style.computed_background_color;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
1
|
import React from 'react';
|
|
3
2
|
import { Node } from '@seafile/slate';
|
|
4
3
|
import { Placeholder } from '../../core';
|
|
@@ -17,7 +16,9 @@ export const renderTitle = (props, editor) => {
|
|
|
17
16
|
"data-id": element.id
|
|
18
17
|
}, attributes, {
|
|
19
18
|
className: "sdoc-header-title ".concat(attributes.className),
|
|
20
|
-
style:
|
|
19
|
+
style: {
|
|
20
|
+
...style
|
|
21
|
+
}
|
|
21
22
|
}), children);
|
|
22
23
|
};
|
|
23
24
|
export const renderSubtitle = (props, editor) => {
|
|
@@ -35,7 +36,9 @@ export const renderSubtitle = (props, editor) => {
|
|
|
35
36
|
"data-id": element.id
|
|
36
37
|
}, attributes, {
|
|
37
38
|
className: "sdoc-header-subtitle ".concat(attributes.className),
|
|
38
|
-
style:
|
|
39
|
+
style: {
|
|
40
|
+
...style
|
|
41
|
+
}
|
|
39
42
|
}), children);
|
|
40
43
|
};
|
|
41
44
|
export const renderHeader = (props, editor) => {
|
|
@@ -49,12 +52,13 @@ export const renderHeader = (props, editor) => {
|
|
|
49
52
|
type
|
|
50
53
|
} = element;
|
|
51
54
|
const level = type.split('header')[1];
|
|
52
|
-
const style =
|
|
55
|
+
const style = {
|
|
53
56
|
textAlign: element.align,
|
|
54
|
-
fontSize: "".concat(SDOC_FONT_SIZE[element.type], "pt")
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
57
|
+
fontSize: "".concat(SDOC_FONT_SIZE[element.type], "pt"),
|
|
58
|
+
...(level === '6' && {
|
|
59
|
+
fontStyle: 'italic'
|
|
60
|
+
})
|
|
61
|
+
};
|
|
58
62
|
let isShowPlaceHolder = false;
|
|
59
63
|
if (Node.string(element) === '' && !isComposing) {
|
|
60
64
|
isShowPlaceHolder = true;
|
|
@@ -64,9 +68,10 @@ export const renderHeader = (props, editor) => {
|
|
|
64
68
|
id: element.id // used for click left outline item, page scroll this element
|
|
65
69
|
}, attributes, {
|
|
66
70
|
className: "sdoc-header-".concat(level, " ").concat(attributes.className),
|
|
67
|
-
style:
|
|
68
|
-
position: isShowPlaceHolder ? 'relative' : ''
|
|
69
|
-
|
|
71
|
+
style: {
|
|
72
|
+
position: isShowPlaceHolder ? 'relative' : '',
|
|
73
|
+
...style
|
|
74
|
+
}
|
|
70
75
|
}), isShowPlaceHolder && /*#__PURE__*/React.createElement(Placeholder, {
|
|
71
76
|
title: 'Header',
|
|
72
77
|
top: 0
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
1
|
import urlJoin from 'url-join';
|
|
3
2
|
import { Editor, Range, Transforms, Path, Node } from '@seafile/slate';
|
|
4
3
|
import { ReactEditor } from '@seafile/slate-react';
|
|
@@ -38,11 +37,12 @@ export const isInsertImageMenuDisabled = (editor, readonly) => {
|
|
|
38
37
|
};
|
|
39
38
|
export const generateImageNode = src => {
|
|
40
39
|
const element = generateEmptyElement(IMAGE);
|
|
41
|
-
return
|
|
40
|
+
return {
|
|
41
|
+
...element,
|
|
42
42
|
data: {
|
|
43
43
|
src
|
|
44
44
|
}
|
|
45
|
-
}
|
|
45
|
+
};
|
|
46
46
|
};
|
|
47
47
|
export const insertImage = function (editor, srcList, selection) {
|
|
48
48
|
let position = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : INSERT_POSITION.CURRENT;
|
|
@@ -202,12 +202,13 @@ export const selectImageWhenSelectPartial = (event, editor, imageNode, isImageSe
|
|
|
202
202
|
}
|
|
203
203
|
const isIncludedSelection = Range.includes(selection, imagePath);
|
|
204
204
|
if (isIncludedSelection) return;
|
|
205
|
-
const focusRange =
|
|
205
|
+
const focusRange = {
|
|
206
|
+
...selection,
|
|
206
207
|
focus: {
|
|
207
208
|
offset: 0,
|
|
208
209
|
path: imagePath
|
|
209
210
|
}
|
|
210
|
-
}
|
|
211
|
+
};
|
|
211
212
|
focusEditor(editor, focusRange);
|
|
212
213
|
};
|
|
213
214
|
|
|
@@ -221,9 +222,10 @@ export const handleBase64Image = (editor, path, imgData) => {
|
|
|
221
222
|
type: unit8Array.mime
|
|
222
223
|
});
|
|
223
224
|
context.uploadLocalImage([file]).then(res => {
|
|
224
|
-
const _data =
|
|
225
|
+
const _data = {
|
|
226
|
+
...imgData,
|
|
225
227
|
src: res[0]
|
|
226
|
-
}
|
|
228
|
+
};
|
|
227
229
|
Transforms.setNodes(editor, {
|
|
228
230
|
data: _data
|
|
229
231
|
}, {
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
1
|
import React, { useCallback, useEffect, useState } from 'react';
|
|
3
2
|
import { Editor, Transforms } from '@seafile/slate';
|
|
4
3
|
import { ReactEditor } from '@seafile/slate-react';
|
|
@@ -54,7 +53,9 @@ const ImageHoverMenu = _ref => {
|
|
|
54
53
|
newPopoverState[key] = false;
|
|
55
54
|
}
|
|
56
55
|
}
|
|
57
|
-
setPopoverState(
|
|
56
|
+
setPopoverState({
|
|
57
|
+
...newPopoverState
|
|
58
|
+
});
|
|
58
59
|
}, [popoverState]);
|
|
59
60
|
const onSelect = useCallback((event, props) => {
|
|
60
61
|
event.stopPropagation();
|
|
@@ -134,7 +135,10 @@ const ImageHoverMenu = _ref => {
|
|
|
134
135
|
}
|
|
135
136
|
if (Object.keys(props)[0] === 'show_caption') {
|
|
136
137
|
Transforms.setNodes(editor, {
|
|
137
|
-
data:
|
|
138
|
+
data: {
|
|
139
|
+
...data,
|
|
140
|
+
...props
|
|
141
|
+
}
|
|
138
142
|
}, {
|
|
139
143
|
at: path
|
|
140
144
|
});
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
1
|
import React, { useCallback } from 'react';
|
|
3
2
|
import { useTranslation } from 'react-i18next';
|
|
4
3
|
import { UncontrolledPopover } from 'reactstrap';
|
|
@@ -29,17 +28,18 @@ const ImageMenu = _ref => {
|
|
|
29
28
|
|
|
30
29
|
// Apply for comment Editor
|
|
31
30
|
if (editor.editorType === COMMENT_EDITOR) {
|
|
32
|
-
const commentEditorConfig =
|
|
31
|
+
const commentEditorConfig = {
|
|
32
|
+
...menuConfig,
|
|
33
33
|
text: 'Upload_local_image'
|
|
34
|
-
}
|
|
35
|
-
const menuProps =
|
|
34
|
+
};
|
|
35
|
+
const menuProps = {
|
|
36
36
|
isRichEditor,
|
|
37
|
-
className
|
|
38
|
-
|
|
37
|
+
className,
|
|
38
|
+
...commentEditorConfig,
|
|
39
39
|
disabled: disabled,
|
|
40
40
|
isActive: false,
|
|
41
41
|
onMouseDown: openInsertLocalImage
|
|
42
|
-
}
|
|
42
|
+
};
|
|
43
43
|
return /*#__PURE__*/React.createElement(MenuItem, menuProps);
|
|
44
44
|
}
|
|
45
45
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(DropdownMenuItem, {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { Transforms, Path, Editor,
|
|
1
|
+
import { Transforms, Path, Editor, Range } from '@seafile/slate';
|
|
2
2
|
import toaster from '../../../../components/toast';
|
|
3
3
|
import context from '../../../../context';
|
|
4
4
|
import EventBus from '../../../utils/event-bus';
|
|
5
5
|
import { insertImage, hasSdocImages, getImageData, queryCopyMoveProgressView, resetCursor, isInsertImageMenuDisabled, getSingleImageFromFragment } from './helpers';
|
|
6
|
-
import { focusEditor, generateEmptyElement, getLastChildPath, getSelectedNodeEntryByType,
|
|
6
|
+
import { focusEditor, generateEmptyElement, getLastChildPath, getSelectedNodeEntryByType, isSelectionAtBlockStart } from '../../core';
|
|
7
7
|
import { getErrorMsg } from '../../../../utils';
|
|
8
8
|
import { getSlateFragmentAttribute } from '../../../utils/document-utils';
|
|
9
9
|
import { INSERT_POSITION, CLIPBOARD_FORMAT_KEY, CLIPBOARD_ORIGIN_SDOC_KEY, IMAGE, IMAGE_BLOCK, PARAGRAPH, ELEMENT_TYPE } from '../../constants';
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
1
|
import React, { useState, useCallback, useRef, useEffect } from 'react';
|
|
3
2
|
import { ReactEditor, useSelected, useReadOnly } from '@seafile/slate-react';
|
|
4
3
|
import { Transforms, Editor } from '@seafile/slate';
|
|
@@ -77,9 +76,10 @@ const Image = _ref => {
|
|
|
77
76
|
'eventName': 'mouseup',
|
|
78
77
|
'event': onResizeEnd
|
|
79
78
|
}]);
|
|
80
|
-
const newData =
|
|
79
|
+
const newData = {
|
|
80
|
+
...element.data,
|
|
81
81
|
width: imageRef.current.width
|
|
82
|
-
}
|
|
82
|
+
};
|
|
83
83
|
updateImage(editor, newData);
|
|
84
84
|
|
|
85
85
|
// Reset hover menu position
|
|
@@ -185,9 +185,10 @@ const Image = _ref => {
|
|
|
185
185
|
}, []);
|
|
186
186
|
const onSetCaption = useCallback(e => {
|
|
187
187
|
const path = ReactEditor.findPath(editor, element);
|
|
188
|
-
const newData =
|
|
188
|
+
const newData = {
|
|
189
|
+
...data,
|
|
189
190
|
caption: e.target.value.trim()
|
|
190
|
-
}
|
|
191
|
+
};
|
|
191
192
|
if (path) {
|
|
192
193
|
Transforms.setNodes(editor, {
|
|
193
194
|
data: newData
|
|
@@ -199,9 +200,11 @@ const Image = _ref => {
|
|
|
199
200
|
return /*#__PURE__*/React.createElement(React.Fragment, null, isShowImagePlaceholder && /*#__PURE__*/React.createElement("span", Object.assign({
|
|
200
201
|
className: classNames('sdoc-image-wrapper', className)
|
|
201
202
|
}, attributes, {
|
|
202
|
-
style:
|
|
203
|
+
style: {
|
|
204
|
+
...style
|
|
205
|
+
},
|
|
203
206
|
onMouseOver: e => selectImageWhenSelectPartial(e, editor, element, isSelected),
|
|
204
|
-
contentEditable: "
|
|
207
|
+
contentEditable: "false",
|
|
205
208
|
suppressContentEditableWarning: true
|
|
206
209
|
}), /*#__PURE__*/React.createElement("img", {
|
|
207
210
|
ref: imageRef,
|
|
@@ -213,9 +216,11 @@ const Image = _ref => {
|
|
|
213
216
|
"data-id": element.id,
|
|
214
217
|
className: classNames('sdoc-image-wrapper', className)
|
|
215
218
|
}, attributes, {
|
|
216
|
-
style:
|
|
219
|
+
style: {
|
|
220
|
+
...style
|
|
221
|
+
},
|
|
217
222
|
onMouseOver: e => selectImageWhenSelectPartial(e, editor, element, isSelected),
|
|
218
|
-
contentEditable: "
|
|
223
|
+
contentEditable: "false",
|
|
219
224
|
suppressContentEditableWarning: true
|
|
220
225
|
}), /*#__PURE__*/React.createElement("span", {
|
|
221
226
|
className: "sdoc-image-inner"
|
|
@@ -279,7 +284,9 @@ export function renderImage(props, editor) {
|
|
|
279
284
|
element,
|
|
280
285
|
leaf
|
|
281
286
|
} = props;
|
|
282
|
-
let style =
|
|
287
|
+
let style = {
|
|
288
|
+
...props.style
|
|
289
|
+
};
|
|
283
290
|
if (leaf && leaf.computed_background_color) {
|
|
284
291
|
style['backgroundColor'] = leaf.computed_background_color;
|
|
285
292
|
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
1
|
import { Editor, Transforms, Range, Path } from '@seafile/slate';
|
|
3
2
|
import { ReactEditor } from '@seafile/slate-react';
|
|
4
3
|
import slugid from 'slugid';
|
|
@@ -141,9 +140,10 @@ export const upsertLinkText = (editor, _ref) => {
|
|
|
141
140
|
const firstText = newLInkNode.children[0];
|
|
142
141
|
replaceNodeChildren(editor, {
|
|
143
142
|
at: newLinkPath,
|
|
144
|
-
nodes:
|
|
143
|
+
nodes: {
|
|
144
|
+
...firstText,
|
|
145
145
|
text
|
|
146
|
-
}
|
|
146
|
+
},
|
|
147
147
|
insertOptions: {
|
|
148
148
|
select: true
|
|
149
149
|
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
1
|
import React, { useCallback, useMemo } from 'react';
|
|
3
2
|
import { MENUS_CONFIG_MAP, ELEMENT_TYPE } from '../../../constants';
|
|
4
3
|
import { isMenuDisabled } from '../helpers';
|
|
@@ -29,14 +28,14 @@ const LinkMenu = _ref => {
|
|
|
29
28
|
|
|
30
29
|
// Apply for comment Editor
|
|
31
30
|
if (editor.editorType === COMMENT_EDITOR) {
|
|
32
|
-
const menuProps =
|
|
31
|
+
const menuProps = {
|
|
33
32
|
isRichEditor,
|
|
34
|
-
className
|
|
35
|
-
|
|
33
|
+
className,
|
|
34
|
+
...menuConfig,
|
|
36
35
|
disabled: disabled,
|
|
37
36
|
isActive: false,
|
|
38
37
|
onMouseDown: openLinkDialog
|
|
39
|
-
}
|
|
38
|
+
};
|
|
40
39
|
menuProps.id = 'sdoc-comment-editor' + menuConfig.id;
|
|
41
40
|
return /*#__PURE__*/React.createElement(MenuItem, menuProps);
|
|
42
41
|
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
1
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
3
2
|
import React from 'react';
|
|
4
3
|
import { MENUS_CONFIG_MAP, ORDERED_LIST, UNORDERED_LIST } from '../../../constants';
|
|
@@ -43,14 +42,14 @@ class ListMenu extends React.Component {
|
|
|
43
42
|
type
|
|
44
43
|
} = this.props;
|
|
45
44
|
const menuConfig = MENUS_CONFIG_MAP[type];
|
|
46
|
-
const props =
|
|
45
|
+
const props = {
|
|
47
46
|
isRichEditor,
|
|
48
|
-
className
|
|
49
|
-
|
|
47
|
+
className,
|
|
48
|
+
...menuConfig,
|
|
50
49
|
disabled: this.isDisabled(),
|
|
51
50
|
isActive: this.isActive(),
|
|
52
51
|
onMouseDown: this.onMouseDown
|
|
53
|
-
}
|
|
52
|
+
};
|
|
54
53
|
return /*#__PURE__*/React.createElement(MenuItem, props);
|
|
55
54
|
}
|
|
56
55
|
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
1
|
import isHotkey from 'is-hotkey';
|
|
3
2
|
import { Editor, Range, Transforms } from '@seafile/slate';
|
|
4
3
|
import { LIST_ITEM } from '../../../constants';
|
|
@@ -24,8 +23,12 @@ export const onTabHandle = (editor, event) => {
|
|
|
24
23
|
anchor,
|
|
25
24
|
focus
|
|
26
25
|
} = {
|
|
27
|
-
anchor:
|
|
28
|
-
|
|
26
|
+
anchor: {
|
|
27
|
+
...selection.focus
|
|
28
|
+
},
|
|
29
|
+
focus: {
|
|
30
|
+
...selection.anchor
|
|
31
|
+
}
|
|
29
32
|
});
|
|
30
33
|
}
|
|
31
34
|
const unHungRange = Editor.unhangRange(editor, {
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
1
|
import { Transforms, Editor, Path, Range } from '@seafile/slate';
|
|
3
2
|
import { LIST_ITEM, PARAGRAPH } from '../../../constants';
|
|
4
3
|
import { getAboveNode, isBlockTextEmptyAfterSelection, isStartPoint } from '../../../core';
|
|
@@ -64,7 +63,10 @@ export const insertListItem = editor => {
|
|
|
64
63
|
// listItem 有内容,光标在结尾
|
|
65
64
|
const marks = (_Editor$marks = Editor.marks(editor)) === null || _Editor$marks === void 0 ? void 0 : _Editor$marks.key;
|
|
66
65
|
const itemContent = generateEmptyListContent();
|
|
67
|
-
Transforms.insertNodes(editor,
|
|
66
|
+
Transforms.insertNodes(editor, {
|
|
67
|
+
...itemContent,
|
|
68
|
+
...marks
|
|
69
|
+
}, {
|
|
68
70
|
at: nextListItemPath
|
|
69
71
|
});
|
|
70
72
|
const listItem = generateEmptyListItem();
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
1
|
import { Node, Range, Transforms, Element, Editor } from '@seafile/slate';
|
|
3
2
|
import { LIST_ITEM, PARAGRAPH, INSERT_POSITION } from '../../../constants';
|
|
4
3
|
import { findNode, getNodeEntries, getNodeType, getSelectedNodeEntryByType, isRangeAcrossBlocks } from '../../../core';
|
|
@@ -43,9 +42,12 @@ const wrapRangeList = (editor, type) => {
|
|
|
43
42
|
mode: 'lowest'
|
|
44
43
|
};
|
|
45
44
|
const startList = findNode(editor, options);
|
|
46
|
-
const endList = findNode(editor,
|
|
47
|
-
|
|
48
|
-
|
|
45
|
+
const endList = findNode(editor, {
|
|
46
|
+
...options,
|
|
47
|
+
...{
|
|
48
|
+
at: end
|
|
49
|
+
}
|
|
50
|
+
});
|
|
49
51
|
const rangeLength = Math.min(startList[1].length, endList[1].length);
|
|
50
52
|
Transforms.setNodes(editor, {
|
|
51
53
|
type
|