@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.
@@ -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 isAtEnd = currentLineEntry[1].slice(-1)[0] === quoteBlockEntry[0].children.length - 1;
34
- if (isAtEnd) {
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 && (0, _core.isBlockAboveEmpty)(newEditor)) {
74
- const emptyParagraph = (0, _core.generateEmptyElement)(_constants.PARAGRAPH);
75
- _slate.Transforms.removeNodes(editor, {
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
- font-size: 24px;
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 isSingleListItem = data.length === 1 && ((_data$ = data[0]) === null || _data$ === void 0 ? void 0 : (_data$$children = _data$.children) === null || _data$$children === void 0 ? void 0 : _data$$children.length) === 1 && _constants.LIST_TYPE_ARRAY.includes(data[0].type);
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 && isSingleListItem) {
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 isSingleListItem = data.length === 1 && ((_data$ = data[0]) === null || _data$ === void 0 ? void 0 : (_data$$children = _data$.children) === null || _data$$children === void 0 ? void 0 : _data$$children.length) === 1 && _constants.LIST_TYPE_ARRAY.includes(data[0].type);
141
- if (paragraphBlock && isSingleListItem) {
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
- selection
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 prePoint = _slate.Editor.before(newEditor, selection);
90
- const [preNode, prePath] = _slate.Editor.node(newEditor, prePoint.path, {
91
- depth: 2
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 nextPoint = _slate.Editor.after(newEditor, selection);
102
- if (nextPoint) {
103
- const [nextNode, nextPath] = _slate.Editor.node(newEditor, nextPoint.path, {
104
- depth: 2
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);
@@ -1,5 +1,6 @@
1
+ .sdoc-file-link-selected,
1
2
  .sdoc-file-render:hover {
2
- background-color: #e5e5e5;
3
+ background-color: #e5e5e5 !important;
3
4
  padding: 3px 0;
4
5
  }
5
6
 
@@ -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);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/sdoc-editor",
3
- "version": "1.0.194",
3
+ "version": "1.0.196",
4
4
  "private": false,
5
5
  "description": "This is a sdoc editor",
6
6
  "main": "dist/index.js",