@seafile/sdoc-editor 3.0.71 → 3.0.73
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/extension/commons/select-file-dialog/helpers.js +1 -0
- package/dist/extension/commons/wiki-file-insert-dialog/index.js +3 -2
- package/dist/extension/plugins/image/helpers.js +2 -2
- package/dist/extension/plugins/image/image-loader/index.css +7 -1
- package/dist/extension/plugins/link/dialog/add-link-dialog/index.css +5 -0
- package/dist/extension/plugins/link/dialog/add-link-dialog/index.js +74 -37
- package/dist/extension/plugins/link/dialog/add-link-dialog/select-forms/linked-page.css +153 -0
- package/dist/extension/plugins/link/dialog/add-link-dialog/select-forms/linked-page.js +222 -0
- package/dist/extension/plugins/link/dialog/add-link-dialog/select-forms/selected-page-display.js +25 -0
- package/dist/extension/plugins/link/helpers.js +74 -34
- package/dist/extension/plugins/link/hover/index.js +12 -3
- package/dist/extension/plugins/link/plugin.js +52 -28
- package/dist/extension/plugins/link/render-elem.js +15 -2
- package/dist/extension/plugins/multi-column/render/index.css +2 -2
- package/dist/extension/plugins/sdoc-link/hover-menu/index.js +12 -3
- package/dist/extension/plugins/wiki-link/helpers.js +4 -0
- package/dist/extension/toolbar/side-toolbar/index.css +0 -1
- package/package.json +2 -2
|
@@ -44,6 +44,7 @@ var getFileTypeIcon = exports.getFileTypeIcon = function getFileTypeIcon(fileTyp
|
|
|
44
44
|
};
|
|
45
45
|
var parcelFileTypeIcon = exports.parcelFileTypeIcon = function parcelFileTypeIcon(fileName) {
|
|
46
46
|
var _Object$entries$find;
|
|
47
|
+
if (!fileName) return '';
|
|
47
48
|
var newFileType = fileName.split('.').pop();
|
|
48
49
|
var fileExtType = (_Object$entries$find = Object.entries(_constants.FILEEXT_TYPE).find(function (_ref) {
|
|
49
50
|
var _ref2 = (0, _slicedToArray2["default"])(_ref, 2),
|
|
@@ -15,6 +15,7 @@ var _slateReact = require("@seafile/slate-react");
|
|
|
15
15
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
16
16
|
var _lodash = _interopRequireDefault(require("lodash.throttle"));
|
|
17
17
|
var _constants = require("../../../constants");
|
|
18
|
+
var _context = _interopRequireDefault(require("../../../context"));
|
|
18
19
|
var _commonUtils = require("../../../utils/common-utils");
|
|
19
20
|
var _eventBus = _interopRequireDefault(require("../../../utils/event-bus"));
|
|
20
21
|
var _localStorageUtils = _interopRequireDefault(require("../../../utils/local-storage-utils"));
|
|
@@ -165,8 +166,8 @@ var WikiFileLinkInsertDialog = function WikiFileLinkInsertDialog(_ref) {
|
|
|
165
166
|
getPosition();
|
|
166
167
|
return;
|
|
167
168
|
}
|
|
168
|
-
var
|
|
169
|
-
|
|
169
|
+
var _context$getSetting = _context["default"].getSetting('navConfig'),
|
|
170
|
+
pages = _context$getSetting.pages;
|
|
170
171
|
var newFiles = [];
|
|
171
172
|
pages.forEach(function (page) {
|
|
172
173
|
if (page.name.includes(searchText.trim())) {
|
|
@@ -111,12 +111,12 @@ var insertImage = exports.insertImage = function insertImage(editor, imgInfos, s
|
|
|
111
111
|
at: validSelection
|
|
112
112
|
});
|
|
113
113
|
|
|
114
|
-
// BLOCKQUOTE
|
|
114
|
+
// BLOCKQUOTE, CALL_OUT, MULTI_COLUMN use inline images
|
|
115
115
|
var imageType = _constants2.IMAGE_BLOCK;
|
|
116
116
|
var _Editor$node = _slate.Editor.node(editor, [aboveNodeEntry[1][0]]),
|
|
117
117
|
_Editor$node2 = (0, _slicedToArray2["default"])(_Editor$node, 1),
|
|
118
118
|
topNode = _Editor$node2[0];
|
|
119
|
-
if ([_constants2.BLOCKQUOTE, _constants2.CALL_OUT].includes(topNode === null || topNode === void 0 ? void 0 : topNode.type)) {
|
|
119
|
+
if ([_constants2.BLOCKQUOTE, _constants2.CALL_OUT, _constants2.MULTI_COLUMN].includes(topNode === null || topNode === void 0 ? void 0 : topNode.type)) {
|
|
120
120
|
imageType = '';
|
|
121
121
|
}
|
|
122
122
|
if (imageType === _constants2.IMAGE_BLOCK) {
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
bottom: 0;
|
|
12
12
|
left: 0;
|
|
13
13
|
background-color: rgba(0, 0, 0, 0.5);
|
|
14
|
+
container-type: inline-size;
|
|
14
15
|
}
|
|
15
16
|
|
|
16
17
|
@keyframes spin {
|
|
@@ -32,7 +33,6 @@
|
|
|
32
33
|
animation: spin 1s linear infinite;
|
|
33
34
|
user-select: none;
|
|
34
35
|
pointer-events: none;
|
|
35
|
-
margin-left: 15px;
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
.sdoc-image-process-container .copyright {
|
|
@@ -40,6 +40,12 @@
|
|
|
40
40
|
color: #fff;
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
+
@container (max-width: 140px) {
|
|
44
|
+
.sdoc-image-process-container .copyright {
|
|
45
|
+
display: none;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
43
49
|
.sdoc-image-content.upload-error>span {
|
|
44
50
|
min-height: 300px;
|
|
45
51
|
min-width: 400px;
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
}
|
|
6
6
|
|
|
7
7
|
.select-btn .link-address-btn,
|
|
8
|
+
.select-btn .link-page-btn,
|
|
8
9
|
.select-btn .link-block-btn {
|
|
9
10
|
font-size: .875rem;
|
|
10
11
|
font-weight: 600;
|
|
@@ -12,16 +13,19 @@
|
|
|
12
13
|
}
|
|
13
14
|
|
|
14
15
|
.select-btn .link-address-btn:hover,
|
|
16
|
+
.select-btn .link-page-btn:hover,
|
|
15
17
|
.select-btn .link-block-btn:hover {
|
|
16
18
|
cursor: pointer;
|
|
17
19
|
}
|
|
18
20
|
|
|
21
|
+
.select-btn .link-page-btn.active,
|
|
19
22
|
.select-btn .link-address-btn.active,
|
|
20
23
|
.select-btn .link-block-btn.active {
|
|
21
24
|
color: #ff9800;
|
|
22
25
|
border-bottom: 2px solid #ff9800;
|
|
23
26
|
}
|
|
24
27
|
|
|
28
|
+
.select-btn .link-page-btn,
|
|
25
29
|
.select-btn .link-address-btn {
|
|
26
30
|
margin-right: 40px;
|
|
27
31
|
}
|
|
@@ -33,6 +37,7 @@
|
|
|
33
37
|
.selected-linked-block-wrapper .form-control {
|
|
34
38
|
display: flex;
|
|
35
39
|
justify-content: space-between;
|
|
40
|
+
align-items: center;
|
|
36
41
|
cursor: pointer;
|
|
37
42
|
height: 36.39px;
|
|
38
43
|
}
|
|
@@ -14,11 +14,13 @@ var _reactI18next = require("react-i18next");
|
|
|
14
14
|
var _reactstrap = require("reactstrap");
|
|
15
15
|
var _slate = require("@seafile/slate");
|
|
16
16
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
17
|
+
var _constants = require("../../../../../constants");
|
|
17
18
|
var _mdToHtml = require("../../../../../slate-convert/md-to-html");
|
|
18
19
|
var _slateToMd = _interopRequireDefault(require("../../../../../slate-convert/slate-to-md"));
|
|
19
|
-
var
|
|
20
|
+
var _constants2 = require("../../../../constants");
|
|
20
21
|
var _core = require("../../../../core");
|
|
21
22
|
var _helpers = require("../../helpers");
|
|
23
|
+
var _linkedPage = _interopRequireDefault(require("./select-forms/linked-page"));
|
|
22
24
|
require("./index.css");
|
|
23
25
|
var AddLinkDialog = function AddLinkDialog(_ref) {
|
|
24
26
|
var editor = _ref.editor,
|
|
@@ -43,7 +45,8 @@ var AddLinkDialog = function AddLinkDialog(_ref) {
|
|
|
43
45
|
href: ''
|
|
44
46
|
},
|
|
45
47
|
oldURL = _ref2.href,
|
|
46
|
-
linked_id = _ref2.linked_id
|
|
48
|
+
linked_id = _ref2.linked_id,
|
|
49
|
+
linked_wiki_page_id = _ref2.linked_wiki_page_id;
|
|
47
50
|
var oldTitle = (element === null || element === void 0 ? void 0 : element.children[0].text) || linkTitle || '';
|
|
48
51
|
var initTitle = (0, _react.useMemo)(function () {
|
|
49
52
|
return oldTitle ? oldTitle : (0, _core.getEditorString)(editor, editor.selection);
|
|
@@ -52,50 +55,69 @@ var AddLinkDialog = function AddLinkDialog(_ref) {
|
|
|
52
55
|
_useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
|
|
53
56
|
title = _useState6[0],
|
|
54
57
|
setTitle = _useState6[1];
|
|
55
|
-
var _useState7 = (0, _react.useState)(
|
|
58
|
+
var _useState7 = (0, _react.useState)(''),
|
|
56
59
|
_useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
var _useState9 = (0, _react.useState)(
|
|
60
|
+
selectedBlockId = _useState8[0],
|
|
61
|
+
setSelectedBlockId = _useState8[1];
|
|
62
|
+
var _useState9 = (0, _react.useState)(''),
|
|
60
63
|
_useState0 = (0, _slicedToArray2["default"])(_useState9, 2),
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
var _useState1 = (0, _react.useState)(
|
|
64
|
+
selectedPageId = _useState0[0],
|
|
65
|
+
setSelectedPageId = _useState0[1];
|
|
66
|
+
var _useState1 = (0, _react.useState)([]),
|
|
64
67
|
_useState10 = (0, _slicedToArray2["default"])(_useState1, 2),
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
var _useState11 = (0, _react.useState)(
|
|
68
|
+
headerList = _useState10[0],
|
|
69
|
+
setheaderList = _useState10[1];
|
|
70
|
+
var _useState11 = (0, _react.useState)(false),
|
|
68
71
|
_useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
|
|
69
|
-
|
|
70
|
-
|
|
72
|
+
isOpenSelect = _useState12[0],
|
|
73
|
+
setIsOpenSelect = _useState12[1];
|
|
71
74
|
var _useState13 = (0, _react.useState)(false),
|
|
72
75
|
_useState14 = (0, _slicedToArray2["default"])(_useState13, 2),
|
|
73
|
-
|
|
74
|
-
|
|
76
|
+
isOpenSelectHeader = _useState14[0],
|
|
77
|
+
setIsOpenSelectHeader = _useState14[1];
|
|
75
78
|
var _useState15 = (0, _react.useState)(false),
|
|
76
79
|
_useState16 = (0, _slicedToArray2["default"])(_useState15, 2),
|
|
77
|
-
|
|
78
|
-
|
|
80
|
+
isOpenSelectImageBlock = _useState16[0],
|
|
81
|
+
setIsOpenSelectImageBlock = _useState16[1];
|
|
79
82
|
var _useState17 = (0, _react.useState)(false),
|
|
80
83
|
_useState18 = (0, _slicedToArray2["default"])(_useState17, 2),
|
|
81
|
-
|
|
82
|
-
|
|
84
|
+
isOpenSelectCodeBlock = _useState18[0],
|
|
85
|
+
setIsOpenSelectCodeBlock = _useState18[1];
|
|
83
86
|
var _useState19 = (0, _react.useState)(false),
|
|
84
87
|
_useState20 = (0, _slicedToArray2["default"])(_useState19, 2),
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
var _useState21 = (0, _react.useState)(
|
|
88
|
+
isOpenSelectBlockquote = _useState20[0],
|
|
89
|
+
setIsOpenSelectBlockquote = _useState20[1];
|
|
90
|
+
var _useState21 = (0, _react.useState)(''),
|
|
88
91
|
_useState22 = (0, _slicedToArray2["default"])(_useState21, 2),
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
var
|
|
92
|
+
htmlString = _useState22[0],
|
|
93
|
+
setHtmlString = _useState22[1];
|
|
94
|
+
var initTab = (0, _react.useMemo)(function () {
|
|
95
|
+
if (linked_id) {
|
|
96
|
+
return 'block';
|
|
97
|
+
}
|
|
98
|
+
if (linked_wiki_page_id) {
|
|
99
|
+
return 'page';
|
|
100
|
+
}
|
|
101
|
+
return 'url';
|
|
102
|
+
}, [linked_id, linked_wiki_page_id]);
|
|
103
|
+
var _useState23 = (0, _react.useState)(initTab !== 'url' ? '' : oldURL),
|
|
92
104
|
_useState24 = (0, _slicedToArray2["default"])(_useState23, 2),
|
|
93
|
-
|
|
94
|
-
|
|
105
|
+
url = _useState24[0],
|
|
106
|
+
setURL = _useState24[1];
|
|
107
|
+
var _useState25 = (0, _react.useState)(initTab),
|
|
108
|
+
_useState26 = (0, _slicedToArray2["default"])(_useState25, 2),
|
|
109
|
+
activeTab = _useState26[0],
|
|
110
|
+
setActiveTab = _useState26[1];
|
|
95
111
|
var submit = (0, _react.useCallback)(function () {
|
|
96
112
|
setLinkErrorMessage('');
|
|
97
113
|
setTitleErrorMessage('');
|
|
98
|
-
if (
|
|
114
|
+
if (editor.editorType === _constants.WIKI_EDITOR) {
|
|
115
|
+
if (!url && !selectedBlockId && !selectedPageId) {
|
|
116
|
+
setLinkErrorMessage(t('The_link_address_or_link_page_or_link_block_is_required'));
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
if (editor.editorType !== _constants.WIKI_EDITOR && !url && !selectedBlockId) {
|
|
99
121
|
setLinkErrorMessage(t('The_link_address_or_link_block_is_required'));
|
|
100
122
|
return;
|
|
101
123
|
}
|
|
@@ -109,15 +131,15 @@ var AddLinkDialog = function AddLinkDialog(_ref) {
|
|
|
109
131
|
}
|
|
110
132
|
var isEdit = oldURL || oldTitle;
|
|
111
133
|
if (isEdit) {
|
|
112
|
-
(0, _helpers.updateLink)(editor, title, url, selectedBlockId);
|
|
134
|
+
(0, _helpers.updateLink)(editor, title, url, selectedBlockId, selectedPageId);
|
|
113
135
|
} else {
|
|
114
|
-
(0, _helpers.insertLink)(editor, title, url, insertPosition, slateNode, selectedBlockId);
|
|
136
|
+
(0, _helpers.insertLink)(editor, title, url, insertPosition, slateNode, selectedBlockId, selectedPageId);
|
|
115
137
|
}
|
|
116
138
|
handleSubmit && handleSubmit();
|
|
117
139
|
closeDialog();
|
|
118
140
|
|
|
119
141
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
120
|
-
}, [editor, url, title, oldTitle, oldURL, insertPosition, selectedBlockId]);
|
|
142
|
+
}, [editor, url, title, oldTitle, oldURL, insertPosition, selectedBlockId, selectedPageId]);
|
|
121
143
|
var onKeyDown = (0, _react.useCallback)(function (event) {
|
|
122
144
|
if (event.keyCode === 13) {
|
|
123
145
|
event.preventDefault();
|
|
@@ -132,6 +154,7 @@ var AddLinkDialog = function AddLinkDialog(_ref) {
|
|
|
132
154
|
if (value === url) return;
|
|
133
155
|
setURL(value);
|
|
134
156
|
setSelectedBlockId('');
|
|
157
|
+
setSelectedPageId('');
|
|
135
158
|
}, [url]);
|
|
136
159
|
var handleTitleChange = (0, _react.useCallback)(function (event) {
|
|
137
160
|
var value = event.target.value;
|
|
@@ -157,6 +180,7 @@ var AddLinkDialog = function AddLinkDialog(_ref) {
|
|
|
157
180
|
var nodeId = block.dataset.id;
|
|
158
181
|
setSelectedBlockId(nodeId);
|
|
159
182
|
setURL('');
|
|
183
|
+
setSelectedPageId('');
|
|
160
184
|
setIsOpenSelect(false);
|
|
161
185
|
}
|
|
162
186
|
};
|
|
@@ -187,7 +211,7 @@ var AddLinkDialog = function AddLinkDialog(_ref) {
|
|
|
187
211
|
while (1) switch (_context.n) {
|
|
188
212
|
case 0:
|
|
189
213
|
list = editor.children.filter(function (node) {
|
|
190
|
-
return _slate.Element.isElement(node) && !(0, _helpers.isEmptyNode)(node) &&
|
|
214
|
+
return _slate.Element.isElement(node) && !(0, _helpers.isEmptyNode)(node) && _constants2.INTERNAL_LINKED_TYPE.includes(node.type);
|
|
191
215
|
});
|
|
192
216
|
mdValue = list.map(function (node) {
|
|
193
217
|
return "<!--".concat(node.id, "-->\n").concat((0, _slateToMd["default"])([node]));
|
|
@@ -215,7 +239,7 @@ var AddLinkDialog = function AddLinkDialog(_ref) {
|
|
|
215
239
|
(0, _react.useEffect)(function () {
|
|
216
240
|
// Get header node list
|
|
217
241
|
var headerList = editor.children.filter(function (node) {
|
|
218
|
-
return _slate.Element.isElement(node) && !(0, _helpers.isEmptyNode)(node) &&
|
|
242
|
+
return _slate.Element.isElement(node) && !(0, _helpers.isEmptyNode)(node) && _constants2.HEADERS.includes(node.type);
|
|
219
243
|
});
|
|
220
244
|
if (headerList.length > 0) {
|
|
221
245
|
setheaderList(headerList);
|
|
@@ -256,7 +280,14 @@ var AddLinkDialog = function AddLinkDialog(_ref) {
|
|
|
256
280
|
onClick: function onClick() {
|
|
257
281
|
return setActiveTab('url');
|
|
258
282
|
}
|
|
259
|
-
}, t('Link_address')), /*#__PURE__*/_react["default"].createElement("div", {
|
|
283
|
+
}, t('Link_address')), editor.editorType === _constants.WIKI_EDITOR && /*#__PURE__*/_react["default"].createElement("div", {
|
|
284
|
+
className: (0, _classnames["default"])('link-page-btn', {
|
|
285
|
+
'active': activeTab === 'page'
|
|
286
|
+
}),
|
|
287
|
+
onClick: function onClick() {
|
|
288
|
+
return setActiveTab('page');
|
|
289
|
+
}
|
|
290
|
+
}, t('Link_page')), /*#__PURE__*/_react["default"].createElement("div", {
|
|
260
291
|
className: (0, _classnames["default"])('link-block-btn', {
|
|
261
292
|
'active': activeTab === 'block'
|
|
262
293
|
}),
|
|
@@ -313,7 +344,7 @@ var AddLinkDialog = function AddLinkDialog(_ref) {
|
|
|
313
344
|
}
|
|
314
345
|
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
315
346
|
className: "heading-prefix"
|
|
316
|
-
},
|
|
347
|
+
}, _constants2.HEADER_TAG[header.type]), /*#__PURE__*/_react["default"].createElement("div", {
|
|
317
348
|
"data-id": header.id,
|
|
318
349
|
className: "linked-header-block-item"
|
|
319
350
|
}, headerContext));
|
|
@@ -374,7 +405,13 @@ var AddLinkDialog = function AddLinkDialog(_ref) {
|
|
|
374
405
|
onClick: function onClick(e) {
|
|
375
406
|
return handleOnChangeBlock(e);
|
|
376
407
|
}
|
|
377
|
-
})))
|
|
408
|
+
}))), editor.editorType === _constants.WIKI_EDITOR && activeTab === 'page' && /*#__PURE__*/_react["default"].createElement(_linkedPage["default"], {
|
|
409
|
+
editor: editor,
|
|
410
|
+
element: element,
|
|
411
|
+
setSelectedPageId: setSelectedPageId,
|
|
412
|
+
setSelectedBlockId: setSelectedBlockId,
|
|
413
|
+
setURL: setURL
|
|
414
|
+
}))), /*#__PURE__*/_react["default"].createElement(_reactstrap.ModalFooter, null, /*#__PURE__*/_react["default"].createElement(_reactstrap.Button, {
|
|
378
415
|
color: "secondary",
|
|
379
416
|
onClick: closeDialog
|
|
380
417
|
}, t('Cancel')), /*#__PURE__*/_react["default"].createElement(_reactstrap.Button, {
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
.link-block-wrapper.sdoc-wiki-link-page {
|
|
2
|
+
padding: 12px 5px;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.sdoc-wiki-link-page-item-wrapper {
|
|
6
|
+
display: block;
|
|
7
|
+
width: 100%;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.sdoc-wiki-link-page-item {
|
|
11
|
+
display: flex;
|
|
12
|
+
width: auto;
|
|
13
|
+
height: 32px;
|
|
14
|
+
padding: 0 8px 0 0;
|
|
15
|
+
font-size: 14px;
|
|
16
|
+
align-items: center;
|
|
17
|
+
justify-content: flex-start;
|
|
18
|
+
border-radius: 3px;
|
|
19
|
+
margin-left: 20px;
|
|
20
|
+
cursor: pointer;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.sdoc-wiki-link-page-item.is-dir {
|
|
24
|
+
margin-left: 0;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.sdoc-wiki-link-page-item:hover {
|
|
28
|
+
background-color: #f5f5f5;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.sdoc-wiki-link-page-item .toggle-icon-container {
|
|
32
|
+
width: 22px;
|
|
33
|
+
height: 22px;
|
|
34
|
+
display: flex;
|
|
35
|
+
justify-content: center;
|
|
36
|
+
align-items: center;
|
|
37
|
+
color: #666;
|
|
38
|
+
font-size: 12px;
|
|
39
|
+
border-radius: 3px;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.sdoc-wiki-link-page-item .toggle-icon-container .sdoc-file-icon-toggle {
|
|
43
|
+
transform: rotate(270deg);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.sdoc-wiki-link-page-item .toggle-icon-container.opened .sdoc-file-icon-toggle {
|
|
47
|
+
transform: rotate(0deg);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.sdoc-wiki-link-page-item .page-icon {
|
|
51
|
+
width: 20px;
|
|
52
|
+
height: 20px;
|
|
53
|
+
border-radius: 3px;
|
|
54
|
+
display: flex;
|
|
55
|
+
justify-content: center;
|
|
56
|
+
align-items: center;
|
|
57
|
+
/* margin-left: 22px; */
|
|
58
|
+
margin-right: 6px;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.sdoc-wiki-link-page-main {
|
|
62
|
+
display: inline-flex;
|
|
63
|
+
align-items: center;
|
|
64
|
+
flex: 1 1;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.sdoc-wiki-link-page-item-wrapper .page-name {
|
|
68
|
+
height: 32px;
|
|
69
|
+
line-height: 32px;
|
|
70
|
+
flex: 1 1;
|
|
71
|
+
overflow: hidden;
|
|
72
|
+
text-overflow: ellipsis;
|
|
73
|
+
white-space: nowrap;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.sdoc-files-search-popover-container {
|
|
77
|
+
width: 100%;
|
|
78
|
+
padding: 0 5px 5px;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.selected-wiki-linked-page {
|
|
82
|
+
display: flex;
|
|
83
|
+
width: auto;
|
|
84
|
+
height: 32px;
|
|
85
|
+
padding: 0 8px 0 0;
|
|
86
|
+
font-size: 14px;
|
|
87
|
+
align-items: center;
|
|
88
|
+
justify-content: flex-start;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.selected-wiki-linked-page .page-icon {
|
|
92
|
+
width: 20px;
|
|
93
|
+
height: 20px;
|
|
94
|
+
border-radius: 3px;
|
|
95
|
+
display: flex;
|
|
96
|
+
justify-content: center;
|
|
97
|
+
align-items: center;
|
|
98
|
+
margin-right: 6px;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.selected-wiki-linked-page .page-name {
|
|
102
|
+
height: 32px;
|
|
103
|
+
line-height: 32px;
|
|
104
|
+
flex: 1 1;
|
|
105
|
+
overflow: hidden;
|
|
106
|
+
text-overflow: ellipsis;
|
|
107
|
+
white-space: nowrap;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.sdoc-page-search-container {
|
|
111
|
+
position: relative;
|
|
112
|
+
display: flex;
|
|
113
|
+
align-items: center;
|
|
114
|
+
width: 100%;
|
|
115
|
+
padding: 0 5px 5px;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
.sdoc-page-search-container .sdoc-search {
|
|
119
|
+
position: absolute;
|
|
120
|
+
left: 10px;
|
|
121
|
+
display: flex;
|
|
122
|
+
align-items: center;
|
|
123
|
+
justify-content: center;
|
|
124
|
+
width: 20px;
|
|
125
|
+
color: #868E96 !important;
|
|
126
|
+
font-size: 14px;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
.sdoc-page-search-container .sdoc-search-close-icon {
|
|
130
|
+
position: absolute;
|
|
131
|
+
right: 10px;
|
|
132
|
+
display: flex;
|
|
133
|
+
border-radius: 3px;
|
|
134
|
+
align-items: center;
|
|
135
|
+
justify-content: center;
|
|
136
|
+
height: 24px;
|
|
137
|
+
width: 24px;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.sdoc-search-close-icon:hover {
|
|
141
|
+
background-color: #efefef;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
.sdoc-search-close-icon .sdocfont {
|
|
145
|
+
font-size: 16px;
|
|
146
|
+
color: #868E96;
|
|
147
|
+
cursor: pointer;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.no-search-result {
|
|
151
|
+
display: flex;
|
|
152
|
+
padding: 0 5px;
|
|
153
|
+
}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"];
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports["default"] = void 0;
|
|
9
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/defineProperty"));
|
|
10
|
+
var _objectSpread3 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
|
|
11
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
|
|
12
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
13
|
+
var _reactI18next = require("react-i18next");
|
|
14
|
+
var _reactstrap = require("reactstrap");
|
|
15
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
16
|
+
var _isHotkey = _interopRequireDefault(require("is-hotkey"));
|
|
17
|
+
var _constants = require("../../../../../../constants");
|
|
18
|
+
var _context = _interopRequireDefault(require("../../../../../../context"));
|
|
19
|
+
var _selectedPageDisplay = require("./selected-page-display");
|
|
20
|
+
require("./linked-page.css");
|
|
21
|
+
var LinkedPagesForm = function LinkedPagesForm(_ref) {
|
|
22
|
+
var editor = _ref.editor,
|
|
23
|
+
element = _ref.element,
|
|
24
|
+
setSelectedPageId = _ref.setSelectedPageId,
|
|
25
|
+
setSelectedBlockId = _ref.setSelectedBlockId,
|
|
26
|
+
setURL = _ref.setURL;
|
|
27
|
+
var _useTranslation = (0, _reactI18next.useTranslation)('sdoc-editor'),
|
|
28
|
+
t = _useTranslation.t;
|
|
29
|
+
var _useState = (0, _react.useState)(false),
|
|
30
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
31
|
+
isOpenSelect = _useState2[0],
|
|
32
|
+
setIsOpenSelect = _useState2[1];
|
|
33
|
+
var _useState3 = (0, _react.useState)({}),
|
|
34
|
+
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
35
|
+
collapsedMap = _useState4[0],
|
|
36
|
+
setCollapsedMap = _useState4[1];
|
|
37
|
+
var _useState5 = (0, _react.useState)(''),
|
|
38
|
+
_useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
|
|
39
|
+
temSearchContent = _useState6[0],
|
|
40
|
+
setTemSearchContent = _useState6[1];
|
|
41
|
+
var _useState7 = (0, _react.useState)(''),
|
|
42
|
+
_useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
|
|
43
|
+
searchContent = _useState8[0],
|
|
44
|
+
setSearchContent = _useState8[1];
|
|
45
|
+
var _useState9 = (0, _react.useState)(false),
|
|
46
|
+
_useState0 = (0, _slicedToArray2["default"])(_useState9, 2),
|
|
47
|
+
isOpenSearch = _useState0[0],
|
|
48
|
+
setIsOpenSearch = _useState0[1];
|
|
49
|
+
var _useState1 = (0, _react.useState)([]),
|
|
50
|
+
_useState10 = (0, _slicedToArray2["default"])(_useState1, 2),
|
|
51
|
+
searchResult = _useState10[0],
|
|
52
|
+
setSearchResult = _useState10[1];
|
|
53
|
+
var searchRef = (0, _react.useRef)(null);
|
|
54
|
+
var _ref2 = editor.editorType === _constants.WIKI_EDITOR && _context["default"].getSetting('navConfig'),
|
|
55
|
+
wikiPageList = _ref2.pages,
|
|
56
|
+
wikiNavPages = _ref2.navigation;
|
|
57
|
+
var _ref3 = element || {},
|
|
58
|
+
linked_wiki_page_id = _ref3.linked_wiki_page_id;
|
|
59
|
+
var _useState11 = (0, _react.useState)(linked_wiki_page_id || ''),
|
|
60
|
+
_useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
|
|
61
|
+
displayedWikiPage = _useState12[0],
|
|
62
|
+
setDisplayedWikiPage = _useState12[1];
|
|
63
|
+
var isCollapsed = function isCollapsed(dirId) {
|
|
64
|
+
return !collapsedMap[dirId];
|
|
65
|
+
};
|
|
66
|
+
var toggleDir = function toggleDir(dirId) {
|
|
67
|
+
setCollapsedMap(function (prev) {
|
|
68
|
+
return (0, _objectSpread3["default"])((0, _objectSpread3["default"])({}, prev), {}, (0, _defineProperty2["default"])({}, dirId, !prev[dirId]));
|
|
69
|
+
});
|
|
70
|
+
};
|
|
71
|
+
var executeSearch = (0, _react.useCallback)(function () {
|
|
72
|
+
if (!temSearchContent.trim()) {
|
|
73
|
+
setSearchContent('');
|
|
74
|
+
setIsOpenSearch(false);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
setSearchContent(temSearchContent);
|
|
78
|
+
setIsOpenSearch(true);
|
|
79
|
+
}, [temSearchContent]);
|
|
80
|
+
var handleSearchInputChange = (0, _react.useCallback)(function (e) {
|
|
81
|
+
var keyword = e.target.value.toLowerCase();
|
|
82
|
+
setTemSearchContent(keyword);
|
|
83
|
+
}, []);
|
|
84
|
+
var handleInputKeyDown = (0, _react.useCallback)(function (e) {
|
|
85
|
+
if ((0, _isHotkey["default"])('enter', e)) {
|
|
86
|
+
e.preventDefault();
|
|
87
|
+
executeSearch();
|
|
88
|
+
}
|
|
89
|
+
if ((0, _isHotkey["default"])('escape', e)) {
|
|
90
|
+
e.preventDefault();
|
|
91
|
+
e.stopPropagation();
|
|
92
|
+
var el = searchRef.current;
|
|
93
|
+
if (!el) return;
|
|
94
|
+
el && el.blur();
|
|
95
|
+
el && (el.value = '');
|
|
96
|
+
setSearchContent('');
|
|
97
|
+
setIsOpenSearch(false);
|
|
98
|
+
}
|
|
99
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
100
|
+
}, [executeSearch, isOpenSearch]);
|
|
101
|
+
var getSearchPages = function getSearchPages(searchContent) {
|
|
102
|
+
var result = wikiPageList.filter(function (p) {
|
|
103
|
+
var _p$name;
|
|
104
|
+
return (_p$name = p.name) === null || _p$name === void 0 ? void 0 : _p$name.includes(searchContent);
|
|
105
|
+
});
|
|
106
|
+
result && setSearchResult(result);
|
|
107
|
+
};
|
|
108
|
+
var handleSelect = function handleSelect(e, pageId) {
|
|
109
|
+
e.stopPropagation();
|
|
110
|
+
setSelectedPageId(pageId);
|
|
111
|
+
setSelectedBlockId('');
|
|
112
|
+
setURL('');
|
|
113
|
+
setDisplayedWikiPage(pageId);
|
|
114
|
+
setIsOpenSelect(false);
|
|
115
|
+
setIsOpenSearch(false);
|
|
116
|
+
};
|
|
117
|
+
var handleOnClickClose = function handleOnClickClose(e) {
|
|
118
|
+
e.stopPropagation();
|
|
119
|
+
var el = searchRef.current;
|
|
120
|
+
if (!el) return;
|
|
121
|
+
el && el.blur();
|
|
122
|
+
el && (el.value = '');
|
|
123
|
+
setIsOpenSearch(false);
|
|
124
|
+
setSearchContent('');
|
|
125
|
+
};
|
|
126
|
+
(0, _react.useEffect)(function () {
|
|
127
|
+
if (searchContent.trim() && isOpenSearch) {
|
|
128
|
+
getSearchPages(searchContent);
|
|
129
|
+
}
|
|
130
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
131
|
+
}, [isOpenSearch, searchContent]);
|
|
132
|
+
var _renderPage = function renderPage(item, wikiPageList) {
|
|
133
|
+
var depth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
|
|
134
|
+
var isFromSearch = arguments.length > 3 ? arguments[3] : undefined;
|
|
135
|
+
var page = wikiPageList.find(function (p) {
|
|
136
|
+
return p.id === item.id;
|
|
137
|
+
});
|
|
138
|
+
if (isFromSearch) {
|
|
139
|
+
page.isDir = false;
|
|
140
|
+
}
|
|
141
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
142
|
+
key: page.id,
|
|
143
|
+
className: "sdoc-wiki-link-page-item-wrapper",
|
|
144
|
+
style: {
|
|
145
|
+
paddingLeft: depth * 16
|
|
146
|
+
}
|
|
147
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
148
|
+
className: (0, _classnames["default"])('sdoc-wiki-link-page-item', {
|
|
149
|
+
'is-dir': page.isDir
|
|
150
|
+
})
|
|
151
|
+
}, page.isDir && /*#__PURE__*/_react["default"].createElement("span", {
|
|
152
|
+
className: (0, _classnames["default"])('toggle-icon-container', {
|
|
153
|
+
'opened': !isCollapsed(page.id)
|
|
154
|
+
}),
|
|
155
|
+
onClick: function onClick(e) {
|
|
156
|
+
e.stopPropagation();
|
|
157
|
+
toggleDir(page.id);
|
|
158
|
+
}
|
|
159
|
+
}, /*#__PURE__*/_react["default"].createElement("i", {
|
|
160
|
+
className: "sdoc-file-icon sdoc-file-icon-toggle sdocfont sdoc-arrow-down"
|
|
161
|
+
})), /*#__PURE__*/_react["default"].createElement("span", {
|
|
162
|
+
className: "sdoc-wiki-link-page-main",
|
|
163
|
+
onClick: function onClick(e) {
|
|
164
|
+
return handleSelect(e, page.id);
|
|
165
|
+
}
|
|
166
|
+
}, page.icon && /*#__PURE__*/_react["default"].createElement("span", {
|
|
167
|
+
className: "page-icon"
|
|
168
|
+
}, page.icon), !page.icon && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, page.isDir ? /*#__PURE__*/_react["default"].createElement("span", {
|
|
169
|
+
className: "page-icon sf3-font sf3-font-files2"
|
|
170
|
+
}) : /*#__PURE__*/_react["default"].createElement("span", {
|
|
171
|
+
className: "page-icon sf3-font sf3-font-file"
|
|
172
|
+
})), /*#__PURE__*/_react["default"].createElement("span", {
|
|
173
|
+
className: "page-name"
|
|
174
|
+
}, page.name))), page.isDir && !isCollapsed(page.id) && item.children.length > 0 && /*#__PURE__*/_react["default"].createElement("div", {
|
|
175
|
+
className: "sdoc-wiki-link-page-children"
|
|
176
|
+
}, item.children.map(function (child) {
|
|
177
|
+
return _renderPage(child, wikiPageList, depth + 1);
|
|
178
|
+
})));
|
|
179
|
+
};
|
|
180
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
181
|
+
className: "form-group selected-linked-block-wrapper"
|
|
182
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
183
|
+
className: (0, _classnames["default"])('form-control', {
|
|
184
|
+
'expanded': isOpenSelect
|
|
185
|
+
}),
|
|
186
|
+
onClick: function onClick() {
|
|
187
|
+
setIsOpenSelect(!isOpenSelect);
|
|
188
|
+
}
|
|
189
|
+
}, /*#__PURE__*/_react["default"].createElement("span", {
|
|
190
|
+
className: "selected-wiki-linked-page"
|
|
191
|
+
}, /*#__PURE__*/_react["default"].createElement(_selectedPageDisplay.PageDisplay, {
|
|
192
|
+
pageId: displayedWikiPage,
|
|
193
|
+
wikiPageList: wikiPageList
|
|
194
|
+
})), /*#__PURE__*/_react["default"].createElement("i", {
|
|
195
|
+
className: "sdoc-file-icon sdoc-file-icon-toggle sdocfont sdoc-arrow-down"
|
|
196
|
+
})), isOpenSelect && /*#__PURE__*/_react["default"].createElement("div", {
|
|
197
|
+
className: "link-block-wrapper sdoc-wiki-link-page"
|
|
198
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
199
|
+
className: "sdoc-page-search-container"
|
|
200
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
201
|
+
className: "sdocfont sdoc-find-replace sdoc-search"
|
|
202
|
+
}), /*#__PURE__*/_react["default"].createElement(_reactstrap.Input, {
|
|
203
|
+
innerRef: searchRef,
|
|
204
|
+
className: "sdoc-search-input",
|
|
205
|
+
onKeyUp: handleInputKeyDown,
|
|
206
|
+
onChange: handleSearchInputChange,
|
|
207
|
+
id: "sdoc-search",
|
|
208
|
+
placeholder: t('Search_page')
|
|
209
|
+
}), /*#__PURE__*/_react["default"].createElement("div", {
|
|
210
|
+
className: "sdoc-search-close-icon",
|
|
211
|
+
onClick: handleOnClickClose
|
|
212
|
+
}, /*#__PURE__*/_react["default"].createElement("i", {
|
|
213
|
+
className: "sdocfont sdoc-sm-close"
|
|
214
|
+
}))), !isOpenSearch && wikiNavPages && wikiNavPages.length > 0 && wikiNavPages.map(function (item) {
|
|
215
|
+
return _renderPage(item, wikiPageList, 0);
|
|
216
|
+
}), isOpenSearch && searchResult.length > 0 && searchResult.map(function (item) {
|
|
217
|
+
return _renderPage(item, wikiPageList, 0, true);
|
|
218
|
+
}), isOpenSearch && searchResult.length === 0 && /*#__PURE__*/_react["default"].createElement("div", {
|
|
219
|
+
className: "no-search-result"
|
|
220
|
+
}, t('No_page_results'))));
|
|
221
|
+
};
|
|
222
|
+
var _default = exports["default"] = LinkedPagesForm;
|
package/dist/extension/plugins/link/dialog/add-link-dialog/select-forms/selected-page-display.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.PageDisplay = void 0;
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
var PageDisplay = exports.PageDisplay = function PageDisplay(_ref) {
|
|
10
|
+
var pageId = _ref.pageId,
|
|
11
|
+
wikiPageList = _ref.wikiPageList;
|
|
12
|
+
var page = wikiPageList.find(function (p) {
|
|
13
|
+
return p.id === pageId;
|
|
14
|
+
});
|
|
15
|
+
if (!page) return null;
|
|
16
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, page.icon && /*#__PURE__*/_react["default"].createElement("span", {
|
|
17
|
+
className: "page-icon"
|
|
18
|
+
}, page.icon), !page.icon && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, page.isDir ? /*#__PURE__*/_react["default"].createElement("span", {
|
|
19
|
+
className: "page-icon sf3-font sf3-font-files2"
|
|
20
|
+
}) : /*#__PURE__*/_react["default"].createElement("span", {
|
|
21
|
+
className: "page-icon sf3-font sf3-font-file"
|
|
22
|
+
})), /*#__PURE__*/_react["default"].createElement("span", {
|
|
23
|
+
className: "page-name"
|
|
24
|
+
}, page.name));
|
|
25
|
+
};
|
|
@@ -11,7 +11,8 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm
|
|
|
11
11
|
var _slate = require("@seafile/slate");
|
|
12
12
|
var _slateReact = require("@seafile/slate-react");
|
|
13
13
|
var _slugid = _interopRequireDefault(require("slugid"));
|
|
14
|
-
var _constants = require("
|
|
14
|
+
var _constants = require("../../../constants");
|
|
15
|
+
var _constants2 = require("../../constants");
|
|
15
16
|
var _core = require("../../core");
|
|
16
17
|
var isMenuDisabled = exports.isMenuDisabled = function isMenuDisabled(editor, readonly) {
|
|
17
18
|
if (readonly) return true;
|
|
@@ -20,7 +21,7 @@ var isMenuDisabled = exports.isMenuDisabled = function isMenuDisabled(editor, re
|
|
|
20
21
|
var notMatch = selectedElems.some(function (elem) {
|
|
21
22
|
var type = elem.type;
|
|
22
23
|
if (editor.isVoid(elem)) return true;
|
|
23
|
-
if ([
|
|
24
|
+
if ([_constants2.CODE_BLOCK, _constants2.CODE_LINE, _constants2.LINK].includes(type)) return true;
|
|
24
25
|
return false;
|
|
25
26
|
});
|
|
26
27
|
if (notMatch) return true; // disabled
|
|
@@ -32,13 +33,14 @@ var checkLink = exports.checkLink = function checkLink(url) {
|
|
|
32
33
|
}
|
|
33
34
|
return false;
|
|
34
35
|
};
|
|
35
|
-
var genLinkNode = exports.genLinkNode = function genLinkNode(url, text, nodeId) {
|
|
36
|
+
var genLinkNode = exports.genLinkNode = function genLinkNode(url, text, nodeId, pageId) {
|
|
36
37
|
var linkNode = {
|
|
37
38
|
id: _slugid["default"].nice(),
|
|
38
39
|
type: 'link',
|
|
39
|
-
href: url,
|
|
40
|
+
href: url || '',
|
|
40
41
|
title: text,
|
|
41
42
|
linked_id: nodeId || '',
|
|
43
|
+
linked_wiki_page_id: pageId || '',
|
|
42
44
|
children: [{
|
|
43
45
|
id: _slugid["default"].nice(),
|
|
44
46
|
text: text || ''
|
|
@@ -49,30 +51,33 @@ var genLinkNode = exports.genLinkNode = function genLinkNode(url, text, nodeId)
|
|
|
49
51
|
var getLinkType = exports.getLinkType = function getLinkType(editor) {
|
|
50
52
|
var _Editor$nodes = _slate.Editor.nodes(editor, {
|
|
51
53
|
match: function match(n) {
|
|
52
|
-
return (0, _core.getNodeType)(n) ===
|
|
54
|
+
return (0, _core.getNodeType)(n) === _constants2.LINK;
|
|
53
55
|
},
|
|
54
56
|
universal: true
|
|
55
57
|
}),
|
|
56
58
|
_Editor$nodes2 = (0, _slicedToArray2["default"])(_Editor$nodes, 1),
|
|
57
59
|
match = _Editor$nodes2[0];
|
|
58
|
-
if (!match) return
|
|
60
|
+
if (!match) return _constants2.PARAGRAPH;
|
|
59
61
|
var _match = (0, _slicedToArray2["default"])(match, 1),
|
|
60
62
|
n = _match[0];
|
|
61
63
|
return (0, _core.getNodeType)(n);
|
|
62
64
|
};
|
|
63
65
|
var insertLink = exports.insertLink = function insertLink(editor, title, url) {
|
|
64
|
-
var position = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] :
|
|
66
|
+
var position = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : _constants2.INSERT_POSITION.CURRENT;
|
|
65
67
|
var slateNode = arguments.length > 4 ? arguments[4] : undefined;
|
|
66
68
|
var linkedNodeId = arguments.length > 5 ? arguments[5] : undefined;
|
|
67
|
-
|
|
68
|
-
if (
|
|
69
|
+
var selectedPageId = arguments.length > 6 ? arguments[6] : undefined;
|
|
70
|
+
if (position === _constants2.INSERT_POSITION.CURRENT && isMenuDisabled(editor)) return;
|
|
71
|
+
if (!title || !url && !linkedNodeId && !selectedPageId) return;
|
|
69
72
|
var linkNode = genLinkNode(url, title);
|
|
70
73
|
if (linkedNodeId) {
|
|
71
74
|
linkNode = genLinkNode(url, title, linkedNodeId);
|
|
75
|
+
} else if (selectedPageId) {
|
|
76
|
+
linkNode = genLinkNode(url, title, '', selectedPageId);
|
|
72
77
|
}
|
|
73
|
-
if (position ===
|
|
78
|
+
if (position === _constants2.INSERT_POSITION.AFTER) {
|
|
74
79
|
var path = _slate.Editor.path(editor, editor.selection);
|
|
75
|
-
if (slateNode && (slateNode === null || slateNode === void 0 ? void 0 : slateNode.type) ===
|
|
80
|
+
if (slateNode && (slateNode === null || slateNode === void 0 ? void 0 : slateNode.type) === _constants2.LIST_ITEM) {
|
|
76
81
|
path = _slateReact.ReactEditor.findPath(editor, slateNode);
|
|
77
82
|
var nextPath = _slate.Path.next(path);
|
|
78
83
|
_slate.Transforms.insertNodes(editor, linkNode, {
|
|
@@ -80,7 +85,7 @@ var insertLink = exports.insertLink = function insertLink(editor, title, url) {
|
|
|
80
85
|
});
|
|
81
86
|
return;
|
|
82
87
|
}
|
|
83
|
-
var p = (0, _core.generateEmptyElement)(
|
|
88
|
+
var p = (0, _core.generateEmptyElement)(_constants2.ELEMENT_TYPE.PARAGRAPH);
|
|
84
89
|
p.children[1] = linkNode;
|
|
85
90
|
_slate.Transforms.insertNodes(editor, p, {
|
|
86
91
|
at: [path[0] + 1]
|
|
@@ -113,23 +118,47 @@ var insertLink = exports.insertLink = function insertLink(editor, title, url) {
|
|
|
113
118
|
edge: 'end'
|
|
114
119
|
});
|
|
115
120
|
};
|
|
116
|
-
var updateLink = exports.updateLink = function updateLink(editor, newText, newUrl, linkedNodeId) {
|
|
121
|
+
var updateLink = exports.updateLink = function updateLink(editor, newText, newUrl, linkedNodeId, linkedPageId) {
|
|
117
122
|
// Update children
|
|
118
123
|
var linkAbove = (0, _core.getAboveNode)(editor, {
|
|
119
124
|
match: {
|
|
120
|
-
type:
|
|
125
|
+
type: _constants2.LINK
|
|
121
126
|
}
|
|
122
127
|
});
|
|
123
128
|
if (linkAbove) {
|
|
124
129
|
var _ref = linkAbove[0] || {},
|
|
125
130
|
oldUrl = _ref.href,
|
|
126
131
|
oldText = _ref.title;
|
|
127
|
-
if (linkedNodeId) {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
132
|
+
if (linkedNodeId || linkedPageId) {
|
|
133
|
+
// In non-wiki link
|
|
134
|
+
if (editor.editorType !== _constants.WIKI_EDITOR && linkedNodeId) {
|
|
135
|
+
_slate.Transforms.setNodes(editor, {
|
|
136
|
+
linked_id: linkedNodeId
|
|
137
|
+
}, {
|
|
138
|
+
at: linkAbove[1]
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
// In wiki link
|
|
142
|
+
if (editor.editorType === _constants.WIKI_EDITOR) {
|
|
143
|
+
if (linkedNodeId) {
|
|
144
|
+
_slate.Transforms.setNodes(editor, (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, linkedNodeId && {
|
|
145
|
+
linked_id: linkedNodeId
|
|
146
|
+
}), {
|
|
147
|
+
linked_wiki_page_id: ''
|
|
148
|
+
}), {
|
|
149
|
+
at: linkAbove[1]
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
if (linkedPageId) {
|
|
153
|
+
_slate.Transforms.setNodes(editor, (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, linkedPageId && {
|
|
154
|
+
linked_wiki_page_id: linkedPageId
|
|
155
|
+
}), {
|
|
156
|
+
linked_id: ''
|
|
157
|
+
}), {
|
|
158
|
+
at: linkAbove[1]
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
}
|
|
133
162
|
if (oldText !== newText) {
|
|
134
163
|
_slate.Transforms.setNodes(editor, {
|
|
135
164
|
title: newText
|
|
@@ -138,14 +167,25 @@ var updateLink = exports.updateLink = function updateLink(editor, newText, newUr
|
|
|
138
167
|
});
|
|
139
168
|
}
|
|
140
169
|
}
|
|
141
|
-
if (!linkedNodeId && (oldUrl !== newUrl || oldText !== newText)) {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
170
|
+
if (!linkedNodeId && !linkedPageId && (oldUrl !== newUrl || oldText !== newText)) {
|
|
171
|
+
if (editor.editorType === _constants.WIKI_EDITOR) {
|
|
172
|
+
_slate.Transforms.setNodes(editor, {
|
|
173
|
+
href: newUrl,
|
|
174
|
+
title: newText,
|
|
175
|
+
linked_id: '',
|
|
176
|
+
linked_wiki_page_id: ''
|
|
177
|
+
}, {
|
|
178
|
+
at: linkAbove[1]
|
|
179
|
+
});
|
|
180
|
+
} else {
|
|
181
|
+
_slate.Transforms.setNodes(editor, {
|
|
182
|
+
href: newUrl,
|
|
183
|
+
title: newText,
|
|
184
|
+
linked_id: ''
|
|
185
|
+
}, {
|
|
186
|
+
at: linkAbove[1]
|
|
187
|
+
});
|
|
188
|
+
}
|
|
149
189
|
}
|
|
150
190
|
upsertLinkText(editor, {
|
|
151
191
|
text: newText
|
|
@@ -157,7 +197,7 @@ var upsertLinkText = exports.upsertLinkText = function upsertLinkText(editor, _r
|
|
|
157
197
|
var text = _ref2.text;
|
|
158
198
|
var newLink = (0, _core.getAboveNode)(editor, {
|
|
159
199
|
match: {
|
|
160
|
-
type:
|
|
200
|
+
type: _constants2.LINK
|
|
161
201
|
}
|
|
162
202
|
});
|
|
163
203
|
if (newLink) {
|
|
@@ -182,7 +222,7 @@ var unWrapLinkNode = exports.unWrapLinkNode = function unWrapLinkNode(editor) {
|
|
|
182
222
|
if (editor.selection == null) return;
|
|
183
223
|
var _Editor$nodes3 = _slate.Editor.nodes(editor, {
|
|
184
224
|
match: function match(n) {
|
|
185
|
-
return (0, _core.getNodeType)(n) ===
|
|
225
|
+
return (0, _core.getNodeType)(n) === _constants2.LINK;
|
|
186
226
|
}
|
|
187
227
|
}),
|
|
188
228
|
_Editor$nodes4 = (0, _slicedToArray2["default"])(_Editor$nodes3, 1),
|
|
@@ -194,7 +234,7 @@ var unWrapLinkNode = exports.unWrapLinkNode = function unWrapLinkNode(editor) {
|
|
|
194
234
|
// unlink
|
|
195
235
|
_slate.Transforms.unwrapNodes(editor, {
|
|
196
236
|
match: function match(n) {
|
|
197
|
-
return (0, _core.getNodeType)(n) ===
|
|
237
|
+
return (0, _core.getNodeType)(n) === _constants2.LINK;
|
|
198
238
|
}
|
|
199
239
|
});
|
|
200
240
|
};
|
|
@@ -220,7 +260,7 @@ var isCommonFile = exports.isCommonFile = function isCommonFile(res, url) {
|
|
|
220
260
|
var _ref5 = fileInfo || {},
|
|
221
261
|
is_dir = _ref5.is_dir,
|
|
222
262
|
file_ext = _ref5.file_ext;
|
|
223
|
-
return fileInfo && !is_dir && !['sdoc', 'exdraw', 'video'].includes(file_ext);
|
|
263
|
+
return fileInfo && !is_dir && file_ext && !['sdoc', 'exdraw', 'video'].includes(file_ext);
|
|
224
264
|
};
|
|
225
265
|
var isWeChat = exports.isWeChat = function isWeChat() {
|
|
226
266
|
var ua = window.navigator.userAgent.toLowerCase();
|
|
@@ -250,7 +290,7 @@ var isLinkToolBarActive = exports.isLinkToolBarActive = function isLinkToolBarAc
|
|
|
250
290
|
if (!editor.selection) return false;
|
|
251
291
|
var _Editor$nodes5 = _slate.Editor.nodes(editor, {
|
|
252
292
|
match: function match(n) {
|
|
253
|
-
return (0, _core.getNodeType)(n) ===
|
|
293
|
+
return (0, _core.getNodeType)(n) === _constants2.LINK;
|
|
254
294
|
}
|
|
255
295
|
}),
|
|
256
296
|
_Editor$nodes6 = (0, _slicedToArray2["default"])(_Editor$nodes5, 1),
|
|
@@ -278,7 +318,7 @@ var parseHtmlString = exports.parseHtmlString = function parseHtmlString(htmlStr
|
|
|
278
318
|
return resultHtml;
|
|
279
319
|
};
|
|
280
320
|
var isEmptyNode = exports.isEmptyNode = function isEmptyNode(node) {
|
|
281
|
-
if (node.type ===
|
|
321
|
+
if (node.type === _constants2.IMAGE_BLOCK) return false;
|
|
282
322
|
var text = _slate.Node.string(node);
|
|
283
323
|
return text.trim() === '';
|
|
284
324
|
};
|
|
@@ -13,6 +13,7 @@ var _reactI18next = require("react-i18next");
|
|
|
13
13
|
var _slate = require("@seafile/slate");
|
|
14
14
|
var _slateReact = require("@seafile/slate-react");
|
|
15
15
|
var _tooltip = _interopRequireDefault(require("../../../../components/tooltip"));
|
|
16
|
+
var _eventBus = _interopRequireDefault(require("../../../../utils/event-bus"));
|
|
16
17
|
var _helpers = require("../helpers");
|
|
17
18
|
require("./index.css");
|
|
18
19
|
var LinkHover = function LinkHover(_ref) {
|
|
@@ -24,7 +25,8 @@ var LinkHover = function LinkHover(_ref) {
|
|
|
24
25
|
var readOnly = (0, _slateReact.useReadOnly)();
|
|
25
26
|
var _useTranslation = (0, _reactI18next.useTranslation)('sdoc-editor'),
|
|
26
27
|
t = _useTranslation.t;
|
|
27
|
-
var linked_id = element.linked_id
|
|
28
|
+
var linked_id = element.linked_id,
|
|
29
|
+
linked_wiki_page_id = element.linked_wiki_page_id;
|
|
28
30
|
var _useState = (0, _react.useState)(false),
|
|
29
31
|
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
30
32
|
isShowTooltip = _useState2[0],
|
|
@@ -43,7 +45,14 @@ var LinkHover = function LinkHover(_ref) {
|
|
|
43
45
|
}, [element.href]);
|
|
44
46
|
var handleOnClick = (0, _react.useCallback)(function (event) {
|
|
45
47
|
event.stopPropagation();
|
|
46
|
-
if (!linked_id) return;
|
|
48
|
+
if (!linked_id && !linked_wiki_page_id) return;
|
|
49
|
+
if (linked_wiki_page_id) {
|
|
50
|
+
var eventBus = _eventBus["default"].getInstance();
|
|
51
|
+
eventBus.dispatch('open_wiki_page_id_link', {
|
|
52
|
+
page_id: linked_wiki_page_id
|
|
53
|
+
});
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
47
56
|
var _Editor$nodes = _slate.Editor.nodes(editor, {
|
|
48
57
|
at: [],
|
|
49
58
|
match: function match(n) {
|
|
@@ -69,7 +78,7 @@ var LinkHover = function LinkHover(_ref) {
|
|
|
69
78
|
id: "link-op-menu",
|
|
70
79
|
className: "link-op-menu",
|
|
71
80
|
style: menuPosition
|
|
72
|
-
}, linked_id ? /*#__PURE__*/_react["default"].createElement("span", {
|
|
81
|
+
}, linked_id || linked_wiki_page_id ? /*#__PURE__*/_react["default"].createElement("span", {
|
|
73
82
|
className: "link-op-menu-link",
|
|
74
83
|
onClick: handleOnClick
|
|
75
84
|
}, t('Go_to_link')) : /*#__PURE__*/_react["default"].createElement("span", {
|
|
@@ -22,7 +22,8 @@ var _utils = require("../../utils");
|
|
|
22
22
|
var _helpers = require("../file-link/helpers");
|
|
23
23
|
var _helpers2 = require("../sdoc-link/helpers");
|
|
24
24
|
var _helper = require("../whiteboard/helper");
|
|
25
|
-
var _helpers3 = require("
|
|
25
|
+
var _helpers3 = require("../wiki-link/helpers");
|
|
26
|
+
var _helpers4 = require("./helpers");
|
|
26
27
|
var withLink = function withLink(editor) {
|
|
27
28
|
var normalizeNode = editor.normalizeNode,
|
|
28
29
|
isInline = editor.isInline,
|
|
@@ -42,18 +43,18 @@ var withLink = function withLink(editor) {
|
|
|
42
43
|
};
|
|
43
44
|
newEditor.insertData = /*#__PURE__*/function () {
|
|
44
45
|
var _ref = (0, _asyncToGenerator2["default"])(/*#__PURE__*/(0, _regenerator2["default"])().m(function _callee(data) {
|
|
45
|
-
var text, res, fileName, fileUuid, _fileName, fileParentPath, filePath, _fileName2, _fileUuid, url,
|
|
46
|
+
var text, res, fileName, fileUuid, _fileName, fileParentPath, filePath, _fileName2, _fileUuid, url, pathname, _context$getSetting, parts, wikiPageId, title, wikiPageList, page, linkedNodeId, _title, params, link, _link, _link2, _Editor$next, _Editor$next2, focusPath, focusPoint, _t;
|
|
46
47
|
return (0, _regenerator2["default"])().w(function (_context) {
|
|
47
48
|
while (1) switch (_context.p = _context.n) {
|
|
48
49
|
case 0:
|
|
49
50
|
// Paste link content
|
|
50
51
|
text = data.getData('text/plain'); // Internal link, insert sdoc file link
|
|
51
52
|
if (!((0, _isUrl["default"])(text) && !(0, _utils.isImage)(text))) {
|
|
52
|
-
_context.n =
|
|
53
|
+
_context.n = 14;
|
|
53
54
|
break;
|
|
54
55
|
}
|
|
55
56
|
if (!(0, _utils.isSameDomain)(text, _context2["default"].getSetting('serviceUrl'))) {
|
|
56
|
-
_context.n =
|
|
57
|
+
_context.n = 12;
|
|
57
58
|
break;
|
|
58
59
|
}
|
|
59
60
|
_context.p = 1;
|
|
@@ -61,17 +62,17 @@ var withLink = function withLink(editor) {
|
|
|
61
62
|
return _context2["default"].getLinkFilesInfo([text]);
|
|
62
63
|
case 2:
|
|
63
64
|
res = _context.v;
|
|
64
|
-
if (!(0,
|
|
65
|
+
if (!(0, _helpers4.isSdocFile)(res, text)) {
|
|
65
66
|
_context.n = 3;
|
|
66
67
|
break;
|
|
67
68
|
}
|
|
68
69
|
fileName = res.data.files_info[text].name;
|
|
69
70
|
fileUuid = res.data.files_info[text].file_uuid;
|
|
70
71
|
(0, _helpers2.insertSdocFileLink)(editor, fileName, fileUuid);
|
|
71
|
-
_context.n =
|
|
72
|
+
_context.n = 9;
|
|
72
73
|
break;
|
|
73
74
|
case 3:
|
|
74
|
-
if (!(0,
|
|
75
|
+
if (!(0, _helpers4.isExdrawFile)(res, text)) {
|
|
75
76
|
_context.n = 4;
|
|
76
77
|
break;
|
|
77
78
|
}
|
|
@@ -79,62 +80,85 @@ var withLink = function withLink(editor) {
|
|
|
79
80
|
fileParentPath = res.data.files_info[text].parent_path;
|
|
80
81
|
filePath = fileParentPath + '/' + _fileName;
|
|
81
82
|
(0, _helper.insertWhiteboard)(editor, _fileName, filePath);
|
|
82
|
-
_context.n =
|
|
83
|
+
_context.n = 9;
|
|
83
84
|
break;
|
|
84
85
|
case 4:
|
|
85
|
-
if (!(0,
|
|
86
|
+
if (!(0, _helpers4.isCommonFile)(res, text)) {
|
|
86
87
|
_context.n = 5;
|
|
87
88
|
break;
|
|
88
89
|
}
|
|
89
90
|
_fileName2 = res.data.files_info[text].name;
|
|
90
91
|
_fileUuid = res.data.files_info[text].file_uuid;
|
|
91
92
|
(0, _helpers.insertFileLink)(editor, _fileName2, _fileUuid);
|
|
92
|
-
_context.n =
|
|
93
|
+
_context.n = 9;
|
|
93
94
|
break;
|
|
94
95
|
case 5:
|
|
95
|
-
url = new URL(text);
|
|
96
|
-
|
|
96
|
+
url = new URL(text); // Insert wiki page as link in wiki
|
|
97
|
+
pathname = url.pathname;
|
|
98
|
+
if (!(editor.editorType === _constants.WIKI_EDITOR && pathname.includes('/wikis/'))) {
|
|
99
|
+
_context.n = 7;
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
parts = pathname.split('/');
|
|
103
|
+
wikiPageId = parts[parts.length - 2];
|
|
97
104
|
if (!(editor.selection && !_slate.Range.isCollapsed(editor.selection))) {
|
|
98
105
|
_context.n = 6;
|
|
99
106
|
break;
|
|
100
107
|
}
|
|
101
108
|
title = (0, _core.getEditorString)(editor, editor.selection);
|
|
102
|
-
(0,
|
|
109
|
+
(0, _helpers4.insertLink)(editor, title, text, _constants2.INSERT_POSITION.CURRENT, null, '', wikiPageId);
|
|
103
110
|
return _context.a(2);
|
|
104
111
|
case 6:
|
|
112
|
+
wikiPageList = (_context$getSetting = _context2["default"].getSetting('navConfig')) === null || _context$getSetting === void 0 ? void 0 : _context$getSetting.pages;
|
|
113
|
+
page = wikiPageList === null || wikiPageList === void 0 ? void 0 : wikiPageList.find(function (p) {
|
|
114
|
+
return p.id === wikiPageId;
|
|
115
|
+
});
|
|
116
|
+
page && (0, _helpers3.insertWikiPageLink)(editor, page.name, page.wikiRepoId, page.id);
|
|
117
|
+
return _context.a(2);
|
|
118
|
+
case 7:
|
|
119
|
+
// Insert block element as link
|
|
120
|
+
linkedNodeId = url.hash.replace(/^#/, '');
|
|
121
|
+
if (!(editor.selection && !_slate.Range.isCollapsed(editor.selection))) {
|
|
122
|
+
_context.n = 8;
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
_title = (0, _core.getEditorString)(editor, editor.selection);
|
|
126
|
+
(0, _helpers4.insertLink)(editor, _title, text, _constants2.INSERT_POSITION.CURRENT, null, linkedNodeId);
|
|
127
|
+
return _context.a(2);
|
|
128
|
+
case 8:
|
|
105
129
|
params = new URLSearchParams(url.search);
|
|
106
130
|
if (params.get('from') === 'copy-block') {
|
|
107
|
-
link = (0,
|
|
131
|
+
link = (0, _helpers4.genLinkNode)(text, text, linkedNodeId);
|
|
108
132
|
} else {
|
|
109
|
-
link = (0,
|
|
133
|
+
link = (0, _helpers4.genLinkNode)(text, text);
|
|
110
134
|
}
|
|
111
135
|
_slate.Transforms.insertNodes(newEditor, link);
|
|
112
|
-
case 7:
|
|
113
|
-
_context.n = 9;
|
|
114
|
-
break;
|
|
115
|
-
case 8:
|
|
116
|
-
_context.p = 8;
|
|
117
|
-
_t = _context.v;
|
|
118
|
-
_link = (0, _helpers3.genLinkNode)(text, text);
|
|
119
|
-
_slate.Transforms.insertNodes(newEditor, _link);
|
|
120
136
|
case 9:
|
|
121
137
|
_context.n = 11;
|
|
122
138
|
break;
|
|
123
139
|
case 10:
|
|
124
|
-
|
|
125
|
-
|
|
140
|
+
_context.p = 10;
|
|
141
|
+
_t = _context.v;
|
|
142
|
+
_link = (0, _helpers4.genLinkNode)(text, text);
|
|
143
|
+
_slate.Transforms.insertNodes(newEditor, _link);
|
|
126
144
|
case 11:
|
|
145
|
+
_context.n = 13;
|
|
146
|
+
break;
|
|
147
|
+
case 12:
|
|
148
|
+
_link2 = (0, _helpers4.genLinkNode)(text, text);
|
|
149
|
+
_slate.Transforms.insertNodes(newEditor, _link2);
|
|
150
|
+
case 13:
|
|
127
151
|
// Void merging text from link
|
|
128
152
|
_Editor$next = _slate.Editor.next(newEditor), _Editor$next2 = (0, _slicedToArray2["default"])(_Editor$next, 2), focusPath = _Editor$next2[1];
|
|
129
153
|
focusPoint = _slate.Editor.start(newEditor, focusPath);
|
|
130
154
|
_slate.Transforms.select(newEditor, focusPoint);
|
|
131
155
|
return _context.a(2);
|
|
132
|
-
case
|
|
156
|
+
case 14:
|
|
133
157
|
insertData(data);
|
|
134
|
-
case
|
|
158
|
+
case 15:
|
|
135
159
|
return _context.a(2);
|
|
136
160
|
}
|
|
137
|
-
}, _callee, null, [[1,
|
|
161
|
+
}, _callee, null, [[1, 10]]);
|
|
138
162
|
}));
|
|
139
163
|
return function (_x) {
|
|
140
164
|
return _ref.apply(this, arguments);
|
|
@@ -80,9 +80,22 @@ var Link = /*#__PURE__*/function (_React$Component) {
|
|
|
80
80
|
});
|
|
81
81
|
(0, _defineProperty2["default"])(_this, "onLinkClick", function (e) {
|
|
82
82
|
var isModClick = (0, _commonUtils.isMac)() ? e.metaKey : e.ctrlKey;
|
|
83
|
+
var _this$props$element = _this.props.element,
|
|
84
|
+
linked_id = _this$props$element.linked_id,
|
|
85
|
+
linked_wiki_page_id = _this$props$element.linked_wiki_page_id,
|
|
86
|
+
href = _this$props$element.href;
|
|
83
87
|
// mod + click
|
|
84
|
-
if (isModClick && !
|
|
85
|
-
window.open(
|
|
88
|
+
if (isModClick && !linked_id && !linked_wiki_page_id) {
|
|
89
|
+
window.open(href, '_blank', 'noreferrer');
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
// mod + click on linked wiki page
|
|
93
|
+
if (isModClick && linked_wiki_page_id) {
|
|
94
|
+
var _href = window.location.href;
|
|
95
|
+
var parts = _href.split('/');
|
|
96
|
+
parts[parts.length - 2] = linked_wiki_page_id;
|
|
97
|
+
var newHref = parts.join('/');
|
|
98
|
+
window.open(newHref, '_blank', 'noreferrer');
|
|
86
99
|
return;
|
|
87
100
|
}
|
|
88
101
|
_this.setPosition(e.target);
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
width: calc(100% - 50px);
|
|
24
24
|
max-width: 100%;
|
|
25
25
|
position: relative;
|
|
26
|
-
padding: 5px
|
|
26
|
+
padding: 5px 0px;
|
|
27
27
|
box-sizing: border-box;
|
|
28
28
|
word-wrap: break-word;
|
|
29
29
|
white-space: pre-wrap;
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
.sdoc-multicolumn-container .column-resize-handler .column-width-just.active,
|
|
48
|
-
.sdoc-multicolumn-container .column-resize-handler .column-width-just:hover
|
|
48
|
+
.sdoc-multicolumn-container .column-resize-handler .column-width-just:hover {
|
|
49
49
|
background-color: lightgray;
|
|
50
50
|
cursor: col-resize;
|
|
51
51
|
}
|
|
@@ -18,6 +18,7 @@ var _constants = require("../../../../constants");
|
|
|
18
18
|
var _usePlugins2 = require("../../../../hooks/use-plugins");
|
|
19
19
|
var _eventBus = _interopRequireDefault(require("../../../../utils/event-bus"));
|
|
20
20
|
var _commons = require("../../../commons");
|
|
21
|
+
var _elementType = require("../../../constants/element-type");
|
|
21
22
|
var _constants2 = require("../constants");
|
|
22
23
|
var _helpers = require("../helpers");
|
|
23
24
|
require("./index.css");
|
|
@@ -90,6 +91,16 @@ var SdocLinkHoverMenu = function SdocLinkHoverMenu(_ref) {
|
|
|
90
91
|
}, 0);
|
|
91
92
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
92
93
|
}, [updateDisplayPlugin]);
|
|
94
|
+
var handleClickOpenLink = (0, _react.useCallback)(function (e) {
|
|
95
|
+
e.stopPropagation();
|
|
96
|
+
if (element.type === _elementType.WIKI_LINK && element.page_id) {
|
|
97
|
+
e.preventDefault();
|
|
98
|
+
var eventBus = _eventBus["default"].getInstance();
|
|
99
|
+
eventBus.dispatch('open_wiki_page_id_link', {
|
|
100
|
+
page_id: element.page_id
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}, [element]);
|
|
93
104
|
var selectedType = element.display_type || _constants2.SDOC_LINK_TYPE.TEXT_LINK;
|
|
94
105
|
var newSdocFileTypes = _constants2.SDOC_LINK_TYPES.filter(function (sdocLinkType) {
|
|
95
106
|
return (0, _helpers.isInTable)(editor, element) ? sdocLinkType !== _constants2.SDOC_LINK_TYPE.CARD_LINK : true;
|
|
@@ -111,9 +122,7 @@ var SdocLinkHoverMenu = function SdocLinkHoverMenu(_ref) {
|
|
|
111
122
|
target: "_blank",
|
|
112
123
|
rel: "noopener noreferrer",
|
|
113
124
|
className: "link-op-menu-link",
|
|
114
|
-
onClick:
|
|
115
|
-
return e.stopPropagation();
|
|
116
|
-
}
|
|
125
|
+
onClick: handleClickOpenLink
|
|
117
126
|
}, t('Open_link')))), !readOnly && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("span", {
|
|
118
127
|
className: "op-group-item"
|
|
119
128
|
}, /*#__PURE__*/_react["default"].createElement("span", {
|
|
@@ -23,6 +23,10 @@ var insertWikiPageLink = exports.insertWikiPageLink = function insertWikiPageLin
|
|
|
23
23
|
var wikiLinkNode = generateWikiFileNode(wikiRepoId, pageId, text, icon, isDir);
|
|
24
24
|
if (isCollapsed) {
|
|
25
25
|
_slate.Transforms.insertNodes(editor, wikiLinkNode);
|
|
26
|
+
var point = _slate.Editor.after(editor, editor.selection);
|
|
27
|
+
if (point) {
|
|
28
|
+
_slate.Transforms.select(editor, point);
|
|
29
|
+
}
|
|
26
30
|
} else {
|
|
27
31
|
var selectedText = _slate.Editor.string(editor, selection); // Selected text
|
|
28
32
|
if (selectedText !== text) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seafile/sdoc-editor",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.73",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"test": "jest",
|
|
@@ -72,5 +72,5 @@
|
|
|
72
72
|
"publishConfig": {
|
|
73
73
|
"access": "public"
|
|
74
74
|
},
|
|
75
|
-
"gitHead": "
|
|
75
|
+
"gitHead": "8375f6d58025bca1016998680af2d51edee20984"
|
|
76
76
|
}
|