@seafile/sdoc-editor 3.0.161 → 3.0.163

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.
@@ -305,6 +305,11 @@ var SIDE_INSERT_MENUS_CONFIG = exports.SIDE_INSERT_MENUS_CONFIG = (_SIDE_INSERT_
305
305
  iconClass: 'sdocfont sdoc-video',
306
306
  type: _elementType.VIDEO,
307
307
  text: 'Video'
308
+ }), _elementType.FILE_LINK, {
309
+ id: 'sdoc-side-menu-item-file-wiki',
310
+ iconClass: 'sdocfont sdoc-wiki-file',
311
+ type: _elementType.FILE_LINK,
312
+ text: 'Link_file'
308
313
  }), _elementType.TABLE, {
309
314
  id: 'sdoc-side-menu-item-table',
310
315
  iconClass: 'sdocfont sdoc-table',
@@ -339,12 +344,12 @@ var SIDE_INSERT_MENUS_CONFIG = exports.SIDE_INSERT_MENUS_CONFIG = (_SIDE_INSERT_
339
344
  iconClass: 'sdocfont sdoc-list-ul',
340
345
  type: _elementType.UNORDERED_LIST,
341
346
  text: 'Unordered_list'
342
- }), _elementType.CHECK_LIST_ITEM, {
347
+ }), (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])(_SIDE_INSERT_MENUS_CO, _elementType.CHECK_LIST_ITEM, {
343
348
  id: '',
344
349
  iconClass: 'sdocfont sdoc-check-square',
345
350
  type: _elementType.CHECK_LIST_ITEM,
346
351
  text: 'Check_list'
347
- }), (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])(_SIDE_INSERT_MENUS_CO, _elementType.PARAGRAPH, {
352
+ }), _elementType.PARAGRAPH, {
348
353
  id: _elementType.PARAGRAPH,
349
354
  iconClass: 'sdocfont sdoc-text',
350
355
  type: _elementType.PARAGRAPH,
@@ -411,7 +416,7 @@ var SIDE_INSERT_MENUS_CONFIG = exports.SIDE_INSERT_MENUS_CONFIG = (_SIDE_INSERT_
411
416
  text: 'Formula'
412
417
  }));
413
418
  var SIDE_INSERT_MENUS_SEARCH_MAP = exports.SIDE_INSERT_MENUS_SEARCH_MAP = (_SIDE_INSERT_MENUS_SE = {}, (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"])(_SIDE_INSERT_MENUS_SE, _elementType.IMAGE, 'Image'), _elementType.VIDEO, 'Video'), _elementType.TABLE, 'Table'), _elementType.COLUMN, 'Column'), _elementType.TWO_COLUMN, 'Two_column'), _elementType.THREE_COLUMN, 'Three_column'), _elementType.FOUR_COLUMN, 'Four_column'), _elementType.LINK, 'Link'), _elementType.CODE_BLOCK, 'Code_block'), _elementType.CALL_OUT, 'Callout'), (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"])(_SIDE_INSERT_MENUS_SE, _elementType.UNORDERED_LIST, 'Unordered_list'), _elementType.ORDERED_LIST, 'Ordered_list'), _elementType.CHECK_LIST_ITEM, 'Check_list'), _elementType.PARAGRAPH, 'Paragraph'), _elementType.HEADER1, 'Header_one'), _elementType.HEADER2, 'Header_two'), _elementType.HEADER3, 'Header_three'), _elementType.HEADER4, 'Header_four'), _elementType.TOGGLE_HEADER1, 'Toggle_header_one'), _elementType.TOGGLE_HEADER2, 'Toggle_header_two'), (0, _defineProperty2["default"])((0, _defineProperty2["default"])(_SIDE_INSERT_MENUS_SE, _elementType.TOGGLE_HEADER3, 'Toggle_header_three'), _elementType.FILE_VIEW, 'File_view'));
