@seafile/sdoc-editor 2.0.128 → 2.0.129-test-0.0.2

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 (26) hide show
  1. package/dist/assets/css/sdoc-editor-plugins.css +1 -0
  2. package/dist/constants/index.js +3 -1
  3. package/dist/extension/commons/insert-element-dialog/index.js +22 -3
  4. package/dist/extension/commons/select-file-dialog/helpers.js +5 -1
  5. package/dist/extension/commons/select-file-dialog/index.js +18 -2
  6. package/dist/extension/commons/select-file-dialog/local-files/index.css +2 -0
  7. package/dist/extension/commons/select-file-dialog/local-files/index.js +1 -1
  8. package/dist/extension/constants/element-type.js +2 -1
  9. package/dist/extension/constants/index.js +9 -3
  10. package/dist/extension/constants/menus-config.js +6 -2
  11. package/dist/extension/plugins/ai/ai-module/lang-sub-menu.js +20 -15
  12. package/dist/extension/plugins/ai/constants/index.js +4 -4
  13. package/dist/extension/plugins/index.js +8 -1
  14. package/dist/extension/plugins/whiteboard/helper.js +142 -0
  15. package/dist/extension/plugins/whiteboard/index.css +41 -0
  16. package/dist/extension/plugins/whiteboard/index.js +20 -0
  17. package/dist/extension/plugins/whiteboard/menu/index.js +59 -0
  18. package/dist/extension/plugins/whiteboard/plugin.js +53 -0
  19. package/dist/extension/plugins/whiteboard/render-elem.js +87 -0
  20. package/dist/extension/render/custom-element.js +6 -0
  21. package/dist/extension/toolbar/header-toolbar/insert-toolbar/index.js +2 -1
  22. package/dist/extension/toolbar/side-toolbar/helpers.js +1 -1
  23. package/dist/right-panel/index.css +8 -0
  24. package/dist/right-panel/index.js +12 -0
  25. package/package.json +2 -3
  26. package/LICENSE.txt +0 -13
@@ -186,6 +186,7 @@
186
186
  padding: 8px 0;
187
187
  }
188
188
 
189
+ .sdoc-insert-whiteboard-menu-popover-container,
189
190
  .sdoc-insert-video-menu-popover-container {
190
191
  padding: 8px 0;
191
192
  }
@@ -74,7 +74,9 @@ var INTERNAL_EVENT = exports.INTERNAL_EVENT = {
74
74
  TOGGLE_PRESENTATION_MODE: 'toggle_presentation_mode',
75
75
  CREATE_SDOC_FILE: 'create_sdoc_file',
76
76
  CREATE_WIKI_PAGE: 'create_wiki_page',
77
- IMAGE_COLUMN_TOGGLE: 'Image_column_toggle'
77
+ IMAGE_COLUMN_TOGGLE: 'Image_column_toggle',
78
+ CREATE_WHITEBOARD_FILE: 'create_whiteboard_file',
79
+ GENERATE_EXDRAW_READ_ONLY_LINK: 'generate_exdraw_read_only_link'
78
80
  };
79
81
  var PAGE_EDIT_AREA_WIDTH = exports.PAGE_EDIT_AREA_WIDTH = 672; // 672 = 794 - 2[borderLeft + borderRight] - 120[paddingLeft + paddingRight]
80
82
  var COMMENT_EDITOR_EDIT_AREA_WIDTH = exports.COMMENT_EDITOR_EDIT_AREA_WIDTH = 364;
