@seafile/sdoc-editor 1.0.210 → 1.0.212
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/basic-sdk/extension/commons/file-insert-dialog/index.js +1 -1
- package/dist/basic-sdk/extension/commons/insert-element-dialog/index.js +21 -0
- package/dist/basic-sdk/extension/commons/select-file-dialog/helpers.js +8 -3
- package/dist/basic-sdk/extension/commons/select-file-dialog/index.js +48 -8
- package/dist/basic-sdk/extension/commons/select-file-dialog/local-files/index.css +1 -0
- package/dist/basic-sdk/extension/commons/select-file-dialog/local-files/index.js +6 -2
- package/dist/basic-sdk/extension/constants/element-type.js +2 -1
- package/dist/basic-sdk/extension/constants/index.js +2 -1
- package/dist/basic-sdk/extension/core/queries/index.js +22 -1
- package/dist/basic-sdk/extension/plugins/check-list/plugin.js +13 -10
- package/dist/basic-sdk/extension/plugins/code-block/plugin.js +48 -37
- package/dist/basic-sdk/extension/plugins/header/plugin.js +8 -0
- package/dist/basic-sdk/extension/plugins/link/helpers.js +18 -19
- package/dist/basic-sdk/extension/plugins/link/plugin.js +1 -1
- package/dist/basic-sdk/extension/plugins/paragraph/plugin.js +17 -1
- package/dist/basic-sdk/extension/plugins/sdoc-link/helpers.js +3 -3
- package/dist/basic-sdk/extension/plugins/sdoc-link/render/render-elem.js +1 -1
- package/dist/basic-sdk/extension/plugins/video/dialog/add-video-link-dialog/index.js +99 -0
- package/dist/basic-sdk/extension/plugins/video/helpers.js +61 -8
- package/dist/basic-sdk/extension/plugins/video/index.css +4 -3
- package/dist/basic-sdk/extension/plugins/video/menu/index.js +24 -1
- package/dist/basic-sdk/extension/plugins/video/render-elem.js +20 -7
- package/dist/constants/index.js +1 -0
- package/package.json +1 -1
- package/public/locales/cs/sdoc-editor.json +6 -2
- package/public/locales/de/sdoc-editor.json +311 -307
- package/public/locales/en/sdoc-editor.json +6 -2
- package/public/locales/es/sdoc-editor.json +6 -2
- package/public/locales/es_AR/sdoc-editor.json +6 -2
- package/public/locales/es_MX/sdoc-editor.json +6 -2
- package/public/locales/fr/sdoc-editor.json +6 -2
- package/public/locales/it/sdoc-editor.json +6 -2
- package/public/locales/ru/sdoc-editor.json +7 -3
- package/public/locales/zh_CN/sdoc-editor.json +5 -1
|
@@ -252,7 +252,7 @@ const FileLinkInsertDialog = _ref => {
|
|
|
252
252
|
}
|
|
253
253
|
}, /*#__PURE__*/_react.default.createElement("img", {
|
|
254
254
|
className: "file-item-img",
|
|
255
|
-
src: (0, _helpers2.
|
|
255
|
+
src: (0, _helpers2.getSdocFileIcon)(),
|
|
256
256
|
alt: ""
|
|
257
257
|
}), /*#__PURE__*/_react.default.createElement("span", {
|
|
258
258
|
className: "file-item-name"
|
|
@@ -23,6 +23,7 @@ var _index4 = _interopRequireDefault(require("../../../../components/toast/index
|
|
|
23
23
|
var _index5 = require("../../plugins/video/constants/index.js");
|
|
24
24
|
var _constants3 = require("../../../../basic-sdk/constants");
|
|
25
25
|
var _index6 = _interopRequireDefault(require("../../plugins/ai/ai-module/index.js"));
|
|
26
|
+
var _index7 = _interopRequireDefault(require("../../plugins/video/dialog/add-video-link-dialog/index.js"));
|
|
26
27
|
const InsertElementDialog = _ref => {
|
|
27
28
|
let {
|
|
28
29
|
editor
|
|
@@ -32,6 +33,7 @@ const InsertElementDialog = _ref => {
|
|
|
32
33
|
const [insertPosition, setInsertPosition] = (0, _react.useState)(_constants2.INSERT_POSITION.CURRENT);
|
|
33
34
|
const [slateNode, setSlateNode] = (0, _react.useState)(null);
|
|
34
35
|
const [insertLinkCallback, setInsertLinkCallback] = (0, _react.useState)(null);
|
|
36
|
+
const [insertVideoCallback, setInsertVideoCallback] = (0, _react.useState)(null);
|
|
35
37
|
const [validEditor, setValidEditor] = (0, _react.useState)(editor);
|
|
36
38
|
const [linkTitle, setLinkTitle] = (0, _react.useState)('');
|
|
37
39
|
const [handleSubmit, setHandleSubmit] = (0, _react.useState)(() => void 0);
|
|
@@ -90,6 +92,7 @@ const InsertElementDialog = _ref => {
|
|
|
90
92
|
slateNode,
|
|
91
93
|
insertFileLinkCallback,
|
|
92
94
|
insertSdocFileLinkCallback,
|
|
95
|
+
insertVideo,
|
|
93
96
|
editor: paramEditor,
|
|
94
97
|
linkTitle,
|
|
95
98
|
// link shortcut wrapping link
|
|
@@ -103,6 +106,9 @@ const InsertElementDialog = _ref => {
|
|
|
103
106
|
insertSdocFileLinkCallback,
|
|
104
107
|
insertFileLinkCallback
|
|
105
108
|
});
|
|
109
|
+
setInsertVideoCallback({
|
|
110
|
+
insertVideo
|
|
111
|
+
});
|
|
106
112
|
setLinkTitle(linkTitle);
|
|
107
113
|
setHandleSubmit(handleSubmit);
|
|
108
114
|
// Apply for comment editor, as it has a different editor instance
|
|
@@ -124,6 +130,7 @@ const InsertElementDialog = _ref => {
|
|
|
124
130
|
setElement('');
|
|
125
131
|
setDialogType('');
|
|
126
132
|
setInsertLinkCallback(null);
|
|
133
|
+
setInsertVideoCallback(null);
|
|
127
134
|
setValidEditor(null);
|
|
128
135
|
setLinkTitle('');
|
|
129
136
|
}, []);
|
|
@@ -169,6 +176,20 @@ const InsertElementDialog = _ref => {
|
|
|
169
176
|
};
|
|
170
177
|
return /*#__PURE__*/_react.default.createElement(_index.default, fileLinkProps);
|
|
171
178
|
}
|
|
179
|
+
case _constants2.ELEMENT_TYPE.VIDEO:
|
|
180
|
+
{
|
|
181
|
+
const videoProps = {
|
|
182
|
+
editor: validEditor,
|
|
183
|
+
dialogType,
|
|
184
|
+
insertVideoCallback,
|
|
185
|
+
closeDialog
|
|
186
|
+
};
|
|
187
|
+
return /*#__PURE__*/_react.default.createElement(_index.default, videoProps);
|
|
188
|
+
}
|
|
189
|
+
case _constants2.ELEMENT_TYPE.VIDEO_LINK:
|
|
190
|
+
{
|
|
191
|
+
return /*#__PURE__*/_react.default.createElement(_index7.default, props);
|
|
192
|
+
}
|
|
172
193
|
case _constants2.LOCAL_IMAGE:
|
|
173
194
|
{
|
|
174
195
|
return /*#__PURE__*/_react.default.createElement("input", {
|
|
@@ -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.
|
|
7
|
+
exports.getVideoFileIcon = exports.getSdocFileIcon = exports.addDataToTree = void 0;
|
|
8
8
|
var _context = _interopRequireDefault(require("../../../../context"));
|
|
9
9
|
const addDataToTree = (treeData, indexId, childrenData, path) => {
|
|
10
10
|
for (let i = 0; i < treeData.length; i++) {
|
|
@@ -24,8 +24,13 @@ const addDataToTree = (treeData, indexId, childrenData, path) => {
|
|
|
24
24
|
return treeData;
|
|
25
25
|
};
|
|
26
26
|
exports.addDataToTree = addDataToTree;
|
|
27
|
-
const
|
|
27
|
+
const getSdocFileIcon = () => {
|
|
28
28
|
const server = _context.default.getSetting('serviceUrl');
|
|
29
29
|
return `${server}/media/img/file/256/sdoc.png`;
|
|
30
30
|
};
|
|
31
|
-
exports.
|
|
31
|
+
exports.getSdocFileIcon = getSdocFileIcon;
|
|
32
|
+
const getVideoFileIcon = () => {
|
|
33
|
+
const server = _context.default.getSetting('serviceUrl');
|
|
34
|
+
return `${server}/media/img/file/256/video.png`;
|
|
35
|
+
};
|
|
36
|
+
exports.getVideoFileIcon = getVideoFileIcon;
|
|
@@ -21,9 +21,9 @@ const SelectSdocFileDialog = _ref => {
|
|
|
21
21
|
editor,
|
|
22
22
|
dialogType,
|
|
23
23
|
closeDialog,
|
|
24
|
-
insertLinkCallback
|
|
24
|
+
insertLinkCallback,
|
|
25
|
+
insertVideoCallback
|
|
25
26
|
} = _ref;
|
|
26
|
-
const modalTitle = dialogType === _constants.ELEMENT_TYPE.FILE_LINK ? 'Select_file' : 'Select_sdoc_document';
|
|
27
27
|
const {
|
|
28
28
|
t
|
|
29
29
|
} = (0, _reactI18next.useTranslation)('sdoc-editor');
|
|
@@ -31,6 +31,20 @@ const SelectSdocFileDialog = _ref => {
|
|
|
31
31
|
const [temSearchContent, setTemSearchContent] = (0, _react.useState)('');
|
|
32
32
|
const [searchContent, setSearchContent] = (0, _react.useState)('');
|
|
33
33
|
const [isOpenSearch, setIsOpenSearch] = (0, _react.useState)(false);
|
|
34
|
+
let modalTitle;
|
|
35
|
+
switch (dialogType) {
|
|
36
|
+
case _constants.ELEMENT_TYPE.FILE_LINK:
|
|
37
|
+
modalTitle = 'Select_file';
|
|
38
|
+
break;
|
|
39
|
+
case _constants.ELEMENT_TYPE.SDOC_LINK:
|
|
40
|
+
modalTitle = 'Select_sdoc_document';
|
|
41
|
+
break;
|
|
42
|
+
case _constants.ELEMENT_TYPE.VIDEO:
|
|
43
|
+
modalTitle = 'Select_video_file';
|
|
44
|
+
break;
|
|
45
|
+
default:
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
34
48
|
const onSelectedFile = (0, _react.useCallback)(fileInfo => {
|
|
35
49
|
setCurrentSelectedFile(fileInfo);
|
|
36
50
|
}, []);
|
|
@@ -38,13 +52,31 @@ const SelectSdocFileDialog = _ref => {
|
|
|
38
52
|
const {
|
|
39
53
|
insertFileLinkCallback,
|
|
40
54
|
insertSdocFileLinkCallback
|
|
41
|
-
} = insertLinkCallback;
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
|
|
55
|
+
} = insertLinkCallback || {};
|
|
56
|
+
const {
|
|
57
|
+
insertVideo
|
|
58
|
+
} = insertVideoCallback || {};
|
|
59
|
+
switch (dialogType) {
|
|
60
|
+
case _constants.ELEMENT_TYPE.FILE_LINK:
|
|
61
|
+
insertFileLinkCallback && insertFileLinkCallback(editor, fileInfo.name, fileInfo.file_uuid);
|
|
62
|
+
break;
|
|
63
|
+
case _constants.ELEMENT_TYPE.SDOC_LINK:
|
|
64
|
+
insertSdocFileLinkCallback && insertSdocFileLinkCallback(editor, fileInfo.name, fileInfo.file_uuid);
|
|
65
|
+
break;
|
|
66
|
+
case _constants.ELEMENT_TYPE.VIDEO:
|
|
67
|
+
const repoID = _context.default.getSetting('repoID');
|
|
68
|
+
const fileServerRoot = _context.default.getSetting('fileServerRoot');
|
|
69
|
+
// Get seafile's video download url as src
|
|
70
|
+
const url = `${fileServerRoot}repos/${repoID}/files${fileInfo.path}/?op=download`;
|
|
71
|
+
const encodedUrl = encodeURI(url);
|
|
72
|
+
insertVideo && insertVideo(editor, [{
|
|
73
|
+
name: fileInfo.name
|
|
74
|
+
}], [encodedUrl]);
|
|
75
|
+
break;
|
|
76
|
+
default:
|
|
77
|
+
break;
|
|
46
78
|
}
|
|
47
|
-
}, [insertLinkCallback, dialogType, editor]);
|
|
79
|
+
}, [insertLinkCallback, insertVideoCallback, dialogType, editor]);
|
|
48
80
|
const onSubmit = (0, _react.useCallback)(() => {
|
|
49
81
|
if (!currentSelectedFile) return;
|
|
50
82
|
const {
|
|
@@ -53,6 +85,14 @@ const SelectSdocFileDialog = _ref => {
|
|
|
53
85
|
let fileInfo = {
|
|
54
86
|
...currentSelectedFile
|
|
55
87
|
};
|
|
88
|
+
|
|
89
|
+
// Insert video element in sdoc
|
|
90
|
+
if (dialogType === _constants.ELEMENT_TYPE.VIDEO) {
|
|
91
|
+
insertFile(fileInfo);
|
|
92
|
+
closeDialog();
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
|
|
56
96
|
// File has no id
|
|
57
97
|
if (!file_uuid || file_uuid === '') {
|
|
58
98
|
_context.default.getSdocLocalFileId(currentSelectedFile.path).then(res => {
|
|
@@ -155,7 +155,7 @@ const LocalFiles = _ref => {
|
|
|
155
155
|
className: "sdoc-folder-children"
|
|
156
156
|
}, ((_item$children = item.children) === null || _item$children === void 0 ? void 0 : _item$children.length) === 0 && /*#__PURE__*/_react.default.createElement("div", {
|
|
157
157
|
className: "sdoc-folder-children-empty"
|
|
158
|
-
}, `(${t('Empty')})`), ((_item$children2 = item.children) === null || _item$children2 === void 0 ? void 0 : _item$children2.length) > 0 && renderFileTree(item.children))),
|
|
158
|
+
}, `(${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", {
|
|
159
159
|
className: (0, _classnames.default)('sdoc-file-info', {
|
|
160
160
|
'active': selected
|
|
161
161
|
}),
|
|
@@ -170,7 +170,11 @@ const LocalFiles = _ref => {
|
|
|
170
170
|
})
|
|
171
171
|
}), fileType === 'sdoc' && /*#__PURE__*/_react.default.createElement("img", {
|
|
172
172
|
className: "sdoc-file-img",
|
|
173
|
-
src: (0, _helpers.
|
|
173
|
+
src: (0, _helpers.getSdocFileIcon)(),
|
|
174
|
+
alt: ""
|
|
175
|
+
}), fileType === 'video' && /*#__PURE__*/_react.default.createElement("img", {
|
|
176
|
+
className: "video-file-img",
|
|
177
|
+
src: (0, _helpers.getVideoFileIcon)(),
|
|
174
178
|
alt: ""
|
|
175
179
|
})), /*#__PURE__*/_react.default.createElement("span", {
|
|
176
180
|
className: "sdoc-file-name"
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.WIKI_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.SEATABLE_TABLE = exports.SEATABLE_COLUMN = 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.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.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.SEATABLE_TABLE = exports.SEATABLE_COLUMN = 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.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
|
const BLOCKQUOTE = exports.BLOCKQUOTE = 'blockquote';
|
|
8
8
|
const TITLE = exports.TITLE = 'title';
|
|
9
9
|
const SUBTITLE = exports.SUBTITLE = 'subtitle';
|
|
@@ -42,6 +42,7 @@ const MENTION = exports.MENTION = 'mention';
|
|
|
42
42
|
const MENTION_TEMP = exports.MENTION_TEMP = 'mention_temp';
|
|
43
43
|
const FILE_LINK_INSET_INPUT_TEMP = exports.FILE_LINK_INSET_INPUT_TEMP = 'file_link_insert_input_temp';
|
|
44
44
|
const QUICK_INSERT = exports.QUICK_INSERT = 'quick_insert';
|
|
45
|
+
const VIDEO_LINK = exports.VIDEO_LINK = 'video_link';
|
|
45
46
|
const SEATABLE_COLUMN = exports.SEATABLE_COLUMN = 'seatable_column';
|
|
46
47
|
const SEATABLE_TABLE = exports.SEATABLE_TABLE = 'seatable_table';
|
|
47
48
|
const ASK_AI = exports.ASK_AI = 'ask_ai';
|
|
@@ -532,7 +532,8 @@ const LIST_ITEM_SUPPORTED_TRANSFORMATION = exports.LIST_ITEM_SUPPORTED_TRANSFORM
|
|
|
532
532
|
const 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];
|
|
533
533
|
const FILE_TYPE = exports.FILE_TYPE = {
|
|
534
534
|
[_elementType.FILE_LINK]: 'file',
|
|
535
|
-
[_elementType.SDOC_LINK]: 'sdoc'
|
|
535
|
+
[_elementType.SDOC_LINK]: 'sdoc',
|
|
536
|
+
[_elementType.VIDEO]: 'video'
|
|
536
537
|
};
|
|
537
538
|
const 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.SEATABLE_TABLE, _elementType.MULTI_COLUMN];
|
|
538
539
|
const MOUSE_ENTER_EVENT_DISABLED_MAP = exports.MOUSE_ENTER_EVENT_DISABLED_MAP = {
|
|
@@ -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.someNode = exports.isTopLevelListItem = exports.isTextNode = exports.isStartPoint = exports.isSelectionAtBlockStart = exports.isSelectionAtBlockEnd = exports.isRangeInSameBlock = exports.isRangeAcrossBlocks = exports.isMultiLevelList = exports.isMiddlePoint = exports.isLastNode = exports.isLastChild = exports.isHasImg = exports.isFirstChild = exports.isEndPoint = exports.isEmptyArticle = exports.isCurrentLineHasText = exports.isCurrentLineEmpty = exports.isContainsVoidElement = exports.isBlockTextEmptyAfterSelection = exports.isBlockAboveEmpty = exports.isAncestorEmpty = exports.getTopLevelBlockNode = exports.getStartPoint = exports.getSelectedNodeEntryByType = exports.getSelectedNodeByTypes = exports.getSelectedNodeByType = exports.getSelectedElems = exports.getQueryOptions = exports.getPreviousPath = exports.getPrevNode = exports.getPointBefore = exports.getParentNode = exports.getNodes = exports.getNodeType = exports.getNodeEntries = exports.getNodeById = exports.getNode = exports.getNextSiblingNodes = exports.getNextNode = exports.getLastChildPath = exports.getLastChild = exports.getEndPoint = exports.getEditorString = exports.getDeepInlineChildren = exports.getCurrentNode = exports.getCommonNode = exports.getChildren = exports.getAboveNode = exports.getAboveBlockNode = exports.findPath = exports.findNode = exports.findDescendant = void 0;
|
|
7
|
+
exports.someNode = exports.isTopLevelListItem = exports.isTextNode = exports.isStartPoint = exports.isSelectionAtBlockStart = exports.isSelectionAtBlockEnd = exports.isRangeInSameBlock = exports.isRangeAcrossBlocks = exports.isMultiLevelList = exports.isMiddlePoint = exports.isLastNode = exports.isLastChild = exports.isHasImg = exports.isFirstChild = exports.isEndPoint = exports.isEmptyArticle = exports.isCursorAtBlockStart = exports.isCurrentLineHasText = exports.isCurrentLineEmpty = exports.isContainsVoidElement = exports.isBlockTextEmptyAfterSelection = exports.isBlockAboveEmpty = exports.isAncestorEmpty = exports.getTopLevelBlockNode = exports.getStartPoint = exports.getSelectedNodeEntryByType = exports.getSelectedNodeByTypes = exports.getSelectedNodeByType = exports.getSelectedElems = exports.getQueryOptions = exports.getPreviousPath = exports.getPrevNode = exports.getPointBefore = exports.getParentNode = exports.getNodes = exports.getNodeType = exports.getNodeEntries = exports.getNodeById = exports.getNode = exports.getNextSiblingNodes = exports.getNextNode = exports.getLastChildPath = exports.getLastChild = exports.getEndPoint = exports.getEditorString = exports.getDeepInlineChildren = exports.getCurrentNode = exports.getCommonNode = exports.getChildren = exports.getAboveNode = exports.getAboveBlockNode = exports.findPath = exports.findNode = exports.findDescendant = void 0;
|
|
8
8
|
var _slate = require("@seafile/slate");
|
|
9
9
|
var _slateReact = require("@seafile/slate-react");
|
|
10
10
|
var _utils = require("../utils");
|
|
@@ -455,6 +455,27 @@ const isBlockAboveEmpty = editor => {
|
|
|
455
455
|
return isAncestorEmpty(editor, block);
|
|
456
456
|
};
|
|
457
457
|
exports.isBlockAboveEmpty = isBlockAboveEmpty;
|
|
458
|
+
const isCursorAtBlockStart = (editor, options) => {
|
|
459
|
+
const {
|
|
460
|
+
selection
|
|
461
|
+
} = editor;
|
|
462
|
+
if (!selection) return false;
|
|
463
|
+
const nodeEntry = getAboveBlockNode(editor, options);
|
|
464
|
+
let [node, path] = nodeEntry || [];
|
|
465
|
+
if (!path) return false;
|
|
466
|
+
|
|
467
|
+
// Special handling of placeholders, such as link, inline image
|
|
468
|
+
if (_slate.Node.string(node.children[0]).length === 0) {
|
|
469
|
+
const {
|
|
470
|
+
offset,
|
|
471
|
+
path: point
|
|
472
|
+
} = selection.focus;
|
|
473
|
+
if (offset !== 0) return false;
|
|
474
|
+
return _slate.Path.equals(point, [path[0], 1, 0]);
|
|
475
|
+
}
|
|
476
|
+
return isStartPoint(editor, selection.focus, path);
|
|
477
|
+
};
|
|
478
|
+
exports.isCursorAtBlockStart = isCursorAtBlockStart;
|
|
458
479
|
const isSelectionAtBlockStart = (editor, options) => {
|
|
459
480
|
const {
|
|
460
481
|
selection
|
|
@@ -40,19 +40,22 @@ const withCheckList = editor => {
|
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
// If it is check-list-item, handle your own business logic
|
|
43
|
-
if (
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
checked: false
|
|
49
|
-
}, {
|
|
50
|
-
at: node[1]
|
|
43
|
+
if ((0, _core.isCursorAtBlockStart)(editor)) {
|
|
44
|
+
const path = (0, _core.findPath)(editor, node);
|
|
45
|
+
const newNode = (0, _core.generateEmptyElement)(_constants.CHECK_LIST_ITEM);
|
|
46
|
+
_slate.Transforms.insertNodes(editor, newNode, {
|
|
47
|
+
at: path
|
|
51
48
|
});
|
|
52
49
|
return;
|
|
53
50
|
}
|
|
54
|
-
|
|
55
|
-
|
|
51
|
+
_slate.Transforms.splitNodes(editor, {
|
|
52
|
+
always: true
|
|
53
|
+
});
|
|
54
|
+
_slate.Transforms.setNodes(editor, {
|
|
55
|
+
checked: false
|
|
56
|
+
}, {
|
|
57
|
+
at: node[1]
|
|
58
|
+
});
|
|
56
59
|
};
|
|
57
60
|
newEditor.deleteBackward = unit => {
|
|
58
61
|
const {
|
|
@@ -68,47 +68,47 @@ const withCodeBlock = editor => {
|
|
|
68
68
|
}
|
|
69
69
|
});
|
|
70
70
|
return insertFragment(data);
|
|
71
|
-
}
|
|
72
|
-
// Paste into code block
|
|
73
|
-
if ((0, _core.getSelectedNodeByType)(editor, _constants.CODE_BLOCK)) {
|
|
74
|
-
// Pasted data is code block split with code-line
|
|
75
|
-
data.forEach((node, index) => {
|
|
76
|
-
if (node.type === _constants.CODE_BLOCK) {
|
|
77
|
-
const codeLineArr = node.children.map(line => line);
|
|
78
|
-
data.splice(index, 1, ...codeLineArr);
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
const newData = data.map(node => {
|
|
82
|
-
const text = _slate.Node.string(node);
|
|
83
|
-
const codeLine = {
|
|
84
|
-
id: _slugid.default.nice(),
|
|
85
|
-
type: _constants.CODE_LINE,
|
|
86
|
-
children: [{
|
|
87
|
-
text: text,
|
|
88
|
-
id: _slugid.default.nice()
|
|
89
|
-
}]
|
|
90
|
-
};
|
|
91
|
-
return codeLine;
|
|
92
|
-
});
|
|
71
|
+
}
|
|
93
72
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
insertBreak();
|
|
102
|
-
insertFragment(restNode);
|
|
103
|
-
}
|
|
104
|
-
return;
|
|
73
|
+
// Paste into code block
|
|
74
|
+
if ((0, _core.getSelectedNodeByType)(editor, _constants.CODE_BLOCK)) {
|
|
75
|
+
// Pasted data is code block split with code-line
|
|
76
|
+
data.forEach((node, index) => {
|
|
77
|
+
if (node.type === _constants.CODE_BLOCK) {
|
|
78
|
+
const codeLineArr = node.children.map(line => line);
|
|
79
|
+
data.splice(index, 1, ...codeLineArr);
|
|
105
80
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
81
|
+
});
|
|
82
|
+
const newData = data.map(node => {
|
|
83
|
+
const text = _slate.Node.string(node);
|
|
84
|
+
const codeLine = {
|
|
85
|
+
id: _slugid.default.nice(),
|
|
86
|
+
type: _constants.CODE_LINE,
|
|
87
|
+
children: [{
|
|
88
|
+
text: text,
|
|
89
|
+
id: _slugid.default.nice()
|
|
90
|
+
}]
|
|
91
|
+
};
|
|
92
|
+
return codeLine;
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
// current focus code-line string not empty
|
|
96
|
+
const string = _slate.Editor.string(newEditor, newEditor.selection.focus.path);
|
|
97
|
+
if (string.length !== 0 && _slate.Range.isCollapsed(newEditor.selection)) {
|
|
98
|
+
const [node, ...restNode] = newData;
|
|
99
|
+
const text = _slate.Node.string(node);
|
|
100
|
+
insertText(text);
|
|
101
|
+
if (restNode.length !== 0) {
|
|
102
|
+
insertBreak();
|
|
103
|
+
insertFragment(restNode);
|
|
104
|
+
}
|
|
105
|
+
return;
|
|
110
106
|
}
|
|
107
|
+
return insertFragment(newData);
|
|
111
108
|
}
|
|
109
|
+
|
|
110
|
+
// Paste into not a code block
|
|
111
|
+
return insertFragment(data);
|
|
112
112
|
};
|
|
113
113
|
|
|
114
114
|
// Rewrite normalizeNode
|
|
@@ -213,6 +213,17 @@ const withCodeBlock = editor => {
|
|
|
213
213
|
}
|
|
214
214
|
}
|
|
215
215
|
};
|
|
216
|
+
newEditor.insertBreak = () => {
|
|
217
|
+
const selectedNode = (0, _core.getSelectedNodeByType)(newEditor, _constants.CODE_LINE);
|
|
218
|
+
if (selectedNode != null && (0, _core.isCursorAtBlockStart)(newEditor)) {
|
|
219
|
+
const line = (0, _core.generateEmptyElement)(_constants.CODE_LINE);
|
|
220
|
+
_slate.Transforms.insertNodes(editor, line, {
|
|
221
|
+
at: selectedNode[1]
|
|
222
|
+
});
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
insertBreak();
|
|
226
|
+
};
|
|
216
227
|
return newEditor;
|
|
217
228
|
};
|
|
218
229
|
var _default = exports.default = withCodeBlock;
|
|
@@ -55,6 +55,14 @@ const withHeader = editor => {
|
|
|
55
55
|
insertBreak();
|
|
56
56
|
return;
|
|
57
57
|
}
|
|
58
|
+
if ((0, _core.isCursorAtBlockStart)(newEditor)) {
|
|
59
|
+
const [currentNode, path] = match;
|
|
60
|
+
const newNode = (0, _core.generateEmptyElement)(currentNode.type);
|
|
61
|
+
_slate.Transforms.insertNodes(editor, newNode, {
|
|
62
|
+
at: path
|
|
63
|
+
});
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
58
66
|
const isAtLineEnd = isSelectionAtLineEnd(editor, match[1]);
|
|
59
67
|
const nextNode = _slate.Editor.next(editor, {
|
|
60
68
|
at: match[1]
|
|
@@ -62,8 +62,8 @@ const insertLink = function (editor, title, url) {
|
|
|
62
62
|
let slateNode = arguments.length > 4 ? arguments[4] : undefined;
|
|
63
63
|
if (position === _constants.INSERT_POSITION.CURRENT && isMenuDisabled(editor)) return;
|
|
64
64
|
if (!title || !url) return;
|
|
65
|
+
const linkNode = genLinkNode(url, title);
|
|
65
66
|
if (position === _constants.INSERT_POSITION.AFTER) {
|
|
66
|
-
const linkNode = genLinkNode(url, title);
|
|
67
67
|
let path = _slate.Editor.path(editor, editor.selection);
|
|
68
68
|
if (slateNode && (slateNode === null || slateNode === void 0 ? void 0 : slateNode.type) === _constants.LIST_ITEM) {
|
|
69
69
|
path = _slateReact.ReactEditor.findPath(editor, slateNode);
|
|
@@ -88,26 +88,25 @@ const insertLink = function (editor, title, url) {
|
|
|
88
88
|
if (selection == null) return;
|
|
89
89
|
const isCollapsed = _slate.Range.isCollapsed(selection);
|
|
90
90
|
if (isCollapsed) {
|
|
91
|
-
const linkNode = genLinkNode(url, title);
|
|
92
91
|
_slate.Transforms.insertNodes(editor, linkNode);
|
|
93
|
-
|
|
94
|
-
const selectedText = _slate.Editor.string(editor, selection); // Selected text
|
|
95
|
-
if (selectedText !== title) {
|
|
96
|
-
// If the selected text is different from the typed text, delete the text and insert the link
|
|
97
|
-
editor.deleteFragment();
|
|
98
|
-
const linkNode = genLinkNode(url, title);
|
|
99
|
-
_slate.Transforms.insertNodes(editor, linkNode);
|
|
100
|
-
} else {
|
|
101
|
-
// If the selected text is the same as the entered text, only the link can be wrapped
|
|
102
|
-
const linkNode = genLinkNode(url, title);
|
|
103
|
-
_slate.Transforms.wrapNodes(editor, linkNode, {
|
|
104
|
-
split: true
|
|
105
|
-
});
|
|
106
|
-
_slate.Transforms.collapse(editor, {
|
|
107
|
-
edge: 'end'
|
|
108
|
-
});
|
|
109
|
-
}
|
|
92
|
+
return;
|
|
110
93
|
}
|
|
94
|
+
const selectedText = _slate.Editor.string(editor, selection); // Selected text
|
|
95
|
+
|
|
96
|
+
// If the selected text is different from the typed text, delete the text and insert the link
|
|
97
|
+
if (selectedText !== title) {
|
|
98
|
+
editor.deleteFragment();
|
|
99
|
+
_slate.Transforms.insertNodes(editor, linkNode);
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// If the selected text is the same as the entered text, only the link can be wrapped
|
|
104
|
+
_slate.Transforms.wrapNodes(editor, linkNode, {
|
|
105
|
+
split: true
|
|
106
|
+
});
|
|
107
|
+
_slate.Transforms.collapse(editor, {
|
|
108
|
+
edge: 'end'
|
|
109
|
+
});
|
|
111
110
|
};
|
|
112
111
|
exports.insertLink = insertLink;
|
|
113
112
|
const updateLink = (editor, newText, newUrl) => {
|
|
@@ -16,7 +16,8 @@ const withParagraph = editor => {
|
|
|
16
16
|
insertText,
|
|
17
17
|
deleteBackward,
|
|
18
18
|
onHotKeyDown,
|
|
19
|
-
insertFragment
|
|
19
|
+
insertFragment,
|
|
20
|
+
insertBreak
|
|
20
21
|
} = editor;
|
|
21
22
|
const newEditor = editor;
|
|
22
23
|
newEditor.handleTab = event => {
|
|
@@ -135,6 +136,21 @@ const withParagraph = editor => {
|
|
|
135
136
|
}
|
|
136
137
|
return onHotKeyDown && onHotKeyDown(event);
|
|
137
138
|
};
|
|
139
|
+
newEditor.insertBreak = () => {
|
|
140
|
+
const selectedNode = (0, _core.getSelectedNodeByType)(newEditor, _constants.PARAGRAPH);
|
|
141
|
+
if (selectedNode != null && (0, _core.isCursorAtBlockStart)(newEditor)) {
|
|
142
|
+
const paragraph = (0, _core.generateDefaultParagraph)();
|
|
143
|
+
const targetPath = (0, _core.findPath)(editor, selectedNode);
|
|
144
|
+
const parentNode = (0, _core.getParentNode)(newEditor.children, selectedNode.id);
|
|
145
|
+
if ((parentNode === null || parentNode === void 0 ? void 0 : parentNode.type) !== _constants.LIST_ITEM) {
|
|
146
|
+
_slate.Transforms.insertNodes(editor, paragraph, {
|
|
147
|
+
at: targetPath
|
|
148
|
+
});
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
insertBreak();
|
|
153
|
+
};
|
|
138
154
|
newEditor.insertFragment = data => {
|
|
139
155
|
const paragraphBlock = (0, _core.getSelectedNodeByType)(editor, _constants.PARAGRAPH);
|
|
140
156
|
const onlyOneListItem = data.length === 1 && (0, _helpers.isSingleListItem)(data[0]);
|
|
@@ -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.
|
|
7
|
+
exports.unwrapLinkNode = exports.removeTempInput = exports.removeShortCutSymbol = exports.onCopySdocLinkNode = exports.isTriggeredByShortcut = exports.isMenuDisabled = exports.insertTextWhenRemoveFileNameCollector = exports.insertTempInput = exports.insertSdocFileLink = exports.getUrl = exports.getType = exports.getSdocLinkEntry = exports.getSdocFileIcon = 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"));
|
|
@@ -274,11 +274,11 @@ const insertTextWhenRemoveFileNameCollector = (editor, searchInputNode) => {
|
|
|
274
274
|
removeTempInput(editor, searchInputNode);
|
|
275
275
|
};
|
|
276
276
|
exports.insertTextWhenRemoveFileNameCollector = insertTextWhenRemoveFileNameCollector;
|
|
277
|
-
const
|
|
277
|
+
const getSdocFileIcon = () => {
|
|
278
278
|
const server = _context.default.getSetting('serviceUrl');
|
|
279
279
|
return `${server}/media/img/file/256/sdoc.png`;
|
|
280
280
|
};
|
|
281
|
-
exports.
|
|
281
|
+
exports.getSdocFileIcon = getSdocFileIcon;
|
|
282
282
|
const getSdocLinkEntry = function (editor) {
|
|
283
283
|
let at = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : editor.selection;
|
|
284
284
|
const aboveNodeEntry = _slate.Editor.above(editor, {
|
|
@@ -147,7 +147,7 @@ const SdocFileLink = _ref => {
|
|
|
147
147
|
style: style
|
|
148
148
|
}, element.type !== _elementType.WIKI_LINK && /*#__PURE__*/_react.default.createElement("img", {
|
|
149
149
|
className: "file-link-img",
|
|
150
|
-
src: (0, _helpers.
|
|
150
|
+
src: (0, _helpers.getSdocFileIcon)(),
|
|
151
151
|
alt: ""
|
|
152
152
|
}), 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", {
|
|
153
153
|
className: "sf3-font sf3-font-files2"
|