414
- var SIDE_QUICK_INSERT_MENUS_SEARCH_MAP = exports.SIDE_QUICK_INSERT_MENUS_SEARCH_MAP = (_SIDE_QUICK_INSERT_ME = {}, (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"])(_SIDE_QUICK_INSERT_ME, _elementType.IMAGE, 'Image'), _elementType.VIDEO, 'Video'), _elementType.TABLE, 'Table'), _elementType.COLUMN, 'Column'), _elementType.TWO_COLUMN, 'Two_column'), _elementType.THREE_COLUMN, 'Three_column'), _elementType.FOUR_COLUMN, 'Four_column'), _elementType.LINK, 'Link'), _elementType.CODE_BLOCK, 'Code_block'), _elementType.CALL_OUT, 'Callout'), (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"])(_SIDE_QUICK_INSERT_ME, _elementType.UNORDERED_LIST, 'Unordered_list'), _elementType.ORDERED_LIST, 'Ordered_list'), _elementType.CHECK_LIST_ITEM, 'Check_list'), _elementType.PARAGRAPH, 'Paragraph'), _elementType.HEADER1, 'Header_one'), _elementType.HEADER2, 'Header_two'), _elementType.HEADER3, 'Header_three'), _elementType.HEADER4, 'Header_four'), _elementType.FILE_VIEW, 'File_view'), _elementType.FORMULA, 'Formula'), (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])(_SIDE_QUICK_INSERT_ME, _elementType.TOGGLE_HEADER1, 'Toggle_header_one'), _elementType.TOGGLE_HEADER2, 'Toggle_header_two'), _elementType.TOGGLE_HEADER3, 'Toggle_header_three'), _elementType.EMBED_LINK, 'Embed_link'));
419
+ var SIDE_QUICK_INSERT_MENUS_SEARCH_MAP = exports.SIDE_QUICK_INSERT_MENUS_SEARCH_MAP = (_SIDE_QUICK_INSERT_ME = {}, (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"])(_SIDE_QUICK_INSERT_ME, _elementType.IMAGE, 'Image'), _elementType.VIDEO, 'Video'), _elementType.FILE_LINK, 'Link_file'), _elementType.TABLE, 'Table'), _elementType.COLUMN, 'Column'), _elementType.TWO_COLUMN, 'Two_column'), _elementType.THREE_COLUMN, 'Three_column'), _elementType.FOUR_COLUMN, 'Four_column'), _elementType.LINK, 'Link'), _elementType.CODE_BLOCK, 'Code_block'), (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"])(_SIDE_QUICK_INSERT_ME, _elementType.CALL_OUT, 'Callout'), _elementType.UNORDERED_LIST, 'Unordered_list'), _elementType.ORDERED_LIST, 'Ordered_list'), _elementType.CHECK_LIST_ITEM, 'Check_list'), _elementType.PARAGRAPH, 'Paragraph'), _elementType.HEADER1, 'Header_one'), _elementType.HEADER2, 'Header_two'), _elementType.HEADER3, 'Header_three'), _elementType.HEADER4, 'Header_four'), _elementType.FILE_VIEW, 'File_view'), (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])(_SIDE_QUICK_INSERT_ME, _elementType.FORMULA, 'Formula'), _elementType.TOGGLE_HEADER1, 'Toggle_header_one'), _elementType.TOGGLE_HEADER2, 'Toggle_header_two'), _elementType.TOGGLE_HEADER3, 'Toggle_header_three'), _elementType.EMBED_LINK, 'Embed_link'));
415
420
 
416
421
  // Other operations menu config
