@seafile/sdoc-editor 1.0.194 → 1.0.196
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/core/queries/index.js +5 -1
- package/dist/basic-sdk/extension/plugins/blockquote/plugin.js +17 -12
- package/dist/basic-sdk/extension/plugins/file-link/helpers.js +12 -2
- package/dist/basic-sdk/extension/plugins/file-link/plugin.js +21 -1
- package/dist/basic-sdk/extension/plugins/file-link/render-elem.css +3 -2
- package/dist/basic-sdk/extension/plugins/file-link/render-elem.js +3 -0
- package/dist/basic-sdk/extension/plugins/header/plugin.js +3 -3
- package/dist/basic-sdk/extension/plugins/list/helpers.js +14 -2
- package/dist/basic-sdk/extension/plugins/paragraph/plugin.js +3 -3
- package/dist/basic-sdk/extension/plugins/sdoc-link/helpers.js +12 -2
- package/dist/basic-sdk/extension/plugins/sdoc-link/plugin.js +10 -27
- package/dist/basic-sdk/extension/plugins/sdoc-link/render/render-elem.css +2 -1
- package/dist/basic-sdk/extension/plugins/sdoc-link/render/render-elem.js +2 -1
- package/dist/basic-sdk/extension/toolbar/side-toolbar/event.js +3 -2
- package/dist/basic-sdk/extension/toolbar/side-toolbar/index.js +12 -1
- package/package.json +1 -1
|
@@ -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.someNode = exports.isTopLevelListItem = exports.isTextNode = exports.isStartPoint = exports.isSelectionAtBlockStart = exports.isSelectionAtBlockEnd = exports.isRangeInSameBlock = exports.isRangeAcrossBlocks = exports.isMultiLevelList = exports.isLastNode = exports.isLastChild = exports.isHasImg = exports.isFirstChild = exports.isEndPoint = exports.isEmptyArticle = exports.isCurrentLineHasText = exports.isCurrentLineEmpty = exports.isContainsVoidElement = exports.isBlockTextEmptyAfterSelection = exports.isBlockAboveEmpty = exports.isAncestorEmpty = exports.getTopLevelBlockNode = exports.getStartPoint = exports.getSelectedNodeEntryByType = exports.getSelectedNodeByTypes = exports.getSelectedNodeByType = exports.getSelectedElems = exports.getQueryOptions = exports.getPreviousPath = exports.getPrevNode = exports.getPointBefore = exports.getParentNode = exports.getNodes = exports.getNodeType = exports.getNodeEntries = exports.getNodeById = exports.getNode = exports.getNextSiblingNodes = exports.getNextNode = exports.getLastChildPath = exports.getLastChild = exports.getEndPoint = exports.getEditorString = exports.getDeepInlineChildren = exports.getCurrentNode = exports.getCommonNode = exports.getChildren = exports.getAboveNode = exports.getAboveBlockNode = exports.findPath = exports.findNode = exports.findDescendant = void 0;
|
|
7
|
+
exports.someNode = exports.isTopLevelListItem = exports.isTextNode = exports.isStartPoint = exports.isSelectionAtBlockStart = exports.isSelectionAtBlockEnd = exports.isRangeInSameBlock = exports.isRangeAcrossBlocks = exports.isMultiLevelList = exports.isMiddlePoint = exports.isLastNode = exports.isLastChild = exports.isHasImg = exports.isFirstChild = exports.isEndPoint = exports.isEmptyArticle = exports.isCurrentLineHasText = exports.isCurrentLineEmpty = exports.isContainsVoidElement = exports.isBlockTextEmptyAfterSelection = exports.isBlockAboveEmpty = exports.isAncestorEmpty = exports.getTopLevelBlockNode = exports.getStartPoint = exports.getSelectedNodeEntryByType = exports.getSelectedNodeByTypes = exports.getSelectedNodeByType = exports.getSelectedElems = exports.getQueryOptions = exports.getPreviousPath = exports.getPrevNode = exports.getPointBefore = exports.getParentNode = exports.getNodes = exports.getNodeType = exports.getNodeEntries = exports.getNodeById = exports.getNode = exports.getNextSiblingNodes = exports.getNextNode = exports.getLastChildPath = exports.getLastChild = exports.getEndPoint = exports.getEditorString = exports.getDeepInlineChildren = exports.getCurrentNode = exports.getCommonNode = exports.getChildren = exports.getAboveNode = exports.getAboveBlockNode = exports.findPath = exports.findNode = exports.findDescendant = void 0;
|
|
8
8
|
var _slate = require("@seafile/slate");
|
|
9
9
|
var _slateReact = require("@seafile/slate-react");
|
|
10
10
|
var _utils = require("../utils");
|
|
@@ -390,6 +390,10 @@ const isEndPoint = (editor, point, at) => {
|
|
|
390
390
|
return !!point && _slate.Editor.isEnd(editor, point, at);
|
|
391
391
|
};
|
|
392
392
|
exports.isEndPoint = isEndPoint;
|
|
393
|
+
const isMiddlePoint = (editor, point, at) => {
|
|
394
|
+
return !isStartPoint(editor, point, at) && !isEndPoint(editor, point, at);
|
|
395
|
+
};
|
|
396
|
+
exports.isMiddlePoint = isMiddlePoint;
|
|
393
397
|
const isBlockTextEmptyAfterSelection = editor => {
|
|
394
398
|
if (!editor.selection) return false;
|
|
395
399
|
const blockAbove = _slate.Editor.above(editor, {
|
|
@@ -29,9 +29,10 @@ const withBlockquote = editor => {
|
|
|
29
29
|
match: n => _slate.Element.isElement(n) && [_constants.PARAGRAPH, _constants.HEADER1, _constants.HEADER2, _constants.HEADER3, _constants.HEADER4, _constants.HEADER5, _constants.HEADER6, _constants.TITLE, _constants.SUBTITLE].includes(n.type),
|
|
30
30
|
mode: 'lowest'
|
|
31
31
|
});
|
|
32
|
+
|
|
32
33
|
// Exit blockquote when current line is empty
|
|
33
|
-
const
|
|
34
|
-
if (
|
|
34
|
+
const isAtBlockquoteEnd = currentLineEntry[1].slice(-1)[0] === quoteBlockEntry[0].children.length - 1;
|
|
35
|
+
if (isAtBlockquoteEnd) {
|
|
35
36
|
const isEmptyLine = !(currentLineEntry && _slate.Editor.string(newEditor, currentLineEntry[1]).length) && !(0, _core.isContainsVoidElement)(currentLineEntry[0]);
|
|
36
37
|
if (isEmptyLine) {
|
|
37
38
|
const nextPath = _slate.Path.next(quoteBlockEntry[1]);
|
|
@@ -43,6 +44,15 @@ const withBlockquote = editor => {
|
|
|
43
44
|
}
|
|
44
45
|
}
|
|
45
46
|
|
|
47
|
+
// const isMiddleIn
|
|
48
|
+
if (_slate.Range.isCollapsed(selection)) {
|
|
49
|
+
const isMiddleIn = (0, _core.isMiddlePoint)(editor, selection.anchor, currentLineEntry[1]);
|
|
50
|
+
if (isMiddleIn) {
|
|
51
|
+
insertBreak();
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
46
56
|
// Insert new line
|
|
47
57
|
_slate.Transforms.insertNodes(editor, {
|
|
48
58
|
type: _constants.PARAGRAPH,
|
|
@@ -70,20 +80,15 @@ const withBlockquote = editor => {
|
|
|
70
80
|
const [, currentLinePath] = currentLineEntry;
|
|
71
81
|
const currentLineIndex = currentLinePath[blockQuotePath.length];
|
|
72
82
|
// Transforms to paragraph when Select at the beginning of the first line
|
|
73
|
-
if (currentLineIndex === 0
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
at: blockQuoteEntry[1]
|
|
77
|
-
});
|
|
78
|
-
_slate.Transforms.insertNodes(newEditor, emptyParagraph, {
|
|
79
|
-
at: blockQuoteEntry[1]
|
|
83
|
+
if (currentLineIndex === 0) {
|
|
84
|
+
_slate.Transforms.liftNodes(editor, {
|
|
85
|
+
at: currentLinePath
|
|
80
86
|
});
|
|
81
|
-
const focusPoint = _slate.Editor.end(newEditor, blockQuoteEntry[1]);
|
|
82
|
-
(0, _core.focusEditor)(newEditor, focusPoint);
|
|
83
87
|
return;
|
|
84
88
|
}
|
|
89
|
+
|
|
85
90
|
// Merge with previous line when Select at the beginning of the line
|
|
86
|
-
if ((0, _core.isSelectionAtBlockStart)(editor)) {
|
|
91
|
+
if (currentLineIndex !== 0 && (0, _core.isSelectionAtBlockStart)(editor)) {
|
|
87
92
|
const lineText = _slate.Node.string(currentLineEntry[0]);
|
|
88
93
|
const previousNodeEntry = _slate.Editor.previous(editor, {
|
|
89
94
|
at: currentLineEntry[1]
|
|
@@ -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.unwrapLinkNode = exports.onCopyFileLinkNode = exports.isMenuDisabled = exports.insertFileLink = exports.getUrl = exports.getType = exports.generateFileNode = void 0;
|
|
7
|
+
exports.unwrapLinkNode = exports.onCopyFileLinkNode = exports.isMenuDisabled = exports.insertFileLink = exports.getUrl = exports.getType = exports.getFileLinkEntry = exports.generateFileNode = void 0;
|
|
8
8
|
var _slateReact = require("@seafile/slate-react");
|
|
9
9
|
var _slate = require("@seafile/slate");
|
|
10
10
|
var _slugid = _interopRequireDefault(require("slugid"));
|
|
@@ -112,4 +112,14 @@ const onCopyFileLinkNode = (editor, element) => {
|
|
|
112
112
|
}
|
|
113
113
|
});
|
|
114
114
|
};
|
|
115
|
-
exports.onCopyFileLinkNode = onCopyFileLinkNode;
|
|
115
|
+
exports.onCopyFileLinkNode = onCopyFileLinkNode;
|
|
116
|
+
const getFileLinkEntry = function (editor) {
|
|
117
|
+
let at = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : editor.selection;
|
|
118
|
+
const aboveNodeEntry = _slate.Editor.above(editor, {
|
|
119
|
+
match: n => n.type === _constants.FILE_LINK,
|
|
120
|
+
mode: 'highest',
|
|
121
|
+
at
|
|
122
|
+
});
|
|
123
|
+
return aboveNodeEntry;
|
|
124
|
+
};
|
|
125
|
+
exports.getFileLinkEntry = getFileLinkEntry;
|
|
@@ -6,10 +6,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var _slate = require("@seafile/slate");
|
|
8
8
|
var _constants = require("../../constants");
|
|
9
|
+
var _helpers = require("./helpers");
|
|
9
10
|
const withFileLink = editor => {
|
|
10
11
|
const {
|
|
11
12
|
isInline,
|
|
12
|
-
deleteBackward
|
|
13
|
+
deleteBackward,
|
|
14
|
+
onHotKeyDown
|
|
13
15
|
} = editor;
|
|
14
16
|
const newEditor = editor;
|
|
15
17
|
|
|
@@ -47,6 +49,24 @@ const withFileLink = editor => {
|
|
|
47
49
|
}
|
|
48
50
|
return deleteBackward(unit);
|
|
49
51
|
};
|
|
52
|
+
newEditor.onHotKeyDown = e => {
|
|
53
|
+
const fileLinkEntry = (0, _helpers.getFileLinkEntry)(editor);
|
|
54
|
+
if (fileLinkEntry) {
|
|
55
|
+
if (e.key === 'ArrowLeft') {
|
|
56
|
+
const beforePointFileLink = _slate.Editor.before(newEditor, fileLinkEntry[1]);
|
|
57
|
+
_slate.Transforms.select(newEditor, beforePointFileLink);
|
|
58
|
+
e.preventDefault();
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
if (e.key === 'ArrowRight') {
|
|
62
|
+
const afterPointFileLink = _slate.Editor.after(newEditor, fileLinkEntry[1]);
|
|
63
|
+
_slate.Transforms.select(newEditor, afterPointFileLink);
|
|
64
|
+
e.preventDefault();
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return onHotKeyDown && onHotKeyDown(e);
|
|
69
|
+
};
|
|
50
70
|
return newEditor;
|
|
51
71
|
};
|
|
52
72
|
var _default = exports.default = withFileLink;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
.file-link-selected,
|
|
1
2
|
.sdoc-file-link-render:hover {
|
|
2
|
-
background-color: #e5e5e5
|
|
3
|
+
background-color: #e5e5e5 !important;
|
|
3
4
|
}
|
|
4
5
|
|
|
5
6
|
.sdoc-file-card-link {
|
|
@@ -20,7 +21,7 @@
|
|
|
20
21
|
}
|
|
21
22
|
|
|
22
23
|
.sdoc-file-card-link .sdoc-file-link-icon :first-child {
|
|
23
|
-
|
|
24
|
+
font-size: 24px;
|
|
24
25
|
}
|
|
25
26
|
|
|
26
27
|
.sdoc-file-card-link .sdoc-file-link-icon {
|
|
@@ -27,6 +27,7 @@ const FileLink = _ref => {
|
|
|
27
27
|
const readOnly = (0, _slateReact.useReadOnly)();
|
|
28
28
|
const [isShowInsertHoverMenu, setIsShowInsertHoverMenu] = (0, _react.useState)(false);
|
|
29
29
|
const [menuPosition, setMenuPosition] = (0, _react.useState)({});
|
|
30
|
+
const isSelected = (0, _slateReact.useSelected)();
|
|
30
31
|
const registerEventHandle = (0, _react.useCallback)(() => {
|
|
31
32
|
document.addEventListener('click', onHideInsertHoverMenu);
|
|
32
33
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
@@ -118,6 +119,8 @@ const FileLink = _ref => {
|
|
|
118
119
|
"data-id": element.id,
|
|
119
120
|
contentEditable: false,
|
|
120
121
|
className: (0, _classnames.default)('sdoc-file-link-render', {
|
|
122
|
+
'file-link-selected': isSelected
|
|
123
|
+
}, {
|
|
121
124
|
'sdoc-file-card-link': element.display_type === _constants2.FILE_LINK_TYPE.CARD_LINK
|
|
122
125
|
}),
|
|
123
126
|
onClick: onClickFile,
|
|
@@ -12,6 +12,7 @@ var _helpers = require("./helpers");
|
|
|
12
12
|
var _isHotkey = _interopRequireDefault(require("is-hotkey"));
|
|
13
13
|
var _keyboard = require("../../constants/keyboard");
|
|
14
14
|
var _utils = require("../../../../utils");
|
|
15
|
+
var _helpers2 = require("../list/helpers");
|
|
15
16
|
const isSelectionAtLineEnd = (editor, path) => {
|
|
16
17
|
const {
|
|
17
18
|
selection
|
|
@@ -77,14 +78,13 @@ const withHeader = editor => {
|
|
|
77
78
|
}
|
|
78
79
|
};
|
|
79
80
|
newEditor.insertFragment = data => {
|
|
80
|
-
var _data$, _data$$children;
|
|
81
81
|
const headerNode = (0, _core.getSelectedNodeByTypes)(editor, _constants.HEADERS);
|
|
82
82
|
const headerText = _slate.Node.string(headerNode || {
|
|
83
83
|
children: []
|
|
84
84
|
});
|
|
85
|
-
const
|
|
85
|
+
const onlyOneListItem = data.length === 1 && (0, _helpers2.isSingleListItem)(data[0]);
|
|
86
86
|
// Insert a list item when the header is empty, insert only the text
|
|
87
|
-
if (headerNode && headerText.length === 0 &&
|
|
87
|
+
if (headerNode && headerText.length === 0 && onlyOneListItem) {
|
|
88
88
|
const text = _slate.Node.string(data[0]);
|
|
89
89
|
insertText(text);
|
|
90
90
|
return;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.setListType = exports.isMenuDisabled = exports.getListType = exports.getBeforeText = void 0;
|
|
6
|
+
exports.setListType = exports.isSingleListItem = exports.isMenuDisabled = exports.getListType = exports.getBeforeText = void 0;
|
|
7
7
|
var _slate = require("@seafile/slate");
|
|
8
8
|
var _constants = require("../../constants");
|
|
9
9
|
var _transforms = require("./transforms");
|
|
@@ -100,4 +100,16 @@ const getBeforeText = editor => {
|
|
|
100
100
|
range
|
|
101
101
|
};
|
|
102
102
|
};
|
|
103
|
-
exports.getBeforeText = getBeforeText;
|
|
103
|
+
exports.getBeforeText = getBeforeText;
|
|
104
|
+
const isSingleListItem = node => {
|
|
105
|
+
// ordered_list/unordered_list -> list-item.children -> paragraph
|
|
106
|
+
// -> ordered_list/unordered_list
|
|
107
|
+
if (![_constants.ORDERED_LIST, _constants.UNORDERED_LIST].includes(node.type)) return false;
|
|
108
|
+
// list children
|
|
109
|
+
if (node.children.length !== 1) return false;
|
|
110
|
+
// listItem children
|
|
111
|
+
const listItem = node.children[0];
|
|
112
|
+
if (listItem.children.length !== 1) return false;
|
|
113
|
+
return true;
|
|
114
|
+
};
|
|
115
|
+
exports.isSingleListItem = isSingleListItem;
|
|
@@ -9,6 +9,7 @@ var _isHotkey = _interopRequireDefault(require("is-hotkey"));
|
|
|
9
9
|
var _slate = require("@seafile/slate");
|
|
10
10
|
var _core = require("../../core");
|
|
11
11
|
var _constants = require("../../constants");
|
|
12
|
+
var _helpers = require("../list/helpers");
|
|
12
13
|
const withParagraph = editor => {
|
|
13
14
|
const {
|
|
14
15
|
handleTab,
|
|
@@ -135,10 +136,9 @@ const withParagraph = editor => {
|
|
|
135
136
|
return onHotKeyDown && onHotKeyDown(event);
|
|
136
137
|
};
|
|
137
138
|
newEditor.insertFragment = data => {
|
|
138
|
-
var _data$, _data$$children;
|
|
139
139
|
const paragraphBlock = (0, _core.getSelectedNodeByType)(editor, _constants.PARAGRAPH);
|
|
140
|
-
const
|
|
141
|
-
if (paragraphBlock &&
|
|
140
|
+
const onlyOneListItem = data.length === 1 && (0, _helpers.isSingleListItem)(data[0]);
|
|
141
|
+
if (paragraphBlock && onlyOneListItem) {
|
|
142
142
|
const text = _slate.Node.string(data[0]);
|
|
143
143
|
editor.insertText(text);
|
|
144
144
|
return;
|
|
@@ -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.unwrapLinkNode = exports.sdocFileIcon = exports.removeTempInput = exports.removeShortCutSymbol = exports.onCopySdocLinkNode = exports.isTriggeredByShortcut = exports.isMenuDisabled = exports.insertTextWhenRemoveFileNameCollector = exports.insertTempInput = exports.insertSdocFileLink = exports.getUrl = exports.getType = exports.getNewFileListData = exports.getFileSearchInputEntry = exports.getBeforeText = exports.generateSdocFileNode = void 0;
|
|
7
|
+
exports.unwrapLinkNode = exports.sdocFileIcon = exports.removeTempInput = exports.removeShortCutSymbol = exports.onCopySdocLinkNode = exports.isTriggeredByShortcut = exports.isMenuDisabled = exports.insertTextWhenRemoveFileNameCollector = exports.insertTempInput = exports.insertSdocFileLink = exports.getUrl = exports.getType = exports.getSdocLinkEntry = exports.getNewFileListData = exports.getFileSearchInputEntry = exports.getBeforeText = exports.generateSdocFileNode = void 0;
|
|
8
8
|
var _slateReact = require("@seafile/slate-react");
|
|
9
9
|
var _slate = require("@seafile/slate");
|
|
10
10
|
var _slugid = _interopRequireDefault(require("slugid"));
|
|
@@ -278,4 +278,14 @@ const sdocFileIcon = () => {
|
|
|
278
278
|
const server = _context.default.getSetting('serviceUrl');
|
|
279
279
|
return `${server}/media/img/file/256/sdoc.png`;
|
|
280
280
|
};
|
|
281
|
-
exports.sdocFileIcon = sdocFileIcon;
|
|
281
|
+
exports.sdocFileIcon = sdocFileIcon;
|
|
282
|
+
const getSdocLinkEntry = function (editor) {
|
|
283
|
+
let at = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : editor.selection;
|
|
284
|
+
const aboveNodeEntry = _slate.Editor.above(editor, {
|
|
285
|
+
match: n => n.type === _constants.SDOC_LINK,
|
|
286
|
+
mode: 'highest',
|
|
287
|
+
at
|
|
288
|
+
});
|
|
289
|
+
return aboveNodeEntry;
|
|
290
|
+
};
|
|
291
|
+
exports.getSdocLinkEntry = getSdocLinkEntry;
|
|
@@ -80,36 +80,19 @@ const withSdocLink = editor => {
|
|
|
80
80
|
return onCompositionStart && onCompositionStart(event);
|
|
81
81
|
};
|
|
82
82
|
newEditor.onHotKeyDown = e => {
|
|
83
|
-
const
|
|
84
|
-
|
|
85
|
-
} = newEditor;
|
|
86
|
-
const isCollapsed = _slate.Range.isCollapsed(selection);
|
|
87
|
-
if (isCollapsed) {
|
|
83
|
+
const sdocLinkEntry = (0, _helpers.getSdocLinkEntry)(editor);
|
|
84
|
+
if (sdocLinkEntry) {
|
|
88
85
|
if (e.key === 'ArrowLeft') {
|
|
89
|
-
const
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
if ((preNode === null || preNode === void 0 ? void 0 : preNode.type) === _constants.SDOC_LINK) {
|
|
94
|
-
const beforePointSdocLink = _slate.Editor.before(newEditor, prePath);
|
|
95
|
-
_slate.Transforms.select(newEditor, beforePointSdocLink);
|
|
96
|
-
e.preventDefault();
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
86
|
+
const beforePointSdocLink = _slate.Editor.before(newEditor, sdocLinkEntry[1]);
|
|
87
|
+
_slate.Transforms.select(newEditor, beforePointSdocLink);
|
|
88
|
+
e.preventDefault();
|
|
89
|
+
return;
|
|
99
90
|
}
|
|
100
91
|
if (e.key === 'ArrowRight') {
|
|
101
|
-
const
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
});
|
|
106
|
-
if ((nextNode === null || nextNode === void 0 ? void 0 : nextNode.type) === _constants.SDOC_LINK) {
|
|
107
|
-
const afterPointSdocLink = _slate.Editor.after(newEditor, nextPath);
|
|
108
|
-
_slate.Transforms.select(newEditor, afterPointSdocLink);
|
|
109
|
-
e.preventDefault();
|
|
110
|
-
return;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
92
|
+
const afterPointSdocLink = _slate.Editor.after(newEditor, sdocLinkEntry[1]);
|
|
93
|
+
_slate.Transforms.select(newEditor, afterPointSdocLink);
|
|
94
|
+
e.preventDefault();
|
|
95
|
+
return;
|
|
113
96
|
}
|
|
114
97
|
}
|
|
115
98
|
return onHotKeyDown && onHotKeyDown(e);
|
|
@@ -35,6 +35,7 @@ const SdocFileLink = _ref => {
|
|
|
35
35
|
const [isShowInsertHoverMenu, setIsShowInsertHoverMenu] = (0, _react.useState)(false);
|
|
36
36
|
const [menuPosition, setMenuPosition] = (0, _react.useState)({});
|
|
37
37
|
const readOnly = (0, _slateReact.useReadOnly)();
|
|
38
|
+
const isSelected = (0, _slateReact.useSelected)();
|
|
38
39
|
const registerEventHandle = (0, _react.useCallback)(() => {
|
|
39
40
|
document.addEventListener('click', onHideInsertHoverMenu);
|
|
40
41
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
@@ -136,7 +137,7 @@ const SdocFileLink = _ref => {
|
|
|
136
137
|
return /*#__PURE__*/_react.default.createElement("span", Object.assign({}, attributes, {
|
|
137
138
|
"data-id": element.id,
|
|
138
139
|
contentEditable: false,
|
|
139
|
-
className: `sdoc-file-render ${element.display_type === _constants2.SDOC_LINK_TYPE.CARD_LINK ? 'sdoc-file-card-link' : ''}`,
|
|
140
|
+
className: `sdoc-file-render ${isSelected ? 'sdoc-file-link-selected' : ''} ${element.display_type === _constants2.SDOC_LINK_TYPE.CARD_LINK ? 'sdoc-file-card-link' : ''}`,
|
|
140
141
|
onClick: onClickFile,
|
|
141
142
|
style: element.display_type === _constants2.SDOC_LINK_TYPE.CARD_LINK ? style : {}
|
|
142
143
|
}), /*#__PURE__*/_react.default.createElement("span", {
|
|
@@ -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.onMouseEnter = exports.onDrop = exports.onDragOver = exports.onDragLeave = void 0;
|
|
7
|
+
exports.onMouseEnter = exports.onDrop = exports.onDragOver = exports.onDragLeave = exports.DRAG_SDOC_EDITOR_ELEMENT = void 0;
|
|
8
8
|
var _eventBus = _interopRequireDefault(require("../../../utils/event-bus"));
|
|
9
9
|
var _constants = require("../../../constants");
|
|
10
10
|
var _constants2 = require("../../constants");
|
|
@@ -36,4 +36,5 @@ const onDrop = event => {
|
|
|
36
36
|
const eventBus = _eventBus.default.getInstance();
|
|
37
37
|
eventBus.dispatch(_constants.INTERNAL_EVENT.ON_DRAG_DROP_BLOCK, event);
|
|
38
38
|
};
|
|
39
|
-
exports.onDrop = onDrop;
|
|
39
|
+
exports.onDrop = onDrop;
|
|
40
|
+
const DRAG_SDOC_EDITOR_ELEMENT = exports.DRAG_SDOC_EDITOR_ELEMENT = 'drag_sdoc_editor_element';
|
|
@@ -19,6 +19,7 @@ var _helpers2 = require("../../plugins/image/helpers");
|
|
|
19
19
|
var _constants = require("../../../constants");
|
|
20
20
|
var _constants2 = require("../../constants");
|
|
21
21
|
var _helper = require("../../plugins/callout/helper");
|
|
22
|
+
var _event = require("./event");
|
|
22
23
|
require("./index.css");
|
|
23
24
|
let sourceElement = null;
|
|
24
25
|
let targetElement = null;
|
|
@@ -122,6 +123,7 @@ const SideToolbar = () => {
|
|
|
122
123
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
123
124
|
}, [editor, isShowSideMenu, scrollRef, sidePosition.top]);
|
|
124
125
|
const onMouseDown = (0, _react.useCallback)(e => {
|
|
126
|
+
e.stopPropagation();
|
|
125
127
|
const domSelection = window.getSelection();
|
|
126
128
|
if (domSelection.type !== 'Range' || !editor.selection || _slate.Path.equals(editor.selection.focus.path, editor.selection.anchor.path)) {
|
|
127
129
|
draggedPreviewContainer.current = null;
|
|
@@ -193,6 +195,7 @@ const SideToolbar = () => {
|
|
|
193
195
|
});
|
|
194
196
|
}, [editor, isShowSideMenu, slateNode]);
|
|
195
197
|
const dragStart = (0, _react.useCallback)(event => {
|
|
198
|
+
event.stopPropagation();
|
|
196
199
|
// Create the preview container when dragging more than one listNodes
|
|
197
200
|
const noDrag = _slate.Path.equals(editor.selection.focus.path, editor.selection.anchor.path);
|
|
198
201
|
if (showSelectedNodesRef.current && showSelectedNodesRef.current.length > 1 && !noDrag) {
|
|
@@ -207,6 +210,7 @@ const SideToolbar = () => {
|
|
|
207
210
|
draggedPreviewContainer.current.appendChild(clonedNode);
|
|
208
211
|
});
|
|
209
212
|
event.dataTransfer.setDragImage(draggedPreviewContainer.current, 0, 0);
|
|
213
|
+
event.dataTransfer.setData(_event.DRAG_SDOC_EDITOR_ELEMENT, true);
|
|
210
214
|
draggedSourcePaths.current = showSelectedNodesRef.current.map(_ref4 => {
|
|
211
215
|
let [, path] = _ref4;
|
|
212
216
|
return path;
|
|
@@ -228,8 +232,11 @@ const SideToolbar = () => {
|
|
|
228
232
|
sourceElement = _slateReact.ReactEditor.toDOMNode(editor, nodeEntry[0]);
|
|
229
233
|
}
|
|
230
234
|
event.dataTransfer.setDragImage(sourceElement, 0, 0);
|
|
235
|
+
event.dataTransfer.setData(_event.DRAG_SDOC_EDITOR_ELEMENT, true);
|
|
231
236
|
}, [editor, slateNode]);
|
|
232
237
|
const dragOver = (0, _react.useCallback)(event => {
|
|
238
|
+
const dragTypes = event.dataTransfer.types;
|
|
239
|
+
if (!dragTypes.includes(_event.DRAG_SDOC_EDITOR_ELEMENT)) return;
|
|
233
240
|
const overElement = event.currentTarget;
|
|
234
241
|
if (!overElement.classList.contains('sdoc-draging')) {
|
|
235
242
|
overElement.classList.add('sdoc-draging');
|
|
@@ -240,11 +247,14 @@ const SideToolbar = () => {
|
|
|
240
247
|
leaveElement.classList.remove('sdoc-draging');
|
|
241
248
|
}, []);
|
|
242
249
|
const drop = (0, _react.useCallback)(event => {
|
|
243
|
-
const dragTypes = event.dataTransfer.types;
|
|
244
250
|
targetElement = event.currentTarget;
|
|
245
251
|
targetElement.classList.remove('sdoc-draging');
|
|
252
|
+
const dragTypes = event.dataTransfer.types;
|
|
253
|
+
if (!dragTypes.includes(_event.DRAG_SDOC_EDITOR_ELEMENT)) return;
|
|
254
|
+
|
|
246
255
|
// Prevent dragging table data to the editor
|
|
247
256
|
if (dragTypes.includes(_constants2.TABLE_DRAG_KEY)) return;
|
|
257
|
+
|
|
248
258
|
// Drag local image files to sdoc
|
|
249
259
|
if (event.dataTransfer.files.length > 0) {
|
|
250
260
|
const [, targetPath] = (0, _helpers.getNodeEntry)(editor, targetElement);
|
|
@@ -302,6 +312,7 @@ const SideToolbar = () => {
|
|
|
302
312
|
draggedSourcePaths.current = null;
|
|
303
313
|
showSelectedNodesRef.current = null;
|
|
304
314
|
draggedPreviewContainer.current = null;
|
|
315
|
+
event.dataTransfer.clearData();
|
|
305
316
|
}
|
|
306
317
|
}
|
|
307
318
|
const [sourceNode, sourcePath] = (0, _helpers.getNodeEntry)(editor, sourceElement);
|