@seafile/sdoc-editor 1.0.193 → 1.0.195-test0.0.1

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.
Files changed (23) hide show
  1. package/dist/basic-sdk/assets/css/sdoc-editor-plugins.css +4 -0
  2. package/dist/basic-sdk/comment/components/global-comment/index.css +0 -8
  3. package/dist/basic-sdk/extension/constants/element-type.js +2 -1
  4. package/dist/basic-sdk/extension/constants/index.js +8 -2
  5. package/dist/basic-sdk/extension/constants/menus-config.js +5 -0
  6. package/dist/basic-sdk/extension/core/queries/index.js +5 -1
  7. package/dist/basic-sdk/extension/plugins/blockquote/plugin.js +17 -12
  8. package/dist/basic-sdk/extension/plugins/check-list/render-elem.js +8 -3
  9. package/dist/basic-sdk/extension/plugins/video/menu/index.js +1 -1
  10. package/dist/basic-sdk/extension/plugins/whiteboard/helpers.js +61 -0
  11. package/dist/basic-sdk/extension/plugins/whiteboard/index.js +21 -0
  12. package/dist/basic-sdk/extension/plugins/whiteboard/menu/index.js +50 -0
  13. package/dist/basic-sdk/extension/plugins/whiteboard/plugin.js +28 -0
  14. package/dist/basic-sdk/extension/plugins/whiteboard/render-elem.js +19 -0
  15. package/dist/basic-sdk/extension/render/custom-element.js +7 -0
  16. package/dist/basic-sdk/extension/render/render-comment-editor-element.js +9 -0
  17. package/dist/basic-sdk/extension/toolbar/header-toolbar/insert-toolbar/index.js +2 -1
  18. package/dist/basic-sdk/extension/toolbar/side-toolbar/event.js +3 -2
  19. package/dist/basic-sdk/extension/toolbar/side-toolbar/helpers.js +1 -1
  20. package/dist/basic-sdk/extension/toolbar/side-toolbar/index.js +12 -1
  21. package/dist/constants/index.js +1 -0
  22. package/dist/pages/sdoc-wiki-editor.js +11 -5
  23. package/package.json +1 -1
@@ -158,6 +158,10 @@
158
158
  padding: 8px 0;
159
159
  }
160
160
 
161
+ .sdoc-insert-whiteboard-menu-popover-container {
162
+ padding: 8px 0;
163
+ }
164
+
161
165
  /* caret */
162
166
  .sdoc-editor__article .caret-item .caret-name::before {
163
167
  content: attr(name);
@@ -124,20 +124,12 @@
124
124
  margin-top: 0px;
125
125
  }
126
126
 
127
- .sdoc-comment-drawer .comments-panel-body__content .comment-ui-container.sdoc-resolved {
128
- background: #f5f5f5;
129
- }
130
-
131
127
  .sdoc-comment-drawer .comments-panel-body__content .comment-ui-container.active {
132
128
  left: 0;
133
129
  background: #fff;
134
130
  box-shadow: unset;
135
131
  }
136
132
 
