@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.
- 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 +11 -2
- package/dist/extension/constants/element-type.js +1 -1
- package/dist/extension/constants/index.js +9 -1
- package/dist/extension/core/queries/index.js +30 -4
- package/dist/extension/plugins/link/dialog/add-link-dialog/index.css +46 -1
- package/dist/extension/plugins/link/dialog/add-link-dialog/index.js +44 -25
- 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"));
|
|
@@ -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$
|
|
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) {
|
|
@@ -107,7 +107,33 @@
|
|
|
107
107
|
|
|
108
108
|
.link-block-wrapper .link-block-container {
|
|
109
109
|
width: 100%;
|
|
110
|
-
|
|
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)(
|
|
67
|
+
var _useState11 = (0, _react.useState)([]),
|
|
68
68
|
_useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
|
|
69
|
-
|
|
70
|
-
|
|
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
|
-
|
|
74
|
-
|
|
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
|
-
|
|
78
|
-
|
|
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
|
-
|
|
82
|
-
|
|
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
|
-
|
|
86
|
-
|
|
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
|
-
|
|
90
|
-
|
|
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
|
-
|
|
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
|
-
},
|
|
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 &&
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
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.
|
|
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": "
|
|
74
|
+
"gitHead": "f6cfd4e2afabbf1bd31821a14df8d706df74c06a"
|
|
75
75
|
}
|