@seafile/sdoc-editor 2.0.124 → 2.0.126-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/dropdown-menu.css +0 -1
- package/dist/assets/css/sdoc-editor-plugins.css +1 -0
- package/dist/constants/index.js +3 -1
- package/dist/editor/editable-article.js +5 -1
- package/dist/extension/commons/color-menu/index.css +0 -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 +19 -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 +3 -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/table/menu/table-context-menu/index.css +0 -1
- package/dist/extension/plugins/whiteboard/helper.js +99 -0
- package/dist/extension/plugins/whiteboard/index.css +31 -0
- package/dist/extension/plugins/whiteboard/index.js +20 -0
- package/dist/extension/plugins/whiteboard/menu/index.js +61 -0
- package/dist/extension/plugins/whiteboard/plugin.js +53 -0
- package/dist/extension/plugins/whiteboard/render-elem.js +72 -0
- package/dist/extension/render/custom-element.js +6 -0
- package/dist/extension/toolbar/header-toolbar/insert-toolbar/index.js +2 -1
- package/dist/extension/toolbar/side-toolbar/helpers.js +1 -1
- package/package.json +2 -3
- package/LICENSE.txt +0 -13
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
|
+
TLDRAW_EDITOR: 'tldraw_editor'
|
|
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;
|
|
@@ -72,6 +72,10 @@ var EditableArticle = function EditableArticle(_ref) {
|
|
|
72
72
|
scrollTop = _scrollRef$current.scrollTop,
|
|
73
73
|
clientHeight = _scrollRef$current.clientHeight;
|
|
74
74
|
eventProxy.onKeyDown(event);
|
|
75
|
+
var selection = editor.selection;
|
|
76
|
+
if (!_slate.Range.isCollapsed(selection)) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
75
79
|
if (event.key === 'ArrowLeft') {
|
|
76
80
|
event.preventDefault();
|
|
77
81
|
_slate.Transforms.move(editor, {
|
|
@@ -205,7 +209,7 @@ var EditableArticle = function EditableArticle(_ref) {
|
|
|
205
209
|
}
|
|
206
210
|
|
|
207
211
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
208
|
-
}, [scrollRef]);
|
|
212
|
+
}, [scrollRef, editor]);
|
|
209
213
|
var handleScrollIntoView = (0, _react.useCallback)(function (editor, domRange) {
|
|
210
214
|
try {
|
|
211
215
|
var selection = editor.selection;
|
|
@@ -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_whiteboard_document';
|
|
59
|
+
break;
|
|
56
60
|
default:
|
|
57
61
|
break;
|
|
58
62
|
}
|
|
@@ -60,11 +64,14 @@ var SelectSdocFileDialog = function SelectSdocFileDialog(_ref) {
|
|
|
60
64
|
setCurrentSelectedFile(fileInfo);
|
|
61
65
|
}, []);
|
|
62
66
|
var insertFile = (0, _react.useCallback)(function (fileInfo) {
|
|
67
|
+
console.log(1, fileInfo);
|
|
63
68
|
var _ref2 = insertLinkCallback || {},
|
|
64
69
|
insertFileLinkCallback = _ref2.insertFileLinkCallback,
|
|
65
70
|
insertSdocFileLinkCallback = _ref2.insertSdocFileLinkCallback;
|
|
66
71
|
var _ref3 = insertVideoCallback || {},
|
|
67
72
|
insertVideo = _ref3.insertVideo;
|
|
73
|
+
var _ref4 = insertWhiteboardFile || {},
|
|
74
|
+
insertWhiteboard = _ref4.insertWhiteboard;
|
|
68
75
|
switch (dialogType) {
|
|
69
76
|
case _constants.ELEMENT_TYPE.FILE_LINK:
|
|
70
77
|
insertFileLinkCallback && insertFileLinkCallback(editor, fileInfo.name, fileInfo.file_uuid);
|
|
@@ -82,10 +89,13 @@ var SelectSdocFileDialog = function SelectSdocFileDialog(_ref) {
|
|
|
82
89
|
name: fileInfo.name
|
|
83
90
|
}], [encodedUrl]);
|
|
84
91
|
break;
|
|
92
|
+
case _constants.ELEMENT_TYPE.WHITEBOARD:
|
|
93
|
+
insertWhiteboard && insertWhiteboard(editor, fileInfo.name, fileInfo.path);
|
|
94
|
+
break;
|
|
85
95
|
default:
|
|
86
96
|
break;
|
|
87
97
|
}
|
|
88
|
-
}, [insertLinkCallback, insertVideoCallback, dialogType, editor]);
|
|
98
|
+
}, [insertLinkCallback, insertVideoCallback, insertWhiteboardFile, dialogType, editor]);
|
|
89
99
|
var onSubmit = (0, _react.useCallback)(function () {
|
|
90
100
|
if (!currentSelectedFile) return;
|
|
91
101
|
var file_uuid = currentSelectedFile.file_uuid;
|
|
@@ -98,6 +108,13 @@ var SelectSdocFileDialog = function SelectSdocFileDialog(_ref) {
|
|
|
98
108
|
return;
|
|
99
109
|
}
|
|
100
110
|
|
|
111
|
+
// Insert whiteboard file in sdoc
|
|
112
|
+
if (dialogType === _constants.ELEMENT_TYPE.WHITEBOARD) {
|
|
113
|
+
insertFile(fileInfo);
|
|
114
|
+
closeDialog();
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
|
|
101
118
|
// File has no id
|
|
102
119
|
if (!file_uuid || file_uuid === '') {
|
|
103
120
|
_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;
|
|
@@ -47,6 +47,7 @@ var LocalFiles = function LocalFiles(_ref) {
|
|
|
47
47
|
_useState0 = (0, _slicedToArray2["default"])(_useState9, 2),
|
|
48
48
|
isCurrentLibrary = _useState0[0],
|
|
49
49
|
setIsCurrentLibrary = _useState0[1];
|
|
50
|
+
console.log(1, fileType);
|
|
50
51
|
var collapsedFolder = (0, _react.useCallback)(function (data, indexId) {
|
|
51
52
|
for (var i = 0; i < data.length; i++) {
|
|
52
53
|
var _data$i;
|
|
@@ -160,6 +161,7 @@ var LocalFiles = function LocalFiles(_ref) {
|
|
|
160
161
|
var type = item.type,
|
|
161
162
|
indexId = item.indexId,
|
|
162
163
|
name = item.name;
|
|
164
|
+
console.log(1, type, indexId, name, item);
|
|
163
165
|
// Get file type icon
|
|
164
166
|
var fileTypeIcon = (0, _helpers.parcelFileTypeIcon)(name);
|
|
165
167
|
var result = (_item$fullpath = item.fullpath) === null || _item$fullpath === void 0 ? void 0 : _item$fullpath.split('/').filter(Boolean);
|
|
@@ -194,7 +196,7 @@ var LocalFiles = function LocalFiles(_ref) {
|
|
|
194
196
|
className: "sdoc-folder-children"
|
|
195
197
|
}, ((_item$children = item.children) === null || _item$children === void 0 ? void 0 : _item$children.length) === 0 && /*#__PURE__*/_react["default"].createElement("div", {
|
|
196
198
|
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", {
|
|
199
|
+
}, "(".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
200
|
className: (0, _classnames["default"])('sdoc-file-info', {
|
|
199
201
|
'active': selected
|
|
200
202
|
}),
|
|
@@ -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;
|
|
@@ -0,0 +1,99 @@
|
|
|
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 _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
|
|
10
|
+
var _slate = require("@seafile/slate");
|
|
11
|
+
var _slugid = _interopRequireDefault(require("slugid"));
|
|
12
|
+
var _constants = require("../../../constants");
|
|
13
|
+
var _context = _interopRequireDefault(require("../../../context"));
|
|
14
|
+
var _eventBus = _interopRequireDefault(require("../../../utils/event-bus"));
|
|
15
|
+
var _constants2 = require("../../constants");
|
|
16
|
+
var _core = require("../../core");
|
|
17
|
+
var isInsertWhiteboardMenuDisabled = exports.isInsertWhiteboardMenuDisabled = function isInsertWhiteboardMenuDisabled(editor, readonly) {
|
|
18
|
+
if (readonly) return true;
|
|
19
|
+
var selection = editor.selection;
|
|
20
|
+
if (selection === null) return true;
|
|
21
|
+
if (!_slate.Range.isCollapsed(selection)) return true;
|
|
22
|
+
var _Editor$nodes = _slate.Editor.nodes(editor, {
|
|
23
|
+
match: function match(n) {
|
|
24
|
+
var type = (0, _core.getNodeType)(n);
|
|
25
|
+
if (!type && (0, _core.isTextNode)(n) && n.id) {
|
|
26
|
+
var parentNode = (0, _core.getParentNode)(editor.children, n.id);
|
|
27
|
+
type = (0, _core.getNodeType)(parentNode);
|
|
28
|
+
}
|
|
29
|
+
if (type === _constants2.CODE_BLOCK) return true;
|
|
30
|
+
if (type.startsWith('header')) return true;
|
|
31
|
+
if (type === _constants2.TITLE) return true;
|
|
32
|
+
if (type === _constants2.SUBTITLE) return true;
|
|
33
|
+
if (type === _constants2.LIST_ITEM) return true;
|
|
34
|
+
if (type === _constants2.CHECK_LIST_ITEM) return true;
|
|
35
|
+
if (type === _constants2.MULTI_COLUMN) return true;
|
|
36
|
+
if (type === _constants2.BLOCKQUOTE) return true;
|
|
37
|
+
if (type === _constants2.CALL_OUT) return true;
|
|
38
|
+
if (_slate.Editor.isVoid(editor, n)) return true;
|
|
39
|
+
return false;
|
|
40
|
+
},
|
|
41
|
+
universal: true
|
|
42
|
+
}),
|
|
43
|
+
_Editor$nodes2 = (0, _slicedToArray2["default"])(_Editor$nodes, 1),
|
|
44
|
+
match = _Editor$nodes2[0];
|
|
45
|
+
if (match) return true;
|
|
46
|
+
return false;
|
|
47
|
+
};
|
|
48
|
+
var generateWhiteboardNode = exports.generateWhiteboardNode = function generateWhiteboardNode(repoID) {
|
|
49
|
+
var filename = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
50
|
+
var filePath = arguments.length > 2 ? arguments[2] : undefined;
|
|
51
|
+
var whiteboardNode = {
|
|
52
|
+
id: _slugid["default"].nice(),
|
|
53
|
+
type: _constants2.WHITEBOARD,
|
|
54
|
+
repoID: repoID,
|
|
55
|
+
title: filename,
|
|
56
|
+
filePath: filePath,
|
|
57
|
+
children: [{
|
|
58
|
+
id: _slugid["default"].nice(),
|
|
59
|
+
text: ''
|
|
60
|
+
}]
|
|
61
|
+
};
|
|
62
|
+
return whiteboardNode;
|
|
63
|
+
};
|
|
64
|
+
var insertWhiteboard = exports.insertWhiteboard = function insertWhiteboard(editor, filename, filePath) {
|
|
65
|
+
var _editor$selection;
|
|
66
|
+
if (isInsertWhiteboardMenuDisabled(editor)) return;
|
|
67
|
+
if (editor.selection == null) return;
|
|
68
|
+
var repoID = _context["default"].getSetting('repoID');
|
|
69
|
+
var whiteboardNode = generateWhiteboardNode(repoID, filename, filePath);
|
|
70
|
+
var path = (_editor$selection = editor.selection) === null || _editor$selection === void 0 ? void 0 : _editor$selection.anchor.path;
|
|
71
|
+
var position = 'after';
|
|
72
|
+
if (position === _constants2.INSERT_POSITION.AFTER) {
|
|
73
|
+
_slate.Transforms.insertNodes(editor, whiteboardNode, {
|
|
74
|
+
at: [path[0] + 1]
|
|
75
|
+
});
|
|
76
|
+
var nextPath = _slate.Path.next([path[0] + 1]);
|
|
77
|
+
if (!(0, _core.getNode)(editor, nextPath)) {
|
|
78
|
+
_slate.Transforms.insertNodes(editor, (0, _core.generateDefaultParagraph)(), {
|
|
79
|
+
at: nextPath
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
var endOfFirstNode = _slate.Editor.start(editor, nextPath);
|
|
83
|
+
var range = {
|
|
84
|
+
anchor: endOfFirstNode,
|
|
85
|
+
focus: endOfFirstNode
|
|
86
|
+
};
|
|
87
|
+
(0, _core.focusEditor)(editor, range);
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
var onCreateWhiteboardFile = exports.onCreateWhiteboardFile = function onCreateWhiteboardFile(editor) {
|
|
92
|
+
var eventBus = _eventBus["default"].getInstance();
|
|
93
|
+
var external_props = {
|
|
94
|
+
insertWhiteboard: insertWhiteboard,
|
|
95
|
+
fileType: 'exdraw',
|
|
96
|
+
editor: editor
|
|
97
|
+
};
|
|
98
|
+
eventBus.dispatch(_constants.INTERNAL_EVENT.CREATE_WHITEBOARD_FILE, (0, _objectSpread2["default"])({}, external_props));
|
|
99
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
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: 1px 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: 2;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.sdoc-whiteboard-wrapper * {
|
|
26
|
+
pointer-events: none !important;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.sdoc-whiteboard-wrapper .tldraw-editor-container {
|
|
30
|
+
position: absolute !important;
|
|
31
|
+
}
|
|
@@ -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,61 @@
|
|
|
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
|
+
console.log('create');
|
|
27
|
+
(0, _helper.onCreateWhiteboardFile)(editor);
|
|
28
|
+
};
|
|
29
|
+
var openSelectWhiteboardFileDialog = (0, _react.useCallback)(function () {
|
|
30
|
+
console.log('insert');
|
|
31
|
+
eventBus.dispatch(_constants.INTERNAL_EVENT.INSERT_ELEMENT, {
|
|
32
|
+
type: _constants2.ELEMENT_TYPE.WHITEBOARD,
|
|
33
|
+
insertWhiteboard: _helper.insertWhiteboard
|
|
34
|
+
});
|
|
35
|
+
toggle && toggle();
|
|
36
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
37
|
+
}, [toggle, eventBus]);
|
|
38
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_dropdownMenuItem["default"], {
|
|
39
|
+
disabled: disabled,
|
|
40
|
+
menuConfig: menuConfig,
|
|
41
|
+
className: "pr-2"
|
|
42
|
+
}, !disabled && /*#__PURE__*/_react["default"].createElement("i", {
|
|
43
|
+
className: "sdocfont sdoc-right-slide sdoc-dropdown-item-right-icon"
|
|
44
|
+
})), !disabled && /*#__PURE__*/_react["default"].createElement(_reactstrap.UncontrolledPopover, {
|
|
45
|
+
target: menuConfig.id,
|
|
46
|
+
trigger: "hover",
|
|
47
|
+
className: "sdoc-menu-popover sdoc-dropdown-menu sdoc-sub-dropdown-menu sdoc-insert-whiteboard-menu-popover",
|
|
48
|
+
placement: "right-start",
|
|
49
|
+
hideArrow: true,
|
|
50
|
+
fade: false
|
|
51
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
52
|
+
className: "sdoc-insert-whiteboard-menu-popover-container sdoc-dropdown-menu-container"
|
|
53
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
54
|
+
className: "sdoc-dropdown-menu-item",
|
|
55
|
+
onClick: openSelectWhiteboardFileDialog
|
|
56
|
+
}, t('Upload_local_whiteboard')), /*#__PURE__*/_react["default"].createElement("div", {
|
|
57
|
+
className: "sdoc-dropdown-menu-item",
|
|
58
|
+
onClick: onCreateFile
|
|
59
|
+
}, t('Create_new_whiteboard')))));
|
|
60
|
+
};
|
|
61
|
+
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,72 @@
|
|
|
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 filePath = element.filePath,
|
|
20
|
+
repoID = element.repoID,
|
|
21
|
+
title = element.title;
|
|
22
|
+
var whiteboardRef = (0, _react.useRef)();
|
|
23
|
+
var isSelected = (0, _slateReact.useSelected)();
|
|
24
|
+
var containerId = "whiteboard-".concat(title);
|
|
25
|
+
// Set default whiteboard readonly as true
|
|
26
|
+
var readOnly = true;
|
|
27
|
+
var handleDoubleClick = function handleDoubleClick(event) {
|
|
28
|
+
event.preventDefault();
|
|
29
|
+
// const siteRoot = window.app.config.siteRoot;
|
|
30
|
+
var siteRoot = _context["default"].getSetting('siteRoot');
|
|
31
|
+
var url = "".concat(siteRoot, "lib/").concat(repoID, "/file").concat(filePath);
|
|
32
|
+
window.open(url, '_blank');
|
|
33
|
+
return;
|
|
34
|
+
};
|
|
35
|
+
(0, _react.useEffect)(function () {
|
|
36
|
+
var eventBus = _eventBus["default"].getInstance();
|
|
37
|
+
eventBus.dispatch(_constants.INTERNAL_EVENT.TLDRAW_EDITOR, {
|
|
38
|
+
containerId: containerId,
|
|
39
|
+
props: {
|
|
40
|
+
filePath: filePath,
|
|
41
|
+
repoID: repoID,
|
|
42
|
+
readOnly: readOnly
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}, [filePath, repoID, readOnly, containerId]);
|
|
46
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
47
|
+
className: (0, _classnames["default"])('sdoc-whiteboard-container', {
|
|
48
|
+
'isSelected': isSelected
|
|
49
|
+
}),
|
|
50
|
+
ref: whiteboardRef,
|
|
51
|
+
onDoubleClick: handleDoubleClick,
|
|
52
|
+
scrolling: "no"
|
|
53
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
54
|
+
className: "sdoc-whiteboard-title"
|
|
55
|
+
}, title), /*#__PURE__*/_react["default"].createElement("div", {
|
|
56
|
+
id: containerId,
|
|
57
|
+
className: "sdoc-whiteboard-wrapper"
|
|
58
|
+
}));
|
|
59
|
+
};
|
|
60
|
+
function renderWhiteboard(props, editor) {
|
|
61
|
+
var element = props.element,
|
|
62
|
+
children = props.children,
|
|
63
|
+
attributes = props.attributes;
|
|
64
|
+
return /*#__PURE__*/_react["default"].createElement("div", Object.assign({}, attributes, {
|
|
65
|
+
contentEditable: "false",
|
|
66
|
+
suppressContentEditableWarning: true
|
|
67
|
+
}), children, /*#__PURE__*/_react["default"].createElement(Whiteboard, {
|
|
68
|
+
editor: editor,
|
|
69
|
+
element: element,
|
|
70
|
+
contentEditable: "false"
|
|
71
|
+
}));
|
|
72
|
+
}
|
|
@@ -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),
|
|
@@ -21,6 +21,7 @@ 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
23
|
require("./index.css");
|
|
24
|
+
var _menu7 = _interopRequireDefault(require("../../../plugins/whiteboard/menu"));
|
|
24
25
|
var InsertToolbar = function InsertToolbar(_ref) {
|
|
25
26
|
var _ref$isRichEditor = _ref.isRichEditor,
|
|
26
27
|
isRichEditor = _ref$isRichEditor === void 0 ? true : _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;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seafile/sdoc-editor",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.126-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": "9b30ab7dd281cd78875a7a366e98b517aa4b47b9"
|
|
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.
|