137
- .sdoc-comment-drawer .comments-panel-body__content .comment-ui-container.active.sdoc-resolved {
138
- background: #f5f5f5;
139
- }
140
-
141
133
  .sdoc-dropdown-menu .dropdown-item {
142
134
  font-size: 14px;
143
135
  color: #212529;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.WIKI_LINK = exports.VIDEO = exports.UNORDERED_LIST = exports.TWO_COLUMN = exports.TOP_LEVEL_TYPES = exports.TITLE = exports.THREE_COLUMN = exports.TABLE_ROW = exports.TABLE_CELL = exports.TABLE = exports.SUBTITLE = exports.SEATABLE_TABLE = exports.SEATABLE_COLUMN = exports.SDOC_LINK = exports.QUICK_INSERT = exports.PARAGRAPH = exports.ORDERED_LIST = exports.MULTI_COLUMN = exports.MENTION_TEMP = exports.MENTION = exports.LIST_ITEM = exports.LINK = exports.INLINE_LEVEL_TYPES = exports.IMAGE_BLOCK = exports.IMAGE = exports.HEADER6 = exports.HEADER5 = exports.HEADER4 = exports.HEADER3 = exports.HEADER2 = exports.HEADER1 = exports.HEADER = exports.FOUR_COLUMN = exports.FONT_SIZE_REDUCE = exports.FONT_SIZE_INCREASE = exports.FONT_SIZE = exports.FIVE_COLUMN = exports.FILE_LINK_INSET_INPUT_TEMP = exports.FILE_LINK = exports.COLUMN = exports.CODE_LINE = exports.CODE_BLOCK = exports.CHECK_LIST_ITEM = exports.CALL_OUT = exports.BLOCKQUOTE = exports.ASK_AI = void 0;
6
+ exports.WIKI_LINK = exports.WHITEBOARD = exports.VIDEO = exports.UNORDERED_LIST = exports.TWO_COLUMN = exports.TOP_LEVEL_TYPES = exports.TITLE = exports.THREE_COLUMN = exports.TABLE_ROW = exports.TABLE_CELL = exports.TABLE = exports.SUBTITLE = exports.SEATABLE_TABLE = exports.SEATABLE_COLUMN = exports.SDOC_LINK = exports.QUICK_INSERT = exports.PARAGRAPH = exports.ORDERED_LIST = exports.MULTI_COLUMN = exports.MENTION_TEMP = exports.MENTION = exports.LIST_ITEM = exports.LINK = exports.INLINE_LEVEL_TYPES = exports.IMAGE_BLOCK = exports.IMAGE = exports.HEADER6 = exports.HEADER5 = exports.HEADER4 = exports.HEADER3 = exports.HEADER2 = exports.HEADER1 = exports.HEADER = exports.FOUR_COLUMN = exports.FONT_SIZE_REDUCE = exports.FONT_SIZE_INCREASE = exports.FONT_SIZE = exports.FIVE_COLUMN = exports.FILE_LINK_INSET_INPUT_TEMP = exports.FILE_LINK = exports.COLUMN = exports.CODE_LINE = exports.CODE_BLOCK = exports.CHECK_LIST_ITEM = exports.CALL_OUT = exports.BLOCKQUOTE = exports.ASK_AI = void 0;
7
7
  const BLOCKQUOTE = exports.BLOCKQUOTE = 'blockquote';
8
8
  const TITLE = exports.TITLE = 'title';
9
9
  const SUBTITLE = exports.SUBTITLE = 'subtitle';
@@ -42,6 +42,7 @@ const MENTION = exports.MENTION = 'mention';
42
42
  const MENTION_TEMP = exports.MENTION_TEMP = 'mention_temp';
43
43
  const FILE_LINK_INSET_INPUT_TEMP = exports.FILE_LINK_INSET_INPUT_TEMP = 'file_link_insert_input_temp';
44
44
  const QUICK_INSERT = exports.QUICK_INSERT = 'quick_insert';
45
+ const WHITEBOARD = exports.WHITEBOARD = 'whiteboard';
45
46
  const SEATABLE_COLUMN = exports.SEATABLE_COLUMN = 'seatable_column';
46
47
  const SEATABLE_TABLE = exports.SEATABLE_TABLE = 'seatable_table';
47
48
  const ASK_AI = exports.ASK_AI = 'ask_ai';
@@ -484,6 +484,12 @@ Object.defineProperty(exports, "VIDEO", {
484
484
  return _elementType.VIDEO;
485
485
  }
486
486
  });
487
+ Object.defineProperty(exports, "WHITEBOARD", {
488
+ enumerable: true,
489
+ get: function () {
490
+ return _elementType.WHITEBOARD;
491
+ }
492
+ });
487
493
  Object.defineProperty(exports, "WIN_HOTKEYS", {
488
494
  enumerable: true,
489
495
  get: function () {
@@ -534,7 +540,7 @@ const FILE_TYPE = exports.FILE_TYPE = {
534
540
  [_elementType.FILE_LINK]: 'file',
535
541
  [_elementType.SDOC_LINK]: 'sdoc'
536
542
  };
537
- const 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.SEATABLE_TABLE, _elementType.MULTI_COLUMN];
543
+ const 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.SEATABLE_TABLE, _elementType.MULTI_COLUMN];
538
544
  const MOUSE_ENTER_EVENT_DISABLED_MAP = exports.MOUSE_ENTER_EVENT_DISABLED_MAP = {
539
545
  [_elementType.PARAGRAPH]: [_elementType.CALL_OUT],
540
546
  [_elementType.TITLE]: [_elementType.CALL_OUT],
@@ -552,4 +558,4 @@ const MOUSE_ENTER_EVENT_DISABLED_MAP = exports.MOUSE_ENTER_EVENT_DISABLED_MAP =
552
558
  [_elementType.HEADER6]: [_elementType.CALL_OUT],
553
559
  [_elementType.CALL_OUT]: [_elementType.CALL_OUT]
554
560
  };
555
- const 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.SEATABLE_TABLE];
561
+ const 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.SEATABLE_TABLE, _elementType.WHITEBOARD];
@@ -233,6 +233,11 @@ const MENUS_CONFIG_MAP = exports.MENUS_CONFIG_MAP = {
233
233
  iconClass: 'sdocfont sdoc-seatable-table',
234
234
  type: _elementType.SEATABLE_TABLE,
235
235
  text: 'SeaTable_table'
236
+ },
237
+ [_elementType.WHITEBOARD]: {
238
+ id: `sdoc_${_elementType.WHITEBOARD}`,
239
+ iconClass: 'sdocfont sdoc-document',
240
+ text: 'Whiteboard'
236
241
  }
