@seafile/sdoc-editor 2.0.146 → 2.0.148
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/api/sdoc-server-api.js +11 -0
- package/dist/api/seafile-api.js +6 -0
- package/dist/comment/components/editor-comment.js +2 -2
- package/dist/comment/utils/notification-utils.js +1 -2
- package/dist/constants/index.js +2 -1
- package/dist/context.js +10 -0
- package/dist/extension/commons/file-link-preview/helper.js +24 -0
- package/dist/extension/commons/file-link-preview/index.css +148 -0
- package/dist/extension/commons/file-link-preview/index.js +159 -0
- package/dist/extension/index.js +4 -2
- package/dist/extension/plugins/callout/render-elem/index.js +24 -4
- package/dist/extension/plugins/code-block/render-elem.js +9 -11
- package/dist/extension/plugins/file-link/render-elem.js +22 -0
- package/dist/extension/plugins/image/render-elem.js +28 -6
- package/dist/extension/plugins/link/render-elem.js +21 -0
- package/dist/extension/plugins/quick-insert/render-elem.js +22 -0
- package/dist/extension/plugins/sdoc-link/hover-menu/index.js +41 -10
- package/dist/extension/plugins/sdoc-link/render/render-elem.js +22 -0
- package/dist/extension/plugins/whiteboard/render-elem.js +26 -6
- package/dist/hooks/use-plugins.js +9 -1
- package/dist/right-panel/index.js +30 -4
- package/dist/utils/default-mode.js +1 -1
- package/package.json +3 -3
|
@@ -37,6 +37,17 @@ var SDocServerApi = /*#__PURE__*/function () {
|
|
|
37
37
|
}
|
|
38
38
|
});
|
|
39
39
|
}
|
|
40
|
+
}, {
|
|
41
|
+
key: "getFileContentByDocUuidAndAccessToken",
|
|
42
|
+
value: function getFileContentByDocUuidAndAccessToken(docUuid, access_token) {
|
|
43
|
+
var server = this.server;
|
|
44
|
+
var url = "".concat(server, "/api/v1/docs/").concat(docUuid, "/");
|
|
45
|
+
return _axios["default"].get(url, {
|
|
46
|
+
headers: {
|
|
47
|
+
Authorization: "Token ".concat(access_token)
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
}
|
|
40
51
|
}, {
|
|
41
52
|
key: "normalizeSdocContent",
|
|
42
53
|
value: function normalizeSdocContent() {
|
package/dist/api/seafile-api.js
CHANGED
|
@@ -299,6 +299,12 @@ var SeafileAPI = /*#__PURE__*/function () {
|
|
|
299
299
|
form.append('file_uuid', docUuid);
|
|
300
300
|
return this.req.post(url, form);
|
|
301
301
|
}
|
|
302
|
+
}, {
|
|
303
|
+
key: "getTokenByDocUuid",
|
|
304
|
+
value: function getTokenByDocUuid(docUuid) {
|
|
305
|
+
var url = "/api/v2.1/seadoc/access-token-by-uuid/".concat(docUuid, "/");
|
|
306
|
+
return this.req.get(url);
|
|
307
|
+
}
|
|
302
308
|
}]);
|
|
303
309
|
}();
|
|
304
310
|
var _default = exports["default"] = SeafileAPI;
|
|
@@ -94,9 +94,9 @@ var EditorComment = function EditorComment(_ref) {
|
|
|
94
94
|
}, [editor, element_comments_map, hiddenComment]);
|
|
95
95
|
(0, _react.useEffect)(function () {
|
|
96
96
|
var handleHoverContextComment = function handleHoverContextComment(event) {
|
|
97
|
-
var _parentDom$className;
|
|
98
97
|
var parentDom = event.target.parentElement;
|
|
99
|
-
|
|
98
|
+
var clazzNames = (parentDom === null || parentDom === void 0 ? void 0 : parentDom.className) || [];
|
|
99
|
+
if (clazzNames.includes('sdoc_comment_')) {
|
|
100
100
|
var isHover = event.type === 'mouseover';
|
|
101
101
|
var matchedAttributes = parentDom.className.split(' ').filter(function (cls) {
|
|
102
102
|
return cls.startsWith('sdoc_comment_');
|
|
@@ -16,8 +16,7 @@ var notify = function notify($title, $options) {
|
|
|
16
16
|
// auto clear notifications
|
|
17
17
|
var timer = setTimeout(notification.close.bind(notification), 5000);
|
|
18
18
|
notification.onshow = function (event) {
|
|
19
|
-
var
|
|
20
|
-
mediaUrl = _context$getSetting.mediaUrl;
|
|
19
|
+
var mediaUrl = _context["default"].getSetting('mediaUrl');
|
|
21
20
|
var newAudioElement = document.createElement('audio');
|
|
22
21
|
newAudioElement.setAttribute('src', "".concat(mediaUrl, "audio/classic.mp3"));
|
|
23
22
|
newAudioElement.setAttribute('autoplay', 'autoplay');
|
package/dist/constants/index.js
CHANGED
|
@@ -76,7 +76,8 @@ var INTERNAL_EVENT = exports.INTERNAL_EVENT = {
|
|
|
76
76
|
CREATE_WIKI_PAGE: 'create_wiki_page',
|
|
77
77
|
IMAGE_COLUMN_TOGGLE: 'Image_column_toggle',
|
|
78
78
|
CREATE_WHITEBOARD_FILE: 'create_whiteboard_file',
|
|
79
|
-
GENERATE_EXDRAW_READ_ONLY_LINK: 'generate_exdraw_read_only_link'
|
|
79
|
+
GENERATE_EXDRAW_READ_ONLY_LINK: 'generate_exdraw_read_only_link',
|
|
80
|
+
TRANSFER_PREVIEW_FILE_ID: 'transfer_preview_file_id'
|
|
80
81
|
};
|
|
81
82
|
var PAGE_EDIT_AREA_WIDTH = exports.PAGE_EDIT_AREA_WIDTH = 672; // 672 = 794 - 2[borderLeft + borderRight] - 120[paddingLeft + paddingRight]
|
|
82
83
|
var COMMENT_EDITOR_EDIT_AREA_WIDTH = exports.COMMENT_EDITOR_EDIT_AREA_WIDTH = 364;
|
package/dist/context.js
CHANGED
|
@@ -129,6 +129,11 @@ var Context = /*#__PURE__*/function () {
|
|
|
129
129
|
return res;
|
|
130
130
|
});
|
|
131
131
|
}
|
|
132
|
+
}, {
|
|
133
|
+
key: "getFileContentByDocUuidAndAccessToken",
|
|
134
|
+
value: function getFileContentByDocUuidAndAccessToken(docUuid, access_token) {
|
|
135
|
+
return this.sdocServerApi.getFileContentByDocUuidAndAccessToken(docUuid, access_token);
|
|
136
|
+
}
|
|
132
137
|
}, {
|
|
133
138
|
key: "normalizeSdocContent",
|
|
134
139
|
value: function normalizeSdocContent() {
|
|
@@ -374,6 +379,11 @@ var Context = /*#__PURE__*/function () {
|
|
|
374
379
|
if (!this.config) return;
|
|
375
380
|
this.config['docUuid'] = docUuid;
|
|
376
381
|
}
|
|
382
|
+
}, {
|
|
383
|
+
key: "getTokenByDocUuid",
|
|
384
|
+
value: function getTokenByDocUuid(docUuid) {
|
|
385
|
+
return this.api.getTokenByDocUuid(docUuid);
|
|
386
|
+
}
|
|
377
387
|
}]);
|
|
378
388
|
}();
|
|
379
389
|
var context = new Context();
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.saveSdocToken = exports.getSdocToken = void 0;
|
|
7
|
+
var saveSdocToken = exports.saveSdocToken = function saveSdocToken(docUuid, token) {
|
|
8
|
+
var now = Date.now();
|
|
9
|
+
// 3 days is the valid time token set by back-end
|
|
10
|
+
var expireTime = now + 3 * 24 * 60 * 60 * 1000;
|
|
11
|
+
localStorage.setItem("access_token_".concat(docUuid), token);
|
|
12
|
+
localStorage.setItem("access_token_".concat(docUuid, "_expire"), expireTime.toString());
|
|
13
|
+
};
|
|
14
|
+
var getSdocToken = exports.getSdocToken = function getSdocToken(docUuid) {
|
|
15
|
+
var token = localStorage.getItem("access_token_".concat(docUuid));
|
|
16
|
+
var expire = localStorage.getItem("access_token_".concat(docUuid, "_expire"));
|
|
17
|
+
if (!token || !expire) return null;
|
|
18
|
+
if (Date.now() > parseInt(expire)) {
|
|
19
|
+
localStorage.removeItem("access_token_".concat(docUuid));
|
|
20
|
+
localStorage.removeItem("access_token_".concat(docUuid, "_expire"));
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
return token;
|
|
24
|
+
};
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
.sdoc-file-preview-drawer {
|
|
2
|
+
width: 100%;
|
|
3
|
+
height: 100%;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.sdoc-file-preview-drawer .file-preview-panel-wrapper {
|
|
7
|
+
/* 100vh - toolbar height*/
|
|
8
|
+
height: calc(100vh - 93px);
|
|
9
|
+
display: flex;
|
|
10
|
+
flex-direction: column;
|
|
11
|
+
background: #fff;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.sdoc-file-preview-drawer .file-preview-panel-header {
|
|
15
|
+
padding: 0 16px;
|
|
16
|
+
height: 46px;
|
|
17
|
+
display: flex;
|
|
18
|
+
align-items: center;
|
|
19
|
+
justify-content: space-between;
|
|
20
|
+
border-bottom: 1px solid #EAECEF;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.sdoc-file-preview-drawer .file-preview-panel-header .file-preview-panel-header-left {
|
|
24
|
+
display: flex;
|
|
25
|
+
align-items: center;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.sdoc-file-preview-drawer .file-preview-panel-header-right .file-preview-full-screen {
|
|
29
|
+
align-items: center;
|
|
30
|
+
cursor: pointer;
|
|
31
|
+
display: flex;
|
|
32
|
+
height: 24px;
|
|
33
|
+
justify-content: center;
|
|
34
|
+
width: 24px;
|
|
35
|
+
margin-right: 8px;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.sdoc-file-preview-drawer .file-preview-panel-header-right .file-preview-full-screen:hover {
|
|
39
|
+
border-radius: 3px;
|
|
40
|
+
background-color: #EFEFEF;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.sdoc-file-preview-drawer .file-preview-panel-header-right .file-preview-full-screen .icon-font {
|
|
44
|
+
color: #999;
|
|
45
|
+
font-size: 14px;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
.sdoc-file-preview-drawer .file-preview-panel-header .file-preview-panel-header-left .detail-header-icon-container {
|
|
50
|
+
align-items: center;
|
|
51
|
+
display: flex;
|
|
52
|
+
flex-shrink: 0;
|
|
53
|
+
height: 32px;
|
|
54
|
+
justify-content: center;
|
|
55
|
+
width: 32px
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.sdoc-file-preview-drawer .file-preview-panel-header .file-preview-panel-header-left .name.ellipsis {
|
|
59
|
+
color: var(--bs-body-color);
|
|
60
|
+
font-size: 1rem;
|
|
61
|
+
line-height: 1.5rem;
|
|
62
|
+
margin: 0 .5rem 0 6px;
|
|
63
|
+
vertical-align: middle;
|
|
64
|
+
white-space: nowrap;
|
|
65
|
+
overflow: hidden;
|
|
66
|
+
text-overflow: ellipsis;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.sdoc-file-preview-drawer .file-preview-panel-header .file-preview-panel-header-left .sdoc-file-preview-drawer .file-preview-panel-header .file-preview-panel-header-left .title {
|
|
70
|
+
color: #212529;
|
|
71
|
+
font-size: 16px;
|
|
72
|
+
font-weight: 500;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.sdoc-file-preview-drawer .file-preview-panel-header .file-preview-panel-header-right {
|
|
76
|
+
display: flex;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.sdoc-file-preview-drawer .file-preview-panel-body {
|
|
80
|
+
display: flex;
|
|
81
|
+
flex: 1 1;
|
|
82
|
+
flex-direction: column;
|
|
83
|
+
overflow-x: hidden;
|
|
84
|
+
overflow-y: auto;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.file-preview-panel-body .file-preview-container {
|
|
88
|
+
overflow: auto;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.sdoc-file-preview-drawer .file-preview-panel-body .sdoc-article-container {
|
|
92
|
+
width: 100% !important;
|
|
93
|
+
padding: 0px;
|
|
94
|
+
pointer-events: none;
|
|
95
|
+
user-select: auto;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.file-preview-panel-body .sdoc-article-container .article.sdoc-editor__article {
|
|
99
|
+
border: none;
|
|
100
|
+
box-shadow: none;
|
|
101
|
+
padding: 8px;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.file-preview-panel-body .file-preview-container:fullscreen .sdoc-editor__article {
|
|
105
|
+
padding: calc(100vw / 794 * 40) calc(100vw / 794 * 60) !important;
|
|
106
|
+
font-size: calc(100vw / 794 * 14.7) !important;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.file-preview-panel-body .file-preview-container:fullscreen .sdoc-checkbox-input {
|
|
110
|
+
width: calc(100vw / 794 * 13) !important;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
.file-preview-panel-body .file-preview-container:fullscreen .sdoc-code-block-pre {
|
|
114
|
+
font-size: calc(100vw / 794 * 13.3) !important;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.file-preview-panel-body .file-preview-container:fullscreen .sdoc-header-title {
|
|
118
|
+
font-size: calc(100vw / 794 * 33.7) !important;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.file-preview-panel-body .file-preview-container:fullscreen .sdoc-header-subtitle {
|
|
122
|
+
font-size: calc(100vw / 794 * 20) !important;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.file-preview-panel-body .file-preview-container:fullscreen .sdoc-header-1 {
|
|
126
|
+
font-size: calc(100vw / 794 * 26.7) !important;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
.file-preview-panel-body .file-preview-container:fullscreen .sdoc-header-2 {
|
|
130
|
+
font-size: calc(100vw / 794 * 21.3) !important;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.file-preview-panel-body .file-preview-container:fullscreen .sdoc-header-3 {
|
|
134
|
+
font-size: calc(100vw / 794 * 18.7) !important;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.file-preview-panel-body .file-preview-container:fullscreen .sdoc-header-4 {
|
|
138
|
+
font-size: calc(100vw / 794 * 16) !important;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
.file-preview-panel-body .file-preview-container:fullscreen .sdoc-header-5,
|
|
142
|
+
.file-preview-panel-body .file-preview-container:fullscreen .sdoc-header-6 {
|
|
143
|
+
font-size: calc(100vw / 794 * 14.7) !important;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
.file-preview-panel-body .sdoc-article-container .sdoc-table-wrapper {
|
|
147
|
+
max-width: none !important;
|
|
148
|
+
}
|
|
@@ -0,0 +1,159 @@
|
|
|
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 _regenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/regenerator"));
|
|
10
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/asyncToGenerator"));
|
|
11
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
|
|
12
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
13
|
+
var _slate = require("@seafile/slate");
|
|
14
|
+
var _slateReact = require("@seafile/slate-react");
|
|
15
|
+
var _fileLoading = _interopRequireDefault(require("../../../components/file-loading"));
|
|
16
|
+
var _context2 = _interopRequireDefault(require("../../../context"));
|
|
17
|
+
var _usePlugins2 = require("../../../hooks/use-plugins");
|
|
18
|
+
var _useScrollContext = require("../../../hooks/use-scroll-context");
|
|
19
|
+
var _readonlyArticle = _interopRequireDefault(require("../../../views/readonly-article"));
|
|
20
|
+
var _helpers = require("../select-file-dialog/helpers");
|
|
21
|
+
var _helper = require("./helper");
|
|
22
|
+
require("./index.css");
|
|
23
|
+
var FilePreviewWrapper = function FilePreviewWrapper(_ref) {
|
|
24
|
+
var docUuid = _ref.docUuid,
|
|
25
|
+
title = _ref.title;
|
|
26
|
+
var _useState = (0, _react.useState)(null),
|
|
27
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
28
|
+
fileContent = _useState2[0],
|
|
29
|
+
setFileContent = _useState2[1];
|
|
30
|
+
var _useState3 = (0, _react.useState)(null),
|
|
31
|
+
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
32
|
+
Component = _useState4[0],
|
|
33
|
+
setComponent = _useState4[1];
|
|
34
|
+
var _useState5 = (0, _react.useState)(true),
|
|
35
|
+
_useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
|
|
36
|
+
isReloading = _useState6[0],
|
|
37
|
+
setIsReloading = _useState6[1];
|
|
38
|
+
var readonlyEditor = (0, _react.useMemo)(function () {
|
|
39
|
+
return (0, _slateReact.withReact)((0, _slate.createEditor)());
|
|
40
|
+
}, [docUuid]);
|
|
41
|
+
var _usePlugins = (0, _usePlugins2.usePlugins)(),
|
|
42
|
+
closePlugin = _usePlugins.closePlugin;
|
|
43
|
+
var filePreviewRef = (0, _react.useRef)();
|
|
44
|
+
var fileTypeIcon = (0, _helpers.parcelFileTypeIcon)(title);
|
|
45
|
+
var openFullscreen = function openFullscreen() {
|
|
46
|
+
if (filePreviewRef.current.requestFullscreen) {
|
|
47
|
+
// Chrome
|
|
48
|
+
filePreviewRef.current.requestFullscreen();
|
|
49
|
+
} else if (filePreviewRef.current.webkitRequestFullscreen) {
|
|
50
|
+
// Safari
|
|
51
|
+
filePreviewRef.current.webkitRequestFullscreen();
|
|
52
|
+
} else if (filePreviewRef.current.msRequestFullscreen) {
|
|
53
|
+
// IE11
|
|
54
|
+
filePreviewRef.current.msRequestFullscreen();
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
(0, _react.useEffect)(function () {
|
|
58
|
+
var fetchFileContent = /*#__PURE__*/function () {
|
|
59
|
+
var _ref2 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/(0, _regenerator2["default"])().m(function _callee() {
|
|
60
|
+
var token, tokenRes, result, _t;
|
|
61
|
+
return (0, _regenerator2["default"])().w(function (_context) {
|
|
62
|
+
while (1) switch (_context.p = _context.n) {
|
|
63
|
+
case 0:
|
|
64
|
+
_context.p = 0;
|
|
65
|
+
token = (0, _helper.getSdocToken)(docUuid);
|
|
66
|
+
if (token) {
|
|
67
|
+
_context.n = 2;
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
_context.n = 1;
|
|
71
|
+
return _context2["default"].getTokenByDocUuid(docUuid);
|
|
72
|
+
case 1:
|
|
73
|
+
tokenRes = _context.v;
|
|
74
|
+
(0, _helper.saveSdocToken)(docUuid, tokenRes.data.access_token);
|
|
75
|
+
token = tokenRes.data.access_token;
|
|
76
|
+
case 2:
|
|
77
|
+
_context.n = 3;
|
|
78
|
+
return _context2["default"].getFileContentByDocUuidAndAccessToken(docUuid, token);
|
|
79
|
+
case 3:
|
|
80
|
+
result = _context.v;
|
|
81
|
+
setIsReloading(false);
|
|
82
|
+
setFileContent(result.data.elements);
|
|
83
|
+
setComponent(function () {
|
|
84
|
+
return _readonlyArticle["default"];
|
|
85
|
+
});
|
|
86
|
+
_context.n = 5;
|
|
87
|
+
break;
|
|
88
|
+
case 4:
|
|
89
|
+
_context.p = 4;
|
|
90
|
+
_t = _context.v;
|
|
91
|
+
console.log(_t);
|
|
92
|
+
setFileContent(null);
|
|
93
|
+
setIsReloading(false);
|
|
94
|
+
case 5:
|
|
95
|
+
return _context.a(2);
|
|
96
|
+
}
|
|
97
|
+
}, _callee, null, [[0, 4]]);
|
|
98
|
+
}));
|
|
99
|
+
return function fetchFileContent() {
|
|
100
|
+
return _ref2.apply(this, arguments);
|
|
101
|
+
};
|
|
102
|
+
}();
|
|
103
|
+
if (docUuid) {
|
|
104
|
+
setIsReloading(true);
|
|
105
|
+
fetchFileContent();
|
|
106
|
+
}
|
|
107
|
+
}, [docUuid]);
|
|
108
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
109
|
+
className: "sdoc-file-preview-drawer"
|
|
110
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
111
|
+
className: "file-preview-panel-wrapper"
|
|
112
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
113
|
+
className: "file-preview-panel-header"
|
|
114
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
115
|
+
className: "file-preview-panel-header-left"
|
|
116
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
117
|
+
className: "detail-header-icon-container"
|
|
118
|
+
}, /*#__PURE__*/_react["default"].createElement("img", {
|
|
119
|
+
src: fileTypeIcon,
|
|
120
|
+
width: "32px",
|
|
121
|
+
height: "32px",
|
|
122
|
+
alt: ""
|
|
123
|
+
})), /*#__PURE__*/_react["default"].createElement("span", {
|
|
124
|
+
className: "name ellipsis",
|
|
125
|
+
title: title
|
|
126
|
+
}, title)), /*#__PURE__*/_react["default"].createElement("div", {
|
|
127
|
+
className: "file-preview-panel-header-right"
|
|
128
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
129
|
+
id: "file-preview_full_screen_mode",
|
|
130
|
+
role: "button",
|
|
131
|
+
className: "file-preview-full-screen",
|
|
132
|
+
onClick: openFullscreen
|
|
133
|
+
}, /*#__PURE__*/_react["default"].createElement("i", {
|
|
134
|
+
className: "sdocfont sdoc-fullscreen icon-font"
|
|
135
|
+
})), /*#__PURE__*/_react["default"].createElement("div", {
|
|
136
|
+
className: "sdoc-icon-btn",
|
|
137
|
+
onClick: closePlugin
|
|
138
|
+
}, /*#__PURE__*/_react["default"].createElement("i", {
|
|
139
|
+
className: "sdocfont sdoc-sm-close"
|
|
140
|
+
})))), /*#__PURE__*/_react["default"].createElement("div", {
|
|
141
|
+
className: "file-preview-panel-body"
|
|
142
|
+
}, isReloading && /*#__PURE__*/_react["default"].createElement("div", {
|
|
143
|
+
className: "h-100 w-100 d-flex align-items-center justify-content-center"
|
|
144
|
+
}, /*#__PURE__*/_react["default"].createElement(_fileLoading["default"], null)), Component && !isReloading && /*#__PURE__*/_react["default"].createElement(_useScrollContext.ScrollContext.Provider, {
|
|
145
|
+
value: {
|
|
146
|
+
scrollRef: {
|
|
147
|
+
current: null
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
151
|
+
className: "file-preview-container",
|
|
152
|
+
ref: filePreviewRef
|
|
153
|
+
}, /*#__PURE__*/_react["default"].createElement(Component, {
|
|
154
|
+
key: docUuid,
|
|
155
|
+
editor: readonlyEditor,
|
|
156
|
+
slateValue: fileContent
|
|
157
|
+
}))))));
|
|
158
|
+
};
|
|
159
|
+
var _default = exports["default"] = FilePreviewWrapper;
|
package/dist/extension/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
|
|
4
3
|
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"];
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
@@ -43,8 +43,10 @@ var _plugins = _interopRequireWildcard(require("./plugins"));
|
|
|
43
43
|
var _renderElement = _interopRequireDefault(require("./render/render-element"));
|
|
44
44
|
var _renderLeaf = _interopRequireDefault(require("./render/render-leaf"));
|
|
45
45
|
var _toolbar = require("./toolbar");
|
|
46
|
+
var _ref;
|
|
46
47
|
var baseEditor = (0, _slateHistory.withHistory)((0, _slateReact.withReact)((0, _slate.createEditor)()));
|
|
47
|
-
var defaultEditor = _plugins["default"] === null ||
|
|
48
|
+
var defaultEditor = (_ref = _plugins["default"] || []) === null || _ref === void 0 ? void 0 : _ref.reduce(function (editor, pluginItem) {
|
|
49
|
+
if (!pluginItem) return editor;
|
|
48
50
|
var withPlugin = pluginItem.editorPlugin;
|
|
49
51
|
if (withPlugin) {
|
|
50
52
|
return withPlugin(editor);
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
8
|
exports["default"] = void 0;
|
|
9
|
+
var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createForOfIteratorHelper"));
|
|
9
10
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
|
|
10
11
|
var _react = _interopRequireWildcard(require("react"));
|
|
11
12
|
var _reactI18next = require("react-i18next");
|
|
@@ -77,10 +78,8 @@ var renderCallout = function renderCallout(_ref, editor) {
|
|
|
77
78
|
var handleScroll = (0, _react.useCallback)(function (e) {
|
|
78
79
|
if (readOnly) return;
|
|
79
80
|
if (!isShowColorSelector) return;
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
setPopoverPosition(menuPosition);
|
|
83
|
-
}
|
|
81
|
+
var menuPosition = (0, _utils.getMenuPosition)(calloutRef.current, editor);
|
|
82
|
+
setPopoverPosition(menuPosition);
|
|
84
83
|
}, [editor, isShowColorSelector, readOnly]);
|
|
85
84
|
(0, _react.useEffect)(function () {
|
|
86
85
|
var eventBus = _eventBus["default"].getInstance();
|
|
@@ -90,12 +89,33 @@ var renderCallout = function renderCallout(_ref, editor) {
|
|
|
90
89
|
(0, _react.useEffect)(function () {
|
|
91
90
|
if (readOnly) return;
|
|
92
91
|
var observerRefValue = null;
|
|
92
|
+
var resizeObserver = null;
|
|
93
93
|
if (scrollRef.current) {
|
|
94
94
|
scrollRef.current.addEventListener('scroll', handleScroll);
|
|
95
95
|
observerRefValue = scrollRef.current;
|
|
96
|
+
resizeObserver = new ResizeObserver(function (entries) {
|
|
97
|
+
var _iterator = (0, _createForOfIteratorHelper2["default"])(entries),
|
|
98
|
+
_step;
|
|
99
|
+
try {
|
|
100
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
101
|
+
var entry = _step.value;
|
|
102
|
+
if (resizeObserver) {
|
|
103
|
+
handleScroll();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
} catch (err) {
|
|
107
|
+
_iterator.e(err);
|
|
108
|
+
} finally {
|
|
109
|
+
_iterator.f();
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
resizeObserver.observe(scrollRef.current);
|
|
96
113
|
}
|
|
97
114
|
return function () {
|
|
98
115
|
observerRefValue.removeEventListener('scroll', handleScroll);
|
|
116
|
+
if (resizeObserver) {
|
|
117
|
+
resizeObserver.disconnect();
|
|
118
|
+
}
|
|
99
119
|
};
|
|
100
120
|
}, [handleScroll, readOnly, scrollRef]);
|
|
101
121
|
(0, _react.useEffect)(function () {
|
|
@@ -99,17 +99,15 @@ var CodeBlock = function CodeBlock(_ref) {
|
|
|
99
99
|
var onScroll = (0, _react.useCallback)(function (e) {
|
|
100
100
|
if (readOnly) return;
|
|
101
101
|
if (!showHoverMenu) return;
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
setMenuPosition(newMenuPosition);
|
|
112
|
-
}
|
|
102
|
+
var _codeBlockRef$current2 = codeBlockRef.current.getBoundingClientRect(),
|
|
103
|
+
top = _codeBlockRef$current2.top,
|
|
104
|
+
left = _codeBlockRef$current2.left;
|
|
105
|
+
var menuTop = top - 42; // top = top distance - menu height
|
|
106
|
+
var newMenuPosition = {
|
|
107
|
+
top: menuTop,
|
|
108
|
+
left: left // left = code-block left distance
|
|
109
|
+
};
|
|
110
|
+
setMenuPosition(newMenuPosition);
|
|
113
111
|
}, [readOnly, showHoverMenu]);
|
|
114
112
|
(0, _react.useEffect)(function () {
|
|
115
113
|
if (readOnly) return;
|
|
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports["default"] = void 0;
|
|
9
9
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
|
|
10
|
+
var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createForOfIteratorHelper"));
|
|
10
11
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
|
|
11
12
|
var _react = _interopRequireWildcard(require("react"));
|
|
12
13
|
var _slateReact = require("@seafile/slate-react");
|
|
@@ -73,9 +74,27 @@ var FileLink = function FileLink(_ref) {
|
|
|
73
74
|
}, []);
|
|
74
75
|
(0, _react.useEffect)(function () {
|
|
75
76
|
var observerRefValue = null;
|
|
77
|
+
var resizeObserver = null;
|
|
76
78
|
if (isShowInsertHoverMenu) {
|
|
77
79
|
scrollRef.current && scrollRef.current.addEventListener('scroll', onScroll);
|
|
78
80
|
observerRefValue = scrollRef.current;
|
|
81
|
+
resizeObserver = new ResizeObserver(function (entries) {
|
|
82
|
+
var _iterator = (0, _createForOfIteratorHelper2["default"])(entries),
|
|
83
|
+
_step;
|
|
84
|
+
try {
|
|
85
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
86
|
+
var entry = _step.value;
|
|
87
|
+
if (resizeObserver) {
|
|
88
|
+
onScroll();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
} catch (err) {
|
|
92
|
+
_iterator.e(err);
|
|
93
|
+
} finally {
|
|
94
|
+
_iterator.f();
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
resizeObserver.observe(scrollRef.current);
|
|
79
98
|
} else {
|
|
80
99
|
scrollRef.current && scrollRef.current.removeEventListener('scroll', onScroll);
|
|
81
100
|
}
|
|
@@ -83,6 +102,9 @@ var FileLink = function FileLink(_ref) {
|
|
|
83
102
|
if (observerRefValue) {
|
|
84
103
|
observerRefValue.removeEventListener('scroll', onScroll);
|
|
85
104
|
}
|
|
105
|
+
if (resizeObserver) {
|
|
106
|
+
resizeObserver.disconnect();
|
|
107
|
+
}
|
|
86
108
|
};
|
|
87
109
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
88
110
|
}, [isShowInsertHoverMenu]);
|
|
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports.renderImage = renderImage;
|
|
9
9
|
exports.renderImageBlock = renderImageBlock;
|
|
10
|
+
var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createForOfIteratorHelper"));
|
|
10
11
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
|
|
11
12
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
|
|
12
13
|
var _react = _interopRequireWildcard(require("react"));
|
|
@@ -169,6 +170,7 @@ var Image = function Image(_ref) {
|
|
|
169
170
|
}, [isResizing]);
|
|
170
171
|
(0, _react.useEffect)(function () {
|
|
171
172
|
var observerRefValue = null;
|
|
173
|
+
var resizeObserver = null;
|
|
172
174
|
if (isShowImageHoverMenu) {
|
|
173
175
|
registerEvent([{
|
|
174
176
|
'eventName': 'click',
|
|
@@ -176,6 +178,23 @@ var Image = function Image(_ref) {
|
|
|
176
178
|
}]);
|
|
177
179
|
scrollRef.current && scrollRef.current.addEventListener('scroll', onScroll);
|
|
178
180
|
observerRefValue = scrollRef.current;
|
|
181
|
+
resizeObserver = new ResizeObserver(function (entries) {
|
|
182
|
+
var _iterator = (0, _createForOfIteratorHelper2["default"])(entries),
|
|
183
|
+
_step;
|
|
184
|
+
try {
|
|
185
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
186
|
+
var entry = _step.value;
|
|
187
|
+
if (resizeObserver) {
|
|
188
|
+
onScroll();
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
} catch (err) {
|
|
192
|
+
_iterator.e(err);
|
|
193
|
+
} finally {
|
|
194
|
+
_iterator.f();
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
resizeObserver.observe(scrollRef.current);
|
|
179
198
|
} else {
|
|
180
199
|
unregisterEvent([{
|
|
181
200
|
'eventName': 'click',
|
|
@@ -191,6 +210,9 @@ var Image = function Image(_ref) {
|
|
|
191
210
|
if (observerRefValue) {
|
|
192
211
|
observerRefValue.removeEventListener('scroll', onScroll);
|
|
193
212
|
}
|
|
213
|
+
if (resizeObserver) {
|
|
214
|
+
resizeObserver.disconnect();
|
|
215
|
+
}
|
|
194
216
|
};
|
|
195
217
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
196
218
|
}, [isShowImageHoverMenu, onHideImageHoverMenu]);
|
|
@@ -271,8 +293,8 @@ var Image = function Image(_ref) {
|
|
|
271
293
|
onMouseOver: function onMouseOver(e) {
|
|
272
294
|
return (0, _helpers.selectImageWhenSelectPartial)(e, editor, element, isSelected);
|
|
273
295
|
},
|
|
274
|
-
contentEditable: "false",
|
|
275
296
|
"data-src": (0, _helpers.getImageURL)(data, editor),
|
|
297
|
+
contentEditable: "false",
|
|
276
298
|
suppressContentEditableWarning: true
|
|
277
299
|
}), /*#__PURE__*/_react["default"].createElement("img", {
|
|
278
300
|
ref: imageRef,
|
|
@@ -287,8 +309,8 @@ var Image = function Image(_ref) {
|
|
|
287
309
|
onMouseOver: function onMouseOver(e) {
|
|
288
310
|
return (0, _helpers.selectImageWhenSelectPartial)(e, editor, element, isSelected);
|
|
289
311
|
},
|
|
290
|
-
contentEditable: "false",
|
|
291
312
|
"data-src": data.src,
|
|
313
|
+
contentEditable: "false",
|
|
292
314
|
suppressContentEditableWarning: true
|
|
293
315
|
}), /*#__PURE__*/_react["default"].createElement(_copyImageErrorSvg["default"], {
|
|
294
316
|
t: t,
|
|
@@ -298,12 +320,12 @@ var Image = function Image(_ref) {
|
|
|
298
320
|
"data-id": element.id,
|
|
299
321
|
className: (0, _classnames["default"])('sdoc-image-wrapper', className)
|
|
300
322
|
}, attributes, {
|
|
323
|
+
contentEditable: "true",
|
|
324
|
+
suppressContentEditableWarning: true,
|
|
301
325
|
style: (0, _objectSpread2["default"])({}, style),
|
|
302
326
|
onMouseOver: function onMouseOver(e) {
|
|
303
327
|
return (0, _helpers.selectImageWhenSelectPartial)(e, editor, element, isSelected);
|
|
304
|
-
}
|
|
305
|
-
contentEditable: "false",
|
|
306
|
-
suppressContentEditableWarning: true
|
|
328
|
+
}
|
|
307
329
|
}), /*#__PURE__*/_react["default"].createElement("span", {
|
|
308
330
|
className: "sdoc-image-inner"
|
|
309
331
|
}, /*#__PURE__*/_react["default"].createElement("span", {
|
|
@@ -410,7 +432,7 @@ function renderImageBlock(props, editor) {
|
|
|
410
432
|
onMouseOver: function onMouseOver(e) {
|
|
411
433
|
return (0, _helpers.selectImageWhenSelectPartial)(e, editor, element, isSelected);
|
|
412
434
|
},
|
|
413
|
-
contentEditable: "
|
|
435
|
+
contentEditable: "true",
|
|
414
436
|
suppressContentEditableWarning: true
|
|
415
437
|
}), children);
|
|
416
438
|
}
|
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports["default"] = void 0;
|
|
8
|
+
var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createForOfIteratorHelper"));
|
|
8
9
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/classCallCheck"));
|
|
9
10
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createClass"));
|
|
10
11
|
var _callSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/callSuper"));
|
|
@@ -24,11 +25,27 @@ var Link = /*#__PURE__*/function (_React$Component) {
|
|
|
24
25
|
var _this;
|
|
25
26
|
(0, _classCallCheck2["default"])(this, Link);
|
|
26
27
|
_this = (0, _callSuper2["default"])(this, Link, [props]);
|
|
28
|
+
(0, _defineProperty2["default"])(_this, "resizeObserver", null);
|
|
27
29
|
(0, _defineProperty2["default"])(_this, "registerEventHandle", function () {
|
|
28
30
|
document.addEventListener('click', _this.onHideLinkMenu);
|
|
29
31
|
var scrollRef = _this.context.scrollRef;
|
|
30
32
|
if (scrollRef.current) {
|
|
31
33
|
scrollRef.current.addEventListener('scroll', _this.onScroll);
|
|
34
|
+
_this.resizeObserver = new ResizeObserver(function (entries) {
|
|
35
|
+
var _iterator = (0, _createForOfIteratorHelper2["default"])(entries),
|
|
36
|
+
_step;
|
|
37
|
+
try {
|
|
38
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
39
|
+
var entry = _step.value;
|
|
40
|
+
_this.onScroll();
|
|
41
|
+
}
|
|
42
|
+
} catch (err) {
|
|
43
|
+
_iterator.e(err);
|
|
44
|
+
} finally {
|
|
45
|
+
_iterator.f();
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
_this.resizeObserver.observe(scrollRef.current);
|
|
32
49
|
}
|
|
33
50
|
});
|
|
34
51
|
(0, _defineProperty2["default"])(_this, "unregisterEventHandle", function () {
|
|
@@ -37,6 +54,10 @@ var Link = /*#__PURE__*/function (_React$Component) {
|
|
|
37
54
|
if (scrollRef.current) {
|
|
38
55
|
scrollRef.current.addEventListener('scroll', _this.onScroll);
|
|
39
56
|
}
|
|
57
|
+
if (_this.resizeObserver) {
|
|
58
|
+
_this.resizeObserver.disconnect();
|
|
59
|
+
_this.resizeObserver = null;
|
|
60
|
+
}
|
|
40
61
|
});
|
|
41
62
|
(0, _defineProperty2["default"])(_this, "onHideLinkMenu", function () {
|
|
42
63
|
_this.setState({
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
8
|
exports["default"] = void 0;
|
|
9
|
+
var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createForOfIteratorHelper"));
|
|
9
10
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
|
|
10
11
|
var _react = _interopRequireWildcard(require("react"));
|
|
11
12
|
var _slate = require("@seafile/slate");
|
|
@@ -69,13 +70,34 @@ var RenderQuickInsert = function RenderQuickInsert(_ref, editor, readonly) {
|
|
|
69
70
|
(0, _react.useEffect)(function () {
|
|
70
71
|
if (readonly) return;
|
|
71
72
|
if (!sideMenuRef.current) return;
|
|
73
|
+
var resizeObserver = null;
|
|
72
74
|
var scrollDom = scrollRef.current;
|
|
73
75
|
handleInsertMenuStyle();
|
|
74
76
|
document.addEventListener('click', handleClick);
|
|
75
77
|
scrollDom.addEventListener('scroll', handleScroll);
|
|
78
|
+
resizeObserver = new ResizeObserver(function (entries) {
|
|
79
|
+
var _iterator = (0, _createForOfIteratorHelper2["default"])(entries),
|
|
80
|
+
_step;
|
|
81
|
+
try {
|
|
82
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
83
|
+
var entry = _step.value;
|
|
84
|
+
if (resizeObserver) {
|
|
85
|
+
handleScroll();
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
} catch (err) {
|
|
89
|
+
_iterator.e(err);
|
|
90
|
+
} finally {
|
|
91
|
+
_iterator.f();
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
resizeObserver.observe(scrollDom);
|
|
76
95
|
return function () {
|
|
77
96
|
document.removeEventListener('click', handleClick);
|
|
78
97
|
scrollDom.removeEventListener('scroll', handleScroll);
|
|
98
|
+
if (resizeObserver) {
|
|
99
|
+
resizeObserver.disconnect();
|
|
100
|
+
}
|
|
79
101
|
};
|
|
80
102
|
}, [editor, element, handleClick, handleInsertMenuStyle, handleScroll, readonly, scrollRef]);
|
|
81
103
|
var handleInsertBlock = function handleInsertBlock(node) {
|
|
@@ -13,8 +13,12 @@ var _slate = require("@seafile/slate");
|
|
|
13
13
|
var _slateReact = require("@seafile/slate-react");
|
|
14
14
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
15
15
|
var _toast = _interopRequireDefault(require("../../../../components/toast"));
|
|
16
|
+
var _constants = require("../../../../constants");
|
|
17
|
+
var _usePlugins2 = require("../../../../hooks/use-plugins");
|
|
18
|
+
var _outline = require("../../../../outline");
|
|
19
|
+
var _eventBus = _interopRequireDefault(require("../../../../utils/event-bus"));
|
|
16
20
|
var _commons = require("../../../commons");
|
|
17
|
-
var
|
|
21
|
+
var _constants2 = require("../constants");
|
|
18
22
|
var _helpers = require("../helpers");
|
|
19
23
|
require("./index.css");
|
|
20
24
|
var SdocLinkHoverMenu = function SdocLinkHoverMenu(_ref) {
|
|
@@ -25,6 +29,8 @@ var SdocLinkHoverMenu = function SdocLinkHoverMenu(_ref) {
|
|
|
25
29
|
onHideInsertHoverMenu = _ref.onHideInsertHoverMenu,
|
|
26
30
|
t = _ref.t,
|
|
27
31
|
url = _ref.url;
|
|
32
|
+
var _usePlugins = (0, _usePlugins2.usePlugins)(),
|
|
33
|
+
updateDisplayPlugin = _usePlugins.updateDisplayPlugin;
|
|
28
34
|
var readOnly = (0, _slateReact.useReadOnly)();
|
|
29
35
|
var _useState = (0, _react.useState)(false),
|
|
30
36
|
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
@@ -56,10 +62,25 @@ var SdocLinkHoverMenu = function SdocLinkHoverMenu(_ref) {
|
|
|
56
62
|
onHideInsertHoverMenu();
|
|
57
63
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
58
64
|
}, []);
|
|
59
|
-
var
|
|
65
|
+
var handleOpenLinkPreview = (0, _react.useCallback)(function (pluginName) {
|
|
66
|
+
updateDisplayPlugin(pluginName, true);
|
|
67
|
+
var doc_uuid = element.doc_uuid,
|
|
68
|
+
title = element.title,
|
|
69
|
+
type = element.type;
|
|
70
|
+
var eventBus = _eventBus["default"].getInstance();
|
|
71
|
+
eventBus.dispatch(_constants.INTERNAL_EVENT.TRANSFER_PREVIEW_FILE_ID, {
|
|
72
|
+
doc_uuid: doc_uuid,
|
|
73
|
+
title: title,
|
|
74
|
+
type: type
|
|
75
|
+
});
|
|
76
|
+
setTimeout(function () {
|
|
77
|
+
onHideInsertHoverMenu();
|
|
78
|
+
}, 0);
|
|
79
|
+
}, [updateDisplayPlugin]);
|
|
80
|
+
var selectedType = element.display_type || _constants2.SDOC_LINK_TYPE.TEXT_LINK;
|
|
60
81
|
var id = "sdoc-link-display-type-".concat(element.id);
|
|
61
|
-
var newSdocFileTypes =
|
|
62
|
-
return (0, _helpers.isInTable)(editor, element) ? sdocLinkType !==
|
|
82
|
+
var newSdocFileTypes = _constants2.SDOC_LINK_TYPES.filter(function (sdocLinkType) {
|
|
83
|
+
return (0, _helpers.isInTable)(editor, element) ? sdocLinkType !== _constants2.SDOC_LINK_TYPE.CARD_LINK : true;
|
|
63
84
|
});
|
|
64
85
|
return /*#__PURE__*/_react["default"].createElement(_commons.ElementPopover, null, /*#__PURE__*/_react["default"].createElement("div", {
|
|
65
86
|
className: "sdoc-link-hover-menu-container",
|
|
@@ -78,7 +99,7 @@ var SdocLinkHoverMenu = function SdocLinkHoverMenu(_ref) {
|
|
|
78
99
|
target: "_blank",
|
|
79
100
|
rel: "noopener noreferrer",
|
|
80
101
|
className: "link-op-menu-link"
|
|
81
|
-
}, t('Open_link')))), !readOnly && /*#__PURE__*/_react["default"].createElement("span", {
|
|
102
|
+
}, t('Open_link')))), !readOnly && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("span", {
|
|
82
103
|
className: "op-group-item"
|
|
83
104
|
}, /*#__PURE__*/_react["default"].createElement("span", {
|
|
84
105
|
role: "button",
|
|
@@ -92,16 +113,26 @@ var SdocLinkHoverMenu = function SdocLinkHoverMenu(_ref) {
|
|
|
92
113
|
onClick: onShowProver,
|
|
93
114
|
id: id
|
|
94
115
|
}, /*#__PURE__*/_react["default"].createElement("i", {
|
|
95
|
-
className: (0, _classnames["default"])('icon-font mr-1',
|
|
116
|
+
className: (0, _classnames["default"])('icon-font mr-1', _constants2.SDOC_LINK_TYPE_CONFIG[selectedType].icon)
|
|
96
117
|
}), /*#__PURE__*/_react["default"].createElement("i", {
|
|
97
118
|
className: "sdocfont sdoc-drop-down icon-font"
|
|
98
|
-
})), /*#__PURE__*/_react["default"].createElement("span", {
|
|
119
|
+
}))), /*#__PURE__*/_react["default"].createElement("span", {
|
|
120
|
+
className: "op-group-item"
|
|
121
|
+
}, /*#__PURE__*/_react["default"].createElement("span", {
|
|
99
122
|
role: "button",
|
|
100
123
|
className: 'op-item',
|
|
101
124
|
onClick: onUnwrapFileLinkNode
|
|
102
125
|
}, /*#__PURE__*/_react["default"].createElement("i", {
|
|
103
126
|
className: "sdocfont sdoc-unlink icon-font"
|
|
104
|
-
}))
|
|
127
|
+
})), /*#__PURE__*/_react["default"].createElement("span", {
|
|
128
|
+
role: "button",
|
|
129
|
+
className: "op-item",
|
|
130
|
+
onClick: function onClick() {
|
|
131
|
+
return handleOpenLinkPreview('sdoc-file-preview');
|
|
132
|
+
}
|
|
133
|
+
}, /*#__PURE__*/_react["default"].createElement("i", {
|
|
134
|
+
className: "sdocfont eye icon-font"
|
|
135
|
+
}))))), isShowDisplayStylePopover && /*#__PURE__*/_react["default"].createElement("div", {
|
|
105
136
|
className: "sdoc-file-display-style-popover sdoc-dropdown-menu"
|
|
106
137
|
}, newSdocFileTypes.map(function (sdocLinkType) {
|
|
107
138
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
@@ -114,8 +145,8 @@ var SdocLinkHoverMenu = function SdocLinkHoverMenu(_ref) {
|
|
|
114
145
|
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
115
146
|
className: "sdoc-dropdown-item-content"
|
|
116
147
|
}, /*#__PURE__*/_react["default"].createElement("i", {
|
|
117
|
-
className: (0, _classnames["default"])('sdoc-dropdown-item-content-icon',
|
|
118
|
-
}), /*#__PURE__*/_react["default"].createElement("span", null, t(
|
|
148
|
+
className: (0, _classnames["default"])('sdoc-dropdown-item-content-icon', _constants2.SDOC_LINK_TYPE_CONFIG[sdocLinkType].icon)
|
|
149
|
+
}), /*#__PURE__*/_react["default"].createElement("span", null, t(_constants2.SDOC_LINK_TYPE_CONFIG[sdocLinkType].text))), selectedType === sdocLinkType && /*#__PURE__*/_react["default"].createElement("i", {
|
|
119
150
|
className: "sdocfont sdoc-check-mark sdoc-dropdown-item-right-icon"
|
|
120
151
|
}));
|
|
121
152
|
}))));
|
|
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports["default"] = void 0;
|
|
9
9
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
|
|
10
|
+
var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createForOfIteratorHelper"));
|
|
10
11
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
|
|
11
12
|
var _react = _interopRequireWildcard(require("react"));
|
|
12
13
|
var _slate = require("@seafile/slate");
|
|
@@ -75,9 +76,27 @@ var SdocFileLink = function SdocFileLink(_ref) {
|
|
|
75
76
|
}, []);
|
|
76
77
|
(0, _react.useEffect)(function () {
|
|
77
78
|
var observerRefValue = null;
|
|
79
|
+
var resizeObserver = null;
|
|
78
80
|
if (isShowInsertHoverMenu) {
|
|
79
81
|
scrollRef.current && scrollRef.current.addEventListener('scroll', onScroll);
|
|
80
82
|
observerRefValue = scrollRef.current;
|
|
83
|
+
resizeObserver = new ResizeObserver(function (entries) {
|
|
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
|
+
onScroll();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
} catch (err) {
|
|
94
|
+
_iterator.e(err);
|
|
95
|
+
} finally {
|
|
96
|
+
_iterator.f();
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
resizeObserver.observe(scrollRef.current);
|
|
81
100
|
} else {
|
|
82
101
|
scrollRef.current && scrollRef.current.removeEventListener('scroll', onScroll);
|
|
83
102
|
}
|
|
@@ -85,6 +104,9 @@ var SdocFileLink = function SdocFileLink(_ref) {
|
|
|
85
104
|
if (observerRefValue) {
|
|
86
105
|
observerRefValue.removeEventListener('scroll', onScroll);
|
|
87
106
|
}
|
|
107
|
+
if (resizeObserver) {
|
|
108
|
+
resizeObserver.disconnect();
|
|
109
|
+
}
|
|
88
110
|
};
|
|
89
111
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
90
112
|
}, [isShowInsertHoverMenu]);
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
8
|
exports.renderWhiteboard = renderWhiteboard;
|
|
9
|
+
var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createForOfIteratorHelper"));
|
|
9
10
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
|
|
10
11
|
var _react = _interopRequireWildcard(require("react"));
|
|
11
12
|
var _slate = require("@seafile/slate");
|
|
@@ -80,27 +81,46 @@ var Whiteboard = function Whiteboard(_ref) {
|
|
|
80
81
|
var handleScroll = (0, _react.useCallback)(function (e) {
|
|
81
82
|
if (readOnly) return;
|
|
82
83
|
if (!isSelected) return;
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
setMenuPosition(_menuPosition);
|
|
86
|
-
}
|
|
84
|
+
var menuPosition = (0, _utils.getMenuPosition)(whiteboardRef.current, editor);
|
|
85
|
+
setMenuPosition(menuPosition);
|
|
87
86
|
}, [editor, isSelected, readOnly]);
|
|
88
87
|
(0, _react.useEffect)(function () {
|
|
89
88
|
if (readOnly) return;
|
|
90
89
|
var observerRefValue = null;
|
|
90
|
+
var resizeObserver = null;
|
|
91
91
|
if (scrollRef.current) {
|
|
92
92
|
scrollRef.current.addEventListener('scroll', handleScroll);
|
|
93
93
|
observerRefValue = scrollRef.current;
|
|
94
|
+
resizeObserver = new ResizeObserver(function (entries) {
|
|
95
|
+
var _iterator = (0, _createForOfIteratorHelper2["default"])(entries),
|
|
96
|
+
_step;
|
|
97
|
+
try {
|
|
98
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
99
|
+
var entry = _step.value;
|
|
100
|
+
if (resizeObserver) {
|
|
101
|
+
handleScroll();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
} catch (err) {
|
|
105
|
+
_iterator.e(err);
|
|
106
|
+
} finally {
|
|
107
|
+
_iterator.f();
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
resizeObserver.observe(scrollRef.current);
|
|
94
111
|
}
|
|
95
112
|
return function () {
|
|
96
113
|
observerRefValue.removeEventListener('scroll', handleScroll);
|
|
114
|
+
if (resizeObserver) {
|
|
115
|
+
resizeObserver.disconnect();
|
|
116
|
+
}
|
|
97
117
|
};
|
|
98
118
|
}, [handleScroll, readOnly, scrollRef]);
|
|
99
119
|
var handleOnClick = (0, _react.useCallback)(function () {
|
|
100
120
|
if (readOnly) return;
|
|
101
121
|
if (isSelected) {
|
|
102
|
-
var
|
|
103
|
-
setMenuPosition(
|
|
122
|
+
var _menuPosition = (0, _utils.getMenuPosition)(whiteboardRef.current, editor);
|
|
123
|
+
setMenuPosition(_menuPosition);
|
|
104
124
|
}
|
|
105
125
|
}, [editor, isSelected, readOnly]);
|
|
106
126
|
var openFullscreen = function openFullscreen() {
|
|
@@ -11,6 +11,7 @@ var _react = _interopRequireWildcard(require("react"));
|
|
|
11
11
|
var _comment = _interopRequireDefault(require("../comment"));
|
|
12
12
|
var _commentOperation = _interopRequireDefault(require("../comment/components/comment-operation"));
|
|
13
13
|
var _constants = require("../constants");
|
|
14
|
+
var _fileLinkPreview = _interopRequireDefault(require("../extension/commons/file-link-preview"));
|
|
14
15
|
var PluginsContext = /*#__PURE__*/_react["default"].createContext(null);
|
|
15
16
|
var PluginsProvider = exports.PluginsProvider = function PluginsProvider(_ref) {
|
|
16
17
|
var showComment = _ref.showComment,
|
|
@@ -29,6 +30,12 @@ var PluginsProvider = exports.PluginsProvider = function PluginsProvider(_ref) {
|
|
|
29
30
|
}, []);
|
|
30
31
|
var plugins = (0, _react.useMemo)(function () {
|
|
31
32
|
var allPlugins = propsPlugins;
|
|
33
|
+
allPlugins.push({
|
|
34
|
+
name: 'sdoc-file-preview',
|
|
35
|
+
resizable_width: true,
|
|
36
|
+
display_type: _constants.PLUGIN_DISPLAY_TYPE.RIGHT_PANEL,
|
|
37
|
+
component: _fileLinkPreview["default"]
|
|
38
|
+
});
|
|
32
39
|
if (showComment) {
|
|
33
40
|
allPlugins.push({
|
|
34
41
|
name: 'sdoc-comment',
|
|
@@ -41,7 +48,8 @@ var PluginsProvider = exports.PluginsProvider = function PluginsProvider(_ref) {
|
|
|
41
48
|
return allPlugins;
|
|
42
49
|
}, [showComment, propsPlugins]);
|
|
43
50
|
var updateDisplayPlugin = (0, _react.useCallback)(function (name) {
|
|
44
|
-
|
|
51
|
+
var isFilePreview = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
52
|
+
if ((!name || displayName === name) && !isFilePreview) {
|
|
45
53
|
setDisplayName('');
|
|
46
54
|
return;
|
|
47
55
|
}
|
|
@@ -25,10 +25,18 @@ var RightPanel = function RightPanel(_ref) {
|
|
|
25
25
|
plugins = _usePlugins.plugins,
|
|
26
26
|
displayPluginName = _usePlugins.displayPluginName,
|
|
27
27
|
closePlugin = _usePlugins.closePlugin;
|
|
28
|
-
var _useState = (0, _react.useState)(
|
|
28
|
+
var _useState = (0, _react.useState)(''),
|
|
29
29
|
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
title = _useState2[0],
|
|
31
|
+
setTitle = _useState2[1];
|
|
32
|
+
var _useState3 = (0, _react.useState)(''),
|
|
33
|
+
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
34
|
+
docUuid = _useState4[0],
|
|
35
|
+
setDocUuid = _useState4[1];
|
|
36
|
+
var _useState5 = (0, _react.useState)(MIN_PANEL_WIDTH),
|
|
37
|
+
_useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
|
|
38
|
+
width = _useState6[0],
|
|
39
|
+
setWidth = _useState6[1];
|
|
32
40
|
if (editor.editorType === _constants.WIKI_EDITOR) {
|
|
33
41
|
plugins = [{
|
|
34
42
|
name: 'sdoc-comment',
|
|
@@ -88,6 +96,22 @@ var RightPanel = function RightPanel(_ref) {
|
|
|
88
96
|
var eventBus = _eventBus["default"].getInstance();
|
|
89
97
|
eventBus.dispatch(_constants.INTERNAL_EVENT.RESIZE_ARTICLE);
|
|
90
98
|
}, [displayPluginName]);
|
|
99
|
+
var updateFilePreviewPlugin = (0, _react.useCallback)(function (_ref2) {
|
|
100
|
+
var doc_uuid = _ref2.doc_uuid,
|
|
101
|
+
title = _ref2.title,
|
|
102
|
+
type = _ref2.type;
|
|
103
|
+
if (type && type === 'sdoc_link') {
|
|
104
|
+
setTitle(title + '.sdoc');
|
|
105
|
+
}
|
|
106
|
+
setDocUuid(doc_uuid);
|
|
107
|
+
}, []);
|
|
108
|
+
(0, _react.useEffect)(function () {
|
|
109
|
+
var eventBus = _eventBus["default"].getInstance();
|
|
110
|
+
var unsubscribeTransferFileId = eventBus.subscribe(_constants.INTERNAL_EVENT.TRANSFER_PREVIEW_FILE_ID, updateFilePreviewPlugin);
|
|
111
|
+
return function () {
|
|
112
|
+
unsubscribeTransferFileId();
|
|
113
|
+
};
|
|
114
|
+
}, []);
|
|
91
115
|
if (!displayPluginName) return null;
|
|
92
116
|
var plugin = plugins.find(function (p) {
|
|
93
117
|
return p.name === displayPluginName;
|
|
@@ -111,7 +135,9 @@ var RightPanel = function RightPanel(_ref) {
|
|
|
111
135
|
editor: editor,
|
|
112
136
|
type: "global",
|
|
113
137
|
onClose: closePlugin,
|
|
114
|
-
width: width
|
|
138
|
+
width: width,
|
|
139
|
+
title: title,
|
|
140
|
+
docUuid: docUuid
|
|
115
141
|
})));
|
|
116
142
|
};
|
|
117
143
|
var _default = exports["default"] = RightPanel;
|
|
@@ -15,7 +15,7 @@ var getStyleByDefaultMode = exports.getStyleByDefaultMode = function getStyleByD
|
|
|
15
15
|
} : {};
|
|
16
16
|
|
|
17
17
|
// Has outline
|
|
18
|
-
if (isShowOutline && editor.editorType !== _constants.WIKI_EDITOR) {
|
|
18
|
+
if (isShowOutline && scrollRef.current && editor.editorType !== _constants.WIKI_EDITOR) {
|
|
19
19
|
var rect = scrollRef.current.getBoundingClientRect();
|
|
20
20
|
if ((rect.width - Number(_constants.ARTICLE_DEFAULT_WIDTH.slice(0, 3))) / 2 < 280) {
|
|
21
21
|
containerStyle['marginLeft'] = "".concat(_constants.LEFT_OUTLINE_WIDTH, "px");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seafile/sdoc-editor",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.148",
|
|
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": "
|
|
20
|
+
"@seafile/comment-editor": "0.0.13",
|
|
21
21
|
"@seafile/print-js": "1.6.6",
|
|
22
22
|
"@seafile/react-image-lightbox": "4.0.2",
|
|
23
23
|
"@seafile/slate": "0.91.8",
|
|
@@ -71,5 +71,5 @@
|
|
|
71
71
|
"publishConfig": {
|
|
72
72
|
"access": "public"
|
|
73
73
|
},
|
|
74
|
-
"gitHead": "
|
|
74
|
+
"gitHead": "535d250bacadefbab5f4f64ae47cca07620ae043"
|
|
75
75
|
}
|