@seafile/sdoc-editor 2.0.190 → 2.0.192
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/assets/css/sdoc-editor-plugins.css +1 -0
- package/dist/extension/commons/file-link-preview/index.css +1 -1
- package/dist/extension/commons/select-file-dialog/helpers.js +3 -1
- package/dist/extension/commons/select-file-dialog/list-view/index.js +1 -10
- package/dist/extension/plugins/file-link/render-elem.css +5 -1
- package/dist/extension/plugins/sdoc-link/hover-menu/index.js +9 -5
- package/dist/extension/plugins/sdoc-link/render/render-elem.css +5 -1
- package/dist/extension/plugins/sdoc-link/render/render-elem.js +9 -5
- package/dist/extension/plugins/video/helpers.js +17 -1
- package/dist/extension/plugins/video/hover-menu/index.css +52 -0
- package/dist/extension/plugins/video/hover-menu/index.js +102 -0
- package/dist/extension/plugins/video/render-elem.js +72 -3
- package/dist/layout/article-container.js +1 -2
- package/dist/right-panel/index.js +1 -0
- package/package.json +2 -2
|
@@ -48,7 +48,9 @@ var parcelFileTypeIcon = exports.parcelFileTypeIcon = function parcelFileTypeIco
|
|
|
48
48
|
var fileExtType = (_Object$entries$find = Object.entries(_constants.FILEEXT_TYPE).find(function (_ref) {
|
|
49
49
|
var _ref2 = (0, _slicedToArray2["default"])(_ref, 2),
|
|
50
50
|
extensions = _ref2[1];
|
|
51
|
-
return extensions.
|
|
51
|
+
return extensions.some(function (ext) {
|
|
52
|
+
return ext.toLowerCase() === newFileType.toLowerCase();
|
|
53
|
+
});
|
|
52
54
|
})) === null || _Object$entries$find === void 0 ? void 0 : _Object$entries$find[0];
|
|
53
55
|
var fileTypeResult = fileExtType ? _constants.FILEEXT_TYPE_MAP[fileExtType] : newFileType;
|
|
54
56
|
var fileTypeIcon = getFileTypeIcon(fileTypeResult);
|
|
@@ -47,7 +47,7 @@ var ListView = function ListView(_ref) {
|
|
|
47
47
|
(0, _react.useEffect)(function () {
|
|
48
48
|
var getFileMetadata = /*#__PURE__*/function () {
|
|
49
49
|
var _ref2 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/(0, _regenerator2["default"])().m(function _callee() {
|
|
50
|
-
var res, sortedRecords
|
|
50
|
+
var res, sortedRecords;
|
|
51
51
|
return (0, _regenerator2["default"])().w(function (_context) {
|
|
52
52
|
while (1) switch (_context.n) {
|
|
53
53
|
case 0:
|
|
@@ -61,15 +61,6 @@ var ListView = function ListView(_ref) {
|
|
|
61
61
|
});
|
|
62
62
|
setAllFileList(sortedRecords);
|
|
63
63
|
setFileList(sortedRecords);
|
|
64
|
-
firstFile = sortedRecords[0];
|
|
65
|
-
if (firstFile) {
|
|
66
|
-
filePath = (firstFile._parent_dir === '/' ? '' : firstFile._parent_dir) + '/' + firstFile._name;
|
|
67
|
-
onSelectFile(null, {
|
|
68
|
-
id: firstFile._id,
|
|
69
|
-
name: firstFile._name,
|
|
70
|
-
path: filePath
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
64
|
case 2:
|
|
74
65
|
return _context.a(2);
|
|
75
66
|
}
|
|
@@ -5,6 +5,10 @@
|
|
|
5
5
|
border-radius: 3px;
|
|
6
6
|
}
|
|
7
7
|
|
|
8
|
+
.sdoc-file-link-render:hover {
|
|
9
|
+
cursor: pointer;
|
|
10
|
+
}
|
|
11
|
+
|
|
8
12
|
.sdoc-file-link-render:hover .sdoc-file-text-link a {
|
|
9
13
|
text-decoration: underline;
|
|
10
14
|
text-underline-position: under;
|
|
@@ -44,7 +48,7 @@
|
|
|
44
48
|
|
|
45
49
|
.sdoc-file-link-render .sdoc-file-link-icon {
|
|
46
50
|
padding-right: 5px;
|
|
47
|
-
color: #
|
|
51
|
+
color: #9aa0ac;
|
|
48
52
|
}
|
|
49
53
|
|
|
50
54
|
.sdoc-file-card-link .sdoc-file-link-icon :first-child {
|
|
@@ -75,18 +75,22 @@ var SdocLinkHoverMenu = function SdocLinkHoverMenu(_ref) {
|
|
|
75
75
|
var doc_uuid = element.doc_uuid,
|
|
76
76
|
title = element.title,
|
|
77
77
|
type = element.type;
|
|
78
|
-
var
|
|
79
|
-
eventBus.dispatch(_constants.INTERNAL_EVENT.TRANSFER_PREVIEW_FILE_ID, {
|
|
78
|
+
var data = {
|
|
80
79
|
doc_uuid: doc_uuid,
|
|
81
80
|
title: title,
|
|
82
81
|
type: type
|
|
83
|
-
}
|
|
82
|
+
};
|
|
83
|
+
if (editor.editorType === _constants.WIKI_EDITOR) {
|
|
84
|
+
data = element;
|
|
85
|
+
}
|
|
86
|
+
var eventBus = _eventBus["default"].getInstance();
|
|
87
|
+
eventBus.dispatch(_constants.INTERNAL_EVENT.TRANSFER_PREVIEW_FILE_ID, data);
|
|
84
88
|
setTimeout(function () {
|
|
85
89
|
onHideInsertHoverMenu();
|
|
86
90
|
}, 0);
|
|
91
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
87
92
|
}, [updateDisplayPlugin]);
|
|
88
93
|
var selectedType = element.display_type || _constants2.SDOC_LINK_TYPE.TEXT_LINK;
|
|
89
|
-
var id = "sdoc-link-display-type-".concat(element.id);
|
|
90
94
|
var newSdocFileTypes = _constants2.SDOC_LINK_TYPES.filter(function (sdocLinkType) {
|
|
91
95
|
return (0, _helpers.isInTable)(editor, element) ? sdocLinkType !== _constants2.SDOC_LINK_TYPE.CARD_LINK : true;
|
|
92
96
|
});
|
|
@@ -154,7 +158,7 @@ var SdocLinkHoverMenu = function SdocLinkHoverMenu(_ref) {
|
|
|
154
158
|
return handleOpenLinkPreview('sdoc-file-preview');
|
|
155
159
|
}
|
|
156
160
|
}, /*#__PURE__*/_react["default"].createElement("i", {
|
|
157
|
-
className: "sdocfont
|
|
161
|
+
className: "sdocfont sdoc-eye icon-font"
|
|
158
162
|
})), isShowTooltip && /*#__PURE__*/_react["default"].createElement(_tooltip["default"], {
|
|
159
163
|
target: "sdoc_link_preview",
|
|
160
164
|
placement: "top",
|
|
@@ -5,6 +5,10 @@
|
|
|
5
5
|
border-radius: 3px;
|
|
6
6
|
}
|
|
7
7
|
|
|
8
|
+
.sdoc-file-render:hover {
|
|
9
|
+
cursor: pointer;
|
|
10
|
+
}
|
|
11
|
+
|
|
8
12
|
.sdoc-file-render:hover .sdoc-file-text-link a {
|
|
9
13
|
text-decoration: underline;
|
|
10
14
|
text-underline-position: under;
|
|
@@ -27,7 +31,7 @@
|
|
|
27
31
|
|
|
28
32
|
.sdoc-file-render .sdoc-file-link-icon {
|
|
29
33
|
padding-right: 5px;
|
|
30
|
-
color: #
|
|
34
|
+
color: #666;
|
|
31
35
|
}
|
|
32
36
|
|
|
33
37
|
.sdoc-file-card-link .sdoc-file-link-icon :first-child {
|
|
@@ -125,18 +125,22 @@ var SdocFileLink = function SdocFileLink(_ref) {
|
|
|
125
125
|
return;
|
|
126
126
|
}
|
|
127
127
|
}
|
|
128
|
-
if (isShowInsertHoverMenu &&
|
|
128
|
+
if (isShowInsertHoverMenu && [_elementType.SDOC_LINK, _elementType.WIKI_LINK].includes(element.type)) {
|
|
129
129
|
e.stopPropagation();
|
|
130
|
-
updateDisplayPlugin('sdoc-file-preview', true);
|
|
130
|
+
element.type === _elementType.SDOC_LINK && updateDisplayPlugin('sdoc-file-preview', true);
|
|
131
131
|
var doc_uuid = element.doc_uuid,
|
|
132
132
|
title = element.title,
|
|
133
133
|
type = element.type;
|
|
134
|
-
var
|
|
135
|
-
eventBus.dispatch(_constants.INTERNAL_EVENT.TRANSFER_PREVIEW_FILE_ID, {
|
|
134
|
+
var data = {
|
|
136
135
|
doc_uuid: doc_uuid,
|
|
137
136
|
title: title,
|
|
138
137
|
type: type
|
|
139
|
-
}
|
|
138
|
+
};
|
|
139
|
+
if (element.type === _elementType.WIKI_LINK) {
|
|
140
|
+
data = element;
|
|
141
|
+
}
|
|
142
|
+
var eventBus = _eventBus["default"].getInstance();
|
|
143
|
+
eventBus.dispatch(_constants.INTERNAL_EVENT.TRANSFER_PREVIEW_FILE_ID, data);
|
|
140
144
|
setTimeout(function () {
|
|
141
145
|
onHideInsertHoverMenu();
|
|
142
146
|
}, 0);
|
|
@@ -4,10 +4,12 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.videoFileIcon = exports.parseVideoLink = exports.isInsertVideoMenuDisabled = exports.insertVideo = exports.getVideoURL = exports.generateVideoNode = exports.formatFileSize = void 0;
|
|
7
|
+
exports.videoFileIcon = exports.parseVideoLink = exports.onCopyVideoNode = exports.isInsertVideoMenuDisabled = exports.insertVideo = exports.getVideoURL = exports.generateVideoNode = exports.formatFileSize = void 0;
|
|
8
8
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
|
|
9
9
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
|
|
10
10
|
var _slate = require("@seafile/slate");
|
|
11
|
+
var _slateReact = require("@seafile/slate-react");
|
|
12
|
+
var _copyToClipboard = _interopRequireDefault(require("copy-to-clipboard"));
|
|
11
13
|
var _urlJoin = _interopRequireDefault(require("url-join"));
|
|
12
14
|
var _context = _interopRequireDefault(require("../../../context"));
|
|
13
15
|
var _constants = require("../../constants");
|
|
@@ -204,4 +206,18 @@ var formatFileSize = exports.formatFileSize = function formatFileSize(size) {
|
|
|
204
206
|
var videoFileIcon = exports.videoFileIcon = function videoFileIcon() {
|
|
205
207
|
var server = _context["default"].getSetting('serviceUrl');
|
|
206
208
|
return "".concat(server, "/media/img/file/256/video.png");
|
|
209
|
+
};
|
|
210
|
+
var onCopyVideoNode = exports.onCopyVideoNode = function onCopyVideoNode(editor, element) {
|
|
211
|
+
if (editor.selection == null || _slate.Range.isExpanded(editor.selection)) return;
|
|
212
|
+
var p = _slateReact.ReactEditor.findPath(editor, element);
|
|
213
|
+
_slate.Transforms.select(editor, p);
|
|
214
|
+
var newData = editor.setFragmentData(new DataTransfer());
|
|
215
|
+
(0, _copyToClipboard["default"])('copy', {
|
|
216
|
+
onCopy: function onCopy(clipboardData) {
|
|
217
|
+
newData.types.forEach(function (type) {
|
|
218
|
+
var data = newData.getData(type);
|
|
219
|
+
clipboardData.setData(type, data);
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
});
|
|
207
223
|
};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
.video-hover-menu-container {
|
|
2
|
+
position: absolute;
|
|
3
|
+
height: 42px;
|
|
4
|
+
z-index: 101;
|
|
5
|
+
width: auto;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.video-hover-menu-container .hover-menu-container {
|
|
9
|
+
height: 36px;
|
|
10
|
+
padding: 7px 8px;
|
|
11
|
+
background-color: #fff;
|
|
12
|
+
display: flex;
|
|
13
|
+
justify-content: flex-start;
|
|
14
|
+
align-items: center;
|
|
15
|
+
border-radius: 3px;
|
|
16
|
+
box-shadow: 0 1px 0 rgba(0, 0, 0, 0.08);
|
|
17
|
+
border: 1px solid #e8e8e8;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.video-hover-menu-container .hover-menu-container>span:not(:last-of-type) {
|
|
21
|
+
padding-right: 8px;
|
|
22
|
+
border-right: 1px solid #e5e5e5;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.video-hover-menu-container .hover-menu-container .op-item {
|
|
26
|
+
position: relative;
|
|
27
|
+
font-size: 12px;
|
|
28
|
+
color: #212529;
|
|
29
|
+
padding: 0 5px;
|
|
30
|
+
border-radius: 2px;
|
|
31
|
+
min-width: 24px;
|
|
32
|
+
height: 24px;
|
|
33
|
+
display: inline-flex;
|
|
34
|
+
align-items: center;
|
|
35
|
+
justify-content: center;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.video-hover-menu-container .hover-menu-container .op-item:hover {
|
|
39
|
+
color: #212529;
|
|
40
|
+
text-decoration: none;
|
|
41
|
+
background: #f1f1f1;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.video-hover-menu-container .op-group-item:first-child .op-item:last-child,
|
|
45
|
+
.video-hover-menu-container .op-group-item:not(:first-child) .op-item {
|
|
46
|
+
margin-left: 8px;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.video-hover-menu-container .hover-menu-container .icon-font {
|
|
50
|
+
font-size: 12px;
|
|
51
|
+
color: #444;
|
|
52
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
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 _slate = require("@seafile/slate");
|
|
13
|
+
var _slateReact = require("@seafile/slate-react");
|
|
14
|
+
var _toast = _interopRequireDefault(require("../../../../components/toast"));
|
|
15
|
+
var _tooltip = _interopRequireDefault(require("../../../../components/tooltip"));
|
|
16
|
+
var _commons = require("../../../commons");
|
|
17
|
+
var _core = require("../../../core");
|
|
18
|
+
var _helpers = require("../helpers");
|
|
19
|
+
require("./index.css");
|
|
20
|
+
var VideoHoverMenu = function VideoHoverMenu(_ref) {
|
|
21
|
+
var editor = _ref.editor,
|
|
22
|
+
menuPosition = _ref.menuPosition,
|
|
23
|
+
element = _ref.element,
|
|
24
|
+
videoRef = _ref.videoRef,
|
|
25
|
+
setIsSelected = _ref.setIsSelected,
|
|
26
|
+
t = _ref.t;
|
|
27
|
+
var readOnly = (0, _slateReact.useReadOnly)();
|
|
28
|
+
var _useState = (0, _react.useState)(false),
|
|
29
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
30
|
+
isShowTooltip = _useState2[0],
|
|
31
|
+
setIsShowTooltip = _useState2[1];
|
|
32
|
+
(0, _react.useEffect)(function () {
|
|
33
|
+
setIsShowTooltip(true);
|
|
34
|
+
}, []);
|
|
35
|
+
var onCopy = (0, _react.useCallback)(function (e) {
|
|
36
|
+
e.stopPropagation();
|
|
37
|
+
(0, _helpers.onCopyVideoNode)(editor, element);
|
|
38
|
+
_toast["default"].success(t('Copied'), {
|
|
39
|
+
hasCloseButton: false,
|
|
40
|
+
duration: 2
|
|
41
|
+
});
|
|
42
|
+
setIsSelected(false);
|
|
43
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
44
|
+
}, []);
|
|
45
|
+
var onDeleteVideo = (0, _react.useCallback)(function () {
|
|
46
|
+
var path = _slateReact.ReactEditor.findPath(editor, element);
|
|
47
|
+
_slate.Transforms.removeNodes(editor, {
|
|
48
|
+
at: path
|
|
49
|
+
});
|
|
50
|
+
(0, _core.focusEditor)(editor);
|
|
51
|
+
_slate.Transforms.select(editor, editor.selection);
|
|
52
|
+
}, [editor, element]);
|
|
53
|
+
var handleFullScreen = function handleFullScreen() {
|
|
54
|
+
var _videoRef$current;
|
|
55
|
+
setIsSelected(false);
|
|
56
|
+
(_videoRef$current = videoRef.current) === null || _videoRef$current === void 0 ? void 0 : _videoRef$current.requestFullscreen();
|
|
57
|
+
};
|
|
58
|
+
return /*#__PURE__*/_react["default"].createElement(_commons.ElementPopover, null, /*#__PURE__*/_react["default"].createElement("div", {
|
|
59
|
+
className: "video-hover-menu-container",
|
|
60
|
+
style: menuPosition
|
|
61
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
62
|
+
className: "hover-menu-container"
|
|
63
|
+
}, !readOnly && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("span", {
|
|
64
|
+
className: "op-group-item"
|
|
65
|
+
}, /*#__PURE__*/_react["default"].createElement("span", {
|
|
66
|
+
id: "sdoc_video_copy",
|
|
67
|
+
role: "button",
|
|
68
|
+
className: "op-item",
|
|
69
|
+
onClick: onCopy
|
|
70
|
+
}, /*#__PURE__*/_react["default"].createElement("i", {
|
|
71
|
+
className: "sdocfont sdoc-copy icon-font"
|
|
72
|
+
})), isShowTooltip && /*#__PURE__*/_react["default"].createElement(_tooltip["default"], {
|
|
73
|
+
target: "sdoc_video_copy",
|
|
74
|
+
placement: "top",
|
|
75
|
+
fade: true
|
|
76
|
+
}, t('Copy')), /*#__PURE__*/_react["default"].createElement("span", {
|
|
77
|
+
id: "sdoc_video_delete",
|
|
78
|
+
role: "button",
|
|
79
|
+
className: "op-item",
|
|
80
|
+
onClick: onDeleteVideo
|
|
81
|
+
}, /*#__PURE__*/_react["default"].createElement("i", {
|
|
82
|
+
className: "sdocfont sdoc-delete icon-font"
|
|
83
|
+
}), isShowTooltip && /*#__PURE__*/_react["default"].createElement(_tooltip["default"], {
|
|
84
|
+
target: "sdoc_video_delete",
|
|
85
|
+
placement: "top",
|
|
86
|
+
fade: true
|
|
87
|
+
}, t('Delete')))), /*#__PURE__*/_react["default"].createElement("span", {
|
|
88
|
+
className: "op-group-item"
|
|
89
|
+
}, /*#__PURE__*/_react["default"].createElement("span", {
|
|
90
|
+
id: "sdoc_video_full_screen_mode",
|
|
91
|
+
role: "button",
|
|
92
|
+
className: "op-item",
|
|
93
|
+
onClick: handleFullScreen
|
|
94
|
+
}, /*#__PURE__*/_react["default"].createElement("i", {
|
|
95
|
+
className: "sdocfont sdoc-fullscreen icon-font"
|
|
96
|
+
}), isShowTooltip && /*#__PURE__*/_react["default"].createElement(_tooltip["default"], {
|
|
97
|
+
target: "sdoc_video_full_screen_mode",
|
|
98
|
+
placement: "top",
|
|
99
|
+
fade: true
|
|
100
|
+
}, t('Full_screen_mode'))))))));
|
|
101
|
+
};
|
|
102
|
+
var _default = exports["default"] = (0, _reactI18next.withTranslation)('sdoc-editor')(VideoHoverMenu);
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
8
|
exports.renderVideo = renderVideo;
|
|
9
|
+
var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createForOfIteratorHelper"));
|
|
9
10
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/defineProperty"));
|
|
10
11
|
var _objectSpread4 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
|
|
11
12
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
|
|
@@ -13,7 +14,9 @@ var _react = _interopRequireWildcard(require("react"));
|
|
|
13
14
|
var _reactI18next = require("react-i18next");
|
|
14
15
|
var _slate = require("@seafile/slate");
|
|
15
16
|
var _slateReact = require("@seafile/slate-react");
|
|
17
|
+
var _useScrollContext = require("../../../hooks/use-scroll-context");
|
|
16
18
|
var _helpers = require("./helpers");
|
|
19
|
+
var _hoverMenu = _interopRequireDefault(require("./hover-menu"));
|
|
17
20
|
require("./index.css");
|
|
18
21
|
var Video = function Video(_ref) {
|
|
19
22
|
var _videoStates$element$;
|
|
@@ -33,10 +36,15 @@ var Video = function Video(_ref) {
|
|
|
33
36
|
_useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
|
|
34
37
|
videoStates = _useState6[0],
|
|
35
38
|
setVideoStates = _useState6[1];
|
|
39
|
+
var _useState7 = (0, _react.useState)({}),
|
|
40
|
+
_useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
|
|
41
|
+
menuPosition = _useState8[0],
|
|
42
|
+
setMenuPosition = _useState8[1];
|
|
43
|
+
var scrollRef = (0, _useScrollContext.useScrollContext)();
|
|
36
44
|
var videoName = (data === null || data === void 0 ? void 0 : data.name) || (data === null || data === void 0 ? void 0 : data.src);
|
|
37
45
|
var videoSize = data === null || data === void 0 ? void 0 : data.size;
|
|
38
46
|
var isEmbeddableLink = data === null || data === void 0 ? void 0 : data.is_embeddable_link;
|
|
39
|
-
var
|
|
47
|
+
var readOnly = (0, _slateReact.useReadOnly)();
|
|
40
48
|
var handlePlay = function handlePlay() {
|
|
41
49
|
setVideoStates(function (prev) {
|
|
42
50
|
return (0, _objectSpread4["default"])((0, _objectSpread4["default"])({}, prev), {}, (0, _defineProperty2["default"])({}, element.id, false));
|
|
@@ -63,6 +71,25 @@ var Video = function Video(_ref) {
|
|
|
63
71
|
setIsSelected(false);
|
|
64
72
|
}
|
|
65
73
|
}, []);
|
|
74
|
+
var setPosition = (0, _react.useCallback)(function (elem) {
|
|
75
|
+
if (elem) {
|
|
76
|
+
var _elem$getBoundingClie = elem.getBoundingClientRect(),
|
|
77
|
+
top = _elem$getBoundingClie.top,
|
|
78
|
+
left = _elem$getBoundingClie.left;
|
|
79
|
+
var menuTop = top - 42; // top = top distance - menu height
|
|
80
|
+
var menuLeft = left - 18; // left = left distance - (menu width / 2)
|
|
81
|
+
var newMenuPosition = {
|
|
82
|
+
top: menuTop,
|
|
83
|
+
left: menuLeft
|
|
84
|
+
};
|
|
85
|
+
setMenuPosition(newMenuPosition);
|
|
86
|
+
}
|
|
87
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
88
|
+
}, []);
|
|
89
|
+
var onScroll = (0, _react.useCallback)(function (e) {
|
|
90
|
+
setPosition(videoRef.current);
|
|
91
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
92
|
+
}, []);
|
|
66
93
|
(0, _react.useEffect)(function () {
|
|
67
94
|
var videoElement = videoRef.current;
|
|
68
95
|
if (videoElement) {
|
|
@@ -76,6 +103,42 @@ var Video = function Video(_ref) {
|
|
|
76
103
|
document.removeEventListener('click', onClickOutside);
|
|
77
104
|
};
|
|
78
105
|
}, [onClickOutside]);
|
|
106
|
+
(0, _react.useEffect)(function () {
|
|
107
|
+
var observerRefValue = null;
|
|
108
|
+
var resizeObserver = null;
|
|
109
|
+
if (isSelected) {
|
|
110
|
+
scrollRef.current && scrollRef.current.addEventListener('scroll', onScroll);
|
|
111
|
+
observerRefValue = scrollRef.current;
|
|
112
|
+
resizeObserver = new ResizeObserver(function (entries) {
|
|
113
|
+
var _iterator = (0, _createForOfIteratorHelper2["default"])(entries),
|
|
114
|
+
_step;
|
|
115
|
+
try {
|
|
116
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
117
|
+
var entry = _step.value;
|
|
118
|
+
if (resizeObserver) {
|
|
119
|
+
onScroll();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
} catch (err) {
|
|
123
|
+
_iterator.e(err);
|
|
124
|
+
} finally {
|
|
125
|
+
_iterator.f();
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
resizeObserver.observe(scrollRef.current);
|
|
129
|
+
} else {
|
|
130
|
+
scrollRef.current && scrollRef.current.removeEventListener('scroll', onScroll);
|
|
131
|
+
}
|
|
132
|
+
return function () {
|
|
133
|
+
if (observerRefValue) {
|
|
134
|
+
observerRefValue.removeEventListener('scroll', onScroll);
|
|
135
|
+
}
|
|
136
|
+
if (resizeObserver) {
|
|
137
|
+
resizeObserver.disconnect();
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
141
|
+
}, [isSelected]);
|
|
79
142
|
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, !isLoaded && /*#__PURE__*/_react["default"].createElement("div", {
|
|
80
143
|
className: "video-loading-placeholder"
|
|
81
144
|
}, /*#__PURE__*/_react["default"].createElement("img", {
|
|
@@ -106,7 +169,7 @@ var Video = function Video(_ref) {
|
|
|
106
169
|
ref: videoRef,
|
|
107
170
|
src: (0, _helpers.getVideoURL)(data, editor),
|
|
108
171
|
controls: true,
|
|
109
|
-
controlsList:
|
|
172
|
+
controlsList: readOnly ? 'nofullscreen' : undefined,
|
|
110
173
|
onClick: onClickVideo,
|
|
111
174
|
draggable: false,
|
|
112
175
|
onPlay: handlePlay,
|
|
@@ -133,7 +196,13 @@ var Video = function Video(_ref) {
|
|
|
133
196
|
height: '100%',
|
|
134
197
|
border: 'none'
|
|
135
198
|
}
|
|
136
|
-
}))))
|
|
199
|
+
}))), isSelected && !isEmbeddableLink && !readOnly && editor.selection && _slate.Range.isCollapsed(editor.selection) && /*#__PURE__*/_react["default"].createElement(_hoverMenu["default"], {
|
|
200
|
+
editor: editor,
|
|
201
|
+
menuPosition: menuPosition,
|
|
202
|
+
element: element,
|
|
203
|
+
videoRef: videoRef,
|
|
204
|
+
setIsSelected: setIsSelected
|
|
205
|
+
}));
|
|
137
206
|
};
|
|
138
207
|
var SdocVideo = (0, _reactI18next.withTranslation)('sdoc-editor')(Video);
|
|
139
208
|
function renderVideo(props, editor) {
|
|
@@ -17,8 +17,7 @@ var _fullWidthMode = require("../utils/full-width-mode");
|
|
|
17
17
|
var _localStorageUtils = _interopRequireDefault(require("../utils/local-storage-utils"));
|
|
18
18
|
function ArticleContainer(_ref) {
|
|
19
19
|
var editor = _ref.editor,
|
|
20
|
-
children = _ref.children
|
|
21
|
-
isShowCommentPanelInWiki = _ref.isShowCommentPanelInWiki;
|
|
20
|
+
children = _ref.children;
|
|
22
21
|
var scrollRef = (0, _useScrollContext.useScrollContext)();
|
|
23
22
|
var articleRef = (0, _react.useRef)(null);
|
|
24
23
|
var _useState = (0, _react.useState)({}),
|
|
@@ -111,6 +111,7 @@ var RightPanel = function RightPanel(_ref) {
|
|
|
111
111
|
return function () {
|
|
112
112
|
unsubscribeTransferFileId();
|
|
113
113
|
};
|
|
114
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
114
115
|
}, []);
|
|
115
116
|
if (!displayPluginName) return null;
|
|
116
117
|
var plugin = plugins.find(function (p) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seafile/sdoc-editor",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.192",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"test": "jest",
|
|
@@ -71,5 +71,5 @@
|
|
|
71
71
|
"publishConfig": {
|
|
72
72
|
"access": "public"
|
|
73
73
|
},
|
|
74
|
-
"gitHead": "
|
|
74
|
+
"gitHead": "f693ae4b928675528ce40a396618c458f9316a45"
|
|
75
75
|
}
|