@@ -64,10 +64,14 @@ var InsertElementDialog = function InsertElementDialog(_ref) {
64
64
  _useState16 = (0, _slicedToArray2["default"])(_useState15, 2),
65
65
  handleSubmit = _useState16[0],
66
66
  setHandleSubmit = _useState16[1];
67
- var _useState17 = (0, _react.useState)({}),
67
+ var _useState17 = (0, _react.useState)(null),
68
68
  _useState18 = (0, _slicedToArray2["default"])(_useState17, 2),
69
- data = _useState18[0],
70
- setData = _useState18[1];
69
+ insertWhiteboardFile = _useState18[0],
70
+ setInsertWhiteboardFile = _useState18[1];
71
+ var _useState19 = (0, _react.useState)({}),
72
+ _useState20 = (0, _slicedToArray2["default"])(_useState19, 2),
73
+ data = _useState20[0],
74
+ setData = _useState20[1];
71
75
  var _useTranslation = (0, _reactI18next.useTranslation)('sdoc-editor'),
72
76
  t = _useTranslation.t;
73
77
  var uploadLocalImageInputRef = (0, _react.useRef)();
@@ -121,6 +125,7 @@ var InsertElementDialog = function InsertElementDialog(_ref) {
121
125
  insertFileLinkCallback = _ref2.insertFileLinkCallback,
122
126
  insertSdocFileLinkCallback = _ref2.insertSdocFileLinkCallback,
123
127
  insertVideo = _ref2.insertVideo,
128
+ insertWhiteboard = _ref2.insertWhiteboard,
124
129
  paramEditor = _ref2.editor,
125
130
  linkTitle = _ref2.linkTitle,
126
131
  handleSubmit = _ref2.handleSubmit,
@@ -133,6 +138,9 @@ var InsertElementDialog = function InsertElementDialog(_ref) {
133
138
  insertSdocFileLinkCallback: insertSdocFileLinkCallback,
134
139
  insertFileLinkCallback: insertFileLinkCallback
135
140
  });
141
+ setInsertWhiteboardFile({
142
+ insertWhiteboard: insertWhiteboard
143
+ });
136
144
  setInsertVideoCallback({
137
145
  insertVideo: insertVideo
138
146
  });
@@ -159,6 +167,7 @@ var InsertElementDialog = function InsertElementDialog(_ref) {
159
167
  setDialogType('');
160
168
  setInsertLinkCallback(null);
161
169
  setInsertVideoCallback(null);
170
+ setInsertWhiteboardFile(null);
162
171
  setValidEditor(null);
163
172
  setLinkTitle('');
164
173
  setData('');
@@ -206,6 +215,16 @@ var InsertElementDialog = function InsertElementDialog(_ref) {
206
215
  };
207
216
  return /*#__PURE__*/_react["default"].createElement(_index5["default"], fileLinkProps);
208
217
  }
218
+ case _constants2.ELEMENT_TYPE.WHITEBOARD:
219
+ {
220
+ var whiteboardProps = {
221
+ editor: validEditor,
222
+ dialogType: dialogType,
223
+ insertWhiteboardFile: insertWhiteboardFile,
224
+ closeDialog: closeDialog
225
+ };
226
+ return /*#__PURE__*/_react["default"].createElement(_index5["default"], whiteboardProps);
227
+ }
209
228
  case _constants2.ELEMENT_TYPE.VIDEO:
210
229
  {
211
230
  var videoProps = {
@@ -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.parcelFileTypeIcon = exports.getSdocFileIcon = exports.getFileTypeIcon = exports.addDataToTree = void 0;
7
+ exports.whiteboardFileIcon = exports.parcelFileTypeIcon = exports.getSdocFileIcon = exports.getFileTypeIcon = exports.addDataToTree = void 0;
8
8
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
9
9
  var _context = _interopRequireDefault(require("../../../context"));
10
10
  var _constants = require("../../constants");
@@ -29,6 +29,10 @@ var getSdocFileIcon = exports.getSdocFileIcon = function getSdocFileIcon() {
29
29
  var server = _context["default"].getSetting('serviceUrl');
30
30
  return "".concat(server, "/media/img/file/256/sdoc.png");
31
31
  };
32
+ var whiteboardFileIcon = exports.whiteboardFileIcon = function whiteboardFileIcon() {
33
+ var server = _context["default"].getSetting('serviceUrl');
34
+ return "".concat(server, "/media/img/file/256/draw.png");
35
+ };
32
36
  var getFileTypeIcon = exports.getFileTypeIcon = function getFileTypeIcon(fileType) {
33
37
  var imgResource = ['css', 'draw', 'excel', 'md', 'music', 'pdf', 'pic', 'ppt', 'psd', 'sdoc', 'txt', 'video', 'zip', 'word'];
34
38
  if (imgResource.includes(fileType)) {
@@ -23,7 +23,8 @@ var SelectSdocFileDialog = function SelectSdocFileDialog(_ref) {
23
23
  dialogType = _ref.dialogType,
24
24
  closeDialog = _ref.closeDialog,
25
25
  insertLinkCallback = _ref.insertLinkCallback,
26
- insertVideoCallback = _ref.insertVideoCallback;
26
+ insertVideoCallback = _ref.insertVideoCallback,
27
+ insertWhiteboardFile = _ref.insertWhiteboardFile;
27
28
  var _useTranslation = (0, _reactI18next.useTranslation)('sdoc-editor'),
28
29
  t = _useTranslation.t;
29
30
  var _useState = (0, _react.useState)(null),
@@ -53,6 +54,9 @@ var SelectSdocFileDialog = function SelectSdocFileDialog(_ref) {
53
54
  case _constants.ELEMENT_TYPE.VIDEO:
54
55
  modalTitle = 'Select_video_file';
55
56
  break;
57
+ case _constants.ELEMENT_TYPE.WHITEBOARD:
58
+ modalTitle = 'Select_Excalidraw_document';
59
+ break;
56
60
  default:
57
61
  break;
58
62
  }
@@ -65,6 +69,8 @@ var SelectSdocFileDialog = function SelectSdocFileDialog(_ref) {
65
69
  insertSdocFileLinkCallback = _ref2.insertSdocFileLinkCallback;
66
70
  var _ref3 = insertVideoCallback || {},
67
71
  insertVideo = _ref3.insertVideo;
72
+ var _ref4 = insertWhiteboardFile || {},
73
+ insertWhiteboard = _ref4.insertWhiteboard;
68
74
  switch (dialogType) {
69
75
  case _constants.ELEMENT_TYPE.FILE_LINK:
70
76
  insertFileLinkCallback && insertFileLinkCallback(editor, fileInfo.name, fileInfo.file_uuid);
@@ -82,10 +88,13 @@ var SelectSdocFileDialog = function SelectSdocFileDialog(_ref) {
82
88
  name: fileInfo.name
83
89
  }], [encodedUrl]);
84
90
  break;
91
+ case _constants.ELEMENT_TYPE.WHITEBOARD:
92
+ insertWhiteboard && insertWhiteboard(editor, fileInfo.name, fileInfo.path);
93
+ break;
85
94
  default:
86
95
  break;
87
96
  }
88
- }, [insertLinkCallback, insertVideoCallback, dialogType, editor]);
97
+ }, [insertLinkCallback, insertVideoCallback, insertWhiteboardFile, dialogType, editor]);
89
98
  var onSubmit = (0, _react.useCallback)(function () {
90
99
  if (!currentSelectedFile) return;
91
100
  var file_uuid = currentSelectedFile.file_uuid;
@@ -98,6 +107,13 @@ var SelectSdocFileDialog = function SelectSdocFileDialog(_ref) {
98
107
  return;
99
108
  }
100
109
 
110
+ // Insert whiteboard file in sdoc
111
+ if (dialogType === _constants.ELEMENT_TYPE.WHITEBOARD) {
112
+ insertFile(fileInfo);
113
+ closeDialog();
114
+ return;
115
+ }
116
+
101
117
  // File has no id
102
118
  if (!file_uuid || file_uuid === '') {
103
119
  _context["default"].getSdocLocalFileId(currentSelectedFile.path).then(function (res) {
@@ -36,6 +36,7 @@
36
36
  left: 0;
37
37
  }
38
38
 
39
+ .sdoc-file-icon-container .whiteboard-file-img,
39
40
  .sdoc-file-icon-container .video-file-img,
40
41
  .sdoc-file-icon-container .sdoc-file-img {
41
42
  position: absolute;
@@ -96,6 +97,7 @@
96
97
  white-space: nowrap;
97
98
  }
98
99
 
100
+ .sdoc-folder-container.sdoc-folder-search-results .sdoc-file-info .sdoc-file-icon-container .whiteboard-file-img,
99
101
  .sdoc-folder-container.sdoc-folder-search-results .sdoc-file-info .sdoc-file-icon-container .sdoc-file-img {
100
102
  width: 36px;
101
103
  height: 36px;
@@ -194,7 +194,7 @@ var LocalFiles = function LocalFiles(_ref) {
194
194
  className: "sdoc-folder-children"
195
195
  }, ((_item$children = item.children) === null || _item$children === void 0 ? void 0 : _item$children.length) === 0 && /*#__PURE__*/_react["default"].createElement("div", {
196
196
  className: "sdoc-folder-children-empty"
197
- }, "(".concat(t('Empty'), ")")), ((_item$children2 = item.children) === null || _item$children2 === void 0 ? void 0 : _item$children2.length) > 0 && renderFileTree(item.children))), ['file', 'video'].includes(type) && /*#__PURE__*/_react["default"].createElement("div", {
197
+ }, "(".concat(t('Empty'), ")")), ((_item$children2 = item.children) === null || _item$children2 === void 0 ? void 0 : _item$children2.length) > 0 && renderFileTree(item.children))), ['file', 'video', 'exdraw'].includes(type) && /*#__PURE__*/_react["default"].createElement("div", {
198
198
  className: (0, _classnames["default"])('sdoc-file-info', {
199
199
  'active': selected
200
200
  }),
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.WIKI_LINK = exports.VIDEO_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.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.GROUP = 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_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.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.GROUP = 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
  var BLOCKQUOTE = exports.BLOCKQUOTE = 'blockquote';
8
8
  var TITLE = exports.TITLE = 'title';
9
9
  var SUBTITLE = exports.SUBTITLE = 'subtitle';
@@ -43,6 +43,7 @@ var MENTION_TEMP = exports.MENTION_TEMP = 'mention_temp';
43
43
  var FILE_LINK_INSET_INPUT_TEMP = exports.FILE_LINK_INSET_INPUT_TEMP = 'file_link_insert_input_temp';
44
44
  var QUICK_INSERT = exports.QUICK_INSERT = 'quick_insert';
45
45
  var VIDEO_LINK = exports.VIDEO_LINK = 'video_link';
46
+ var WHITEBOARD = exports.WHITEBOARD = 'whiteboard';
46
47
  var ASK_AI = exports.ASK_AI = 'ask_ai';
47
48
 
48
49
  // font
@@ -474,6 +474,12 @@ Object.defineProperty(exports, "VIDEO", {
474
474
  return _elementType.VIDEO;
475
475
  }
476
476
  });
477
+ Object.defineProperty(exports, "WHITEBOARD", {
478
+ enumerable: true,
479
+ get: function get() {
480
+ return _elementType.WHITEBOARD;
481
+ }
482
+ });
477
483
  Object.defineProperty(exports, "WIN_HOTKEYS", {
478
484
  enumerable: true,
479
485
  get: function get() {
@@ -510,7 +516,7 @@ var LIST_TYPE_ARRAY = exports.LIST_TYPE_ARRAY = [_elementType.UNORDERED_LIST, _e
510
516
  var LIST_ITEM_CORRELATION_TYPE = exports.LIST_ITEM_CORRELATION_TYPE = [_elementType.UNORDERED_LIST, _elementType.ORDERED_LIST, _elementType.LIST_ITEM];
511
517
  var LIST_ITEM_SUPPORTED_TRANSFORMATION = exports.LIST_ITEM_SUPPORTED_TRANSFORMATION = [_elementType.UNORDERED_LIST, _elementType.ORDERED_LIST, 'left', 'center', 'right', _elementType.BLOCKQUOTE];
512
518
  var ADD_POSITION_OFFSET_TYPE = exports.ADD_POSITION_OFFSET_TYPE = [_elementType.PARAGRAPH, _elementType.SUBTITLE, _elementType.HEADER1, _elementType.HEADER2, _elementType.HEADER3, _elementType.HEADER4, _elementType.HEADER5, _elementType.HEADER6, _elementType.CHECK_LIST_ITEM, _elementType.IMAGE_BLOCK];
513
- var FILE_TYPE = exports.FILE_TYPE = (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, _elementType.FILE_LINK, 'file'), _elementType.SDOC_LINK, 'sdoc'), _elementType.VIDEO, 'video');
519
+ var FILE_TYPE = exports.FILE_TYPE = (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, _elementType.FILE_LINK, 'file'), _elementType.SDOC_LINK, 'sdoc'), _elementType.VIDEO, 'video'), _elementType.WHITEBOARD, 'exdraw');
514
520
  var FILEEXT_TYPE = exports.FILEEXT_TYPE = {
515
521
  VIDEO: ['mp4', 'ogv', 'webm', 'mov'],
516
522
  MUSIC: ['mp3', 'oga', 'ogg', 'wav', 'flac', 'opus'],
@@ -527,6 +533,6 @@ var FILEEXT_TYPE_MAP = exports.FILEEXT_TYPE_MAP = {
527
533
  EXCALIDRAW: 'draw',
528
534
  DOCUMENT: 'word'
529
535
  };
530
- 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];
536
+ 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];
531
537
  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]));
