@seafile/sdoc-editor 2.0.129 → 2.0.131-test-0.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.
- package/dist/assets/css/sdoc-editor-plugins.css +1 -0
- package/dist/comment/components/global-comment/index.css +1 -1
- package/dist/constants/index.js +3 -1
- package/dist/editor/sdoc-editor.js +2 -1
- package/dist/extension/commons/insert-element-dialog/index.js +22 -3
- package/dist/extension/commons/select-file-dialog/helpers.js +5 -1
- package/dist/extension/commons/select-file-dialog/index.js +18 -2
- package/dist/extension/commons/select-file-dialog/local-files/index.css +2 -0
- package/dist/extension/commons/select-file-dialog/local-files/index.js +1 -1
- package/dist/extension/constants/element-type.js +2 -1
- package/dist/extension/constants/index.js +9 -3
- package/dist/extension/constants/menus-config.js +6 -2
- package/dist/extension/plugins/index.js +8 -1
- package/dist/extension/plugins/text-style/menu/index.js +1 -1
- package/dist/extension/plugins/whiteboard/helper.js +142 -0
- package/dist/extension/plugins/whiteboard/index.css +41 -0
- package/dist/extension/plugins/whiteboard/index.js +20 -0
- package/dist/extension/plugins/whiteboard/menu/index.js +59 -0
- package/dist/extension/plugins/whiteboard/plugin.js +53 -0
- package/dist/extension/plugins/whiteboard/render-elem.js +87 -0
- package/dist/extension/render/custom-element.js +6 -0
- package/dist/extension/toolbar/header-toolbar/index.js +3 -2
- package/dist/extension/toolbar/header-toolbar/insert-toolbar/index.js +2 -1
- package/dist/extension/toolbar/side-toolbar/helpers.js +1 -1
- package/dist/right-panel/index.css +9 -6
- package/dist/right-panel/index.js +6 -11
- package/package.json +2 -3
- package/LICENSE.txt +0 -13
|
@@ -321,6 +321,6 @@
|
|
|
321
321
|
font-weight: unset;
|
|
322
322
|
}
|
|
323
323
|
|
|
324
|
-
.sdoc-comment-drawer .sdoc-comment-list-container .global-comment-item-detail-wrapper .comment-item:not(:last-child){
|
|
324
|
+
.sdoc-comment-drawer .sdoc-comment-list-container .global-comment-item-detail-wrapper .comment-item:not(:last-child) {
|
|
325
325
|
margin-bottom: 16px;
|
|
326
326
|
}
|
package/dist/constants/index.js
CHANGED
|
@@ -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;
|
|
@@ -288,7 +288,8 @@ var SdocEditor = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
|
288
288
|
updateSlateValue: onValueChange,
|
|
289
289
|
showComment: false
|
|
290
290
|
})), isShowHeaderToolbar && /*#__PURE__*/_react["default"].createElement(_extension.HeaderToolbar, {
|
|
291
|
-
editor: validEditor
|
|
291
|
+
editor: validEditor,
|
|
292
|
+
isEdit: isEdit
|
|
292
293
|
}))), /*#__PURE__*/_react["default"].createElement(_insertElementDialog["default"], {
|
|
293
294
|
editor: validEditor
|
|
294
295
|
}));
|
|
@@ -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
|
-
|
|
70
|
-
|
|
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
|
-
}]),
|
|
149
|
+
}]), TEXT_STYLE_MORE, [
|
|
146
150
|
//
|
|
147
151
|
{
|
|
148
152
|
id: STRIKETHROUGH,
|
|
@@ -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;
|
|
@@ -156,7 +156,7 @@ var TextStyleMenuList = function TextStyleMenuList(_ref) {
|
|
|
156
156
|
tipMessage: t('Reduce_font_size')
|
|
157
157
|
}, /*#__PURE__*/_react["default"].createElement("i", {
|
|
158
158
|
className: "sdocfont sdoc-reduce-font-size"
|
|
159
|
-
}))), idPrefix && ![_constants.DOCUMENT_PLUGIN_EDITOR
|
|
159
|
+
}))), idPrefix && ![_constants.DOCUMENT_PLUGIN_EDITOR].includes(editor.editorType) && /*#__PURE__*/_react["default"].createElement(_commentContextMenu["default"], null), idPrefix && enableSeafileAI && /*#__PURE__*/_react["default"].createElement(_aiMenu.AIContextMenu, {
|
|
160
160
|
isRichEditor: isRichEditor
|
|
161
161
|
}));
|
|
162
162
|
};
|
|
@@ -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),
|
|
@@ -26,10 +26,11 @@ var _insertToolbar = _interopRequireDefault(require("./insert-toolbar"));
|
|
|
26
26
|
var HeaderToolbar = function HeaderToolbar(_ref) {
|
|
27
27
|
var editor = _ref.editor,
|
|
28
28
|
_ref$readonly = _ref.readonly,
|
|
29
|
-
readonly = _ref$readonly === void 0 ? false : _ref$readonly
|
|
29
|
+
readonly = _ref$readonly === void 0 ? false : _ref$readonly,
|
|
30
|
+
isEdit = _ref.isEdit;
|
|
30
31
|
(0, _useSelectionUpdate["default"])();
|
|
31
32
|
var isSelectTableCell = (0, _core.getSelectedNodeByType)(editor, _constants.TABLE_CELL);
|
|
32
|
-
if (_commonUtils.isMobile) {
|
|
33
|
+
if (_commonUtils.isMobile && isEdit) {
|
|
33
34
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
34
35
|
className: "sdoc-editor-toolbar"
|
|
35
36
|
}, /*#__PURE__*/_react["default"].createElement(_commons.MenuGroup, null, /*#__PURE__*/_react["default"].createElement(_historyMenu["default"], {
|
|
@@ -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,9 +5,7 @@
|
|
|
5
5
|
min-width: 360px;
|
|
6
6
|
position: relative;
|
|
7
7
|
right: 0;
|
|
8
|
-
|
|
9
|
-
opacity: 0;
|
|
10
|
-
transition: transform .3s, opacity .3s;
|
|
8
|
+
animation: rightdrawer .3s 1ms;
|
|
11
9
|
}
|
|
12
10
|
|
|
13
11
|
.sdoc-content-right-panel-wrapper .sdoc-content-right-panel {
|
|
@@ -17,7 +15,12 @@
|
|
|
17
15
|
border-left: 1px solid #d8d8d8;
|
|
18
16
|
}
|
|
19
17
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
@keyframes rightdrawer {
|
|
19
|
+
0% {
|
|
20
|
+
transform: translate(100%);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
100% {
|
|
24
|
+
transform: translate(0);
|
|
25
|
+
}
|
|
23
26
|
}
|
|
@@ -60,17 +60,12 @@ var RightPanel = function RightPanel(_ref) {
|
|
|
60
60
|
(0, _react.useEffect)(function () {
|
|
61
61
|
var isShowGlobalComments = displayPluginName === 'sdoc-comment' ? true : false;
|
|
62
62
|
var commentBox = document.querySelector('.sdoc-content-right-panel-wrapper');
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
behavior: 'smooth'
|
|
70
|
-
});
|
|
71
|
-
} else {
|
|
72
|
-
commentBox === null || commentBox === void 0 ? void 0 : commentBox.classList.remove('with-comment');
|
|
73
|
-
}
|
|
63
|
+
var editorEl = document.querySelector('#sdoc-scroll-container');
|
|
64
|
+
var commentWidth = commentBox === null || commentBox === void 0 ? void 0 : commentBox.offsetWidth;
|
|
65
|
+
editorEl.scrollTo({
|
|
66
|
+
left: commentWidth + 36,
|
|
67
|
+
behavior: 'smooth'
|
|
68
|
+
});
|
|
74
69
|
var settings = _localStorageUtils["default"].getItem(_constants.SDOC_STORAGE) || {};
|
|
75
70
|
_localStorageUtils["default"].setItem(_constants.SDOC_STORAGE, (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, settings), {}, {
|
|
76
71
|
isShowGlobalComments: isShowGlobalComments
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seafile/sdoc-editor",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.131-test-0.0.1",
|
|
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": "4d4277b37800557c3a6e7004f5d81d1c9c404959"
|
|
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.
|