@seafile/sdoc-editor 2.0.203 → 2.0.205

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"));
@@ -117,10 +120,12 @@ var SdocEditor = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
117
120
  (0, _react.useEffect)(function () {
118
121
  var mobileLogin = _context["default"].getSetting('mobileLogin');
119
122
  if (mobileLogin) {
120
- _jsBridge["default"].init();
123
+ _jsBridge["default"].init(validEditor);
121
124
  (0, _outlineModule.registerOutlineEventHandler)();
122
125
  (0, _editorTitleBar.registerTitleBarEventHandler)();
126
+ (0, _toolbarTrigger.registerToolbarMenuTrigger)();
123
127
  (0, _outlineModule.updateOutlineValue)(document.elements);
128
+ (0, _toolbarTrigger.updateEditorHistory)(validEditor);
124
129
  }
125
130
  return function () {
126
131
  _jsBridge["default"].finishPage();
@@ -233,6 +238,9 @@ var SdocEditor = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
233
238
  if (_commonUtils.isMobile) {
234
239
  (0, _outlineModule.updateOutlineValue)(value);
235
240
  }
241
+ if (_commonUtils.isMobile && isEdit) {
242
+ (0, _dispatchContentSelectEvent.dispatchContentSelectEvent)(validEditor);
243
+ }
236
244
  };
237
245
  var isFreezed = _context["default"].getSetting('isFreezed');
238
246
  if (isReloading) {
@@ -277,6 +285,7 @@ var SdocEditor = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
277
285
  }))));
278
286
  }
279
287
  var isShowComment = typeof showComment === 'boolean' ? showComment : true;
288
+ var mobileLogin = _context["default"].getSetting('mobileLogin');
280
289
  if (_commonUtils.isMobile && isEdit) {
281
290
  return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_layout.EditorContainer, {
282
291
  editor: validEditor
@@ -290,7 +299,7 @@ var SdocEditor = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
290
299
  slateValue: slateValue,
291
300
  updateSlateValue: onValueChange,
292
301
  showComment: false
293
- })), isShowHeaderToolbar && /*#__PURE__*/_react["default"].createElement(_extension.HeaderToolbar, {
302
+ })), mobileLogin && /*#__PURE__*/_react["default"].createElement(_mobileMessage["default"], null), !mobileLogin && isShowHeaderToolbar && /*#__PURE__*/_react["default"].createElement(_extension.HeaderToolbar, {
294
303
  editor: validEditor,
295
304
  isEdit: isEdit
296
305
  }))), /*#__PURE__*/_react["default"].createElement(_insertElementDialog["default"], {
@@ -53,5 +53,5 @@ var FONT_SIZE_REDUCE = exports.FONT_SIZE_REDUCE = 'font-size-reduce';
53
53
 
54
54
  // group
55
55
  var GROUP = exports.GROUP = 'group';
56
- 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];
56
+ 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];
57
57
  var INLINE_LEVEL_TYPES = exports.INLINE_LEVEL_TYPES = [IMAGE, LINK, MENTION, MENTION_TEMP];
@@ -201,7 +201,7 @@ Object.defineProperty(exports, "HEADER6", {
201
201
  return _elementType.HEADER6;
202
202
  }
203
203
  });
204
- exports.HEADER_TITLE_MAP = exports.HEADERS = void 0;
204
+ exports.HEADER_TITLE_MAP = exports.HEADER_TAG = exports.HEADERS = void 0;
205
205
  Object.defineProperty(exports, "IMAGE", {
206
206
  enumerable: true,
207
207
  get: function get() {
@@ -498,6 +498,14 @@ var _menusConfig = require("./menus-config");
498
498
  var _MOUSE_ENTER_EVENT_DI; // extension plugin
499
499
  // eslint-disable-next-line no-duplicate-imports
500
500
  var HEADERS = exports.HEADERS = [_elementType.HEADER1, _elementType.HEADER2, _elementType.HEADER3, _elementType.HEADER4, _elementType.HEADER5, _elementType.HEADER6];
501
+ var HEADER_TAG = exports.HEADER_TAG = {
502
+ header1: 'H1',
503
+ header2: 'H2',
504
+ header3: 'H3',
505
+ header4: 'H4',
506
+ header5: 'H5',
507
+ header6: 'H6'
508
+ };
501
509
  var HEADER_TITLE_MAP = exports.HEADER_TITLE_MAP = (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, _elementType.TITLE, 'Title'), _elementType.SUBTITLE, 'Subtitle'), _elementType.HEADER1, 'Header_one'), _elementType.HEADER2, 'Header_two'), _elementType.HEADER3, 'Header_three'), _elementType.HEADER4, 'Header_four'), _elementType.HEADER5, 'Header_five'), _elementType.HEADER6, 'Header_six'), _elementType.PARAGRAPH, 'Paragraph');
502
510
  var TRANSPARENT = exports.TRANSPARENT = 'transparent';
503
511
  var CLIPBOARD_FORMAT_KEY = exports.CLIPBOARD_FORMAT_KEY = 'x-slate-fragment';
