@seafile/sdoc-editor 0.1.155 → 0.1.157
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/extension/commons/select-file-dialog/index.js +4 -4
- package/dist/basic-sdk/extension/commons/select-file-dialog/local-files/index.js +1 -1
- package/dist/basic-sdk/extension/constants/element-type.js +1 -1
- package/dist/basic-sdk/extension/constants/index.js +6 -4
- package/dist/basic-sdk/extension/plugins/blockquote/helpers.js +4 -4
- package/dist/basic-sdk/extension/plugins/code-block/helpers.js +1 -1
- package/dist/basic-sdk/extension/plugins/code-block/plugin.js +5 -5
- package/dist/basic-sdk/extension/plugins/font/helpers.js +0 -3
- package/dist/basic-sdk/extension/plugins/header/helpers.js +4 -4
- package/dist/basic-sdk/extension/plugins/header/menu/index.js +1 -1
- package/dist/basic-sdk/extension/plugins/header/plugin.js +2 -2
- package/dist/basic-sdk/extension/plugins/link/helpers.js +3 -3
- package/dist/basic-sdk/extension/plugins/list/helpers.js +2 -2
- package/dist/basic-sdk/extension/plugins/markdown/plugin.js +2 -2
- package/dist/basic-sdk/extension/plugins/sdoc-link/helpers.js +3 -3
- package/dist/basic-sdk/extension/plugins/text-style/helpers.js +2 -1
- package/dist/basic-sdk/extension/toolbar/side-toolbar/helpers.js +11 -4
- package/dist/basic-sdk/extension/toolbar/side-toolbar/index.js +1 -1
- package/package.json +1 -1
|
@@ -7,14 +7,14 @@ import context from '../../../../context';
|
|
|
7
7
|
import LocalFiles from './local-files';
|
|
8
8
|
import toaster from '../../../../components/toast';
|
|
9
9
|
import { getErrorMsg } from '../../../../utils/';
|
|
10
|
+
import { ELEMENT_TYPE, FILE_TYPE } from '../../constants';
|
|
10
11
|
import './index.css';
|
|
11
12
|
var SelectSdocFileDialog = function SelectSdocFileDialog(_ref) {
|
|
12
13
|
var editor = _ref.editor,
|
|
13
14
|
dialogType = _ref.dialogType,
|
|
14
15
|
closeDialog = _ref.closeDialog,
|
|
15
16
|
insertLinkCallback = _ref.insertLinkCallback;
|
|
16
|
-
var
|
|
17
|
-
var modalTitle = dialogType === 'file-link' ? 'Select_file' : 'Select_sdoc_document';
|
|
17
|
+
var modalTitle = dialogType === ELEMENT_TYPE.FILE_LINK ? 'Select_file' : 'Select_sdoc_document';
|
|
18
18
|
var _useTranslation = useTranslation(),
|
|
19
19
|
t = _useTranslation.t;
|
|
20
20
|
var _useState = useState(null),
|
|
@@ -27,7 +27,7 @@ var SelectSdocFileDialog = function SelectSdocFileDialog(_ref) {
|
|
|
27
27
|
var insertFile = useCallback(function (fileInfo) {
|
|
28
28
|
var insertFileLinkCallback = insertLinkCallback.insertFileLinkCallback,
|
|
29
29
|
insertSdocFileLinkCallback = insertLinkCallback.insertSdocFileLinkCallback;
|
|
30
|
-
if (dialogType ===
|
|
30
|
+
if (dialogType === ELEMENT_TYPE.FILE_LINK) {
|
|
31
31
|
insertFileLinkCallback && insertFileLinkCallback(editor, fileInfo.name, fileInfo.file_uuid);
|
|
32
32
|
} else {
|
|
33
33
|
insertSdocFileLinkCallback && insertSdocFileLinkCallback(editor, fileInfo.name, fileInfo.file_uuid);
|
|
@@ -79,7 +79,7 @@ var SelectSdocFileDialog = function SelectSdocFileDialog(_ref) {
|
|
|
79
79
|
}, t('Local_file')))), /*#__PURE__*/React.createElement("div", {
|
|
80
80
|
className: "sdoc-file-select-right"
|
|
81
81
|
}, /*#__PURE__*/React.createElement(LocalFiles, {
|
|
82
|
-
|
|
82
|
+
fileType: FILE_TYPE[dialogType],
|
|
83
83
|
onSelectedFile: onSelectedFile,
|
|
84
84
|
toggle: closeDialog
|
|
85
85
|
}), /*#__PURE__*/React.createElement("div", {
|
|
@@ -14,7 +14,7 @@ import './index.css';
|
|
|
14
14
|
var LocalFiles = function LocalFiles(_ref) {
|
|
15
15
|
var onSelectedFile = _ref.onSelectedFile,
|
|
16
16
|
toggle = _ref.toggle,
|
|
17
|
-
fileType = _ref.
|
|
17
|
+
fileType = _ref.fileType,
|
|
18
18
|
t = _ref.t;
|
|
19
19
|
var folderRef = useRef(null);
|
|
20
20
|
var _useState = useState(new Set([])),
|
|
@@ -9,7 +9,7 @@ export var HEADER4 = 'header4';
|
|
|
9
9
|
export var HEADER5 = 'header5';
|
|
10
10
|
export var HEADER6 = 'header6';
|
|
11
11
|
export var ORDERED_LIST = 'ordered_list';
|
|
12
|
-
export var UNORDERED_LIST = 'unordered_list';
|
|
12
|
+
export var UNORDERED_LIST = 'unordered_list';
|
|
13
13
|
export var LIST_ITEM = 'list-item';
|
|
14
14
|
export var LIST_LIC = 'list-lic'; // placeholder
|
|
15
15
|
export var CHECK_LIST_ITEM = 'check-list-item';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
-
var _HEADER_TITLE_MAP;
|
|
2
|
+
var _HEADER_TITLE_MAP, _FILE_TYPE;
|
|
3
3
|
// extension plugin
|
|
4
4
|
import * as ELEMENT_TYPE from './element-type';
|
|
5
5
|
import { BLOCKQUOTE, TITLE, SUBTITLE, HEADER, HEADER1, HEADER2, HEADER3, HEADER4, HEADER5, HEADER6, PARAGRAPH, ORDERED_LIST, UNORDERED_LIST, LIST_ITEM, LIST_LIC, CHECK_LIST_ITEM, CODE_BLOCK, CODE_LINE, TABLE, TABLE_CELL, TABLE_ROW, LINK, SDOC_LINK, FILE_LINK, IMAGE } from './element-type';
|
|
@@ -10,7 +10,6 @@ export { KEYBOARD, MAC_HOTKEYS, WIN_HOTKEYS } from './keyboard';
|
|
|
10
10
|
export { UNDO, REDO, TEXT_STYLE, TEXT_STYLE_MAP, TEXT_STYLE_MORE, TEXT_ALIGN, REMOVE_TABLE, CLEAR_FORMAT, MENUS_CONFIG_MAP, SIDE_MENUS_CONFIG } from './menus-config';
|
|
11
11
|
export var HEADERS = [HEADER1, HEADER2, HEADER3, HEADER4, HEADER5, HEADER6];
|
|
12
12
|
export var HEADER_TITLE_MAP = (_HEADER_TITLE_MAP = {}, _defineProperty(_HEADER_TITLE_MAP, TITLE, 'Title'), _defineProperty(_HEADER_TITLE_MAP, SUBTITLE, 'Subtitle'), _defineProperty(_HEADER_TITLE_MAP, HEADER1, 'Header_one'), _defineProperty(_HEADER_TITLE_MAP, HEADER2, 'Header_two'), _defineProperty(_HEADER_TITLE_MAP, HEADER3, 'Header_three'), _defineProperty(_HEADER_TITLE_MAP, HEADER4, 'Header_four'), _defineProperty(_HEADER_TITLE_MAP, HEADER5, 'Header_five'), _defineProperty(_HEADER_TITLE_MAP, HEADER6, 'Header_six'), _defineProperty(_HEADER_TITLE_MAP, PARAGRAPH, 'Paragraph'), _HEADER_TITLE_MAP);
|
|
13
|
-
export var LIST_TYPE_ARRAY = ['unordered_list', 'ordered_list'];
|
|
14
13
|
export var TRANSPARENT = 'transparent';
|
|
15
14
|
export var CLIPBOARD_FORMAT_KEY = 'x-slate-fragment';
|
|
16
15
|
export var INSERT_FILE_DISPLAY_TYPE = ['text_link', 'icon_link', 'card_link'];
|
|
@@ -20,6 +19,9 @@ export var INSERT_POSITION = {
|
|
|
20
19
|
AFTER: 'after'
|
|
21
20
|
};
|
|
22
21
|
export var LOCAL_IMAGE = 'local-image';
|
|
23
|
-
export var
|
|
24
|
-
export var
|
|
22
|
+
export var LIST_TYPE_ARRAY = [UNORDERED_LIST, ORDERED_LIST];
|
|
23
|
+
export var LIST_ITEM_CORRELATION_TYPE = [UNORDERED_LIST, ORDERED_LIST, LIST_ITEM];
|
|
24
|
+
export var LIST_ITEM_SUPPORTED_TRANSFORMATION = [UNORDERED_LIST, ORDERED_LIST, 'left', 'center', 'right', BLOCKQUOTE];
|
|
25
|
+
export var ADD_POSITION_OFFSET_TYPE = [PARAGRAPH, SUBTITLE, HEADER1, HEADER2, HEADER3, HEADER4, HEADER5, HEADER6, CHECK_LIST_ITEM];
|
|
26
|
+
export var FILE_TYPE = (_FILE_TYPE = {}, _defineProperty(_FILE_TYPE, FILE_LINK, 'file'), _defineProperty(_FILE_TYPE, SDOC_LINK, 'sdoc'), _FILE_TYPE);
|
|
25
27
|
export { ELEMENT_TYPE, BLOCKQUOTE, TITLE, SUBTITLE, HEADER, HEADER1, HEADER2, HEADER3, HEADER4, HEADER5, HEADER6, PARAGRAPH, ORDERED_LIST, UNORDERED_LIST, LIST_ITEM, LIST_LIC, CHECK_LIST_ITEM, CODE_BLOCK, CODE_LINE, TABLE, TABLE_CELL, TABLE_ROW, LINK, SDOC_LINK, FILE_LINK, IMAGE };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
2
2
|
import { Editor, Transforms, Element } from '@seafile/slate';
|
|
3
3
|
import slugid from 'slugid';
|
|
4
|
-
import { BLOCKQUOTE, CHECK_LIST_ITEM, IMAGE, ORDERED_LIST, UNORDERED_LIST } from '../../constants';
|
|
4
|
+
import { BLOCKQUOTE, CHECK_LIST_ITEM, IMAGE, ORDERED_LIST, PARAGRAPH, UNORDERED_LIST } from '../../constants';
|
|
5
5
|
import { focusEditor, getNodeType } from '../../core';
|
|
6
6
|
export var isMenuDisabled = function isMenuDisabled(editor, readonly) {
|
|
7
7
|
if (readonly) return true;
|
|
@@ -11,8 +11,8 @@ export var isMenuDisabled = function isMenuDisabled(editor, readonly) {
|
|
|
11
11
|
var type = getNodeType(n);
|
|
12
12
|
|
|
13
13
|
// Only available for p and blockquote
|
|
14
|
-
if (type ===
|
|
15
|
-
if (type ===
|
|
14
|
+
if (type === PARAGRAPH) return true;
|
|
15
|
+
if (type === BLOCKQUOTE) return true;
|
|
16
16
|
if (type === UNORDERED_LIST) return true;
|
|
17
17
|
if (type === ORDERED_LIST) return true;
|
|
18
18
|
if (type === CHECK_LIST_ITEM) return true;
|
|
@@ -42,7 +42,7 @@ export var getBlockQuoteType = function getBlockQuoteType(editor) {
|
|
|
42
42
|
}),
|
|
43
43
|
_Editor$nodes4 = _slicedToArray(_Editor$nodes3, 1),
|
|
44
44
|
match = _Editor$nodes4[0];
|
|
45
|
-
if (!match) return
|
|
45
|
+
if (!match) return PARAGRAPH;
|
|
46
46
|
var _match = _slicedToArray(match, 1),
|
|
47
47
|
n = _match[0];
|
|
48
48
|
return getNodeType(n);
|
|
@@ -102,7 +102,7 @@ var withCodeBlock = function withCodeBlock(editor) {
|
|
|
102
102
|
var type = getNodeType(node);
|
|
103
103
|
if (type === CODE_LINE && path.length <= 1) {
|
|
104
104
|
Transforms.setNodes(newEditor, {
|
|
105
|
-
type:
|
|
105
|
+
type: PARAGRAPH
|
|
106
106
|
}, {
|
|
107
107
|
at: path
|
|
108
108
|
});
|
|
@@ -126,19 +126,19 @@ var withCodeBlock = function withCodeBlock(editor) {
|
|
|
126
126
|
}
|
|
127
127
|
|
|
128
128
|
// There must be a code node below code-block
|
|
129
|
-
if (getNodeType(node.children[0]) !==
|
|
129
|
+
if (getNodeType(node.children[0]) !== CODE_LINE) {
|
|
130
130
|
Transforms.unwrapNodes(newEditor);
|
|
131
131
|
Transforms.setNodes(newEditor, {
|
|
132
|
-
type:
|
|
132
|
+
type: PARAGRAPH
|
|
133
133
|
}, {
|
|
134
134
|
mode: 'highest'
|
|
135
135
|
});
|
|
136
136
|
}
|
|
137
137
|
if (node.children.length > 1) {
|
|
138
138
|
node.children.forEach(function (child, index) {
|
|
139
|
-
if (child.type !==
|
|
139
|
+
if (child.type !== CODE_LINE) {
|
|
140
140
|
Transforms.setNodes(newEditor, {
|
|
141
|
-
type:
|
|
141
|
+
type: CODE_LINE
|
|
142
142
|
}, {
|
|
143
143
|
at: [].concat(_toConsumableArray(path), [index])
|
|
144
144
|
});
|
|
@@ -37,7 +37,6 @@ export var getFontSize = function getFontSize(editor) {
|
|
|
37
37
|
if (n['font-size']) return true;
|
|
38
38
|
var _parentNode = getParentNode(editor.children, n.id);
|
|
39
39
|
if (!_parentNode) return false;
|
|
40
|
-
// title | subtitle | header | code-line
|
|
41
40
|
if ([TITLE, SUBTITLE].concat(_toConsumableArray(HEADERS), [CODE_LINE]).includes(_parentNode.type)) {
|
|
42
41
|
return true;
|
|
43
42
|
}
|
|
@@ -52,8 +51,6 @@ export var getFontSize = function getFontSize(editor) {
|
|
|
52
51
|
// has font-size attrubute
|
|
53
52
|
var matched = match[0];
|
|
54
53
|
if (matched['font-size']) return matched['font-size'];
|
|
55
|
-
|
|
56
|
-
// title | subtitle | header | code-line
|
|
57
54
|
var parentNode = getParentNode(editor.children, matched.id);
|
|
58
55
|
return SDOC_FONT_SIZE[parentNode.type];
|
|
59
56
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
2
2
|
import { Editor, Transforms } from '@seafile/slate';
|
|
3
3
|
import { getNodeType, isTextNode, getParentNode } from '../../core';
|
|
4
|
-
import { ELEMENT_TYPE, SUBTITLE, TITLE } from '../../constants';
|
|
4
|
+
import { ELEMENT_TYPE, HEADER, PARAGRAPH, SUBTITLE, TITLE } from '../../constants';
|
|
5
5
|
export var isMenuDisabled = function isMenuDisabled(editor) {
|
|
6
6
|
var readonly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
7
7
|
if (readonly) return true;
|
|
@@ -16,7 +16,7 @@ export var isMenuDisabled = function isMenuDisabled(editor) {
|
|
|
16
16
|
if (type === ELEMENT_TYPE.CODE_LINE) return true;
|
|
17
17
|
if (type === ELEMENT_TYPE.CODE_BLOCK) return true;
|
|
18
18
|
if (type === ELEMENT_TYPE.PARAGRAPH) return true;
|
|
19
|
-
if (type.startsWith(
|
|
19
|
+
if (type.startsWith(HEADER)) return true;
|
|
20
20
|
if (type === TITLE) return true;
|
|
21
21
|
if (type === SUBTITLE) return true;
|
|
22
22
|
return false;
|
|
@@ -32,7 +32,7 @@ export var getHeaderType = function getHeaderType(editor) {
|
|
|
32
32
|
var _Editor$nodes3 = Editor.nodes(editor, {
|
|
33
33
|
match: function match(n) {
|
|
34
34
|
var nodeType = getNodeType(n);
|
|
35
|
-
if (nodeType.includes(
|
|
35
|
+
if (nodeType.includes(HEADER)) return true;
|
|
36
36
|
if (nodeType === TITLE) return true;
|
|
37
37
|
if (nodeType === SUBTITLE) return true;
|
|
38
38
|
return false;
|
|
@@ -41,7 +41,7 @@ export var getHeaderType = function getHeaderType(editor) {
|
|
|
41
41
|
}),
|
|
42
42
|
_Editor$nodes4 = _slicedToArray(_Editor$nodes3, 1),
|
|
43
43
|
match = _Editor$nodes4[0];
|
|
44
|
-
if (!match) return
|
|
44
|
+
if (!match) return PARAGRAPH;
|
|
45
45
|
var _match = _slicedToArray(match, 1),
|
|
46
46
|
n = _match[0];
|
|
47
47
|
return getNodeType(n);
|
|
@@ -68,7 +68,7 @@ var HeaderMenu = /*#__PURE__*/function (_React$Component) {
|
|
|
68
68
|
return function () {
|
|
69
69
|
var editor = _this.props.editor;
|
|
70
70
|
var active = _this.isActive(type);
|
|
71
|
-
var newType = active ?
|
|
71
|
+
var newType = active ? PARAGRAPH : type;
|
|
72
72
|
setHeaderType(editor, newType);
|
|
73
73
|
_this.setState({
|
|
74
74
|
isShowHeaderPopover: false
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
2
2
|
import { Editor, Element, Transforms, Node } from '@seafile/slate';
|
|
3
|
-
import { PARAGRAPH, HEADERS, LIST_TYPE_ARRAY, TITLE, SUBTITLE } from '../../constants';
|
|
3
|
+
import { PARAGRAPH, HEADERS, LIST_TYPE_ARRAY, TITLE, SUBTITLE, HEADER } from '../../constants';
|
|
4
4
|
import { generateEmptyElement, getSelectedNodeByTypes } from '../../core';
|
|
5
5
|
import { isMenuDisabled, setHeaderType } from './helpers';
|
|
6
6
|
import isHotkey from 'is-hotkey';
|
|
@@ -23,7 +23,7 @@ var withHeader = function withHeader(editor) {
|
|
|
23
23
|
var _Editor$nodes = Editor.nodes(newEditor, {
|
|
24
24
|
match: function match(n) {
|
|
25
25
|
if (!Element.isElement(n)) return false;
|
|
26
|
-
if (n.type.startsWith(
|
|
26
|
+
if (n.type.startsWith(HEADER)) return true;
|
|
27
27
|
if (n.type === TITLE) return true;
|
|
28
28
|
if (n.type === SUBTITLE) return true;
|
|
29
29
|
return false;
|
|
@@ -5,7 +5,7 @@ function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyri
|
|
|
5
5
|
import { Editor, Transforms, Range, Path } from '@seafile/slate';
|
|
6
6
|
import { ReactEditor } from '@seafile/slate-react';
|
|
7
7
|
import slugid from 'slugid';
|
|
8
|
-
import { ELEMENT_TYPE, INSERT_POSITION, LINK, LIST_ITEM } from '../../constants';
|
|
8
|
+
import { CODE_BLOCK, CODE_LINE, ELEMENT_TYPE, INSERT_POSITION, LINK, LIST_ITEM, PARAGRAPH } from '../../constants';
|
|
9
9
|
import { getNodeType, getSelectedElems, getAboveNode, getEditorString, replaceNodeChildren, generateEmptyElement } from '../../core';
|
|
10
10
|
export var isMenuDisabled = function isMenuDisabled(editor, readonly) {
|
|
11
11
|
if (readonly) return true;
|
|
@@ -14,7 +14,7 @@ export var isMenuDisabled = function isMenuDisabled(editor, readonly) {
|
|
|
14
14
|
var notMatch = selectedElems.some(function (elem) {
|
|
15
15
|
var type = elem.type;
|
|
16
16
|
if (editor.isVoid(elem)) return true;
|
|
17
|
-
if ([
|
|
17
|
+
if ([CODE_BLOCK, CODE_LINE, LINK].includes(type)) return true;
|
|
18
18
|
return false;
|
|
19
19
|
});
|
|
20
20
|
if (notMatch) return true; // disabled
|
|
@@ -49,7 +49,7 @@ export var getLinkType = function getLinkType(editor) {
|
|
|
49
49
|
}),
|
|
50
50
|
_Editor$nodes2 = _slicedToArray(_Editor$nodes, 1),
|
|
51
51
|
match = _Editor$nodes2[0];
|
|
52
|
-
if (!match) return
|
|
52
|
+
if (!match) return PARAGRAPH;
|
|
53
53
|
var _match = _slicedToArray(match, 1),
|
|
54
54
|
n = _match[0];
|
|
55
55
|
return getNodeType(n);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
2
2
|
import _createForOfIteratorHelper from "@babel/runtime/helpers/esm/createForOfIteratorHelper";
|
|
3
3
|
import { Editor, Element } from '@seafile/slate';
|
|
4
|
-
import { PARAGRAPH } from '../../constants';
|
|
4
|
+
import { CHECK_LIST_ITEM, CODE_BLOCK, CODE_LINE, PARAGRAPH, TABLE } from '../../constants';
|
|
5
5
|
import { getSelectedNodeByType } from '../../core';
|
|
6
6
|
import { toggleList } from './transforms';
|
|
7
7
|
export var isMenuDisabled = function isMenuDisabled(editor, readonly) {
|
|
@@ -28,7 +28,7 @@ export var isMenuDisabled = function isMenuDisabled(editor, readonly) {
|
|
|
28
28
|
var notMatch = selectedElements.some(function (element) {
|
|
29
29
|
if (Editor.isVoid(editor, element) && Editor.isBlock(editor, element)) return true;
|
|
30
30
|
var type = element.type;
|
|
31
|
-
if ([
|
|
31
|
+
if ([CODE_LINE, CODE_BLOCK, TABLE, CHECK_LIST_ITEM].includes(type)) return true;
|
|
32
32
|
return false;
|
|
33
33
|
});
|
|
34
34
|
if (notMatch) return true;
|
|
@@ -2,7 +2,7 @@ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
|
2
2
|
import { Editor, Transforms, Range } from '@seafile/slate';
|
|
3
3
|
import { toggleList } from '../list/transforms';
|
|
4
4
|
import { getSelectedNodeByType } from '../../core';
|
|
5
|
-
import { HEADER1, HEADER2, HEADER3, HEADER4, HEADER5, HEADER6, UNORDERED_LIST, BLOCKQUOTE, TEXT_STYLE_MAP } from '../../constants';
|
|
5
|
+
import { HEADER1, HEADER2, HEADER3, HEADER4, HEADER5, HEADER6, UNORDERED_LIST, BLOCKQUOTE, TEXT_STYLE_MAP, PARAGRAPH } from '../../constants';
|
|
6
6
|
var KEY_TO_TYPE_FOR_SPACE = {
|
|
7
7
|
// Title shortcut
|
|
8
8
|
'#': HEADER1,
|
|
@@ -61,7 +61,7 @@ var withMarkDown = function withMarkDown(editor) {
|
|
|
61
61
|
var selection = editor.selection;
|
|
62
62
|
if (selection == null) return insertText(text);
|
|
63
63
|
if (Range.isExpanded(selection)) return insertText(text);
|
|
64
|
-
if (getSelectedNodeByType(editor,
|
|
64
|
+
if (getSelectedNodeByType(editor, PARAGRAPH) == null) return insertText(text); // It must be in paragraph
|
|
65
65
|
if (text !== ' ') return insertText(text); // The value must be an input space
|
|
66
66
|
|
|
67
67
|
// Gets the text before the space
|
|
@@ -4,7 +4,7 @@ import { Editor, Transforms, Range } from '@seafile/slate';
|
|
|
4
4
|
import slugid from 'slugid';
|
|
5
5
|
import copy from 'copy-to-clipboard';
|
|
6
6
|
import context from '../../../../context';
|
|
7
|
-
import { SDOC_LINK, LINK, INSERT_FILE_DISPLAY_TYPE } from '../../constants';
|
|
7
|
+
import { SDOC_LINK, LINK, INSERT_FILE_DISPLAY_TYPE, CODE_BLOCK, CODE_LINE, PARAGRAPH } from '../../constants';
|
|
8
8
|
import { getNodeType, getSelectedElems } from '../../core';
|
|
9
9
|
export var isMenuDisabled = function isMenuDisabled(editor, readonly) {
|
|
10
10
|
if (readonly) return true;
|
|
@@ -13,7 +13,7 @@ export var isMenuDisabled = function isMenuDisabled(editor, readonly) {
|
|
|
13
13
|
var notMatch = selectedElems.some(function (elem) {
|
|
14
14
|
var type = elem.type;
|
|
15
15
|
if (editor.isVoid(elem)) return true;
|
|
16
|
-
if ([
|
|
16
|
+
if ([CODE_BLOCK, CODE_LINE, LINK].includes(type)) return true;
|
|
17
17
|
return false;
|
|
18
18
|
});
|
|
19
19
|
if (notMatch) return true; // disabled
|
|
@@ -43,7 +43,7 @@ export var getType = function getType(editor) {
|
|
|
43
43
|
}),
|
|
44
44
|
_Editor$nodes2 = _slicedToArray(_Editor$nodes, 1),
|
|
45
45
|
match = _Editor$nodes2[0];
|
|
46
|
-
if (!match) return
|
|
46
|
+
if (!match) return PARAGRAPH;
|
|
47
47
|
var _match = _slicedToArray(match, 1),
|
|
48
48
|
n = _match[0];
|
|
49
49
|
return getNodeType(n);
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
2
2
|
import { Editor } from '@seafile/slate';
|
|
3
3
|
import { getNodeType } from '../../core';
|
|
4
|
+
import { CODE_BLOCK } from '../../constants/element-type';
|
|
4
5
|
export var isMenuDisabled = function isMenuDisabled(editor, readonly) {
|
|
5
6
|
if (readonly) return true;
|
|
6
7
|
if (editor.selection == null) return true;
|
|
7
8
|
var _Editor$nodes = Editor.nodes(editor, {
|
|
8
9
|
match: function match(n) {
|
|
9
10
|
var type = getNodeType(n);
|
|
10
|
-
if (type ===
|
|
11
|
+
if (type === CODE_BLOCK) return true; // Code block
|
|
11
12
|
if (Editor.isVoid(editor, n)) return true; // void node
|
|
12
13
|
|
|
13
14
|
return false;
|
|
@@ -3,7 +3,7 @@ import slugid from 'slugid';
|
|
|
3
3
|
import { ReactEditor } from '@seafile/slate-react';
|
|
4
4
|
import copy from 'copy-to-clipboard';
|
|
5
5
|
import { toggleList } from '../../plugins/list/transforms';
|
|
6
|
-
import { ORDERED_LIST, UNORDERED_LIST, PARAGRAPH, CHECK_LIST_ITEM, IMAGE, TABLE, CODE_BLOCK, LIST_ITEM, BLOCKQUOTE, LIST_ITEM_CORRELATION_TYPE } from '../../constants';
|
|
6
|
+
import { ORDERED_LIST, UNORDERED_LIST, PARAGRAPH, CHECK_LIST_ITEM, IMAGE, TABLE, CODE_BLOCK, LIST_ITEM, BLOCKQUOTE, LIST_ITEM_CORRELATION_TYPE, ADD_POSITION_OFFSET_TYPE } from '../../constants';
|
|
7
7
|
export var onSetNodeType = function onSetNodeType(editor, element, type) {
|
|
8
8
|
if (!type) return;
|
|
9
9
|
if ([ORDERED_LIST, UNORDERED_LIST].includes(type)) {
|
|
@@ -62,10 +62,17 @@ export var onDeleteNode = function onDeleteNode(editor, element) {
|
|
|
62
62
|
at: path
|
|
63
63
|
});
|
|
64
64
|
};
|
|
65
|
-
export var getDomTopHeight = function getDomTopHeight(dom) {
|
|
66
|
-
var HEADER_HEIGHT = 56 + 44;
|
|
65
|
+
export var getDomTopHeight = function getDomTopHeight(dom, slateNode) {
|
|
67
66
|
var rect = dom.getBoundingClientRect();
|
|
68
|
-
|
|
67
|
+
var offsetY = 0;
|
|
68
|
+
var paddingTop = parseFloat(window.getComputedStyle(dom).getPropertyValue('padding-top'));
|
|
69
|
+
var lightHight = parseFloat(window.getComputedStyle(dom).getPropertyValue('line-height'));
|
|
70
|
+
if (ADD_POSITION_OFFSET_TYPE.includes(slateNode.type)) {
|
|
71
|
+
offsetY = lightHight / 2 + paddingTop - 12; // side toolbar icon is 12 px
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
var HEADER_HEIGHT = 56 + 44;
|
|
75
|
+
return rect.y - HEADER_HEIGHT + offsetY;
|
|
69
76
|
};
|
|
70
77
|
export var isVoidNode = function isVoidNode(node) {
|
|
71
78
|
if (!node) return true;
|
|
@@ -69,8 +69,8 @@ var SideToolbar = function SideToolbar() {
|
|
|
69
69
|
if (!dom.parentNode) return;
|
|
70
70
|
dom = dom.parentNode;
|
|
71
71
|
}
|
|
72
|
-
var top = getDomTopHeight(dom);
|
|
73
72
|
var node = ReactEditor.toSlateNode(editor, dom);
|
|
73
|
+
var top = getDomTopHeight(dom, node);
|
|
74
74
|
var isEmpty = isVoidNode(node);
|
|
75
75
|
setSidePosition({
|
|
76
76
|
top: top + scrollRef.current.scrollTop,
|