@seafile/sdoc-editor 1.0.176 → 1.0.178
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/api/seafile-api.js +12 -0
- package/dist/basic-sdk/assets/images/sdoc-ask-ai.png +0 -0
- package/dist/basic-sdk/comment/components/comment-editor.js +0 -1
- package/dist/basic-sdk/comment/components/comment-item-wrapper.js +19 -10
- package/dist/basic-sdk/comment/components/comment-list.css +2 -6
- package/dist/basic-sdk/comment/components/comment-list.js +29 -39
- package/dist/basic-sdk/comment/components/editor-comment.js +13 -2
- package/dist/basic-sdk/constants/index.js +2 -1
- package/dist/basic-sdk/extension/commons/file-insert-dialog/index.js +28 -18
- package/dist/basic-sdk/extension/commons/file-insert-dialog/style.css +12 -9
- package/dist/basic-sdk/extension/commons/insert-element-dialog/index.js +10 -0
- package/dist/basic-sdk/extension/commons/select-file-dialog/helpers.js +9 -2
- package/dist/basic-sdk/extension/commons/select-file-dialog/index.css +115 -0
- package/dist/basic-sdk/extension/commons/select-file-dialog/index.js +68 -5
- package/dist/basic-sdk/extension/commons/select-file-dialog/local-files/index.css +42 -0
- package/dist/basic-sdk/extension/commons/select-file-dialog/local-files/index.js +49 -12
- package/dist/basic-sdk/extension/constants/element-type.js +2 -1
- package/dist/basic-sdk/extension/constants/menus-config.js +1 -1
- package/dist/basic-sdk/extension/core/queries/index.js +12 -1
- package/dist/basic-sdk/extension/plugins/ai/ai-icon/index.js +26 -0
- package/dist/basic-sdk/extension/plugins/ai/ai-icon/style.css +22 -0
- package/dist/basic-sdk/extension/plugins/ai/ai-menu/ai-context-menu.js +39 -0
- package/dist/basic-sdk/extension/plugins/ai/ai-menu/ai-dropdown-menu.js +35 -0
- package/dist/basic-sdk/extension/plugins/ai/ai-menu/index.js +20 -0
- package/dist/basic-sdk/extension/plugins/ai/ai-menu/menu-item.js +62 -0
- package/dist/basic-sdk/extension/plugins/ai/ai-menu/style.css +3 -0
- package/dist/basic-sdk/extension/plugins/ai/ai-module/adjust-sub-menu.js +40 -0
- package/dist/basic-sdk/extension/plugins/ai/ai-module/index.js +452 -0
- package/dist/basic-sdk/extension/plugins/ai/ai-module/lang-sub-menu.js +55 -0
- package/dist/basic-sdk/extension/plugins/ai/ai-module/style.css +104 -0
- package/dist/basic-sdk/extension/plugins/ai/ai-module/tip-dialog.js +32 -0
- package/dist/basic-sdk/extension/plugins/ai/constants/index.js +128 -0
- package/dist/basic-sdk/extension/plugins/ai/index.js +1 -0
- package/dist/basic-sdk/extension/plugins/blockquote/plugin.js +2 -2
- package/dist/basic-sdk/extension/plugins/image/helpers.js +25 -16
- package/dist/basic-sdk/extension/plugins/image/hover-menu/index.js +1 -1
- package/dist/basic-sdk/extension/plugins/sdoc-link/helpers.js +7 -2
- package/dist/basic-sdk/extension/plugins/sdoc-link/render/render-elem.css +19 -3
- package/dist/basic-sdk/extension/plugins/sdoc-link/render/render-elem.js +8 -3
- package/dist/basic-sdk/extension/plugins/text-style/menu/comemnt-editor-menu.js +7 -11
- package/dist/basic-sdk/extension/plugins/text-style/menu/index.js +7 -17
- package/dist/basic-sdk/extension/plugins/video/helpers.js +1 -0
- package/dist/basic-sdk/extension/plugins/video/plugin.js +26 -1
- package/dist/basic-sdk/extension/toolbar/side-toolbar/index.js +7 -0
- package/dist/basic-sdk/extension/toolbar/side-toolbar/side-menu.js +4 -1
- package/dist/components/doc-operations/revision-operations/more-revision-operations/index.js +4 -0
- package/dist/components/doc-operations/revision-operations/revisions/index.js +13 -0
- package/dist/constants/index.js +3 -1
- package/dist/context.js +8 -0
- package/package.json +1 -1
- package/public/locales/cs/sdoc-editor.json +23 -1
- package/public/locales/de/sdoc-editor.json +23 -1
- package/public/locales/en/sdoc-editor.json +23 -1
- package/public/locales/es/sdoc-editor.json +23 -1
- package/public/locales/es_AR/sdoc-editor.json +23 -1
- package/public/locales/es_MX/sdoc-editor.json +23 -1
- package/public/locales/fr/sdoc-editor.json +23 -1
- package/public/locales/it/sdoc-editor.json +23 -1
- package/public/locales/ru/sdoc-editor.json +24 -2
- package/public/locales/zh_CN/sdoc-editor.json +23 -1
- package/public/media/sdoc-editor-font/iconfont.css +548 -0
- package/public/media/sdoc-editor-font/iconfont.eot +0 -0
- package/public/media/sdoc-editor-font/iconfont.svg +18 -0
- package/public/media/sdoc-editor-font/iconfont.ttf +0 -0
- package/public/media/sdoc-editor-font/iconfont.woff +0 -0
- package/public/media/sdoc-editor-font/iconfont.woff2 +0 -0
- package/public/media/sdoc-editor-font.css +42 -6
package/dist/api/seafile-api.js
CHANGED
|
@@ -146,6 +146,10 @@ class SeafileAPI {
|
|
|
146
146
|
const url = 'api/v2.1/seadoc/search-filename/' + docUuid + '/?query=' + query + '&page=' + page + '&per_page=' + per_page;
|
|
147
147
|
return this.req.get(url);
|
|
148
148
|
}
|
|
149
|
+
searchFilesByFilename(docUuid, query, page, per_page, search_type) {
|
|
150
|
+
const url = 'api/v2.1/seadoc/search-filename/' + docUuid + '/?query=' + query + '&page=' + page + '&per_page=' + per_page + '&search_type=' + search_type;
|
|
151
|
+
return this.req.get(url);
|
|
152
|
+
}
|
|
149
153
|
|
|
150
154
|
// participants
|
|
151
155
|
listParticipants(docUuid) {
|
|
@@ -193,5 +197,13 @@ class SeafileAPI {
|
|
|
193
197
|
const url = `/api/v2.1/seadoc/notifications/${docUuid}/`;
|
|
194
198
|
return this.req.put(url);
|
|
195
199
|
}
|
|
200
|
+
aiTranslate(docUuid, text, lang) {
|
|
201
|
+
const url = '/api/v2.1/ai/translate/?file_uuid=' + docUuid;
|
|
202
|
+
let form = new FormData();
|
|
203
|
+
form.append('text', text);
|
|
204
|
+
form.append('lang', lang);
|
|
205
|
+
form.append('file_uuid', docUuid);
|
|
206
|
+
return this.req.post(url, form);
|
|
207
|
+
}
|
|
196
208
|
}
|
|
197
209
|
var _default = exports.default = SeafileAPI;
|
|
Binary file
|
|
@@ -30,7 +30,9 @@ const CommentItemWrapper = _ref => {
|
|
|
30
30
|
updateScrollPosition,
|
|
31
31
|
hiddenComment,
|
|
32
32
|
setCurrentCommentGroup,
|
|
33
|
-
onCommentClick
|
|
33
|
+
onCommentClick,
|
|
34
|
+
isEmptyComment,
|
|
35
|
+
addNewComment
|
|
34
36
|
} = _ref;
|
|
35
37
|
const listRef = (0, _react.useRef)(null);
|
|
36
38
|
const {
|
|
@@ -38,7 +40,7 @@ const CommentItemWrapper = _ref => {
|
|
|
38
40
|
} = (0, _useCommentContext.useCommentContext)();
|
|
39
41
|
const scrollRef = (0, _react.useRef)(document.querySelector('.sdoc-scroll-container'));
|
|
40
42
|
const [isShowDeleteDialog, setIsShowDeleteDialog] = (0, _react.useState)(false);
|
|
41
|
-
const commentOpToolsId = `commentOpTools_${comment.id}`;
|
|
43
|
+
const commentOpToolsId = `commentOpTools_${comment === null || comment === void 0 ? void 0 : comment.id}`;
|
|
42
44
|
const deleteComment = (0, _react.useCallback)(async commentId => {
|
|
43
45
|
await _context.default.deleteComment(commentId);
|
|
44
46
|
const {
|
|
@@ -249,12 +251,11 @@ const CommentItemWrapper = _ref => {
|
|
|
249
251
|
}, [isActive]);
|
|
250
252
|
const className = (0, _classnames.default)('comment-ui-container', {
|
|
251
253
|
'active': isActive,
|
|
252
|
-
'sdoc-resolved': comment.resolved,
|
|
254
|
+
'sdoc-resolved': comment === null || comment === void 0 ? void 0 : comment.resolved,
|
|
253
255
|
'd-flex flex-column': element,
|
|
254
256
|
'global-comment-item-detail-wrapper': isGlobalComment,
|
|
255
257
|
'comment-item-detail-wrapper': !isGlobalComment
|
|
256
258
|
});
|
|
257
|
-
const tip = comment.resolved ? 'Reopen_discussion' : 'Enter_reply_shift_Enter_for_new_line_Enter_to_send';
|
|
258
259
|
const handleScrollToArticle = (0, _react.useCallback)(e => {
|
|
259
260
|
e.stopPropagation();
|
|
260
261
|
const dom = _slateReact.ReactEditor.toDOMNode(editor, element);
|
|
@@ -265,7 +266,7 @@ const CommentItemWrapper = _ref => {
|
|
|
265
266
|
});
|
|
266
267
|
}, [editor, element, scrollRef]);
|
|
267
268
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
268
|
-
id: `comment-item-wrapper_${comment.id}`,
|
|
269
|
+
id: `comment-item-wrapper_${comment === null || comment === void 0 ? void 0 : comment.id}`,
|
|
269
270
|
className: className,
|
|
270
271
|
onClick: onItemClick
|
|
271
272
|
}, element && /*#__PURE__*/_react.default.createElement("div", {
|
|
@@ -275,7 +276,7 @@ const CommentItemWrapper = _ref => {
|
|
|
275
276
|
className: "sdocfont sdoc-comment-quote mr-2"
|
|
276
277
|
}), /*#__PURE__*/_react.default.createElement("div", {
|
|
277
278
|
className: "comment-item-selected-text"
|
|
278
|
-
}, _slate.Node.string(element))), /*#__PURE__*/_react.default.createElement("div", {
|
|
279
|
+
}, _slate.Node.string(element))), !isEmptyComment && /*#__PURE__*/_react.default.createElement("div", {
|
|
279
280
|
ref: listRef,
|
|
280
281
|
className: "comment-item-list"
|
|
281
282
|
}, /*#__PURE__*/_react.default.createElement(_commentItemContent.default, {
|
|
@@ -297,11 +298,19 @@ const CommentItemWrapper = _ref => {
|
|
|
297
298
|
updateReply
|
|
298
299
|
};
|
|
299
300
|
return /*#__PURE__*/_react.default.createElement(_commentItemReply.default, props);
|
|
300
|
-
})), !isGlobalComment &&
|
|
301
|
-
className: "sdoc-reply-wrapper"
|
|
302
|
-
|
|
301
|
+
})), !isGlobalComment && /*#__PURE__*/_react.default.createElement("div", {
|
|
302
|
+
className: "sdoc-reply-wrapper",
|
|
303
|
+
style: {
|
|
304
|
+
paddingTop: isEmptyComment ? '16px' : ''
|
|
305
|
+
}
|
|
306
|
+
}, isEmptyComment && /*#__PURE__*/_react.default.createElement(_commentEditor.default, {
|
|
307
|
+
type: "comment",
|
|
308
|
+
placeholder: 'Enter_reply_shift_Enter_for_new_line_Enter_to_send',
|
|
309
|
+
insertContent: addNewComment,
|
|
310
|
+
hiddenComment: hiddenComment
|
|
311
|
+
}), !isEmptyComment && /*#__PURE__*/_react.default.createElement(_commentEditor.default, {
|
|
303
312
|
type: "reply",
|
|
304
|
-
placeholder:
|
|
313
|
+
placeholder: 'Enter_reply_shift_Enter_for_new_line_Enter_to_send',
|
|
305
314
|
insertContent: insertContent,
|
|
306
315
|
hiddenComment: hiddenComment
|
|
307
316
|
})), isShowDeleteDialog && isActive && /*#__PURE__*/_react.default.createElement(_commentDeletePopover.default, {
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
.sdoc-comment-list-container .comment-ui-container {
|
|
12
|
-
background-color: rgba(255, 255, 255
|
|
12
|
+
background-color: rgba(255, 255, 255);
|
|
13
13
|
margin-bottom: 0px;
|
|
14
14
|
box-shadow: 0 1px 3px rgba(0, 0, 0, .15), 0 4px 8px 3px rgba(0, 0, 0, .15);
|
|
15
15
|
padding: 16px;
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
.sdoc-comment-list-container .comment-ui-container.active {
|
|
38
38
|
position: relative;
|
|
39
39
|
left: -5px;
|
|
40
|
-
background: rgba(255, 255, 255,
|
|
40
|
+
background: rgba(255, 255, 255, 1);
|
|
41
41
|
box-shadow: 0 1px 3px rgba(0, 0, 0, .15), 0 4px 8px 3px rgba(0, 0, 0, .15);
|
|
42
42
|
}
|
|
43
43
|
|
|
@@ -340,10 +340,6 @@
|
|
|
340
340
|
justify-content: flex-end;
|
|
341
341
|
}
|
|
342
342
|
|
|
343
|
-
.sdoc-reply-wrapper {
|
|
344
|
-
padding: 0 10px;
|
|
345
|
-
}
|
|
346
|
-
|
|
347
343
|
.sdoc-doc-comment-editor-container.sdoc-comment-list-container .comment-ui-container {
|
|
348
344
|
padding-left: 10px;
|
|
349
345
|
padding-right: 10px;
|
|
@@ -11,24 +11,23 @@ var _dayjs = _interopRequireDefault(require("dayjs"));
|
|
|
11
11
|
var _context = _interopRequireDefault(require("../../../context"));
|
|
12
12
|
var _useSelectionPosition = require("../../hooks/use-selection-position");
|
|
13
13
|
var _useCommentContext = require("../hooks/comment-hooks/use-comment-context");
|
|
14
|
-
var _commentEditor = _interopRequireDefault(require("./comment-editor"));
|
|
15
14
|
var _commentItemWrapper = _interopRequireDefault(require("./comment-item-wrapper"));
|
|
16
15
|
var _commentItemCollapseWrapper = _interopRequireDefault(require("./comment-item-collapse-wrapper"));
|
|
17
16
|
require("./comment-list.css");
|
|
18
17
|
const CommentList = _ref => {
|
|
19
|
-
var _topLevelComment$repl, _topLevelComment$repl2;
|
|
20
18
|
let {
|
|
21
19
|
editor,
|
|
22
|
-
comments,
|
|
20
|
+
comments = [],
|
|
21
|
+
commentDetail = {},
|
|
23
22
|
activeElement,
|
|
24
|
-
|
|
23
|
+
isShowCommentDetail,
|
|
24
|
+
onSetCommentDetail,
|
|
25
|
+
deleteUnseenNotifications
|
|
25
26
|
} = _ref;
|
|
26
|
-
const commentRef = (0, _react.useRef)(null);
|
|
27
27
|
const position = (0, _useSelectionPosition.useCommentListPosition)(activeElement);
|
|
28
28
|
const {
|
|
29
29
|
dispatch
|
|
30
30
|
} = (0, _useCommentContext.useCommentContext)();
|
|
31
|
-
const [isShowCommentDetail, setIsShowCommentDetail] = (0, _react.useState)(false);
|
|
32
31
|
const insertComment = (0, _react.useCallback)(async (elementId, comment) => {
|
|
33
32
|
const res = await _context.default.insertComment(comment);
|
|
34
33
|
const {
|
|
@@ -48,7 +47,8 @@ const CommentList = _ref => {
|
|
|
48
47
|
comment: newComment
|
|
49
48
|
}
|
|
50
49
|
});
|
|
51
|
-
|
|
50
|
+
onSetCommentDetail(newComment);
|
|
51
|
+
}, [dispatch, onSetCommentDetail]);
|
|
52
52
|
const insertContent = (0, _react.useCallback)(content => {
|
|
53
53
|
const user = _context.default.getUserInfo();
|
|
54
54
|
const elementId = activeElement === null || activeElement === void 0 ? void 0 : activeElement.id;
|
|
@@ -63,47 +63,37 @@ const CommentList = _ref => {
|
|
|
63
63
|
updated_at: time
|
|
64
64
|
};
|
|
65
65
|
insertComment(elementId, comment);
|
|
66
|
-
setIsShowCommentDetail(true);
|
|
67
66
|
}, [insertComment, activeElement === null || activeElement === void 0 ? void 0 : activeElement.id]);
|
|
68
|
-
const setCurrentCommentGroup = (0, _react.useCallback)(() => {
|
|
69
|
-
setIsShowCommentDetail(true);
|
|
70
|
-
}, []);
|
|
71
|
-
const topLevelComment = (comments === null || comments === void 0 ? void 0 : comments.length) > 0 ? comments[0] : {};
|
|
72
|
-
const replyCount = topLevelComment === null || topLevelComment === void 0 ? void 0 : (_topLevelComment$repl = topLevelComment.replies) === null || _topLevelComment$repl === void 0 ? void 0 : _topLevelComment$repl.length;
|
|
73
|
-
const latestReply = ((_topLevelComment$repl2 = topLevelComment.replies) === null || _topLevelComment$repl2 === void 0 ? void 0 : _topLevelComment$repl2.length) > 0 ? topLevelComment.replies[topLevelComment.replies.length - 1] : null;
|
|
74
67
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
75
|
-
ref: commentRef,
|
|
76
68
|
id: "sdoc-comment-list-container",
|
|
77
69
|
className: "sdoc-comment-list-container sdoc-comment-list-container-popover",
|
|
78
70
|
style: {
|
|
79
71
|
top: position.y,
|
|
80
72
|
width: '300px'
|
|
81
73
|
}
|
|
82
|
-
}, !isShowCommentDetail &&
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
topLevelComment: topLevelComment
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
74
|
+
}, !isShowCommentDetail && comments.map(comment => {
|
|
75
|
+
var _topLevelComment$repl, _topLevelComment$repl2;
|
|
76
|
+
const topLevelComment = comment || {};
|
|
77
|
+
const replyCount = topLevelComment === null || topLevelComment === void 0 ? void 0 : (_topLevelComment$repl = topLevelComment.replies) === null || _topLevelComment$repl === void 0 ? void 0 : _topLevelComment$repl.length;
|
|
78
|
+
const latestReply = ((_topLevelComment$repl2 = topLevelComment.replies) === null || _topLevelComment$repl2 === void 0 ? void 0 : _topLevelComment$repl2.length) > 0 ? topLevelComment.replies[topLevelComment.replies.length - 1] : null;
|
|
79
|
+
return /*#__PURE__*/_react.default.createElement(_commentItemCollapseWrapper.default, {
|
|
80
|
+
key: topLevelComment.id,
|
|
81
|
+
editor: editor,
|
|
82
|
+
topLevelComment: topLevelComment,
|
|
83
|
+
replyCount: replyCount,
|
|
84
|
+
latestReply: latestReply,
|
|
85
|
+
setCurrentCommentGroup: () => {
|
|
86
|
+
deleteUnseenNotifications && deleteUnseenNotifications(topLevelComment);
|
|
87
|
+
onSetCommentDetail(topLevelComment);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
}), isShowCommentDetail && /*#__PURE__*/_react.default.createElement("div", {
|
|
98
91
|
className: "comment-list"
|
|
99
|
-
},
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
isActive: true
|
|
105
|
-
};
|
|
106
|
-
return /*#__PURE__*/_react.default.createElement(_commentItemWrapper.default, props);
|
|
92
|
+
}, /*#__PURE__*/_react.default.createElement(_commentItemWrapper.default, {
|
|
93
|
+
comment: commentDetail,
|
|
94
|
+
isActive: true,
|
|
95
|
+
isEmptyComment: Object.keys(commentDetail).length ? false : true,
|
|
96
|
+
addNewComment: insertContent
|
|
107
97
|
})));
|
|
108
98
|
};
|
|
109
99
|
var _default = exports.default = CommentList;
|
|
@@ -32,6 +32,8 @@ const EditorComment = _ref => {
|
|
|
32
32
|
const [activeElement, setActiveElement] = (0, _react.useState)(null); // The slate node currently activated by clicking
|
|
33
33
|
const [comments, setComments] = (0, _react.useState)([]);
|
|
34
34
|
const [isShowComments, setIsShowComments] = (0, _react.useState)(false);
|
|
35
|
+
const [isShowCommentDetail, setIsShowCommentDetail] = (0, _react.useState)(true);
|
|
36
|
+
const [commentDetail, setCommentDetail] = (0, _react.useState)({});
|
|
35
37
|
const onAddCommentToggle = (0, _react.useCallback)(event => {
|
|
36
38
|
event.stopPropagation();
|
|
37
39
|
let activeElement = currentSelectionElement;
|
|
@@ -41,6 +43,8 @@ const EditorComment = _ref => {
|
|
|
41
43
|
}
|
|
42
44
|
setActiveElement(activeElement);
|
|
43
45
|
setIsShowComments(true);
|
|
46
|
+
setIsShowCommentDetail(true);
|
|
47
|
+
setCommentDetail({});
|
|
44
48
|
}, [currentSelectionElement]);
|
|
45
49
|
const onSelectElement = (0, _react.useCallback)(elementId => {
|
|
46
50
|
const activeElement = (0, _index.getCommentElementById)(elementId, editor);
|
|
@@ -48,9 +52,15 @@ const EditorComment = _ref => {
|
|
|
48
52
|
const unresolvedComments = element_comments_map[elementId].filter(item => !item.resolved);
|
|
49
53
|
setComments(unresolvedComments);
|
|
50
54
|
setIsShowComments(true);
|
|
55
|
+
setIsShowCommentDetail(false);
|
|
51
56
|
}, [editor, element_comments_map]);
|
|
57
|
+
const onSetCommentDetail = (0, _react.useCallback)(comment => {
|
|
58
|
+
setCommentDetail(comment);
|
|
59
|
+
setIsShowCommentDetail(true);
|
|
60
|
+
}, []);
|
|
52
61
|
const hiddenComment = (0, _react.useCallback)(() => {
|
|
53
62
|
setComments([]);
|
|
63
|
+
setCommentDetail({});
|
|
54
64
|
setIsShowComments(false);
|
|
55
65
|
}, []);
|
|
56
66
|
|
|
@@ -117,8 +127,9 @@ const EditorComment = _ref => {
|
|
|
117
127
|
editor: editor,
|
|
118
128
|
comments: comments,
|
|
119
129
|
activeElement: activeElement,
|
|
120
|
-
|
|
121
|
-
|
|
130
|
+
isShowCommentDetail: isShowCommentDetail,
|
|
131
|
+
commentDetail: commentDetail,
|
|
132
|
+
onSetCommentDetail: onSetCommentDetail,
|
|
122
133
|
deleteUnseenNotifications: deleteUnseenNotifications
|
|
123
134
|
})));
|
|
124
135
|
};
|
|
@@ -48,7 +48,8 @@ const INTERNAL_EVENT = exports.INTERNAL_EVENT = {
|
|
|
48
48
|
CLOSE_FILE_INSET_DIALOG: 'close_file_insert_dialog',
|
|
49
49
|
RESIZE_ARTICLE: 'resize_article',
|
|
50
50
|
ON_VIDEO_FILES_UPLOADED: 'on_video_files_uploaded',
|
|
51
|
-
RELOAD_COMMENT: 'reload_comment'
|
|
51
|
+
RELOAD_COMMENT: 'reload_comment',
|
|
52
|
+
ASK_AI: 'ask_ai'
|
|
52
53
|
};
|
|
53
54
|
const REVISION_DIFF_KEY = exports.REVISION_DIFF_KEY = 'diff';
|
|
54
55
|
const REVISION_DIFF_VALUE = exports.REVISION_DIFF_VALUE = '1';
|
|
@@ -16,9 +16,11 @@ var _utils = require("../../../../utils");
|
|
|
16
16
|
var _constants = require("../../../../constants");
|
|
17
17
|
var _eventBus = _interopRequireDefault(require("../../../utils/event-bus"));
|
|
18
18
|
var _constants2 = require("../../../constants");
|
|
19
|
+
var _debounce = _interopRequireDefault(require("../../../utils/debounce"));
|
|
19
20
|
var _constants3 = require("../../constants");
|
|
20
21
|
var _toast = _interopRequireDefault(require("../../../../components/toast"));
|
|
21
22
|
var _helpers = require("../../plugins/sdoc-link/helpers");
|
|
23
|
+
var _helpers2 = require("../select-file-dialog/helpers");
|
|
22
24
|
require("./style.css");
|
|
23
25
|
const FileLinkInsertDialog = _ref => {
|
|
24
26
|
let {
|
|
@@ -39,6 +41,7 @@ const FileLinkInsertDialog = _ref => {
|
|
|
39
41
|
});
|
|
40
42
|
const [newFileName, setNewFileName] = (0, _react.useState)('');
|
|
41
43
|
const [header, setHeader] = (0, _react.useState)(t('Recent_visited'));
|
|
44
|
+
const [hiddenMoreMenu, setHiddenMoreMenu] = (0, _react.useState)(false);
|
|
42
45
|
const deleteInputAndInsertText = (0, _react.useCallback)(function () {
|
|
43
46
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
44
47
|
args[_key] = arguments[_key];
|
|
@@ -98,6 +101,10 @@ const FileLinkInsertDialog = _ref => {
|
|
|
98
101
|
let files = _utils.LocalStorage.getItem(getItemKey) || [];
|
|
99
102
|
if (isCalculatedByFiles) {
|
|
100
103
|
const newFiles = (0, _utils.getMaximumCapacity)(files);
|
|
104
|
+
// Can accommodate all without showing more operations
|
|
105
|
+
if (files.length <= newFiles.length) {
|
|
106
|
+
setHiddenMoreMenu(true);
|
|
107
|
+
}
|
|
101
108
|
files = newFiles;
|
|
102
109
|
}
|
|
103
110
|
setFiles(files);
|
|
@@ -144,34 +151,30 @@ const FileLinkInsertDialog = _ref => {
|
|
|
144
151
|
unsubscribeCloseDialog();
|
|
145
152
|
};
|
|
146
153
|
}, [closeDialog, editor, eventBus, files, getPosition, onClick, onKeydown, onScroll]);
|
|
147
|
-
const onSearch = (0, _react.useCallback)(async searchText => {
|
|
154
|
+
const onSearch = (0, _react.useCallback)((0, _debounce.default)(async searchText => {
|
|
148
155
|
// Show history files when search is empty
|
|
149
156
|
if (searchText.trim().length === 0) {
|
|
150
157
|
setHeader(t('Recent_visited'));
|
|
158
|
+
setHiddenMoreMenu(true);
|
|
151
159
|
setNewFileName('');
|
|
152
160
|
getHistoryFiles();
|
|
153
161
|
return;
|
|
154
162
|
}
|
|
163
|
+
setNewFileName(searchText);
|
|
155
164
|
|
|
156
165
|
// Cannot be found if the search is less than three characters.
|
|
157
166
|
if ((0, _utils.isEnglish)(searchText.trim()) && searchText.length < 3) {
|
|
158
167
|
setFiles([]);
|
|
159
168
|
setHeader(t('Enter_more_character_start_search'));
|
|
160
|
-
setNewFileName(searchText);
|
|
161
169
|
return;
|
|
162
170
|
}
|
|
163
171
|
try {
|
|
164
172
|
var _res$data;
|
|
165
|
-
const res = await _context.default.
|
|
173
|
+
const res = await _context.default.getSearchFilesByFilename(searchText, 1, 10, 'sdoc');
|
|
166
174
|
if (res !== null && res !== void 0 && (_res$data = res.data) !== null && _res$data !== void 0 && _res$data.results) {
|
|
167
175
|
let newFiles = res.data.results;
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
setNewFileName(searchText);
|
|
171
|
-
} else {
|
|
172
|
-
setHeader('');
|
|
173
|
-
setNewFileName('');
|
|
174
|
-
}
|
|
176
|
+
setHeader(t(newFiles.length === 0 ? 'No_results' : 'Link_to_file'));
|
|
177
|
+
setHiddenMoreMenu(true);
|
|
175
178
|
setFiles(newFiles);
|
|
176
179
|
return;
|
|
177
180
|
}
|
|
@@ -179,7 +182,7 @@ const FileLinkInsertDialog = _ref => {
|
|
|
179
182
|
_toast.default.danger(error.message);
|
|
180
183
|
}
|
|
181
184
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
182
|
-
}, []);
|
|
185
|
+
}, 50), []);
|
|
183
186
|
(0, _react.useEffect)(() => {
|
|
184
187
|
if (!(element !== null && element !== void 0 && element.children)) return;
|
|
185
188
|
// No search on first load
|
|
@@ -210,10 +213,11 @@ const FileLinkInsertDialog = _ref => {
|
|
|
210
213
|
e.stopPropagation();
|
|
211
214
|
(0, _helpers.removeTempInput)(editor, element);
|
|
212
215
|
const eventBus = _eventBus.default.getInstance();
|
|
213
|
-
const createName = newFileName.trim();
|
|
216
|
+
const createName = newFileName.trim() || t('Create_a_new_file');
|
|
214
217
|
const external_props = {
|
|
215
218
|
insertSdocFileLink: _helpers.insertSdocFileLink,
|
|
216
|
-
editor
|
|
219
|
+
editor,
|
|
220
|
+
noShowDialog: true
|
|
217
221
|
};
|
|
218
222
|
eventBus.dispatch(_constants.EXTERNAL_EVENT.CREATE_SDOC_FILE, {
|
|
219
223
|
newFileName: createName,
|
|
@@ -221,7 +225,7 @@ const FileLinkInsertDialog = _ref => {
|
|
|
221
225
|
});
|
|
222
226
|
}, [editor, element, newFileName]);
|
|
223
227
|
const createFileTipDefault = (0, _react.useMemo)(() => {
|
|
224
|
-
return '
|
|
228
|
+
return 'Create_a_new_file';
|
|
225
229
|
}, []);
|
|
226
230
|
const createFileName = (0, _react.useMemo)(() => {
|
|
227
231
|
return `${newFileName}.sdoc`;
|
|
@@ -246,15 +250,21 @@ const FileLinkInsertDialog = _ref => {
|
|
|
246
250
|
onClick: () => {
|
|
247
251
|
onSelect(item);
|
|
248
252
|
}
|
|
249
|
-
}, /*#__PURE__*/_react.default.createElement("
|
|
250
|
-
className: "file-item-
|
|
253
|
+
}, /*#__PURE__*/_react.default.createElement("img", {
|
|
254
|
+
className: "file-item-img",
|
|
255
|
+
src: (0, _helpers2.sdocFileIcon)(),
|
|
256
|
+
alt: ""
|
|
251
257
|
}), /*#__PURE__*/_react.default.createElement("span", {
|
|
252
258
|
className: "file-item-name"
|
|
253
259
|
}, item.name));
|
|
254
|
-
}), /*#__PURE__*/_react.default.createElement("div", {
|
|
260
|
+
}), !hiddenMoreMenu && /*#__PURE__*/_react.default.createElement("div", {
|
|
255
261
|
className: "sdoc-history-files-item",
|
|
256
262
|
onClick: onShowMore
|
|
257
|
-
},
|
|
263
|
+
}, /*#__PURE__*/_react.default.createElement("i", {
|
|
264
|
+
className: "file-item-more sdocfont sdoc-more"
|
|
265
|
+
}), /*#__PURE__*/_react.default.createElement("span", {
|
|
266
|
+
className: "more-text"
|
|
267
|
+
}, t('More')))), /*#__PURE__*/_react.default.createElement("div", {
|
|
258
268
|
className: "sdoc-history-files-add",
|
|
259
269
|
onClick: onCreateFile
|
|
260
270
|
}, /*#__PURE__*/_react.default.createElement("i", {
|
|
@@ -43,15 +43,9 @@
|
|
|
43
43
|
align-items: flex-start;
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
.sdoc-history-files-content .sdoc-history-files .
|
|
47
|
-
|
|
48
|
-
margin-right:
|
|
49
|
-
color: #ff9800;
|
|
50
|
-
width: 20px;
|
|
51
|
-
height: 20px;
|
|
52
|
-
display: flex;
|
|
53
|
-
justify-content: center;
|
|
54
|
-
align-items: center;
|
|
46
|
+
.sdoc-history-files-content .sdoc-history-files .file-item-img {
|
|
47
|
+
width: 21.6px;
|
|
48
|
+
margin-right: 6px;
|
|
55
49
|
}
|
|
56
50
|
|
|
57
51
|
.sdoc-history-files-content .sdoc-history-files .sdoc-history-files-item .file-item-name {
|
|
@@ -60,6 +54,15 @@
|
|
|
60
54
|
overflow: hidden;
|
|
61
55
|
}
|
|
62
56
|
|
|
57
|
+
.sdoc-history-files-content .sdoc-history-files .sdoc-history-files-item .file-item-more {
|
|
58
|
+
font-size: 16px;
|
|
59
|
+
margin-left: 2px;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.sdoc-history-files-content .sdoc-history-files .sdoc-history-files-item .more-text {
|
|
63
|
+
margin-left: 10px;
|
|
64
|
+
}
|
|
65
|
+
|
|
63
66
|
.sdoc-history-files-content .sdoc-history-files .sdoc-history-files-item:hover {
|
|
64
67
|
background-color: #f5f5f5;
|
|
65
68
|
}
|
|
@@ -22,6 +22,7 @@ var _index3 = _interopRequireDefault(require("../file-insert-dialog/index.js"));
|
|
|
22
22
|
var _index4 = _interopRequireDefault(require("../../../../components/toast/index.js"));
|
|
23
23
|
var _index5 = require("../../plugins/video/constants/index.js");
|
|
24
24
|
var _constants3 = require("../../../../basic-sdk/constants");
|
|
25
|
+
var _index6 = _interopRequireDefault(require("../../plugins/ai/ai-module/index.js"));
|
|
25
26
|
const InsertElementDialog = _ref => {
|
|
26
27
|
let {
|
|
27
28
|
editor
|
|
@@ -55,6 +56,7 @@ const InsertElementDialog = _ref => {
|
|
|
55
56
|
duration: 3
|
|
56
57
|
});
|
|
57
58
|
}, 0);
|
|
59
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
58
60
|
}, []);
|
|
59
61
|
const onVideoFileChanged = (0, _react.useCallback)(event => {
|
|
60
62
|
const files = event.target.files;
|
|
@@ -209,6 +211,14 @@ const InsertElementDialog = _ref => {
|
|
|
209
211
|
closeDialog: closeDialog
|
|
210
212
|
});
|
|
211
213
|
}
|
|
214
|
+
case _constants2.ELEMENT_TYPE.ASK_AI:
|
|
215
|
+
{
|
|
216
|
+
return /*#__PURE__*/_react.default.createElement(_index6.default, {
|
|
217
|
+
element: slateNode,
|
|
218
|
+
editor: editor,
|
|
219
|
+
closeModule: closeDialog
|
|
220
|
+
});
|
|
221
|
+
}
|
|
212
222
|
default:
|
|
213
223
|
{
|
|
214
224
|
return null;
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
3
4
|
Object.defineProperty(exports, "__esModule", {
|
|
4
5
|
value: true
|
|
5
6
|
});
|
|
6
|
-
exports.addDataToTree = void 0;
|
|
7
|
+
exports.sdocFileIcon = exports.addDataToTree = void 0;
|
|
8
|
+
var _context = _interopRequireDefault(require("../../../../context"));
|
|
7
9
|
const addDataToTree = (treeData, indexId, childrenData, path) => {
|
|
8
10
|
for (let i = 0; i < treeData.length; i++) {
|
|
9
11
|
var _treeData$i;
|
|
@@ -21,4 +23,9 @@ const addDataToTree = (treeData, indexId, childrenData, path) => {
|
|
|
21
23
|
}
|
|
22
24
|
return treeData;
|
|
23
25
|
};
|
|
24
|
-
exports.addDataToTree = addDataToTree;
|
|
26
|
+
exports.addDataToTree = addDataToTree;
|
|
27
|
+
const sdocFileIcon = () => {
|
|
28
|
+
const server = _context.default.getSetting('serviceUrl');
|
|
29
|
+
return `${server}/media/img/file/256/sdoc.png`;
|
|
30
|
+
};
|
|
31
|
+
exports.sdocFileIcon = sdocFileIcon;
|
|
@@ -18,3 +18,118 @@
|
|
|
18
18
|
background-color: #FF8000;
|
|
19
19
|
border-color: #FF8000;
|
|
20
20
|
}
|
|
21
|
+
|
|
22
|
+
.sdoc-file-select-dialog .modal-header-container {
|
|
23
|
+
display: flex;
|
|
24
|
+
position: relative;
|
|
25
|
+
justify-content: space-between;
|
|
26
|
+
align-items: center;
|
|
27
|
+
width: 100%;
|
|
28
|
+
height: 57px;
|
|
29
|
+
padding: 16px;
|
|
30
|
+
border-bottom: 1px solid #e9ecef;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.modal-title-container {
|
|
34
|
+
flex: 0 1 auto;
|
|
35
|
+
white-space: nowrap;
|
|
36
|
+
position: relative;
|
|
37
|
+
display: flex;
|
|
38
|
+
align-items: center;
|
|
39
|
+
justify-content: center;
|
|
40
|
+
margin: auto;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.search-container {
|
|
44
|
+
display: flex;
|
|
45
|
+
flex: 1;
|
|
46
|
+
align-items: center;
|
|
47
|
+
justify-content: flex-end;
|
|
48
|
+
margin-right: 8px;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.sdoc-close-dialog {
|
|
52
|
+
display: flex;
|
|
53
|
+
align-items: center;
|
|
54
|
+
justify-content: center;
|
|
55
|
+
width: 28px;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.search-container .search-icon-container .sdoc-find-replace,
|
|
59
|
+
.modal-header-container .sdoc-close1 {
|
|
60
|
+
font-size: 16px;
|
|
61
|
+
color: #666666;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.search-container .search-icon-container .sdoc-find-replace:hover,
|
|
65
|
+
.modal-header-container .sdoc-close1:hover {
|
|
66
|
+
background-color: #EFEFEF;
|
|
67
|
+
border-radius: 3px;
|
|
68
|
+
height: 28px;
|
|
69
|
+
width: 28px;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.sdoc-files-search-popover{
|
|
73
|
+
display: flex;
|
|
74
|
+
align-items: center;
|
|
75
|
+
justify-content: center;
|
|
76
|
+
width: 28px;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.sdoc-files-search-popover-container {
|
|
80
|
+
display: flex;
|
|
81
|
+
justify-content: center;
|
|
82
|
+
align-items: center;
|
|
83
|
+
width: 200px;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.sdoc-search-wrapper {
|
|
87
|
+
position: relative;
|
|
88
|
+
display: flex;
|
|
89
|
+
align-items: center;
|
|
90
|
+
width: 100%;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.sdoc-search-input {
|
|
94
|
+
flex: 1;
|
|
95
|
+
height: 28px;
|
|
96
|
+
padding: 0 25px;
|
|
97
|
+
line-height: 28px;
|
|
98
|
+
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.sdoc-search-input::placeholder {
|
|
102
|
+
color: #868E96;
|
|
103
|
+
font-size: 14px;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.sdoc-files-search-popover-container .sdoc-search-wrapper .sdoc-close,
|
|
107
|
+
.sdoc-files-search-popover-container .sdoc-search-wrapper .sdoc-search {
|
|
108
|
+
display: flex;
|
|
109
|
+
align-items: center;
|
|
110
|
+
justify-content: center;
|
|
111
|
+
width: 20px;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.sdoc-files-search-popover-container .sdoc-search-wrapper .sdoc-close1,
|
|
115
|
+
.sdoc-files-search-popover-container .sdoc-search-wrapper .sdoc-find-replace {
|
|
116
|
+
color: #666666;
|
|
117
|
+
font-size: 14px;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.sdoc-files-search-popover-container .sdoc-search-wrapper .sdoc-close1:hover {
|
|
121
|
+
background-color: #EFEFEF;
|
|
122
|
+
border-radius: 3px;
|
|
123
|
+
height: 20px;
|
|
124
|
+
width: 20px;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.sdoc-files-search-popover-container .sdoc-search-wrapper .sdoc-search {
|
|
128
|
+
position: absolute;
|
|
129
|
+
left: 4px;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.sdoc-files-search-popover-container .sdoc-search-wrapper .sdoc-close {
|
|
133
|
+
position: absolute;
|
|
134
|
+
right: 4px;
|
|
135
|
+
}
|