@@ -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) {
@@ -107,7 +107,33 @@
107
107
 
108
108
  .link-block-wrapper .link-block-container {
109
109
  width: 100%;
110
- margin: 5px 0;
110
+ padding: 5px 0;
111
+ }
112
+
113
+ .link-block-wrapper .link-header-block-container {
114
+ width: 100%;
115
+ padding: 5px 0;
116
+ display: flex;
117
+ color: #495057;
118
+ cursor: pointer;
119
+ }
120
+
121
+ .link-block-wrapper .link-header-block-container:hover {
122
+ background-color: rgb(245, 245, 245);
123
+ }
124
+
125
+ .link-block-wrapper .link-header-block-container .heading-prefix {
126
+ margin-right: 6px;
127
+ padding-left: 0.75rem;
128
+ }
129
+
130
+ .link-block-wrapper .link-header-block-container .linked-header-block-item {
131
+ display: block;
132
+ font-size: 15px;
133
+ margin-right: 5px;
134
+ overflow: hidden;
135
+ white-space: nowrap;
136
+ text-overflow: ellipsis;
111
137
  }
112
138
 
113
139
  .link-block-wrapper .link-block-container .linked-block-item {
@@ -117,6 +143,25 @@
117
143
  padding-left: 0.75rem;
118
144
  }
119
145
 
146
+ .selected-linked-block-wrapper .selected-linked-block .linked-header-block-item,
147
+ .selected-linked-block .sdoc-header-1,
148
+ .selected-linked-block .sdoc-header-2,
149
+ .selected-linked-block .sdoc-header-3,
150
+ .selected-linked-block .sdoc-header-4,
151
+ .selected-linked-block .sdoc-header-5,
152
+ .selected-linked-block .sdoc-header-6 {
153
+ color: #495057;
154
+ font-size: 15px !important;
155
+ font-weight: normal;
156
+ overflow: hidden;
157
+ white-space: nowrap;
158
+ text-overflow: ellipsis;
159
+ }
160
+
161
+ .selected-linked-block-wrapper .selected-linked-block .heading-prefix {
162
+ display: none;
163
+ }
164
+
120
165
  .link-block-wrapper .select-block-wrapper blockquote,
121
166
  .link-block-wrapper .link-block-container blockquote {
122
167
  border-left: 4px solid #ddd;
@@ -64,30 +64,34 @@ var AddLinkDialog = function AddLinkDialog(_ref) {
64
64
  _useState10 = (0, _slicedToArray2["default"])(_useState1, 2),
65
65
  selectedBlockId = _useState10[0],
66
66
  setSelectedBlockId = _useState10[1];
67
- var _useState11 = (0, _react.useState)(false),
67
+ var _useState11 = (0, _react.useState)([]),
68
68
  _useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
69
- isOpenSelect = _useState12[0],
70
- setIsOpenSelect = _useState12[1];
69
+ headerList = _useState12[0],
70
+ setheaderList = _useState12[1];
71
71
  var _useState13 = (0, _react.useState)(false),
72
72
  _useState14 = (0, _slicedToArray2["default"])(_useState13, 2),
73
- isOpenSelectHeader = _useState14[0],
74
- setIsOpenSelectHeader = _useState14[1];
73
+ isOpenSelect = _useState14[0],
74
+ setIsOpenSelect = _useState14[1];
75
75
  var _useState15 = (0, _react.useState)(false),
76
76
  _useState16 = (0, _slicedToArray2["default"])(_useState15, 2),
77
- isOpenSelectImageBlock = _useState16[0],
78
- setIsOpenSelectImageBlock = _useState16[1];
77
+ isOpenSelectHeader = _useState16[0],
78
+ setIsOpenSelectHeader = _useState16[1];
79
79
  var _useState17 = (0, _react.useState)(false),
80
80
  _useState18 = (0, _slicedToArray2["default"])(_useState17, 2),
81
- isOpenSelectCodeBlock = _useState18[0],
82
- setIsOpenSelectCodeBlock = _useState18[1];
81
+ isOpenSelectImageBlock = _useState18[0],
82
+ setIsOpenSelectImageBlock = _useState18[1];
83
83
  var _useState19 = (0, _react.useState)(false),
84
84
  _useState20 = (0, _slicedToArray2["default"])(_useState19, 2),
85
- isOpenSelectBlockquote = _useState20[0],
86
- setIsOpenSelectBlockquote = _useState20[1];
87
- var _useState21 = (0, _react.useState)(''),
85
+ isOpenSelectCodeBlock = _useState20[0],
86
+ setIsOpenSelectCodeBlock = _useState20[1];
87
+ var _useState21 = (0, _react.useState)(false),
88
88
  _useState22 = (0, _slicedToArray2["default"])(_useState21, 2),
89
- htmlString = _useState22[0],
90
- setHtmlString = _useState22[1];
89
+ isOpenSelectBlockquote = _useState22[0],
90
+ setIsOpenSelectBlockquote = _useState22[1];
91
+ var _useState23 = (0, _react.useState)(''),
92
+ _useState24 = (0, _slicedToArray2["default"])(_useState23, 2),
93
+ htmlString = _useState24[0],
94
+ setHtmlString = _useState24[1];
91
95
  var submit = (0, _react.useCallback)(function () {
92
96
  setLinkErrorMessage('');
93
97
  setTitleErrorMessage('');
@@ -144,7 +148,7 @@ var AddLinkDialog = function AddLinkDialog(_ref) {
144
148
  }));
145
149
  }, [closeDialog]);
146
150
  var handleOnChangeBlock = function handleOnChangeBlock(e) {
147
- var block = e.target.closest('.linked-block-item');
151
+ var block = e.target.closest('.linked-block-item') || e.currentTarget.querySelector('.linked-header-block-item');
148
152
  if (block) {
149
153
  var clone = block.cloneNode(true);
150
154
  var displayContainer = document.getElementById('selected-block-display');
@@ -175,6 +179,7 @@ var AddLinkDialog = function AddLinkDialog(_ref) {
175
179
  };
176
180
  }, [linked_id]);
177
181
  (0, _react.useEffect)(function () {
182
+ // Get codeblock,blockquote,image html
178
183
  var genHtml = /*#__PURE__*/function () {
179
184
  var _ref3 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/(0, _regenerator2["default"])().m(function _callee() {
180
185
  var list, mdValue, ids, processor, file;
@@ -207,7 +212,15 @@ var AddLinkDialog = function AddLinkDialog(_ref) {
207
212
  }();
208
213
  genHtml();
209
214
  }, [editor.children]);
210
- var headersHTML = (0, _helpers.parseHtmlString)(htmlString, 'h1,h2,h3,h4,h5,h6');
215
+ (0, _react.useEffect)(function () {
216
+ // Get header node list
217
+ var headerList = editor.children.filter(function (node) {
218
+ return _slate.Element.isElement(node) && !(0, _helpers.isEmptyNode)(node) && _constants.HEADERS.includes(node.type);
219
+ });
220
+ if (headerList.length > 0) {
221
+ setheaderList(headerList);
222
+ }
223
+ }, [editor.children]);
211
224
  var imagesHTML = (0, _helpers.parseHtmlString)(htmlString, 'img');
212
225
  var codeBlockHTML = (0, _helpers.parseHtmlString)(htmlString, 'pre');
213
226
  var blockquoteHTML = (0, _helpers.parseHtmlString)(htmlString, 'blockquote');
@@ -279,7 +292,7 @@ var AddLinkDialog = function AddLinkDialog(_ref) {
279
292
  className: "sdoc-file-icon sdoc-file-icon-toggle sdocfont sdoc-right-slide"
280
293
  })), isOpenSelect && /*#__PURE__*/_react["default"].createElement("div", {
281
294
  className: "link-block-wrapper"
282
- }, headersHTML && /*#__PURE__*/_react["default"].createElement("div", {
295
+ }, headerList.length > 0 && /*#__PURE__*/_react["default"].createElement("div", {
283
296
  className: (0, _classnames["default"])('select-block-wrapper', {
284
297
  'expanded': isOpenSelectHeader
285
298
  }),
@@ -290,14 +303,20 @@ var AddLinkDialog = function AddLinkDialog(_ref) {
290
303
  className: "sdoc-file-icon sdoc-file-icon-toggle sdocfont sdoc-right-slide"
291
304
  }), /*#__PURE__*/_react["default"].createElement("div", {
292
305
  className: "title"
293
- }, t('Header'))), isOpenSelectHeader && /*#__PURE__*/_react["default"].createElement("div", {
294
- className: "link-block-container",
295
- dangerouslySetInnerHTML: {
296
- __html: headersHTML
297
- },
298
- onClick: function onClick(e) {
299
- return handleOnChangeBlock(e);
300
- }
306
+ }, t('Header'))), isOpenSelectHeader && headerList.map(function (header, key) {
307
+ var headerContext = _slate.Node.string(header);
308
+ return /*#__PURE__*/_react["default"].createElement("div", {
309
+ className: "link-header-block-container",
310
+ key: key,
311
+ onClick: function onClick(e) {
312
+ return handleOnChangeBlock(e);
313
+ }
314
+ }, /*#__PURE__*/_react["default"].createElement("div", {
315
+ className: "heading-prefix"
316
+ }, _constants.HEADER_TAG[header.type]), /*#__PURE__*/_react["default"].createElement("div", {
317
+ "data-id": header.id,
318
+ className: "linked-header-block-item"
319
+ }, headerContext));
301
320
  }), imagesHTML && /*#__PURE__*/_react["default"].createElement("div", {
302
321
  className: (0, _classnames["default"])('select-block-wrapper', {
303
322
  'expanded': isOpenSelectImageBlock
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/sdoc-editor",
3
- "version": "2.0.203",
3
+ "version": "2.0.205",
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": "43c4ac276fa9d7333f769fc7029a918785875191"
74
+ "gitHead": "f6cfd4e2afabbf1bd31821a14df8d706df74c06a"
75
75
  }