@seafile/seafile-editor 2.0.34 → 2.0.36-beta
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/components/index.js +8 -1
- package/dist/components/link-verified-dialog/index.css +8 -0
- package/dist/components/link-verified-dialog/index.js +65 -0
- package/dist/components/modal-header/index.js +2 -2
- package/dist/editors/slate-viewer/index.js +6 -2
- package/dist/extension/constants/element-types.js +4 -2
- package/dist/extension/core/queries/index.js +17 -1
- package/dist/extension/plugins/definition/index.js +15 -0
- package/dist/extension/plugins/definition/render-elem/index.css +4 -0
- package/dist/extension/plugins/definition/render-elem/index.js +56 -0
- package/dist/extension/plugins/index.js +15 -1
- package/dist/extension/plugins/link-reference/index.js +17 -0
- package/dist/extension/plugins/link-reference/render-elem/index.css +1 -0
- package/dist/extension/plugins/link-reference/render-elem/index.js +52 -0
- package/dist/extension/render/render-element.js +21 -3
- package/dist/pages/markdown-view.js +13 -1
- package/dist/slate-convert/html-to-slate/rules/list.js +6 -4
- package/dist/slate-convert/md-to-slate/transform.js +32 -2
- package/package.json +2 -1
- package/public/locales/en/seafile-editor.json +4 -1
package/dist/components/index.js
CHANGED
|
@@ -10,6 +10,12 @@ Object.defineProperty(exports, "BrowserTip", {
|
|
|
10
10
|
return _browserTip.default;
|
|
11
11
|
}
|
|
12
12
|
});
|
|
13
|
+
Object.defineProperty(exports, "LinkVerifiedDialog", {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
get: function () {
|
|
16
|
+
return _linkVerifiedDialog.default;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
13
19
|
Object.defineProperty(exports, "LongTextModal", {
|
|
14
20
|
enumerable: true,
|
|
15
21
|
get: function () {
|
|
@@ -24,4 +30,5 @@ Object.defineProperty(exports, "ModalHeader", {
|
|
|
24
30
|
});
|
|
25
31
|
var _longtextModal = _interopRequireDefault(require("./longtext-modal"));
|
|
26
32
|
var _browserTip = _interopRequireDefault(require("./browser-tip"));
|
|
27
|
-
var _modalHeader = _interopRequireDefault(require("./modal-header"));
|
|
33
|
+
var _modalHeader = _interopRequireDefault(require("./modal-header"));
|
|
34
|
+
var _linkVerifiedDialog = _interopRequireDefault(require("./link-verified-dialog"));
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
10
|
+
var _reactstrap = require("reactstrap");
|
|
11
|
+
var _reactI18next = require("react-i18next");
|
|
12
|
+
var _copyToClipboard = _interopRequireDefault(require("copy-to-clipboard"));
|
|
13
|
+
var _modalHeader = _interopRequireDefault(require("../modal-header"));
|
|
14
|
+
var _constants = require("../../constants");
|
|
15
|
+
require("./index.css");
|
|
16
|
+
/* eslint-disable react-hooks/rules-of-hooks */
|
|
17
|
+
|
|
18
|
+
const LinkVerifiedDialog = _ref => {
|
|
19
|
+
let {
|
|
20
|
+
onToggle,
|
|
21
|
+
link
|
|
22
|
+
} = _ref;
|
|
23
|
+
const {
|
|
24
|
+
t
|
|
25
|
+
} = (0, _reactI18next.useTranslation)(_constants.TRANSLATE_NAMESPACE);
|
|
26
|
+
const copyLink = (0, _react.useCallback)(() => {
|
|
27
|
+
(0, _copyToClipboard.default)(link);
|
|
28
|
+
onToggle && onToggle();
|
|
29
|
+
}, [link, onToggle]);
|
|
30
|
+
const openLink = (0, _react.useCallback)(() => {
|
|
31
|
+
window.open(link);
|
|
32
|
+
onToggle && onToggle();
|
|
33
|
+
}, [link, onToggle]);
|
|
34
|
+
const {
|
|
35
|
+
host,
|
|
36
|
+
protocol,
|
|
37
|
+
pathname
|
|
38
|
+
} = new URL(link);
|
|
39
|
+
return /*#__PURE__*/_react.default.createElement(_reactstrap.Modal, {
|
|
40
|
+
isOpen: true,
|
|
41
|
+
toggle: onToggle,
|
|
42
|
+
className: "sf-link-verified-dialog",
|
|
43
|
+
zIndex: 1071
|
|
44
|
+
}, /*#__PURE__*/_react.default.createElement(_modalHeader.default, {
|
|
45
|
+
toggle: onToggle
|
|
46
|
+
}, /*#__PURE__*/_react.default.createElement("span", {
|
|
47
|
+
className: "mr-2"
|
|
48
|
+
}, t('This_link_is_not_verified'))), /*#__PURE__*/_react.default.createElement(_reactstrap.ModalBody, null, /*#__PURE__*/_react.default.createElement("p", {
|
|
49
|
+
className: "sf-tip-default mb-5"
|
|
50
|
+
}, t('This_link_is_not_verified_tip')), /*#__PURE__*/_react.default.createElement("div", {
|
|
51
|
+
className: "sf-verify-link"
|
|
52
|
+
}, /*#__PURE__*/_react.default.createElement("span", {
|
|
53
|
+
className: "sf-tip-default"
|
|
54
|
+
}, protocol + '//'), /*#__PURE__*/_react.default.createElement("span", null, host), /*#__PURE__*/_react.default.createElement("span", {
|
|
55
|
+
className: "sf-tip-default"
|
|
56
|
+
}, pathname))), /*#__PURE__*/_react.default.createElement(_reactstrap.ModalFooter, null, /*#__PURE__*/_react.default.createElement(_reactstrap.Button, {
|
|
57
|
+
onClick: copyLink,
|
|
58
|
+
className: "m-0 mr-2"
|
|
59
|
+
}, t('Copy_link')), /*#__PURE__*/_react.default.createElement(_reactstrap.Button, {
|
|
60
|
+
color: "primary",
|
|
61
|
+
className: "m-0",
|
|
62
|
+
onClick: openLink
|
|
63
|
+
}, t('Open_link'))));
|
|
64
|
+
};
|
|
65
|
+
var _default = exports.default = LinkVerifiedDialog;
|
|
@@ -16,10 +16,10 @@ function ModalHeader(_ref) {
|
|
|
16
16
|
let close = null;
|
|
17
17
|
if (toggle) {
|
|
18
18
|
close = /*#__PURE__*/_react.default.createElement("span", {
|
|
19
|
-
|
|
19
|
+
className: "sf-editor-close-icon",
|
|
20
20
|
onClick: toggle
|
|
21
21
|
}, /*#__PURE__*/_react.default.createElement("i", {
|
|
22
|
-
|
|
22
|
+
className: "iconfont icon-x",
|
|
23
23
|
"aria-hidden": "true"
|
|
24
24
|
}));
|
|
25
25
|
}
|
|
@@ -21,7 +21,8 @@ function SlateViewer(_ref) {
|
|
|
21
21
|
value,
|
|
22
22
|
isShowOutline,
|
|
23
23
|
scrollRef: externalScrollRef,
|
|
24
|
-
onLinkClick
|
|
24
|
+
onLinkClick,
|
|
25
|
+
...params
|
|
25
26
|
} = _ref;
|
|
26
27
|
const scrollRef = (0, _react.useRef)(null);
|
|
27
28
|
const {
|
|
@@ -69,7 +70,10 @@ function SlateViewer(_ref) {
|
|
|
69
70
|
}, /*#__PURE__*/_react.default.createElement(_extension.SetNodeToDecorations, null), /*#__PURE__*/_react.default.createElement(_slateReact.Editable, {
|
|
70
71
|
readOnly: true,
|
|
71
72
|
decorate: decorate,
|
|
72
|
-
renderElement: _extension.renderElement
|
|
73
|
+
renderElement: props => (0, _extension.renderElement)({
|
|
74
|
+
...params,
|
|
75
|
+
...props
|
|
76
|
+
}),
|
|
73
77
|
renderLeaf: _extension.renderLeaf
|
|
74
78
|
}))))))));
|
|
75
79
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.UNORDERED_LIST = exports.TABLE_ROW = exports.TABLE_CELL = exports.TABLE = exports.PARAGRAPH = exports.ORDERED_LIST = exports.LIST_ITEM = exports.LINK = exports.IMAGE = exports.HEADER6 = exports.HEADER5 = exports.HEADER4 = exports.HEADER3 = exports.HEADER2 = exports.HEADER1 = exports.HEADER = exports.FORMULA = exports.COLUMN = exports.CODE_LINE = exports.CODE_BLOCK = exports.CHECK_LIST_ITEM = exports.BLOCKQUOTE = void 0;
|
|
6
|
+
exports.UNORDERED_LIST = exports.TABLE_ROW = exports.TABLE_CELL = exports.TABLE = exports.PARAGRAPH = exports.ORDERED_LIST = exports.LIST_ITEM = exports.LINK_REFERENCE = exports.LINK = exports.IMAGE = exports.HEADER6 = exports.HEADER5 = exports.HEADER4 = exports.HEADER3 = exports.HEADER2 = exports.HEADER1 = exports.HEADER = exports.FORMULA = exports.DEFINITION = exports.COLUMN = exports.CODE_LINE = exports.CODE_BLOCK = exports.CHECK_LIST_ITEM = exports.BLOCKQUOTE = void 0;
|
|
7
7
|
const BLOCKQUOTE = exports.BLOCKQUOTE = 'blockquote';
|
|
8
8
|
const HEADER = exports.HEADER = 'header';
|
|
9
9
|
// each header type should be start with HEADER, all of justices should based on HEADER
|
|
@@ -26,4 +26,6 @@ const TABLE_CELL = exports.TABLE_CELL = 'table_cell';
|
|
|
26
26
|
const IMAGE = exports.IMAGE = 'image';
|
|
27
27
|
const LINK = exports.LINK = 'link';
|
|
28
28
|
const FORMULA = exports.FORMULA = 'formula';
|
|
29
|
-
const COLUMN = exports.COLUMN = 'column';
|
|
29
|
+
const COLUMN = exports.COLUMN = 'column';
|
|
30
|
+
const LINK_REFERENCE = exports.LINK_REFERENCE = 'link-reference';
|
|
31
|
+
const DEFINITION = exports.DEFINITION = 'definition';
|
|
@@ -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.isTextNode = exports.isStartPoint = exports.isSelectionAtBlockStart = exports.isSelectionAtBlockEnd = exports.isRangeAcrossBlocks = exports.isLastNode = exports.isLastChild = exports.isFirstNode = exports.isFirstChild = exports.isEndPoint = exports.isBlockTextEmptyAfterSelection = exports.isBlockAboveEmpty = exports.isAncestorEmpty = exports.getSelectedNodeEntryByTypes = exports.getSelectedNodeEntryByType = exports.getSelectedNodeByTypes = exports.getSelectedNodeByType = exports.getSelectedElems = exports.getQueryOptions = exports.getPreviousPath = exports.getPrevNode = exports.getParentNode = exports.getNodes = exports.getNodeType = exports.getNodePathById = exports.getNodeEntries = exports.getNode = exports.getNextSiblingNodes = exports.getNextNode = exports.getLastChildPath = exports.getLastChild = exports.getInlineNodes = exports.getEditorString = exports.getDeepInlineChildren = exports.getCommonNode = exports.getChildren = exports.getAboveNode = exports.getAboveBlockNode = exports.findPath = exports.findNode = exports.findDescendant = void 0;
|
|
7
|
+
exports.isTextNode = exports.isStartPoint = exports.isSelectionAtBlockStart = exports.isSelectionAtBlockEnd = exports.isRangeAcrossBlocks = exports.isLastNode = exports.isLastChild = exports.isFirstNode = exports.isFirstChild = exports.isEndPoint = exports.isBlockTextEmptyAfterSelection = exports.isBlockAboveEmpty = exports.isAncestorEmpty = exports.getSelectedNodeEntryByTypes = exports.getSelectedNodeEntryByType = exports.getSelectedNodeByTypes = exports.getSelectedNodeByType = exports.getSelectedElems = exports.getQueryOptions = exports.getPreviousPath = exports.getPrevNode = exports.getParentNode = exports.getNodesByType = exports.getNodes = exports.getNodeType = exports.getNodePathById = exports.getNodeEntries = exports.getNode = exports.getNextSiblingNodes = exports.getNextNode = exports.getLastChildPath = exports.getLastChild = exports.getInlineNodes = exports.getEditorString = exports.getDeepInlineChildren = exports.getCommonNode = exports.getChildren = exports.getAboveNode = exports.getAboveBlockNode = exports.findPath = exports.findNode = exports.findDescendant = void 0;
|
|
8
8
|
var _slate = require("slate");
|
|
9
9
|
var _slateReact = require("slate-react");
|
|
10
10
|
var _slugid = _interopRequireDefault(require("slugid"));
|
|
@@ -46,6 +46,22 @@ const getNode = (editor, path) => {
|
|
|
46
46
|
return node;
|
|
47
47
|
};
|
|
48
48
|
exports.getNode = getNode;
|
|
49
|
+
const getNodesByType = function () {
|
|
50
|
+
let target = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
51
|
+
let type = arguments.length > 1 ? arguments[1] : undefined;
|
|
52
|
+
let nodes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
|
|
53
|
+
Array.isArray(target) && target.forEach(n => {
|
|
54
|
+
if (n.type === type) {
|
|
55
|
+
nodes.push(n);
|
|
56
|
+
} else {
|
|
57
|
+
if (Array.isArray(n.children) && n.children.length > 0) {
|
|
58
|
+
getNodesByType(n, type, nodes);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
return nodes;
|
|
63
|
+
};
|
|
64
|
+
exports.getNodesByType = getNodesByType;
|
|
49
65
|
const getNodeType = node => {
|
|
50
66
|
return _slate.Element.isElement(node) ? node.type : '';
|
|
51
67
|
};
|
|
@@ -0,0 +1,15 @@
|
|
|
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 _elementTypes = require("../../constants/element-types");
|
|
9
|
+
var _renderElem = _interopRequireDefault(require("./render-elem"));
|
|
10
|
+
const DefinitionPlugin = {
|
|
11
|
+
type: _elementTypes.DEFINITION,
|
|
12
|
+
nodeType: 'element',
|
|
13
|
+
renderElements: [_renderElem.default]
|
|
14
|
+
};
|
|
15
|
+
var _default = exports.default = DefinitionPlugin;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
var _components = require("../../../../components");
|
|
10
|
+
require("./index.css");
|
|
11
|
+
/* eslint-disable react-hooks/rules-of-hooks */
|
|
12
|
+
|
|
13
|
+
const renderDefinition = (_ref, editor) => {
|
|
14
|
+
let {
|
|
15
|
+
attributes,
|
|
16
|
+
children,
|
|
17
|
+
element,
|
|
18
|
+
option
|
|
19
|
+
} = _ref;
|
|
20
|
+
const [isShowConfirmDialog, setIsShowConfirmDialog] = (0, _react.useState)(false);
|
|
21
|
+
const {
|
|
22
|
+
render
|
|
23
|
+
} = option || {};
|
|
24
|
+
const onHrefClick = (0, _react.useCallback)(event => {
|
|
25
|
+
event.preventDefault();
|
|
26
|
+
if (element.url.startsWith(window.location.origin)) {
|
|
27
|
+
window.open(element.url);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
setIsShowConfirmDialog(true);
|
|
31
|
+
}, [element.url]);
|
|
32
|
+
const onToggle = (0, _react.useCallback)(() => {
|
|
33
|
+
setIsShowConfirmDialog(!isShowConfirmDialog);
|
|
34
|
+
}, [isShowConfirmDialog]);
|
|
35
|
+
if ( /*#__PURE__*/(0, _react.isValidElement)(render)) {
|
|
36
|
+
return /*#__PURE__*/(0, _react.cloneElement)(render, {
|
|
37
|
+
element,
|
|
38
|
+
onClick: onHrefClick,
|
|
39
|
+
attributes,
|
|
40
|
+
editor
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("p", Object.assign({
|
|
44
|
+
"data-url": element.url,
|
|
45
|
+
"data-id": element.id,
|
|
46
|
+
className: "sf-virtual-definition"
|
|
47
|
+
}, attributes), /*#__PURE__*/_react.default.createElement("span", null, element.identifier + '. '), /*#__PURE__*/_react.default.createElement("a", {
|
|
48
|
+
href: element.url,
|
|
49
|
+
"data-url": element.url,
|
|
50
|
+
onClick: onHrefClick
|
|
51
|
+
}, children)), isShowConfirmDialog && /*#__PURE__*/_react.default.createElement(_components.LinkVerifiedDialog, {
|
|
52
|
+
link: element.url,
|
|
53
|
+
onToggle: onToggle
|
|
54
|
+
}));
|
|
55
|
+
};
|
|
56
|
+
var _default = exports.default = renderDefinition;
|
|
@@ -28,6 +28,12 @@ Object.defineProperty(exports, "ColumnPlugin", {
|
|
|
28
28
|
return _column.default;
|
|
29
29
|
}
|
|
30
30
|
});
|
|
31
|
+
Object.defineProperty(exports, "DefinitionPlugin", {
|
|
32
|
+
enumerable: true,
|
|
33
|
+
get: function () {
|
|
34
|
+
return _definition.default;
|
|
35
|
+
}
|
|
36
|
+
});
|
|
31
37
|
Object.defineProperty(exports, "FormulaPlugin", {
|
|
32
38
|
enumerable: true,
|
|
33
39
|
get: function () {
|
|
@@ -58,6 +64,12 @@ Object.defineProperty(exports, "LinkPlugin", {
|
|
|
58
64
|
return _link.default;
|
|
59
65
|
}
|
|
60
66
|
});
|
|
67
|
+
Object.defineProperty(exports, "LinkReferencePlugin", {
|
|
68
|
+
enumerable: true,
|
|
69
|
+
get: function () {
|
|
70
|
+
return _linkReference.default;
|
|
71
|
+
}
|
|
72
|
+
});
|
|
61
73
|
Object.defineProperty(exports, "ListPlugin", {
|
|
62
74
|
enumerable: true,
|
|
63
75
|
get: function () {
|
|
@@ -110,7 +122,9 @@ var _formula = _interopRequireDefault(require("./formula"));
|
|
|
110
122
|
var _column = _interopRequireDefault(require("./column"));
|
|
111
123
|
var _markdown = _interopRequireDefault(require("./markdown"));
|
|
112
124
|
var _html = _interopRequireDefault(require("./html"));
|
|
125
|
+
var _linkReference = _interopRequireDefault(require("./link-reference"));
|
|
126
|
+
var _definition = _interopRequireDefault(require("./definition"));
|
|
113
127
|
const Plugins = [_paragraph.default, _textStyle.default, _header.default, _image.default, _checkList.default, _list.default, _codeBlock.default, _table.default, _blockquote.default, _link.default, _formula.default, _markdown.default, _html.default, _column.default,
|
|
114
128
|
// put at the end
|
|
115
|
-
_nodeId.default];
|
|
129
|
+
_nodeId.default, _linkReference.default, _definition.default];
|
|
116
130
|
var _default = exports.default = Plugins;
|
|
@@ -0,0 +1,17 @@
|
|
|
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 _elementTypes = require("../../constants/element-types");
|
|
9
|
+
var _renderElem = _interopRequireDefault(require("./render-elem"));
|
|
10
|
+
const LinkReferencePlugin = {
|
|
11
|
+
type: _elementTypes.LINK_REFERENCE,
|
|
12
|
+
nodeType: 'element',
|
|
13
|
+
// editorMenus: [],
|
|
14
|
+
// editorPlugin: withLink,
|
|
15
|
+
renderElements: [_renderElem.default]
|
|
16
|
+
};
|
|
17
|
+
var _default = exports.default = LinkReferencePlugin;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
var _core = require("../../../core");
|
|
10
|
+
var _elementTypes = require("../../../constants/element-types");
|
|
11
|
+
require("./index.css");
|
|
12
|
+
/* eslint-disable react-hooks/rules-of-hooks */
|
|
13
|
+
|
|
14
|
+
const renderLinkReference = (_ref, editor) => {
|
|
15
|
+
let {
|
|
16
|
+
attributes,
|
|
17
|
+
children,
|
|
18
|
+
element,
|
|
19
|
+
option
|
|
20
|
+
} = _ref;
|
|
21
|
+
const {
|
|
22
|
+
render
|
|
23
|
+
} = option || {};
|
|
24
|
+
const onClick = (0, _react.useCallback)(() => {
|
|
25
|
+
const doms = (0, _core.getNodesByType)(editor.children, _elementTypes.DEFINITION);
|
|
26
|
+
const dom = doms.find(d => d.identifier === element.identifier);
|
|
27
|
+
if (!dom) return;
|
|
28
|
+
const selector = `[data-id="${dom.id}"]`;
|
|
29
|
+
const definitionDom = document.querySelector(selector);
|
|
30
|
+
if (!definitionDom) return;
|
|
31
|
+
definitionDom.scrollIntoView({
|
|
32
|
+
behavior: 'smooth',
|
|
33
|
+
block: 'center'
|
|
34
|
+
});
|
|
35
|
+
}, [element, editor]);
|
|
36
|
+
if (render && /*#__PURE__*/(0, _react.isValidElement)(render)) {
|
|
37
|
+
return /*#__PURE__*/(0, _react.cloneElement)(render, {
|
|
38
|
+
element,
|
|
39
|
+
onClick,
|
|
40
|
+
attributes,
|
|
41
|
+
editor
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
return /*#__PURE__*/_react.default.createElement("sup", Object.assign({
|
|
45
|
+
onClick: onClick,
|
|
46
|
+
className: "sf-virtual-link-reference",
|
|
47
|
+
"data-id": element.id
|
|
48
|
+
}, attributes, {
|
|
49
|
+
title: element.label
|
|
50
|
+
}), `[${element.identifier}]`);
|
|
51
|
+
};
|
|
52
|
+
var _default = exports.default = renderLinkReference;
|
|
@@ -10,10 +10,18 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
10
10
|
var _slateReact = require("slate-react");
|
|
11
11
|
var ElementType = _interopRequireWildcard(require("../constants/element-types"));
|
|
12
12
|
var _plugins = require("../plugins");
|
|
13
|
-
const SlateElement =
|
|
14
|
-
|
|
13
|
+
const SlateElement = _ref => {
|
|
14
|
+
let {
|
|
15
|
+
element,
|
|
16
|
+
options,
|
|
17
|
+
...params
|
|
18
|
+
} = _ref;
|
|
19
|
+
const option = options ? options[element.type] : null;
|
|
20
|
+
const props = {
|
|
21
|
+
...params,
|
|
22
|
+
option,
|
|
15
23
|
element
|
|
16
|
-
}
|
|
24
|
+
};
|
|
17
25
|
const editor = (0, _slateReact.useSlateStatic)();
|
|
18
26
|
switch (element.type) {
|
|
19
27
|
case ElementType.BLOCKQUOTE:
|
|
@@ -41,6 +49,16 @@ const SlateElement = props => {
|
|
|
41
49
|
const [renderLink] = _plugins.LinkPlugin.renderElements;
|
|
42
50
|
return renderLink(props, editor);
|
|
43
51
|
}
|
|
52
|
+
case ElementType.LINK_REFERENCE:
|
|
53
|
+
{
|
|
54
|
+
const [renderLinkReferencePlugin] = _plugins.LinkReferencePlugin.renderElements;
|
|
55
|
+
return renderLinkReferencePlugin(props, editor);
|
|
56
|
+
}
|
|
57
|
+
case ElementType.DEFINITION:
|
|
58
|
+
{
|
|
59
|
+
const [renderDefinition] = _plugins.DefinitionPlugin.renderElements;
|
|
60
|
+
return renderDefinition(props, editor);
|
|
61
|
+
}
|
|
44
62
|
case ElementType.CODE_BLOCK:
|
|
45
63
|
{
|
|
46
64
|
const [renderCodeBlock] = _plugins.CodeBlockPlugin.renderElements;
|
|
@@ -19,7 +19,8 @@ function MarkdownViewer(_ref) {
|
|
|
19
19
|
isShowOutline,
|
|
20
20
|
scrollRef,
|
|
21
21
|
onLinkClick,
|
|
22
|
-
beforeRenderCallback
|
|
22
|
+
beforeRenderCallback,
|
|
23
|
+
...params
|
|
23
24
|
} = _ref;
|
|
24
25
|
const [richValue, setRichValue] = (0, _react.useState)([]);
|
|
25
26
|
const [isLoading, setIsLoading] = (0, _react.useState)(true);
|
|
@@ -39,6 +40,7 @@ function MarkdownViewer(_ref) {
|
|
|
39
40
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
40
41
|
}, [isFetching, value]);
|
|
41
42
|
const props = {
|
|
43
|
+
...params,
|
|
42
44
|
isSupportFormula: !!mathJaxSource,
|
|
43
45
|
value: richValue,
|
|
44
46
|
isShowOutline: isShowOutline,
|
|
@@ -46,6 +48,16 @@ function MarkdownViewer(_ref) {
|
|
|
46
48
|
onLinkClick: onLinkClick
|
|
47
49
|
};
|
|
48
50
|
if (isFetching || isLoading || isLoadingMathJax) {
|
|
51
|
+
const {
|
|
52
|
+
options
|
|
53
|
+
} = params;
|
|
54
|
+
const loadingOption = (options === null || options === void 0 ? void 0 : options.loading) || {};
|
|
55
|
+
const {
|
|
56
|
+
render
|
|
57
|
+
} = loadingOption || {};
|
|
58
|
+
if (render && /*#__PURE__*/(0, _react.isValidElement)(render)) {
|
|
59
|
+
return /*#__PURE__*/(0, _react.cloneElement)(render);
|
|
60
|
+
}
|
|
49
61
|
return /*#__PURE__*/_react.default.createElement(_loading.default, null);
|
|
50
62
|
}
|
|
51
63
|
return /*#__PURE__*/_react.default.createElement(_slateViewer.default, props);
|
|
@@ -12,7 +12,9 @@ const PARAGRAPH_TAGS = ['DIV', 'P'];
|
|
|
12
12
|
const listRule = (element, parseChild) => {
|
|
13
13
|
const {
|
|
14
14
|
nodeName,
|
|
15
|
-
childNodes
|
|
15
|
+
childNodes,
|
|
16
|
+
firstChild,
|
|
17
|
+
parentElement
|
|
16
18
|
} = element;
|
|
17
19
|
if (nodeName === 'UL') {
|
|
18
20
|
return {
|
|
@@ -28,14 +30,14 @@ const listRule = (element, parseChild) => {
|
|
|
28
30
|
children: parseChild(childNodes)
|
|
29
31
|
};
|
|
30
32
|
}
|
|
31
|
-
if (nodeName === 'LI' && PARAGRAPH_TAGS.includes(
|
|
33
|
+
if (nodeName === 'LI' && firstChild && PARAGRAPH_TAGS.includes(firstChild.nodeName)) {
|
|
32
34
|
return {
|
|
33
35
|
id: _slugid.default.nice(),
|
|
34
36
|
type: _constants.LIST_ITEM,
|
|
35
37
|
children: parseChild(childNodes)
|
|
36
38
|
};
|
|
37
39
|
}
|
|
38
|
-
if (nodeName === 'LI' && !PARAGRAPH_TAGS.includes(
|
|
40
|
+
if (nodeName === 'LI' && firstChild && !PARAGRAPH_TAGS.includes(firstChild.nodeName)) {
|
|
39
41
|
return {
|
|
40
42
|
id: _slugid.default.nice(),
|
|
41
43
|
type: _constants.LIST_ITEM,
|
|
@@ -46,7 +48,7 @@ const listRule = (element, parseChild) => {
|
|
|
46
48
|
}]
|
|
47
49
|
};
|
|
48
50
|
}
|
|
49
|
-
if (PARAGRAPH_TAGS.includes(nodeName) &&
|
|
51
|
+
if (PARAGRAPH_TAGS.includes(nodeName) && parentElement && parentElement.nodeName === 'LI') {
|
|
50
52
|
if (Array.from(childNodes).length === 0) {
|
|
51
53
|
return {
|
|
52
54
|
id: _slugid.default.nice(),
|
|
@@ -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.transformUnorderedList = exports.transformTableRow = exports.transformTableCell = exports.transformTable = exports.transformParagraph = exports.transformOrderedList = exports.transformMath = exports.transformListItem = exports.transformListContent = exports.transformList = exports.transformHtml = exports.transformHr = exports.transformHeader = exports.transformCodeLine = exports.transformCodeBlock = exports.transformCheckListItem = exports.transformCheckList = exports.transformBlockquote = exports.transformBlockHtml = exports.formatMdToSlate = void 0;
|
|
7
|
+
exports.transformUnorderedList = exports.transformTableRow = exports.transformTableCell = exports.transformTable = exports.transformParagraph = exports.transformOrderedList = exports.transformMath = exports.transformListItem = exports.transformListContent = exports.transformList = exports.transformHtml = exports.transformHr = exports.transformHeader = exports.transformDefinition = exports.transformCodeLine = exports.transformCodeBlock = exports.transformCheckListItem = exports.transformCheckList = exports.transformBlockquote = exports.transformBlockHtml = exports.formatMdToSlate = void 0;
|
|
8
8
|
var _slugid = _interopRequireDefault(require("slugid"));
|
|
9
9
|
var _core = require("../../extension/core");
|
|
10
10
|
var _elementTypes = require("../../extension/constants/element-types");
|
|
@@ -99,6 +99,21 @@ const applyMarkForInlineItem = function (result, item) {
|
|
|
99
99
|
textNode = {};
|
|
100
100
|
return;
|
|
101
101
|
}
|
|
102
|
+
if (type === 'linkReference') {
|
|
103
|
+
var _item$children$;
|
|
104
|
+
textNode['type'] = _elementTypes.LINK_REFERENCE;
|
|
105
|
+
textNode['identifier'] = item.identifier;
|
|
106
|
+
textNode['referenceType'] = item.referenceType;
|
|
107
|
+
textNode['label'] = (_item$children$ = item.children[0]) === null || _item$children$ === void 0 ? void 0 : _item$children$.value;
|
|
108
|
+
textNode['children'] = [{
|
|
109
|
+
id: textNode.id,
|
|
110
|
+
text: ''
|
|
111
|
+
}];
|
|
112
|
+
result.push({
|
|
113
|
+
...textNode
|
|
114
|
+
});
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
102
117
|
const attr_key = INLINE_KEY_MAP[type];
|
|
103
118
|
if (!Array.isArray(children) || children.length === 0 || !attr_key) {
|
|
104
119
|
textNode['text'] = value || '';
|
|
@@ -351,6 +366,20 @@ const transformCodeBlock = node => {
|
|
|
351
366
|
};
|
|
352
367
|
};
|
|
353
368
|
exports.transformCodeBlock = transformCodeBlock;
|
|
369
|
+
const transformDefinition = node => {
|
|
370
|
+
return {
|
|
371
|
+
id: _slugid.default.nice(),
|
|
372
|
+
type: _elementTypes.DEFINITION,
|
|
373
|
+
identifier: node.identifier,
|
|
374
|
+
url: node === null || node === void 0 ? void 0 : node.url,
|
|
375
|
+
title: node === null || node === void 0 ? void 0 : node.title,
|
|
376
|
+
children: [{
|
|
377
|
+
id: _slugid.default.nice(),
|
|
378
|
+
text: node === null || node === void 0 ? void 0 : node.title
|
|
379
|
+
}]
|
|
380
|
+
};
|
|
381
|
+
};
|
|
382
|
+
exports.transformDefinition = transformDefinition;
|
|
354
383
|
const transformHr = node => {
|
|
355
384
|
return {
|
|
356
385
|
id: _slugid.default.nice(),
|
|
@@ -430,7 +459,8 @@ const elementHandlers = {
|
|
|
430
459
|
'code': transformCodeBlock,
|
|
431
460
|
'thematicBreak': transformHr,
|
|
432
461
|
'math': transformMath,
|
|
433
|
-
'html': transformBlockHtml
|
|
462
|
+
'html': transformBlockHtml,
|
|
463
|
+
'definition': transformDefinition
|
|
434
464
|
};
|
|
435
465
|
const formatMdToSlate = children => {
|
|
436
466
|
const validChildren = children.filter(child => elementHandlers[child.type]);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seafile/seafile-editor",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.36beta",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -87,6 +87,7 @@
|
|
|
87
87
|
"dependencies": {
|
|
88
88
|
"@seafile/react-image-lightbox": "4.0.2",
|
|
89
89
|
"classnames": "2.3.2",
|
|
90
|
+
"copy-to-clipboard": "3.3.1",
|
|
90
91
|
"deep-copy": "1.4.2",
|
|
91
92
|
"deepmerge": "4.3.1",
|
|
92
93
|
"is-url": "^1.2.4",
|
|
@@ -235,5 +235,8 @@
|
|
|
235
235
|
"Horizontal_align": "Horizontal align",
|
|
236
236
|
"Underline": "Underline",
|
|
237
237
|
"Row_number": "Row number",
|
|
238
|
-
"Column_number": "Column number"
|
|
238
|
+
"Column_number": "Column number",
|
|
239
|
+
"This_link_is_not_verified": "This link is not verified",
|
|
240
|
+
"This_link_is_not_verified_tip": "Before continuing, please ensure you trust this link. If you do not trust the URL, do not open the link to access the site.",
|
|
241
|
+
"Copy_link": "Copy link"
|
|
239
242
|
}
|