@seafile/sdoc-editor 3.0.38 → 3.0.40

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.
@@ -331,6 +331,16 @@ var SeafileAPI = /*#__PURE__*/function () {
331
331
  form.append('view_id', viewId);
332
332
  return this.req.post(url, form);
333
333
  }
334
+ }, {
335
+ key: "modifyView",
336
+ value: function modifyView(wikiId, viewId, viewData) {
337
+ var url = '/api/v2.1/wiki2/' + wikiId + '/views/';
338
+ var data = {
339
+ view_id: viewId,
340
+ view_data: viewData
341
+ };
342
+ return this.req.put(url, data);
343
+ }
334
344
  }]);
335
345
  }();
336
346
  var _default = exports["default"] = SeafileAPI;
@@ -32,6 +32,36 @@
32
32
  font-weight: bold;
33
33
  }
34
34
 
35
+ .sdoc-editor__article .list-container li {
36
+ position: relative;
37
+ padding-left: 8px !important;
38
+ }
39
+
40
+ .sdoc-editor__article .list-container .sdoc-li-control {
41
+ user-select: none;
42
+ cursor: pointer;
43
+ }
44
+
45
+ .sdoc-editor__article .list-container .sdoc-li-prefix {
46
+ font-size: 12px;
47
+ color: #666;
48
+ position: absolute;
49
+ left: -32px;
50
+ top: 7px;
51
+ cursor: pointer;
52
+ }
53
+
54
+ .sdoc-editor__article .list-container .sdoc-li-divider {
55
+ width: 1px;
56
+ height: calc(100% - 38px);
57
+ background-color: #ccc;
58
+ position: absolute;
59
+ left: -12px;
60
+ top: 28px;
61
+ user-select: none;
62
+ pointer-events: none;
63
+ }
64
+
35
65
  /* check list */
36
66
  .sdoc-editor__article .sdoc-checkbox-container {
37
67
  padding: 0px 2px;
package/dist/context.js CHANGED
@@ -432,6 +432,12 @@ var Context = /*#__PURE__*/function () {
432
432
  var docUuid = this.getSetting('docUuid');
433
433
  return this.api.duplicateWikiView(wikiId, docUuid, viewId);
434
434
  }
435
+ }, {
436
+ key: "modifyView",
437
+ value: function modifyView(viewId, viewData) {
438
+ var wikiId = this.getSetting('wikiId');
439
+ return this.api.modifyView(wikiId, viewId, viewData);
440
+ }
435
441
  }]);
436
442
  }();
437
443
  var context = new Context();
