@seafile/sdoc-editor 3.0.0 → 3.0.2
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/seafile-api.js +20 -0
- package/dist/context.js +14 -0
- package/dist/editor/sdoc-editor.js +3 -0
- package/dist/editor/wiki-editor.js +4 -1
- package/dist/extension/commons/file-link-preview/index.css +1 -1
- package/dist/extension/commons/insert-element-dialog/index.js +26 -13
- package/dist/extension/commons/select-file-dialog/index.css +1 -0
- package/dist/extension/commons/select-file-dialog/list-view/index.css +6 -0
- package/dist/extension/commons/select-file-dialog/tree-view/index.css +7 -0
- package/dist/extension/constants/element-type.js +2 -1
- package/dist/extension/constants/font.js +1 -2
- package/dist/extension/constants/index.js +17 -1
- package/dist/extension/constants/menus-config.js +8 -3
- package/dist/extension/plugins/blockquote/plugin.js +2 -7
- package/dist/extension/plugins/file-view/helpers.js +77 -0
- package/dist/extension/plugins/file-view/index.js +17 -0
- package/dist/extension/plugins/file-view/insert-view-dialog/dropdown-select/constants.js +16 -0
- package/dist/extension/plugins/file-view/insert-view-dialog/dropdown-select/index.css +96 -0
- package/dist/extension/plugins/file-view/insert-view-dialog/dropdown-select/index.js +156 -0
- package/dist/extension/plugins/file-view/insert-view-dialog/dropdown-select/lib.png +0 -0
- package/dist/extension/plugins/file-view/insert-view-dialog/dropdown-select/option.css +49 -0
- package/dist/extension/plugins/file-view/insert-view-dialog/dropdown-select/option.js +53 -0
- package/dist/extension/plugins/file-view/insert-view-dialog/dropdown-select/select-option-group.css +37 -0
- package/dist/extension/plugins/file-view/insert-view-dialog/dropdown-select/select-option-group.js +241 -0
- package/dist/extension/plugins/file-view/insert-view-dialog/index.js +232 -0
- package/dist/extension/plugins/file-view/insert-view-dialog/modal-portal.js +41 -0
- package/dist/extension/plugins/file-view/plugin.js +71 -0
- package/dist/extension/plugins/file-view/render-elem/index.css +53 -0
- package/dist/extension/plugins/file-view/render-elem/index.js +103 -0
- package/dist/extension/plugins/html/plugin.js +2 -3
- package/dist/extension/plugins/image/use-copy-image.js +2 -2
- package/dist/extension/plugins/index.js +9 -2
- package/dist/extension/plugins/link/dialog/add-link-dialog/index.css +46 -1
- package/dist/extension/plugins/link/dialog/add-link-dialog/index.js +45 -26
- package/dist/extension/plugins/link/helpers.js +2 -1
- package/dist/extension/plugins/quick-insert/render-elem.js +1 -0
- package/dist/extension/render/custom-element.js +6 -0
- package/dist/extension/toolbar/insert-element-toolbar/index.js +16 -1
- package/dist/extension/toolbar/side-toolbar/insert-block-menu.js +16 -2
- package/dist/node-id/index.js +3 -0
- package/package.json +2 -2
|
@@ -0,0 +1,232 @@
|
|
|
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 _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
|
|
10
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
|
|
11
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
12
|
+
var _reactI18next = require("react-i18next");
|
|
13
|
+
var _reactstrap = require("reactstrap");
|
|
14
|
+
var _loading = _interopRequireDefault(require("../../../../components/loading"));
|
|
15
|
+
var _toast = _interopRequireDefault(require("../../../../components/toast"));
|
|
16
|
+
var _context = _interopRequireDefault(require("../../../../context"));
|
|
17
|
+
var _commonUtils = require("../../../../utils/common-utils");
|
|
18
|
+
var _helpers = require("../helpers");
|
|
19
|
+
var _dropdownSelect = _interopRequireDefault(require("./dropdown-select"));
|
|
20
|
+
var InsertViewDialog = function InsertViewDialog(_ref) {
|
|
21
|
+
var className = _ref.className,
|
|
22
|
+
editor = _ref.editor,
|
|
23
|
+
_ref$element = _ref.element,
|
|
24
|
+
element = _ref$element === void 0 ? {} : _ref$element,
|
|
25
|
+
slateNode = _ref.slateNode,
|
|
26
|
+
insertPosition = _ref.insertPosition,
|
|
27
|
+
closeDialog = _ref.closeDialog;
|
|
28
|
+
var _element$data = element.data,
|
|
29
|
+
data = _element$data === void 0 ? {} : _element$data;
|
|
30
|
+
var _useTranslation = (0, _reactI18next.useTranslation)('sdoc-editor'),
|
|
31
|
+
t = _useTranslation.t;
|
|
32
|
+
var _useState = (0, _react.useState)(true),
|
|
33
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
34
|
+
isLoading = _useState2[0],
|
|
35
|
+
setIsLoading = _useState2[1];
|
|
36
|
+
var _useState3 = (0, _react.useState)(''),
|
|
37
|
+
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
38
|
+
viewName = _useState4[0],
|
|
39
|
+
setViewName = _useState4[1];
|
|
40
|
+
var _useState5 = (0, _react.useState)(null),
|
|
41
|
+
_useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
|
|
42
|
+
currentTypeOption = _useState6[0],
|
|
43
|
+
setCurrentTypeOption = _useState6[1];
|
|
44
|
+
var _useState7 = (0, _react.useState)(null),
|
|
45
|
+
_useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
|
|
46
|
+
currentRepoOption = _useState8[0],
|
|
47
|
+
setCurrentRepoOption = _useState8[1];
|
|
48
|
+
var _useState9 = (0, _react.useState)(''),
|
|
49
|
+
_useState0 = (0, _slicedToArray2["default"])(_useState9, 2),
|
|
50
|
+
viewNameErrorMessage = _useState0[0],
|
|
51
|
+
setViewNameErrorMessage = _useState0[1];
|
|
52
|
+
var _useState1 = (0, _react.useState)(''),
|
|
53
|
+
_useState10 = (0, _slicedToArray2["default"])(_useState1, 2),
|
|
54
|
+
typeErrorMessage = _useState10[0],
|
|
55
|
+
setTypeErrorMessage = _useState10[1];
|
|
56
|
+
var _useState11 = (0, _react.useState)(''),
|
|
57
|
+
_useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
|
|
58
|
+
repoErrorMessage = _useState12[0],
|
|
59
|
+
setRepoErrorMessage = _useState12[1];
|
|
60
|
+
var _useState13 = (0, _react.useState)([]),
|
|
61
|
+
_useState14 = (0, _slicedToArray2["default"])(_useState13, 2),
|
|
62
|
+
repoOptions = _useState14[0],
|
|
63
|
+
setRepoOptions = _useState14[1];
|
|
64
|
+
var TYPE_OPERATIONS = (0, _react.useMemo)(function () {
|
|
65
|
+
return [{
|
|
66
|
+
id: 'table',
|
|
67
|
+
name: 'table',
|
|
68
|
+
value: 'table',
|
|
69
|
+
label: 'table'
|
|
70
|
+
}];
|
|
71
|
+
}, []);
|
|
72
|
+
(0, _react.useEffect)(function () {
|
|
73
|
+
var _element$data2 = element.data,
|
|
74
|
+
data = _element$data2 === void 0 ? {} : _element$data2;
|
|
75
|
+
setViewName(data.view_name);
|
|
76
|
+
var typeOption = TYPE_OPERATIONS.find(function (item) {
|
|
77
|
+
return item.value === data.view_type;
|
|
78
|
+
}) || null;
|
|
79
|
+
setCurrentTypeOption(typeOption);
|
|
80
|
+
var wikiSettings = (0, _helpers.getWikiSettings)();
|
|
81
|
+
var accessibleRepos = (0, _helpers.getAccessibleRepos)();
|
|
82
|
+
var linkedRepoIds = wikiSettings.linked_repos;
|
|
83
|
+
var repoList = accessibleRepos.map(function (item) {
|
|
84
|
+
item.sharePermission = 'rw';
|
|
85
|
+
return item;
|
|
86
|
+
});
|
|
87
|
+
var options = repoList.map(function (item) {
|
|
88
|
+
return {
|
|
89
|
+
id: item.repo_id,
|
|
90
|
+
name: item.repo_name,
|
|
91
|
+
value: item.repo_name,
|
|
92
|
+
label: item.repo_name,
|
|
93
|
+
permission: item.permission
|
|
94
|
+
};
|
|
95
|
+
});
|
|
96
|
+
var optionsMap = options.reduce(function (result, item) {
|
|
97
|
+
result[item.id] = item;
|
|
98
|
+
return result;
|
|
99
|
+
}, {});
|
|
100
|
+
var repoOptions = linkedRepoIds.map(function (id) {
|
|
101
|
+
return optionsMap[id];
|
|
102
|
+
}).filter(Boolean);
|
|
103
|
+
setRepoOptions(repoOptions);
|
|
104
|
+
setCurrentRepoOption(repoOptions.find(function (item) {
|
|
105
|
+
return item.id === data.linked_repo_id;
|
|
106
|
+
}));
|
|
107
|
+
setIsLoading(false);
|
|
108
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
109
|
+
}, []);
|
|
110
|
+
var submit = (0, _react.useCallback)(function () {
|
|
111
|
+
setViewNameErrorMessage('');
|
|
112
|
+
setTypeErrorMessage('');
|
|
113
|
+
setRepoErrorMessage('');
|
|
114
|
+
if (!viewName) {
|
|
115
|
+
setViewNameErrorMessage(t('The_view_name_is_required'));
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
if (!currentTypeOption) {
|
|
119
|
+
setTypeErrorMessage(t('The_view_type_is_required'));
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
if (!currentRepoOption) {
|
|
123
|
+
setRepoErrorMessage(t('The_linked_library_is_required'));
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
var viewType = currentTypeOption.value;
|
|
127
|
+
var linkedRepoId = currentRepoOption.id;
|
|
128
|
+
var wikiId = _context["default"].getSetting('wikiId');
|
|
129
|
+
var data = {
|
|
130
|
+
wiki_id: wikiId,
|
|
131
|
+
view_name: viewName,
|
|
132
|
+
view_type: viewType,
|
|
133
|
+
link_repo_id: linkedRepoId
|
|
134
|
+
};
|
|
135
|
+
_context["default"].insertWikiView(data).then(function (res) {
|
|
136
|
+
var view = res.data.view;
|
|
137
|
+
var viewData = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, data), {}, {
|
|
138
|
+
view_id: view._id
|
|
139
|
+
});
|
|
140
|
+
(0, _helpers.insertFileView)(viewData, editor, insertPosition, slateNode);
|
|
141
|
+
closeDialog();
|
|
142
|
+
})["catch"](function (error) {
|
|
143
|
+
var errorMessage = (0, _commonUtils.getErrorMsg)(error);
|
|
144
|
+
_toast["default"].danger(errorMessage);
|
|
145
|
+
});
|
|
146
|
+
}, [viewName, currentTypeOption, currentRepoOption, t, editor, insertPosition, slateNode, closeDialog]);
|
|
147
|
+
var onKeyDown = (0, _react.useCallback)(function (event) {
|
|
148
|
+
if (event.keyCode === 13) {
|
|
149
|
+
event.preventDefault();
|
|
150
|
+
submit();
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
}, [submit]);
|
|
154
|
+
var onValueChanged = (0, _react.useCallback)(function (event) {
|
|
155
|
+
var value = event.target.value;
|
|
156
|
+
if (value === viewName) return;
|
|
157
|
+
setViewName(value);
|
|
158
|
+
setViewNameErrorMessage('');
|
|
159
|
+
}, [viewName]);
|
|
160
|
+
var onSelectTypeOption = (0, _react.useCallback)(function (option) {
|
|
161
|
+
setCurrentTypeOption(option);
|
|
162
|
+
setTypeErrorMessage('');
|
|
163
|
+
}, []);
|
|
164
|
+
var onSelectTableOption = (0, _react.useCallback)(function (option) {
|
|
165
|
+
setCurrentRepoOption(option);
|
|
166
|
+
setRepoErrorMessage('');
|
|
167
|
+
}, []);
|
|
168
|
+
var close = (0, _react.useMemo)(function () {
|
|
169
|
+
return /*#__PURE__*/_react["default"].createElement("span", {
|
|
170
|
+
className: "sdoc-add-link-close-icon",
|
|
171
|
+
onClick: closeDialog
|
|
172
|
+
}, /*#__PURE__*/_react["default"].createElement("i", {
|
|
173
|
+
className: "sdocfont sdoc-sm-close",
|
|
174
|
+
"aria-hidden": "true"
|
|
175
|
+
}));
|
|
176
|
+
}, [closeDialog]);
|
|
177
|
+
return /*#__PURE__*/_react["default"].createElement(_reactstrap.Modal, {
|
|
178
|
+
isOpen: true,
|
|
179
|
+
autoFocus: false,
|
|
180
|
+
toggle: closeDialog,
|
|
181
|
+
className: className,
|
|
182
|
+
zIndex: 1071,
|
|
183
|
+
returnFocusAfterClose: false
|
|
184
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactstrap.ModalHeader, {
|
|
185
|
+
close: close
|
|
186
|
+
}, t('Insert_file_view')), /*#__PURE__*/_react["default"].createElement(_reactstrap.ModalBody, null, isLoading && /*#__PURE__*/_react["default"].createElement(_loading["default"], null), !isLoading && repoOptions.length === 0 && /*#__PURE__*/_react["default"].createElement("div", {
|
|
187
|
+
className: ""
|
|
188
|
+
}, t('Linked_repo_tip')), !isLoading && repoOptions.length !== 0 && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("div", {
|
|
189
|
+
className: "form-group"
|
|
190
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactstrap.Label, {
|
|
191
|
+
"for": "addTitle"
|
|
192
|
+
}, t('View_name')), /*#__PURE__*/_react["default"].createElement("input", {
|
|
193
|
+
onKeyDown: onKeyDown,
|
|
194
|
+
type: "text",
|
|
195
|
+
className: "form-control",
|
|
196
|
+
id: "addTitle",
|
|
197
|
+
value: data.view_name,
|
|
198
|
+
onChange: onValueChanged
|
|
199
|
+
}), viewNameErrorMessage && /*#__PURE__*/_react["default"].createElement(_reactstrap.Alert, {
|
|
200
|
+
color: "danger",
|
|
201
|
+
className: "mt-2"
|
|
202
|
+
}, t(viewNameErrorMessage))), /*#__PURE__*/_react["default"].createElement("div", {
|
|
203
|
+
className: "form-group"
|
|
204
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactstrap.Label, null, t('View_type')), /*#__PURE__*/_react["default"].createElement(_dropdownSelect["default"], {
|
|
205
|
+
selectedOption: currentTypeOption,
|
|
206
|
+
options: TYPE_OPERATIONS,
|
|
207
|
+
onSelectOption: onSelectTypeOption,
|
|
208
|
+
isInModal: true
|
|
209
|
+
}), typeErrorMessage && /*#__PURE__*/_react["default"].createElement(_reactstrap.Alert, {
|
|
210
|
+
color: "danger",
|
|
211
|
+
className: "mt-2"
|
|
212
|
+
}, t(typeErrorMessage))), /*#__PURE__*/_react["default"].createElement("div", {
|
|
213
|
+
className: "form-group"
|
|
214
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactstrap.Label, null, t('Linked_library')), /*#__PURE__*/_react["default"].createElement(_dropdownSelect["default"], {
|
|
215
|
+
hasIcon: true,
|
|
216
|
+
selectedOption: currentRepoOption,
|
|
217
|
+
options: repoOptions,
|
|
218
|
+
onSelectOption: onSelectTableOption,
|
|
219
|
+
isInModal: true
|
|
220
|
+
}), repoErrorMessage && /*#__PURE__*/_react["default"].createElement(_reactstrap.Alert, {
|
|
221
|
+
color: "danger",
|
|
222
|
+
className: "mt-2"
|
|
223
|
+
}, t(repoErrorMessage))))), !isLoading && repoOptions.length !== 0 && /*#__PURE__*/_react["default"].createElement(_reactstrap.ModalFooter, null, /*#__PURE__*/_react["default"].createElement(_reactstrap.Button, {
|
|
224
|
+
color: "secondary",
|
|
225
|
+
onClick: closeDialog
|
|
226
|
+
}, t('Cancel')), /*#__PURE__*/_react["default"].createElement(_reactstrap.Button, {
|
|
227
|
+
color: "primary",
|
|
228
|
+
disabled: false,
|
|
229
|
+
onClick: submit
|
|
230
|
+
}, t('Submit'))));
|
|
231
|
+
};
|
|
232
|
+
var _default = exports["default"] = InsertViewDialog;
|
|
@@ -0,0 +1,41 @@
|
|
|
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 _react = _interopRequireDefault(require("react"));
|
|
13
|
+
var _reactDom = require("react-dom");
|
|
14
|
+
var modalRoot = document.getElementById('modal-wrapper');
|
|
15
|
+
var ModalPortal = /*#__PURE__*/function (_React$Component) {
|
|
16
|
+
function ModalPortal(props) {
|
|
17
|
+
var _this;
|
|
18
|
+
(0, _classCallCheck2["default"])(this, ModalPortal);
|
|
19
|
+
_this = (0, _callSuper2["default"])(this, ModalPortal, [props]);
|
|
20
|
+
_this.el = document.createElement('div');
|
|
21
|
+
return _this;
|
|
22
|
+
}
|
|
23
|
+
(0, _inherits2["default"])(ModalPortal, _React$Component);
|
|
24
|
+
return (0, _createClass2["default"])(ModalPortal, [{
|
|
25
|
+
key: "componentDidMount",
|
|
26
|
+
value: function componentDidMount() {
|
|
27
|
+
modalRoot.appendChild(this.el);
|
|
28
|
+
}
|
|
29
|
+
}, {
|
|
30
|
+
key: "componentWillUnmount",
|
|
31
|
+
value: function componentWillUnmount() {
|
|
32
|
+
modalRoot.removeChild(this.el);
|
|
33
|
+
}
|
|
34
|
+
}, {
|
|
35
|
+
key: "render",
|
|
36
|
+
value: function render() {
|
|
37
|
+
return /*#__PURE__*/(0, _reactDom.createPortal)(this.props.children, this.el);
|
|
38
|
+
}
|
|
39
|
+
}]);
|
|
40
|
+
}(_react["default"].Component);
|
|
41
|
+
var _default = exports["default"] = ModalPortal;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports["default"] = void 0;
|
|
8
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
|
|
9
|
+
var _slate = require("@seafile/slate");
|
|
10
|
+
var _isHotkey = _interopRequireDefault(require("is-hotkey"));
|
|
11
|
+
var _constants = require("../../constants");
|
|
12
|
+
var _core = require("../../core");
|
|
13
|
+
var _helpers = require("../../toolbar/side-toolbar/helpers");
|
|
14
|
+
var withFileView = function withFileView(editor) {
|
|
15
|
+
var isVoid = editor.isVoid,
|
|
16
|
+
onHotKeyDown = editor.onHotKeyDown,
|
|
17
|
+
normalizeNode = editor.normalizeNode;
|
|
18
|
+
var newEditor = editor;
|
|
19
|
+
|
|
20
|
+
// Make video as void node
|
|
21
|
+
newEditor.isVoid = function (elem) {
|
|
22
|
+
var type = elem.type;
|
|
23
|
+
if (type === _constants.FILE_VIEW) {
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
return isVoid(elem);
|
|
27
|
+
};
|
|
28
|
+
newEditor.onHotKeyDown = function (event) {
|
|
29
|
+
var _ref = (0, _core.getSelectedNodeEntryByType)(editor, _constants.FILE_VIEW) || [],
|
|
30
|
+
_ref2 = (0, _slicedToArray2["default"])(_ref, 2),
|
|
31
|
+
fileNode = _ref2[0],
|
|
32
|
+
path = _ref2[1];
|
|
33
|
+
if (path) {
|
|
34
|
+
// Insert empty paragraph node after video when clicking 'enter' on selected video
|
|
35
|
+
if ((0, _isHotkey["default"])('enter', event)) {
|
|
36
|
+
event.preventDefault();
|
|
37
|
+
var emptyParagraph = (0, _core.generateEmptyElement)(_constants.PARAGRAPH);
|
|
38
|
+
_slate.Transforms.insertNodes(editor, emptyParagraph, {
|
|
39
|
+
at: _slate.Path.next(path)
|
|
40
|
+
});
|
|
41
|
+
var focusPoint = _slate.Editor.end(editor, _slate.Path.next(path));
|
|
42
|
+
(0, _core.focusEditor)(newEditor, focusPoint);
|
|
43
|
+
}
|
|
44
|
+
if ((0, _isHotkey["default"])('mod+c', event)) {
|
|
45
|
+
(0, _helpers.onCopyNode)(editor, fileNode);
|
|
46
|
+
}
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
return onHotKeyDown && onHotKeyDown(event);
|
|
50
|
+
};
|
|
51
|
+
newEditor.normalizeNode = function (_ref3) {
|
|
52
|
+
var _ref4 = (0, _slicedToArray2["default"])(_ref3, 2),
|
|
53
|
+
node = _ref4[0],
|
|
54
|
+
path = _ref4[1];
|
|
55
|
+
var type = (0, _core.getNodeType)(node);
|
|
56
|
+
if (type !== _constants.ELEMENT_TYPE.FILE_VIEW) {
|
|
57
|
+
return normalizeNode([node, path]);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// insert empty node,continue editor
|
|
61
|
+
var isLast = (0, _core.isLastNode)(newEditor, node);
|
|
62
|
+
if (isLast) {
|
|
63
|
+
var p = (0, _core.generateEmptyElement)(_constants.PARAGRAPH);
|
|
64
|
+
_slate.Transforms.insertNodes(newEditor, p, {
|
|
65
|
+
at: [path[0] + 1]
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
return newEditor;
|
|
70
|
+
};
|
|
71
|
+
var _default = exports["default"] = withFileView;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
.sdoc-file-view-container {
|
|
2
|
+
position: relative;
|
|
3
|
+
display: flex;
|
|
4
|
+
flex-direction: column;
|
|
5
|
+
border: 2px;
|
|
6
|
+
border: 2px solid #eee;
|
|
7
|
+
border-radius: 4px;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.sdoc-file-view-container.is-selected {
|
|
11
|
+
border: 2px solid rgb(0, 123, 255);
|
|
12
|
+
border-radius: 4px;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.sdoc-file-view-container .sdoc-file-view-title {
|
|
16
|
+
position: absolute;
|
|
17
|
+
height: 44px;
|
|
18
|
+
line-height: 44px;
|
|
19
|
+
top: 0px;
|
|
20
|
+
left: 0px;
|
|
21
|
+
z-index: 10;
|
|
22
|
+
height: 44px;
|
|
23
|
+
line-height: 44px;
|
|
24
|
+
margin-left: 16px;
|
|
25
|
+
cursor: pointer;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.sdoc-file-view-container .sdoc-file-view-content {
|
|
29
|
+
position: relative;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.sdoc-file-view-container .iframe-skeleton {
|
|
33
|
+
position: absolute;
|
|
34
|
+
left: 0;
|
|
35
|
+
right: 0;
|
|
36
|
+
top: 0;
|
|
37
|
+
bottom: 0;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.sdoc-file-view-container .iframe-skeleton {
|
|
41
|
+
display: flex;
|
|
42
|
+
align-items: center;
|
|
43
|
+
justify-content: center;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.sdoc-file-view-container .sdoc-file-view-mask {
|
|
47
|
+
position: absolute;
|
|
48
|
+
left: 0;
|
|
49
|
+
right: 0;
|
|
50
|
+
top: 0;
|
|
51
|
+
bottom: 0;
|
|
52
|
+
background-color: transparent;
|
|
53
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
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.renderFileView = void 0;
|
|
9
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
|
|
10
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
|
|
11
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
12
|
+
var _slateReact = require("@seafile/slate-react");
|
|
13
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
14
|
+
var _fileLoading = _interopRequireDefault(require("../../../../components/file-loading"));
|
|
15
|
+
var _toast = _interopRequireDefault(require("../../../../components/toast"));
|
|
16
|
+
var _context = _interopRequireDefault(require("../../../../context"));
|
|
17
|
+
var _commonUtils = require("../../../../utils/common-utils");
|
|
18
|
+
var _localStorageUtils = _interopRequireDefault(require("../../../../utils/local-storage-utils"));
|
|
19
|
+
var _constants = require("../../../constants");
|
|
20
|
+
var _helpers = require("../helpers");
|
|
21
|
+
require("./index.css");
|
|
22
|
+
var FileView = function FileView(_ref) {
|
|
23
|
+
var element = _ref.element,
|
|
24
|
+
children = _ref.children,
|
|
25
|
+
attributes = _ref.attributes;
|
|
26
|
+
var data = element.data;
|
|
27
|
+
var editor = (0, _slateReact.useSlateStatic)();
|
|
28
|
+
var isSelected = (0, _slateReact.useSelected)();
|
|
29
|
+
var _useState = (0, _react.useState)(true),
|
|
30
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
31
|
+
isLoading = _useState2[0],
|
|
32
|
+
setIsLoading = _useState2[1];
|
|
33
|
+
var _useState3 = (0, _react.useState)(true),
|
|
34
|
+
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
35
|
+
isShowMask = _useState4[0],
|
|
36
|
+
setIsShowMask = _useState4[1];
|
|
37
|
+
(0, _react.useEffect)(function () {
|
|
38
|
+
if (!isSelected) {
|
|
39
|
+
setIsShowMask(true);
|
|
40
|
+
}
|
|
41
|
+
}, [isSelected]);
|
|
42
|
+
(0, _react.useEffect)(function () {
|
|
43
|
+
var copyContent = _localStorageUtils["default"].getItem(_constants.RECENT_COPY_CONTENT);
|
|
44
|
+
var wikiId = _context["default"].getSetting('wikiId');
|
|
45
|
+
if (wikiId !== data.wiki_id) return;
|
|
46
|
+
if (!copyContent) return;
|
|
47
|
+
var stringContent = JSON.stringify(copyContent);
|
|
48
|
+
if (stringContent.indexOf(data.wiki_id) > -1 && stringContent.indexOf(data.view_id) > -1) {
|
|
49
|
+
_context["default"].duplicateWikiView(data.view_id).then(function (res) {
|
|
50
|
+
var view = res.data.view;
|
|
51
|
+
var newData = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, data), {}, {
|
|
52
|
+
view_id: view._id,
|
|
53
|
+
view_name: view.name
|
|
54
|
+
});
|
|
55
|
+
(0, _helpers.updateFileView)(newData, editor, element);
|
|
56
|
+
})["catch"](function (error) {
|
|
57
|
+
var errorMessage = (0, _commonUtils.getErrorMsg)(error);
|
|
58
|
+
_toast["default"].danger(errorMessage);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
62
|
+
}, []);
|
|
63
|
+
var handleLoad = (0, _react.useCallback)(function () {
|
|
64
|
+
setIsLoading(false);
|
|
65
|
+
}, []);
|
|
66
|
+
var onClick = (0, _react.useCallback)(function () {
|
|
67
|
+
setIsShowMask(false);
|
|
68
|
+
}, []);
|
|
69
|
+
return /*#__PURE__*/_react["default"].createElement("div", Object.assign({
|
|
70
|
+
"data-id": element.id
|
|
71
|
+
}, attributes, {
|
|
72
|
+
className: (0, _classnames["default"])('sdoc-file-view-container', {
|
|
73
|
+
'is-selected': isSelected
|
|
74
|
+
}),
|
|
75
|
+
contentEditable: "false",
|
|
76
|
+
suppressContentEditableWarning: true
|
|
77
|
+
}), /*#__PURE__*/_react["default"].createElement("div", {
|
|
78
|
+
className: "sdoc-file-view-title"
|
|
79
|
+
}, data.view_name), /*#__PURE__*/_react["default"].createElement("div", {
|
|
80
|
+
className: "sdoc-file-view-content"
|
|
81
|
+
}, /*#__PURE__*/_react["default"].createElement("iframe", {
|
|
82
|
+
className: "sdoc-file-view-element",
|
|
83
|
+
title: data.view_name,
|
|
84
|
+
src: (0, _helpers.getFileUrl)(element),
|
|
85
|
+
onLoad: handleLoad,
|
|
86
|
+
style: {
|
|
87
|
+
width: '100%',
|
|
88
|
+
height: '100%',
|
|
89
|
+
border: 'none',
|
|
90
|
+
opacity: isLoading ? 0 : 1,
|
|
91
|
+
transition: 'opacity 0.3s ease-in-out',
|
|
92
|
+
minHeight: '370px'
|
|
93
|
+
}
|
|
94
|
+
}), isLoading && /*#__PURE__*/_react["default"].createElement("div", {
|
|
95
|
+
className: "iframe-skeleton"
|
|
96
|
+
}, /*#__PURE__*/_react["default"].createElement(_fileLoading["default"], null)), !isLoading && isShowMask && /*#__PURE__*/_react["default"].createElement("div", {
|
|
97
|
+
className: "sdoc-file-view-mask",
|
|
98
|
+
onClick: onClick
|
|
99
|
+
})), children);
|
|
100
|
+
};
|
|
101
|
+
var renderFileView = exports.renderFileView = function renderFileView(props) {
|
|
102
|
+
return /*#__PURE__*/_react["default"].createElement(FileView, props);
|
|
103
|
+
};
|
|
@@ -8,7 +8,6 @@ exports["default"] = void 0;
|
|
|
8
8
|
var _slugid = _interopRequireDefault(require("slugid"));
|
|
9
9
|
var _localStorageUtils = _interopRequireDefault(require("../../../utils/local-storage-utils"));
|
|
10
10
|
var _constants = require("../../constants");
|
|
11
|
-
var _font = require("../../constants/font");
|
|
12
11
|
var _core = require("../../core");
|
|
13
12
|
var _helper = require("./helper");
|
|
14
13
|
var withHtml = function withHtml(editor) {
|
|
@@ -39,11 +38,11 @@ var withHtml = function withHtml(editor) {
|
|
|
39
38
|
var htmlContent = data.getData('text/html') || '';
|
|
40
39
|
if (htmlContent) {
|
|
41
40
|
var content = (0, _helper.deserializeHtml)(htmlContent);
|
|
42
|
-
_localStorageUtils["default"].setItem(
|
|
41
|
+
_localStorageUtils["default"].setItem(_constants.RECENT_COPY_CONTENT, htmlContent);
|
|
43
42
|
editor.insertFragment(content);
|
|
44
43
|
return;
|
|
45
44
|
}
|
|
46
|
-
_localStorageUtils["default"].setItem(
|
|
45
|
+
_localStorageUtils["default"].setItem(_constants.RECENT_COPY_CONTENT, data);
|
|
47
46
|
insertData(data);
|
|
48
47
|
}
|
|
49
48
|
};
|
|
@@ -14,7 +14,7 @@ var _slate = require("@seafile/slate");
|
|
|
14
14
|
var _slateReact = require("@seafile/slate-react");
|
|
15
15
|
var _context3 = _interopRequireDefault(require("../../../context"));
|
|
16
16
|
var _localStorageUtils = _interopRequireDefault(require("../../../utils/local-storage-utils"));
|
|
17
|
-
var
|
|
17
|
+
var _constants = require("../../constants");
|
|
18
18
|
var _helpers = require("./helpers");
|
|
19
19
|
var updateImageNode = /*#__PURE__*/function () {
|
|
20
20
|
var _ref = (0, _asyncToGenerator2["default"])(/*#__PURE__*/(0, _regenerator2["default"])().m(function _callee(editor, element, newUrl) {
|
|
@@ -70,7 +70,7 @@ var useCopyImage = function useCopyImage(_ref2) {
|
|
|
70
70
|
|
|
71
71
|
// not md convert to sdoc
|
|
72
72
|
if (url.indexOf('/file/images/auto-upload/') < 0) {
|
|
73
|
-
var cacheContent = _localStorageUtils["default"].getItem(
|
|
73
|
+
var cacheContent = _localStorageUtils["default"].getItem(_constants.RECENT_COPY_CONTENT);
|
|
74
74
|
// sync content from another user's copy
|
|
75
75
|
if (!cacheContent || JSON.stringify(cacheContent).indexOf(url) === -1) return;
|
|
76
76
|
}
|
|
@@ -35,6 +35,12 @@ Object.defineProperty(exports, "FileLinkPlugin", {
|
|
|
35
35
|
return _fileLink["default"];
|
|
36
36
|
}
|
|
37
37
|
});
|
|
38
|
+
Object.defineProperty(exports, "FileViewPlugin", {
|
|
39
|
+
enumerable: true,
|
|
40
|
+
get: function get() {
|
|
41
|
+
return _fileView["default"];
|
|
42
|
+
}
|
|
43
|
+
});
|
|
38
44
|
Object.defineProperty(exports, "FontPlugin", {
|
|
39
45
|
enumerable: true,
|
|
40
46
|
get: function get() {
|
|
@@ -161,6 +167,7 @@ var _callout = _interopRequireDefault(require("./callout"));
|
|
|
161
167
|
var _checkList = _interopRequireDefault(require("./check-list"));
|
|
162
168
|
var _codeBlock = _interopRequireDefault(require("./code-block"));
|
|
163
169
|
var _fileLink = _interopRequireDefault(require("./file-link"));
|
|
170
|
+
var _fileView = _interopRequireDefault(require("./file-view"));
|
|
164
171
|
var _font = _interopRequireDefault(require("./font"));
|
|
165
172
|
var _group = _interopRequireDefault(require("./group"));
|
|
166
173
|
var _header = _interopRequireDefault(require("./header"));
|
|
@@ -181,7 +188,7 @@ var _textStyle = _interopRequireDefault(require("./text-style"));
|
|
|
181
188
|
var _video = _interopRequireDefault(require("./video"));
|
|
182
189
|
var _whiteboard = _interopRequireDefault(require("./whiteboard"));
|
|
183
190
|
var _wikiLink = _interopRequireDefault(require("./wiki-link"));
|
|
184
|
-
var Plugins = [_markdown["default"], _html["default"], _header["default"], _link["default"], _blockquote["default"], _list["default"], _checkList["default"], _codeBlock["default"], _image["default"], _video["default"], _table["default"], _multiColumn["default"], _textStyle["default"], _textAlign["default"], _font["default"], _sdocLink["default"], _paragraph["default"], _fileLink["default"], _callout["default"], _searchReplace["default"], _quickInsert["default"], _group["default"], _whiteboard["default"]];
|
|
185
|
-
var WikiPlugins = exports.WikiPlugins = [].concat(Plugins, [_wikiLink["default"]]);
|
|
191
|
+
var Plugins = [_markdown["default"], _html["default"], _header["default"], _link["default"], _blockquote["default"], _list["default"], _checkList["default"], _codeBlock["default"], _image["default"], _video["default"], _table["default"], _multiColumn["default"], _textStyle["default"], _textAlign["default"], _font["default"], _sdocLink["default"], _paragraph["default"], _fileLink["default"], _callout["default"], _searchReplace["default"], _quickInsert["default"], _group["default"], _whiteboard["default"], _fileView["default"]];
|
|
192
|
+
var WikiPlugins = exports.WikiPlugins = [].concat(Plugins, [_wikiLink["default"], _fileView["default"]]);
|
|
186
193
|
var CommentPlugins = exports.CommentPlugins = [_markdown["default"], _html["default"], _paragraph["default"], _textStyle["default"], _list["default"], _image["default"], _link["default"], _mention["default"], _blockquote["default"]];
|
|
187
194
|
var _default = exports["default"] = Plugins;
|
|
@@ -107,7 +107,33 @@
|
|
|
107
107
|
|
|
108
108
|
.link-block-wrapper .link-block-container {
|
|
109
109
|
width: 100%;
|
|
110
|
-
|
|
110
|
+
padding: 5px 0;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
.link-block-wrapper .link-header-block-container {
|
|
114
|
+
width: 100%;
|
|
115
|
+
padding: 5px 0;
|
|
116
|
+
display: flex;
|
|
117
|
+
color: #495057;
|
|
118
|
+
cursor: pointer;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.link-block-wrapper .link-header-block-container:hover {
|
|
122
|
+
background-color: rgb(245, 245, 245);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.link-block-wrapper .link-header-block-container .heading-prefix {
|
|
126
|
+
margin-right: 6px;
|
|
127
|
+
padding-left: 0.75rem;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
.link-block-wrapper .link-header-block-container .linked-header-block-item {
|
|
131
|
+
display: block;
|
|
132
|
+
font-size: 15px;
|
|
133
|
+
margin-right: 5px;
|
|
134
|
+
overflow: hidden;
|
|
135
|
+
white-space: nowrap;
|
|
136
|
+
text-overflow: ellipsis;
|
|
111
137
|
}
|
|
112
138
|
|
|
113
139
|
.link-block-wrapper .link-block-container .linked-block-item {
|
|
@@ -117,6 +143,25 @@
|
|
|
117
143
|
padding-left: 0.75rem;
|
|
118
144
|
}
|
|
119
145
|
|
|
146
|
+
.selected-linked-block-wrapper .selected-linked-block .linked-header-block-item,
|
|
147
|
+
.selected-linked-block .sdoc-header-1,
|
|
148
|
+
.selected-linked-block .sdoc-header-2,
|
|
149
|
+
.selected-linked-block .sdoc-header-3,
|
|
150
|
+
.selected-linked-block .sdoc-header-4,
|
|
151
|
+
.selected-linked-block .sdoc-header-5,
|
|
152
|
+
.selected-linked-block .sdoc-header-6 {
|
|
153
|
+
color: #495057;
|
|
154
|
+
font-size: 15px !important;
|
|
155
|
+
font-weight: normal;
|
|
156
|
+
overflow: hidden;
|
|
157
|
+
white-space: nowrap;
|
|
158
|
+
text-overflow: ellipsis;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
.selected-linked-block-wrapper .selected-linked-block .heading-prefix {
|
|
162
|
+
display: none;
|
|
163
|
+
}
|
|
164
|
+
|
|
120
165
|
.link-block-wrapper .select-block-wrapper blockquote,
|
|
121
166
|
.link-block-wrapper .link-block-container blockquote {
|
|
122
167
|
border-left: 4px solid #ddd;
|