@seafile/sdoc-editor 2.0.89 → 2.0.92
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/assets/css/layout.css +21 -0
- package/dist/assets/css/sdoc-editor-article.css +5 -0
- package/dist/editor/editable-article.js +8 -1
- package/dist/editor/sdoc-editor.js +35 -1
- package/dist/extension/commons/menu/menu.css +4 -0
- package/dist/extension/plugins/header/menu/index.js +3 -1
- package/dist/extension/plugins/header/menu/style.css +5 -0
- package/dist/extension/plugins/table/plugin.js +1 -1
- package/dist/extension/toolbar/header-toolbar/index.js +25 -0
- package/dist/extension/toolbar/insert-element-toolbar/index.js +32 -1
- package/dist/extension/toolbar/side-toolbar/index.js +3 -2
- package/package.json +2 -2
|
@@ -158,3 +158,24 @@
|
|
|
158
158
|
border-right: none;
|
|
159
159
|
padding-left: 0 !important;
|
|
160
160
|
}
|
|
161
|
+
|
|
162
|
+
.sdoc-editor-container.mobile .sdoc-editor-toolbar {
|
|
163
|
+
justify-content: space-evenly;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
.sdoc-editor-container.mobile .sdoc-editor-toolbar .sdoc-editor-toolbar-right-menu {
|
|
167
|
+
bottom: 1px;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
.sdoc-editor-container.mobile .sdoc-editor-content {
|
|
171
|
+
min-width: 100%;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
.mobile .sdoc-article-container {
|
|
175
|
+
width: 100% !important;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
.sdoc-editor-container.mobile .sdoc-article-container {
|
|
179
|
+
padding-top: 0;
|
|
180
|
+
padding-bottom: 0;
|
|
181
|
+
}
|
|
@@ -23,6 +23,7 @@ var _highlight = require("../highlight");
|
|
|
23
23
|
var _useForceUpdate = _interopRequireDefault(require("../hooks/use-force-update"));
|
|
24
24
|
var _useScrollContext = require("../hooks/use-scroll-context");
|
|
25
25
|
var _layout = require("../layout");
|
|
26
|
+
var _commonUtils = require("../utils/common-utils");
|
|
26
27
|
var _domUtils = require("../utils/dom-utils");
|
|
27
28
|
var _eventBus = _interopRequireDefault(require("../utils/event-bus"));
|
|
28
29
|
var _eventHandler = _interopRequireDefault(require("../utils/event-handler"));
|
|
@@ -195,6 +196,11 @@ var EditableArticle = function EditableArticle(_ref) {
|
|
|
195
196
|
|
|
196
197
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
197
198
|
}, [scrollRef]);
|
|
199
|
+
var onCompositionEnd = (0, _react.useCallback)(function (event) {
|
|
200
|
+
if (event.data && _commonUtils.isMobile) {
|
|
201
|
+
editor.insertText(event.data);
|
|
202
|
+
}
|
|
203
|
+
}, []);
|
|
198
204
|
var handleScrollIntoView = (0, _react.useCallback)(function (editor, domRange) {
|
|
199
205
|
try {
|
|
200
206
|
var selection = editor.selection;
|
|
@@ -224,7 +230,7 @@ var EditableArticle = function EditableArticle(_ref) {
|
|
|
224
230
|
onChange: updateSlateValue
|
|
225
231
|
}, /*#__PURE__*/_react["default"].createElement(_layout.ArticleContainer, {
|
|
226
232
|
editor: editor
|
|
227
|
-
}, /*#__PURE__*/_react["default"].createElement(_react.Fragment, null, /*#__PURE__*/_react["default"].createElement(_extension.ContextToolbar, null), /*#__PURE__*/_react["default"].createElement(_highlight.SetNodeToDecorations, null), /*#__PURE__*/_react["default"].createElement(_slateReact.Editable, {
|
|
233
|
+
}, /*#__PURE__*/_react["default"].createElement(_react.Fragment, null, !_commonUtils.isMobile && /*#__PURE__*/_react["default"].createElement(_extension.ContextToolbar, null), /*#__PURE__*/_react["default"].createElement(_highlight.SetNodeToDecorations, null), /*#__PURE__*/_react["default"].createElement(_slateReact.Editable, {
|
|
228
234
|
scrollSelectionIntoView: handleScrollIntoView,
|
|
229
235
|
cursors: cursors,
|
|
230
236
|
renderElement: _extension.renderElement,
|
|
@@ -235,6 +241,7 @@ var EditableArticle = function EditableArticle(_ref) {
|
|
|
235
241
|
onCut: eventProxy.onCut,
|
|
236
242
|
onCopy: eventProxy.onCopy,
|
|
237
243
|
onCompositionStart: eventProxy.onCompositionStart,
|
|
244
|
+
onCompositionEnd: onCompositionEnd,
|
|
238
245
|
id: "sdoc-editor",
|
|
239
246
|
"aria-label": "textbox"
|
|
240
247
|
})), /*#__PURE__*/_react["default"].createElement(_extension.SideToolbar, null), showComment && /*#__PURE__*/_react["default"].createElement(_comment["default"], {
|
|
@@ -62,6 +62,10 @@ var SdocEditor = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
|
62
62
|
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
63
63
|
slateValue = _useState4[0],
|
|
64
64
|
_setSlateValue = _useState4[1];
|
|
65
|
+
var _useState5 = (0, _react.useState)(false),
|
|
66
|
+
_useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
|
|
67
|
+
isEdit = _useState6[0],
|
|
68
|
+
setIsEdit = _useState6[1];
|
|
65
69
|
|
|
66
70
|
// Fix: The editor's children are not updated when the document is updated in revision
|
|
67
71
|
// In revision mode, the document is updated, but the editor's children are not updated,as onValueChange override the new document.elements. This unexpected action cause the editor to display the old content
|
|
@@ -159,6 +163,17 @@ var SdocEditor = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
|
159
163
|
unsubscribePresentationFullScreen();
|
|
160
164
|
};
|
|
161
165
|
}, [handleFullScreenPresentation]);
|
|
166
|
+
var handleEditToggle = (0, _react.useCallback)(function (_ref3) {
|
|
167
|
+
var isEdit = _ref3.isEdit;
|
|
168
|
+
setIsEdit(isEdit);
|
|
169
|
+
}, []);
|
|
170
|
+
(0, _react.useEffect)(function () {
|
|
171
|
+
var eventBus = _eventBus["default"].getInstance();
|
|
172
|
+
var unsubscribeViewOrEdit = eventBus.subscribe('ViewOrEdit', handleEditToggle);
|
|
173
|
+
return function () {
|
|
174
|
+
unsubscribeViewOrEdit();
|
|
175
|
+
};
|
|
176
|
+
}, [handleEditToggle]);
|
|
162
177
|
(0, _react.useEffect)(function () {
|
|
163
178
|
var handleExit = function handleExit(e) {
|
|
164
179
|
if ((0, _isHotkey["default"])('esc', e)) {
|
|
@@ -220,7 +235,7 @@ var SdocEditor = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
|
220
235
|
className: "h-100 w-100 d-flex align-items-center justify-content-center"
|
|
221
236
|
}, /*#__PURE__*/_react["default"].createElement(_fileLoading["default"], null));
|
|
222
237
|
}
|
|
223
|
-
if (_commonUtils.isMobile || showFullScreen) {
|
|
238
|
+
if (_commonUtils.isMobile && !isEdit || showFullScreen) {
|
|
224
239
|
return /*#__PURE__*/_react["default"].createElement(_layout.EditorContainer, {
|
|
225
240
|
editor: validEditor,
|
|
226
241
|
readonly: true,
|
|
@@ -257,6 +272,25 @@ var SdocEditor = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
|
257
272
|
}))));
|
|
258
273
|
}
|
|
259
274
|
var isShowComment = typeof showComment === 'boolean' ? showComment : true;
|
|
275
|
+
if (_commonUtils.isMobile && isEdit) {
|
|
276
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_layout.EditorContainer, {
|
|
277
|
+
editor: validEditor
|
|
278
|
+
}, /*#__PURE__*/_react["default"].createElement(_useColorContext.ColorProvider, null, /*#__PURE__*/_react["default"].createElement(_layout.EditorContent, {
|
|
279
|
+
docValue: slateValue,
|
|
280
|
+
showOutline: false,
|
|
281
|
+
editor: validEditor,
|
|
282
|
+
showComment: false
|
|
283
|
+
}, /*#__PURE__*/_react["default"].createElement(_editableArticle["default"], {
|
|
284
|
+
editor: validEditor,
|
|
285
|
+
slateValue: slateValue,
|
|
286
|
+
updateSlateValue: onValueChange,
|
|
287
|
+
showComment: false
|
|
288
|
+
})), isShowHeaderToolbar && /*#__PURE__*/_react["default"].createElement(_extension.HeaderToolbar, {
|
|
289
|
+
editor: validEditor
|
|
290
|
+
}))), /*#__PURE__*/_react["default"].createElement(_insertElementDialog["default"], {
|
|
291
|
+
editor: validEditor
|
|
292
|
+
}));
|
|
293
|
+
}
|
|
260
294
|
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_layout.EditorContainer, {
|
|
261
295
|
editor: validEditor
|
|
262
296
|
}, /*#__PURE__*/_react["default"].createElement(_useColorContext.ColorProvider, null, isShowHeaderToolbar && /*#__PURE__*/_react["default"].createElement(_extension.HeaderToolbar, {
|
|
@@ -122,7 +122,9 @@ var HeaderMenu = /*#__PURE__*/function (_React$Component) {
|
|
|
122
122
|
className: headerIconClass
|
|
123
123
|
})), isShowHeaderPopover && /*#__PURE__*/_react["default"].createElement("div", {
|
|
124
124
|
ref: this.setMenuRef,
|
|
125
|
-
className: "header-popover sdoc-dropdown-menu
|
|
125
|
+
className: (0, _classnames["default"])('header-popover sdoc-dropdown-menu', {
|
|
126
|
+
'sdoc-dropdown-menu-mobile': _commonUtils.isMobile
|
|
127
|
+
})
|
|
126
128
|
}, itemList.map(function (item, index) {
|
|
127
129
|
if (item === 'divider') {
|
|
128
130
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
@@ -77,7 +77,7 @@ var withTable = function withTable(editor) {
|
|
|
77
77
|
newEditor.insertBreak = function () {
|
|
78
78
|
var selectedNode = (0, _core.getSelectedNodeByType)(newEditor, _constants2.ELEMENT_TYPE.TABLE);
|
|
79
79
|
if (selectedNode != null) {
|
|
80
|
-
newEditor.insertText(
|
|
80
|
+
newEditor.insertText("\n\uFEFF"); // If table is selected, wrap in cell
|
|
81
81
|
return;
|
|
82
82
|
}
|
|
83
83
|
insertBreak();
|
|
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports["default"] = void 0;
|
|
8
8
|
var _react = _interopRequireDefault(require("react"));
|
|
9
9
|
var _useSelectionUpdate = _interopRequireDefault(require("../../../hooks/use-selection-update"));
|
|
10
|
+
var _commonUtils = require("../../../utils/common-utils");
|
|
10
11
|
var _commons = require("../../commons");
|
|
11
12
|
var _constants = require("../../constants");
|
|
12
13
|
var _core = require("../../core");
|
|
@@ -28,6 +29,30 @@ var HeaderToolbar = function HeaderToolbar(_ref) {
|
|
|
28
29
|
readonly = _ref$readonly === void 0 ? false : _ref$readonly;
|
|
29
30
|
(0, _useSelectionUpdate["default"])();
|
|
30
31
|
var isSelectTableCell = (0, _core.getSelectedNodeByType)(editor, _constants.TABLE_CELL);
|
|
32
|
+
if (_commonUtils.isMobile) {
|
|
33
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
34
|
+
className: "sdoc-editor-toolbar"
|
|
35
|
+
}, /*#__PURE__*/_react["default"].createElement(_commons.MenuGroup, null, /*#__PURE__*/_react["default"].createElement(_historyMenu["default"], {
|
|
36
|
+
editor: editor,
|
|
37
|
+
readonly: readonly
|
|
38
|
+
})), /*#__PURE__*/_react["default"].createElement(_menu6["default"], {
|
|
39
|
+
editor: editor,
|
|
40
|
+
readonly: readonly
|
|
41
|
+
}), !isSelectTableCell && /*#__PURE__*/_react["default"].createElement(_commons.MenuGroup, null, /*#__PURE__*/_react["default"].createElement(_menu7["default"], {
|
|
42
|
+
editor: editor,
|
|
43
|
+
type: _constants.UNORDERED_LIST,
|
|
44
|
+
readonly: readonly,
|
|
45
|
+
ariaLabel: "unordered list"
|
|
46
|
+
}), /*#__PURE__*/_react["default"].createElement(_menu7["default"], {
|
|
47
|
+
editor: editor,
|
|
48
|
+
type: _constants.ORDERED_LIST,
|
|
49
|
+
readonly: readonly,
|
|
50
|
+
ariaLabel: "ordered list"
|
|
51
|
+
}), /*#__PURE__*/_react["default"].createElement(_menu3["default"], {
|
|
52
|
+
editor: editor,
|
|
53
|
+
readonly: readonly
|
|
54
|
+
})));
|
|
55
|
+
}
|
|
31
56
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
32
57
|
className: "sdoc-editor-toolbar"
|
|
33
58
|
}, /*#__PURE__*/_react["default"].createElement(_commons.MenuGroup, null, /*#__PURE__*/_react["default"].createElement(_historyMenu["default"], {
|
|
@@ -15,6 +15,7 @@ var _reactstrap = require("reactstrap");
|
|
|
15
15
|
var _slate = require("@seafile/slate");
|
|
16
16
|
var _slateReact = require("@seafile/slate-react");
|
|
17
17
|
var _constants = require("../../../constants");
|
|
18
|
+
var _commonUtils = require("../../../utils/common-utils");
|
|
18
19
|
var _eventBus = _interopRequireDefault(require("../../../utils/event-bus"));
|
|
19
20
|
var _dropdownMenuItem = _interopRequireDefault(require("../../commons/dropdown-menu-item"));
|
|
20
21
|
var _constants2 = require("../../constants");
|
|
@@ -263,6 +264,36 @@ var QuickInsertBlockMenu = function QuickInsertBlockMenu(_ref) {
|
|
|
263
264
|
return onInsert(_constants2.ELEMENT_TYPE.PARAGRAPH);
|
|
264
265
|
}
|
|
265
266
|
}));
|
|
267
|
+
if (_commonUtils.isMobile) {
|
|
268
|
+
items = (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, _constants2.UNORDERED_LIST, /*#__PURE__*/_react["default"].createElement(_dropdownMenuItem["default"], {
|
|
269
|
+
isHidden: !quickInsertMenuSearchMap[_constants2.UNORDERED_LIST],
|
|
270
|
+
key: "sdoc-insert-menu-unorder-list",
|
|
271
|
+
menuConfig: (0, _objectSpread2["default"])({}, _constants2.SIDE_INSERT_MENUS_CONFIG[_constants2.ELEMENT_TYPE.UNORDERED_LIST]),
|
|
272
|
+
onClick: function onClick() {
|
|
273
|
+
onInsertList(_constants2.ELEMENT_TYPE.UNORDERED_LIST);
|
|
274
|
+
}
|
|
275
|
+
})), _constants2.ORDERED_LIST, /*#__PURE__*/_react["default"].createElement(_dropdownMenuItem["default"], {
|
|
276
|
+
isHidden: !quickInsertMenuSearchMap[_constants2.ORDERED_LIST],
|
|
277
|
+
key: "sdoc-insert-menu-order-list",
|
|
278
|
+
menuConfig: (0, _objectSpread2["default"])({}, _constants2.SIDE_INSERT_MENUS_CONFIG[_constants2.ELEMENT_TYPE.ORDERED_LIST]),
|
|
279
|
+
onClick: function onClick() {
|
|
280
|
+
onInsertList(_constants2.ELEMENT_TYPE.ORDERED_LIST);
|
|
281
|
+
}
|
|
282
|
+
})), _constants2.CHECK_LIST_ITEM, /*#__PURE__*/_react["default"].createElement(_dropdownMenuItem["default"], {
|
|
283
|
+
isHidden: !quickInsertMenuSearchMap[_constants2.CHECK_LIST_ITEM],
|
|
284
|
+
key: "sdoc-insert-menu-check-list",
|
|
285
|
+
menuConfig: (0, _objectSpread2["default"])({}, _constants2.SIDE_INSERT_MENUS_CONFIG[_constants2.ELEMENT_TYPE.CHECK_LIST_ITEM]),
|
|
286
|
+
onClick: onInsertCheckList
|
|
287
|
+
})), _constants2.PARAGRAPH, /*#__PURE__*/_react["default"].createElement(_dropdownMenuItem["default"], {
|
|
288
|
+
isHidden: !quickInsertMenuSearchMap[_constants2.PARAGRAPH],
|
|
289
|
+
disabled: isEmptyNode,
|
|
290
|
+
key: "sdoc-insert-menu-paragraph",
|
|
291
|
+
menuConfig: (0, _objectSpread2["default"])({}, _constants2.SIDE_INSERT_MENUS_CONFIG[_constants2.ELEMENT_TYPE.PARAGRAPH]),
|
|
292
|
+
onClick: function onClick() {
|
|
293
|
+
return onInsert(_constants2.ELEMENT_TYPE.PARAGRAPH);
|
|
294
|
+
}
|
|
295
|
+
}));
|
|
296
|
+
}
|
|
266
297
|
_constants2.SIDE_INSERT_MENUS_CONFIG[_constants2.ELEMENT_TYPE.HEADER].forEach(function (item) {
|
|
267
298
|
items[item.id.toLowerCase()] = /*#__PURE__*/_react["default"].createElement(_dropdownMenuItem["default"], {
|
|
268
299
|
isHidden: !quickInsertMenuSearchMap[item.type],
|
|
@@ -273,7 +304,7 @@ var QuickInsertBlockMenu = function QuickInsertBlockMenu(_ref) {
|
|
|
273
304
|
}
|
|
274
305
|
});
|
|
275
306
|
});
|
|
276
|
-
_constants2.SIDE_INSERT_MENUS_CONFIG[_constants2.ELEMENT_TYPE.MULTI_COLUMN].forEach(function (item) {
|
|
307
|
+
!_commonUtils.isMobile && _constants2.SIDE_INSERT_MENUS_CONFIG[_constants2.ELEMENT_TYPE.MULTI_COLUMN].forEach(function (item) {
|
|
277
308
|
items[item.id.toLowerCase()] = /*#__PURE__*/_react["default"].createElement(_dropdownMenuItem["default"], {
|
|
278
309
|
isHidden: !quickInsertMenuSearchMap[item.type],
|
|
279
310
|
disabled: isDisableMultiColumn,
|
|
@@ -15,6 +15,7 @@ var _slateReact = require("@seafile/slate-react");
|
|
|
15
15
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
16
16
|
var _constants = require("../../../constants");
|
|
17
17
|
var _useScrollContext = require("../../../hooks/use-scroll-context");
|
|
18
|
+
var _commonUtils = require("../../../utils/common-utils");
|
|
18
19
|
var _eventBus = _interopRequireDefault(require("../../../utils/event-bus"));
|
|
19
20
|
var _constants2 = require("../../constants");
|
|
20
21
|
var _core = require("../../core");
|
|
@@ -578,7 +579,7 @@ var SideToolbar = function SideToolbar() {
|
|
|
578
579
|
var onMouseLeave = (0, _react.useCallback)(function () {
|
|
579
580
|
setIsEnterMoreVertical(false);
|
|
580
581
|
}, []);
|
|
581
|
-
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
582
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, !_commonUtils.isMobile && /*#__PURE__*/_react["default"].createElement("div", {
|
|
582
583
|
onAnimationEnd: function onAnimationEnd() {
|
|
583
584
|
return setIsMoving(false);
|
|
584
585
|
},
|
|
@@ -607,6 +608,6 @@ var SideToolbar = function SideToolbar() {
|
|
|
607
608
|
menuPosition: menuPosition,
|
|
608
609
|
onReset: onReset,
|
|
609
610
|
ref: sideMenuRef
|
|
610
|
-
}));
|
|
611
|
+
})));
|
|
611
612
|
};
|
|
612
613
|
var _default = exports["default"] = SideToolbar;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seafile/sdoc-editor",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.92",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"test": "jest",
|
|
@@ -70,5 +70,5 @@
|
|
|
70
70
|
"publishConfig": {
|
|
71
71
|
"access": "public"
|
|
72
72
|
},
|
|
73
|
-
"gitHead": "
|
|
73
|
+
"gitHead": "e0c4a3fff287103bb06ee2917670277fdcaee406"
|
|
74
74
|
}
|