@@ -0,0 +1,25 @@
1
+ .sdoc-file-view-rename {
2
+ max-width: 100%;
3
+ width: 100%;
4
+ white-space: nowrap;
5
+ word-break: break-word;
6
+ caret-color: var(--c-texPri);
7
+ min-width: 0px;
8
+ flex: 1 1 0%;
9
+ overflow: auto;
10
+ font-weight: 700;
11
+ font-size: 22px;
12
+ margin-inline-end: 4px;
13
+ scrollbar-width: none;
14
+ height: 48px;
15
+ line-height: 48px;
16
+ }
17
+
18
+ .sdoc-file-view-rename input {
19
+ border-width: 0;
20
+ padding: 0;
21
+ }
22
+
23
+ .sdoc-file-view-rename input:focus-visible {
24
+ outline: none;
25
+ }
@@ -0,0 +1,113 @@
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 _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/classCallCheck"));
9
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createClass"));
10
+ var _callSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/callSuper"));
11
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/inherits"));
12
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/defineProperty"));
13
+ var _react = _interopRequireDefault(require("react"));
14
+ var _reactI18next = require("react-i18next");
15
+ var _toast = _interopRequireDefault(require("../../../../components/toast"));
16
+ var _keyCodes = _interopRequireDefault(require("../../../../constants/key-codes"));
17
+ require("./index.css");
18
+ var Rename = /*#__PURE__*/function (_React$Component) {
19
+ function Rename(props) {
20
+ var _this;
21
+ (0, _classCallCheck2["default"])(this, Rename);
22
+ _this = (0, _callSuper2["default"])(this, Rename, [props]);
23
+ (0, _defineProperty2["default"])(_this, "registerEventHandle", function () {
24
+ document.addEventListener('click', _this.onOutClick);
25
+ });
26
+ (0, _defineProperty2["default"])(_this, "onOutClick", function (event) {
27
+ if (!_this.inputRef.current.contains(event.target)) {
28
+ _this.onRenameConfirm();
29
+ document.removeEventListener('click', _this.onOutClick);
30
+ }
31
+ });
32
+ (0, _defineProperty2["default"])(_this, "onClick", function (e) {
33
+ e.stopPropagation();
34
+ e.nativeEvent.stopImmediatePropagation();
35
+ _this.registerEventHandle();
36
+ });
37
+ (0, _defineProperty2["default"])(_this, "onChange", function (e) {
38
+ _this.setState({
39
+ name: e.target.value
40
+ });
41
+ });
42
+ (0, _defineProperty2["default"])(_this, "onKeyDown", function (e) {
43
+ if (e.keyCode === _keyCodes["default"].Enter) {
44
+ _this.onRenameConfirm(e);
45
+ } else if (e.keyCode === _keyCodes["default"].Esc) {
46
+ _this.onRenameCancel(e);
47
+ }
48
+ e.nativeEvent.stopImmediatePropagation();
49
+ });
50
+ (0, _defineProperty2["default"])(_this, "onRenameConfirm", function (e) {
51
+ e && e.nativeEvent.stopImmediatePropagation();
52
+ var newName = _this.state.name.trim();
53
+ if (newName === _this.props.name) {
54
+ _this.props.onRenameCancel();
55
+ return;
56
+ }
57
+ var _this$validateInput = _this.validateInput(),
58
+ isValid = _this$validateInput.isValid,
59
+ errMessage = _this$validateInput.errMessage;
60
+ if (!isValid) {
61
+ _toast["default"].danger(errMessage);
62
+ _this.props.onRenameCancel();
63
+ } else {
64
+ _this.props.onRenameConfirm(newName);
65
+ }
66
+ });
67
+ (0, _defineProperty2["default"])(_this, "onRenameCancel", function (e) {
68
+ document.removeEventListener('click', _this.onOutClick);
69
+ e.nativeEvent.stopImmediatePropagation();
70
+ _this.props.onRenameCancel();
71
+ });
72
+ (0, _defineProperty2["default"])(_this, "validateInput", function () {
73
+ var t = _this.props.t;
74
+ var newName = _this.state.name.trim();
75
+ var isValid = true;
76
+ var errMessage = '';
77
+ if (newName.indexOf('/') > -1) {
78
+ isValid = false;
79
+ // eslint-disable-next-line no-useless-concat
80
+ errMessage = t('Name should not include ' + '\'/\'' + '.');
81
+ return {
82
+ isValid: isValid,
83
+ errMessage: errMessage
84
+ };
85
+ }
86
+ return {
87
+ isValid: isValid,
88
+ errMessage: errMessage
89
+ };
90
+ });
91
+ _this.state = {
92
+ name: props.name
93
+ };
94
+ _this.inputRef = /*#__PURE__*/_react["default"].createRef();
95
+ return _this;
96
+ }
97
+ (0, _inherits2["default"])(Rename, _React$Component);
98
+ return (0, _createClass2["default"])(Rename, [{
99
+ key: "render",
100
+ value: function render() {
101
+ return /*#__PURE__*/_react["default"].createElement("div", {
102
+ className: "sdoc-file-view-rename"
103
+ }, /*#__PURE__*/_react["default"].createElement("input", {
104
+ ref: this.inputRef,
105
+ value: this.state.name,
106
+ onChange: this.onChange,
107
+ onKeyDown: this.onKeyDown,
108
+ onClick: this.onClick
109
+ }));
110
+ }
111
+ }]);
112
+ }(_react["default"].Component);
113
+ var _default = exports["default"] = (0, _reactI18next.withTranslation)('sdoc-editor')(Rename);
@@ -6,15 +6,12 @@
6
6
 
