@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
|
@@ -64,30 +64,34 @@ var AddLinkDialog = function AddLinkDialog(_ref) {
|
|
|
64
64
|
_useState10 = (0, _slicedToArray2["default"])(_useState1, 2),
|
|
65
65
|
selectedBlockId = _useState10[0],
|
|
66
66
|
setSelectedBlockId = _useState10[1];
|
|
67
|
-
var _useState11 = (0, _react.useState)(
|
|
67
|
+
var _useState11 = (0, _react.useState)([]),
|
|
68
68
|
_useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
|
|
69
|
-
|
|
70
|
-
|
|
69
|
+
headerList = _useState12[0],
|
|
70
|
+
setheaderList = _useState12[1];
|
|
71
71
|
var _useState13 = (0, _react.useState)(false),
|
|
72
72
|
_useState14 = (0, _slicedToArray2["default"])(_useState13, 2),
|
|
73
|
-
|
|
74
|
-
|
|
73
|
+
isOpenSelect = _useState14[0],
|
|
74
|
+
setIsOpenSelect = _useState14[1];
|
|
75
75
|
var _useState15 = (0, _react.useState)(false),
|
|
76
76
|
_useState16 = (0, _slicedToArray2["default"])(_useState15, 2),
|
|
77
|
-
|
|
78
|
-
|
|
77
|
+
isOpenSelectHeader = _useState16[0],
|
|
78
|
+
setIsOpenSelectHeader = _useState16[1];
|
|
79
79
|
var _useState17 = (0, _react.useState)(false),
|
|
80
80
|
_useState18 = (0, _slicedToArray2["default"])(_useState17, 2),
|
|
81
|
-
|
|
82
|
-
|
|
81
|
+
isOpenSelectImageBlock = _useState18[0],
|
|
82
|
+
setIsOpenSelectImageBlock = _useState18[1];
|
|
83
83
|
var _useState19 = (0, _react.useState)(false),
|
|
84
84
|
_useState20 = (0, _slicedToArray2["default"])(_useState19, 2),
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
var _useState21 = (0, _react.useState)(
|
|
85
|
+
isOpenSelectCodeBlock = _useState20[0],
|
|
86
|
+
setIsOpenSelectCodeBlock = _useState20[1];
|
|
87
|
+
var _useState21 = (0, _react.useState)(false),
|
|
88
88
|
_useState22 = (0, _slicedToArray2["default"])(_useState21, 2),
|
|
89
|
-
|
|
90
|
-
|
|
89
|
+
isOpenSelectBlockquote = _useState22[0],
|
|
90
|
+
setIsOpenSelectBlockquote = _useState22[1];
|
|
91
|
+
var _useState23 = (0, _react.useState)(''),
|
|
92
|
+
_useState24 = (0, _slicedToArray2["default"])(_useState23, 2),
|
|
93
|
+
htmlString = _useState24[0],
|
|
94
|
+
setHtmlString = _useState24[1];
|
|
91
95
|
var submit = (0, _react.useCallback)(function () {
|
|
92
96
|
setLinkErrorMessage('');
|
|
93
97
|
setTitleErrorMessage('');
|
|
@@ -144,7 +148,7 @@ var AddLinkDialog = function AddLinkDialog(_ref) {
|
|
|
144
148
|
}));
|
|
145
149
|
}, [closeDialog]);
|
|
146
150
|
var handleOnChangeBlock = function handleOnChangeBlock(e) {
|
|
147
|
-
var block = e.target.closest('.linked-block-item');
|
|
151
|
+
var block = e.target.closest('.linked-block-item') || e.currentTarget.querySelector('.linked-header-block-item');
|
|
148
152
|
if (block) {
|
|
149
153
|
var clone = block.cloneNode(true);
|
|
150
154
|
var displayContainer = document.getElementById('selected-block-display');
|
|
@@ -173,8 +177,9 @@ var AddLinkDialog = function AddLinkDialog(_ref) {
|
|
|
173
177
|
return function () {
|
|
174
178
|
return clearTimeout(timer);
|
|
175
179
|
};
|
|
176
|
-
}, []);
|
|
180
|
+
}, [linked_id]);
|
|
177
181
|
(0, _react.useEffect)(function () {
|
|
182
|
+
// Get codeblock,blockquote,image html
|
|
178
183
|
var genHtml = /*#__PURE__*/function () {
|
|
179
184
|
var _ref3 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/(0, _regenerator2["default"])().m(function _callee() {
|
|
180
185
|
var list, mdValue, ids, processor, file;
|
|
@@ -207,7 +212,15 @@ var AddLinkDialog = function AddLinkDialog(_ref) {
|
|
|
207
212
|
}();
|
|
208
213
|
genHtml();
|
|
209
214
|
}, [editor.children]);
|
|
210
|
-
|
|
215
|
+
(0, _react.useEffect)(function () {
|
|
216
|
+
// Get header node list
|
|
217
|
+
var headerList = editor.children.filter(function (node) {
|
|
218
|
+
return _slate.Element.isElement(node) && !(0, _helpers.isEmptyNode)(node) && _constants.HEADERS.includes(node.type);
|
|
219
|
+
});
|
|
220
|
+
if (headerList.length > 0) {
|
|
221
|
+
setheaderList(headerList);
|
|
222
|
+
}
|
|
223
|
+
}, [editor.children]);
|
|
211
224
|
var imagesHTML = (0, _helpers.parseHtmlString)(htmlString, 'img');
|
|
212
225
|
var codeBlockHTML = (0, _helpers.parseHtmlString)(htmlString, 'pre');
|
|
213
226
|
var blockquoteHTML = (0, _helpers.parseHtmlString)(htmlString, 'blockquote');
|
|
@@ -279,7 +292,7 @@ var AddLinkDialog = function AddLinkDialog(_ref) {
|
|
|
279
292
|
className: "sdoc-file-icon sdoc-file-icon-toggle sdocfont sdoc-right-slide"
|
|
280
293
|
})), isOpenSelect && /*#__PURE__*/_react["default"].createElement("div", {
|
|
281
294
|
className: "link-block-wrapper"
|
|
282
|
-
},
|
|
295
|
+
}, headerList.length > 0 && /*#__PURE__*/_react["default"].createElement("div", {
|
|
283
296
|
className: (0, _classnames["default"])('select-block-wrapper', {
|
|
284
297
|
'expanded': isOpenSelectHeader
|
|
285
298
|
}),
|
|
@@ -290,14 +303,20 @@ var AddLinkDialog = function AddLinkDialog(_ref) {
|
|
|
290
303
|
className: "sdoc-file-icon sdoc-file-icon-toggle sdocfont sdoc-right-slide"
|
|
291
304
|
}), /*#__PURE__*/_react["default"].createElement("div", {
|
|
292
305
|
className: "title"
|
|
293
|
-
}, t('Header'))), isOpenSelectHeader &&
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
306
|
+
}, t('Header'))), isOpenSelectHeader && headerList.map(function (header, key) {
|
|
307
|
+
var headerContext = _slate.Node.string(header);
|
|
308
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
309
|
+
className: "link-header-block-container",
|
|
310
|
+
key: key,
|
|
311
|
+
onClick: function onClick(e) {
|
|
312
|
+
return handleOnChangeBlock(e);
|
|
313
|
+
}
|
|
314
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
315
|
+
className: "heading-prefix"
|
|
316
|
+
}, _constants.HEADER_TAG[header.type]), /*#__PURE__*/_react["default"].createElement("div", {
|
|
317
|
+
"data-id": header.id,
|
|
318
|
+
className: "linked-header-block-item"
|
|
319
|
+
}, headerContext));
|
|
301
320
|
}), imagesHTML && /*#__PURE__*/_react["default"].createElement("div", {
|
|
302
321
|
className: (0, _classnames["default"])('select-block-wrapper', {
|
|
303
322
|
'expanded': isOpenSelectImageBlock
|
|
@@ -252,7 +252,7 @@ var parseHtmlString = exports.parseHtmlString = function parseHtmlString(htmlStr
|
|
|
252
252
|
var parser = new DOMParser();
|
|
253
253
|
var doc = parser.parseFromString(htmlString, 'text/html');
|
|
254
254
|
var resultHtml;
|
|
255
|
-
if (targetType
|
|
255
|
+
if (targetType === 'img') {
|
|
256
256
|
resultHtml = (0, _toConsumableArray2["default"])(doc.querySelectorAll('p:has(img)')).map(function (p) {
|
|
257
257
|
return p.outerHTML;
|
|
258
258
|
}).join('');
|
|
@@ -264,6 +264,7 @@ var parseHtmlString = exports.parseHtmlString = function parseHtmlString(htmlStr
|
|
|
264
264
|
return resultHtml;
|
|
265
265
|
};
|
|
266
266
|
var isEmptyNode = exports.isEmptyNode = function isEmptyNode(node) {
|
|
267
|
+
if (node.type === _constants.IMAGE_BLOCK) return false;
|
|
267
268
|
var text = _slate.Node.string(node);
|
|
268
269
|
return text.trim() === '';
|
|
269
270
|
};
|
|
@@ -76,6 +76,7 @@ var RenderQuickInsert = function RenderQuickInsert(_ref, editor, readonly) {
|
|
|
76
76
|
document.addEventListener('click', handleClick);
|
|
77
77
|
scrollDom.addEventListener('scroll', handleScroll);
|
|
78
78
|
resizeObserver = new ResizeObserver(function (entries) {
|
|
79
|
+
// eslint-disable-next-line no-unused-vars
|
|
79
80
|
var _iterator = (0, _createForOfIteratorHelper2["default"])(entries),
|
|
80
81
|
_step;
|
|
81
82
|
try {
|
|
@@ -240,6 +240,12 @@ var CustomRenderElement = function CustomRenderElement(props) {
|
|
|
240
240
|
renderWhiteboard = _WhiteboardPlugin$ren[0];
|
|
241
241
|
return renderWhiteboard((0, _objectSpread2["default"])({}, props), editor);
|
|
242
242
|
}
|
|
243
|
+
case _elementType.FILE_VIEW:
|
|
244
|
+
{
|
|
245
|
+
var _FileViewPlugin$rende = (0, _slicedToArray2["default"])(_plugins.FileViewPlugin.renderElements, 1),
|
|
246
|
+
renderFileView = _FileViewPlugin$rende[0];
|
|
247
|
+
return renderFileView((0, _objectSpread2["default"])({}, props));
|
|
248
|
+
}
|
|
243
249
|
default:
|
|
244
250
|
{
|
|
245
251
|
var _ParagraphPlugin$rend3 = (0, _slicedToArray2["default"])(_plugins.ParagraphPlugin.renderElements, 1),
|
|
@@ -112,6 +112,16 @@ var QuickInsertBlockMenu = function QuickInsertBlockMenu(_ref) {
|
|
|
112
112
|
});
|
|
113
113
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
114
114
|
}, [insertPosition]);
|
|
115
|
+
var openFileViewDialog = (0, _react.useCallback)(function () {
|
|
116
|
+
callback && callback();
|
|
117
|
+
var eventBus = _eventBus["default"].getInstance();
|
|
118
|
+
eventBus.dispatch(_constants.INTERNAL_EVENT.INSERT_ELEMENT, {
|
|
119
|
+
type: _constants2.ELEMENT_TYPE.FILE_VIEW,
|
|
120
|
+
insertPosition: insertPosition,
|
|
121
|
+
slateNode: slateNode
|
|
122
|
+
});
|
|
123
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
124
|
+
}, [insertPosition]);
|
|
115
125
|
var onInsertCodeBlock = (0, _react.useCallback)(function () {
|
|
116
126
|
callback && callback();
|
|
117
127
|
var newInsertPosition = slateNode.type === _constants2.ELEMENT_TYPE.LIST_ITEM ? _constants2.INSERT_POSITION.AFTER : insertPosition;
|
|
@@ -203,7 +213,12 @@ var QuickInsertBlockMenu = function QuickInsertBlockMenu(_ref) {
|
|
|
203
213
|
(0, _helper2.insertMultiColumn)(editor, editor.selection, newInsertPosition, type);
|
|
204
214
|
}, [callback, editor, insertPosition, slateNode]);
|
|
205
215
|
var dropDownItems = (0, _react.useMemo)(function () {
|
|
206
|
-
var items = (0, _objectSpread4["default"])((0, _objectSpread4["default"])((0, _defineProperty2["default"])({}, _constants2.
|
|
216
|
+
var items = (0, _objectSpread4["default"])((0, _objectSpread4["default"])((0, _objectSpread4["default"])({}, editor.editorType === _constants.WIKI_EDITOR && (0, _defineProperty2["default"])({}, _constants2.FILE_VIEW, /*#__PURE__*/_react["default"].createElement(_dropdownMenuItem["default"], {
|
|
217
|
+
isHidden: !quickInsertMenuSearchMap[_constants2.FILE_VIEW],
|
|
218
|
+
key: "sdoc-insert-menu-file-view",
|
|
219
|
+
menuConfig: (0, _objectSpread4["default"])({}, _constants2.SIDE_INSERT_MENUS_CONFIG[_constants2.ELEMENT_TYPE.FILE_VIEW]),
|
|
220
|
+
onClick: openFileViewDialog
|
|
221
|
+
}))), {}, (0, _defineProperty2["default"])({}, _constants2.IMAGE, /*#__PURE__*/_react["default"].createElement(_dropdownMenuItem["default"], {
|
|
207
222
|
isHidden: !quickInsertMenuSearchMap[_constants2.IMAGE],
|
|
208
223
|
disabled: isDisableImage,
|
|
209
224
|
key: "sdoc-insert-menu-image",
|
|
@@ -6,8 +6,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
8
|
exports["default"] = void 0;
|
|
9
|
-
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
|
|
10
9
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/toConsumableArray"));
|
|
10
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
|
|
11
11
|
var _react = _interopRequireWildcard(require("react"));
|
|
12
12
|
var _reactI18next = require("react-i18next");
|
|
13
13
|
var _reactstrap = require("reactstrap");
|
|
@@ -142,7 +142,21 @@ var InsertBlockMenu = function InsertBlockMenu(_ref) {
|
|
|
142
142
|
var newInsertPosition = slateNode.type === _constants2.ELEMENT_TYPE.LIST_ITEM ? _constants2.INSERT_POSITION.AFTER : insertPosition;
|
|
143
143
|
(0, _helper2.insertMultiColumn)(editor, editor.selection, newInsertPosition, type);
|
|
144
144
|
}, [editor, insertPosition, slateNode]);
|
|
145
|
-
|
|
145
|
+
var insertFileView = (0, _react.useCallback)(function () {
|
|
146
|
+
var eventBus = _eventBus["default"].getInstance();
|
|
147
|
+
eventBus.dispatch(_constants.INTERNAL_EVENT.INSERT_ELEMENT, {
|
|
148
|
+
type: _constants2.ELEMENT_TYPE.FILE_VIEW,
|
|
149
|
+
insertPosition: insertPosition,
|
|
150
|
+
slateNode: slateNode
|
|
151
|
+
});
|
|
152
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
153
|
+
}, [insertPosition]);
|
|
154
|
+
console.log(editor.editorType);
|
|
155
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, editor.editorType === _constants.WIKI_EDITOR && /*#__PURE__*/_react["default"].createElement(_dropdownMenuItem["default"], {
|
|
156
|
+
isHidden: !insertMenuSearchMap[_constants2.ELEMENT_TYPE.FILE_VIEW],
|
|
157
|
+
menuConfig: (0, _objectSpread2["default"])({}, _constants2.SIDE_INSERT_MENUS_CONFIG[_constants2.ELEMENT_TYPE.FILE_VIEW]),
|
|
158
|
+
onClick: insertFileView
|
|
159
|
+
}), [_constants2.SIDE_INSERT_MENUS_CONFIG[_constants2.ELEMENT_TYPE.PARAGRAPH]].concat((0, _toConsumableArray2["default"])(_constants2.SIDE_INSERT_MENUS_CONFIG[_constants2.ELEMENT_TYPE.HEADER])).map(function (item) {
|
|
146
160
|
return /*#__PURE__*/_react["default"].createElement(_dropdownMenuItem["default"], {
|
|
147
161
|
isHidden: !insertMenuSearchMap[item.type],
|
|
148
162
|
disabled: isNodeEmpty && item.type === _constants2.PARAGRAPH,
|
package/dist/node-id/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
|
|
3
4
|
Object.defineProperty(exports, "__esModule", {
|
|
4
5
|
value: true
|
|
5
6
|
});
|
|
@@ -7,6 +8,7 @@ exports["default"] = void 0;
|
|
|
7
8
|
var _slate = require("@seafile/slate");
|
|
8
9
|
var _constants = require("../extension/constants");
|
|
9
10
|
var _documentUtils = require("../utils/document-utils");
|
|
11
|
+
var _localStorageUtils = _interopRequireDefault(require("../utils/local-storage-utils"));
|
|
10
12
|
var _helpers = require("./helpers");
|
|
11
13
|
var withNodeId = function withNodeId(editor) {
|
|
12
14
|
var apply = editor.apply,
|
|
@@ -65,6 +67,7 @@ var withNodeId = function withNodeId(editor) {
|
|
|
65
67
|
var cleaned = (0, _helpers.removeCommentMarks)(parsed);
|
|
66
68
|
var newData = (0, _helpers.replacePastedDataId)(cleaned);
|
|
67
69
|
var normalizeNewData = (0, _documentUtils.normalizeCopyNodes)(newEditor, newData);
|
|
70
|
+
_localStorageUtils["default"].setItem(_constants.RECENT_COPY_CONTENT, normalizeNewData);
|
|
68
71
|
newEditor.insertFragment(normalizeNewData);
|
|
69
72
|
return newEditor;
|
|
70
73
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seafile/sdoc-editor",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.2",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"test": "jest",
|
|
@@ -71,5 +71,5 @@
|
|
|
71
71
|
"publishConfig": {
|
|
72
72
|
"access": "public"
|
|
73
73
|
},
|
|
74
|
-
"gitHead": "
|
|
74
|
+
"gitHead": "6a60ac9e210680a19a336fc2a98dbae74795305d"
|
|
75
75
|
}
|