@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
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.OPERATION_TYPES = exports.OPERATION_MENUS_CONFIG = exports.LANG_MENU_CONFIG = exports.AI_RESULT_TYPES = exports.AI_MIN_HEIGHT = void 0;
|
|
7
|
+
const OPERATION_TYPES = exports.OPERATION_TYPES = {
|
|
8
|
+
DEFAULT: 'default',
|
|
9
|
+
CONTINUATION: 'continuation',
|
|
10
|
+
MORE_DETAILS: 'more_details',
|
|
11
|
+
MORE_CONCISE: 'more_concise',
|
|
12
|
+
MORE_VIVID: 'more_vivid',
|
|
13
|
+
TRANSLATE: 'translate'
|
|
14
|
+
};
|
|
15
|
+
const OPERATION_MENUS_CONFIG = exports.OPERATION_MENUS_CONFIG = {
|
|
16
|
+
CONTINUATION: {
|
|
17
|
+
id: 'CONTINUATION',
|
|
18
|
+
text: 'Continuation',
|
|
19
|
+
iconClass: 'sdocfont sdoc-continue-writing',
|
|
20
|
+
type: 'continuation'
|
|
21
|
+
},
|
|
22
|
+
MORE_DETAILS: {
|
|
23
|
+
id: 'MORE_DETAILS',
|
|
24
|
+
text: 'More_details',
|
|
25
|
+
iconClass: 'sdocfont sdoc-adjust',
|
|
26
|
+
type: 'more_details'
|
|
27
|
+
},
|
|
28
|
+
MORE_CONCISE: {
|
|
29
|
+
id: 'MORE_CONCISE',
|
|
30
|
+
text: 'More_concise',
|
|
31
|
+
iconClass: 'sdocfont sdoc-adjust',
|
|
32
|
+
type: 'more_concise'
|
|
33
|
+
},
|
|
34
|
+
MORE_VIVID: {
|
|
35
|
+
id: 'MORE_VIVID',
|
|
36
|
+
text: 'More_vivid',
|
|
37
|
+
iconClass: 'sdocfont sdoc-adjust',
|
|
38
|
+
type: 'more_vivid'
|
|
39
|
+
},
|
|
40
|
+
TRANSLATE: {
|
|
41
|
+
id: 'TRANSLATE',
|
|
42
|
+
text: 'Translate',
|
|
43
|
+
iconClass: 'sdocfont sdoc-ai-translate',
|
|
44
|
+
type: 'translate'
|
|
45
|
+
},
|
|
46
|
+
ADJUSTMENT: {
|
|
47
|
+
id: 'ADJUSTMENT',
|
|
48
|
+
text: 'Adjustment',
|
|
49
|
+
iconClass: 'sdocfont sdoc-adjust',
|
|
50
|
+
type: 'adjustment'
|
|
51
|
+
},
|
|
52
|
+
INSERT_BELOW: {
|
|
53
|
+
id: 'INSERT_BELOW',
|
|
54
|
+
text: 'Insert_below',
|
|
55
|
+
iconClass: 'sdocfont sdoc-insert-below',
|
|
56
|
+
type: 'insert_below'
|
|
57
|
+
},
|
|
58
|
+
REPLACE: {
|
|
59
|
+
id: 'REPLACE',
|
|
60
|
+
text: 'Replace',
|
|
61
|
+
iconClass: 'sdocfont sdoc-replace',
|
|
62
|
+
type: 'replace'
|
|
63
|
+
},
|
|
64
|
+
TRY_AGAIN: {
|
|
65
|
+
id: 'TRY_AGAIN',
|
|
66
|
+
text: 'Try_again',
|
|
67
|
+
iconClass: 'sdocfont sdoc-try-again',
|
|
68
|
+
type: 'try_again'
|
|
69
|
+
},
|
|
70
|
+
COPY: {
|
|
71
|
+
id: 'COPY',
|
|
72
|
+
text: 'Copy',
|
|
73
|
+
iconClass: 'sdocfont sdoc-copy',
|
|
74
|
+
type: 'copy'
|
|
75
|
+
},
|
|
76
|
+
DEPRECATION: {
|
|
77
|
+
id: 'DEPRECATION',
|
|
78
|
+
text: 'Deprecation',
|
|
79
|
+
iconClass: 'sdocfont sdoc-delete',
|
|
80
|
+
type: 'deprecation'
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
const AI_RESULT_TYPES = exports.AI_RESULT_TYPES = {
|
|
84
|
+
continuation: true,
|
|
85
|
+
mode_details: true,
|
|
86
|
+
more_concise: true,
|
|
87
|
+
MORE_VIVID: true,
|
|
88
|
+
TRANSLATE: true
|
|
89
|
+
};
|
|
90
|
+
const LANG_MENU_CONFIG = exports.LANG_MENU_CONFIG = {
|
|
91
|
+
EN: {
|
|
92
|
+
id: 'en',
|
|
93
|
+
type: 'en',
|
|
94
|
+
text: 'English',
|
|
95
|
+
iconClass: 'sdocfont sdoc-ai-translate'
|
|
96
|
+
},
|
|
97
|
+
ZH_CN: {
|
|
98
|
+
id: 'zh-cn',
|
|
99
|
+
type: 'zh-cn',
|
|
100
|
+
text: 'Chinese',
|
|
101
|
+
iconClass: 'sdocfont sdoc-ai-translate'
|
|
102
|
+
},
|
|
103
|
+
'ZH-CN': {
|
|
104
|
+
id: 'zh-cn',
|
|
105
|
+
type: 'en',
|
|
106
|
+
text: 'Chinese',
|
|
107
|
+
iconClass: 'sdocfont sdoc-ai-translate'
|
|
108
|
+
},
|
|
109
|
+
DE: {
|
|
110
|
+
id: 'de',
|
|
111
|
+
type: 'de',
|
|
112
|
+
text: 'German',
|
|
113
|
+
iconClass: 'sdocfont sdoc-ai-translate'
|
|
114
|
+
},
|
|
115
|
+
FR: {
|
|
116
|
+
id: 'fr',
|
|
117
|
+
type: 'fr',
|
|
118
|
+
text: 'French',
|
|
119
|
+
iconClass: 'sdocfont sdoc-ai-translate'
|
|
120
|
+
},
|
|
121
|
+
RU: {
|
|
122
|
+
id: 'ru',
|
|
123
|
+
type: 'ru',
|
|
124
|
+
text: 'Russian',
|
|
125
|
+
iconClass: 'sdocfont sdoc-ai-translate'
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
const AI_MIN_HEIGHT = exports.AI_MIN_HEIGHT = 474;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
|
@@ -26,13 +26,13 @@ const withBlockquote = editor => {
|
|
|
26
26
|
});
|
|
27
27
|
if (!quoteBlockEntry) return insertBreak();
|
|
28
28
|
const [currentLineEntry] = _slate.Editor.nodes(newEditor, {
|
|
29
|
-
match: n => _slate.Element.isElement(n) &&
|
|
29
|
+
match: n => _slate.Element.isElement(n) && [_constants.PARAGRAPH, _constants.HEADER1, _constants.HEADER2, _constants.HEADER3, _constants.HEADER4, _constants.HEADER5, _constants.HEADER6, _constants.TITLE, _constants.SUBTITLE].includes(n.type),
|
|
30
30
|
mode: 'lowest'
|
|
31
31
|
});
|
|
32
32
|
// Exit blockquote when current line is empty
|
|
33
33
|
const isAtEnd = currentLineEntry[1].slice(-1)[0] === quoteBlockEntry[0].children.length - 1;
|
|
34
34
|
if (isAtEnd) {
|
|
35
|
-
const isEmptyLine = !(currentLineEntry && _slate.Editor.string(newEditor, currentLineEntry[1]).length);
|
|
35
|
+
const isEmptyLine = !(currentLineEntry && _slate.Editor.string(newEditor, currentLineEntry[1]).length) && !(0, _core.isContainsVoidElement)(currentLineEntry[0]);
|
|
36
36
|
if (isEmptyLine) {
|
|
37
37
|
const nextPath = _slate.Path.next(quoteBlockEntry[1]);
|
|
38
38
|
_slate.Transforms.moveNodes(newEditor, {
|
|
@@ -89,22 +89,31 @@ const insertImage = function (editor, srcList, selection) {
|
|
|
89
89
|
_slate.Transforms.insertNodes(editor, imageNode, {
|
|
90
90
|
at: validSelection
|
|
91
91
|
});
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
92
|
+
|
|
93
|
+
// BLOCKQUOTE and CALL_OUT use inline images
|
|
94
|
+
let imageType = _constants2.IMAGE_BLOCK;
|
|
95
|
+
const [topNode] = _slate.Editor.node(editor, [aboveNodeEntry[1][0]]);
|
|
96
|
+
if ([_constants2.BLOCKQUOTE, _constants2.CALL_OUT].includes(topNode === null || topNode === void 0 ? void 0 : topNode.type)) {
|
|
97
|
+
imageType = '';
|
|
98
|
+
}
|
|
99
|
+
if (imageType === _constants2.IMAGE_BLOCK) {
|
|
100
|
+
_slate.Transforms.setNodes(editor, {
|
|
101
|
+
type: imageType
|
|
102
|
+
}, {
|
|
103
|
+
at: validSelection
|
|
104
|
+
});
|
|
105
|
+
const nodePath = [aboveNodeEntry[1][0]];
|
|
106
|
+
const nextPath = _slate.Path.next(nodePath);
|
|
107
|
+
_slate.Transforms.insertNodes(editor, (0, _core.generateDefaultParagraph)(), {
|
|
108
|
+
at: nextPath
|
|
109
|
+
});
|
|
110
|
+
const endOfFirstNode = _slate.Editor.start(editor, nextPath);
|
|
111
|
+
const range = {
|
|
112
|
+
anchor: endOfFirstNode,
|
|
113
|
+
focus: endOfFirstNode
|
|
114
|
+
};
|
|
115
|
+
(0, _core.focusEditor)(editor, range);
|
|
116
|
+
}
|
|
108
117
|
return;
|
|
109
118
|
}
|
|
110
119
|
_slate.Transforms.insertNodes(editor, imageNodes, {
|
|
@@ -165,7 +165,7 @@ const ImageHoverMenu = _ref => {
|
|
|
165
165
|
style: menuPosition
|
|
166
166
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
167
167
|
className: "hover-menu-container"
|
|
168
|
-
},
|
|
168
|
+
}, ![_constants2.TABLE, _constants2.BLOCKQUOTE, _constants2.CALL_OUT].includes(type) && !readonly && /*#__PURE__*/_react.default.createElement("span", {
|
|
169
169
|
className: "op-group-item"
|
|
170
170
|
}, /*#__PURE__*/_react.default.createElement("span", {
|
|
171
171
|
role: "button",
|
|
@@ -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.unwrapLinkNode = exports.removeTempInput = exports.removeShortCutSymbol = exports.onCopySdocLinkNode = exports.isTriggeredByShortcut = exports.isMenuDisabled = exports.insertTextWhenRemoveFileNameCollector = exports.insertTempInput = exports.insertSdocFileLink = exports.getUrl = exports.getType = exports.getNewFileListData = exports.getFileSearchInputEntry = exports.getBeforeText = exports.generateSdocFileNode = void 0;
|
|
7
|
+
exports.unwrapLinkNode = exports.sdocFileIcon = exports.removeTempInput = exports.removeShortCutSymbol = exports.onCopySdocLinkNode = exports.isTriggeredByShortcut = exports.isMenuDisabled = exports.insertTextWhenRemoveFileNameCollector = exports.insertTempInput = exports.insertSdocFileLink = exports.getUrl = exports.getType = exports.getNewFileListData = exports.getFileSearchInputEntry = exports.getBeforeText = exports.generateSdocFileNode = void 0;
|
|
8
8
|
var _slateReact = require("@seafile/slate-react");
|
|
9
9
|
var _slate = require("@seafile/slate");
|
|
10
10
|
var _slugid = _interopRequireDefault(require("slugid"));
|
|
@@ -273,4 +273,9 @@ const insertTextWhenRemoveFileNameCollector = (editor, searchInputNode) => {
|
|
|
273
273
|
});
|
|
274
274
|
removeTempInput(editor, searchInputNode);
|
|
275
275
|
};
|
|
276
|
-
exports.insertTextWhenRemoveFileNameCollector = insertTextWhenRemoveFileNameCollector;
|
|
276
|
+
exports.insertTextWhenRemoveFileNameCollector = insertTextWhenRemoveFileNameCollector;
|
|
277
|
+
const sdocFileIcon = () => {
|
|
278
|
+
const server = _context.default.getSetting('serviceUrl');
|
|
279
|
+
return `${server}/media/img/file/256/sdoc.png`;
|
|
280
|
+
};
|
|
281
|
+
exports.sdocFileIcon = sdocFileIcon;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
.sdoc-file-render:hover {
|
|
2
|
-
background-color: #e5e5e5
|
|
2
|
+
background-color: #e5e5e5;
|
|
3
|
+
padding: 3px 0;
|
|
3
4
|
}
|
|
4
5
|
|
|
5
6
|
.sdoc-file-card-link {
|
|
@@ -25,13 +26,28 @@
|
|
|
25
26
|
|
|
26
27
|
.sdoc-file-card-link .sdoc-file-link-icon {
|
|
27
28
|
position: absolute;
|
|
28
|
-
top:
|
|
29
|
+
top: 12px;
|
|
29
30
|
left: 12px;
|
|
30
31
|
}
|
|
31
32
|
|
|
33
|
+
.sdoc-file-render:not(.sdoc-file-card-link) .sdoc-file-link-icon .file-link-img {
|
|
34
|
+
width: 21.6px;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.sdoc-file-card-link .sdoc-file-link-icon .file-link-img {
|
|
38
|
+
width: 26px;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.sdoc-file-render .sdoc-file-text-link.sdoc-no-file-link-icon a {
|
|
42
|
+
font-weight: bold;
|
|
43
|
+
text-decoration: underline;
|
|
44
|
+
text-decoration-thickness: 2px;
|
|
45
|
+
color: #ff9800;
|
|
46
|
+
}
|
|
47
|
+
|
|
32
48
|
.sdoc-file-card-link .sdoc-file-text-link {
|
|
33
49
|
position: absolute;
|
|
34
|
-
top:
|
|
50
|
+
top: 14px;
|
|
35
51
|
left: 42px;
|
|
36
52
|
}
|
|
37
53
|
|
|
@@ -9,6 +9,7 @@ exports.default = void 0;
|
|
|
9
9
|
var _react = _interopRequireWildcard(require("react"));
|
|
10
10
|
var _slate = require("@seafile/slate");
|
|
11
11
|
var _slateReact = require("@seafile/slate-react");
|
|
12
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
12
13
|
var _useScrollContext = require("../../../../hooks/use-scroll-context");
|
|
13
14
|
var _helpers = require("../helpers");
|
|
14
15
|
var _hoverMenu = _interopRequireDefault(require("../hover-menu"));
|
|
@@ -138,14 +139,18 @@ const SdocFileLink = _ref => {
|
|
|
138
139
|
}, [_constants2.SDOC_LINK_TYPE.ICON_LINK, _constants2.SDOC_LINK_TYPE.CARD_LINK].includes(element.display_type) && /*#__PURE__*/_react.default.createElement("span", {
|
|
139
140
|
className: "sdoc-file-link-icon",
|
|
140
141
|
style: style
|
|
141
|
-
}, element.type !== _elementType.WIKI_LINK && /*#__PURE__*/_react.default.createElement("
|
|
142
|
-
className: "
|
|
142
|
+
}, element.type !== _elementType.WIKI_LINK && /*#__PURE__*/_react.default.createElement("img", {
|
|
143
|
+
className: "file-link-img",
|
|
144
|
+
src: (0, _helpers.sdocFileIcon)(),
|
|
145
|
+
alt: ""
|
|
143
146
|
}), element.type === _elementType.WIKI_LINK && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, icon && /*#__PURE__*/_react.default.createElement("span", null, icon), !icon && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, isDir ? /*#__PURE__*/_react.default.createElement("span", {
|
|
144
147
|
className: "sf3-font sf3-font-files2"
|
|
145
148
|
}) : /*#__PURE__*/_react.default.createElement("span", {
|
|
146
149
|
className: "sf3-font sf3-font-file"
|
|
147
150
|
})))), /*#__PURE__*/_react.default.createElement("span", {
|
|
148
|
-
className: 'sdoc-file-text-link',
|
|
151
|
+
className: (0, _classnames.default)('sdoc-file-text-link', {
|
|
152
|
+
'sdoc-no-file-link-icon': ![_constants2.SDOC_LINK_TYPE.ICON_LINK, _constants2.SDOC_LINK_TYPE.CARD_LINK].includes(element.display_type)
|
|
153
|
+
}),
|
|
149
154
|
style: style
|
|
150
155
|
}, /*#__PURE__*/_react.default.createElement("a", {
|
|
151
156
|
href: url,
|
|
@@ -12,20 +12,14 @@ var _core = require("../../../core");
|
|
|
12
12
|
var _commons = require("../../../commons");
|
|
13
13
|
var _helpers = require("../helpers");
|
|
14
14
|
var _menusConfig = require("../../../constants/menus-config");
|
|
15
|
-
const
|
|
16
|
-
let {
|
|
17
|
-
id
|
|
18
|
-
} = _ref;
|
|
19
|
-
return [_menusConfig.BOLD, _menusConfig.ITALIC].includes(id);
|
|
20
|
-
};
|
|
21
|
-
const CommentEditorTextStyleMenuList = _ref2 => {
|
|
15
|
+
const CommentEditorTextStyleMenuList = _ref => {
|
|
22
16
|
let {
|
|
23
17
|
editor,
|
|
24
18
|
isRichEditor,
|
|
25
19
|
className,
|
|
26
20
|
idPrefix,
|
|
27
21
|
readonly
|
|
28
|
-
} =
|
|
22
|
+
} = _ref;
|
|
29
23
|
const isActive = (0, _react.useCallback)(type => {
|
|
30
24
|
const isMark = (0, _helpers.getValue)(editor, type);
|
|
31
25
|
return !!isMark;
|
|
@@ -50,8 +44,10 @@ const CommentEditorTextStyleMenuList = _ref2 => {
|
|
|
50
44
|
(0, _core.focusEditor)(editor);
|
|
51
45
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
52
46
|
}, [editor]);
|
|
53
|
-
const getTextStyleList = (0, _react.useCallback)(
|
|
54
|
-
|
|
47
|
+
const getTextStyleList = (0, _react.useCallback)(() => {
|
|
48
|
+
const styleMenus = _constants.MENUS_CONFIG_MAP[_constants.TEXT_STYLE];
|
|
49
|
+
const commentMenus = styleMenus.filter(item => [_menusConfig.BOLD, _menusConfig.ITALIC].includes(item.id));
|
|
50
|
+
return commentMenus.map(item => {
|
|
55
51
|
let itemProps = {
|
|
56
52
|
isRichEditor,
|
|
57
53
|
className,
|
|
@@ -68,7 +64,7 @@ const CommentEditorTextStyleMenuList = _ref2 => {
|
|
|
68
64
|
|
|
69
65
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
70
66
|
}, [editor, readonly]);
|
|
71
|
-
const list = getTextStyleList(
|
|
67
|
+
const list = getTextStyleList();
|
|
72
68
|
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, list.map((itemProps, index) => /*#__PURE__*/_react.default.createElement(_commons.MenuItem, Object.assign({
|
|
73
69
|
key: index
|
|
74
70
|
}, itemProps))));
|
|
@@ -17,15 +17,8 @@ var _fontSizeScale = _interopRequireDefault(require("../../font/menu/font-size/f
|
|
|
17
17
|
var _helpers2 = require("../helpers");
|
|
18
18
|
var _useColorContext = require("../../../../hooks/use-color-context");
|
|
19
19
|
var _mouseEvent = require("../../../../utils/mouse-event");
|
|
20
|
-
var
|
|
21
|
-
|
|
22
|
-
const filterFontTypes = _ref => {
|
|
23
|
-
let {
|
|
24
|
-
id
|
|
25
|
-
} = _ref;
|
|
26
|
-
return [_menusConfig.BOLD, _menusConfig.ITALIC].includes(id);
|
|
27
|
-
};
|
|
28
|
-
const TextStyleMenuList = _ref2 => {
|
|
20
|
+
var _aiMenu = require("../../ai/ai-menu");
|
|
21
|
+
const TextStyleMenuList = _ref => {
|
|
29
22
|
let {
|
|
30
23
|
editor,
|
|
31
24
|
t,
|
|
@@ -33,10 +26,9 @@ const TextStyleMenuList = _ref2 => {
|
|
|
33
26
|
className,
|
|
34
27
|
idPrefix,
|
|
35
28
|
readonly
|
|
36
|
-
} =
|
|
29
|
+
} = _ref;
|
|
37
30
|
let selectedFontSize = (0, _helpers.getFontSize)(editor);
|
|
38
31
|
let selectedFontSizeValue = selectedFontSize;
|
|
39
|
-
const isCommentEditor = editor.editorType === _constants2.COMMENT_EDITOR;
|
|
40
32
|
const {
|
|
41
33
|
lastUsedFontColor,
|
|
42
34
|
updateLastUsedFontColor,
|
|
@@ -114,17 +106,13 @@ const TextStyleMenuList = _ref2 => {
|
|
|
114
106
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
115
107
|
}, [editor, lastUsedFontColor, lastUsedHighlightColor, readonly]);
|
|
116
108
|
let list = getTextStyleList(_constants.TEXT_STYLE);
|
|
117
|
-
// Filter for comment editor
|
|
118
|
-
if (isCommentEditor) {
|
|
119
|
-
list = list.filter(filterFontTypes);
|
|
120
|
-
}
|
|
121
109
|
const dropdownList = getTextStyleList(_constants.TEXT_STYLE_MORE);
|
|
122
110
|
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, list.map((itemProps, index) => {
|
|
123
111
|
const Component = itemProps.isColor ? _commons.ColorMenu : _commons.MenuItem;
|
|
124
112
|
return /*#__PURE__*/_react.default.createElement(Component, Object.assign({
|
|
125
113
|
key: index
|
|
126
114
|
}, itemProps));
|
|
127
|
-
}),
|
|
115
|
+
}), /*#__PURE__*/_react.default.createElement(_commons.MoreDropdown, null, dropdownList.map((itemProps, index) => /*#__PURE__*/_react.default.createElement(_commons.MenuItem, Object.assign({
|
|
128
116
|
key: index
|
|
129
117
|
}, itemProps))), /*#__PURE__*/_react.default.createElement(_fontSizeScale.default, {
|
|
130
118
|
disabled: isDisabled(),
|
|
@@ -140,6 +128,8 @@ const TextStyleMenuList = _ref2 => {
|
|
|
140
128
|
tipMessage: t('Reduce_font_size')
|
|
141
129
|
}, /*#__PURE__*/_react.default.createElement("i", {
|
|
142
130
|
className: "sdocfont sdoc-reduce-font-size"
|
|
143
|
-
})))
|
|
131
|
+
}))), idPrefix && /*#__PURE__*/_react.default.createElement(_aiMenu.AIContextMenu, {
|
|
132
|
+
isRichEditor: isRichEditor
|
|
133
|
+
}));
|
|
144
134
|
};
|
|
145
135
|
var _default = exports.default = (0, _reactI18next.withTranslation)('sdoc-editor')(TextStyleMenuList);
|
|
@@ -31,6 +31,7 @@ const isInsertVideoMenuDisabled = (editor, readonly) => {
|
|
|
31
31
|
if (type === _constants.SUBTITLE) return true;
|
|
32
32
|
if (type === _constants.LIST_ITEM) return true;
|
|
33
33
|
if (type === _constants.CHECK_LIST_ITEM) return true;
|
|
34
|
+
if (type === _constants.MULTI_COLUMN) return true;
|
|
34
35
|
if (_slate.Editor.isVoid(editor, n)) return true;
|
|
35
36
|
return false;
|
|
36
37
|
},
|
|
@@ -6,10 +6,15 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.default = void 0;
|
|
8
8
|
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
var _slate = require("@seafile/slate");
|
|
10
|
+
var _isHotkey = _interopRequireDefault(require("is-hotkey"));
|
|
11
|
+
var _core = require("../../core");
|
|
9
12
|
var _constants = require("../../constants");
|
|
13
|
+
var _helpers = require("../../toolbar/side-toolbar/helpers");
|
|
10
14
|
const withVideo = editor => {
|
|
11
15
|
const {
|
|
12
|
-
isVoid
|
|
16
|
+
isVoid,
|
|
17
|
+
onHotKeyDown
|
|
13
18
|
} = editor;
|
|
14
19
|
const newEditor = editor;
|
|
15
20
|
|
|
@@ -23,6 +28,26 @@ const withVideo = editor => {
|
|
|
23
28
|
}
|
|
24
29
|
return isVoid(elem);
|
|
25
30
|
};
|
|
31
|
+
newEditor.onHotKeyDown = event => {
|
|
32
|
+
const [videoNode, path] = (0, _core.getSelectedNodeEntryByType)(editor, _constants.VIDEO);
|
|
33
|
+
if (path) {
|
|
34
|
+
// Insert empty paragraph node after video when clicking 'enter' on selected video
|
|
35
|
+
if ((0, _isHotkey.default)('enter', event)) {
|
|
36
|
+
event.preventDefault();
|
|
37
|
+
const emptyParagraph = (0, _core.generateEmptyElement)(_constants.PARAGRAPH);
|
|
38
|
+
_slate.Transforms.insertNodes(editor, emptyParagraph, {
|
|
39
|
+
at: _slate.Path.next(path)
|
|
40
|
+
});
|
|
41
|
+
const 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, videoNode);
|
|
46
|
+
}
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
return onHotKeyDown && onHotKeyDown(event);
|
|
50
|
+
};
|
|
26
51
|
return newEditor;
|
|
27
52
|
};
|
|
28
53
|
var _default = exports.default = withVideo;
|
|
@@ -47,6 +47,13 @@ const SideToolbar = () => {
|
|
|
47
47
|
const handleClick = (0, _react.useCallback)(e => {
|
|
48
48
|
if (!isShowSideMenu || !menuRef.current) return;
|
|
49
49
|
const isClickSideTool = menuRef.current.contains(e.target);
|
|
50
|
+
const sideAskAI = document.querySelector('#side-toolbar-ai');
|
|
51
|
+
if (sideAskAI && sideAskAI.contains(e.target)) {
|
|
52
|
+
setTimeout(() => {
|
|
53
|
+
setShowSideMenu(!isShowSideMenu);
|
|
54
|
+
}, 0);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
50
57
|
if (isClickSideTool || !sideMenuRef.current) return;
|
|
51
58
|
const {
|
|
52
59
|
sideMenuDom
|
|
@@ -21,6 +21,7 @@ var _transformMenus = _interopRequireDefault(require("./transform-menus"));
|
|
|
21
21
|
var _dropdownMenuItem = _interopRequireDefault(require("../../commons/dropdown-menu-item"));
|
|
22
22
|
var _toast = _interopRequireDefault(require("../../../../components/toast"));
|
|
23
23
|
var _constants = require("../../constants");
|
|
24
|
+
var _aiMenu = require("../../plugins/ai/ai-menu");
|
|
24
25
|
require("./side-menu.css");
|
|
25
26
|
const SideMenu = (_ref, ref) => {
|
|
26
27
|
let {
|
|
@@ -211,7 +212,9 @@ const SideMenu = (_ref, ref) => {
|
|
|
211
212
|
isHidden: !otherOperatonsMenuSearchMap['COPY_LINK_OF_SECTION']
|
|
212
213
|
}), !otherOperatonsMenuSearchMap['searching'] && /*#__PURE__*/_react.default.createElement("div", {
|
|
213
214
|
className: "sdoc-dropdown-menu-divider"
|
|
214
|
-
})), /*#__PURE__*/_react.default.createElement(
|
|
215
|
+
})), /*#__PURE__*/_react.default.createElement(_aiMenu.AIDropdownMenu, {
|
|
216
|
+
slateNode: slateNode
|
|
217
|
+
}), /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
|
|
215
218
|
menuConfig: {
|
|
216
219
|
text: 'Copy',
|
|
217
220
|
iconClass: 'sdocfont sdoc-copy'
|
package/dist/components/doc-operations/revision-operations/more-revision-operations/index.js
CHANGED
|
@@ -11,11 +11,14 @@ var _reactI18next = require("react-i18next");
|
|
|
11
11
|
var _reactstrap = require("reactstrap");
|
|
12
12
|
var _context = _interopRequireDefault(require("../../../../context"));
|
|
13
13
|
var _toast = _interopRequireDefault(require("../../../toast"));
|
|
14
|
+
var _basicSdk = require("../../../../basic-sdk");
|
|
15
|
+
var _constants = require("../../../../constants");
|
|
14
16
|
require("./index.css");
|
|
15
17
|
const MoreRevisionOperations = _ref => {
|
|
16
18
|
let {
|
|
17
19
|
t
|
|
18
20
|
} = _ref;
|
|
21
|
+
const eventBus = _basicSdk.EventBus.getInstance();
|
|
19
22
|
const [isDropdownOpen, setIsDropdownOpen] = (0, _react.useState)(false);
|
|
20
23
|
const toggleDropdown = (0, _react.useCallback)(isDropdownOpen => {
|
|
21
24
|
setIsDropdownOpen(!isDropdownOpen);
|
|
@@ -26,6 +29,7 @@ const MoreRevisionOperations = _ref => {
|
|
|
26
29
|
const siteRoot = _context.default.getSetting('siteRoot');
|
|
27
30
|
const revisionURL = `${siteRoot}lib/${repoID}/revisions/${res.data.revision_id}/`;
|
|
28
31
|
window.open(revisionURL, '_blank');
|
|
32
|
+
eventBus.dispatch(_constants.EXTERNAL_EVENT.NEW_REVISION);
|
|
29
33
|
}).catch(error => {
|
|
30
34
|
_toast.default.danger(t('Error'));
|
|
31
35
|
});
|
|
@@ -12,13 +12,19 @@ var _context = _interopRequireDefault(require("../../../../context"));
|
|
|
12
12
|
var _revisionsDialog = _interopRequireDefault(require("./revisions-dialog"));
|
|
13
13
|
var _utils = require("../../../../utils");
|
|
14
14
|
var _toast = _interopRequireDefault(require("../../../toast"));
|
|
15
|
+
var _basicSdk = require("../../../../basic-sdk");
|
|
16
|
+
var _constants = require("../../../../constants");
|
|
15
17
|
require("./index.css");
|
|
16
18
|
const Revisions = () => {
|
|
19
|
+
const eventBus = _basicSdk.EventBus.getInstance();
|
|
17
20
|
const {
|
|
18
21
|
t
|
|
19
22
|
} = (0, _reactI18next.useTranslation)();
|
|
20
23
|
const [revisionsCount, setRevisionsCount] = (0, _react.useState)(0);
|
|
21
24
|
const [isShowRevisions, setShowRevisions] = (0, _react.useState)(false);
|
|
25
|
+
const autoIncrementRevisionsCount = (0, _react.useCallback)(() => {
|
|
26
|
+
setRevisionsCount(revisionsCount + 1);
|
|
27
|
+
}, [revisionsCount]);
|
|
22
28
|
|
|
23
29
|
// did mount
|
|
24
30
|
(0, _react.useEffect)(() => {
|
|
@@ -32,6 +38,13 @@ const Revisions = () => {
|
|
|
32
38
|
|
|
33
39
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
34
40
|
}, []);
|
|
41
|
+
(0, _react.useEffect)(() => {
|
|
42
|
+
const autoIncrementRevisionSubscribe = eventBus.subscribe(_constants.EXTERNAL_EVENT.NEW_REVISION, autoIncrementRevisionsCount);
|
|
43
|
+
return () => {
|
|
44
|
+
autoIncrementRevisionSubscribe();
|
|
45
|
+
};
|
|
46
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
47
|
+
}, [autoIncrementRevisionsCount]);
|
|
35
48
|
const showRevisions = (0, _react.useCallback)(() => {
|
|
36
49
|
setShowRevisions(true);
|
|
37
50
|
}, []);
|
package/dist/constants/index.js
CHANGED
|
@@ -40,7 +40,9 @@ const EXTERNAL_EVENT = exports.EXTERNAL_EVENT = {
|
|
|
40
40
|
INSERT_LINK: 'insert_link',
|
|
41
41
|
// document
|
|
42
42
|
COLLABORATORS_UPDATED: 'collaborators_updated',
|
|
43
|
-
IMAGE_COLUMN_TOGGLE: 'Image_column_toggle'
|
|
43
|
+
IMAGE_COLUMN_TOGGLE: 'Image_column_toggle',
|
|
44
|
+
// revise
|
|
45
|
+
NEW_REVISION: 'new_revision'
|
|
44
46
|
};
|
|
45
47
|
const TIP_TYPE = exports.TIP_TYPE = {
|
|
46
48
|
DELETE_NO_CHANGES_REVISION: 'delete_no_changes_revision',
|
package/dist/context.js
CHANGED
|
@@ -223,6 +223,10 @@ class Context {
|
|
|
223
223
|
const docUuid = this.getSetting('docUuid');
|
|
224
224
|
return this.api.searchSdocFiles(docUuid, query, page, per_page);
|
|
225
225
|
}
|
|
226
|
+
getSearchFilesByFilename(query, page, per_page, search_type) {
|
|
227
|
+
const docUuid = this.getSetting('docUuid');
|
|
228
|
+
return this.api.searchFilesByFilename(docUuid, query, page, per_page, search_type);
|
|
229
|
+
}
|
|
226
230
|
|
|
227
231
|
// participants
|
|
228
232
|
listParticipants() {
|
|
@@ -255,6 +259,10 @@ class Context {
|
|
|
255
259
|
const docUuid = this.getDocUuid();
|
|
256
260
|
return this.api.readAllNotifications(docUuid);
|
|
257
261
|
}
|
|
262
|
+
aiTranslate(text, lang) {
|
|
263
|
+
const docUuid = this.getDocUuid();
|
|
264
|
+
return this.api.aiTranslate(docUuid, text, lang);
|
|
265
|
+
}
|
|
258
266
|
updateConfigUuid(docUuid) {
|
|
259
267
|
if (!this.config) return;
|
|
260
268
|
this.config['docUuid'] = docUuid;
|
package/package.json
CHANGED
|
@@ -581,5 +581,27 @@
|
|
|
581
581
|
"Page": "Page",
|
|
582
582
|
"Share_1": "Sdílet",
|
|
583
583
|
"Collect": "Collect",
|
|
584
|
-
"Collected": "Collected"
|
|
584
|
+
"Collected": "Collected",
|
|
585
|
+
"Link_to_file": "Link to file",
|
|
586
|
+
"Create_a_new_file": "Create a new file",
|
|
587
|
+
"Suggestion": "Návrh",
|
|
588
|
+
"Continuation": "Continuation",
|
|
589
|
+
"More_details": "More details",
|
|
590
|
+
"More_concise": "More concise",
|
|
591
|
+
"More_vivid": "More vivid",
|
|
592
|
+
"Translate": "Translate",
|
|
593
|
+
"Adjustment": "Adjustment",
|
|
594
|
+
"Try_again": "Try again",
|
|
595
|
+
"Deprecation": "Deprecation",
|
|
596
|
+
"Generated_content_x_words": "Generated content {{count}} words",
|
|
597
|
+
"Ask_AI_anything": "Ask AI anything...",
|
|
598
|
+
"Thinking": "Thinking...",
|
|
599
|
+
"Translation_error_message": "Translation error, please try again.",
|
|
600
|
+
"The_translation_content_cannot_be_empty": "The translation content cannot be empty",
|
|
601
|
+
"Processing_message": "Processing, please wait...",
|
|
602
|
+
"AI_tip_content": "Discard current content?",
|
|
603
|
+
"Discard": "Zrušit změny",
|
|
604
|
+
"English": "English",
|
|
605
|
+
"Chinese": "Chinese",
|
|
606
|
+
"Ask_AI": "Ask AI"
|
|
585
607
|
}
|
|
@@ -581,5 +581,27 @@
|
|
|
581
581
|
"Page": "Page",
|
|
582
582
|
"Share_1": "Freigeben",
|
|
583
583
|
"Collect": "Collect",
|
|
584
|
-
"Collected": "Collected"
|
|
584
|
+
"Collected": "Collected",
|
|
585
|
+
"Link_to_file": "Link to file",
|
|
586
|
+
"Create_a_new_file": "Create a new file",
|
|
587
|
+
"Suggestion": "Vorschlag",
|
|
588
|
+
"Continuation": "Continuation",
|
|
589
|
+
"More_details": "More details",
|
|
590
|
+
"More_concise": "More concise",
|
|
591
|
+
"More_vivid": "More vivid",
|
|
592
|
+
"Translate": "Translate",
|
|
593
|
+
"Adjustment": "Adjustment",
|
|
594
|
+
"Try_again": "Try again",
|
|
595
|
+
"Deprecation": "Deprecation",
|
|
596
|
+
"Generated_content_x_words": "Generated content {{count}} words",
|
|
597
|
+
"Ask_AI_anything": "Ask AI anything...",
|
|
598
|
+
"Thinking": "Thinking...",
|
|
599
|
+
"Translation_error_message": "Translation error, please try again.",
|
|
600
|
+
"The_translation_content_cannot_be_empty": "The translation content cannot be empty",
|
|
601
|
+
"Processing_message": "Processing, please wait...",
|
|
602
|
+
"AI_tip_content": "Discard current content?",
|
|
603
|
+
"Discard": "Verwerfen",
|
|
604
|
+
"English": "English",
|
|
605
|
+
"Chinese": "Chinese",
|
|
606
|
+
"Ask_AI": "KI fragen"
|
|
585
607
|
}
|