7
7
  .sdoc-file-view-container .sdoc-file-view-title {
8
8
  position: absolute;
9
- height: 44px;
10
- line-height: 44px;
11
- top: 0px;
9
+ height: 48px;
10
+ line-height: 48px;
11
+ top: 2px;
12
12
  left: 0px;
13
13
  z-index: 10;
14
- height: 44px;
15
- line-height: 44px;
16
14
  margin-left: 16px;
17
- cursor: pointer;
18
15
  }
19
16
 
20
17
  .sdoc-file-view-container .sdoc-file-view-content {
@@ -19,6 +19,7 @@ var _commonUtils = require("../../../../utils/common-utils");
19
19
  var _localStorageUtils = _interopRequireDefault(require("../../../../utils/local-storage-utils"));
20
20
  var _constants = require("../../../constants");
21
21
  var _helpers = require("../helpers");
22
+ var _rename = _interopRequireDefault(require("../rename"));
22
23
  require("./index.css");
23
24
  var FileView = function FileView(_ref) {
24
25
  var element = _ref.element,
@@ -154,6 +155,16 @@ var FileView = function FileView(_ref) {
154
155
  }
155
156
  return null;
156
157
  }, [data]);
158
+ var onNameCancel = (0, _react.useCallback)(function () {}, []);
159
+ var onRename = (0, _react.useCallback)(function (newName) {
160
+ var newData = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, element.data), {}, {
161
+ view_name: newName
162
+ });
163
+ (0, _helpers.updateFileView)(newData, editor, element);
164
+
165
+ // TODO:
166
+ // context.modifyView(data.view_id, { view_name: newName });
167
+ }, [editor, element]);
157
168
  return /*#__PURE__*/_react["default"].createElement("div", Object.assign({
158
169
  "data-id": element.id
159
170
  }, attributes, {
@@ -162,7 +173,11 @@ var FileView = function FileView(_ref) {
162
173
  suppressContentEditableWarning: true
163
174
  }), /*#__PURE__*/_react["default"].createElement("div", {
164
175
  className: "sdoc-file-view-title"
165
- }, data.view_name), /*#__PURE__*/_react["default"].createElement("div", {
176
+ }, /*#__PURE__*/_react["default"].createElement(_rename["default"], {
177
+ name: data.view_name,
178
+ onRenameConfirm: onRename,
179
+ onRenameCancel: onNameCancel
180
+ })), /*#__PURE__*/_react["default"].createElement("div", {
166
181
  className: (0, _classnames["default"])('sdoc-file-view-content', {
167
182
  'is-selected': isSelected
168
183
  }),
@@ -6,6 +6,8 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.renderListLic = exports.renderListItem = exports.renderList = void 0;
8
8
  var _react = _interopRequireDefault(require("react"));
9
+ var _slate = require("@seafile/slate");
10
+ var _slateReact = require("@seafile/slate-react");
9
11
  var _classnames = _interopRequireDefault(require("classnames"));
10
12
  var _constants = require("../../constants");
11
13
  var renderList = exports.renderList = function renderList(props, editor) {
@@ -22,6 +24,7 @@ var renderListItem = exports.renderListItem = function renderListItem(props, edi
22
24
  var attributes = props.attributes,
23
25
  children = props.children,
24
26
  element = props.element;
27
+ var collapsed = !!element.collapsed;
25
28
  var align = element.children[0].align;
26
29
  var className = '';
27
30
  switch (align) {
@@ -37,13 +40,34 @@ var renderListItem = exports.renderListItem = function renderListItem(props, edi
37
40
  var isBold = element.children[0].children.every(function (item) {
38
41
  return item.bold === true;
39
42
  });
43
+ var togglePrefix = function togglePrefix(e) {
44
+ e.preventDefault();
45
+ e.stopPropagation();
46
+ var path = _slateReact.ReactEditor.findPath(editor, element);
47
+ _slate.Transforms.setNodes(editor, {
48
+ collapsed: !collapsed
49
+ }, {
50
+ at: path
51
+ });
52
+ };
53
+ var newChildren = !collapsed ? children : children[0];
40
54
  return /*#__PURE__*/_react["default"].createElement("li", Object.assign({
41
55
  "data-id": element.id
42
56
  }, attributes, {
43
57
  className: (0, _classnames["default"])(className, {
44
58
  'sdoc-li-bold': isBold
45
59
  })
46
- }), children);
60
+ }), element.children.length > 1 && /*#__PURE__*/_react["default"].createElement("span", {
61
+ className: "sdoc-li-control",
62
+ contentEditable: "false"
63
+ }, /*#__PURE__*/_react["default"].createElement("span", {
64
+ className: (0, _classnames["default"])('sdoc-li-prefix', 'sdocfont', !collapsed ? 'sdoc-arrow-down' : 'sdoc-next-page'),
65
+ onMouseDown: togglePrefix
66
+ }), /*#__PURE__*/_react["default"].createElement("span", {
67
+ className: "sdoc-li-divider"
68
+ })), /*#__PURE__*/_react["default"].createElement("span", {
69
+ className: "sdoc-li-content"
70
+ }, newChildren));
47
71
  };
48
72
  var renderListLic = exports.renderListLic = function renderListLic(props, editor) {
49
73
  var attributes = props.attributes,
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.videoFileIcon = exports.parseVideoLink = exports.onCopyVideoNode = exports.isInsertVideoMenuDisabled = exports.insertVideo = exports.getVideoURL = exports.generateVideoNode = exports.formatFileSize = void 0;
7
+ exports.videoFileIcon = exports.updateVideo = 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");
@@ -81,7 +81,7 @@ var parseVideoLink = exports.parseVideoLink = function parseVideoLink(url) {
81
81
  // Bilibili url conversion
82
82
  if (url.includes('bilibili.com')) {
83
83
  var _vidMatch = url.match(/\/video\/(BV[0-9A-Za-z]+)/);
84
- var _videoUrl2 = _vidMatch !== null && _vidMatch !== void 0 && _vidMatch[1] ? "https://player.bilibili.com/player.html?bvid=".concat(_vidMatch[1]) : false;
84
+ var _videoUrl2 = _vidMatch !== null && _vidMatch !== void 0 && _vidMatch[1] ? "https://player.bilibili.com/player.html?bvid=".concat(_vidMatch[1], "&autoplay=0") : false;
85
85
  return _videoUrl2;
86
86
  }
87
87
 
@@ -219,4 +219,15 @@ var onCopyVideoNode = exports.onCopyVideoNode = function onCopyVideoNode(editor,
219
219
  });
220
220
  }
221
221
  });
222
+ };
223
+ var updateVideo = exports.updateVideo = function updateVideo(editor, data, id) {
224
+ _slate.Transforms.setNodes(editor, {
225
+ data: data
226
+ }, {
227
+ match: function match(n) {
228
+ return (0, _core.getNodeType)(n) === _constants.VIDEO && n.id === id;
229
+ },
230
+ at: editor.selection,
231
+ voids: true
232
+ });
222
233
  };
@@ -35,16 +35,19 @@
35
35
  }
