@seafile/sdoc-editor 3.0.124 → 3.0.126
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/insert-element-dialog/index.js +18 -13
- package/dist/extension/constants/element-type.js +2 -1
- package/dist/extension/constants/menus-config.js +8 -3
- package/dist/extension/plugins/embed-link/constants.js +10 -0
- package/dist/extension/plugins/embed-link/dialog/add-embed-link-dialog/index.js +107 -0
- package/dist/extension/plugins/embed-link/helper.js +134 -0
- package/dist/extension/plugins/embed-link/hover-menu/index.css +50 -0
- package/dist/extension/plugins/embed-link/hover-menu/index.js +72 -0
- package/dist/extension/plugins/embed-link/index.css +69 -0
- package/dist/extension/plugins/embed-link/index.js +16 -0
- package/dist/extension/plugins/embed-link/plugin.js +54 -0
- package/dist/extension/plugins/embed-link/render-elem.js +180 -0
- package/dist/extension/plugins/index.js +8 -1
- package/dist/extension/plugins/link/plugin.js +18 -8
- package/dist/extension/render/custom-element.js +6 -0
- package/dist/extension/toolbar/insert-element-toolbar/index.js +18 -2
- package/package.json +3 -3
|
@@ -15,16 +15,17 @@ var _context = _interopRequireDefault(require("../../../context"));
|
|
|
15
15
|
var _eventBus = _interopRequireDefault(require("../../../utils/event-bus"));
|
|
16
16
|
var _constants2 = require("../../constants");
|
|
17
17
|
var _index = _interopRequireDefault(require("../../plugins/ai/ai-module/index.js"));
|
|
18
|
+
var _index2 = _interopRequireDefault(require("../../plugins/embed-link/dialog/add-embed-link-dialog/index.js"));
|
|
18
19
|
var _formulaModal = _interopRequireDefault(require("../../plugins/formula/menu/formula-modal.js"));
|
|
19
20
|
var _helpers = require("../../plugins/image/helpers");
|
|
20
21
|
var _addLinkDialog = _interopRequireDefault(require("../../plugins/link/dialog/add-link-dialog"));
|
|
21
22
|
var _dialogs = require("../../plugins/table/dialogs");
|
|
22
|
-
var
|
|
23
|
-
var
|
|
23
|
+
var _index3 = require("../../plugins/video/constants/index.js");
|
|
24
|
+
var _index4 = _interopRequireDefault(require("../../plugins/video/dialog/add-video-link-dialog/index.js"));
|
|
24
25
|
var _helpers2 = require("../../plugins/video/helpers");
|
|
25
|
-
var
|
|
26
|
-
var
|
|
27
|
-
var
|
|
26
|
+
var _index5 = _interopRequireDefault(require("../file-insert-dialog/index.js"));
|
|
27
|
+
var _index6 = _interopRequireDefault(require("../select-file-dialog/index.js"));
|
|
28
|
+
var _index7 = _interopRequireDefault(require("../wiki-file-insert-dialog/index.js"));
|
|
28
29
|
var InsertElementDialog = function InsertElementDialog(_ref) {
|
|
29
30
|
var editor = _ref.editor;
|
|
30
31
|
var _useState = (0, _react.useState)(''),
|
|
@@ -100,7 +101,7 @@ var InsertElementDialog = function InsertElementDialog(_ref) {
|
|
|
100
101
|
var onVideoFileChanged = (0, _react.useCallback)(function (event) {
|
|
101
102
|
var files = event.target.files;
|
|
102
103
|
// Show warning for 3s and no further insertion if video file is more than 5MB
|
|
103
|
-
if (files[0].size >
|
|
104
|
+
if (files[0].size > _index3.VIDEO_MAX_SIZE_5MB) {
|
|
104
105
|
handleDisplayAlert();
|
|
105
106
|
event.target.value = null;
|
|
106
107
|
return;
|
|
@@ -214,6 +215,10 @@ var InsertElementDialog = function InsertElementDialog(_ref) {
|
|
|
214
215
|
{
|
|
215
216
|
return /*#__PURE__*/_react["default"].createElement(_addLinkDialog["default"], props);
|
|
216
217
|
}
|
|
218
|
+
case _constants2.ELEMENT_TYPE.EMBED_LINK:
|
|
219
|
+
{
|
|
220
|
+
return /*#__PURE__*/_react["default"].createElement(_index2["default"], props);
|
|
221
|
+
}
|
|
217
222
|
case _constants2.ELEMENT_TYPE.SDOC_LINK:
|
|
218
223
|
{
|
|
219
224
|
var sdocLinkProps = {
|
|
@@ -222,7 +227,7 @@ var InsertElementDialog = function InsertElementDialog(_ref) {
|
|
|
222
227
|
insertLinkCallback: insertLinkCallback,
|
|
223
228
|
closeDialog: closeDialog
|
|
224
229
|
};
|
|
225
|
-
return /*#__PURE__*/_react["default"].createElement(
|
|
230
|
+
return /*#__PURE__*/_react["default"].createElement(_index6["default"], sdocLinkProps);
|
|
226
231
|
}
|
|
227
232
|
case _constants2.ELEMENT_TYPE.FILE_LINK:
|
|
228
233
|
{
|
|
@@ -232,7 +237,7 @@ var InsertElementDialog = function InsertElementDialog(_ref) {
|
|
|
232
237
|
insertLinkCallback: insertLinkCallback,
|
|
233
238
|
closeDialog: closeDialog
|
|
234
239
|
};
|
|
235
|
-
return /*#__PURE__*/_react["default"].createElement(
|
|
240
|
+
return /*#__PURE__*/_react["default"].createElement(_index6["default"], fileLinkProps);
|
|
236
241
|
}
|
|
237
242
|
case _constants2.ELEMENT_TYPE.WHITEBOARD:
|
|
238
243
|
{
|
|
@@ -242,7 +247,7 @@ var InsertElementDialog = function InsertElementDialog(_ref) {
|
|
|
242
247
|
insertWhiteboardFile: insertWhiteboardFile,
|
|
243
248
|
closeDialog: closeDialog
|
|
244
249
|
};
|
|
245
|
-
return /*#__PURE__*/_react["default"].createElement(
|
|
250
|
+
return /*#__PURE__*/_react["default"].createElement(_index6["default"], whiteboardProps);
|
|
246
251
|
}
|
|
247
252
|
case _constants2.ELEMENT_TYPE.VIDEO:
|
|
248
253
|
{
|
|
@@ -252,11 +257,11 @@ var InsertElementDialog = function InsertElementDialog(_ref) {
|
|
|
252
257
|
insertVideoCallback: insertVideoCallback,
|
|
253
258
|
closeDialog: closeDialog
|
|
254
259
|
};
|
|
255
|
-
return /*#__PURE__*/_react["default"].createElement(
|
|
260
|
+
return /*#__PURE__*/_react["default"].createElement(_index6["default"], videoProps);
|
|
256
261
|
}
|
|
257
262
|
case _constants2.ELEMENT_TYPE.VIDEO_LINK:
|
|
258
263
|
{
|
|
259
|
-
return /*#__PURE__*/_react["default"].createElement(
|
|
264
|
+
return /*#__PURE__*/_react["default"].createElement(_index4["default"], props);
|
|
260
265
|
}
|
|
261
266
|
case _constants2.ELEMENT_TYPE.FORMULA:
|
|
262
267
|
{
|
|
@@ -300,13 +305,13 @@ var InsertElementDialog = function InsertElementDialog(_ref) {
|
|
|
300
305
|
case _constants2.ELEMENT_TYPE.FILE_LINK_INSET_INPUT_TEMP:
|
|
301
306
|
{
|
|
302
307
|
if (editor.editorType === _constants.WIKI_EDITOR) {
|
|
303
|
-
return /*#__PURE__*/_react["default"].createElement(
|
|
308
|
+
return /*#__PURE__*/_react["default"].createElement(_index7["default"], {
|
|
304
309
|
element: slateNode,
|
|
305
310
|
editor: editor,
|
|
306
311
|
closeDialog: closeDialog
|
|
307
312
|
});
|
|
308
313
|
}
|
|
309
|
-
return /*#__PURE__*/_react["default"].createElement(
|
|
314
|
+
return /*#__PURE__*/_react["default"].createElement(_index5["default"], {
|
|
310
315
|
element: slateNode,
|
|
311
316
|
editor: editor,
|
|
312
317
|
closeDialog: closeDialog
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.WIKI_LINK = exports.WHITEBOARD = exports.VIDEO_LINK = exports.VIDEO = exports.UNORDERED_LIST = exports.TWO_COLUMN = exports.TOP_LEVEL_TYPES = exports.TOGGLE_HEADER3 = exports.TOGGLE_HEADER2 = exports.TOGGLE_HEADER1 = exports.TOGGLE_HEADER = exports.TOGGLE_CONTENT = exports.TITLE = exports.THREE_COLUMN = exports.TABLE_ROW = exports.TABLE_CELL = exports.TABLE = exports.SUBTITLE = exports.SDOC_LINK = exports.QUICK_INSERT = exports.PARAGRAPH = exports.ORDERED_LIST = exports.MULTI_COLUMN = exports.MENTION_TEMP = exports.MENTION = exports.LIST_ITEM = exports.LINK = exports.INLINE_LEVEL_TYPES = exports.IMAGE_BLOCK = exports.IMAGE = exports.HEADER6 = exports.HEADER5 = exports.HEADER4 = exports.HEADER3 = exports.HEADER2 = exports.HEADER1 = exports.HEADER = exports.GROUP = exports.FOUR_COLUMN = exports.FORMULA = exports.FONT_SIZE_REDUCE = exports.FONT_SIZE_INCREASE = exports.FONT_SIZE = exports.FIVE_COLUMN = exports.FILE_VIEW = exports.FILE_LINK_INSET_INPUT_TEMP = exports.FILE_LINK = exports.COLUMN = exports.CODE_LINE = exports.CODE_BLOCK = exports.CHECK_LIST_ITEM = exports.CALL_OUT = exports.BLOCKQUOTE = exports.ASK_AI = void 0;
|
|
6
|
+
exports.WIKI_LINK = exports.WHITEBOARD = exports.VIDEO_LINK = exports.VIDEO = exports.UNORDERED_LIST = exports.TWO_COLUMN = exports.TOP_LEVEL_TYPES = exports.TOGGLE_HEADER3 = exports.TOGGLE_HEADER2 = exports.TOGGLE_HEADER1 = exports.TOGGLE_HEADER = exports.TOGGLE_CONTENT = exports.TITLE = exports.THREE_COLUMN = exports.TABLE_ROW = exports.TABLE_CELL = exports.TABLE = exports.SUBTITLE = exports.SDOC_LINK = exports.QUICK_INSERT = exports.PARAGRAPH = exports.ORDERED_LIST = exports.MULTI_COLUMN = exports.MENTION_TEMP = exports.MENTION = exports.LIST_ITEM = exports.LINK = exports.INLINE_LEVEL_TYPES = exports.IMAGE_BLOCK = exports.IMAGE = exports.HEADER6 = exports.HEADER5 = exports.HEADER4 = exports.HEADER3 = exports.HEADER2 = exports.HEADER1 = exports.HEADER = exports.GROUP = exports.FOUR_COLUMN = exports.FORMULA = exports.FONT_SIZE_REDUCE = exports.FONT_SIZE_INCREASE = exports.FONT_SIZE = exports.FIVE_COLUMN = exports.FILE_VIEW = exports.FILE_LINK_INSET_INPUT_TEMP = exports.FILE_LINK = exports.EMBED_LINK = exports.COLUMN = exports.CODE_LINE = exports.CODE_BLOCK = exports.CHECK_LIST_ITEM = exports.CALL_OUT = exports.BLOCKQUOTE = exports.ASK_AI = void 0;
|
|
7
7
|
var BLOCKQUOTE = exports.BLOCKQUOTE = 'blockquote';
|
|
8
8
|
var TITLE = exports.TITLE = 'title';
|
|
9
9
|
var SUBTITLE = exports.SUBTITLE = 'subtitle';
|
|
@@ -51,6 +51,7 @@ var TOGGLE_HEADER1 = exports.TOGGLE_HEADER1 = 'toggle_header1';
|
|
|
51
51
|
var TOGGLE_HEADER2 = exports.TOGGLE_HEADER2 = 'toggle_header2';
|
|
52
52
|
var TOGGLE_HEADER3 = exports.TOGGLE_HEADER3 = 'toggle_header3';
|
|
53
53
|
var TOGGLE_CONTENT = exports.TOGGLE_CONTENT = 'toggle_content';
|
|
54
|
+
var EMBED_LINK = exports.EMBED_LINK = 'embed_link';
|
|
54
55
|
var ASK_AI = exports.ASK_AI = 'ask_ai';
|
|
55
56
|
|
|
56
57
|
// font
|
|
@@ -311,6 +311,11 @@ var SIDE_INSERT_MENUS_CONFIG = exports.SIDE_INSERT_MENUS_CONFIG = (_SIDE_INSERT_
|
|
|
311
311
|
iconClass: 'sdocfont sdoc-link',
|
|
312
312
|
type: _elementType.LINK,
|
|
313
313
|
text: 'Link'
|
|
314
|
+
}), _elementType.EMBED_LINK, {
|
|
315
|
+
id: '',
|
|
316
|
+
iconClass: 'sdocfont sdoc-embed-link',
|
|
317
|
+
type: _elementType.EMBED_LINK,
|
|
318
|
+
text: 'Embed_link'
|
|
314
319
|
}), _elementType.CODE_BLOCK, {
|
|
315
320
|
id: '',
|
|
316
321
|
iconClass: 'sdocfont sdoc-code-block',
|
|
@@ -335,12 +340,12 @@ var SIDE_INSERT_MENUS_CONFIG = exports.SIDE_INSERT_MENUS_CONFIG = (_SIDE_INSERT_
|
|
|
335
340
|
iconClass: 'sdocfont sdoc-check-square',
|
|
336
341
|
type: _elementType.CHECK_LIST_ITEM,
|
|
337
342
|
text: 'Check_list'
|
|
338
|
-
}), _elementType.PARAGRAPH, {
|
|
343
|
+
}), (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])(_SIDE_INSERT_MENUS_CO, _elementType.PARAGRAPH, {
|
|
339
344
|
id: _elementType.PARAGRAPH,
|
|
340
345
|
iconClass: 'sdocfont sdoc-text',
|
|
341
346
|
type: _elementType.PARAGRAPH,
|
|
342
347
|
text: 'Paragraph'
|
|
343
|
-
}),
|
|
348
|
+
}), _elementType.HEADER, [{
|
|
344
349
|
id: _elementType.HEADER1,
|
|
345
350
|
iconClass: 'sdocfont sdoc-header1',
|
|
346
351
|
type: _elementType.HEADER1,
|
|
@@ -402,7 +407,7 @@ var SIDE_INSERT_MENUS_CONFIG = exports.SIDE_INSERT_MENUS_CONFIG = (_SIDE_INSERT_
|
|
|
402
407
|
text: 'Formula'
|
|
403
408
|
}));
|
|
404
409
|
var SIDE_INSERT_MENUS_SEARCH_MAP = exports.SIDE_INSERT_MENUS_SEARCH_MAP = (_SIDE_INSERT_MENUS_SE = {}, (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])(_SIDE_INSERT_MENUS_SE, _elementType.IMAGE, 'Image'), _elementType.VIDEO, 'Video'), _elementType.TABLE, 'Table'), _elementType.COLUMN, 'Column'), _elementType.TWO_COLUMN, 'Two_column'), _elementType.THREE_COLUMN, 'Three_column'), _elementType.FOUR_COLUMN, 'Four_column'), _elementType.LINK, 'Link'), _elementType.CODE_BLOCK, 'Code_block'), _elementType.CALL_OUT, 'Callout'), (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])(_SIDE_INSERT_MENUS_SE, _elementType.UNORDERED_LIST, 'Unordered_list'), _elementType.ORDERED_LIST, 'Ordered_list'), _elementType.CHECK_LIST_ITEM, 'Check_list'), _elementType.PARAGRAPH, 'Paragraph'), _elementType.HEADER1, 'Header_one'), _elementType.HEADER2, 'Header_two'), _elementType.HEADER3, 'Header_three'), _elementType.HEADER4, 'Header_four'), _elementType.TOGGLE_HEADER1, 'Toggle_header_one'), _elementType.TOGGLE_HEADER2, 'Toggle_header_two'), (0, _defineProperty2["default"])((0, _defineProperty2["default"])(_SIDE_INSERT_MENUS_SE, _elementType.TOGGLE_HEADER3, 'Toggle_header_three'), _elementType.FILE_VIEW, 'File_view'));
|
|
405
|
-
var SIDE_QUICK_INSERT_MENUS_SEARCH_MAP = exports.SIDE_QUICK_INSERT_MENUS_SEARCH_MAP = (_SIDE_QUICK_INSERT_ME = {}, (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])(_SIDE_QUICK_INSERT_ME, _elementType.IMAGE, 'Image'), _elementType.VIDEO, 'Video'), _elementType.TABLE, 'Table'), _elementType.COLUMN, 'Column'), _elementType.TWO_COLUMN, 'Two_column'), _elementType.THREE_COLUMN, 'Three_column'), _elementType.FOUR_COLUMN, 'Four_column'), _elementType.LINK, 'Link'), _elementType.CODE_BLOCK, 'Code_block'), _elementType.CALL_OUT, 'Callout'), (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])(_SIDE_QUICK_INSERT_ME, _elementType.UNORDERED_LIST, 'Unordered_list'), _elementType.ORDERED_LIST, 'Ordered_list'), _elementType.CHECK_LIST_ITEM, 'Check_list'), _elementType.PARAGRAPH, 'Paragraph'), _elementType.HEADER1, 'Header_one'), _elementType.HEADER2, 'Header_two'), _elementType.HEADER3, 'Header_three'), _elementType.HEADER4, 'Header_four'), _elementType.FILE_VIEW, 'File_view'), _elementType.FORMULA, 'Formula'), (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])(_SIDE_QUICK_INSERT_ME, _elementType.TOGGLE_HEADER1, 'Toggle_header_one'), _elementType.TOGGLE_HEADER2, 'Toggle_header_two'), _elementType.TOGGLE_HEADER3, 'Toggle_header_three'));
|
|
410
|
+
var SIDE_QUICK_INSERT_MENUS_SEARCH_MAP = exports.SIDE_QUICK_INSERT_MENUS_SEARCH_MAP = (_SIDE_QUICK_INSERT_ME = {}, (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])(_SIDE_QUICK_INSERT_ME, _elementType.IMAGE, 'Image'), _elementType.VIDEO, 'Video'), _elementType.TABLE, 'Table'), _elementType.COLUMN, 'Column'), _elementType.TWO_COLUMN, 'Two_column'), _elementType.THREE_COLUMN, 'Three_column'), _elementType.FOUR_COLUMN, 'Four_column'), _elementType.LINK, 'Link'), _elementType.CODE_BLOCK, 'Code_block'), _elementType.CALL_OUT, 'Callout'), (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])(_SIDE_QUICK_INSERT_ME, _elementType.UNORDERED_LIST, 'Unordered_list'), _elementType.ORDERED_LIST, 'Ordered_list'), _elementType.CHECK_LIST_ITEM, 'Check_list'), _elementType.PARAGRAPH, 'Paragraph'), _elementType.HEADER1, 'Header_one'), _elementType.HEADER2, 'Header_two'), _elementType.HEADER3, 'Header_three'), _elementType.HEADER4, 'Header_four'), _elementType.FILE_VIEW, 'File_view'), _elementType.FORMULA, 'Formula'), (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])(_SIDE_QUICK_INSERT_ME, _elementType.TOGGLE_HEADER1, 'Toggle_header_one'), _elementType.TOGGLE_HEADER2, 'Toggle_header_two'), _elementType.TOGGLE_HEADER3, 'Toggle_header_three'), _elementType.EMBED_LINK, 'Embed_link'));
|
|
406
411
|
|
|
407
412
|
// Other operations menu config
|
|
408
413
|
var SIDE_OTHER_OPERATIONS_MENUS_SEARCH_MAP = exports.SIDE_OTHER_OPERATIONS_MENUS_SEARCH_MAP = {
|
|
@@ -0,0 +1,107 @@
|
|
|
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 _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
|
|
10
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
+
var _reactI18next = require("react-i18next");
|
|
12
|
+
var _reactstrap = require("reactstrap");
|
|
13
|
+
var _helper = require("../../helper");
|
|
14
|
+
var AddEmbedLinkDialog = function AddEmbedLinkDialog(_ref) {
|
|
15
|
+
var editor = _ref.editor,
|
|
16
|
+
className = _ref.className,
|
|
17
|
+
closeDialog = _ref.closeDialog,
|
|
18
|
+
handleSubmit = _ref.handleSubmit;
|
|
19
|
+
var _useTranslation = (0, _reactI18next.useTranslation)('sdoc-editor'),
|
|
20
|
+
t = _useTranslation.t;
|
|
21
|
+
var _useState = (0, _react.useState)(''),
|
|
22
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
23
|
+
linkErrorMessage = _useState2[0],
|
|
24
|
+
setLinkErrorMessage = _useState2[1];
|
|
25
|
+
var _useState3 = (0, _react.useState)(''),
|
|
26
|
+
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
27
|
+
url = _useState4[0],
|
|
28
|
+
setURL = _useState4[1];
|
|
29
|
+
var submit = (0, _react.useCallback)(function () {
|
|
30
|
+
setLinkErrorMessage('');
|
|
31
|
+
if (!url) {
|
|
32
|
+
setLinkErrorMessage(t('The_link_address_is_required'));
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
var embedLinkType = (0, _helper.getEmbedLinkType)(url);
|
|
36
|
+
if (!embedLinkType) {
|
|
37
|
+
setLinkErrorMessage(t('The_link_address_is_invalid'));
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
(0, _helper.insertEmbedLink)(editor, url, embedLinkType);
|
|
41
|
+
handleSubmit && handleSubmit();
|
|
42
|
+
closeDialog();
|
|
43
|
+
|
|
44
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
45
|
+
}, [editor, url]);
|
|
46
|
+
var onKeyDown = (0, _react.useCallback)(function (event) {
|
|
47
|
+
if (event.keyCode === 13) {
|
|
48
|
+
event.preventDefault();
|
|
49
|
+
submit();
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
53
|
+
}, [editor, url]);
|
|
54
|
+
var handleUrlChange = (0, _react.useCallback)(function (event) {
|
|
55
|
+
var embedLinkUrl = event.target.value.trim();
|
|
56
|
+
if (embedLinkUrl === url) return;
|
|
57
|
+
setURL(embedLinkUrl);
|
|
58
|
+
}, [url]);
|
|
59
|
+
var close = (0, _react.useMemo)(function () {
|
|
60
|
+
return /*#__PURE__*/_react["default"].createElement("span", {
|
|
61
|
+
className: "sdoc-add-link-close-icon",
|
|
62
|
+
onClick: closeDialog
|
|
63
|
+
}, /*#__PURE__*/_react["default"].createElement("i", {
|
|
64
|
+
className: "sdocfont sdoc-sm-close",
|
|
65
|
+
"aria-hidden": "true"
|
|
66
|
+
}));
|
|
67
|
+
}, [closeDialog]);
|
|
68
|
+
return /*#__PURE__*/_react["default"].createElement(_reactstrap.Modal, {
|
|
69
|
+
isOpen: true,
|
|
70
|
+
autoFocus: false,
|
|
71
|
+
toggle: closeDialog,
|
|
72
|
+
className: className,
|
|
73
|
+
zIndex: 1071,
|
|
74
|
+
returnFocusAfterClose: false
|
|
75
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactstrap.ModalHeader, {
|
|
76
|
+
close: close
|
|
77
|
+
}, t('Embed_link')), /*#__PURE__*/_react["default"].createElement(_reactstrap.ModalBody, null, /*#__PURE__*/_react["default"].createElement(_react.Fragment, null, /*#__PURE__*/_react["default"].createElement("div", {
|
|
78
|
+
className: "form-group"
|
|
79
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactstrap.Label, {
|
|
80
|
+
"for": "addLink"
|
|
81
|
+
}, t('Link_address')), /*#__PURE__*/_react["default"].createElement("input", {
|
|
82
|
+
onKeyDown: onKeyDown,
|
|
83
|
+
autoFocus: true,
|
|
84
|
+
type: "url",
|
|
85
|
+
className: "form-control",
|
|
86
|
+
id: "addVideoLink",
|
|
87
|
+
value: url || '',
|
|
88
|
+
onChange: handleUrlChange
|
|
89
|
+
}), linkErrorMessage && /*#__PURE__*/_react["default"].createElement(_reactstrap.Alert, {
|
|
90
|
+
color: "danger",
|
|
91
|
+
className: "mt-2"
|
|
92
|
+
}, t(linkErrorMessage))), /*#__PURE__*/_react["default"].createElement("div", {
|
|
93
|
+
style: {
|
|
94
|
+
textAlign: 'center',
|
|
95
|
+
fontSize: '12px',
|
|
96
|
+
color: '#787774'
|
|
97
|
+
}
|
|
98
|
+
}, t('Support_Figma_Seatable_link')))), /*#__PURE__*/_react["default"].createElement(_reactstrap.ModalFooter, null, /*#__PURE__*/_react["default"].createElement(_reactstrap.Button, {
|
|
99
|
+
color: "secondary",
|
|
100
|
+
onClick: closeDialog
|
|
101
|
+
}, t('Cancel')), /*#__PURE__*/_react["default"].createElement(_reactstrap.Button, {
|
|
102
|
+
color: "primary",
|
|
103
|
+
disabled: false,
|
|
104
|
+
onClick: submit
|
|
105
|
+
}, t('Add_link'))));
|
|
106
|
+
};
|
|
107
|
+
var _default = exports["default"] = AddEmbedLinkDialog;
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.normalizeFigmaEmbedLink = exports.isInsertEmbedLinkDisabled = exports.insertEmbedLink = exports.getEmbedLinkType = exports.generateEmbedLinkNode = void 0;
|
|
8
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
|
|
9
|
+
var _slate = require("@seafile/slate");
|
|
10
|
+
var _slateReact = require("@seafile/slate-react");
|
|
11
|
+
var _slugid = _interopRequireDefault(require("slugid"));
|
|
12
|
+
var _constants = require("../../constants");
|
|
13
|
+
var _elementType = require("../../constants/element-type");
|
|
14
|
+
var _core = require("../../core");
|
|
15
|
+
var _constants2 = require("./constants");
|
|
16
|
+
var isInsertEmbedLinkDisabled = exports.isInsertEmbedLinkDisabled = function isInsertEmbedLinkDisabled(editor, readonly) {
|
|
17
|
+
if (readonly) return true;
|
|
18
|
+
var selection = editor.selection;
|
|
19
|
+
if (selection === null) return true;
|
|
20
|
+
if (!_slate.Range.isCollapsed(selection)) return true;
|
|
21
|
+
var _Editor$nodes = _slate.Editor.nodes(editor, {
|
|
22
|
+
match: function match(n) {
|
|
23
|
+
var type = (0, _core.getNodeType)(n);
|
|
24
|
+
if (!type && (0, _core.isTextNode)(n) && n.id) {
|
|
25
|
+
var parentNode = (0, _core.getParentNode)(editor.children, n.id);
|
|
26
|
+
type = (0, _core.getNodeType)(parentNode);
|
|
27
|
+
}
|
|
28
|
+
if (_constants.TOGGLE_TITLE_TYPES.includes(type)) return true;
|
|
29
|
+
if (type === _constants.CODE_BLOCK) return true;
|
|
30
|
+
if (type.startsWith('header')) return true;
|
|
31
|
+
if (type === _constants.TITLE) return true;
|
|
32
|
+
if (type === _constants.SUBTITLE) return true;
|
|
33
|
+
if (type === _constants.LIST_ITEM) return true;
|
|
34
|
+
if (type === _constants.CHECK_LIST_ITEM) return true;
|
|
35
|
+
if (type === _constants.MULTI_COLUMN) return true;
|
|
36
|
+
if (type === _constants.BLOCKQUOTE) return true;
|
|
37
|
+
if (type === _constants.CALL_OUT) return true;
|
|
38
|
+
if (_slate.Editor.isVoid(editor, n)) return true;
|
|
39
|
+
return false;
|
|
40
|
+
},
|
|
41
|
+
universal: true
|
|
42
|
+
}),
|
|
43
|
+
_Editor$nodes2 = (0, _slicedToArray2["default"])(_Editor$nodes, 1),
|
|
44
|
+
match = _Editor$nodes2[0];
|
|
45
|
+
if (match) return true;
|
|
46
|
+
return false;
|
|
47
|
+
};
|
|
48
|
+
var getEmbedLinkType = exports.getEmbedLinkType = function getEmbedLinkType(text) {
|
|
49
|
+
var link = text.trim();
|
|
50
|
+
try {
|
|
51
|
+
var url = new URL(link);
|
|
52
|
+
var host = url.hostname.toLowerCase();
|
|
53
|
+
var path = url.pathname.toLowerCase();
|
|
54
|
+
// SeaTable
|
|
55
|
+
var isSeaTable = /(^|\.)seatable\.cn$/.test(host) && /^\/workspace\/\d+\/dtable\/.+/.test(path);
|
|
56
|
+
if (isSeaTable) return _constants2.EMBED_LINK_SOURCE.SEATABLE;
|
|
57
|
+
|
|
58
|
+
// Figma
|
|
59
|
+
var isFigma = /(^|\.)figma\.com$/.test(host) && /^\/(design|file|proto|board|slides)\//.test(path);
|
|
60
|
+
if (isFigma) return _constants2.EMBED_LINK_SOURCE.FIGMA;
|
|
61
|
+
return null;
|
|
62
|
+
} catch (e) {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
var normalizeFigmaEmbedLink = exports.normalizeFigmaEmbedLink = function normalizeFigmaEmbedLink(text) {
|
|
67
|
+
var link = text.trim();
|
|
68
|
+
try {
|
|
69
|
+
var url = new URL(link);
|
|
70
|
+
var host = url.hostname.toLowerCase();
|
|
71
|
+
if (host === 'embed.figma.com') {
|
|
72
|
+
return url.toString();
|
|
73
|
+
}
|
|
74
|
+
if (!/(^|\.)figma\.com$/i.test(host)) return null;
|
|
75
|
+
if (!/^\/(design|file|proto|board|slides)\//i.test(url.pathname)) return null;
|
|
76
|
+
var embedUrl = new URL(url);
|
|
77
|
+
embedUrl.hostname = 'embed.figma.com';
|
|
78
|
+
embedUrl.searchParams["delete"]('t');
|
|
79
|
+
embedUrl.searchParams.set('embed-host', 'share');
|
|
80
|
+
return embedUrl.toString();
|
|
81
|
+
} catch (e) {
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
var generateEmbedLinkNode = exports.generateEmbedLinkNode = function generateEmbedLinkNode(link, type) {
|
|
86
|
+
var embedLinkNode = {
|
|
87
|
+
id: _slugid["default"].nice(),
|
|
88
|
+
type: _elementType.EMBED_LINK,
|
|
89
|
+
link: link,
|
|
90
|
+
link_type: type,
|
|
91
|
+
children: [{
|
|
92
|
+
id: _slugid["default"].nice(),
|
|
93
|
+
text: ''
|
|
94
|
+
}]
|
|
95
|
+
};
|
|
96
|
+
return embedLinkNode;
|
|
97
|
+
};
|
|
98
|
+
var insertEmbedLink = exports.insertEmbedLink = function insertEmbedLink(editor, link, type) {
|
|
99
|
+
var _editor$selection;
|
|
100
|
+
if (isInsertEmbedLinkDisabled(editor)) return;
|
|
101
|
+
if (editor.selection == null) return;
|
|
102
|
+
var embedLinkNode = generateEmbedLinkNode(link, type);
|
|
103
|
+
var path = (_editor$selection = editor.selection) === null || _editor$selection === void 0 ? void 0 : _editor$selection.anchor.path;
|
|
104
|
+
|
|
105
|
+
// When inserting embed link in the toggle content, insert current
|
|
106
|
+
var currentToggleContentEntry = (0, _core.getSelectedNodeEntryByType)(editor, _constants.TOGGLE_CONTENT);
|
|
107
|
+
if (currentToggleContentEntry) {
|
|
108
|
+
_slate.Transforms.insertNodes(editor, embedLinkNode, {
|
|
109
|
+
at: path.slice(0, -1)
|
|
110
|
+
});
|
|
111
|
+
_slate.Transforms.select(editor, _slate.Editor.start(editor, path));
|
|
112
|
+
_slateReact.ReactEditor.focus(editor);
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
var position = 'after';
|
|
116
|
+
if (position === _constants.INSERT_POSITION.AFTER) {
|
|
117
|
+
_slate.Transforms.insertNodes(editor, embedLinkNode, {
|
|
118
|
+
at: [path[0] + 1]
|
|
119
|
+
});
|
|
120
|
+
var nextPath = _slate.Path.next([path[0] + 1]);
|
|
121
|
+
if (!(0, _core.getNode)(editor, nextPath)) {
|
|
122
|
+
_slate.Transforms.insertNodes(editor, (0, _core.generateDefaultParagraph)(), {
|
|
123
|
+
at: nextPath
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
var endOfFirstNode = _slate.Editor.start(editor, nextPath);
|
|
127
|
+
var range = {
|
|
128
|
+
anchor: endOfFirstNode,
|
|
129
|
+
focus: endOfFirstNode
|
|
130
|
+
};
|
|
131
|
+
(0, _core.focusEditor)(editor, range);
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
.sdoc-embed-link-hover-menu-container {
|
|
2
|
+
position: absolute;
|
|
3
|
+
height: 42px;
|
|
4
|
+
z-index: 101;
|
|
5
|
+
width: auto;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.sdoc-embed-link-hover-menu-container .hover-menu-container {
|
|
9
|
+
height: 36px;
|
|
10
|
+
background-color: #fff;
|
|
11
|
+
display: flex;
|
|
12
|
+
justify-content: flex-start;
|
|
13
|
+
align-items: center;
|
|
14
|
+
border-radius: 3px;
|
|
15
|
+
box-shadow: 0 1px 0 rgba(0, 0, 0, 0.08);
|
|
16
|
+
border: 1px solid #e8e8e8;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.sdoc-embed-link-hover-menu-container .hover-menu-container>span {
|
|
20
|
+
padding: 0 8px;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.sdoc-embed-link-hover-menu-container .hover-menu-container>span:not(:last-of-type) {
|
|
24
|
+
padding: 0 8px;
|
|
25
|
+
border-right: 1px solid #e5e5e5;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.sdoc-embed-link-hover-menu-container .hover-menu-container .op-item {
|
|
29
|
+
position: relative;
|
|
30
|
+
font-size: 12px;
|
|
31
|
+
color: #212529;
|
|
32
|
+
padding: 0 5px;
|
|
33
|
+
border-radius: 2px;
|
|
34
|
+
min-width: 24px;
|
|
35
|
+
height: 24px;
|
|
36
|
+
display: inline-flex;
|
|
37
|
+
align-items: center;
|
|
38
|
+
justify-content: center;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.sdoc-embed-link-hover-menu-container .hover-menu-container .op-item:hover {
|
|
42
|
+
text-decoration: none;
|
|
43
|
+
background: #EFEFEF;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.sdoc-embed-link-hover-menu-container .hover-menu-container .sdocfont {
|
|
47
|
+
line-height: 1;
|
|
48
|
+
font-size: 14px;
|
|
49
|
+
color: #666;
|
|
50
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
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 _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
|
|
10
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
+
var _reactI18next = require("react-i18next");
|
|
12
|
+
var _tooltip = _interopRequireDefault(require("../../../../components/tooltip"));
|
|
13
|
+
var _commons = require("../../../commons");
|
|
14
|
+
require("./index.css");
|
|
15
|
+
var EmbedLinkHoverMenu = function EmbedLinkHoverMenu(_ref) {
|
|
16
|
+
var isValidUrl = _ref.isValidUrl,
|
|
17
|
+
menuPosition = _ref.menuPosition,
|
|
18
|
+
onOpen = _ref.onOpen,
|
|
19
|
+
openFullscreen = _ref.openFullscreen,
|
|
20
|
+
onDeleteEmbedLink = _ref.onDeleteEmbedLink;
|
|
21
|
+
var _useTranslation = (0, _reactI18next.useTranslation)('sdoc-editor'),
|
|
22
|
+
t = _useTranslation.t;
|
|
23
|
+
var _useState = (0, _react.useState)(false),
|
|
24
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
25
|
+
showTooltip = _useState2[0],
|
|
26
|
+
setShowTooltip = _useState2[1];
|
|
27
|
+
(0, _react.useEffect)(function () {
|
|
28
|
+
setShowTooltip(true);
|
|
29
|
+
}, []);
|
|
30
|
+
return /*#__PURE__*/_react["default"].createElement(_commons.ElementPopover, null, /*#__PURE__*/_react["default"].createElement("div", {
|
|
31
|
+
className: "sdoc-embed-link-hover-menu-container",
|
|
32
|
+
style: menuPosition
|
|
33
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
34
|
+
className: "hover-menu-container"
|
|
35
|
+
}, isValidUrl && /*#__PURE__*/_react["default"].createElement("span", {
|
|
36
|
+
className: "op-group-item"
|
|
37
|
+
}, /*#__PURE__*/_react["default"].createElement("span", {
|
|
38
|
+
id: "sdoc_embed_link_open",
|
|
39
|
+
role: "button",
|
|
40
|
+
className: "op-item",
|
|
41
|
+
onClick: onOpen
|
|
42
|
+
}, /*#__PURE__*/_react["default"].createElement("span", {
|
|
43
|
+
className: "mr-1"
|
|
44
|
+
}, t('Open')))), /*#__PURE__*/_react["default"].createElement("span", {
|
|
45
|
+
className: "op-group-item"
|
|
46
|
+
}, /*#__PURE__*/_react["default"].createElement("span", {
|
|
47
|
+
id: "sdoc_embed_link_delete",
|
|
48
|
+
role: "button",
|
|
49
|
+
className: "op-item",
|
|
50
|
+
onClick: onDeleteEmbedLink
|
|
51
|
+
}, /*#__PURE__*/_react["default"].createElement("i", {
|
|
52
|
+
className: "sdocfont sdoc-delete"
|
|
53
|
+
}), showTooltip && /*#__PURE__*/_react["default"].createElement(_tooltip["default"], {
|
|
54
|
+
target: "sdoc_embed_link_delete",
|
|
55
|
+
placement: "top",
|
|
56
|
+
fade: true
|
|
57
|
+
}, t('Delete')))), isValidUrl && /*#__PURE__*/_react["default"].createElement("span", {
|
|
58
|
+
className: "op-group-item"
|
|
59
|
+
}, /*#__PURE__*/_react["default"].createElement("span", {
|
|
60
|
+
id: "sdoc_embed_link_full_screen_mode",
|
|
61
|
+
role: "button",
|
|
62
|
+
className: "op-item",
|
|
63
|
+
onClick: openFullscreen
|
|
64
|
+
}, /*#__PURE__*/_react["default"].createElement("i", {
|
|
65
|
+
className: "sdocfont sdoc-fullscreen icon-font"
|
|
66
|
+
}), showTooltip && /*#__PURE__*/_react["default"].createElement(_tooltip["default"], {
|
|
67
|
+
target: "sdoc_embed_link_full_screen_mode",
|
|
68
|
+
placement: "top",
|
|
69
|
+
fade: true
|
|
70
|
+
}, t('Full_screen_mode')))))));
|
|
71
|
+
};
|
|
72
|
+
var _default = exports["default"] = EmbedLinkHoverMenu;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
.sdoc-embed-link-container {
|
|
2
|
+
position: relative;
|
|
3
|
+
width: 100%;
|
|
4
|
+
height: 300px;
|
|
5
|
+
border: 1px solid #ccc;
|
|
6
|
+
margin: 5px 0;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.sdoc-embed-link-container.isSelected {
|
|
10
|
+
border: 2px solid rgb(0, 123, 255);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.sdoc-embed-link-title {
|
|
14
|
+
font-size: 14px;
|
|
15
|
+
color: #333;
|
|
16
|
+
text-align: center;
|
|
17
|
+
margin: 5px;
|
|
18
|
+
width: 100%;
|
|
19
|
+
position: absolute;
|
|
20
|
+
top: 0;
|
|
21
|
+
left: 0%;
|
|
22
|
+
z-index: 3;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.sdoc-embed-link-container .iframe-overlay {
|
|
26
|
+
position: absolute;
|
|
27
|
+
top: 0;
|
|
28
|
+
left: 0;
|
|
29
|
+
width: 100%;
|
|
30
|
+
height: 100%;
|
|
31
|
+
cursor: pointer;
|
|
32
|
+
z-index: 2;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.sdoc-embed-link-container .sdoc-embed-link-element {
|
|
36
|
+
width: 100%;
|
|
37
|
+
height: 100%;
|
|
38
|
+
border: none;
|
|
39
|
+
position: relative;
|
|
40
|
+
z-index: 1;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.embed-link-zoom-out-container {
|
|
44
|
+
position: fixed;
|
|
45
|
+
inset: 0;
|
|
46
|
+
background: rgba(0, 0, 0, 0.7);
|
|
47
|
+
display: flex;
|
|
48
|
+
justify-content: center;
|
|
49
|
+
align-items: center;
|
|
50
|
+
z-index: 9999;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.embed-link-zoom-out-container .sdoc-embed-link-element-full-screen {
|
|
54
|
+
pointer-events: auto;
|
|
55
|
+
background: #fff;
|
|
56
|
+
border-radius: 12px;
|
|
57
|
+
width: 80%;
|
|
58
|
+
height: 80%;
|
|
59
|
+
overflow: auto;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.sdoc-embed-link-tip {
|
|
63
|
+
width: 100%;
|
|
64
|
+
height: 100%;
|
|
65
|
+
display: flex;
|
|
66
|
+
align-items: center;
|
|
67
|
+
justify-content: center;
|
|
68
|
+
color: red;
|
|
69
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports["default"] = void 0;
|
|
8
|
+
var _elementType = require("../../constants/element-type");
|
|
9
|
+
var _plugin = _interopRequireDefault(require("./plugin"));
|
|
10
|
+
var _renderElem = require("./render-elem");
|
|
11
|
+
var EmbedLinkPlugin = {
|
|
12
|
+
type: _elementType.EMBED_LINK,
|
|
13
|
+
editorPlugin: _plugin["default"],
|
|
14
|
+
renderElements: [_renderElem.renderEmbedLink]
|
|
15
|
+
};
|
|
16
|
+
var _default = exports["default"] = EmbedLinkPlugin;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports["default"] = void 0;
|
|
8
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
|
|
9
|
+
var _react = _interopRequireDefault(require("react"));
|
|
10
|
+
var _slate = require("@seafile/slate");
|
|
11
|
+
var _isHotkey = _interopRequireDefault(require("is-hotkey"));
|
|
12
|
+
var _constants = require("../../constants");
|
|
13
|
+
var _elementType = require("../../constants/element-type");
|
|
14
|
+
var _core = require("../../core");
|
|
15
|
+
var _helpers = require("../../toolbar/side-toolbar/helpers");
|
|
16
|
+
var withEmbedLink = function withEmbedLink(editor) {
|
|
17
|
+
var isVoid = editor.isVoid,
|
|
18
|
+
onHotKeyDown = editor.onHotKeyDown;
|
|
19
|
+
var newEditor = editor;
|
|
20
|
+
|
|
21
|
+
// Make embed link as void node
|
|
22
|
+
newEditor.isVoid = function (elem) {
|
|
23
|
+
var type = elem.type;
|
|
24
|
+
if (type === _elementType.EMBED_LINK) {
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
return isVoid(elem);
|
|
28
|
+
};
|
|
29
|
+
newEditor.onHotKeyDown = function (event) {
|
|
30
|
+
var _ref = (0, _core.getSelectedNodeEntryByType)(editor, _elementType.EMBED_LINK) || [],
|
|
31
|
+
_ref2 = (0, _slicedToArray2["default"])(_ref, 2),
|
|
32
|
+
embedLinkNode = _ref2[0],
|
|
33
|
+
path = _ref2[1];
|
|
34
|
+
if (path) {
|
|
35
|
+
// Insert empty paragraph node after embed link when clicking 'enter' on selected embed link
|
|
36
|
+
if ((0, _isHotkey["default"])('enter', event)) {
|
|
37
|
+
event.preventDefault();
|
|
38
|
+
var emptyParagraph = (0, _core.generateEmptyElement)(_constants.PARAGRAPH);
|
|
39
|
+
_slate.Transforms.insertNodes(editor, emptyParagraph, {
|
|
40
|
+
at: _slate.Path.next(path)
|
|
41
|
+
});
|
|
42
|
+
var focusPoint = _slate.Editor.end(editor, _slate.Path.next(path));
|
|
43
|
+
(0, _core.focusEditor)(newEditor, focusPoint);
|
|
44
|
+
}
|
|
45
|
+
if ((0, _isHotkey["default"])('mod+c', event)) {
|
|
46
|
+
(0, _helpers.onCopyNode)(editor, embedLinkNode);
|
|
47
|
+
}
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
return onHotKeyDown && onHotKeyDown(event);
|
|
51
|
+
};
|
|
52
|
+
return newEditor;
|
|
53
|
+
};
|
|
54
|
+
var _default = exports["default"] = withEmbedLink;
|
|
@@ -0,0 +1,180 @@
|
|
|
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.renderEmbedLink = renderEmbedLink;
|
|
9
|
+
var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createForOfIteratorHelper"));
|
|
10
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
|
|
11
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
12
|
+
var _reactDom = _interopRequireDefault(require("react-dom"));
|
|
13
|
+
var _reactI18next = require("react-i18next");
|
|
14
|
+
var _slate = require("@seafile/slate");
|
|
15
|
+
var _slateReact = require("@seafile/slate-react");
|
|
16
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
17
|
+
var _isUrl = _interopRequireDefault(require("is-url"));
|
|
18
|
+
var _useScrollContext = require("../../../hooks/use-scroll-context");
|
|
19
|
+
var _core = require("../../core");
|
|
20
|
+
var _utils = require("../../utils");
|
|
21
|
+
var _constants = require("./constants");
|
|
22
|
+
var _helper = require("./helper");
|
|
23
|
+
var _hoverMenu = _interopRequireDefault(require("./hover-menu"));
|
|
24
|
+
require("./index.css");
|
|
25
|
+
var EmbedLink = function EmbedLink(_ref) {
|
|
26
|
+
var editor = _ref.editor,
|
|
27
|
+
element = _ref.element;
|
|
28
|
+
var EmbedLinkRef = (0, _react.useRef)();
|
|
29
|
+
var fullscreenRef = (0, _react.useRef)();
|
|
30
|
+
var scrollRef = (0, _useScrollContext.useScrollContext)();
|
|
31
|
+
var isSelected = (0, _slateReact.useSelected)();
|
|
32
|
+
var readOnly = (0, _slateReact.useReadOnly)();
|
|
33
|
+
var _useTranslation = (0, _reactI18next.useTranslation)('sdoc-editor'),
|
|
34
|
+
t = _useTranslation.t;
|
|
35
|
+
var _useState = (0, _react.useState)({
|
|
36
|
+
top: '',
|
|
37
|
+
left: ''
|
|
38
|
+
}),
|
|
39
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
40
|
+
menuPosition = _useState2[0],
|
|
41
|
+
setMenuPosition = _useState2[1];
|
|
42
|
+
var _useState3 = (0, _react.useState)(false),
|
|
43
|
+
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
44
|
+
isShowZoomOut = _useState4[0],
|
|
45
|
+
setIsShowZoomOut = _useState4[1];
|
|
46
|
+
var originalLink = element.link,
|
|
47
|
+
link_type = element.link_type;
|
|
48
|
+
var link = originalLink;
|
|
49
|
+
if (link_type === _constants.EMBED_LINK_SOURCE.FIGMA) {
|
|
50
|
+
link = (0, _helper.normalizeFigmaEmbedLink)(originalLink);
|
|
51
|
+
}
|
|
52
|
+
var isValidUrl = (0, _react.useMemo)(function () {
|
|
53
|
+
return (0, _isUrl["default"])(link);
|
|
54
|
+
}, [link]);
|
|
55
|
+
var onDeleteEmbedLink = (0, _react.useCallback)(function () {
|
|
56
|
+
var path = _slateReact.ReactEditor.findPath(editor, element);
|
|
57
|
+
_slate.Transforms.removeNodes(editor, {
|
|
58
|
+
at: path
|
|
59
|
+
});
|
|
60
|
+
(0, _core.focusEditor)(editor);
|
|
61
|
+
_slate.Transforms.select(editor, editor.selection);
|
|
62
|
+
}, [editor, element]);
|
|
63
|
+
var handleDoubleClick = function handleDoubleClick(event) {
|
|
64
|
+
event.preventDefault();
|
|
65
|
+
if (!isValidUrl) return;
|
|
66
|
+
window.open(link, '_blank');
|
|
67
|
+
return;
|
|
68
|
+
};
|
|
69
|
+
var handleScroll = (0, _react.useCallback)(function (e) {
|
|
70
|
+
if (readOnly) return;
|
|
71
|
+
if (!isSelected && !isShowZoomOut) return;
|
|
72
|
+
var menuPosition = (0, _utils.getMenuPosition)(EmbedLinkRef.current, editor);
|
|
73
|
+
setMenuPosition(menuPosition);
|
|
74
|
+
}, [editor, isSelected, readOnly, isShowZoomOut]);
|
|
75
|
+
(0, _react.useEffect)(function () {
|
|
76
|
+
if (readOnly) return;
|
|
77
|
+
var observerRefValue = null;
|
|
78
|
+
var resizeObserver = null;
|
|
79
|
+
if (scrollRef.current) {
|
|
80
|
+
scrollRef.current.addEventListener('scroll', handleScroll);
|
|
81
|
+
observerRefValue = scrollRef.current;
|
|
82
|
+
resizeObserver = new ResizeObserver(function (entries) {
|
|
83
|
+
// eslint-disable-next-line no-unused-vars
|
|
84
|
+
var _iterator = (0, _createForOfIteratorHelper2["default"])(entries),
|
|
85
|
+
_step;
|
|
86
|
+
try {
|
|
87
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
88
|
+
var entry = _step.value;
|
|
89
|
+
if (resizeObserver) {
|
|
90
|
+
handleScroll();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
} catch (err) {
|
|
94
|
+
_iterator.e(err);
|
|
95
|
+
} finally {
|
|
96
|
+
_iterator.f();
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
resizeObserver.observe(scrollRef.current);
|
|
100
|
+
}
|
|
101
|
+
return function () {
|
|
102
|
+
observerRefValue.removeEventListener('scroll', handleScroll);
|
|
103
|
+
if (resizeObserver) {
|
|
104
|
+
resizeObserver.disconnect();
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
}, [handleScroll, readOnly, scrollRef]);
|
|
108
|
+
var handleOnClick = (0, _react.useCallback)(function () {
|
|
109
|
+
if (readOnly) return;
|
|
110
|
+
if (isSelected) {
|
|
111
|
+
var _menuPosition = (0, _utils.getMenuPosition)(EmbedLinkRef.current, editor);
|
|
112
|
+
setMenuPosition(_menuPosition);
|
|
113
|
+
}
|
|
114
|
+
}, [editor, isSelected, readOnly]);
|
|
115
|
+
var openFullscreen = function openFullscreen(e) {
|
|
116
|
+
e.stopPropagation();
|
|
117
|
+
setIsShowZoomOut(true);
|
|
118
|
+
};
|
|
119
|
+
(0, _react.useEffect)(function () {
|
|
120
|
+
var handleKeyDown = function handleKeyDown(e) {
|
|
121
|
+
if (e.key === 'Escape') {
|
|
122
|
+
setIsShowZoomOut(false);
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
if (isShowZoomOut) {
|
|
126
|
+
document.addEventListener('keydown', handleKeyDown);
|
|
127
|
+
}
|
|
128
|
+
return function () {
|
|
129
|
+
document.removeEventListener('keydown', handleKeyDown);
|
|
130
|
+
};
|
|
131
|
+
}, [isShowZoomOut, setIsShowZoomOut]);
|
|
132
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("div", {
|
|
133
|
+
className: (0, _classnames["default"])('sdoc-embed-link-container', {
|
|
134
|
+
'isSelected': isSelected
|
|
135
|
+
}),
|
|
136
|
+
onDoubleClick: handleDoubleClick,
|
|
137
|
+
scrolling: "no"
|
|
138
|
+
}, isValidUrl && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("iframe", {
|
|
139
|
+
className: "sdoc-embed-link-element ".concat(link_type),
|
|
140
|
+
title: link,
|
|
141
|
+
src: link,
|
|
142
|
+
ref: EmbedLinkRef
|
|
143
|
+
}), /*#__PURE__*/_react["default"].createElement("div", {
|
|
144
|
+
className: "iframe-overlay",
|
|
145
|
+
onDoubleClick: handleDoubleClick,
|
|
146
|
+
onClick: handleOnClick
|
|
147
|
+
})), !isValidUrl && /*#__PURE__*/_react["default"].createElement("div", {
|
|
148
|
+
ref: EmbedLinkRef,
|
|
149
|
+
className: "sdoc-embed-link-tip"
|
|
150
|
+
}, t('Embed_link_invalid_tip'))), isSelected && !readOnly && !isShowZoomOut && /*#__PURE__*/_react["default"].createElement(_hoverMenu["default"], {
|
|
151
|
+
isValidUrl: isValidUrl,
|
|
152
|
+
menuPosition: menuPosition,
|
|
153
|
+
onOpen: handleDoubleClick,
|
|
154
|
+
openFullscreen: openFullscreen,
|
|
155
|
+
onDeleteEmbedLink: onDeleteEmbedLink
|
|
156
|
+
}), isShowZoomOut && (/*#__PURE__*/_reactDom["default"].createPortal(/*#__PURE__*/_react["default"].createElement("div", {
|
|
157
|
+
className: "embed-link-zoom-out-container",
|
|
158
|
+
onClick: function onClick() {
|
|
159
|
+
return setIsShowZoomOut(false);
|
|
160
|
+
}
|
|
161
|
+
}, /*#__PURE__*/_react["default"].createElement("iframe", {
|
|
162
|
+
title: link,
|
|
163
|
+
className: "sdoc-embed-link-element-full-screen ".concat(link_type),
|
|
164
|
+
src: link,
|
|
165
|
+
ref: fullscreenRef
|
|
166
|
+
})), document.body)));
|
|
167
|
+
};
|
|
168
|
+
function renderEmbedLink(props, editor) {
|
|
169
|
+
var element = props.element,
|
|
170
|
+
children = props.children,
|
|
171
|
+
attributes = props.attributes;
|
|
172
|
+
return /*#__PURE__*/_react["default"].createElement("div", Object.assign({}, attributes, {
|
|
173
|
+
contentEditable: "false",
|
|
174
|
+
suppressContentEditableWarning: true
|
|
175
|
+
}), children, /*#__PURE__*/_react["default"].createElement(EmbedLink, {
|
|
176
|
+
editor: editor,
|
|
177
|
+
element: element,
|
|
178
|
+
contentEditable: "false"
|
|
179
|
+
}));
|
|
180
|
+
}
|
|
@@ -29,6 +29,12 @@ Object.defineProperty(exports, "CodeBlockPlugin", {
|
|
|
29
29
|
}
|
|
30
30
|
});
|
|
31
31
|
exports.CommentPlugins = void 0;
|
|
32
|
+
Object.defineProperty(exports, "EmbedLinkPlugin", {
|
|
33
|
+
enumerable: true,
|
|
34
|
+
get: function get() {
|
|
35
|
+
return _embedLink["default"];
|
|
36
|
+
}
|
|
37
|
+
});
|
|
32
38
|
Object.defineProperty(exports, "FileLinkPlugin", {
|
|
33
39
|
enumerable: true,
|
|
34
40
|
get: function get() {
|
|
@@ -178,6 +184,7 @@ var _blockquote = _interopRequireDefault(require("./blockquote"));
|
|
|
178
184
|
var _callout = _interopRequireDefault(require("./callout"));
|
|
179
185
|
var _checkList = _interopRequireDefault(require("./check-list"));
|
|
180
186
|
var _codeBlock = _interopRequireDefault(require("./code-block"));
|
|
187
|
+
var _embedLink = _interopRequireDefault(require("./embed-link"));
|
|
181
188
|
var _fileLink = _interopRequireDefault(require("./file-link"));
|
|
182
189
|
var _fileView = _interopRequireDefault(require("./file-view"));
|
|
183
190
|
var _font = _interopRequireDefault(require("./font"));
|
|
@@ -202,7 +209,7 @@ var _toggleHeader = _interopRequireDefault(require("./toggle-header"));
|
|
|
202
209
|
var _video = _interopRequireDefault(require("./video"));
|
|
203
210
|
var _whiteboard = _interopRequireDefault(require("./whiteboard"));
|
|
204
211
|
var _wikiLink = _interopRequireDefault(require("./wiki-link"));
|
|
205
|
-
var Plugins = [_markdown["default"], _html["default"], _header["default"], _link["default"], _blockquote["default"], _list["default"], _checkList["default"], _codeBlock["default"], _image["default"], _video["default"], _table["default"], _multiColumn["default"], _textStyle["default"], _textAlign["default"], _font["default"], _sdocLink["default"], _paragraph["default"], _fileLink["default"], _callout["default"], _searchReplace["default"], _quickInsert["default"], _group["default"], _whiteboard["default"], _fileView["default"], _formula["default"], _toggleHeader["default"]];
|
|
212
|
+
var Plugins = [_markdown["default"], _html["default"], _header["default"], _link["default"], _blockquote["default"], _list["default"], _checkList["default"], _codeBlock["default"], _image["default"], _video["default"], _table["default"], _multiColumn["default"], _textStyle["default"], _textAlign["default"], _font["default"], _sdocLink["default"], _paragraph["default"], _fileLink["default"], _callout["default"], _searchReplace["default"], _quickInsert["default"], _group["default"], _whiteboard["default"], _fileView["default"], _formula["default"], _toggleHeader["default"], _embedLink["default"]];
|
|
206
213
|
var WikiPlugins = exports.WikiPlugins = [].concat(Plugins, [_wikiLink["default"], _fileView["default"]]);
|
|
207
214
|
var CommentPlugins = exports.CommentPlugins = [_markdown["default"], _html["default"], _paragraph["default"], _textStyle["default"], _list["default"], _image["default"], _link["default"], _mention["default"], _blockquote["default"]];
|
|
208
215
|
var _default = exports["default"] = Plugins;
|
|
@@ -19,9 +19,10 @@ var _eventBus = _interopRequireDefault(require("../../../utils/event-bus"));
|
|
|
19
19
|
var _constants2 = require("../../constants");
|
|
20
20
|
var _core = require("../../core");
|
|
21
21
|
var _utils = require("../../utils");
|
|
22
|
+
var _helper = require("../embed-link/helper");
|
|
22
23
|
var _helpers = require("../file-link/helpers");
|
|
23
24
|
var _helpers2 = require("../sdoc-link/helpers");
|
|
24
|
-
var
|
|
25
|
+
var _helper2 = require("../whiteboard/helper");
|
|
25
26
|
var _helpers3 = require("../wiki-link/helpers");
|
|
26
27
|
var _helpers4 = require("./helpers");
|
|
27
28
|
var withLink = function withLink(editor) {
|
|
@@ -43,7 +44,7 @@ var withLink = function withLink(editor) {
|
|
|
43
44
|
};
|
|
44
45
|
newEditor.insertData = /*#__PURE__*/function () {
|
|
45
46
|
var _ref = (0, _asyncToGenerator2["default"])(/*#__PURE__*/(0, _regenerator2["default"])().m(function _callee(data) {
|
|
46
|
-
var text, selectedElems, isCodeContext, res, fileName, fileUuid, _fileName, fileParentPath, filePath, repoId, _fileName2, _fileUuid, url, pathname, _context$getSetting, parts, wikiPageId, title, wikiPageList, page, linkedNodeId, _title, params, link, _link, _link2, _Editor$next, _Editor$next2, focusPath, focusPoint, _t;
|
|
47
|
+
var text, selectedElems, isCodeContext, res, fileName, fileUuid, _fileName, fileParentPath, filePath, repoId, _fileName2, _fileUuid, url, pathname, _context$getSetting, parts, wikiPageId, title, wikiPageList, page, linkedNodeId, _title, params, link, _link, embedLinkType, _link2, _Editor$next, _Editor$next2, focusPath, focusPoint, _t;
|
|
47
48
|
return (0, _regenerator2["default"])().w(function (_context) {
|
|
48
49
|
while (1) switch (_context.p = _context.n) {
|
|
49
50
|
case 0:
|
|
@@ -60,7 +61,7 @@ var withLink = function withLink(editor) {
|
|
|
60
61
|
return _context.a(2, insertData(data));
|
|
61
62
|
case 1:
|
|
62
63
|
if (!((0, _isUrl["default"])(text) && !(0, _utils.isImage)(text))) {
|
|
63
|
-
_context.n =
|
|
64
|
+
_context.n = 16;
|
|
64
65
|
break;
|
|
65
66
|
}
|
|
66
67
|
if (!(0, _utils.isSameDomain)(text, _context2["default"].getSetting('serviceUrl'))) {
|
|
@@ -90,7 +91,7 @@ var withLink = function withLink(editor) {
|
|
|
90
91
|
fileParentPath = res.data.files_info[text].parent_path;
|
|
91
92
|
filePath = fileParentPath + '/' + _fileName;
|
|
92
93
|
repoId = res.data.files_info[text].repo_id;
|
|
93
|
-
(0,
|
|
94
|
+
(0, _helper2.insertWhiteboard)(editor, _fileName, filePath, repoId);
|
|
94
95
|
_context.n = 10;
|
|
95
96
|
break;
|
|
96
97
|
case 5:
|
|
@@ -153,20 +154,29 @@ var withLink = function withLink(editor) {
|
|
|
153
154
|
_link = (0, _helpers4.genLinkNode)(text, text);
|
|
154
155
|
_slate.Transforms.insertNodes(newEditor, _link);
|
|
155
156
|
case 12:
|
|
156
|
-
_context.n =
|
|
157
|
+
_context.n = 15;
|
|
157
158
|
break;
|
|
158
159
|
case 13:
|
|
160
|
+
// Paste Seatable or Figma link
|
|
161
|
+
embedLinkType = (0, _helper.getEmbedLinkType)(text);
|
|
162
|
+
if (!embedLinkType) {
|
|
163
|
+
_context.n = 14;
|
|
164
|
+
break;
|
|
165
|
+
}
|
|
166
|
+
(0, _helper.insertEmbedLink)(newEditor, text, embedLinkType);
|
|
167
|
+
return _context.a(2);
|
|
168
|
+
case 14:
|
|
159
169
|
_link2 = (0, _helpers4.genLinkNode)(text, text);
|
|
160
170
|
_slate.Transforms.insertNodes(newEditor, _link2);
|
|
161
|
-
case
|
|
171
|
+
case 15:
|
|
162
172
|
// Void merging text from link
|
|
163
173
|
_Editor$next = _slate.Editor.next(newEditor), _Editor$next2 = (0, _slicedToArray2["default"])(_Editor$next, 2), focusPath = _Editor$next2[1];
|
|
164
174
|
focusPoint = _slate.Editor.start(newEditor, focusPath);
|
|
165
175
|
_slate.Transforms.select(newEditor, focusPoint);
|
|
166
176
|
return _context.a(2);
|
|
167
|
-
case 15:
|
|
168
|
-
insertData(data);
|
|
169
177
|
case 16:
|
|
178
|
+
insertData(data);
|
|
179
|
+
case 17:
|
|
170
180
|
return _context.a(2);
|
|
171
181
|
}
|
|
172
182
|
}, _callee, null, [[2, 11]]);
|
|
@@ -260,6 +260,12 @@ var CustomRenderElement = function CustomRenderElement(props) {
|
|
|
260
260
|
renderWhiteboard = _WhiteboardPlugin$ren[0];
|
|
261
261
|
return renderWhiteboard((0, _objectSpread2["default"])({}, props), editor);
|
|
262
262
|
}
|
|
263
|
+
case _elementType.EMBED_LINK:
|
|
264
|
+
{
|
|
265
|
+
var _EmbedLinkPlugin$rend = (0, _slicedToArray2["default"])(_plugins.EmbedLinkPlugin.renderElements, 1),
|
|
266
|
+
_renderWhiteboard = _EmbedLinkPlugin$rend[0];
|
|
267
|
+
return _renderWhiteboard((0, _objectSpread2["default"])({}, props), editor);
|
|
268
|
+
}
|
|
263
269
|
case _elementType.FILE_VIEW:
|
|
264
270
|
{
|
|
265
271
|
var _FileViewPlugin$rende = (0, _slicedToArray2["default"])(_plugins.FileViewPlugin.renderElements, 1),
|
|
@@ -22,6 +22,7 @@ var _commonUtils = require("../../../utils/common-utils");
|
|
|
22
22
|
var _eventBus = _interopRequireDefault(require("../../../utils/event-bus"));
|
|
23
23
|
var _dropdownMenuItem = _interopRequireDefault(require("../../commons/dropdown-menu-item"));
|
|
24
24
|
var _constants2 = require("../../constants");
|
|
25
|
+
var _elementType = require("../../constants/element-type");
|
|
25
26
|
var _core = require("../../core");
|
|
26
27
|
var _helper = require("../../plugins/callout/helper");
|
|
27
28
|
var _helpers = require("../../plugins/check-list/helpers");
|
|
@@ -132,6 +133,16 @@ var QuickInsertBlockMenu = function QuickInsertBlockMenu(_ref) {
|
|
|
132
133
|
});
|
|
133
134
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
134
135
|
}, [insertPosition]);
|
|
136
|
+
var addEmbedLinkDialog = (0, _react.useCallback)(function () {
|
|
137
|
+
callback && callback();
|
|
138
|
+
var eventBus = _eventBus["default"].getInstance();
|
|
139
|
+
eventBus.dispatch(_constants.INTERNAL_EVENT.INSERT_ELEMENT, {
|
|
140
|
+
type: _constants2.ELEMENT_TYPE.EMBED_LINK,
|
|
141
|
+
insertPosition: insertPosition,
|
|
142
|
+
slateNode: slateNode
|
|
143
|
+
});
|
|
144
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
145
|
+
}, [insertPosition]);
|
|
135
146
|
var openFileViewDialog = (0, _react.useCallback)(function () {
|
|
136
147
|
callback && callback();
|
|
137
148
|
var eventBus = _eventBus["default"].getInstance();
|
|
@@ -381,7 +392,7 @@ var QuickInsertBlockMenu = function QuickInsertBlockMenu(_ref) {
|
|
|
381
392
|
}, t('Add_video_link')), editor.editorType !== _constants.WIKI_EDITOR && /*#__PURE__*/_react["default"].createElement("div", {
|
|
382
393
|
className: "sdoc-dropdown-menu-item",
|
|
383
394
|
onClick: openSelectVideoFileDialog
|
|
384
|
-
}, t('Link_video_file'))))))), {}, (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, _constants2.TABLE,
|
|
395
|
+
}, t('Link_video_file'))))))), {}, (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, _constants2.TABLE,
|
|
385
396
|
/*#__PURE__*/
|
|
386
397
|
// eslint-disable-next-line react/jsx-indent
|
|
387
398
|
_react["default"].createElement(_dropdownMenuItem["default"], {
|
|
@@ -407,6 +418,11 @@ var QuickInsertBlockMenu = function QuickInsertBlockMenu(_ref) {
|
|
|
407
418
|
key: "sdoc-insert-menu-link",
|
|
408
419
|
menuConfig: (0, _objectSpread6["default"])({}, _constants2.SIDE_INSERT_MENUS_CONFIG[_constants2.ELEMENT_TYPE.LINK]),
|
|
409
420
|
onClick: openLinkDialog
|
|
421
|
+
})), _elementType.EMBED_LINK, /*#__PURE__*/_react["default"].createElement(_dropdownMenuItem["default"], {
|
|
422
|
+
isHidden: !quickInsertMenuSearchMap[_elementType.EMBED_LINK],
|
|
423
|
+
key: "sdoc-insert-menu-embed-link",
|
|
424
|
+
menuConfig: (0, _objectSpread6["default"])({}, _constants2.SIDE_INSERT_MENUS_CONFIG[_constants2.ELEMENT_TYPE.EMBED_LINK]),
|
|
425
|
+
onClick: addEmbedLinkDialog
|
|
410
426
|
})), _constants2.CODE_BLOCK, /*#__PURE__*/_react["default"].createElement(_dropdownMenuItem["default"], {
|
|
411
427
|
isHidden: !quickInsertMenuSearchMap[_constants2.CODE_BLOCK],
|
|
412
428
|
disabled: isDisableCodeBlock,
|
|
@@ -472,7 +488,7 @@ var QuickInsertBlockMenu = function QuickInsertBlockMenu(_ref) {
|
|
|
472
488
|
});
|
|
473
489
|
return items;
|
|
474
490
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
475
|
-
}, [quickInsertMenuSearchMap, isDisableImage, onInsertImageToggle, isDisableVideo, isDisableMultiColumn, onInsertVideoToggle, isDisableTable, editor, createTable, callback, handleClosePopover, openLinkDialog, onInsertCodeBlock, isDisableCallout, isDisableToggleHeader, onInsertCheckList, isEmptyNode, onInsertCallout, onInsertList, onInsert, createMultiColumn, isDisableHeader]);
|
|
491
|
+
}, [quickInsertMenuSearchMap, isDisableImage, onInsertImageToggle, isDisableVideo, isDisableMultiColumn, onInsertVideoToggle, isDisableTable, editor, createTable, callback, handleClosePopover, openLinkDialog, addEmbedLinkDialog, onInsertCodeBlock, isDisableCallout, isDisableToggleHeader, onInsertCheckList, isEmptyNode, onInsertCallout, onInsertList, onInsert, createMultiColumn, isDisableHeader]);
|
|
476
492
|
var getSelectItemDom = function getSelectItemDom(selectIndex) {
|
|
477
493
|
var dropDownItemWrapper = downDownWrapperRef.current;
|
|
478
494
|
var searchedDropDownItemWrapper = [];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seafile/sdoc-editor",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.126",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"test": "jest",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"license": "ISC",
|
|
18
18
|
"description": "",
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@seafile/comment-editor": "1.0.
|
|
20
|
+
"@seafile/comment-editor": "1.0.20",
|
|
21
21
|
"@seafile/print-js": "1.6.6",
|
|
22
22
|
"@seafile/react-image-lightbox": "5.0.4",
|
|
23
23
|
"@seafile/seafile-database": "0.0.43",
|
|
@@ -72,5 +72,5 @@
|
|
|
72
72
|
"publishConfig": {
|
|
73
73
|
"access": "public"
|
|
74
74
|
},
|
|
75
|
-
"gitHead": "
|
|
75
|
+
"gitHead": "13d95e83e1dc8d766ce3e95290f04b9efb2ad572"
|
|
76
76
|
}
|