417
422
  var SIDE_OTHER_OPERATIONS_MENUS_SEARCH_MAP = exports.SIDE_OTHER_OPERATIONS_MENUS_SEARCH_MAP = {
@@ -7,14 +7,31 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports["default"] = void 0;
8
8
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
9
9
  var _slate = require("@seafile/slate");
10
+ var _isHotkey = _interopRequireDefault(require("is-hotkey"));
10
11
  var _constants = require("../../constants");
11
12
  var _core = require("../../core");
12
13
  var _helpers = require("./helpers");
13
14
  var withBlockquote = function withBlockquote(editor) {
14
15
  var insertBreak = editor.insertBreak,
15
16
  deleteBackward = editor.deleteBackward,
16
- insertFragment = editor.insertFragment;
17
+ insertFragment = editor.insertFragment,
18
+ handleTab = editor.handleTab;
17
19
  var newEditor = editor;
20
+ newEditor.handleTab = function (event) {
21
+ var quoteBlockEntry = (0, _core.getSelectedNodeEntryByType)(newEditor, _constants.BLOCKQUOTE);
22
+ if (!quoteBlockEntry) {
23
+ return handleTab && handleTab(event);
24
+ }
25
+ var listItemEntry = (0, _core.getSelectedNodeEntryByType)(newEditor, _constants.LIST_ITEM);
26
+ if (listItemEntry) {
27
+ return handleTab && handleTab(event);
28
+ }
29
+ if ((0, _isHotkey["default"])('tab', event) || (0, _isHotkey["default"])('shift+tab', event)) {
30
+ event.preventDefault();
31
+ return true;
32
+ }
33
+ return handleTab && handleTab(event);
34
+ };
18
35
  newEditor.insertBreak = function () {
19
36
  var selection = editor.selection;
20
37
  if (selection == null) return insertBreak();
@@ -88,7 +88,17 @@ var withCallout = function withCallout(editor) {
88
88
  var eventBus = _eventBus["default"].getInstance();
89
89
  eventBus.dispatch(_constants.INTERNAL_EVENT.CLOSE_CALLOUT_COLOR_PICKER);
90
90
  if ((0, _isHotkey["default"])('tab', event) || (0, _isHotkey["default"])('shift+tab', event)) {
91
- event.preventDefault();
91
+ var listItemEntry = _slate.Editor.above(newEditor, {
92
+ at: newEditor.selection,
93
+ match: function match(n) {
94
+ return n.type === _constants2.LIST_ITEM;
95
+ },
96
+ mode: 'lowest'
97
+ });
98
+ if (!listItemEntry) {
99
+ event.preventDefault();
100
+ return true;
101
+ }
92
102
  newEditor.handleTab && newEditor.handleTab(event);
93
103
  return true;
94
104
  }
@@ -122,11 +122,11 @@ var withList = function withList(editor) {
122
122
  };
123
123
  newEditor.handleTab = function (event) {
124
124
  if (!newEditor.selection) {
125
- handleTab && handleTab();
125
+ handleTab && handleTab(event);
126
126
  return;
127
127
  }
128
128
  if ((0, _onTabHandle.onTabHandle)(newEditor, event)) return;
129
- handleTab && handleTab();
129
+ handleTab && handleTab(event);
130
130
  };
131
131
  newEditor.insertFragment = (0, _insertFragmentList.insertFragmentList)(newEditor);
132
132
  newEditor.normalizeNode = (0, _normalizeList.normalizeList)(editor);
@@ -29,6 +29,16 @@ var withParagraph = function withParagraph(editor) {
29
29
  handleTab && handleTab(event);
30
30
  return;
31
31
  }
32
+ var excludedParent = _slate.Editor.above(newEditor, {
33
+ at: selection,
34
+ match: function match(n) {
35
+ return [_constants.LIST_ITEM, _constants.BLOCKQUOTE].includes(n.type);
36
+ },
37
+ mode: 'lowest'
38
+ });
39
+ if (excludedParent) {
40
+ return handleTab && handleTab(event);
41
+ }
32
42
  var _Editor$nodes = _slate.Editor.nodes(newEditor, {
33
43
  at: selection,
34
44
  match: function match(n) {
@@ -27,16 +27,17 @@ var _core = require("../../core");
27
27
  var _helper = require("../../plugins/callout/helper");
28
28
  var _helpers = require("../../plugins/check-list/helpers");
29
29
  var _helpers2 = require("../../plugins/code-block/helpers");
30
- var _helpers3 = require("../../plugins/file-view/helpers");
30
+ var _helpers3 = require("../../plugins/file-link/helpers");
31
+ var _helpers4 = require("../../plugins/file-view/helpers");
31
32
  var _transforms = require("../../plugins/list/transforms");
32
33
  var _helper2 = require("../../plugins/multi-column/helper");
33
- var _helpers4 = require("../../plugins/table/helpers");
34
+ var _helpers5 = require("../../plugins/table/helpers");
34
35
  var _tableSizePopover = _interopRequireDefault(require("../../plugins/table/popover/table-size-popover"));
35
36
  var _helper3 = require("../../plugins/toggle-header/helper");
36
- var _helpers5 = require("../../plugins/video/helpers");
37
+ var _helpers6 = require("../../plugins/video/helpers");
37
38
  var _utils = require("../../utils");
38
39
  var _linkedRepoPopover = _interopRequireDefault(require("../linked-repo-popover"));
39
- var _helpers6 = require("../side-toolbar/helpers");
40
+ var _helpers7 = require("../side-toolbar/helpers");
40
41
  var _const = require("./const");
41
42
  require("./style.css");
42
43
  var QuickInsertBlockMenu = function QuickInsertBlockMenu(_ref) {
@@ -113,14 +114,14 @@ var QuickInsertBlockMenu = function QuickInsertBlockMenu(_ref) {
113
114
  var eventBus = _eventBus["default"].getInstance();
114
115
  eventBus.dispatch(_constants.INTERNAL_EVENT.INSERT_ELEMENT, {
115
116
  type: _constants2.ELEMENT_TYPE.VIDEO,
116
- insertVideo: _helpers5.insertVideo
117
+ insertVideo: _helpers6.insertVideo
117
118
  });
118
119
  // eslint-disable-next-line react-hooks/exhaustive-deps
119
120
  }, []);
120
121
  var createTable = (0, _react.useCallback)(function (size) {
121
122
  callback && callback();
122
123
  var newInsertPosition = slateNode.type === _constants2.ELEMENT_TYPE.LIST_ITEM ? _constants2.INSERT_POSITION.AFTER : insertPosition;
123
- (0, _helpers4.insertTable)(editor, size, editor.selection, newInsertPosition);
124
+ (0, _helpers5.insertTable)(editor, size, editor.selection, newInsertPosition);
124
125
  // eslint-disable-next-line react-hooks/exhaustive-deps
125
126
  }, [editor, insertPosition, slateNode]);
126
127
  var openLinkDialog = (0, _react.useCallback)(function () {
@@ -153,6 +154,17 @@ var QuickInsertBlockMenu = function QuickInsertBlockMenu(_ref) {
153
154
  });
154
155
  // eslint-disable-next-line react-hooks/exhaustive-deps
155
156
  }, [insertPosition]);
157
+ var openFileLinkDialog = (0, _react.useCallback)(function () {
158
+ callback && callback();
159
+ var eventBus = _eventBus["default"].getInstance();
160
+ eventBus.dispatch(_constants.INTERNAL_EVENT.INSERT_ELEMENT, {
161
+ type: _constants2.ELEMENT_TYPE.FILE_LINK,
162
+ insertPosition: insertPosition,
163
+ slateNode: slateNode,
164
+ insertFileLinkCallback: _helpers3.insertFileLink
165
+ });
166
+ // eslint-disable-next-line react-hooks/exhaustive-deps
167
+ }, [insertPosition]);
156
168
  var onInsertCodeBlock = (0, _react.useCallback)(function () {
157
169
  callback && callback();
158
170
  var newInsertPosition = slateNode.type === _constants2.ELEMENT_TYPE.LIST_ITEM ? _constants2.INSERT_POSITION.AFTER : insertPosition;
@@ -171,7 +183,7 @@ var QuickInsertBlockMenu = function QuickInsertBlockMenu(_ref) {
171
183
  }, [editor, insertPosition, slateNode]);
172
184
  var onInsert = (0, _react.useCallback)(function (type) {
173
185
  callback && callback();
174
- (0, _helpers6.insertElement)(editor, type, insertPosition);
186
+ (0, _helpers7.insertElement)(editor, type, insertPosition);
175
187
  // eslint-disable-next-line react-hooks/exhaustive-deps
176
188
  }, [editor, insertPosition, slateNode]);
177
189
  var onInsertToggleHeader = (0, _react.useCallback)(function (type) {
@@ -189,7 +201,7 @@ var QuickInsertBlockMenu = function QuickInsertBlockMenu(_ref) {
189
201
  }
190
202
  });
191
203
  } else if (insertPosition === _constants2.INSERT_POSITION.AFTER) {
192
- (0, _helpers6.insertElement)(editor, type, insertPosition);
204
+ (0, _helpers7.insertElement)(editor, type, insertPosition);
193
205
  (0, _helper.wrapCallout)(editor);
194
206
  }
195
207
  }, [callback, editor, insertPosition]);
@@ -289,7 +301,7 @@ var QuickInsertBlockMenu = function QuickInsertBlockMenu(_ref) {
289
301
  wiki_id: wikiId,
290
302
  file_view_id: fileView.id
291
303
  };
292
- (0, _helpers3.insertFileView)(viewData, editor, insertPosition, slateNode);
304
+ (0, _helpers4.insertFileView)(viewData, editor, insertPosition, slateNode);
293
305
  })["catch"](function (error) {
294
306
  var errorMessage = (0, _commonUtils.getErrorMsg)(error);
295
307
  _toast["default"].danger(errorMessage);
@@ -392,7 +404,12 @@ var QuickInsertBlockMenu = function QuickInsertBlockMenu(_ref) {
392
404
  }, t('Add_video_link')), editor.editorType !== _constants.WIKI_EDITOR && /*#__PURE__*/_react["default"].createElement("div", {
393
405
  className: "sdoc-dropdown-menu-item",
394
406
  onClick: openSelectVideoFileDialog
395
- }, t('Link_video_file'))))))), {}, (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, _constants2.TABLE,
407
+ }, t('Link_video_file'))))))), {}, (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, _constants2.FILE_LINK, /*#__PURE__*/_react["default"].createElement(_dropdownMenuItem["default"], {
408
+ isHidden: !quickInsertMenuSearchMap[_constants2.FILE_LINK],
409
+ key: "sdoc-insert-menu-file-link",
410
+ menuConfig: (0, _objectSpread6["default"])({}, _constants2.SIDE_INSERT_MENUS_CONFIG[_constants2.ELEMENT_TYPE.FILE_LINK]),
411
+ onClick: openFileLinkDialog
412
+ })), _constants2.TABLE,
396
413
  /*#__PURE__*/