36
36
 
37
37
  @keyframes spin {
38
- 0% { transform: rotate(0deg); }
39
- 100% { transform: rotate(360deg); }
40
- }
38
+ 0% {
39
+ transform: rotate(0deg);
40
+ }
41
41
 
42
- .sdoc-video-wrapper{
43
- display: flex;
42
+ 100% {
43
+ transform: rotate(360deg);
44
+ }
44
45
  }
46
+
45
47
  .sdoc-video-wrapper {
46
48
  position: relative;
47
49
  display: flex;
50
+ justify-content: center;
48
51
  }
49
52
 
50
53
  .sdoc-video-wrapper .sdoc-video-inner {
@@ -54,9 +57,10 @@
54
57
  display: flex;
55
58
  margin-top: 5px;
56
59
  margin-bottom: 10px;
60
+ max-width: 100%;
57
61
  }
58
62
 
59
- .sdoc-video-inner .sdoc-video-element{
63
+ .sdoc-video-inner .sdoc-video-element {
60
64
  width: 100%;
61
65
  }
62
66
 
@@ -66,8 +70,10 @@
66
70
 
67
71
  .sdoc-video-inner .sdoc-video-play {
68
72
  position: absolute;
69
- top: 36.75%;
73
+ top: 50%;
74
+ transform: translateY(-50%);
70
75
  left: 46.3%;
71
76
  font-size: 48px;
72
77
  pointer-events: none;
78
+ color: #666666;
73
79
  }
@@ -19,11 +19,15 @@ var _helpers = require("./helpers");
19
19
  var _hoverMenu = _interopRequireDefault(require("./hover-menu"));
20
20
  require("./index.css");
21
21
  var Video = function Video(_ref) {
22
- var _videoStates$element$;
22
+ var _videoStates$element$, _videoRef$current;
23
23
  var element = _ref.element,
24
24
  editor = _ref.editor;
25
25
  var data = element.data;
26
26
  var videoRef = (0, _react.useRef)(null);
27
+ var wrapperRef = (0, _react.useRef)(null);
28
+ var resizerRef = (0, _react.useRef)(null);
29
+ var resizeStartXRef = (0, _react.useRef)(0);
30
+ var resizeStartWidthRef = (0, _react.useRef)(0);
27
31
  var _useState = (0, _react.useState)(false),
28
32
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
29
33
  isLoaded = _useState2[0],
@@ -40,11 +44,21 @@ var Video = function Video(_ref) {
40
44
  _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
41
45
  menuPosition = _useState8[0],
42
46
  setMenuPosition = _useState8[1];
47
+ var _useState9 = (0, _react.useState)(false),
48
+ _useState0 = (0, _slicedToArray2["default"])(_useState9, 2),
49
+ isResizing = _useState0[0],
50
+ setIsResizing = _useState0[1];
51
+ var _useState1 = (0, _react.useState)(null),
52
+ _useState10 = (0, _slicedToArray2["default"])(_useState1, 2),
53
+ movingWidth = _useState10[0],
54
+ setMovingWidth = _useState10[1];
43
55
  var scrollRef = (0, _useScrollContext.useScrollContext)();
44
56
  var videoName = (data === null || data === void 0 ? void 0 : data.name) || (data === null || data === void 0 ? void 0 : data.src);
45
57
  var videoSize = data === null || data === void 0 ? void 0 : data.size;
46
58
  var isEmbeddableLink = data === null || data === void 0 ? void 0 : data.is_embeddable_link;
47
59
  var readOnly = (0, _slateReact.useReadOnly)();
60
+ var _useTranslation = (0, _reactI18next.useTranslation)('sdoc-editor'),
61
+ t = _useTranslation.t;
48
62
  var handlePlay = function handlePlay() {
49
63
  setVideoStates(function (prev) {
50
64
  return (0, _objectSpread4["default"])((0, _objectSpread4["default"])({}, prev), {}, (0, _defineProperty2["default"])({}, element.id, false));
@@ -65,12 +79,6 @@ var Video = function Video(_ref) {
65
79
  _slate.Transforms.select(editor, path);
66
80
  setIsSelected(true);
67
81
  }, [editor, element]);
68
- var onClickOutside = (0, _react.useCallback)(function (e) {
69
- e.stopPropagation();
70
- if (videoRef.current && !videoRef.current.contains(e.target)) {
71
- setIsSelected(false);
72
- }
73
- }, []);
74
82
  var setPosition = (0, _react.useCallback)(function (elem) {
75
83
  if (elem) {
76
84
  var _elem$getBoundingClie = elem.getBoundingClientRect(),
@@ -90,6 +98,81 @@ var Video = function Video(_ref) {
90
98
  setPosition(videoRef.current);
91
99
  // eslint-disable-next-line react-hooks/exhaustive-deps
92
100
  }, []);
101
+ var getIframePointerEvents = (0, _react.useCallback)(function () {
102
+ if (readOnly) return 'auto';
103
+ if (isResizing) return 'none';
104
+ return isSelected ? 'auto' : 'none';
105
+ }, [isResizing, isSelected, readOnly]);
106
+ var getVideoWidthStyle = (0, _react.useCallback)(function () {
107
+ var videoWidth = movingWidth || element.data.width || '100%';
108
+ return {
109
+ width: videoWidth
110
+ };
111
+ }, [element.data.width, movingWidth]);
112
+ var registerEvent = (0, _react.useCallback)(function (eventList) {
113
+ eventList.forEach(function (element) {
114
+ document.addEventListener(element.eventName, element.event);
115
+ });
116
+ }, []);
117
+ var unregisterEvent = (0, _react.useCallback)(function (eventList) {
118
+ eventList.forEach(function (element) {
119
+ document.removeEventListener(element.eventName, element.event);
120
+ });
121
+ }, []);
122
+ var onMouseMove = (0, _react.useCallback)(function (event) {
123
+ var deltaX = event.clientX - resizeStartXRef.current;
124
+ var nextWidth = resizeStartWidthRef.current + deltaX;
125
+ if (nextWidth < 150) return;
126
+ if (wrapperRef.current) {
127
+ wrapperRef.current.style.width = "".concat(nextWidth, "px");
128
+ }
129
+ setMovingWidth(nextWidth);
130
+ }, []);
131
+ var onResizeEnd = (0, _react.useCallback)(function (event) {
132
+ var _wrapperRef$current;
133
+ event === null || event === void 0 ? void 0 : event.preventDefault();
134
+ event === null || event === void 0 ? void 0 : event.stopPropagation();
135
+ unregisterEvent([{
136
+ eventName: 'mousemove',
137
+ event: onMouseMove
138
+ }, {
139
+ eventName: 'mouseup',
140
+ event: onResizeEnd
141
+ }]);
142
+ var finalWidth = movingWidth || ((_wrapperRef$current = wrapperRef.current) === null || _wrapperRef$current === void 0 ? void 0 : _wrapperRef$current.getBoundingClientRect().width);
143
+ var newData = (0, _objectSpread4["default"])((0, _objectSpread4["default"])({}, element.data), {}, {
144
+ width: finalWidth
145
+ });
146
+ (0, _helpers.updateVideo)(editor, newData, element.id);
147
+ setIsResizing(false);
148
+ setTimeout(function () {
149
+ return setPosition(wrapperRef.current);
150
+ }, 0);
151
+ // eslint-disable-next-line react-hooks/exhaustive-deps
152
+ }, [editor, element.id, movingWidth, onMouseMove, registerEvent]);
153
+ var onResizeStart = (0, _react.useCallback)(function (event) {
154
+ var _wrapperRef$current2;
155
+ event.preventDefault();
156
+ event.stopPropagation();
157
+ setMenuPosition(null);
158
+ setIsResizing(true);
159
+ resizeStartXRef.current = event.clientX;
160
+ resizeStartWidthRef.current = ((_wrapperRef$current2 = wrapperRef.current) === null || _wrapperRef$current2 === void 0 ? void 0 : _wrapperRef$current2.getBoundingClientRect().width) || element.data.width || 0;
161
+ registerEvent([{
162
+ eventName: 'mousemove',
163
+ event: onMouseMove
164
+ }, {
165
+ eventName: 'mouseup',
166
+ event: onResizeEnd
167
+ }]);
168
+ }, [element.data.width, onMouseMove, onResizeEnd, registerEvent]);
169
+ var onClickOutside = (0, _react.useCallback)(function (e) {
170
+ e.stopPropagation();
171
+ if (wrapperRef.current && !wrapperRef.current.contains(e.target)) {
172
+ onResizeEnd();
173
+ setIsSelected(false);
174
+ }
175
+ }, [onResizeEnd]);
93
176
  (0, _react.useEffect)(function () {
94
177
  var videoElement = videoRef.current;
95
178
  if (videoElement) {
@@ -157,26 +240,28 @@ var Video = function Video(_ref) {
157
240
  "data-id": element.id,
158
241
  className: "sdoc-video-wrapper",
159
242
  style: {
160
- display: isLoaded ? 'block' : 'none'
243
+ display: isLoaded ? 'flex' : 'none'
161
244
  }
162
245
  }, /*#__PURE__*/_react["default"].createElement("div", {
163
246
  className: "sdoc-video-inner",
164
- style: {
247
+ ref: wrapperRef,
248
+ style: (0, _objectSpread4["default"])({
165
249
  visibility: isLoaded ? 'visible' : 'hidden'
166
- }
250
+ }, getVideoWidthStyle()),
251
+ onClick: onClickVideo
167
252
  }, !isEmbeddableLink && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("video", {
168
253
  className: "sdoc-video-element",
169
254
  ref: videoRef,
170
255
  src: (0, _helpers.getVideoURL)(data, editor),
171
256
  controls: true,
172
257
  controlsList: readOnly ? 'nofullscreen' : undefined,
173
- onClick: onClickVideo,
174
258
  draggable: false,
175
259
  onPlay: handlePlay,
176
260
  onPause: handlePause,
177
261
  onCanPlay: handleVideoLoad,
178
262
  style: {
179
- boxShadow: isSelected ? '0 0 0 2px #007bff' : 'none'
263
+ boxShadow: isSelected ? '0 0 0 2px #007bff' : 'none',
264
+ pointerEvents: getIframePointerEvents()
180
265
  }
181
266
  }), /*#__PURE__*/_react["default"].createElement("div", {
182
267
  className: "sdoc-video-play sdocfont sdoc-play",
@@ -186,17 +271,25 @@ var Video = function Video(_ref) {
186
271
  contentEditable: "false"
187
272
  })), isEmbeddableLink && /*#__PURE__*/_react["default"].createElement("iframe", {
188
273
  className: "sdoc-video-element",
274
+ ref: videoRef,
189
275
  title: data.src,
190
276
  allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",
191
277
  allowFullScreen: true,
192
278
  src: (0, _helpers.getVideoURL)(data, editor),
193
279
  onLoad: handleVideoLoad,
194
280
  style: {
195
- width: '100%',
196
281
  height: '100%',
197
- border: 'none'
282
+ border: 'none',
283
+ boxShadow: isSelected ? '0 0 0 2px #007bff' : 'none',
284
+ pointerEvents: getIframePointerEvents()
198
285
  }
199
- }))), isSelected && !isEmbeddableLink && !readOnly && editor.selection && _slate.Range.isCollapsed(editor.selection) && /*#__PURE__*/_react["default"].createElement(_hoverMenu["default"], {
286
+ }), !readOnly && isSelected && /*#__PURE__*/_react["default"].createElement("span", {
287
+ className: "image-resizer",
288
+ ref: resizerRef,
289
+ onMouseDown: onResizeStart
290
+ }), isResizing && /*#__PURE__*/_react["default"].createElement("span", {
291
+ className: "image-size"
292
+ }, /*#__PURE__*/_react["default"].createElement("span", null, t('Width'), ':', parseInt(movingWidth || ((_videoRef$current = videoRef.current) === null || _videoRef$current === void 0 ? void 0 : _videoRef$current.clientWidth))), /*#__PURE__*/_react["default"].createElement("span", null, "\xA0\xA0"), /*#__PURE__*/_react["default"].createElement("span", null, t('Height'), ':', videoRef.current.clientHeight)))), isSelected && !isEmbeddableLink && !readOnly && editor.selection && _slate.Range.isCollapsed(editor.selection) && /*#__PURE__*/_react["default"].createElement(_hoverMenu["default"], {
200
293
  editor: editor,
201
294
  menuPosition: menuPosition,
202
295
  element: element,
@@ -210,7 +303,7 @@ function renderVideo(props, editor) {
210
303
  children = props.children,
211
304
  attributes = props.attributes;
212
305
  return /*#__PURE__*/_react["default"].createElement("div", Object.assign({
213
- className: "sdoc-video-wrapper"
306
+ className: "sdoc-video-outer-wrapper"
214
307
  }, attributes, {
215
308
  contentEditable: "true",
216
309
  suppressContentEditableWarning: true
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/sdoc-editor",
3
- "version": "3.0.38",
3
+ "version": "3.0.40",
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": "c89a3c31a2f1885ca2f237d98f70affbd8981102"
75
+ "gitHead": "9b616f58a19029c6a345bcbb262068993e9b31a2"
76
76
  }