@seafile/sdoc-editor 2.0.204 → 2.0.206
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/android/constants.js +5 -1
- package/dist/android/dispatch-content-select-event.js +41 -0
- package/dist/android/dispatch-system-event.js +20 -0
- package/dist/android/js-bridge.js +4 -3
- package/dist/android/mobile-message.js +119 -0
- package/dist/android/toolbar-trigger.js +59 -0
- package/dist/assets/css/layout.css +1 -2
- package/dist/editor/sdoc-editor.js +13 -2
- package/dist/extension/constants/element-type.js +1 -1
- package/dist/extension/core/queries/index.js +30 -4
- package/dist/views/readonly-article.js +3 -1
- package/package.json +2 -2
|
@@ -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:
|
|
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
|
-
|
|
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"));
|
|
@@ -81,6 +84,7 @@ var SdocEditor = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
|
81
84
|
|
|
82
85
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
83
86
|
}, []);
|
|
87
|
+
|
|
84
88
|
// useMount: init socket connection
|
|
85
89
|
(0, _react.useEffect)(function () {
|
|
86
90
|
if (propsEditor) return;
|
|
@@ -117,10 +121,12 @@ var SdocEditor = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
|
117
121
|
(0, _react.useEffect)(function () {
|
|
118
122
|
var mobileLogin = _context["default"].getSetting('mobileLogin');
|
|
119
123
|
if (mobileLogin) {
|
|
120
|
-
_jsBridge["default"].init();
|
|
124
|
+
_jsBridge["default"].init(validEditor);
|
|
121
125
|
(0, _outlineModule.registerOutlineEventHandler)();
|
|
122
126
|
(0, _editorTitleBar.registerTitleBarEventHandler)();
|
|
127
|
+
(0, _toolbarTrigger.registerToolbarMenuTrigger)();
|
|
123
128
|
(0, _outlineModule.updateOutlineValue)(document.elements);
|
|
129
|
+
(0, _toolbarTrigger.updateEditorHistory)(validEditor);
|
|
124
130
|
}
|
|
125
131
|
return function () {
|
|
126
132
|
_jsBridge["default"].finishPage();
|
|
@@ -233,6 +239,9 @@ var SdocEditor = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
|
233
239
|
if (_commonUtils.isMobile) {
|
|
234
240
|
(0, _outlineModule.updateOutlineValue)(value);
|
|
235
241
|
}
|
|
242
|
+
if (_commonUtils.isMobile && isEdit) {
|
|
243
|
+
(0, _dispatchContentSelectEvent.dispatchContentSelectEvent)(validEditor);
|
|
244
|
+
}
|
|
236
245
|
};
|
|
237
246
|
var isFreezed = _context["default"].getSetting('isFreezed');
|
|
238
247
|
if (isReloading) {
|
|
@@ -254,6 +263,7 @@ var SdocEditor = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
|
254
263
|
}, /*#__PURE__*/_react["default"].createElement(_readonlyArticle["default"], {
|
|
255
264
|
editor: validEditor,
|
|
256
265
|
slateValue: slateValue,
|
|
266
|
+
updateSlateValue: onValueChange,
|
|
257
267
|
showComment: false
|
|
258
268
|
}))));
|
|
259
269
|
}
|
|
@@ -277,6 +287,7 @@ var SdocEditor = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
|
277
287
|
}))));
|
|
278
288
|
}
|
|
279
289
|
var isShowComment = typeof showComment === 'boolean' ? showComment : true;
|
|
290
|
+
var mobileLogin = _context["default"].getSetting('mobileLogin');
|
|
280
291
|
if (_commonUtils.isMobile && isEdit) {
|
|
281
292
|
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_layout.EditorContainer, {
|
|
282
293
|
editor: validEditor
|
|
@@ -290,7 +301,7 @@ var SdocEditor = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
|
290
301
|
slateValue: slateValue,
|
|
291
302
|
updateSlateValue: onValueChange,
|
|
292
303
|
showComment: false
|
|
293
|
-
})), isShowHeaderToolbar && /*#__PURE__*/_react["default"].createElement(_extension.HeaderToolbar, {
|
|
304
|
+
})), mobileLogin && /*#__PURE__*/_react["default"].createElement(_mobileMessage["default"], null), !mobileLogin && isShowHeaderToolbar && /*#__PURE__*/_react["default"].createElement(_extension.HeaderToolbar, {
|
|
294
305
|
editor: validEditor,
|
|
295
306
|
isEdit: isEdit
|
|
296
307
|
}))), /*#__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];
|
|
@@ -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$
|
|
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$
|
|
319
|
-
nodeEntry = _Editor$
|
|
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) {
|
|
@@ -16,12 +16,14 @@ var _layout = require("../layout");
|
|
|
16
16
|
var ReadOnlyArticle = function ReadOnlyArticle(_ref) {
|
|
17
17
|
var editor = _ref.editor,
|
|
18
18
|
slateValue = _ref.slateValue,
|
|
19
|
+
updateSlateValue = _ref.updateSlateValue,
|
|
19
20
|
_ref$showComment = _ref.showComment,
|
|
20
21
|
showComment = _ref$showComment === void 0 ? false : _ref$showComment;
|
|
21
22
|
var decorate = (0, _decorates.usePipDecorate)(editor);
|
|
22
23
|
return /*#__PURE__*/_react["default"].createElement(_slateReact.Slate, {
|
|
23
24
|
editor: editor,
|
|
24
|
-
value: slateValue
|
|
25
|
+
value: slateValue,
|
|
26
|
+
onChange: updateSlateValue
|
|
25
27
|
}, /*#__PURE__*/_react["default"].createElement(_layout.ArticleContainer, {
|
|
26
28
|
editor: editor
|
|
27
29
|
}, /*#__PURE__*/_react["default"].createElement(_react.Fragment, null, /*#__PURE__*/_react["default"].createElement(_highlight.SetNodeToDecorations, null), /*#__PURE__*/_react["default"].createElement(_slateReact.Editable, {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seafile/sdoc-editor",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.206",
|
|
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": "
|
|
74
|
+
"gitHead": "4547ca460df8f4b16b570575f65bb9fb3f6c75da"
|
|
75
75
|
}
|