@seafile/sdoc-editor 3.0.3 → 3.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.
@@ -7,5 +7,9 @@ exports.ACTION_TYPES = void 0;
7
7
  var ACTION_TYPES = exports.ACTION_TYPES = {
8
8
  GET_OUTLINE: 'sdoc.outline.data.get',
9
9
  SELECT_OUTLINE: 'sdoc.outline.data.select',
10
- EDITOR_ACTION_TRANSFER: 'sdoc.editor.data.edit'
10
+ EDITOR_ACTION_TRANSFER: 'sdoc.editor.data.edit',
11
+ TOOLBAR_MENU_TRIGGER: 'sdoc.toolbar.menu.trigger',
12
+ EDITOR_CONTENT_SELECT: 'sdoc.editor.content.select',
13
+ EDITOR_OPERATION_EXECUTE: 'sdoc.editor.operation.execute',
14
+ EDITOR_SYSTEM_EVENT: 'sdoc.editor.system.event'
11
15
  };
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.dispatchContentSelectEvent = void 0;
8
+ var _constants = require("../extension/constants");
9
+ var _core = require("../extension/core");
10
+ var _constants2 = require("./constants");
11
+ var _jsBridge = _interopRequireDefault(require("./js-bridge"));
12
+ var dispatchContentSelectEvent = exports.dispatchContentSelectEvent = function dispatchContentSelectEvent(editor) {
13
+ var topBlockEntry = (0, _core.getTopLevelBlockNode)(editor);
14
+ if (!topBlockEntry) return;
15
+ var topNode = topBlockEntry[0];
16
+ var topType = topNode.type;
17
+ if (topType === _constants.MULTI_COLUMN) {
18
+ var selection = editor.selection;
19
+ var currentNodeInColumn = (0, _core.getNode)(editor, selection.anchor.path.slice(0, 3));
20
+ topType = currentNodeInColumn.type;
21
+ }
22
+ // content select
23
+ var selectData = {
24
+ v: 2,
25
+ action: _constants2.ACTION_TYPES.EDITOR_CONTENT_SELECT,
26
+ data: JSON.stringify({
27
+ type: topType
28
+ })
29
+ };
30
+ _jsBridge["default"].callAndroidFunction(JSON.stringify(selectData));
31
+
32
+ // op execute
33
+ var opData = {
34
+ v: 2,
35
+ action: _constants2.ACTION_TYPES.EDITOR_OPERATION_EXECUTE,
36
+ data: JSON.stringify({
37
+ type: 'op-execute'
38
+ })
39
+ };
40
+ _jsBridge["default"].callAndroidFunction(JSON.stringify(opData));
41
+ };
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.dispatchSystemEvent = void 0;
8
+ var _constants = require("./constants");
9
+ var _jsBridge = _interopRequireDefault(require("./js-bridge"));
10
+ var dispatchSystemEvent = exports.dispatchSystemEvent = function dispatchSystemEvent(message_type) {
11
+ // op execute
12
+ var opData = {
13
+ v: 2,
14
+ action: _constants.ACTION_TYPES.EDITOR_SYSTEM_EVENT,
15
+ data: JSON.stringify({
16
+ type: message_type
17
+ })
18
+ };
19
+ _jsBridge["default"].callAndroidFunction(JSON.stringify(opData));
20
+ };
@@ -11,12 +11,13 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/es
11
11
  var JSBridge = /*#__PURE__*/(0, _createClass2["default"])(function JSBridge() {
12
12
  var _this = this;
13
13
  (0, _classCallCheck2["default"])(this, JSBridge);
14
- (0, _defineProperty2["default"])(this, "init", function () {
14
+ (0, _defineProperty2["default"])(this, "init", function (editor) {
15
15
  if (window.WebViewJavascriptBridge) {
16
16
  _this.initWebViewJavascriptBridge();
17
17
  } else {
18
18
  document.addEventListener('WebViewJavascriptBridgeReady', _this.initWebViewJavascriptBridge, false);
19
19
  }
20
+ _this.editor = editor;
20
21
  _this.initJSEventHandler();
21
22
  });
22
23
  (0, _defineProperty2["default"])(this, "finishPage", function () {
@@ -41,7 +42,7 @@ var JSBridge = /*#__PURE__*/(0, _createClass2["default"])(function JSBridge() {
41
42
  }
42
43
  if (!parsedData) {
43
44
  responseCallback(JSON.stringify({
44
- success: true
45
+ success: false
45
46
  }));
46
47
  return;
47
48
  }
@@ -59,7 +60,7 @@ var JSBridge = /*#__PURE__*/(0, _createClass2["default"])(function JSBridge() {
59
60
  success: false
60
61
  }));
61
62
  }
62
- var execActionSucceed = eventHandler(params);
63
+ var execActionSucceed = eventHandler(params, _this.editor);
63
64
  if (execActionSucceed) {
64
65
  responseCallback(JSON.stringify({
65
66
  success: true
@@ -0,0 +1,119 @@
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 _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/classCallCheck"));
9
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createClass"));
10
+ var _callSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/callSuper"));
11
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/inherits"));
12
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/defineProperty"));
13
+ var _react = _interopRequireDefault(require("react"));
14
+ var _eventBus = _interopRequireDefault(require("../utils/event-bus"));
15
+ var _dispatchSystemEvent = require("./dispatch-system-event");
16
+ var MobileMessage = /*#__PURE__*/function (_React$Component) {
17
+ function MobileMessage(props) {
18
+ var _this;
19
+ (0, _classCallCheck2["default"])(this, MobileMessage);
20
+ _this = (0, _callSuper2["default"])(this, MobileMessage, [props]);
21
+ (0, _defineProperty2["default"])(_this, "onOperationExecuteError", function () {
22
+ var message = 'failed_to_execute_operation_on_server';
23
+ (0, _dispatchSystemEvent.dispatchSystemEvent)(message);
24
+ });
25
+ (0, _defineProperty2["default"])(_this, "onSyncServerOperationError", function () {
26
+ var message = 'failed_to_sync_with_server_operations';
27
+ (0, _dispatchSystemEvent.dispatchSystemEvent)(message);
28
+ });
29
+ (0, _defineProperty2["default"])(_this, "onInternalServerExecError", function () {
30
+ var message = 'internal_server_exec_operations_error';
31
+ (0, _dispatchSystemEvent.dispatchSystemEvent)(message);
32
+ });
33
+ (0, _defineProperty2["default"])(_this, "onTokenExpiredError", function (msg) {
34
+ var message = 'token_expired_Please_refresh_the_page';
35
+ (0, _dispatchSystemEvent.dispatchSystemEvent)(message);
36
+ });
37
+ (0, _defineProperty2["default"])(_this, "onPendingOpExceedLimit", function () {
38
+ var message = 'pending_operations_exceed_limit';
39
+ (0, _dispatchSystemEvent.dispatchSystemEvent)(message);
40
+ });
41
+ (0, _defineProperty2["default"])(_this, "onDisconnect", function () {
42
+ var message = 'server_is_not_connected_operation_will_be_sent_to_server_later';
43
+ (0, _dispatchSystemEvent.dispatchSystemEvent)(message);
44
+ });
45
+ (0, _defineProperty2["default"])(_this, "onReconnectError", function () {
46
+ if (!_this.isConnectError) {
47
+ _this.isConnectError = true;
48
+ var message = 'server_is_disconnected_reconnecting';
49
+ (0, _dispatchSystemEvent.dispatchSystemEvent)(message);
50
+ }
51
+ });
52
+ (0, _defineProperty2["default"])(_this, "onConnect", function () {
53
+ _this.isConnectError = false;
54
+ });
55
+ (0, _defineProperty2["default"])(_this, "onReconnect", function () {
56
+ _this.isConnectError = false;
57
+ var message = 'server_is_reconnected';
58
+ (0, _dispatchSystemEvent.dispatchSystemEvent)(message);
59
+ });
60
+ (0, _defineProperty2["default"])(_this, "onDocumentSaving", function () {
61
+ var message = 'document_is_saving';
62
+ (0, _dispatchSystemEvent.dispatchSystemEvent)(message);
63
+ });
64
+ (0, _defineProperty2["default"])(_this, "onDocumentSaved", function () {
65
+ var message = 'document_is_saved';
66
+ (0, _dispatchSystemEvent.dispatchSystemEvent)(message);
67
+ });
68
+ (0, _defineProperty2["default"])(_this, "render", function () {
69
+ return null;
70
+ });
71
+ _this.state = {
72
+ isSaved: false,
73
+ isSaving: false,
74
+ lastSavedAt: ''
75
+ };
76
+ _this.saveTimer = null;
77
+ return _this;
78
+ }
79
+ (0, _inherits2["default"])(MobileMessage, _React$Component);
80
+ return (0, _createClass2["default"])(MobileMessage, [{
81
+ key: "componentDidMount",
82
+ value: function componentDidMount() {
83
+ var eventBus = _eventBus["default"].getInstance();
84
+ this.unsubscribeSavingEvent = eventBus.subscribe('is-saving', this.onDocumentSaving);
85
+ this.unsubscribeSavedEvent = eventBus.subscribe('saved', this.onDocumentSaved);
86
+ this.unsubscribeSavedEvent = eventBus.subscribe('connect', this.onConnect);
87
+ // offline reconnect
88
+ this.unsubscribeDisconnectEvent = eventBus.subscribe('disconnect', this.onDisconnect);
89
+ this.unsubscribeReconnectErrorEvent = eventBus.subscribe('reconnect_error', this.onReconnectError);
90
+ this.unsubscribeReconnectEvent = eventBus.subscribe('reconnect', this.onReconnect);
91
+
92
+ // server return error
93
+ this.unsubscribeOpExecError = eventBus.subscribe('execute_client_operations_error', this.onOperationExecuteError);
94
+ this.unsubscribeSyncServerOpError = eventBus.subscribe('sync_server_operations_error', this.onSyncServerOperationError);
95
+ this.unsubscribeDocumentLoadError = eventBus.subscribe('load_document_content_error', this.onInternalServerExecError);
96
+ this.unsubscribeOperationsSaveError = eventBus.subscribe('save_operations_to_database_error', this.onInternalServerExecError);
97
+ this.unsubscribeOperationsSaveError = eventBus.subscribe('token_expired', this.onTokenExpiredError);
98
+
99
+ // local error
100
+ this.unsubscribePendingOpExceedLimit = eventBus.subscribe('pending_operations_exceed_limit', this.onPendingOpExceedLimit);
101
+ }
102
+ }, {
103
+ key: "componentWillUnmount",
104
+ value: function componentWillUnmount() {
105
+ this.unsubscribeSavingEvent();
106
+ this.unsubscribeSavedEvent();
107
+ this.unsubscribeDisconnectEvent();
108
+ this.unsubscribeReconnectErrorEvent();
109
+ this.unsubscribeReconnectEvent();
110
+ this.unsubscribeOpExecError();
111
+ this.unsubscribeSyncServerOpError();
112
+ this.unsubscribePendingOpExceedLimit();
113
+ this.unsubscribeDocumentLoadError();
114
+ this.unsubscribeOperationsSaveError();
115
+ clearTimeout(this.saveTimer);
116
+ }
117
+ }]);
118
+ }(_react["default"].Component);
119
+ var _default = exports["default"] = MobileMessage;
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.updateEditorHistory = exports.registerToolbarMenuTrigger = void 0;
8
+ var _constants = require("../extension/constants");
9
+ var _core = require("../extension/core");
10
+ var _helpers = require("../extension/plugins/check-list/helpers");
11
+ var _helpers2 = require("../extension/plugins/header/helpers");
12
+ var _helpers3 = require("../extension/plugins/list/helpers");
13
+ var _constants2 = require("./constants");
14
+ var _jsBridge = _interopRequireDefault(require("./js-bridge"));
15
+ var headerTypes = [_constants.ELEMENT_TYPE.TITLE, _constants.ELEMENT_TYPE.SUBTITLE, _constants.ELEMENT_TYPE.HEADER1, _constants.ELEMENT_TYPE.HEADER2, _constants.ELEMENT_TYPE.HEADER3, _constants.ELEMENT_TYPE.HEADER4, _constants.ELEMENT_TYPE.HEADER5, _constants.ELEMENT_TYPE.HEADER6, _constants.ELEMENT_TYPE.PARAGRAPH];
16
+ var onToolbarTrigger = function onToolbarTrigger(data, editor) {
17
+ var type = data.type;
18
+ if (headerTypes.includes(type)) {
19
+ var nodeEntry = (0, _core.getNearestBlockNode)(editor);
20
+ if (!nodeEntry) return;
21
+ var newType = type;
22
+ if (nodeEntry[0].type === type) {
23
+ newType = _constants.PARAGRAPH;
24
+ }
25
+ (0, _helpers2.setHeaderType)(editor, newType);
26
+ return;
27
+ }
28
+ if (type === _constants.UNDO) {
29
+ editor.undo();
30
+ return;
31
+ }
32
+ if (type === _constants.REDO) {
33
+ editor.redo();
34
+ return;
35
+ }
36
+ if (type === _constants.UNORDERED_LIST || type === _constants.ORDERED_LIST) {
37
+ (0, _helpers3.setListType)(editor, type);
38
+ return;
39
+ }
40
+ if (type === _constants.CHECK_LIST_ITEM) {
41
+ var _nodeEntry = (0, _core.getNearestBlockNode)(editor);
42
+ if (!_nodeEntry) return;
43
+ var _newType = type;
44
+ if (_nodeEntry[0].type === type) {
45
+ _newType = _constants.PARAGRAPH;
46
+ }
47
+ (0, _helpers.setCheckListItemType)(editor, _newType);
48
+ return;
49
+ }
50
+ };
51
+ var updateEditorHistory = exports.updateEditorHistory = function updateEditorHistory(editor) {
52
+ if (!window.seadroid) {
53
+ window.seadroid = {};
54
+ }
55
+ window.seadroid['history'] = editor.history;
56
+ };
57
+ var registerToolbarMenuTrigger = exports.registerToolbarMenuTrigger = function registerToolbarMenuTrigger() {
58
+ _jsBridge["default"].registerEventHandler(_constants2.ACTION_TYPES.TOOLBAR_MENU_TRIGGER, onToolbarTrigger);
59
+ };
@@ -73,7 +73,6 @@
73
73
 
74
74
  .sdoc-editor-container .sdoc-editor-toolbar {
75
75
  display: flex;
76
- flex: 1;
77
76
  justify-content: center;
78
77
  position: relative;
79
78
  height: 44px;
@@ -96,7 +95,7 @@
96
95
 
97
96
  .sdoc-content-wrapper {
98
97
  width: 100%;
99
- height: calc(100vh - 44px);
98
+ flex: 1;
100
99
  display: flex;
101
100
  }
102
101
 
@@ -13,9 +13,12 @@ var _react = _interopRequireWildcard(require("react"));
13
13
  var _slate = require("@seafile/slate");
14
14
  var _deepCopy = _interopRequireDefault(require("deep-copy"));
15
15
  var _isHotkey = _interopRequireDefault(require("is-hotkey"));
16
+ var _dispatchContentSelectEvent = require("../android/dispatch-content-select-event");
16
17
  var _editorTitleBar = require("../android/editor-title-bar");
17
18
  var _jsBridge = _interopRequireDefault(require("../android/js-bridge"));
19
+ var _mobileMessage = _interopRequireDefault(require("../android/mobile-message"));
18
20
  var _outlineModule = require("../android/outline-module");
21
+ var _toolbarTrigger = require("../android/toolbar-trigger");
19
22
  var _fileLoading = _interopRequireDefault(require("../components/file-loading"));
20
23
  var _constants = require("../constants");
21
24
  var _context = _interopRequireDefault(require("../context"));
@@ -120,10 +123,12 @@ var SdocEditor = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
120
123
  (0, _react.useEffect)(function () {
121
124
  var mobileLogin = _context["default"].getSetting('mobileLogin');
122
125
  if (mobileLogin) {
123
- _jsBridge["default"].init();
126
+ _jsBridge["default"].init(validEditor);
124
127
  (0, _outlineModule.registerOutlineEventHandler)();
125
128
  (0, _editorTitleBar.registerTitleBarEventHandler)();
129
+ (0, _toolbarTrigger.registerToolbarMenuTrigger)();
126
130
  (0, _outlineModule.updateOutlineValue)(document.elements);
131
+ (0, _toolbarTrigger.updateEditorHistory)(validEditor);
127
132
  }
128
133
  return function () {
129
134
  _jsBridge["default"].finishPage();
@@ -236,6 +241,9 @@ var SdocEditor = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
236
241
  if (_commonUtils.isMobile) {
237
242
  (0, _outlineModule.updateOutlineValue)(value);
238
243
  }
244
+ if (_commonUtils.isMobile && isEdit) {
245
+ (0, _dispatchContentSelectEvent.dispatchContentSelectEvent)(validEditor);
246
+ }
239
247
  };
240
248
  var isFreezed = _context["default"].getSetting('isFreezed');
241
249
  if (isReloading) {
@@ -280,6 +288,7 @@ var SdocEditor = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
280
288
  }))));
281
289
  }
282
290
  var isShowComment = typeof showComment === 'boolean' ? showComment : true;
291
+ var mobileLogin = _context["default"].getSetting('mobileLogin');
283
292
  if (_commonUtils.isMobile && isEdit) {
284
293
  return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_layout.EditorContainer, {
285
294
  editor: validEditor
@@ -293,7 +302,7 @@ var SdocEditor = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
293
302
  slateValue: slateValue,
294
303
  updateSlateValue: onValueChange,
295
304
  showComment: false
296
- })), isShowHeaderToolbar && /*#__PURE__*/_react["default"].createElement(_extension.HeaderToolbar, {
305
+ })), mobileLogin && /*#__PURE__*/_react["default"].createElement(_mobileMessage["default"], null), !mobileLogin && isShowHeaderToolbar && /*#__PURE__*/_react["default"].createElement(_extension.HeaderToolbar, {
297
306
  editor: validEditor,
298
307
  isEdit: isEdit
299
308
  }))), /*#__PURE__*/_react["default"].createElement(_insertElementDialog["default"], {
@@ -54,5 +54,5 @@ var FONT_SIZE_REDUCE = exports.FONT_SIZE_REDUCE = 'font-size-reduce';
54
54
 
55
55
  // group
56
56
  var GROUP = exports.GROUP = 'group';
57
- var TOP_LEVEL_TYPES = exports.TOP_LEVEL_TYPES = [BLOCKQUOTE, HEADER1, HEADER2, HEADER3, HEADER4, HEADER5, HEADER6, ORDERED_LIST, UNORDERED_LIST, CHECK_LIST_ITEM, PARAGRAPH, CODE_BLOCK, TABLE];
57
+ var TOP_LEVEL_TYPES = exports.TOP_LEVEL_TYPES = [BLOCKQUOTE, TITLE, SUBTITLE, HEADER1, HEADER2, HEADER3, HEADER4, HEADER5, HEADER6, ORDERED_LIST, UNORDERED_LIST, CHECK_LIST_ITEM, PARAGRAPH, CODE_BLOCK, TABLE, IMAGE_BLOCK, VIDEO, WHITEBOARD];
58
58
  var INLINE_LEVEL_TYPES = exports.INLINE_LEVEL_TYPES = [IMAGE, LINK, MENTION, MENTION_TEMP];
@@ -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.someNode = exports.isTopLevelListItem = exports.isTextNode = exports.isStartPoint = exports.isSelectionAtBlockStart = exports.isSelectionAtBlockEnd = exports.isRangeInSameBlock = exports.isRangeAcrossBlocks = exports.isMultiLevelList = exports.isMiddlePoint = exports.isLastNode = exports.isLastChild = exports.isHasImg = exports.isFirstChild = exports.isEndPoint = exports.isEmptyArticle = exports.isCursorAtBlockStart = exports.isCurrentLineHasText = exports.isCurrentLineEmpty = exports.isContainsVoidElement = exports.isBlockTextEmptyAfterSelection = exports.isBlockAboveEmpty = exports.isAncestorEmpty = exports.getTopLevelBlockNode = exports.getStartPoint = exports.getSelectedNodeEntryByType = exports.getSelectedNodeByTypes = exports.getSelectedNodeByType = exports.getSelectedElems = exports.getQueryOptions = exports.getPreviousPath = exports.getPrevNode = exports.getPointBefore = exports.getParentNode = exports.getNodes = exports.getNodeType = exports.getNodeEntries = exports.getNodeById = exports.getNode = exports.getNextSiblingNodes = exports.getNextNode = exports.getLastChildPath = exports.getLastChild = exports.getEndPoint = exports.getEditorString = exports.getDeepInlineChildren = exports.getCurrentNode = exports.getCommonNode = exports.getChildren = exports.getAboveNode = exports.getAboveBlockNode = exports.findPath = exports.findNode = exports.findDescendant = void 0;
7
+ exports.someNode = exports.isTopLevelListItem = exports.isTextNode = exports.isStartPoint = exports.isSelectionAtBlockStart = exports.isSelectionAtBlockEnd = exports.isRangeInSameBlock = exports.isRangeAcrossBlocks = exports.isMultiLevelList = exports.isMiddlePoint = exports.isLastNode = exports.isLastChild = exports.isHasImg = exports.isFirstChild = exports.isEndPoint = exports.isEmptyArticle = exports.isCursorAtBlockStart = exports.isCurrentLineHasText = exports.isCurrentLineEmpty = exports.isContainsVoidElement = exports.isBlockTextEmptyAfterSelection = exports.isBlockAboveEmpty = exports.isAncestorEmpty = exports.getTopLevelBlockNode = exports.getStartPoint = exports.getSelectedNodeEntryByType = exports.getSelectedNodeByTypes = exports.getSelectedNodeByType = exports.getSelectedElems = exports.getQueryOptions = exports.getPreviousPath = exports.getPrevNode = exports.getPointBefore = exports.getParentNode = exports.getNodes = exports.getNodeType = exports.getNodeEntries = exports.getNodeById = exports.getNode = exports.getNextSiblingNodes = exports.getNextNode = exports.getNearestBlockNode = exports.getLastChildPath = exports.getLastChild = exports.getEndPoint = exports.getEditorString = exports.getDeepInlineChildren = exports.getCurrentNode = exports.getCommonNode = exports.getChildren = exports.getAboveNode = exports.getAboveBlockNode = exports.findPath = exports.findNode = exports.findDescendant = void 0;
8
8
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectWithoutProperties"));
9
9
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/toConsumableArray"));
10
10
  var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createForOfIteratorHelper"));
@@ -261,6 +261,32 @@ var getTopLevelBlockNode = exports.getTopLevelBlockNode = function getTopLevelBl
261
261
  }
262
262
  });
263
263
  };
264
+ var getNearestBlockNode = exports.getNearestBlockNode = function getNearestBlockNode(editor) {
265
+ if (!editor.selection) return null;
266
+ var LIST_TYPES = [_constants.UNORDERED_LIST, _constants.ORDERED_LIST];
267
+ var _Editor$nodes7 = _slate.Editor.nodes(editor, {
268
+ at: editor.selection,
269
+ match: function match(n) {
270
+ return _slate.Element.isElement(n) && _slate.Editor.isBlock(editor, n) && LIST_TYPES.includes(n.type);
271
+ },
272
+ mode: 'lowest'
273
+ }),
274
+ _Editor$nodes8 = (0, _slicedToArray2["default"])(_Editor$nodes7, 1),
275
+ nodeEntry = _Editor$nodes8[0];
276
+ if (nodeEntry) {
277
+ return nodeEntry;
278
+ }
279
+ var _Editor$nodes9 = _slate.Editor.nodes(editor, {
280
+ at: editor.selection,
281
+ match: function match(n) {
282
+ return _slate.Element.isElement(n) && _slate.Editor.isBlock(editor, n) && _constants.TOP_LEVEL_TYPES.includes(n.type);
283
+ },
284
+ mode: 'lowest'
285
+ }),
286
+ _Editor$nodes0 = (0, _slicedToArray2["default"])(_Editor$nodes9, 1),
287
+ nodeEntry2 = _Editor$nodes0[0];
288
+ return nodeEntry2 || null;
289
+ };
264
290
  var getPrevNode = exports.getPrevNode = function getPrevNode(editor) {
265
291
  var lowerNodeEntry = getAboveNode(editor, {
266
292
  mode: 'lowest',
@@ -308,15 +334,15 @@ var getPrevNode = exports.getPrevNode = function getPrevNode(editor) {
308
334
  };
309
335
  var getCurrentNode = exports.getCurrentNode = function getCurrentNode(editor) {
310
336
  if (!editor.selection) return null;
311
- var _Editor$nodes7 = _slate.Editor.nodes(editor, {
337
+ var _Editor$nodes1 = _slate.Editor.nodes(editor, {
312
338
  at: editor.selection,
313
339
  match: function match(n) {
314
340
  return _slate.Element.isElement(n) && _slate.Editor.isBlock(editor, n);
315
341
  },
316
342
  mode: 'lowest'
317
343
  }),
318
- _Editor$nodes8 = (0, _slicedToArray2["default"])(_Editor$nodes7, 1),
319
- nodeEntry = _Editor$nodes8[0];
344
+ _Editor$nodes10 = (0, _slicedToArray2["default"])(_Editor$nodes1, 1),
345
+ nodeEntry = _Editor$nodes10[0];
320
346
  return nodeEntry || null;
321
347
  };
322
348
  var getNextNode = exports.getNextNode = function getNextNode(editor) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/sdoc-editor",
3
- "version": "3.0.3",
3
+ "version": "3.0.4",
4
4
  "main": "dist/index.js",
5
5
  "scripts": {
6
6
  "test": "jest",
@@ -71,5 +71,5 @@
71
71
  "publishConfig": {
72
72
  "access": "public"
73
73
  },
74
- "gitHead": "0a7ebc1042c83af89889893429b3b1a6b1a13431"
74
+ "gitHead": "40de301531da184f54c0270ca175c91c5ce52c5c"
75
75
  }