@seafile/seafile-editor 1.0.2 → 1.0.4
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/constants/event-types.js +2 -8
- package/dist/constants/hot-keys.js +1 -7
- package/dist/containers/article-info/index.js +24 -34
- package/dist/containers/custom/get-event-transfer.js +10 -16
- package/dist/containers/custom/set-event-transfer.js +10 -16
- package/dist/containers/hotkeys-helper/classify-hotkeys.js +20 -25
- package/dist/containers/hotkeys-helper/index.js +32 -35
- package/dist/containers/loading/index.js +11 -32
- package/dist/containers/outline/index.js +41 -51
- package/dist/containers/outline/outline-item.js +15 -21
- package/dist/editors/plain-markdown-editor/code-mirror.js +51 -75
- package/dist/editors/plain-markdown-editor/index.js +90 -107
- package/dist/editors/simple-slate-editor /index.js +43 -57
- package/dist/editors/simple-slate-editor /with-props-editor.js +4 -10
- package/dist/editors/slate-editor/editor-help/index.js +24 -37
- package/dist/editors/slate-editor/index.js +50 -64
- package/dist/editors/slate-editor/with-props-editor.js +4 -10
- package/dist/editors/slate-viewer/index.js +25 -31
- package/dist/extension/commons/element-popover/index.js +30 -55
- package/dist/extension/commons/index.js +3 -26
- package/dist/extension/commons/menu/index.js +4 -21
- package/dist/extension/commons/menu/menu-drop-down.js +50 -63
- package/dist/extension/commons/menu/menu-group.js +4 -11
- package/dist/extension/commons/menu/menu-item.js +25 -30
- package/dist/extension/commons/tooltip/index.js +14 -19
- package/dist/extension/constants/element-types.js +22 -28
- package/dist/extension/constants/index.js +15 -37
- package/dist/extension/constants/keyboard.js +3 -9
- package/dist/extension/constants/menus-config.js +118 -105
- package/dist/extension/core/index.js +3 -38
- package/dist/extension/core/queries/index.js +209 -304
- package/dist/extension/core/transforms/focus-editor.js +7 -13
- package/dist/extension/core/transforms/index.js +4 -49
- package/dist/extension/core/transforms/move-children.js +18 -25
- package/dist/extension/core/transforms/remove-node-children.js +8 -27
- package/dist/extension/core/transforms/replace-node-children.js +14 -19
- package/dist/extension/core/utils/index.js +36 -44
- package/dist/extension/editor.js +8 -15
- package/dist/extension/index.js +7 -48
- package/dist/extension/plugins/blockquote/helpers.js +38 -57
- package/dist/extension/plugins/blockquote/index.js +8 -15
- package/dist/extension/plugins/blockquote/menu/index.js +20 -25
- package/dist/extension/plugins/blockquote/plugin.js +35 -41
- package/dist/extension/plugins/blockquote/render-elem.js +9 -14
- package/dist/extension/plugins/check-list/helper.js +14 -24
- package/dist/extension/plugins/check-list/index.js +10 -17
- package/dist/extension/plugins/check-list/menu/index.js +21 -29
- package/dist/extension/plugins/check-list/plugin.js +24 -26
- package/dist/extension/plugins/check-list/render-elem.js +22 -28
- package/dist/extension/plugins/clear-format/helpers.js +25 -47
- package/dist/extension/plugins/clear-format/menu/index.js +22 -29
- package/dist/extension/plugins/code-block/helpers.js +74 -126
- package/dist/extension/plugins/code-block/index.js +10 -18
- package/dist/extension/plugins/code-block/menu/index.js +20 -27
- package/dist/extension/plugins/code-block/plugin.js +123 -144
- package/dist/extension/plugins/code-block/render-elem/constant.js +15 -11
- package/dist/extension/plugins/code-block/render-elem/index.js +30 -39
- package/dist/extension/plugins/code-block/render-elem/language-selector.js +19 -27
- package/dist/extension/plugins/formula/helper.js +39 -45
- package/dist/extension/plugins/formula/index.js +10 -17
- package/dist/extension/plugins/formula/menu/formula-modal.js +37 -52
- package/dist/extension/plugins/formula/menu/index.js +34 -50
- package/dist/extension/plugins/formula/plugin.js +12 -14
- package/dist/extension/plugins/formula/render-elem.js +27 -33
- package/dist/extension/plugins/header/helper.js +35 -48
- package/dist/extension/plugins/header/index.js +10 -17
- package/dist/extension/plugins/header/menu/index.js +52 -66
- package/dist/extension/plugins/header/plugin.js +72 -83
- package/dist/extension/plugins/header/render-elem.js +15 -20
- package/dist/extension/plugins/image/helper.js +28 -37
- package/dist/extension/plugins/image/index.js +10 -17
- package/dist/extension/plugins/image/menu/image-menu-dialog.js +31 -42
- package/dist/extension/plugins/image/menu/image-menu-popover.js +35 -67
- package/dist/extension/plugins/image/menu/index.js +24 -34
- package/dist/extension/plugins/image/plugin.js +18 -18
- package/dist/extension/plugins/image/render-element/image-previewer.js +32 -42
- package/dist/extension/plugins/image/render-element/index.js +58 -74
- package/dist/extension/plugins/index.js +18 -94
- package/dist/extension/plugins/link/helper.js +102 -139
- package/dist/extension/plugins/link/index.js +10 -17
- package/dist/extension/plugins/link/menu/index.js +46 -62
- package/dist/extension/plugins/link/menu/link-modal.js +67 -87
- package/dist/extension/plugins/link/plugin.js +52 -56
- package/dist/extension/plugins/link/render-elem/index.js +39 -54
- package/dist/extension/plugins/link/render-elem/link-popover.js +38 -42
- package/dist/extension/plugins/list/constant.js +2 -8
- package/dist/extension/plugins/list/helpers.js +40 -54
- package/dist/extension/plugins/list/index.js +10 -17
- package/dist/extension/plugins/list/menu/index.js +23 -33
- package/dist/extension/plugins/list/plugin/index.js +28 -31
- package/dist/extension/plugins/list/plugin/insert-break-list.js +9 -15
- package/dist/extension/plugins/list/plugin/insert-fragment-list.js +86 -109
- package/dist/extension/plugins/list/plugin/normalize-list.js +31 -42
- package/dist/extension/plugins/list/plugin/on-tab-handle.js +35 -34
- package/dist/extension/plugins/list/queries/index.js +22 -30
- package/dist/extension/plugins/list/render-elem/index.js +27 -27
- package/dist/extension/plugins/list/transforms/index.js +11 -75
- package/dist/extension/plugins/list/transforms/insert-list-item.js +38 -47
- package/dist/extension/plugins/list/transforms/move-list-item-down.js +22 -32
- package/dist/extension/plugins/list/transforms/move-list-item-up.js +45 -56
- package/dist/extension/plugins/list/transforms/move-list-items-to-list.js +25 -31
- package/dist/extension/plugins/list/transforms/move-list-items.js +37 -44
- package/dist/extension/plugins/list/transforms/normalize-list-item.js +57 -81
- package/dist/extension/plugins/list/transforms/normalize-nested-list.js +17 -26
- package/dist/extension/plugins/list/transforms/remove-first-list-item.js +12 -19
- package/dist/extension/plugins/list/transforms/transforms-to-list.js +60 -84
- package/dist/extension/plugins/list/transforms/unwrap-list.js +20 -29
- package/dist/extension/plugins/node-id/constants.js +9 -15
- package/dist/extension/plugins/node-id/helpers.js +33 -35
- package/dist/extension/plugins/node-id/index.js +4 -11
- package/dist/extension/plugins/node-id/with-node-id.js +18 -26
- package/dist/extension/plugins/paragraph/helper.js +7 -13
- package/dist/extension/plugins/paragraph/index.js +8 -15
- package/dist/extension/plugins/paragraph/plugin.js +25 -27
- package/dist/extension/plugins/paragraph/render-elem.js +9 -14
- package/dist/extension/plugins/table/constant.js +3 -9
- package/dist/extension/plugins/table/helper.js +133 -154
- package/dist/extension/plugins/table/index.js +11 -19
- package/dist/extension/plugins/table/menu/index.js +26 -38
- package/dist/extension/plugins/table/menu/table-operator.js +62 -77
- package/dist/extension/plugins/table/menu/table-size-selector.js +41 -62
- package/dist/extension/plugins/table/model.js +39 -41
- package/dist/extension/plugins/table/plugin.js +95 -102
- package/dist/extension/plugins/table/render-elem/context-menu.js +42 -65
- package/dist/extension/plugins/table/render-elem/index.js +85 -93
- package/dist/extension/plugins/table/table-operations.js +101 -118
- package/dist/extension/plugins/text-style/helpers.js +18 -28
- package/dist/extension/plugins/text-style/index.js +8 -15
- package/dist/extension/plugins/text-style/menu/index.js +19 -25
- package/dist/extension/plugins/text-style/plugin.js +16 -21
- package/dist/extension/plugins/text-style/render-elem.js +28 -33
- package/dist/extension/render/render-element.js +26 -47
- package/dist/extension/render/render-leaf.js +9 -18
- package/dist/extension/toolbar/header-toolbar/index.js +66 -84
- package/dist/extension/toolbar/index.js +2 -13
- package/dist/extension/toolbar/user-help/shortcut-dialog.js +108 -131
- package/dist/hooks/use-mathjax.js +9 -20
- package/dist/hooks/use-scroll-context.js +7 -12
- package/dist/hooks/use-selection-update.js +9 -21
- package/dist/index.js +9 -80
- package/dist/pages/markdown-editor.js +30 -43
- package/dist/pages/markdown-view.js +25 -37
- package/dist/pages/rich-markdown-editor.js +54 -67
- package/dist/pages/simple-editor.js +29 -42
- package/dist/slate-convert/html-to-slate/constants.js +26 -32
- package/dist/slate-convert/html-to-slate/helper.js +1 -7
- package/dist/slate-convert/html-to-slate/index.js +44 -51
- package/dist/slate-convert/html-to-slate/rules/blockquote.js +10 -15
- package/dist/slate-convert/html-to-slate/rules/check-list.js +10 -15
- package/dist/slate-convert/html-to-slate/rules/code-block.js +40 -51
- package/dist/slate-convert/html-to-slate/rules/header.js +11 -16
- package/dist/slate-convert/html-to-slate/rules/image.js +10 -15
- package/dist/slate-convert/html-to-slate/rules/index.js +11 -18
- package/dist/slate-convert/html-to-slate/rules/link.js +11 -16
- package/dist/slate-convert/html-to-slate/rules/list.js +21 -26
- package/dist/slate-convert/html-to-slate/rules/paragraph.js +10 -15
- package/dist/slate-convert/html-to-slate/rules/table.js +14 -19
- package/dist/slate-convert/html-to-slate/rules/text.js +14 -19
- package/dist/slate-convert/index.js +8 -34
- package/dist/slate-convert/md-to-html/index.js +26 -31
- package/dist/slate-convert/md-to-html/sanitize-schema.js +5 -12
- package/dist/slate-convert/md-to-slate/index.js +17 -23
- package/dist/slate-convert/md-to-slate/transform.js +183 -175
- package/dist/slate-convert/slate-to-md/index.js +14 -20
- package/dist/slate-convert/slate-to-md/transform.js +76 -87
- package/dist/utils/common.js +8 -15
- package/dist/utils/deserialize-html.js +118 -166
- package/dist/utils/dom-utils.js +18 -22
- package/dist/utils/event-bus.js +27 -47
- package/dist/utils/event-handler.js +29 -38
- package/dist/utils/object-utils.js +39 -62
- package/package.json +5 -4
|
@@ -1,64 +1,48 @@
|
|
|
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 _slateReact = require("slate-react");
|
|
13
|
-
var _reactI18next = require("react-i18next");
|
|
14
|
-
var _classnames = _interopRequireDefault(require("classnames"));
|
|
15
|
-
var _helper = require("../helper");
|
|
16
|
-
var _imagePreviewer = _interopRequireDefault(require("./image-previewer"));
|
|
17
|
-
require("./style.css");
|
|
18
1
|
/* eslint-disable react-hooks/rules-of-hooks */
|
|
19
|
-
|
|
20
|
-
|
|
2
|
+
import React, { useCallback, useRef, useState } from 'react';
|
|
3
|
+
import { useSelected } from 'slate-react';
|
|
4
|
+
import { useTranslation } from 'react-i18next';
|
|
5
|
+
import classNames from 'classnames';
|
|
6
|
+
import { updateImage } from '../helper';
|
|
7
|
+
import ImagePreviewer from './image-previewer';
|
|
8
|
+
import './style.css';
|
|
9
|
+
const renderImage = (_ref, editor) => {
|
|
21
10
|
var _element$data, _element$data2, _element$data3;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
var _useTranslation = (0, _reactI18next.useTranslation)(),
|
|
41
|
-
t = _useTranslation.t;
|
|
42
|
-
var imgRef = (0, _react.useRef)(null);
|
|
43
|
-
var resizerRef = (0, _react.useRef)();
|
|
44
|
-
var isSelected = (0, _slateReact.useSelected)();
|
|
45
|
-
var handleStartResize = function handleStartResize(event) {
|
|
11
|
+
let {
|
|
12
|
+
attributes,
|
|
13
|
+
children,
|
|
14
|
+
element
|
|
15
|
+
} = _ref;
|
|
16
|
+
const [isResizing, setIsResizing] = useState(false);
|
|
17
|
+
const [isFullScreening, setIsFullScreening] = useState(false);
|
|
18
|
+
const [imgSizeInfo, setImgSizeInfo] = useState({
|
|
19
|
+
height: 0,
|
|
20
|
+
width: 0
|
|
21
|
+
});
|
|
22
|
+
const {
|
|
23
|
+
t
|
|
24
|
+
} = useTranslation();
|
|
25
|
+
const imgRef = useRef(null);
|
|
26
|
+
const resizerRef = useRef();
|
|
27
|
+
const isSelected = useSelected();
|
|
28
|
+
const handleStartResize = event => {
|
|
46
29
|
event.stopPropagation();
|
|
47
|
-
|
|
48
|
-
height
|
|
49
|
-
width
|
|
30
|
+
const {
|
|
31
|
+
clientHeight: height,
|
|
32
|
+
clientWidth: width
|
|
33
|
+
} = imgRef.current;
|
|
50
34
|
setIsResizing(true);
|
|
51
35
|
setImgSizeInfo({
|
|
52
|
-
width
|
|
53
|
-
height
|
|
36
|
+
width,
|
|
37
|
+
height
|
|
54
38
|
});
|
|
55
|
-
|
|
39
|
+
const handleMouseMove = event => {
|
|
56
40
|
event.preventDefault();
|
|
57
41
|
event.stopPropagation();
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
42
|
+
const img = imgRef.current;
|
|
43
|
+
const resizer = resizerRef.current;
|
|
44
|
+
const changeX = event.clientX - resizer.getBoundingClientRect().left - 5;
|
|
45
|
+
const imageWidth = img.width + changeX;
|
|
62
46
|
if (imageWidth < 20) return;
|
|
63
47
|
img.width = imageWidth;
|
|
64
48
|
setImgSizeInfo({
|
|
@@ -66,57 +50,57 @@ var renderImage = function renderImage(_ref, editor) {
|
|
|
66
50
|
width: img.clientWidth
|
|
67
51
|
});
|
|
68
52
|
};
|
|
69
|
-
|
|
53
|
+
const handleMouseUp = () => {
|
|
70
54
|
document.removeEventListener('mousemove', handleMouseMove);
|
|
71
55
|
if (!isResizing) {
|
|
72
56
|
setIsResizing(false);
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
57
|
+
const {
|
|
58
|
+
clientHeight: height,
|
|
59
|
+
clientWidth: width
|
|
60
|
+
} = imgRef.current;
|
|
61
|
+
updateImage(editor, {
|
|
62
|
+
...element.data,
|
|
63
|
+
width,
|
|
64
|
+
height
|
|
65
|
+
});
|
|
80
66
|
}
|
|
81
67
|
document.removeEventListener('mouseup', handleMouseUp);
|
|
82
68
|
};
|
|
83
69
|
document.addEventListener('mousemove', handleMouseMove);
|
|
84
70
|
document.addEventListener('mouseup', handleMouseUp);
|
|
85
71
|
};
|
|
86
|
-
|
|
72
|
+
const toggleImagePreviewer = event => {
|
|
87
73
|
event.preventDefault();
|
|
88
74
|
setIsFullScreening(false);
|
|
89
75
|
};
|
|
90
|
-
return /*#__PURE__*/
|
|
76
|
+
return /*#__PURE__*/React.createElement("span", Object.assign({}, attributes, {
|
|
91
77
|
contentEditable: false,
|
|
92
78
|
className: "sf-image-wrapper"
|
|
93
|
-
}), /*#__PURE__*/
|
|
79
|
+
}), /*#__PURE__*/React.createElement("img", {
|
|
94
80
|
ref: imgRef,
|
|
95
|
-
className: (
|
|
81
|
+
className: classNames('sf-image', {
|
|
96
82
|
'selected': isSelected
|
|
97
83
|
}),
|
|
98
84
|
alt: element === null || element === void 0 ? void 0 : (_element$data = element.data) === null || _element$data === void 0 ? void 0 : _element$data.alt,
|
|
99
85
|
src: element === null || element === void 0 ? void 0 : (_element$data2 = element.data) === null || _element$data2 === void 0 ? void 0 : _element$data2.src,
|
|
100
86
|
width: element === null || element === void 0 ? void 0 : element.data.width,
|
|
101
87
|
height: element === null || element === void 0 ? void 0 : element.data.height
|
|
102
|
-
}), isSelected && /*#__PURE__*/
|
|
88
|
+
}), isSelected && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("span", {
|
|
103
89
|
ref: resizerRef,
|
|
104
90
|
className: "resizer",
|
|
105
91
|
onMouseDown: handleStartResize
|
|
106
|
-
}), /*#__PURE__*/
|
|
92
|
+
}), /*#__PURE__*/React.createElement("span", {
|
|
107
93
|
className: "full-screen",
|
|
108
94
|
contentEditable: false,
|
|
109
|
-
onClick:
|
|
110
|
-
|
|
111
|
-
}
|
|
112
|
-
}, /*#__PURE__*/_react.default.createElement("i", {
|
|
95
|
+
onClick: () => setIsFullScreening(true)
|
|
96
|
+
}, /*#__PURE__*/React.createElement("i", {
|
|
113
97
|
className: 'iconfont icon-fullscreen',
|
|
114
98
|
title: t('Full_screen')
|
|
115
|
-
}))), isResizing && /*#__PURE__*/
|
|
99
|
+
}))), isResizing && /*#__PURE__*/React.createElement("span", {
|
|
116
100
|
className: "image-size-info-tooltip"
|
|
117
|
-
}, "".concat(t('Width'), ":").concat(imgSizeInfo.width, " ").concat(t('Height'), ":").concat(imgSizeInfo.height)), isFullScreening && /*#__PURE__*/
|
|
101
|
+
}, "".concat(t('Width'), ":").concat(imgSizeInfo.width, " ").concat(t('Height'), ":").concat(imgSizeInfo.height)), isFullScreening && /*#__PURE__*/React.createElement(ImagePreviewer, {
|
|
118
102
|
imgUrl: element === null || element === void 0 ? void 0 : (_element$data3 = element.data) === null || _element$data3 === void 0 ? void 0 : _element$data3.src,
|
|
119
103
|
toggleImagePreviewer: toggleImagePreviewer
|
|
120
104
|
}), children);
|
|
121
105
|
};
|
|
122
|
-
|
|
106
|
+
export default renderImage;
|
|
@@ -1,95 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
enumerable: true,
|
|
15
|
-
get: function get() {
|
|
16
|
-
return _checkList.default;
|
|
17
|
-
}
|
|
18
|
-
});
|
|
19
|
-
Object.defineProperty(exports, "CodeBlockPlugin", {
|
|
20
|
-
enumerable: true,
|
|
21
|
-
get: function get() {
|
|
22
|
-
return _codeBlock.default;
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
Object.defineProperty(exports, "FormulaPlugin", {
|
|
26
|
-
enumerable: true,
|
|
27
|
-
get: function get() {
|
|
28
|
-
return _formula.default;
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
|
-
Object.defineProperty(exports, "HeaderPlugin", {
|
|
32
|
-
enumerable: true,
|
|
33
|
-
get: function get() {
|
|
34
|
-
return _header.default;
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
Object.defineProperty(exports, "ImagePlugin", {
|
|
38
|
-
enumerable: true,
|
|
39
|
-
get: function get() {
|
|
40
|
-
return _image.default;
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
Object.defineProperty(exports, "LinkPlugin", {
|
|
44
|
-
enumerable: true,
|
|
45
|
-
get: function get() {
|
|
46
|
-
return _link.default;
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
Object.defineProperty(exports, "ListPlugin", {
|
|
50
|
-
enumerable: true,
|
|
51
|
-
get: function get() {
|
|
52
|
-
return _list.default;
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
Object.defineProperty(exports, "NodeIdPlugin", {
|
|
56
|
-
enumerable: true,
|
|
57
|
-
get: function get() {
|
|
58
|
-
return _nodeId.default;
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
Object.defineProperty(exports, "ParagraphPlugin", {
|
|
62
|
-
enumerable: true,
|
|
63
|
-
get: function get() {
|
|
64
|
-
return _paragraph.default;
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
|
-
Object.defineProperty(exports, "TablePlugin", {
|
|
68
|
-
enumerable: true,
|
|
69
|
-
get: function get() {
|
|
70
|
-
return _table.default;
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
|
-
Object.defineProperty(exports, "TextPlugin", {
|
|
74
|
-
enumerable: true,
|
|
75
|
-
get: function get() {
|
|
76
|
-
return _textStyle.default;
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
exports.default = void 0;
|
|
80
|
-
var _blockquote = _interopRequireDefault(require("./blockquote"));
|
|
81
|
-
var _paragraph = _interopRequireDefault(require("./paragraph"));
|
|
82
|
-
var _textStyle = _interopRequireDefault(require("./text-style"));
|
|
83
|
-
var _header = _interopRequireDefault(require("./header"));
|
|
84
|
-
var _image = _interopRequireDefault(require("./image"));
|
|
85
|
-
var _nodeId = _interopRequireDefault(require("./node-id"));
|
|
86
|
-
var _link = _interopRequireDefault(require("./link"));
|
|
87
|
-
var _codeBlock = _interopRequireDefault(require("./code-block"));
|
|
88
|
-
var _checkList = _interopRequireDefault(require("./check-list"));
|
|
89
|
-
var _list = _interopRequireDefault(require("./list"));
|
|
90
|
-
var _table = _interopRequireDefault(require("./table"));
|
|
91
|
-
var _formula = _interopRequireDefault(require("./formula"));
|
|
92
|
-
var Plugins = [_blockquote.default, _paragraph.default, _textStyle.default, _header.default, _image.default, _link.default, _codeBlock.default, _checkList.default, _list.default, _table.default, _formula.default,
|
|
1
|
+
import BlockquotePlugin from './blockquote';
|
|
2
|
+
import ParagraphPlugin from './paragraph';
|
|
3
|
+
import TextPlugin from './text-style';
|
|
4
|
+
import HeaderPlugin from './header';
|
|
5
|
+
import ImagePlugin from './image';
|
|
6
|
+
import NodeIdPlugin from './node-id';
|
|
7
|
+
import LinkPlugin from './link';
|
|
8
|
+
import CodeBlockPlugin from './code-block';
|
|
9
|
+
import CheckListPlugin from './check-list';
|
|
10
|
+
import ListPlugin from './list';
|
|
11
|
+
import TablePlugin from './table';
|
|
12
|
+
import FormulaPlugin from './formula';
|
|
13
|
+
const Plugins = [BlockquotePlugin, ParagraphPlugin, TextPlugin, HeaderPlugin, ImagePlugin, LinkPlugin, CodeBlockPlugin, CheckListPlugin, ListPlugin, TablePlugin, FormulaPlugin,
|
|
93
14
|
// put at the end
|
|
94
|
-
|
|
95
|
-
|
|
15
|
+
NodeIdPlugin];
|
|
16
|
+
export default Plugins;
|
|
17
|
+
export { BlockquotePlugin, ParagraphPlugin, TextPlugin, HeaderPlugin, ImagePlugin, LinkPlugin, CodeBlockPlugin, CheckListPlugin, ListPlugin, TablePlugin, FormulaPlugin,
|
|
18
|
+
// put at the end
|
|
19
|
+
NodeIdPlugin };
|
|
@@ -1,57 +1,45 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
|
|
11
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
|
|
12
|
-
var _slate = require("slate");
|
|
13
|
-
var _slugid = _interopRequireDefault(require("slugid"));
|
|
14
|
-
var _queries = require("../../core/queries");
|
|
15
|
-
var _focusEditor = require("../../core/transforms/focus-editor");
|
|
16
|
-
var _constants = require("../../constants");
|
|
17
|
-
var _utils = require("../../core/utils");
|
|
18
|
-
var _replaceNodeChildren = require("../../core/transforms/replace-node-children");
|
|
19
|
-
var _ref3;
|
|
20
|
-
var isMenuDisabled = exports.isMenuDisabled = function isMenuDisabled(editor) {
|
|
21
|
-
var readonly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
1
|
+
import { Editor, Path, Range, Transforms } from 'slate';
|
|
2
|
+
import slugid from 'slugid';
|
|
3
|
+
import { findPath, getAboveNode, getEditorString, getNodeType, getSelectedElems } from '../../core/queries';
|
|
4
|
+
import { focusEditor } from '../../core/transforms/focus-editor';
|
|
5
|
+
import { ELementTypes, INSERT_POSITION } from '../../constants';
|
|
6
|
+
import { generateDefaultText, generateEmptyElement } from '../../core/utils';
|
|
7
|
+
import { replaceNodeChildren } from '../../core/transforms/replace-node-children';
|
|
8
|
+
export const isMenuDisabled = function (editor) {
|
|
9
|
+
let readonly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
22
10
|
if (readonly) return true;
|
|
23
|
-
|
|
11
|
+
const {
|
|
12
|
+
selection
|
|
13
|
+
} = editor;
|
|
24
14
|
if (!selection) return false;
|
|
25
|
-
|
|
15
|
+
const selectedElems = getSelectedElems(editor);
|
|
26
16
|
// Check if the selected element is illegal
|
|
27
|
-
|
|
28
|
-
|
|
17
|
+
const isSelectedIllegalElement = selectedElems.some(elem => {
|
|
18
|
+
const {
|
|
19
|
+
type
|
|
20
|
+
} = elem;
|
|
29
21
|
if (editor.isVoid(elem)) return true;
|
|
30
|
-
if ([
|
|
22
|
+
if ([ELementTypes.CODE_BLOCK, ELementTypes.CODE_LINE].includes(type)) return true;
|
|
31
23
|
return false;
|
|
32
24
|
});
|
|
33
25
|
if (isSelectedIllegalElement) return true;
|
|
34
26
|
return false;
|
|
35
27
|
};
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
universal: true
|
|
42
|
-
}),
|
|
43
|
-
_Editor$nodes2 = (0, _slicedToArray2.default)(_Editor$nodes, 1),
|
|
44
|
-
match = _Editor$nodes2[0];
|
|
28
|
+
export const isLinkType = editor => {
|
|
29
|
+
const [match] = Editor.nodes(editor, {
|
|
30
|
+
match: n => getNodeType(n) === ELementTypes.LINK,
|
|
31
|
+
universal: true
|
|
32
|
+
});
|
|
45
33
|
return !!match;
|
|
46
34
|
};
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
type:
|
|
35
|
+
export const generateLinkNode = (url, title) => {
|
|
36
|
+
const linkNode = {
|
|
37
|
+
type: ELementTypes.LINK,
|
|
50
38
|
url: url,
|
|
51
39
|
title: title,
|
|
52
|
-
id:
|
|
40
|
+
id: slugid.nice(),
|
|
53
41
|
children: [{
|
|
54
|
-
id:
|
|
42
|
+
id: slugid.nice(),
|
|
55
43
|
text: title || ''
|
|
56
44
|
}]
|
|
57
45
|
};
|
|
@@ -66,103 +54,101 @@ var generateLinkNode = exports.generateLinkNode = function generateLinkNode(url,
|
|
|
66
54
|
* @param {InsertPosition} props.insertPosition
|
|
67
55
|
* @param {Object | undefined} props.slateNode
|
|
68
56
|
*/
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
insertPosition =
|
|
75
|
-
slateNode
|
|
76
|
-
|
|
77
|
-
|
|
57
|
+
export const insertLink = props => {
|
|
58
|
+
const {
|
|
59
|
+
editor,
|
|
60
|
+
url,
|
|
61
|
+
title,
|
|
62
|
+
insertPosition = INSERT_POSITION.CURRENT,
|
|
63
|
+
slateNode
|
|
64
|
+
} = props;
|
|
65
|
+
const {
|
|
66
|
+
selection
|
|
67
|
+
} = editor;
|
|
68
|
+
if (insertPosition === INSERT_POSITION.CURRENT && isMenuDisabled(editor)) return;
|
|
78
69
|
// We had validated in modal,here we do it again for safety
|
|
79
70
|
if (!title || !url) return;
|
|
80
71
|
if (!selection) return;
|
|
81
|
-
|
|
82
|
-
if (insertPosition ===
|
|
83
|
-
|
|
84
|
-
if (slateNode && (slateNode === null || slateNode === void 0 ? void 0 : slateNode.type) ===
|
|
85
|
-
path =
|
|
86
|
-
|
|
87
|
-
|
|
72
|
+
const linkNode = generateLinkNode(url, title);
|
|
73
|
+
if (insertPosition === INSERT_POSITION.AFTER) {
|
|
74
|
+
let path = Editor.path(editor, selection);
|
|
75
|
+
if (slateNode && (slateNode === null || slateNode === void 0 ? void 0 : slateNode.type) === ELementTypes.LIST_ITEM) {
|
|
76
|
+
path = findPath(editor, slateNode, []);
|
|
77
|
+
const nextPath = Path.next(path);
|
|
78
|
+
Editor.insertNodes(editor, linkNode, {
|
|
88
79
|
at: nextPath
|
|
89
80
|
});
|
|
90
81
|
return;
|
|
91
82
|
}
|
|
92
|
-
|
|
83
|
+
const linkNodeWrapper = generateEmptyElement(ELementTypes.PARAGRAPH);
|
|
93
84
|
// LinkNode should be wrapped by p and within text nodes in order to be editable
|
|
94
|
-
linkNodeWrapper.children.push(linkNode,
|
|
95
|
-
|
|
85
|
+
linkNodeWrapper.children.push(linkNode, generateDefaultText());
|
|
86
|
+
Transforms.insertNodes(editor, linkNodeWrapper, {
|
|
96
87
|
at: [path[0] + 1]
|
|
97
88
|
});
|
|
98
|
-
|
|
89
|
+
focusEditor(editor);
|
|
99
90
|
return;
|
|
100
91
|
}
|
|
101
|
-
|
|
92
|
+
const isCollapsed = Range.isCollapsed(selection);
|
|
102
93
|
if (isCollapsed) {
|
|
103
94
|
// If selection is collapsed, we insert a space and then insert link node that help operation easier
|
|
104
95
|
editor.insertText(' ');
|
|
105
|
-
|
|
96
|
+
Editor.insertFragment(editor, [linkNode]);
|
|
106
97
|
// Using insertText directly causes the added Spaces to be added to the linked text, as in the issue above, so replaced by insertFragment
|
|
107
|
-
|
|
108
|
-
id:
|
|
98
|
+
Editor.insertFragment(editor, [{
|
|
99
|
+
id: slugid.nice(),
|
|
109
100
|
text: ' '
|
|
110
101
|
}]);
|
|
111
|
-
|
|
102
|
+
focusEditor(editor);
|
|
112
103
|
return;
|
|
113
104
|
} else {
|
|
114
|
-
|
|
105
|
+
const selectedText = Editor.string(editor, selection); // Selected text
|
|
115
106
|
if (selectedText !== title) {
|
|
116
107
|
// Replace the selected text with the link node if the selected text is different from the entered text
|
|
117
108
|
editor.deleteFragment();
|
|
118
|
-
|
|
109
|
+
Transforms.insertNodes(editor, linkNode);
|
|
119
110
|
} else {
|
|
120
111
|
// Wrap the selected text with the link node if the selected text is the same as the entered text
|
|
121
|
-
|
|
112
|
+
Transforms.wrapNodes(editor, linkNode, {
|
|
122
113
|
split: true,
|
|
123
114
|
at: selection
|
|
124
115
|
});
|
|
125
|
-
|
|
116
|
+
Transforms.collapse(editor, {
|
|
126
117
|
edge: 'end'
|
|
127
118
|
});
|
|
128
119
|
}
|
|
129
120
|
}
|
|
130
|
-
|
|
121
|
+
focusEditor(editor);
|
|
131
122
|
};
|
|
132
|
-
|
|
133
|
-
|
|
123
|
+
export const getLinkInfo = editor => {
|
|
124
|
+
const isLinkNode = isLinkType(editor);
|
|
134
125
|
if (!isLinkNode) return null;
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
universal: true
|
|
140
|
-
}),
|
|
141
|
-
_Editor$nodes4 = (0, _slicedToArray2.default)(_Editor$nodes3, 1),
|
|
142
|
-
match = _Editor$nodes4[0];
|
|
126
|
+
const [match] = Editor.nodes(editor, {
|
|
127
|
+
match: n => getNodeType(n) === ELementTypes.LINK,
|
|
128
|
+
universal: true
|
|
129
|
+
});
|
|
143
130
|
if (!match) return null;
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
path = _match[1];
|
|
147
|
-
var showedText = (0, _queries.getEditorString)(editor, path);
|
|
131
|
+
const [node, path] = match;
|
|
132
|
+
const showedText = getEditorString(editor, path);
|
|
148
133
|
return {
|
|
149
134
|
linkUrl: node.url,
|
|
150
135
|
linkTitle: showedText || node.title,
|
|
151
136
|
path: path
|
|
152
137
|
};
|
|
153
138
|
};
|
|
154
|
-
|
|
155
|
-
|
|
139
|
+
export const updateLink = (editor, newUrl, newText) => {
|
|
140
|
+
const linkAbove = getAboveNode(editor, {
|
|
156
141
|
match: {
|
|
157
|
-
type:
|
|
142
|
+
type: ELementTypes.LINK
|
|
158
143
|
}
|
|
159
144
|
});
|
|
160
145
|
if (!linkAbove) return;
|
|
161
|
-
|
|
162
|
-
oldUrl
|
|
163
|
-
oldText
|
|
146
|
+
const {
|
|
147
|
+
href: oldUrl,
|
|
148
|
+
title: oldText
|
|
149
|
+
} = linkAbove[0] || {};
|
|
164
150
|
if (oldUrl !== newUrl || oldText !== newText) {
|
|
165
|
-
|
|
151
|
+
Transforms.setNodes(editor, {
|
|
166
152
|
url: newUrl,
|
|
167
153
|
title: newText
|
|
168
154
|
}, {
|
|
@@ -173,63 +159,40 @@ var updateLink = exports.updateLink = function updateLink(editor, newUrl, newTex
|
|
|
173
159
|
text: newText
|
|
174
160
|
});
|
|
175
161
|
};
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
162
|
+
export const upsertLinkText = (editor, _ref) => {
|
|
163
|
+
let {
|
|
164
|
+
text
|
|
165
|
+
} = _ref;
|
|
166
|
+
const newLink = getAboveNode(editor, {
|
|
179
167
|
match: {
|
|
180
|
-
type:
|
|
168
|
+
type: ELementTypes.LINK
|
|
181
169
|
}
|
|
182
170
|
});
|
|
183
171
|
if (!newLink) return;
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
var firstText = newLInkNode.children[0];
|
|
189
|
-
(0, _replaceNodeChildren.replaceNodeChildren)(editor, {
|
|
172
|
+
const [newLInkNode, newLinkPath] = newLink;
|
|
173
|
+
if (text && text.length && text !== getEditorString(editor, newLinkPath)) {
|
|
174
|
+
const firstText = newLInkNode.children[0];
|
|
175
|
+
replaceNodeChildren(editor, {
|
|
190
176
|
at: newLinkPath,
|
|
191
|
-
nodes:
|
|
192
|
-
|
|
193
|
-
|
|
177
|
+
nodes: {
|
|
178
|
+
...firstText,
|
|
179
|
+
text
|
|
180
|
+
},
|
|
194
181
|
insertOptions: {
|
|
195
182
|
select: true
|
|
196
183
|
}
|
|
197
184
|
});
|
|
198
185
|
}
|
|
199
186
|
};
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
case 2:
|
|
212
|
-
_Editor$nodes5 = _slate.Editor.nodes(editor, {
|
|
213
|
-
match: function match(n) {
|
|
214
|
-
return (0, _queries.getNodeType)(n) === _constants.ELementTypes.LINK;
|
|
215
|
-
},
|
|
216
|
-
universal: true
|
|
217
|
-
}), _Editor$nodes6 = (0, _slicedToArray2.default)(_Editor$nodes5, 1), linkNode = _Editor$nodes6[0]; // Check selection is link node
|
|
218
|
-
if (!(!linkNode || !linkNode[0])) {
|
|
219
|
-
_context.next = 5;
|
|
220
|
-
break;
|
|
221
|
-
}
|
|
222
|
-
return _context.abrupt("return");
|
|
223
|
-
case 5:
|
|
224
|
-
_slate.Transforms.unwrapNodes(editor, {
|
|
225
|
-
match: function match(n) {
|
|
226
|
-
return (0, _queries.getNodeType)(n) === _constants.ELementTypes.LINK;
|
|
227
|
-
}
|
|
228
|
-
});
|
|
229
|
-
case 6:
|
|
230
|
-
case "end":
|
|
231
|
-
return _context.stop();
|
|
232
|
-
}
|
|
233
|
-
}, _callee);
|
|
234
|
-
}))).apply(this, arguments);
|
|
187
|
+
export const unWrapLinkNode = async editor => {
|
|
188
|
+
if (editor.selection == null) return;
|
|
189
|
+
const [linkNode] = Editor.nodes(editor, {
|
|
190
|
+
match: n => getNodeType(n) === ELementTypes.LINK,
|
|
191
|
+
universal: true
|
|
192
|
+
});
|
|
193
|
+
// Check selection is link node
|
|
194
|
+
if (!linkNode || !linkNode[0]) return;
|
|
195
|
+
Transforms.unwrapNodes(editor, {
|
|
196
|
+
match: n => getNodeType(n) === ELementTypes.LINK
|
|
197
|
+
});
|
|
235
198
|
};
|
|
@@ -1,19 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
exports.default = void 0;
|
|
8
|
-
var _elementTypes = require("../../constants/element-types");
|
|
9
|
-
var _menu = _interopRequireDefault(require("./menu"));
|
|
10
|
-
var _plugin = _interopRequireDefault(require("./plugin"));
|
|
11
|
-
var _renderElem = _interopRequireDefault(require("./render-elem"));
|
|
12
|
-
var LinkPlugin = {
|
|
13
|
-
type: _elementTypes.LINK,
|
|
1
|
+
import { LINK } from '../../constants/element-types';
|
|
2
|
+
import LinkMenu from './menu';
|
|
3
|
+
import withLink from './plugin';
|
|
4
|
+
import renderLink from './render-elem';
|
|
5
|
+
const LinkPlugin = {
|
|
6
|
+
type: LINK,
|
|
14
7
|
nodeType: 'element',
|
|
15
|
-
editorMenus: [
|
|
16
|
-
editorPlugin:
|
|
17
|
-
renderElements: [
|
|
8
|
+
editorMenus: [LinkMenu],
|
|
9
|
+
editorPlugin: withLink,
|
|
10
|
+
renderElements: [renderLink]
|
|
18
11
|
};
|
|
19
|
-
|
|
12
|
+
export default LinkPlugin;
|