@seafile/sdoc-editor 1.0.178 → 1.0.180
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/basic-sdk/extension/constants/menus-config.js +9 -1
- package/dist/basic-sdk/extension/plugins/link/helpers.js +14 -5
- package/dist/basic-sdk/extension/plugins/text-style/helpers.js +4 -0
- package/dist/basic-sdk/extension/plugins/text-style/menu/index.js +24 -8
- package/dist/basic-sdk/extension/plugins/video/plugin.js +1 -1
- package/package.json +1 -1
|
@@ -19,6 +19,7 @@ const ITALIC = exports.ITALIC = 'italic';
|
|
|
19
19
|
const BOLD = exports.BOLD = 'bold';
|
|
20
20
|
const UNDERLINE = 'underline';
|
|
21
21
|
const INLINE_CODE = 'inline_code';
|
|
22
|
+
const TEXT_LINK = 'text_link';
|
|
22
23
|
const HIGHLIGHT_COLOR = 'highlight_color';
|
|
23
24
|
const COLOR = 'color';
|
|
24
25
|
|
|
@@ -48,7 +49,8 @@ const TEXT_STYLE_MAP = exports.TEXT_STYLE_MAP = {
|
|
|
48
49
|
SUBSCRIPT: SUBSCRIPT,
|
|
49
50
|
CODE: 'code',
|
|
50
51
|
DELETE: 'delete',
|
|
51
|
-
ADD: 'add'
|
|
52
|
+
ADD: 'add',
|
|
53
|
+
LINK: 'link'
|
|
52
54
|
};
|
|
53
55
|
|
|
54
56
|
// header menu config
|
|
@@ -122,6 +124,12 @@ const MENUS_CONFIG_MAP = exports.MENUS_CONFIG_MAP = {
|
|
|
122
124
|
text: 'Inline_code',
|
|
123
125
|
ariaLabel: 'code',
|
|
124
126
|
type: TEXT_STYLE_MAP.CODE
|
|
127
|
+
}, {
|
|
128
|
+
id: TEXT_LINK,
|
|
129
|
+
iconClass: 'sdocfont sdoc-link',
|
|
130
|
+
text: 'Insert_link',
|
|
131
|
+
ariaLabel: 'link',
|
|
132
|
+
type: TEXT_STYLE_MAP.LINK
|
|
125
133
|
}, {
|
|
126
134
|
id: `sdoc-${HIGHLIGHT_COLOR}`,
|
|
127
135
|
iconClass: 'sdocfont sdoc-highlight-color',
|
|
@@ -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.isWeChat = exports.isSdocFile = exports.isMenuDisabled = exports.insertLink = exports.getMenuPosition = exports.getLinkType = exports.genLinkNode = exports.checkLink = void 0;
|
|
7
|
+
exports.upsertLinkText = exports.updateLink = exports.unWrapLinkNode = exports.isWeChat = exports.isSdocFile = exports.isMenuDisabled = exports.isLinkToolBarActive = exports.insertLink = exports.getMenuPosition = exports.getLinkType = exports.genLinkNode = exports.checkLink = void 0;
|
|
8
8
|
var _slate = require("@seafile/slate");
|
|
9
9
|
var _slateReact = require("@seafile/slate-react");
|
|
10
10
|
var _slugid = _interopRequireDefault(require("slugid"));
|
|
@@ -167,15 +167,15 @@ exports.upsertLinkText = upsertLinkText;
|
|
|
167
167
|
const unWrapLinkNode = editor => {
|
|
168
168
|
if (editor.selection == null) return;
|
|
169
169
|
const [nodeEntry] = _slate.Editor.nodes(editor, {
|
|
170
|
-
match: n => (0, _core.getNodeType)(n) ===
|
|
171
|
-
universal: true
|
|
170
|
+
match: n => (0, _core.getNodeType)(n) === _constants.LINK
|
|
172
171
|
});
|
|
172
|
+
|
|
173
173
|
// If the selection is not in a link node, it is disabled
|
|
174
174
|
if (nodeEntry == null || nodeEntry[0] == null) return;
|
|
175
175
|
|
|
176
176
|
// unlink
|
|
177
177
|
_slate.Transforms.unwrapNodes(editor, {
|
|
178
|
-
match: n => (0, _core.getNodeType)(n) ===
|
|
178
|
+
match: n => (0, _core.getNodeType)(n) === _constants.LINK
|
|
179
179
|
});
|
|
180
180
|
};
|
|
181
181
|
exports.unWrapLinkNode = unWrapLinkNode;
|
|
@@ -216,4 +216,13 @@ const getMenuPosition = element => {
|
|
|
216
216
|
left: menuLeft
|
|
217
217
|
};
|
|
218
218
|
};
|
|
219
|
-
exports.getMenuPosition = getMenuPosition;
|
|
219
|
+
exports.getMenuPosition = getMenuPosition;
|
|
220
|
+
const isLinkToolBarActive = editor => {
|
|
221
|
+
if (!editor.selection) return false;
|
|
222
|
+
const [nodeEntry] = _slate.Editor.nodes(editor, {
|
|
223
|
+
match: n => (0, _core.getNodeType)(n) === _constants.LINK
|
|
224
|
+
});
|
|
225
|
+
if (nodeEntry) return true;
|
|
226
|
+
return false;
|
|
227
|
+
};
|
|
228
|
+
exports.isLinkToolBarActive = isLinkToolBarActive;
|
|
@@ -8,6 +8,7 @@ var _slate = require("@seafile/slate");
|
|
|
8
8
|
var _core = require("../../core");
|
|
9
9
|
var _elementType = require("../../constants/element-type");
|
|
10
10
|
var _menusConfig = require("../../constants/menus-config");
|
|
11
|
+
var _helpers = require("../link/helpers");
|
|
11
12
|
const isMenuDisabled = (editor, readonly) => {
|
|
12
13
|
if (readonly) return true;
|
|
13
14
|
if (editor.selection == null) return true;
|
|
@@ -43,6 +44,9 @@ const removeMark = (editor, type) => {
|
|
|
43
44
|
// Whether mark is included
|
|
44
45
|
exports.removeMark = removeMark;
|
|
45
46
|
const getValue = (editor, mark) => {
|
|
47
|
+
if (mark === _elementType.LINK && editor.selection && !_slate.Range.isCollapsed(editor.selection)) {
|
|
48
|
+
return (0, _helpers.isLinkToolBarActive)(editor);
|
|
49
|
+
}
|
|
46
50
|
const curMarks = _slate.Editor.marks(editor);
|
|
47
51
|
|
|
48
52
|
// If curMarks exists, you need to set this parameter manually. curMarks prevails
|
|
@@ -9,15 +9,18 @@ exports.default = void 0;
|
|
|
9
9
|
var _react = _interopRequireWildcard(require("react"));
|
|
10
10
|
var _reactI18next = require("react-i18next");
|
|
11
11
|
var _slate = require("@seafile/slate");
|
|
12
|
-
var
|
|
13
|
-
var _core = require("../../../core");
|
|
12
|
+
var _eventBus = _interopRequireDefault(require("../../../../utils/event-bus"));
|
|
14
13
|
var _commons = require("../../../commons");
|
|
15
|
-
var _helpers = require("../../font/helpers");
|
|
16
14
|
var _fontSizeScale = _interopRequireDefault(require("../../font/menu/font-size/font-size-scale"));
|
|
17
|
-
var _helpers2 = require("../helpers");
|
|
18
|
-
var _useColorContext = require("../../../../hooks/use-color-context");
|
|
19
15
|
var _mouseEvent = require("../../../../utils/mouse-event");
|
|
20
16
|
var _aiMenu = require("../../ai/ai-menu");
|
|
17
|
+
var _core = require("../../../core");
|
|
18
|
+
var _helpers = require("../../font/helpers");
|
|
19
|
+
var _helpers2 = require("../helpers");
|
|
20
|
+
var _helpers3 = require("../../link/helpers");
|
|
21
|
+
var _useColorContext = require("../../../../hooks/use-color-context");
|
|
22
|
+
var _constants = require("../../../constants");
|
|
23
|
+
var _constants2 = require("../../../../../basic-sdk/constants");
|
|
21
24
|
const TextStyleMenuList = _ref => {
|
|
22
25
|
let {
|
|
23
26
|
editor,
|
|
@@ -38,26 +41,38 @@ const TextStyleMenuList = _ref => {
|
|
|
38
41
|
const isActive = (0, _react.useCallback)(type => {
|
|
39
42
|
const isMark = (0, _helpers2.getValue)(editor, type);
|
|
40
43
|
return !!isMark;
|
|
41
|
-
|
|
42
44
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
43
45
|
}, [editor]);
|
|
44
46
|
const isDisabled = (0, _react.useCallback)(() => {
|
|
45
47
|
return (0, _helpers2.isMenuDisabled)(editor, readonly);
|
|
46
|
-
|
|
47
48
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
48
49
|
}, [editor, readonly]);
|
|
50
|
+
const openLinkDialog = (0, _react.useCallback)(() => {
|
|
51
|
+
const eventBus = _eventBus.default.getInstance();
|
|
52
|
+
eventBus.dispatch(_constants2.INTERNAL_EVENT.INSERT_ELEMENT, {
|
|
53
|
+
type: _constants.ELEMENT_TYPE.LINK,
|
|
54
|
+
editor
|
|
55
|
+
});
|
|
56
|
+
}, [editor]);
|
|
49
57
|
const onMouseDown = (0, _react.useCallback)((event, type) => {
|
|
50
58
|
event.preventDefault();
|
|
51
59
|
event.stopPropagation();
|
|
52
60
|
if (isDisabled()) return;
|
|
53
61
|
const active = isActive(type);
|
|
62
|
+
if (type === _constants.LINK) {
|
|
63
|
+
if (active) {
|
|
64
|
+
(0, _helpers3.unWrapLinkNode)(editor);
|
|
65
|
+
} else {
|
|
66
|
+
openLinkDialog();
|
|
67
|
+
}
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
54
70
|
if (active) {
|
|
55
71
|
(0, _helpers2.removeMark)(editor, type);
|
|
56
72
|
} else {
|
|
57
73
|
(0, _helpers2.addMark)(editor, type);
|
|
58
74
|
}
|
|
59
75
|
(0, _core.focusEditor)(editor);
|
|
60
|
-
|
|
61
76
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
62
77
|
}, [editor]);
|
|
63
78
|
const setColor = (0, _react.useCallback)((type, color) => {
|
|
@@ -108,6 +123,7 @@ const TextStyleMenuList = _ref => {
|
|
|
108
123
|
let list = getTextStyleList(_constants.TEXT_STYLE);
|
|
109
124
|
const dropdownList = getTextStyleList(_constants.TEXT_STYLE_MORE);
|
|
110
125
|
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, list.map((itemProps, index) => {
|
|
126
|
+
if (itemProps.type === _constants.LINK && editor.editorType !== _constants2.WIKI_EDITOR) return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null);
|
|
111
127
|
const Component = itemProps.isColor ? _commons.ColorMenu : _commons.MenuItem;
|
|
112
128
|
return /*#__PURE__*/_react.default.createElement(Component, Object.assign({
|
|
113
129
|
key: index
|
|
@@ -29,7 +29,7 @@ const withVideo = editor => {
|
|
|
29
29
|
return isVoid(elem);
|
|
30
30
|
};
|
|
31
31
|
newEditor.onHotKeyDown = event => {
|
|
32
|
-
const [videoNode, path] = (0, _core.getSelectedNodeEntryByType)(editor, _constants.VIDEO);
|
|
32
|
+
const [videoNode, path] = (0, _core.getSelectedNodeEntryByType)(editor, _constants.VIDEO) || [];
|
|
33
33
|
if (path) {
|
|
34
34
|
// Insert empty paragraph node after video when clicking 'enter' on selected video
|
|
35
35
|
if ((0, _isHotkey.default)('enter', event)) {
|