397
414
  // eslint-disable-next-line react/jsx-indent
398
415
  _react["default"].createElement(_dropdownMenuItem["default"], {
@@ -488,7 +505,7 @@ var QuickInsertBlockMenu = function QuickInsertBlockMenu(_ref) {
488
505
  });
489
506
  return items;
490
507
  // eslint-disable-next-line react-hooks/exhaustive-deps
491
- }, [quickInsertMenuSearchMap, isDisableImage, onInsertImageToggle, isDisableVideo, isDisableMultiColumn, onInsertVideoToggle, isDisableTable, editor, createTable, callback, handleClosePopover, openLinkDialog, addEmbedLinkDialog, onInsertCodeBlock, isDisableCallout, isDisableToggleHeader, onInsertCheckList, isEmptyNode, onInsertCallout, onInsertList, onInsert, createMultiColumn, isDisableHeader]);
508
+ }, [quickInsertMenuSearchMap, isDisableImage, onInsertImageToggle, isDisableVideo, isDisableMultiColumn, onInsertVideoToggle, isDisableTable, editor, createTable, callback, handleClosePopover, openLinkDialog, addEmbedLinkDialog, onInsertCodeBlock, isDisableCallout, isDisableToggleHeader, onInsertCheckList, isEmptyNode, onInsertCallout, onInsertList, onInsert, createMultiColumn, isDisableHeader, openFileLinkDialog]);
492
509
  var getSelectItemDom = function getSelectItemDom(selectIndex) {
493
510
  var dropDownItemWrapper = downDownWrapperRef.current;
494
511
  var searchedDropDownItemWrapper = [];
@@ -586,7 +603,7 @@ var QuickInsertBlockMenu = function QuickInsertBlockMenu(_ref) {
586
603
  }, [clearSelectStyle, currentSelectIndex, downDownWrapperRef, onHandleInputFocus]);
587
604
  var onChange = (0, _react.useCallback)(function (e) {
588
605
  if (!downDownWrapperRef.current.isInputtingChinese) {
589
- var newMenuSearchMap = (0, _helpers6.getSearchedOperations)(_constants2.SIDE_QUICK_INSERT_MENUS_SEARCH_MAP, true, e, t, editor);
606
+ var newMenuSearchMap = (0, _helpers7.getSearchedOperations)(_constants2.SIDE_QUICK_INSERT_MENUS_SEARCH_MAP, true, e, t, editor);
590
607
  setQuickInsertMenuSearchMap(newMenuSearchMap);
591
608
  }
592
609
  }, [editor, t]);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/sdoc-editor",
3
- "version": "3.0.161",
3
+ "version": "3.0.163",
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": "81c488be2476a672597399e9093e1c5e112586f2"
75
+ "gitHead": "ce0901ac2add7333fdf81f34feafdc939dc46c38"
76
76
  }