237
242
  };
238
243
 
@@ -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]
@@ -13,11 +13,13 @@ class CheckListItem extends _react.default.PureComponent {
13
13
  constructor() {
14
14
  super(...arguments);
15
15
  (0, _defineProperty2.default)(this, "onChange", event => {
16
- const checked = event.target.checked;
17
16
  const {
18
17
  editor,
19
- element
18
+ element,
19
+ readOnly
20
20
  } = this.props;
21
+ if (readOnly) return;
22
+ const checked = event.target.checked;
21
23
  const path = _slateReact.ReactEditor.findPath(editor, element);
22
24
  _slate.Transforms.setNodes(editor, {
23
25
  checked
@@ -58,8 +60,11 @@ class CheckListItem extends _react.default.PureComponent {
58
60
  }
59
61
  }
60
62
  const renderCheckListItem = (props, editor) => {
63
+ // eslint-disable-next-line react-hooks/rules-of-hooks
64
+ const readOnly = (0, _slateReact.useReadOnly)();
61
65
  return /*#__PURE__*/_react.default.createElement(CheckListItem, Object.assign({}, props, {
62
- editor: editor
66
+ editor: editor,
67
+ readOnly: readOnly
63
68
  }));
64
69
  };
65
70
  exports.renderCheckListItem = renderCheckListItem;
@@ -44,7 +44,7 @@ const VideoMenu = _ref => {
44
44
  hideArrow: true,
45
45
  fade: false
46
46
  }, /*#__PURE__*/_react.default.createElement("div", {
47
- className: "sdoc-insert-video-menu-popover-container sdoc-dropdown-menu-container 333"
47
+ className: "sdoc-insert-video-menu-popover-container sdoc-dropdown-menu-container"
48
48
  }, /*#__PURE__*/_react.default.createElement("div", {
49
49
  className: "sdoc-dropdown-menu-item",
50
50
  onClick: openLocalVideoDialog
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.onCreateWhiteboardFile = exports.isInsertWhiteboardMenuDisabled = exports.insertWhiteboard = void 0;
8
+ var _slate = require("@seafile/slate");
9
+ var _core = require("../../core");
10
+ var _constants = require("../../constants");
11
+ var _eventBus = _interopRequireDefault(require("../../../utils/event-bus"));
12
+ var _constants2 = require("../../../../constants");
13
+ const isInsertWhiteboardMenuDisabled = (editor, readonly) => {
14
+ if (readonly) return true;
15
+ const {
16
+ selection
17
+ } = editor;
18
+ if (selection === null) return true;
19
+ if (!_slate.Range.isCollapsed(selection)) return true;
20
+ const [match] = _slate.Editor.nodes(editor, {
21
+ match: n => {
22
+ let type = (0, _core.getNodeType)(n);
23
+ if (!type && (0, _core.isTextNode)(n) && n.id) {
24
+ const parentNode = (0, _core.getParentNode)(editor.children, n.id);
25
+ type = (0, _core.getNodeType)(parentNode);
26
+ }
27
+ if (type === _constants.CODE_BLOCK) return true;
28
+ if (type.startsWith('header')) return true;
29
+ if (type === _constants.TITLE) return true;
30
+ if (type === _constants.SUBTITLE) return true;
31
+ if (type === _constants.LIST_ITEM) return true;
32
+ if (type === _constants.CHECK_LIST_ITEM) return true;
33
+ if (type === _constants.MULTI_COLUMN) return true;
34
+ if (type === _constants.BLOCKQUOTE) return true;
35
+ if (type === _constants.CALL_OUT) return true;
36
+ if (_slate.Editor.isVoid(editor, n)) return true;
37
+ return false;
38
+ },
39
+ universal: true
40
+ });
41
+ if (match) return true;
42
+ return false;
43
+ };
44
+ exports.isInsertWhiteboardMenuDisabled = isInsertWhiteboardMenuDisabled;
45
+ const insertWhiteboard = () => {};
46
+ exports.insertWhiteboard = insertWhiteboard;
47
+ const onCreateWhiteboardFile = editor => {
48
+ // e.stopPropagation();
49
+
50
+ const eventBus = _eventBus.default.getInstance();
51
+ const external_props = {
52
+ insertWhiteboard,
53
+ fileType: 'draw',
54
+ editor
55
+ };
56
+ console.log(2, external_props.insertWhiteboard);
57
+ eventBus.dispatch(_constants2.EXTERNAL_EVENT.CREATE_WHITEBOARD_FILE, {
58
+ ...external_props
59
+ });
60
+ };
61
+ exports.onCreateWhiteboardFile = onCreateWhiteboardFile;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _constants = require("../../constants");
9
+ var _plugin = _interopRequireDefault(require("./plugin"));
10
+ var _menu = _interopRequireDefault(require("./menu"));
11
+ var _renderElem = require("./render-elem");
12
+ // import './index.css';
13
+
14
+ const WhiteboardPlugin = {
15
+ type: _constants.WHITEBOARD,
16
+ nodeType: 'element',
17
+ editorMenus: [_menu.default],
18
+ editorPlugin: _plugin.default,
19
+ renderElements: [_renderElem.renderWhiteboard]
20
+ };
21
+ var _default = exports.default = WhiteboardPlugin;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+ var _react = _interopRequireWildcard(require("react"));
10
+ var _reactI18next = require("react-i18next");
11
+ var _reactstrap = require("reactstrap");
12
+ var _dropdownMenuItem = _interopRequireDefault(require("../../../commons/dropdown-menu-item"));
13
+ var _helpers = require("../helpers");
14
+ var _constants = require("../../../constants");
15
+ const WhiteboardMenu = _ref => {
16
+ let {
17
+ editor,
18
+ readonly
19
+ } = _ref;
20
+ const disabled = (0, _helpers.isInsertWhiteboardMenuDisabled)(editor, readonly);
21
+ const menuConfig = _constants.MENUS_CONFIG_MAP[_constants.WHITEBOARD];
22
+ const {
23
+ t
24
+ } = (0, _reactI18next.useTranslation)();
25
+ const onCreateFile = () => {
26
+ (0, _helpers.onCreateWhiteboardFile)(editor);
27
+ };
28
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
29
+ disabled: disabled,
30
+ menuConfig: menuConfig,
31
+ className: "pr-2"
32
+ }, !disabled && /*#__PURE__*/_react.default.createElement("i", {
33
+ className: "sdocfont sdoc-right-slide sdoc-dropdown-item-right-icon"
34
+ })), !disabled && /*#__PURE__*/_react.default.createElement(_reactstrap.UncontrolledPopover, {
35
+ target: menuConfig.id,
36
+ trigger: "hover",
37
+ className: "sdoc-menu-popover sdoc-dropdown-menu sdoc-sub-dropdown-menu sdoc-insert-whiteboard-menu-popover",
38
+ placement: "right-start",
39
+ hideArrow: true,
40
+ fade: false
41
+ }, /*#__PURE__*/_react.default.createElement("div", {
42
+ className: "sdoc-insert-whiteboard-menu-popover-container sdoc-dropdown-menu-container"
43
+ }, /*#__PURE__*/_react.default.createElement("div", {
44
+ className: "sdoc-dropdown-menu-item"
45
+ }, t('Upload_local_whiteboard')), /*#__PURE__*/_react.default.createElement("div", {
46
+ className: "sdoc-dropdown-menu-item",
47
+ onClick: onCreateFile
48
+ }, t('Create_new_whiteboard')))));
49
+ };
50
+ var _default = exports.default = WhiteboardMenu;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _constants = require("../../constants");
10
+ const withWhiteboard = editor => {
11
+ const {
12
+ isVoid
13
+ } = editor;
14
+ const newEditor = editor;
15
+
16
+ // Make whiteboard as void node
17
+ newEditor.isVoid = elem => {
18
+ const {
19
+ type
20
+ } = elem;
21
+ if (type === _constants.WHITEBOARD) {
22
+ return true;
23
+ }
24
+ return isVoid(elem);
25
+ };
26
+ return newEditor;
27
+ };
28
+ var _default = exports.default = withWhiteboard;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.renderWhiteboard = renderWhiteboard;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ const Whiteboard = _ref => {
10
+ let {
11
+ editor
12
+ } = _ref;
13
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null);
14
+ };
15
+ function renderWhiteboard(props, editor) {
16
+ return /*#__PURE__*/_react.default.createElement(Whiteboard, Object.assign({}, props, {
17
+ editor: editor
18
+ }));
19
+ }
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
@@ -12,6 +13,7 @@ var _core = require("../core");
12
13
  var _helper = require("./helper");
13
14
  var _elementType = require("../constants/element-type");
14
15
  var _constants2 = require("../../constants");
16
+ var _whiteboard = _interopRequireDefault(require("../plugins/whiteboard"));
15
17
  const CustomRenderElement = props => {
16
18
  const editor = (0, _slateReact.useSlateStatic)();
17
19
  const readonly = (0, _slateReact.useReadOnly)();
@@ -210,6 +212,11 @@ const CustomRenderElement = props => {
210
212
  const [renderSeaTableTable] = _plugins.SeaTableViewsPlugin.renderElements;
211
213
  return renderSeaTableTable(props, editor);
212
214
  }
215
+ case _elementType.WHITEBOARD:
216
+ {
217
+ const [renderWhiteboard] = _whiteboard.default.renderElements;
218
+ return renderWhiteboard(props, editor);
219
+ }
213
220
  default:
214
221
  {
215
222
  const [renderParagraph] = _plugins.ParagraphPlugin.renderElements;
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
@@ -8,6 +9,7 @@ var _slateReact = require("@seafile/slate-react");
8
9
  var _constants = require("../constants");
9
10
  var _plugins = require("../plugins");
10
11
  var _core = require("../core");
12
+ var _whiteboard = _interopRequireDefault(require("../plugins/whiteboard"));
11
13
  const RenderCommentEditorCustomRenderElement = props => {
12
14
  const editor = (0, _slateReact.useSlateStatic)();
13
15
  const readonly = (0, _slateReact.useReadOnly)();
@@ -95,6 +97,13 @@ const RenderCommentEditorCustomRenderElement = props => {
95
97
  const [renderBlockquote] = _plugins.BlockquotePlugin.renderElements;
96
98
  return renderBlockquote(props, editor);
97
99
  }
100
+ case _constants.WHITEBOARD:
101
+ {
102
+ const [renderWhiteboard] = _whiteboard.default.renderElements;
103
+ return renderWhiteboard({
104
+ ...props
105
+ }, editor);
106
+ }
98
107
  default:
99
108
  {
100
109
  const [renderParagraph] = _plugins.ParagraphPlugin.renderElements;
@@ -22,6 +22,7 @@ var _menu8 = _interopRequireDefault(require("../../../plugins/seatable-tables/me
22
22
  var _eventBus = _interopRequireDefault(require("../../../../utils/event-bus"));
23
23
  var _constants = require("../../../../constants");
24
24
  require("./index.css");
25
+ var _menu9 = _interopRequireDefault(require("../../../plugins/whiteboard/menu"));
25
26
  const InsertToolbar = _ref => {
26
27
  let {
27
28
  isRichEditor,
@@ -95,7 +96,7 @@ const InsertToolbar = _ref => {
95
96
  style: {
96
97
  maxHeight: window.innerHeight - bottom - 100
97
98
  }
98
- }, /*#__PURE__*/_react.default.createElement(_menu.default, props), /*#__PURE__*/_react.default.createElement(_tableMenu.default, props), (editor === null || editor === void 0 ? void 0 : editor.editorType) !== _constants.DOCUMENT_PLUGIN_EDITOR && /*#__PURE__*/_react.default.createElement(_menu2.default, props), /*#__PURE__*/_react.default.createElement(_menu3.default, props), /*#__PURE__*/_react.default.createElement(_menu4.default, props), /*#__PURE__*/_react.default.createElement("div", {
99
+ }, /*#__PURE__*/_react.default.createElement(_menu.default, props), /*#__PURE__*/_react.default.createElement(_tableMenu.default, props), (editor === null || editor === void 0 ? void 0 : editor.editorType) !== _constants.DOCUMENT_PLUGIN_EDITOR && /*#__PURE__*/_react.default.createElement(_menu2.default, props), /*#__PURE__*/_react.default.createElement(_menu9.default, props), /*#__PURE__*/_react.default.createElement(_menu3.default, props), /*#__PURE__*/_react.default.createElement(_menu4.default, props), /*#__PURE__*/_react.default.createElement("div", {
99
100
  className: "sdoc-dropdown-menu-divider"
100
101
  }), editor.columns && /*#__PURE__*/_react.default.createElement(_menu7.default, props), editor.tables && /*#__PURE__*/_react.default.createElement(_menu8.default, props), !editor.tables && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_menu5.default, props), /*#__PURE__*/_react.default.createElement(_menu6.default, props)))));
101
102
  };
@@ -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';
@@ -138,7 +138,7 @@ const isVoidNode = node => {
138
138
  };
139
139
  exports.isVoidNode = isVoidNode;
140
140
  const isNotSupportTransform = node => {
141
- if (node.type && [_constants.CODE_BLOCK, _constants.TABLE, _constants.CALL_OUT, _constants.VIDEO, _constants.SEATABLE_TABLE].includes(node.type)) {
141
+ if (node.type && [_constants.CODE_BLOCK, _constants.TABLE, _constants.CALL_OUT, _constants.VIDEO, _constants.SEATABLE_TABLE, _constants.WHITEBOARD].includes(node.type)) {
142
142
  return true;
143
143
  }
144
144
  return false;
@@ -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);
@@ -36,6 +36,7 @@ const EXTERNAL_EVENT = exports.EXTERNAL_EVENT = {
36
36
  PARTICIPANT_REMOVED: 'participant-removed',
37
37
  CREATE_SDOC_FILE: 'create_sdoc_file',
38
38
  CREATE_WIKI_PAGE: 'create_wiki_page',
39
+ CREATE_WHITEBOARD_FILE: 'create_whiteboard_file',
39
40
  // wiki
40
41
  INSERT_LINK: 'insert_link',
41
42
  // document
@@ -29,10 +29,15 @@ const SdocWikiEditor = _ref => {
29
29
  // getEditorConfig cashe the config, so we need to update the uuid,for wiki editor
30
30
  docUuid && _context.default.updateConfigUuid(docUuid);
31
31
  const editorConfig = _context.default.getEditorConfig();
32
- const newEditor = (0, _nodeId.default)((0, _socket.withSocketIO)(defaultEditor, {
33
- document,
34
- config: editorConfig
35
- }));
32
+ let newEditor = null;
33
+ if (!isWikiReadOnly) {
34
+ newEditor = (0, _nodeId.default)((0, _socket.withSocketIO)(defaultEditor, {
35
+ document,
36
+ config: editorConfig
37
+ }));
38
+ } else {
39
+ newEditor = (0, _nodeId.default)(defaultEditor);
40
+ }
36
41
  const {
37
42
  cursors
38
43
  } = document;
@@ -44,11 +49,12 @@ const SdocWikiEditor = _ref => {
44
49
  // eslint-disable-next-line react-hooks/exhaustive-deps
45
50
  }, [docUuid]);
46
51
  (0, _react.useEffect)(() => {
52
+ if (isWikiReadOnly) return;
47
53
  validEditor.openConnection();
48
54
  return () => {
49
55
  validEditor.closeConnection();
50
56
  };
51
- }, [validEditor]);
57
+ }, [isWikiReadOnly, validEditor]);
52
58
  return /*#__PURE__*/_react.default.createElement(_errorBoundary.default, null, /*#__PURE__*/_react.default.createElement(_wikiEditor.default, {
53
59
  document: document,
54
60
  docUuid: docUuid,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/sdoc-editor",
3
- "version": "1.0.193",
3
+ "version": "1.0.195-test0.0.1",
4
4
  "private": false,
5
5
  "description": "This is a sdoc editor",
6
6
  "main": "dist/index.js",