@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.
@@ -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) === 'link',
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) === 'link'
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 _constants = require("../../../constants");
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)) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/sdoc-editor",
3
- "version": "1.0.178",
3
+ "version": "1.0.180",
4
4
  "private": false,
5
5
  "description": "This is a sdoc editor",
6
6
  "main": "dist/index.js",