@seafile/seafile-editor 3.0.17 → 3.0.19
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/editors/slate-editor/index.js +4 -0
- package/dist/extension/plugins/link/helper.js +7 -2
- package/dist/extension/plugins/link/render-elem/index.js +9 -5
- package/dist/pages/markdown-editor.js +2 -0
- package/dist/slate-convert/html-to-slate/rules/list.js +39 -12
- package/dist/slate-convert/slate-to-md/transform.js +2 -1
- package/package.json +1 -1
|
@@ -20,9 +20,11 @@ var _useAttachments = _interopRequireDefault(require("../../hooks/use-attachment
|
|
|
20
20
|
var _common = require("../../utils/common");
|
|
21
21
|
var _outline = _interopRequireDefault(require("../../containers/outline"));
|
|
22
22
|
var _useContainerStyle = _interopRequireDefault(require("../../hooks/use-container-style"));
|
|
23
|
+
var _userLinkClick = _interopRequireDefault(require("../../hooks/user-link-click"));
|
|
23
24
|
require("./style.css");
|
|
24
25
|
const isMacOS = (0, _common.isMac)();
|
|
25
26
|
function SlateEditor(_ref) {
|
|
27
|
+
var _editor$api;
|
|
26
28
|
let {
|
|
27
29
|
value,
|
|
28
30
|
editorApi,
|
|
@@ -31,6 +33,7 @@ function SlateEditor(_ref) {
|
|
|
31
33
|
isReadonly,
|
|
32
34
|
isSupportFormula,
|
|
33
35
|
isSupportInsertSeafileImage,
|
|
36
|
+
onLinkClick,
|
|
34
37
|
children
|
|
35
38
|
} = _ref;
|
|
36
39
|
const scrollRef = (0, _react.useRef)(null);
|
|
@@ -49,6 +52,7 @@ function SlateEditor(_ref) {
|
|
|
49
52
|
return new _eventHandler.default(editor);
|
|
50
53
|
}, [editor]);
|
|
51
54
|
(0, _useAttachments.default)(editor);
|
|
55
|
+
(0, _userLinkClick.default)(editor._id, editor === null || editor === void 0 ? void 0 : (_editor$api = editor.api) === null || _editor$api === void 0 ? void 0 : _editor$api.server, onLinkClick);
|
|
52
56
|
const decorate = (0, _extension.useHighlight)(editor);
|
|
53
57
|
const onChange = (0, _react.useCallback)(value => {
|
|
54
58
|
setSlateValue(value);
|
|
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.upsertLinkText = exports.updateLink = exports.unWrapLinkNode = exports.isMenuDisabled = exports.isLinkType = exports.insertSeafileLink = exports.insertLink = exports.getLinkInfo = exports.generateLinkNode = void 0;
|
|
7
|
+
exports.upsertLinkText = exports.updateLink = exports.unWrapLinkNode = exports.isMenuDisabled = exports.isLinkType = exports.insertSeafileLink = exports.insertLink = exports.getLinkInfo = exports.getElementHref = exports.generateLinkNode = void 0;
|
|
8
8
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
|
|
9
9
|
var _slate = require("slate");
|
|
10
10
|
var _slugid = _interopRequireDefault(require("slugid"));
|
|
@@ -172,6 +172,11 @@ const insertSeafileLink = _ref => {
|
|
|
172
172
|
}
|
|
173
173
|
};
|
|
174
174
|
exports.insertSeafileLink = insertSeafileLink;
|
|
175
|
+
const getElementHref = element => {
|
|
176
|
+
if (!element) return '';
|
|
177
|
+
return element.href || element.url;
|
|
178
|
+
};
|
|
179
|
+
exports.getElementHref = getElementHref;
|
|
175
180
|
const getLinkInfo = editor => {
|
|
176
181
|
const isLinkNode = isLinkType(editor);
|
|
177
182
|
if (!isLinkNode) return null;
|
|
@@ -183,7 +188,7 @@ const getLinkInfo = editor => {
|
|
|
183
188
|
const [node, path] = match;
|
|
184
189
|
const showedText = (0, _queries.getEditorString)(editor, path);
|
|
185
190
|
return {
|
|
186
|
-
linkUrl: node
|
|
191
|
+
linkUrl: getElementHref(node),
|
|
187
192
|
linkTitle: showedText || node.title,
|
|
188
193
|
path: path
|
|
189
194
|
};
|
|
@@ -1,11 +1,12 @@
|
|
|
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
|
});
|
|
8
8
|
exports.default = void 0;
|
|
9
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
|
|
9
10
|
var _react = _interopRequireWildcard(require("react"));
|
|
10
11
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
11
12
|
var _slateReact = require("slate-react");
|
|
@@ -75,8 +76,11 @@ const renderLink = (_ref, editor) => {
|
|
|
75
76
|
const onHrefClick = (0, _react.useCallback)(e => {
|
|
76
77
|
e.preventDefault();
|
|
77
78
|
}, []);
|
|
79
|
+
const url = (0, _helper.getElementHref)(element);
|
|
78
80
|
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/(0, _react.isValidElement)(render) ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/(0, _react.cloneElement)(render, {
|
|
79
|
-
element,
|
|
81
|
+
element: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, element), {}, {
|
|
82
|
+
url
|
|
83
|
+
}),
|
|
80
84
|
isShowPopover,
|
|
81
85
|
onLinkClick,
|
|
82
86
|
onHrefClick,
|
|
@@ -85,16 +89,16 @@ const renderLink = (_ref, editor) => {
|
|
|
85
89
|
editor
|
|
86
90
|
})) : /*#__PURE__*/_react.default.createElement("span", Object.assign({
|
|
87
91
|
onClick: onLinkClick,
|
|
88
|
-
"data-url":
|
|
92
|
+
"data-url": url,
|
|
89
93
|
className: (0, _classnames.default)('sf-virtual-link', {
|
|
90
94
|
selected: isShowPopover
|
|
91
95
|
})
|
|
92
96
|
}, attributes), /*#__PURE__*/_react.default.createElement("a", {
|
|
93
|
-
href:
|
|
97
|
+
href: url,
|
|
94
98
|
onClick: onHrefClick
|
|
95
99
|
}, children)), isLinkActive && isShowPopover && /*#__PURE__*/_react.default.createElement(_linkPopover.default, {
|
|
96
100
|
popoverPosition: popoverPosition,
|
|
97
|
-
linkUrl:
|
|
101
|
+
linkUrl: url,
|
|
98
102
|
editor: editor,
|
|
99
103
|
onClosePopover: onClosePopover
|
|
100
104
|
}));
|
|
@@ -23,6 +23,7 @@ const SimpleEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
|
|
|
23
23
|
isSupportInsertSeafileImage,
|
|
24
24
|
onSave: propsOnSave,
|
|
25
25
|
onContentChanged: propsOnContentChanged,
|
|
26
|
+
onLinkClick,
|
|
26
27
|
children
|
|
27
28
|
} = _ref;
|
|
28
29
|
const [richValue, setRichValue] = (0, _react.useState)([]);
|
|
@@ -61,6 +62,7 @@ const SimpleEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
|
|
|
61
62
|
editorApi: editorApi,
|
|
62
63
|
onSave: propsOnSave,
|
|
63
64
|
onContentChanged: onContentChanged,
|
|
65
|
+
onLinkClick,
|
|
64
66
|
children: children
|
|
65
67
|
};
|
|
66
68
|
if (isFetching || isLoading || isLoadingMathJax) {
|
|
@@ -30,22 +30,49 @@ const listRule = (element, parseChild) => {
|
|
|
30
30
|
children: parseChild(childNodes)
|
|
31
31
|
};
|
|
32
32
|
}
|
|
33
|
-
if (nodeName === 'LI'
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
33
|
+
if (nodeName === 'LI') {
|
|
34
|
+
const parsedChildren = parseChild(childNodes);
|
|
35
|
+
const normalizedChildren = Array.isArray(parsedChildren) ? parsedChildren : parsedChildren ? [parsedChildren] : [];
|
|
36
|
+
const listItemChildren = [];
|
|
37
|
+
let inlineChildren = [];
|
|
38
|
+
const appendInlineParagraph = () => {
|
|
39
|
+
if (inlineChildren.length === 0) return;
|
|
40
|
+
listItemChildren.push({
|
|
41
|
+
id: _slugid.default.nice(),
|
|
42
|
+
type: _constants.PARAGRAPH,
|
|
43
|
+
children: inlineChildren
|
|
44
|
+
});
|
|
45
|
+
inlineChildren = [];
|
|
38
46
|
};
|
|
39
|
-
|
|
40
|
-
|
|
47
|
+
normalizedChildren.forEach(child => {
|
|
48
|
+
if (!child) return;
|
|
49
|
+
const isInlineNode = !child.type || _constants.INLINE_LEVEL_TYPES.includes(child.type);
|
|
50
|
+
if (isInlineNode) {
|
|
51
|
+
inlineChildren.push(child);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
appendInlineParagraph();
|
|
55
|
+
listItemChildren.push(child);
|
|
56
|
+
});
|
|
57
|
+
appendInlineParagraph();
|
|
58
|
+
if (listItemChildren.length === 0) {
|
|
59
|
+
listItemChildren.push({
|
|
60
|
+
id: _slugid.default.nice(),
|
|
61
|
+
type: _constants.PARAGRAPH,
|
|
62
|
+
children: [(0, _core.generateDefaultText)()]
|
|
63
|
+
});
|
|
64
|
+
} else if ([_constants.UNORDERED_LIST, _constants.ORDERED_LIST].includes(listItemChildren[0].type)) {
|
|
65
|
+
// Ensure nested list item content starts with a paragraph.
|
|
66
|
+
listItemChildren.unshift({
|
|
67
|
+
id: _slugid.default.nice(),
|
|
68
|
+
type: _constants.PARAGRAPH,
|
|
69
|
+
children: [(0, _core.generateDefaultText)()]
|
|
70
|
+
});
|
|
71
|
+
}
|
|
41
72
|
return {
|
|
42
73
|
id: _slugid.default.nice(),
|
|
43
74
|
type: _constants.LIST_ITEM,
|
|
44
|
-
children:
|
|
45
|
-
id: _slugid.default.nice(),
|
|
46
|
-
type: _constants.PARAGRAPH,
|
|
47
|
-
children: parseChild(childNodes)
|
|
48
|
-
}]
|
|
75
|
+
children: listItemChildren
|
|
49
76
|
};
|
|
50
77
|
}
|
|
51
78
|
if (PARAGRAPH_TAGS.includes(nodeName) && parentElement && parentElement.nodeName === 'LI') {
|
|
@@ -8,6 +8,7 @@ exports.formatSlateToMd = void 0;
|
|
|
8
8
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
|
|
9
9
|
var _slate = require("slate");
|
|
10
10
|
var _isPunctuationMark = _interopRequireDefault(require("../../utils/is-punctuation-mark"));
|
|
11
|
+
var _helper = require("../../extension/plugins/link/helper");
|
|
11
12
|
const formatInlineChildren = children => {
|
|
12
13
|
return children.reduce((ret, item, index) => {
|
|
13
14
|
if (index === 0) return [item];
|
|
@@ -123,7 +124,7 @@ const transformInlineChildren = (result, item) => {
|
|
|
123
124
|
if (item.type && item.type === 'link') {
|
|
124
125
|
const link = {
|
|
125
126
|
type: 'link',
|
|
126
|
-
url: item
|
|
127
|
+
url: (0, _helper.getElementHref)(item),
|
|
127
128
|
title: item.title || null,
|
|
128
129
|
children: [transformTextNode(item.children[0])]
|
|
129
130
|
};
|