@seafile/sdoc-editor 3.0.80 → 3.0.82

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.
@@ -25,10 +25,38 @@
25
25
  left: -60px;
26
26
  }
27
27
 
28
- .sdoc-editor__article .sdoc-draging {
28
+ .sdoc-editor__article .sdoc-dragging {
29
29
  border-bottom: 2px solid rgba(35, 131, 226);
30
30
  }
31
31
 
32
+ .sdoc-editor__article .sdoc-dragging-right,
33
+ .sdoc-editor__article .sdoc-dragging-left {
34
+ position: relative;
35
+ }
36
+
37
+ .sdoc-editor__article .sdoc-dragging-left::before {
38
+ content: '';
39
+ position: absolute;
40
+ top: 0;
41
+ bottom: 0;
42
+ left: -5px;
43
+ width: 2px;
44
+ background: rgba(35, 131, 226);
45
+ pointer-events: none;
46
+ }
47
+
48
+ .sdoc-editor__article .sdoc-dragging-right::before {
49
+ content: '';
50
+ position: absolute;
51
+ top: 0;
52
+ bottom: 0;
53
+ right: -5px;
54
+ left: unset;
55
+ width: 2px;
56
+ background: rgba(35, 131, 226);
57
+ pointer-events: none;
58
+ }
59
+
32
60
  .sdoc-editor__article .sdoc-code-block-pre {
33
61
  font-size: 10pt;
34
62
  }
@@ -45,8 +45,11 @@
45
45
  cursor: pointer;
46
46
  }
47
47
 
48
- .sdoc-editor__article .list-container .sdoc-li-content {
49
- display: inline-grid;
48
+ /* only for firefox browser */
49
+ @-moz-document url-prefix() {
50
+ .sdoc-editor__article .list-container .sdoc-li-content {
51
+ display: inline-grid;
52
+ }
50
53
  }
51
54
 
52
55
  .sdoc-editor__article .list-container .sdoc-li-prefix {
@@ -558,4 +558,4 @@ var FILEEXT_TYPE_MAP = exports.FILEEXT_TYPE_MAP = {
558
558
  };
559
559
  var SUPPORTED_SIDE_OPERATION_TYPE = exports.SUPPORTED_SIDE_OPERATION_TYPE = [_elementType.PARAGRAPH, _elementType.SUBTITLE, _elementType.HEADER1, _elementType.HEADER2, _elementType.HEADER3, _elementType.HEADER4, _elementType.HEADER5, _elementType.HEADER6, _elementType.CHECK_LIST_ITEM, _elementType.CODE_BLOCK, _elementType.TABLE, _elementType.BLOCKQUOTE, _elementType.CALL_OUT, _elementType.IMAGE_BLOCK, _elementType.VIDEO, _elementType.WHITEBOARD, _elementType.FORMULA];
560
560
  var MOUSE_ENTER_EVENT_DISABLED_MAP = exports.MOUSE_ENTER_EVENT_DISABLED_MAP = (_MOUSE_ENTER_EVENT_DI = {}, (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])(_MOUSE_ENTER_EVENT_DI, _elementType.PARAGRAPH, [_elementType.CALL_OUT]), _elementType.TITLE, [_elementType.CALL_OUT]), _elementType.SUBTITLE, [_elementType.CALL_OUT]), _elementType.CHECK_LIST_ITEM, [_elementType.CALL_OUT]), _elementType.ORDERED_LIST, [_elementType.CALL_OUT]), _elementType.UNORDERED_LIST, [_elementType.CALL_OUT]), _elementType.LIST_ITEM, [_elementType.CALL_OUT]), _elementType.BLOCKQUOTE, [_elementType.CALL_OUT]), _elementType.HEADER1, [_elementType.CALL_OUT]), _elementType.HEADER2, [_elementType.CALL_OUT]), (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])(_MOUSE_ENTER_EVENT_DI, _elementType.HEADER3, [_elementType.CALL_OUT]), _elementType.HEADER4, [_elementType.CALL_OUT]), _elementType.HEADER5, [_elementType.CALL_OUT]), _elementType.HEADER6, [_elementType.CALL_OUT]), _elementType.CALL_OUT, [_elementType.CALL_OUT]));