532
- 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];
538
+ 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];
@@ -89,11 +89,15 @@ var MENUS_CONFIG_MAP = exports.MENUS_CONFIG_MAP = (_MENUS_CONFIG_MAP = {}, (0, _
89
89
  id: "sdoc_".concat(_elementType.VIDEO),
90
90
  iconClass: 'sdocfont sdoc-video',
91
91
  text: 'Video'
92
+ }), _elementType.WHITEBOARD, {
93
+ id: "sdoc_".concat(_elementType.WHITEBOARD),
94
+ iconClass: 'sdocfont sdoc-document',
95
+ text: 'Whiteboard'
92
96
  }), _elementType.TABLE, {
93
97
  id: "sdoc_".concat(_elementType.TABLE),
94
98
  iconClass: 'sdocfont sdoc-table',
95
99
  text: 'Table'
96
- }), TEXT_STYLE, [{
100
+ }), (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"])(_MENUS_CONFIG_MAP, TEXT_STYLE, [{
97
101
  id: ITALIC,
98
102
  iconClass: 'sdocfont sdoc-italic',
99
103
  text: 'Italic',
@@ -142,7 +146,7 @@ var MENUS_CONFIG_MAP = exports.MENUS_CONFIG_MAP = (_MENUS_CONFIG_MAP = {}, (0, _
142
146
  isColor: true,
143
147
  recentUsedColorsKey: _color.RECENT_USED_FONT_COLORS_KEY,
144
148
  defaultLastUsedColor: _color.DEFAULT_LAST_USED_FONT_COLOR
145
- }]), (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"])(_MENUS_CONFIG_MAP, TEXT_STYLE_MORE, [
149
+ }]), TEXT_STYLE_MORE, [
146
150
  //
147
151
  {
148
152
  id: STRIKETHROUGH,
@@ -19,19 +19,15 @@ var LangSubMenu = function LangSubMenu(_ref) {
19
19
  var onZhcnClick = (0, _react.useCallback)(function () {
20
20
  onTranslateClick('zh-cn');
21
21
  }, [onTranslateClick]);
22
-
23
- // const onFrClick = useCallback(() => {
24
- // onTranslateClick('fr');
25
- // }, [onTranslateClick]);
26
-
27
- // const onDeClick = useCallback(() => {
28
- // onTranslateClick('de');
29
- // }, [onTranslateClick]);
30
-
31
- // const onRuClick = useCallback(() => {
32
- // onTranslateClick('ru');
33
- // }, [onTranslateClick]);
34
-
22
+ var onFrClick = (0, _react.useCallback)(function () {
23
+ onTranslateClick('fr');
24
+ }, [onTranslateClick]);
25
+ var onDeClick = (0, _react.useCallback)(function () {
26
+ onTranslateClick('de');
27
+ }, [onTranslateClick]);
28
+ var onItClick = (0, _react.useCallback)(function () {
29
+ onTranslateClick('it');
30
+ }, [onTranslateClick]);
35
31
  return /*#__PURE__*/_react["default"].createElement(_reactstrap.UncontrolledPopover, {
36
32
  boundariesElement: "viewport",
37
33
  target: target,
@@ -43,11 +39,20 @@ var LangSubMenu = function LangSubMenu(_ref) {
43
39
  }, /*#__PURE__*/_react["default"].createElement("div", {
44
40
  className: "sdoc-dropdown-menu-container"
45
41
  }, /*#__PURE__*/_react["default"].createElement(_dropdownMenuItem["default"], {
42
+ menuConfig: _constants.LANG_MENU_CONFIG.ZH_CN,
43
+ onClick: onZhcnClick
44
+ }), /*#__PURE__*/_react["default"].createElement(_dropdownMenuItem["default"], {
46
45
  menuConfig: _constants.LANG_MENU_CONFIG.EN,
47
46
  onClick: onEnClick
48
47
  }), /*#__PURE__*/_react["default"].createElement(_dropdownMenuItem["default"], {
49
- menuConfig: _constants.LANG_MENU_CONFIG.ZH_CN,
50
- onClick: onZhcnClick
48
+ menuConfig: _constants.LANG_MENU_CONFIG.FR,
49
+ onClick: onFrClick
50
+ }), /*#__PURE__*/_react["default"].createElement(_dropdownMenuItem["default"], {
51
+ menuConfig: _constants.LANG_MENU_CONFIG.DE,
52
+ onClick: onDeClick
53
+ }), /*#__PURE__*/_react["default"].createElement(_dropdownMenuItem["default"], {
54
+ menuConfig: _constants.LANG_MENU_CONFIG.IT,
55
+ onClick: onItClick
51
56
  })));
52
57
  };
53
58
  var _default = exports["default"] = LangSubMenu;
@@ -125,10 +125,10 @@ var LANG_MENU_CONFIG = exports.LANG_MENU_CONFIG = {
125
125
  text: 'French',
126
126
  iconClass: 'sdocfont sdoc-ai-translate'
127
127
  },
128
- RU: {
129
- id: 'ru',
130
- type: 'ru',
131
- text: 'Russian',
128
+ IT: {
129
+ id: 'it',
130
+ type: 'it',
131
+ text: 'Italian',
132
132
  iconClass: 'sdocfont sdoc-ai-translate'
133
133
  }
134
134
  };
@@ -143,6 +143,12 @@ Object.defineProperty(exports, "VideoPlugin", {
143
143
  return _video["default"];
144
144
  }
145
145
  });
146
+ Object.defineProperty(exports, "WhiteboardPlugin", {
147
+ enumerable: true,
148
+ get: function get() {
149
+ return _whiteboard["default"];
150
+ }
151
+ });
146
152
  Object.defineProperty(exports, "WikiLinkPlugin", {
147
153
  enumerable: true,
148
154
  get: function get() {
@@ -173,8 +179,9 @@ var _table = _interopRequireDefault(require("./table"));
173
179
  var _textAlign = _interopRequireDefault(require("./text-align"));
174
180
  var _textStyle = _interopRequireDefault(require("./text-style"));
175
181
  var _video = _interopRequireDefault(require("./video"));
182
+ var _whiteboard = _interopRequireDefault(require("./whiteboard"));
176
183
  var _wikiLink = _interopRequireDefault(require("./wiki-link"));
177
- var Plugins = [_markdown["default"], _html["default"], _header["default"], _link["default"], _blockquote["default"], _list["default"], _checkList["default"], _codeBlock["default"], _image["default"], _video["default"], _table["default"], _multiColumn["default"], _textStyle["default"], _textAlign["default"], _font["default"], _sdocLink["default"], _paragraph["default"], _fileLink["default"], _callout["default"], _searchReplace["default"], _quickInsert["default"], _group["default"]];
184
+ var Plugins = [_markdown["default"], _html["default"], _header["default"], _link["default"], _blockquote["default"], _list["default"], _checkList["default"], _codeBlock["default"], _image["default"], _video["default"], _table["default"], _multiColumn["default"], _textStyle["default"], _textAlign["default"], _font["default"], _sdocLink["default"], _paragraph["default"], _fileLink["default"], _callout["default"], _searchReplace["default"], _quickInsert["default"], _group["default"], _whiteboard["default"]];
178
185
  var WikiPlugins = exports.WikiPlugins = [].concat(Plugins, [_wikiLink["default"]]);
179
186
  var CommentPlugins = exports.CommentPlugins = [_markdown["default"], _html["default"], _paragraph["default"], _textStyle["default"], _list["default"], _image["default"], _link["default"], _mention["default"], _blockquote["default"]];
180
187
  var _default = exports["default"] = Plugins;
@@ -0,0 +1,142 @@
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 = exports.generateWhiteboardNode = void 0;
8
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
9
+ var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/regeneratorRuntime"));
10
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/asyncToGenerator"));
11
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
12
+ var _slate = require("@seafile/slate");
13
+ var _slugid = _interopRequireDefault(require("slugid"));
14
+ var _constants = require("../../../constants");
15
+ var _context2 = _interopRequireDefault(require("../../../context"));
16
+ var _eventBus = _interopRequireDefault(require("../../../utils/event-bus"));
17
+ var _constants2 = require("../../constants");
18
+ var _core = require("../../core");
19
+ var isInsertWhiteboardMenuDisabled = exports.isInsertWhiteboardMenuDisabled = function isInsertWhiteboardMenuDisabled(editor, readonly) {
20
+ if (readonly) return true;
21
+ var selection = editor.selection;
22
+ if (selection === null) return true;
23
+ if (!_slate.Range.isCollapsed(selection)) return true;
24
+ var _Editor$nodes = _slate.Editor.nodes(editor, {
25
+ match: function match(n) {
26
+ var type = (0, _core.getNodeType)(n);
27
+ if (!type && (0, _core.isTextNode)(n) && n.id) {
28
+ var parentNode = (0, _core.getParentNode)(editor.children, n.id);
29
+ type = (0, _core.getNodeType)(parentNode);
30
+ }
31
+ if (type === _constants2.CODE_BLOCK) return true;
32
+ if (type.startsWith('header')) return true;
33
+ if (type === _constants2.TITLE) return true;
34
+ if (type === _constants2.SUBTITLE) return true;
35
+ if (type === _constants2.LIST_ITEM) return true;
36
+ if (type === _constants2.CHECK_LIST_ITEM) return true;
37
+ if (type === _constants2.MULTI_COLUMN) return true;
38
+ if (type === _constants2.BLOCKQUOTE) return true;
39
+ if (type === _constants2.CALL_OUT) return true;
40
+ if (_slate.Editor.isVoid(editor, n)) return true;
41
+ return false;
42
+ },
43
+ universal: true
44
+ }),
45
+ _Editor$nodes2 = (0, _slicedToArray2["default"])(_Editor$nodes, 1),
46
+ match = _Editor$nodes2[0];
47
+ if (match) return true;
48
+ return false;
49
+ };
50
+ var generateWhiteboardNode = exports.generateWhiteboardNode = function generateWhiteboardNode(repoID) {
51
+ var filename = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
52
+ var filePath = arguments.length > 2 ? arguments[2] : undefined;
53
+ var exdrawReadOnlyLink = arguments.length > 3 ? arguments[3] : undefined;
54
+ var whiteboardNode = {
55
+ id: _slugid["default"].nice(),
56
+ type: _constants2.WHITEBOARD,
57
+ repo_id: repoID,
58
+ title: filename,
59
+ file_path: filePath,
60
+ link: exdrawReadOnlyLink,
61
+ children: [{
62
+ id: _slugid["default"].nice(),
63
+ text: ''
64
+ }]
65
+ };
66
+ return whiteboardNode;
67
+ };
68
+ var insertWhiteboard = exports.insertWhiteboard = /*#__PURE__*/function () {
69
+ var _ref = (0, _asyncToGenerator2["default"])(/*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee(editor, filename, filePath) {
70
+ var _editor$selection;
71
+ var repoID, eventBus, exdrawReadOnlyLink, whiteboardNode, path, position, nextPath, endOfFirstNode, range;
72
+ return (0, _regeneratorRuntime2["default"])().wrap(function _callee$(_context) {
73
+ while (1) switch (_context.prev = _context.next) {
74
+ case 0:
75
+ if (!isInsertWhiteboardMenuDisabled(editor)) {
76
+ _context.next = 2;
77
+ break;
78
+ }
79
+ return _context.abrupt("return");
80
+ case 2:
81
+ if (!(editor.selection == null)) {
82
+ _context.next = 4;
83
+ break;
84
+ }
85
+ return _context.abrupt("return");
86
+ case 4:
87
+ repoID = _context2["default"].getSetting('repoID');
88
+ eventBus = _eventBus["default"].getInstance();
89
+ _context.next = 8;
90
+ return new Promise(function (resolve) {
91
+ eventBus.dispatch(_constants.INTERNAL_EVENT.GENERATE_EXDRAW_READ_ONLY_LINK, {
92
+ repoID: repoID,
93
+ filePath: filePath,
94
+ onSuccess: function onSuccess(link) {
95
+ resolve(link);
96
+ }
97
+ });
98
+ });
99
+ case 8:
100
+ exdrawReadOnlyLink = _context.sent;
101
+ whiteboardNode = generateWhiteboardNode(repoID, filename, filePath, exdrawReadOnlyLink);
102
+ path = (_editor$selection = editor.selection) === null || _editor$selection === void 0 ? void 0 : _editor$selection.anchor.path;
103
+ position = 'after';
104
+ if (!(position === _constants2.INSERT_POSITION.AFTER)) {
105
+ _context.next = 20;
106
+ break;
107
+ }
108
+ _slate.Transforms.insertNodes(editor, whiteboardNode, {
109
+ at: [path[0] + 1]
110
+ });
111
+ nextPath = _slate.Path.next([path[0] + 1]);
112
+ if (!(0, _core.getNode)(editor, nextPath)) {
113
+ _slate.Transforms.insertNodes(editor, (0, _core.generateDefaultParagraph)(), {
114
+ at: nextPath
115
+ });
116
+ }
117
+ endOfFirstNode = _slate.Editor.start(editor, nextPath);
118
+ range = {
119
+ anchor: endOfFirstNode,
120
+ focus: endOfFirstNode
121
+ };
122
+ (0, _core.focusEditor)(editor, range);
123
+ return _context.abrupt("return");
124
+ case 20:
125
+ case "end":
126
+ return _context.stop();
127
+ }
128
+ }, _callee);
129
+ }));
130
+ return function insertWhiteboard(_x, _x2, _x3) {
131
+ return _ref.apply(this, arguments);
132
+ };
133
+ }();
134
+ var onCreateWhiteboardFile = exports.onCreateWhiteboardFile = function onCreateWhiteboardFile(editor) {
135
+ var eventBus = _eventBus["default"].getInstance();
136
+ var external_props = {
137
+ insertWhiteboard: insertWhiteboard,
138
+ fileType: 'exdraw',
139
+ editor: editor
140
+ };
141
+ eventBus.dispatch(_constants.INTERNAL_EVENT.CREATE_WHITEBOARD_FILE, (0, _objectSpread2["default"])({}, external_props));
142
+ };
@@ -0,0 +1,41 @@
1
+ .sdoc-whiteboard-container {
2
+ position: relative;
3
+ width: 100%;
4
+ height: 300px;
5
+ border: 1px solid #ccc;
6
+ margin: 5px 0;
7
+ }
8
+
9
+ .sdoc-whiteboard-container.isSelected {
10
+ border: 2px solid rgb(0, 123, 255);
11
+ }
12
+
13
+ .sdoc-whiteboard-title {
14
+ font-size: 14px;
15
+ color: #333;
16
+ text-align: center;
17
+ margin: 5px;
18
+ width: 100%;
19
+ position: absolute;
20
+ top: 0;
21
+ left: 0%;
22
+ z-index: 3;
23
+ }
24
+
25
+ .sdoc-whiteboard-container .iframe-overlay {
26
+ position: absolute;
27
+ top: 0;
28
+ left: 0;
29
+ width: 100%;
30
+ height: 100%;
31
+ cursor: pointer;
32
+ z-index: 2;
33
+ }
34
+
35
+ .sdoc-whiteboard-container .sdoc-whiteboard-element {
36
+ width: 100%;
37
+ height: 100%;
38
+ border: none;
39
+ position: relative;
40
+ z-index: 1;
41
+ }
@@ -0,0 +1,20 @@
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 _menu = _interopRequireDefault(require("./menu"));
10
+ var _plugin = _interopRequireDefault(require("./plugin"));
11
+ var _renderElem = require("./render-elem");
12
+ require("./index.css");
13
+ var WhiteboardPlugin = {
14
+ type: _constants.WHITEBOARD,
15
+ nodeType: 'element',
16
+ editorMenus: [_menu["default"]],
17
+ editorPlugin: _plugin["default"],
18
+ renderElements: [_renderElem.renderWhiteboard]
19
+ };
20
+ var _default = exports["default"] = WhiteboardPlugin;
@@ -0,0 +1,59 @@
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 _constants = require("../../../../constants");
13
+ var _dropdownMenuItem = _interopRequireDefault(require("../../../commons/dropdown-menu-item"));
14
+ var _constants2 = require("../../../constants");
15
+ var _helper = require("../helper");
16
+ var WhiteboardMenu = function WhiteboardMenu(_ref) {
17
+ var editor = _ref.editor,
18
+ readonly = _ref.readonly,
19
+ toggle = _ref.toggle,
20
+ eventBus = _ref.eventBus;
21
+ var disabled = (0, _helper.isInsertWhiteboardMenuDisabled)(editor, readonly);
22
+ var menuConfig = _constants2.MENUS_CONFIG_MAP[_constants2.WHITEBOARD];
23
+ var _useTranslation = (0, _reactI18next.useTranslation)('sdoc-editor'),
24
+ t = _useTranslation.t;
25
+ var onCreateFile = function onCreateFile() {
26
+ (0, _helper.onCreateWhiteboardFile)(editor);
27
+ };
28
+ var openSelectWhiteboardFileDialog = (0, _react.useCallback)(function () {
29
+ eventBus.dispatch(_constants.INTERNAL_EVENT.INSERT_ELEMENT, {
30
+ type: _constants2.ELEMENT_TYPE.WHITEBOARD,
31
+ insertWhiteboard: _helper.insertWhiteboard
32
+ });
33
+ toggle && toggle();
34
+ // eslint-disable-next-line react-hooks/exhaustive-deps
35
+ }, [toggle, eventBus]);
36
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_dropdownMenuItem["default"], {
37
+ disabled: disabled,
38
+ menuConfig: menuConfig,
39
+ className: "pr-2"
40
+ }, !disabled && /*#__PURE__*/_react["default"].createElement("i", {
41
+ className: "sdocfont sdoc-right-slide sdoc-dropdown-item-right-icon"
42
+ })), !disabled && /*#__PURE__*/_react["default"].createElement(_reactstrap.UncontrolledPopover, {
43
+ target: menuConfig.id,
44
+ trigger: "hover",
45
+ className: "sdoc-menu-popover sdoc-dropdown-menu sdoc-sub-dropdown-menu sdoc-insert-whiteboard-menu-popover",
46
+ placement: "right-start",
47
+ hideArrow: true,
48
+ fade: false
49
+ }, /*#__PURE__*/_react["default"].createElement("div", {
50
+ className: "sdoc-insert-whiteboard-menu-popover-container sdoc-dropdown-menu-container"
51
+ }, /*#__PURE__*/_react["default"].createElement("div", {
52
+ className: "sdoc-dropdown-menu-item",
53
+ onClick: openSelectWhiteboardFileDialog
54
+ }, t('Select_Excalidraw_document')), /*#__PURE__*/_react["default"].createElement("div", {
55
+ className: "sdoc-dropdown-menu-item",
56
+ onClick: onCreateFile
57
+ }, t('Create_new_excalidraw')))));
58
+ };
59
+ var _default = exports["default"] = WhiteboardMenu;
@@ -0,0 +1,53 @@
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 _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
9
+ var _react = _interopRequireDefault(require("react"));
10
+ var _slate = require("@seafile/slate");
11
+ var _isHotkey = _interopRequireDefault(require("is-hotkey"));
12
+ var _constants = require("../../constants");
13
+ var _core = require("../../core");
14
+ var _helpers = require("../../toolbar/side-toolbar/helpers");
15
+ var withWhiteboard = function withWhiteboard(editor) {
16
+ var isVoid = editor.isVoid,
17
+ onHotKeyDown = editor.onHotKeyDown;
18
+ var newEditor = editor;
19
+
20
+ // Make whiteboard as void node
21
+ newEditor.isVoid = function (elem) {
22
+ var type = elem.type;
23
+ if (type === _constants.WHITEBOARD) {
24
+ return true;
25
+ }
26
+ return isVoid(elem);
27
+ };
28
+ newEditor.onHotKeyDown = function (event) {
29
+ var _ref = (0, _core.getSelectedNodeEntryByType)(editor, _constants.WHITEBOARD) || [],
30
+ _ref2 = (0, _slicedToArray2["default"])(_ref, 2),
31
+ whiteboardNode = _ref2[0],
32
+ path = _ref2[1];
33
+ if (path) {
34
+ // Insert empty paragraph node after whiteboard when clicking 'enter' on selected whiteboard
35
+ if ((0, _isHotkey["default"])('enter', event)) {
36
+ event.preventDefault();
37
+ var emptyParagraph = (0, _core.generateEmptyElement)(_constants.PARAGRAPH);
38
+ _slate.Transforms.insertNodes(editor, emptyParagraph, {
39
+ at: _slate.Path.next(path)
40
+ });
41
+ var focusPoint = _slate.Editor.end(editor, _slate.Path.next(path));
42
+ (0, _core.focusEditor)(newEditor, focusPoint);
43
+ }
44
+ if ((0, _isHotkey["default"])('mod+c', event)) {
45
+ (0, _helpers.onCopyNode)(editor, whiteboardNode);
46
+ }
47
+ return true;
48
+ }
49
+ return onHotKeyDown && onHotKeyDown(event);
50
+ };
51
+ return newEditor;
52
+ };
53
+ var _default = exports["default"] = withWhiteboard;
@@ -0,0 +1,87 @@
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.renderWhiteboard = renderWhiteboard;
9
+ var _react = _interopRequireWildcard(require("react"));
10
+ var _slateReact = require("@seafile/slate-react");
11
+ var _classnames = _interopRequireDefault(require("classnames"));
12
+ var _constants = require("../../../constants");
13
+ var _context = _interopRequireDefault(require("../../../context"));
14
+ var _eventBus = _interopRequireDefault(require("../../../utils/event-bus"));
15
+ require("./index.css");
16
+ var Whiteboard = function Whiteboard(_ref) {
17
+ var editor = _ref.editor,
18
+ element = _ref.element;
19
+ var file_path = element.file_path,
20
+ repo_id = element.repo_id,
21
+ title = element.title,
22
+ link = element.link;
23
+ var whiteboardRef = (0, _react.useRef)();
24
+ var isSelected = (0, _slateReact.useSelected)();
25
+ (0, _react.useEffect)(function () {
26
+ var handleMessage = function handleMessage(event) {
27
+ var _event$data;
28
+ if (((_event$data = event.data) === null || _event$data === void 0 ? void 0 : _event$data.type) === 'checkSdocParent') {
29
+ var isSdocClass = whiteboardRef === null || whiteboardRef === void 0 ? void 0 : whiteboardRef.current.classList.contains('sdoc-whiteboard-element');
30
+ whiteboardRef === null || whiteboardRef === void 0 ? void 0 : whiteboardRef.current.contentWindow.postMessage({
31
+ type: 'checkSdocParentResult',
32
+ isInSdoc: isSdocClass
33
+ }, '*');
34
+ }
35
+ };
36
+ var handleWindowResize = function handleWindowResize() {
37
+ whiteboardRef === null || whiteboardRef === void 0 ? void 0 : whiteboardRef.current.contentWindow.postMessage({
38
+ type: 'resizeWindowWidth',
39
+ isResize: true
40
+ }, '*');
41
+ };
42
+ var eventBus = _eventBus["default"].getInstance();
43
+ var unsubscribeResizeArticle = eventBus.subscribe(_constants.INTERNAL_EVENT.RESIZE_ARTICLE, handleWindowResize);
44
+ window.addEventListener('message', handleMessage);
45
+ return function () {
46
+ window.removeEventListener('message', handleMessage);
47
+ unsubscribeResizeArticle();
48
+ };
49
+ }, []);
50
+ var handleDoubleClick = function handleDoubleClick(event) {
51
+ event.preventDefault();
52
+ var siteRoot = _context["default"].getSetting('siteRoot');
53
+ var url = "".concat(siteRoot, "lib/").concat(repo_id, "/file").concat(file_path);
54
+ window.open(url, '_blank');
55
+ return;
56
+ };
57
+ return /*#__PURE__*/_react["default"].createElement("div", {
58
+ className: (0, _classnames["default"])('sdoc-whiteboard-container', {
59
+ 'isSelected': isSelected
60
+ }),
61
+ onDoubleClick: handleDoubleClick,
62
+ scrolling: "no"
63
+ }, /*#__PURE__*/_react["default"].createElement("div", {
64
+ className: "sdoc-whiteboard-title"
65
+ }, title), /*#__PURE__*/_react["default"].createElement("iframe", {
66
+ className: "sdoc-whiteboard-element",
67
+ title: title,
68
+ src: link,
69
+ ref: whiteboardRef
70
+ }), /*#__PURE__*/_react["default"].createElement("div", {
71
+ className: "iframe-overlay",
72
+ onDoubleClick: handleDoubleClick
73
+ }));
74
+ };
75
+ function renderWhiteboard(props, editor) {
76
+ var element = props.element,
77
+ children = props.children,
78
+ attributes = props.attributes;
79
+ return /*#__PURE__*/_react["default"].createElement("div", Object.assign({}, attributes, {
80
+ contentEditable: "false",
81
+ suppressContentEditableWarning: true
82
+ }), children, /*#__PURE__*/_react["default"].createElement(Whiteboard, {
83
+ editor: editor,
84
+ element: element,
85
+ contentEditable: "false"
86
+ }));
87
+ }
@@ -229,6 +229,12 @@ var CustomRenderElement = function CustomRenderElement(props) {
229
229
  renderGroup = _GroupPlugin$renderEl[0];
230
230
  return renderGroup(props);
231
231
  }
232
+ case _elementType.WHITEBOARD:
233
+ {
234
+ var _WhiteboardPlugin$ren = (0, _slicedToArray2["default"])(_plugins.WhiteboardPlugin.renderElements, 1),
235
+ renderWhiteboard = _WhiteboardPlugin$ren[0];
236
+ return renderWhiteboard((0, _objectSpread2["default"])({}, props), editor);
237
+ }
232
238
  default:
233
239
  {
234
240
  var _ParagraphPlugin$rend3 = (0, _slicedToArray2["default"])(_plugins.ParagraphPlugin.renderElements, 1),
@@ -20,6 +20,7 @@ var _menu4 = _interopRequireDefault(require("../../../plugins/link/menu"));
20
20
  var _menu5 = _interopRequireDefault(require("../../../plugins/sdoc-link/menu"));
21
21
  var _tableMenu = _interopRequireDefault(require("../../../plugins/table/menu/table-menu"));
22
22
  var _menu6 = _interopRequireDefault(require("../../../plugins/video/menu"));
23
+ var _menu7 = _interopRequireDefault(require("../../../plugins/whiteboard/menu"));
23
24
  require("./index.css");
24
25
  var InsertToolbar = function InsertToolbar(_ref) {
25
26
  var _ref$isRichEditor = _ref.isRichEditor,
@@ -101,7 +102,7 @@ var InsertToolbar = function InsertToolbar(_ref) {
101
102
  style: {
102
103
  maxHeight: window.innerHeight - bottom - 100
103
104
  }
104
- }, /*#__PURE__*/_react["default"].createElement(_menu3["default"], props), /*#__PURE__*/_react["default"].createElement(_tableMenu["default"], props), /*#__PURE__*/_react["default"].createElement(_menu6["default"], props), /*#__PURE__*/_react["default"].createElement(_menu4["default"], props), /*#__PURE__*/_react["default"].createElement(_menu["default"], props), /*#__PURE__*/_react["default"].createElement("div", {
105
+ }, /*#__PURE__*/_react["default"].createElement(_menu3["default"], props), /*#__PURE__*/_react["default"].createElement(_tableMenu["default"], props), /*#__PURE__*/_react["default"].createElement(_menu6["default"], props), /*#__PURE__*/_react["default"].createElement(_menu7["default"], props), /*#__PURE__*/_react["default"].createElement(_menu4["default"], props), /*#__PURE__*/_react["default"].createElement(_menu["default"], props), /*#__PURE__*/_react["default"].createElement("div", {
105
106
  className: "sdoc-dropdown-menu-divider"
106
107
  }), /*#__PURE__*/_react["default"].createElement(_menu5["default"], props), /*#__PURE__*/_react["default"].createElement(_menu2["default"], props))));
107
108
  };
@@ -249,7 +249,7 @@ var getTopValue = exports.getTopValue = function getTopValue(editor, dom, contai
249
249
  return top + offsetY - headerHeight;
250
250
  };
251
251
  var isNotSupportTransform = exports.isNotSupportTransform = function isNotSupportTransform(node) {
252
- if (node.type && [_constants2.CODE_BLOCK, _constants2.TABLE, _constants2.VIDEO].includes(node.type)) {
252
+ if (node.type && [_constants2.CODE_BLOCK, _constants2.TABLE, _constants2.VIDEO, _constants2.WHITEBOARD].includes(node.type)) {
253
253
  return true;
254
254
  }
255
255
  return false;
@@ -5,6 +5,9 @@
5
5
  min-width: 360px;
6
6
  position: relative;
7
7
  right: 0;
8
+ transform: translate(100%);
9
+ opacity: 0;
10
+ transition: transform .3s, opacity .3s;
8
11
  }
9
12
 
10
13
  .sdoc-content-right-panel-wrapper .sdoc-content-right-panel {
@@ -13,3 +16,8 @@
13
16
  overflow: hidden;
14
17
  border-left: 1px solid #d8d8d8;
15
18
  }
19
+
20
+ .sdoc-content-right-panel-wrapper.with-comment {
21
+ transform: translate(0);
22
+ opacity: 1;
23
+ }
@@ -59,6 +59,18 @@ var RightPanel = function RightPanel(_ref) {
59
59
  }, []);
60
60
  (0, _react.useEffect)(function () {
61
61
  var isShowGlobalComments = displayPluginName === 'sdoc-comment' ? true : false;
62
+ var commentBox = document.querySelector('.sdoc-content-right-panel-wrapper');
63
+ if (isShowGlobalComments) {
64
+ var editorEl = document.querySelector('#sdoc-scroll-container');
65
+ commentBox === null || commentBox === void 0 ? void 0 : commentBox.classList.add('with-comment');
66
+ var commentWidth = commentBox === null || commentBox === void 0 ? void 0 : commentBox.offsetWidth;
67
+ editorEl.scrollTo({
68
+ left: commentWidth + 36,
69
+ behavior: 'smooth'
70
+ });
71
+ } else {
72
+ commentBox === null || commentBox === void 0 ? void 0 : commentBox.classList.remove('with-comment');
73
+ }
62
74
  var settings = _localStorageUtils["default"].getItem(_constants.SDOC_STORAGE) || {};
63
75
  _localStorageUtils["default"].setItem(_constants.SDOC_STORAGE, (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, settings), {}, {
64
76
  isShowGlobalComments: isShowGlobalComments
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/sdoc-editor",
3
- "version": "2.0.128",
3
+ "version": "2.0.129-test-0.0.2",
4
4
  "main": "dist/index.js",
5
5
  "scripts": {
6
6
  "test": "jest",
@@ -69,6 +69,5 @@
69
69
  },
70
70
  "publishConfig": {
71
71
  "access": "public"
72
- },
73
- "gitHead": "09b94c721a5b5b52ad8bcbd680a9001acf3f7077"
72
+ }
74
73
  }
package/LICENSE.txt DELETED
@@ -1,13 +0,0 @@
1
- Copyright (c) 2025 Seafile Ltd.
2
-
3
- Licensed under the Apache License, Version 2.0 (the "License");
4
- you may not use this file except in compliance with the License.
5
- You may obtain a copy of the License at
6
-
7
- http://www.apache.org/licenses/LICENSE-2.0
8
-
9
- Unless required by applicable law or agreed to in writing, software
10
- distributed under the License is distributed on an "AS IS" BASIS,
11
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- See the License for the specific language governing permissions and
13
- limitations under the License.