561
- var ROOT_ELEMENT_TYPES = exports.ROOT_ELEMENT_TYPES = [_elementType.PARAGRAPH, _elementType.TITLE, _elementType.SUBTITLE, _elementType.CHECK_LIST_ITEM, _elementType.ORDERED_LIST, _elementType.UNORDERED_LIST, _elementType.BLOCKQUOTE, _elementType.HEADER1, _elementType.HEADER2, _elementType.HEADER3, _elementType.HEADER4, _elementType.HEADER5, _elementType.HEADER6, _elementType.CALL_OUT, _elementType.TABLE, _elementType.CODE_BLOCK, _elementType.IMAGE_BLOCK, _elementType.VIDEO, _elementType.WHITEBOARD, _elementType.FORMULA];
561
+ var ROOT_ELEMENT_TYPES = exports.ROOT_ELEMENT_TYPES = [_elementType.PARAGRAPH, _elementType.TITLE, _elementType.SUBTITLE, _elementType.CHECK_LIST_ITEM, _elementType.ORDERED_LIST, _elementType.UNORDERED_LIST, _elementType.BLOCKQUOTE, _elementType.HEADER1, _elementType.HEADER2, _elementType.HEADER3, _elementType.HEADER4, _elementType.HEADER5, _elementType.HEADER6, _elementType.CALL_OUT, _elementType.TABLE, _elementType.CODE_BLOCK, _elementType.IMAGE_BLOCK, _elementType.VIDEO, _elementType.WHITEBOARD, _elementType.FORMULA, _elementType.MULTI_COLUMN];
@@ -138,7 +138,7 @@ var renderCallout = function renderCallout(_ref, editor) {
138
138
  }), /*#__PURE__*/_react["default"].createElement("div", {
139
139
  onClick: handleClick,
140
140
  ref: calloutRef,
141
- className: "".concat(attributes.className, " sdoc-callout-container"),
141
+ className: "sdoc-callout-container",
142
142
  style: containerStyle
143
143
  }, element.callout_icon && /*#__PURE__*/_react["default"].createElement("div", {
144
144
  className: "callout-icon"
@@ -56,7 +56,7 @@ var CheckListItem = /*#__PURE__*/function (_React$PureComponent) {
56
56
  return /*#__PURE__*/_react["default"].createElement("div", Object.assign({
57
57
  "data-id": id
58
58
  }, attributes, {
59
- className: "sdoc-checkbox-container ".concat(attributes.className),
59
+ className: "sdoc-checkbox-container",
60
60
  style: style
61
61
  }), /*#__PURE__*/_react["default"].createElement("div", {
62
62
  className: "sdoc-checkbox-input-wrapper"
@@ -38,7 +38,7 @@ var renderSubtitle = exports.renderSubtitle = function renderSubtitle(props, edi
38
38
  return /*#__PURE__*/_react["default"].createElement("div", Object.assign({
39
39
  "data-id": element.id
40
40
  }, attributes, {
41
- className: "sdoc-header-subtitle ".concat(attributes.className),
41
+ className: "sdoc-header-subtitle",
42
42
  style: (0, _objectSpread2["default"])({}, style)
43
43
  }), children);
44
44
  };
@@ -63,7 +63,7 @@ var renderHeader = exports.renderHeader = function renderHeader(props, editor) {
63
63
  "data-id": element.id,
64
64
  id: element.id // used for click left outline item, page scroll this element
65
65
  }, attributes, {
66
- className: "sdoc-header-".concat(level, " ").concat(attributes.className),
66
+ className: "sdoc-header-".concat(level),
67
67
  style: (0, _objectSpread2["default"])({
68
68
  position: isShowPlaceHolder ? 'relative' : ''
69
69
  }, style)
@@ -115,11 +115,11 @@ var Link = /*#__PURE__*/function (_React$Component) {
115
115
  (0, _helpers.unWrapLinkNode)(editor);
116
116
  });
117
117
  (0, _defineProperty2["default"])(_this, "onOpenLink", function (event) {
118
+ event.preventDefault();
118
119
  var _this$props = _this.props,
119
120
  element = _this$props.element,
120
121
  t = _this$props.t;
121
122
  if (!(0, _isUrl["default"])(element.href)) {
122
- event.preventDefault();
123
123
  _toast["default"].danger(t('The_link_is_invalid'));
124
124
  return;
125
125
  }
@@ -16,9 +16,10 @@ var renderList = exports.renderList = function renderList(props, editor) {
16
16
  node = props.element;
17
17
  var Tag = node.type === _constants.ORDERED_LIST ? 'ol' : 'ul';
18
18
  return /*#__PURE__*/_react["default"].createElement(Tag, Object.assign({
19
- "data-id": node.id,
19
+ "data-id": node.id
20
+ }, attributes, {
20
21
  className: "list-container d-flex flex-column"
21
- }, attributes), children);
22
+ }), children);
22
23
  };
23
24
  var renderListItem = exports.renderListItem = function renderListItem(props, editor) {
24
25
  var attributes = props.attributes,
@@ -4,10 +4,11 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.updateColumnWidthOnDeletion = exports.updateColumnWidth = exports.insertMultiColumn = exports.hasImageInColumn = exports.handleInsertMultiColumn = exports.getCurrentPageWidth = exports.generateEmptyMultiColumn = void 0;
7
+ exports.updateColumnWidthOnDeletion = exports.updateColumnWidth = exports.insertMultiColumn = exports.hasImageInColumn = exports.handleInsertMultiColumn = exports.getCurrentPageWidth = exports.generateEmptyMultiColumn = exports.generateEmptyColumn = exports.addMiddleColumnInMultiColumn = exports.addLastColumnInMultiColumn = void 0;
8
8
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
9
9
  var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createForOfIteratorHelper"));
10
10
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
11
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/toConsumableArray"));
11
12
  var _slate = require("@seafile/slate");
12
13
  var _slateReact = require("@seafile/slate-react");
13
14
  var _slugid = _interopRequireDefault(require("slugid"));
@@ -83,6 +84,86 @@ var generateEmptyMultiColumn = exports.generateEmptyMultiColumn = function gener
83
84
  }
84
85
  };
85
86
  };
87
+ var generateEmptyColumn = exports.generateEmptyColumn = function generateEmptyColumn(editor, columnNum) {
88
+ var currentPageWidth = getCurrentPageWidth(editor) + _constants3.LAST_COLUMN_MARGIN_RIGHT_WIDTH;
89
+ var initialColumnWidth = Math.max(_constants3.COLUMN_MIN_WIDTH, parseInt(currentPageWidth / columnNum));
90
+ var emptyColumn = {
91
+ id: _slugid["default"].nice(),
92
+ type: _constants2.ELEMENT_TYPE.COLUMN,
93
+ width: initialColumnWidth,
94
+ children: [{
95
+ id: _slugid["default"].nice(),
96
+ type: _constants2.PARAGRAPH,
97
+ children: [{
98
+ text: '',
99
+ id: _slugid["default"].nice()
100
+ }]
101
+ }]
102
+ };
103
+ return emptyColumn;
104
+ };
105
+ var addLastColumnInMultiColumn = exports.addLastColumnInMultiColumn = function addLastColumnInMultiColumn(editor, topTargetNode, targetPath) {
106
+ var columnsNum = topTargetNode.children.length + 1;
107
+ var currentPageWidth = getCurrentPageWidth(editor) + _constants3.LAST_COLUMN_MARGIN_RIGHT_WIDTH;
108
+ var initialColumnWidth = Math.max(_constants3.COLUMN_MIN_WIDTH, parseInt(currentPageWidth / columnsNum));
109
+ var newEmptyColumn = generateEmptyColumn(editor, columnsNum);
110
+
111
+ // Insert last column
112
+ var middleColumn = [].concat((0, _toConsumableArray2["default"])(topTargetNode.column), [{
113
+ key: newEmptyColumn.id,
114
+ width: initialColumnWidth
115
+ }]);
116
+
117
+ // Recalculate width of every left column
118
+ var newColumn = middleColumn.map(function (column, index) {
119
+ return (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, column), {}, {
120
+ left: index * initialColumnWidth,
121
+ width: initialColumnWidth
122
+ });
123
+ });
124
+ _slate.Transforms.setNodes(editor, {
125
+ column: newColumn,
126
+ style: {
127
+ gridTemplateColumns: "repeat(".concat(columnsNum, ", ").concat(initialColumnWidth, "px)")
128
+ }
129
+ }, {
130
+ at: [targetPath[0]]
131
+ });
132
+ _slate.Transforms.insertNodes(editor, newEmptyColumn, {
133
+ at: [targetPath[0], targetPath[1] + 1]
134
+ });
135
+ };
136
+ var addMiddleColumnInMultiColumn = exports.addMiddleColumnInMultiColumn = function addMiddleColumnInMultiColumn(editor, topTargetNode, targetPath) {
137
+ var columnNum = topTargetNode.children.length + 1;
138
+ var currentPageWidth = getCurrentPageWidth(editor) + _constants3.LAST_COLUMN_MARGIN_RIGHT_WIDTH;
139
+ var initialColumnWidth = Math.max(_constants3.COLUMN_MIN_WIDTH, parseInt(currentPageWidth / columnNum));
140
+ var insertedEmptyColumn = generateEmptyColumn(editor, columnNum);
141
+
142
+ // Insert middle column
143
+ var insertIndex = targetPath[1];
144
+ var middleColumn = [].concat((0, _toConsumableArray2["default"])(topTargetNode.column.slice(0, insertIndex)), [{
145
+ key: insertedEmptyColumn.id,
146
+ width: initialColumnWidth
147
+ }], (0, _toConsumableArray2["default"])(topTargetNode.column.slice(insertIndex)));
148
+ // Recalculate width of every left column
149
+ var newColumn = middleColumn.map(function (column, index) {
150
+ return (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, column), {}, {
151
+ left: index * initialColumnWidth,
152
+ width: initialColumnWidth
153
+ });
154
+ });
155
+ _slate.Transforms.setNodes(editor, {
156
+ column: newColumn,
157
+ style: {
158
+ gridTemplateColumns: "repeat(".concat(newColumn.length, ", ").concat(initialColumnWidth, "px)")
159
+ }
160
+ }, {
161
+ at: [targetPath[0]]
162
+ });
163
+ _slate.Transforms.insertNodes(editor, insertedEmptyColumn, {
164
+ at: [targetPath[0], targetPath[1]]
165
+ });
166
+ };
86
167
  var updateColumnWidth = exports.updateColumnWidth = function updateColumnWidth(editor, element, column, newPath) {
87
168
  var path = (0, _core.findPath)(editor, element, newPath);
88
169
  var gridTemplateColumns = column.map(function (column) {
@@ -154,7 +235,7 @@ var updateColumnWidthOnDeletion = exports.updateColumnWidthOnDeletion = function
154
235
  var remainingColumn = column.filter(function (_, index) {
155
236
  return index !== targetColumnIndex;
156
237
  });
157
- var currentPageWidth = getCurrentPageWidth(editor);
238
+ var currentPageWidth = getCurrentPageWidth(editor) + _constants3.LAST_COLUMN_MARGIN_RIGHT_WIDTH;
158
239
  var columnWidth = Math.max(_constants3.COLUMN_MIN_WIDTH, parseInt(currentPageWidth / remainingColumn.length));
159
240
 
160
241
  // Recalculate width of every left column
@@ -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.setSelection = exports.onWrapMultiListItemToNonListTypeTarget = exports.onWrapMultiListItem = exports.onWrapListItemFromMultiColumn = exports.onWrapListItem = exports.onSetNodeType = exports.onDeleteNode = exports.onCopyNode = exports.normalizeCopyData = exports.isNotSupportTransform = exports.isMultiColumn = exports.isListItem = exports.isList = exports.isInMultiColumnNode = exports.isBlockquote = exports.insertEmptyListNodeAtTarget = exports.insertElement = exports.getTransformMenusConfig = exports.getTopValue = exports.getSearchedOperations = exports.getNodeEntry = exports.getListNodeFromMultiColumn = exports.getListNode = exports.deleteNodesFromBack = exports.createDragPreviewContainer = void 0;
7
+ exports.wrapIntoMultiColumn = exports.setSelection = exports.onWrapMultiListItemToNonListTypeTarget = exports.onWrapMultiListItem = exports.onWrapListItemFromMultiColumn = exports.onWrapListItem = exports.onSetNodeType = exports.onDeleteNode = exports.onCopyNode = exports.normalizeCopyData = exports.isNotSupportTransform = exports.isMultiColumn = exports.isListItem = exports.isList = exports.isInMultiColumnNode = exports.isBlockquote = exports.insertEmptyListNodeAtTarget = exports.insertElement = exports.getTransformMenusConfig = exports.getTopValue = exports.getSearchedOperations = exports.getNodeEntry = exports.getListNodeFromMultiColumn = exports.getListNode = exports.deleteNodesFromBack = exports.createDragPreviewContainer = exports.clearDragClass = void 0;
8
8
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/toConsumableArray"));
9
9
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
10
10
  var _slate = require("@seafile/slate");
@@ -272,6 +272,7 @@ var insertElement = exports.insertElement = function insertElement(editor, type,
272
272
  }
273
273
  };
274
274
  var getNodeEntry = exports.getNodeEntry = function getNodeEntry(editor, el) {
275
+ if (!el) return [];
275
276
  var node = _slateReact.ReactEditor.toSlateNode(editor, el);
276
277
  var path = _slateReact.ReactEditor.findPath(editor, node);
277
278
  if (isList(editor, path)) {
@@ -501,4 +502,26 @@ var normalizeCopyData = exports.normalizeCopyData = function normalizeCopyData(e
501
502
  var newData = (0, _helpers.replacePastedDataId)(parsed);
502
503
  var normalizeNewData = (0, _documentUtils.normalizeCopyNodes)(editor, newData);
503
504
  return normalizeNewData;
505
+ };
506
+ var clearDragClass = exports.clearDragClass = function clearDragClass(el) {
507
+ if (!el) return;
508
+ el.classList.remove('sdoc-dragging-right', 'sdoc-dragging-left', 'sdoc-dragging');
509
+ };
510
+ var wrapIntoMultiColumn = exports.wrapIntoMultiColumn = function wrapIntoMultiColumn(editor, leftNode, rightNode, targetPath) {
511
+ var emptyMultiColumnNode = (0, _helper2.generateEmptyMultiColumn)(editor, _constants2.TWO_COLUMN);
512
+ _slate.Transforms.insertNodes(editor, emptyMultiColumnNode, {
513
+ at: [targetPath[0]]
514
+ });
515
+ _slate.Transforms.insertNodes(editor, leftNode, {
516
+ at: [targetPath[0], 0, 0]
517
+ });
518
+ _slate.Transforms.insertNodes(editor, rightNode, {
519
+ at: [targetPath[0], 1, 0]
520
+ });
521
+ _slate.Transforms.removeNodes(editor, {
522
+ at: [targetPath[0], 0, 1]
523
+ });
524
+ _slate.Transforms.removeNodes(editor, {
525
+ at: [targetPath[0], 1, 1]
526
+ });
504
527
  };
@@ -65,6 +65,7 @@ var SideToolbar = function SideToolbar() {
65
65
  var selectedNodesRef = (0, _react.useRef)(null);
66
66
  var showSelectedNodesRef = (0, _react.useRef)(null);
67
67
  var draggedPreviewContainer = (0, _react.useRef)(null);
68
+ var activeDragElRef = (0, _react.useRef)(null);
68
69
  var onReset = (0, _react.useCallback)(function () {
69
70
  setShowSideMenu(false);
70
71
  setMenuPosition({});
@@ -300,18 +301,18 @@ var SideToolbar = function SideToolbar() {
300
301
  var dragTypes = event.dataTransfer.types;
301
302
  if (!dragTypes.includes(_event.DRAG_SDOC_EDITOR_ELEMENT)) return;
302
303
  var overElement = event.currentTarget;
303
- if (!overElement.classList.contains('sdoc-draging')) {
304
- overElement.classList.add('sdoc-draging');
304
+ if (!overElement.classList.contains('sdoc-dragging')) {
305
+ overElement.classList.add('sdoc-dragging');
305
306
  }
306
307
  }, []);
307
308
  var dragLeave = (0, _react.useCallback)(function (event) {
308
309
  var leaveElement = event.currentTarget;
309
- leaveElement.classList.remove('sdoc-draging');
310
+ leaveElement.classList.remove('sdoc-dragging');
310
311
  }, []);
311
312
  var drop = (0, _react.useCallback)(function (event) {
312
313
  var _parentNode$children$;
313
314
  targetElement = event.currentTarget;
314
- targetElement.classList.remove('sdoc-draging');
315
+ targetElement.classList.remove('sdoc-dragging');
315
316
  var dragTypes = event.dataTransfer.types;
316
317
  if (!dragTypes.includes(_event.DRAG_SDOC_EDITOR_ELEMENT) && dragTypes[0] !== 'Files') return;
317
318
 
@@ -343,7 +344,7 @@ var SideToolbar = function SideToolbar() {
343
344
  var _parentNode = _slate.Node.parent(editor, targetPath);
344
345
  var topNode = _slate.Node.get(editor, [targetPath[0]]);
345
346
 
346
- // Drag into list nods within blockquote, callout or multi_column block node
347
+ // Drag into list nods in blockquote, callout or multi_column block node
347
348
  if (topNode.type === _constants2.CALL_OUT && _parentNode.type === _constants2.LIST_ITEM || topNode.type === _constants2.MULTI_COLUMN && _parentNode.type === _constants2.LIST_ITEM) {
348
349
  currentTargetPath = _slate.Path.next(targetPath.slice(0, -1));
349
350
  (0, _helpers2.onWrapMultiListItem)(editor, currentTargetPath, selectedNodesRef.current);
@@ -604,6 +605,201 @@ var SideToolbar = function SideToolbar() {
604
605
  var onMouseLeave = (0, _react.useCallback)(function () {
605
606
  setIsEnterMoreVertical(false);
606
607
  }, []);
608
+ var handleDragover = (0, _react.useCallback)(function (event) {
609
+ var _target, _target2, _target3, _target4, _target5;
610
+ event.preventDefault();
611
+ var _getNodeEntry7 = (0, _helpers2.getNodeEntry)(editor, sourceElement),
612
+ _getNodeEntry8 = (0, _slicedToArray2["default"])(_getNodeEntry7, 2),
613
+ sourceNode = _getNodeEntry8[0],
614
+ sourcePath = _getNodeEntry8[1];
615
+ if (!sourceNode || !sourcePath) return;
616
+
617
+ // Not support node type in multi column
618
+ if ([_constants2.TABLE, _constants2.VIDEO, _constants2.CODE_BLOCK, _constants2.WHITEBOARD, _constants2.FILE_VIEW, _constants2.FORMULA].includes(sourceNode.type)) return;
619
+ // Return if source node is from multi column
620
+ var topNode = _slate.Node.get(editor, [sourcePath[0]]);
621
+ if ([_constants2.MULTI_COLUMN].includes(topNode.type)) return;
622
+
623
+ // Cursor position
624
+ var x = event.clientX;
625
+ var y = event.clientY;
626
+ var editorContainer = event.currentTarget;
627
+ var containerRect = editorContainer.getBoundingClientRect();
628
+
629
+ // Current visible area of editor container
630
+ var visibleTop = Math.max(containerRect.top, 0);
631
+ var visibleBottom = Math.min(containerRect.bottom, window.innerHeight);
632
+ var target = null;
633
+
634
+ // Get target element where cursor is close to
635
+ var _iterator2 = (0, _createForOfIteratorHelper2["default"])(editorContainer.querySelectorAll('[data-root="true"]')),
636
+ _step2;
637
+ try {
638
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
639
+ var el = _step2.value;
640
+ var rect = el.getBoundingClientRect();
641
+ if (rect.bottom < visibleTop) continue;
642
+ if (rect.top > visibleBottom) break;
643
+ if (y > rect.top && y < rect.bottom) {
644
+ target = {
645
+ el: el,
646
+ rect: rect
647
+ };
648
+ break;
649
+ }
650
+ }
651
+ } catch (err) {
652
+ _iterator2.e(err);
653
+ } finally {
654
+ _iterator2.f();
655
+ }
656
+ if (!((_target = target) !== null && _target !== void 0 && _target.el)) return;
657
+ var prevEl = activeDragElRef.current;
658
+ if (prevEl && prevEl !== target.el) {
659
+ (0, _helpers2.clearDragClass)(prevEl);
660
+ }
661
+ if (((_target2 = target) === null || _target2 === void 0 ? void 0 : _target2.el) === sourceElement) return;
662
+ var _getNodeEntry9 = (0, _helpers2.getNodeEntry)(editor, (_target3 = target) === null || _target3 === void 0 ? void 0 : _target3.el),
663
+ _getNodeEntry0 = (0, _slicedToArray2["default"])(_getNodeEntry9, 2),
664
+ targetNode = _getNodeEntry0[0],
665
+ targetPath = _getNodeEntry0[1];
666
+
667
+ // Not support node type in multi column
668
+ if ([_constants2.TABLE, _constants2.VIDEO, _constants2.CODE_BLOCK, _constants2.WHITEBOARD, _constants2.FILE_VIEW, _constants2.FORMULA].includes(targetNode.type)) return;
669
+ if (!targetNode || targetPath.length === 0 && ![_constants2.ORDERED_LIST, _constants2.UNORDERED_LIST].includes(targetNode.type)) return;
670
+
671
+ // Stop if target node is multi column node with four columns
672
+ if (targetNode.type === _constants2.MULTI_COLUMN && targetNode.children.length === 4) return;
673
+
674
+ // Add hover style for target node multi column children
675
+ if (targetNode.type === _constants2.MULTI_COLUMN) {
676
+ var multiColumnEl = target.el;
677
+ var columnEls = multiColumnEl.querySelectorAll('.sdoc-column-container');
678
+ if (!columnEls.length) return;
679
+ columnEls.forEach(function (col) {
680
+ return col.classList.remove('sdoc-dragging-left', 'sdoc-dragging', 'sdoc-dragging-right');
681
+ });
682
+ var preColRect = null;
683
+ columnEls.forEach(function (colEl, index) {
684
+ var rect = colEl.getBoundingClientRect();
685
+ if (x < rect.left && index === 0) {
686
+ colEl.classList.add('sdoc-dragging-left');
687
+ activeDragElRef.current = colEl;
688
+ }
689
+ if (preColRect && x < rect.left && x > preColRect.right) {
690
+ colEl.classList.add('sdoc-dragging-left');
691
+ activeDragElRef.current = colEl;
692
+ }
693
+ if (x > rect.right && index === columnEls.length - 1) {
694
+ colEl.classList.add('sdoc-dragging-right');
695
+ activeDragElRef.current = colEl;
696
+ }
697
+ preColRect = rect;
698
+ });
699
+ return;
700
+ }
701
+
702
+ // Add hover style for target node as non-multi column children
703
+ var isLeftOutside = x < ((_target4 = target) === null || _target4 === void 0 ? void 0 : _target4.rect.left);
704
+ var isRightOutside = x > ((_target5 = target) === null || _target5 === void 0 ? void 0 : _target5.rect.right);
705
+ if (isLeftOutside && !target.el.classList.contains('sdoc-dragging-left')) {
706
+ target.el.classList.add('sdoc-dragging-left');
707
+ target.el.classList.remove('sdoc-dragging-right');
708
+ target.el.classList.remove('sdoc-dragging');
709
+ }
710
+ if (isRightOutside && !target.el.classList.contains('sdoc-dragging-right')) {
711
+ target.el.classList.add('sdoc-dragging-right');
712
+ target.el.classList.remove('sdoc-dragging-left');
713
+ target.el.classList.remove('sdoc-dragging');
714
+ }
715
+ activeDragElRef.current = target.el;
716
+ }, [editor]);
717
+ var clearAllDragStyles = (0, _react.useCallback)(function () {
718
+ var el = activeDragElRef.current;
719
+ (0, _helpers2.clearDragClass)(el);
720
+ activeDragElRef.current = null;
721
+ }, []);
722
+ var handleDrop = (0, _react.useCallback)(function () {
723
+ var targetEl = activeDragElRef.current;
724
+ var _getNodeEntry1 = (0, _helpers2.getNodeEntry)(editor, targetEl),
725
+ _getNodeEntry10 = (0, _slicedToArray2["default"])(_getNodeEntry1, 2),
726
+ targetNode = _getNodeEntry10[0],
727
+ targetPath = _getNodeEntry10[1];
728
+ var _getNodeEntry11 = (0, _helpers2.getNodeEntry)(editor, sourceElement),
729
+ _getNodeEntry12 = (0, _slicedToArray2["default"])(_getNodeEntry11, 2),
730
+ sourceNode = _getNodeEntry12[0],
731
+ sourcePath = _getNodeEntry12[1];
732
+ if (!targetPath || !sourcePath) return;
733
+
734
+ // When source node is list child, it is equal to drag top list node
735
+ var topSourceNode = _slate.Node.get(editor, [sourcePath[0]]);
736
+ if ([_constants2.ORDERED_LIST, _constants2.UNORDERED_LIST].includes(topSourceNode.type)) {
737
+ sourceNode = topSourceNode;
738
+ }
739
+
740
+ // Drop non-multi column into multi column situation
741
+ if (_constants2.COLUMN === targetNode.type) {
742
+ var topTargetNode = _slate.Node.get(editor, [targetPath[0]]); // Top multi column Node
743
+ // Insert source node into last of multi column
744
+ if (targetEl.classList.contains('sdoc-dragging-right')) {
745
+ (0, _helper2.addLastColumnInMultiColumn)(editor, topTargetNode, targetPath);
746
+ _slate.Transforms.moveNodes(editor, {
747
+ at: [sourcePath[0]],
748
+ to: [targetPath[0], targetPath[1] + 1, 0]
749
+ });
750
+ }
751
+ // Insert source node into middle of multi column
752
+ if (targetEl.classList.contains('sdoc-dragging-left')) {
753
+ (0, _helper2.addMiddleColumnInMultiColumn)(editor, topTargetNode, targetPath);
754
+ _slate.Transforms.moveNodes(editor, {
755
+ at: [sourcePath[0]],
756
+ to: [targetPath[0], targetPath[1], 0]
757
+ });
758
+ }
759
+ return;
760
+ }
761
+
762
+ // Drop non-multi column into non-multi column situation
763
+ // When target node is list, get real list path
764
+ if ([_constants2.ORDERED_LIST, _constants2.UNORDERED_LIST].includes(targetNode.type)) {
765
+ targetPath = _slateReact.ReactEditor.findPath(editor, targetNode);
766
+ }
767
+ if (_slate.Path.equals([sourcePath[0]], [targetPath[0]])) return;
768
+ var leftNode = null;
769
+ var rightNode = null;
770
+ if (targetEl.classList.contains('sdoc-dragging-left')) {
771
+ leftNode = sourceNode;
772
+ rightNode = targetNode;
773
+ } else if (targetEl.classList.contains('sdoc-dragging-right')) {
774
+ leftNode = targetNode;
775
+ rightNode = sourceNode;
776
+ } else {
777
+ return;
778
+ }
779
+
780
+ // Form multi column first and then remove source and target node
781
+ (0, _helpers2.wrapIntoMultiColumn)(editor, leftNode, rightNode, targetPath);
782
+ _slate.Transforms.removeNodes(editor, {
783
+ at: _slate.Path.next([targetPath[0]])
784
+ });
785
+ _slate.Transforms.removeNodes(editor, {
786
+ at: [sourcePath[0]]
787
+ });
788
+ return;
789
+ }, [editor]);
790
+ (0, _react.useEffect)(function () {
791
+ var editorContainer = document.querySelector('.sdoc-article-container');
792
+ editorContainer.addEventListener('dragover', handleDragover);
793
+ editorContainer.addEventListener('dragend', clearAllDragStyles);
794
+ editorContainer.addEventListener('dragleave', clearAllDragStyles);
795
+ editorContainer.addEventListener('drop', handleDrop);
796
+ return function () {
797
+ editorContainer.removeEventListener('dragover', handleDragover);
798
+ editorContainer.removeEventListener('dragend', clearAllDragStyles);
799
+ editorContainer.removeEventListener('dragleave', clearAllDragStyles);
800
+ editorContainer.removeEventListener('drop', handleDrop);
801
+ };
802
+ }, [handleDragover, clearAllDragStyles, handleDrop]);
607
803
  return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, !_commonUtils.isMobile && /*#__PURE__*/_react["default"].createElement("div", {
608
804
  onAnimationEnd: function onAnimationEnd() {
609
805
  return setIsMoving(false);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/sdoc-editor",
3
- "version": "3.0.80",
3
+ "version": "3.0.82",
4
4
  "main": "dist/index.js",
5
5
  "scripts": {
6
6
  "test": "jest",
@@ -72,5 +72,5 @@
72
72
  "publishConfig": {
73
73
  "access": "public"
74
74
  },
75
- "gitHead": "ae2a0cdae3b28a56adda4a0d11bfd474ec88bd81"
75
+ "gitHead": "48881a70148e952676a5ae0da8d560743dc887da"
76
76
  }