@seafile/sdoc-editor 0.1.123 → 0.1.125-beta
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/basic-sdk/comment/comment/editor-comment.js +11 -2
- package/dist/basic-sdk/comment/comment/style.css +1 -0
- package/dist/basic-sdk/editor.js +25 -171
- package/dist/basic-sdk/extension/plugins/blockquote/helpers.js +2 -1
- package/dist/basic-sdk/extension/plugins/blockquote/menu/index.js +7 -5
- package/dist/basic-sdk/extension/plugins/check-list/helpers.js +2 -1
- package/dist/basic-sdk/extension/plugins/check-list/index.js +2 -2
- package/dist/basic-sdk/extension/plugins/check-list/menu/index.js +7 -5
- package/dist/basic-sdk/extension/plugins/check-list/render-elem.js +5 -9
- package/dist/basic-sdk/extension/plugins/clear-format/helpers.js +2 -0
- package/dist/basic-sdk/extension/plugins/clear-format/menu/index.js +3 -2
- package/dist/basic-sdk/extension/plugins/code-block/helpers.js +2 -1
- package/dist/basic-sdk/extension/plugins/code-block/index.js +2 -2
- package/dist/basic-sdk/extension/plugins/code-block/menu/index.js +7 -4
- package/dist/basic-sdk/extension/plugins/code-block/plugin.js +9 -1
- package/dist/basic-sdk/extension/plugins/code-block/render-elem.js +18 -9
- package/dist/basic-sdk/extension/plugins/font/helpers.js +5 -3
- package/dist/basic-sdk/extension/plugins/font/menu/font-family/index.js +3 -2
- package/dist/basic-sdk/extension/plugins/font/menu/font-size/index.js +3 -2
- package/dist/basic-sdk/extension/plugins/font/menu/index.js +6 -3
- package/dist/basic-sdk/extension/plugins/header/helpers.js +2 -0
- package/dist/basic-sdk/extension/plugins/header/menu/index.js +4 -2
- package/dist/basic-sdk/extension/plugins/image/helpers.js +2 -1
- package/dist/basic-sdk/extension/plugins/image/menu/index.js +8 -6
- package/dist/basic-sdk/extension/plugins/index.js +2 -1
- package/dist/basic-sdk/extension/plugins/link/helpers.js +2 -1
- package/dist/basic-sdk/extension/plugins/link/menu/index.js +8 -6
- package/dist/basic-sdk/extension/plugins/list/helpers.js +2 -1
- package/dist/basic-sdk/extension/plugins/list/menu/index.js +11 -9
- package/dist/basic-sdk/extension/plugins/paragraph/index.js +7 -0
- package/dist/basic-sdk/extension/plugins/paragraph/render-elem.js +35 -0
- package/dist/basic-sdk/extension/plugins/sdoc-link/dialogs/select-sdoc-file-dialog/index.css +55 -0
- package/dist/basic-sdk/extension/plugins/sdoc-link/{menu/sdoc-link-file-dialog.js → dialogs/select-sdoc-file-dialog/index.js} +36 -29
- package/dist/basic-sdk/extension/plugins/sdoc-link/dialogs/select-sdoc-file-dialog/local-files/index.css +75 -0
- package/dist/basic-sdk/extension/plugins/sdoc-link/{menu/local-files.js → dialogs/select-sdoc-file-dialog/local-files/index.js} +42 -32
- package/dist/basic-sdk/extension/plugins/sdoc-link/helpers.js +2 -1
- package/dist/basic-sdk/extension/plugins/sdoc-link/{menu/sdoc-link-hover-menu.js → hover-menu/index.js} +1 -1
- package/dist/basic-sdk/extension/plugins/sdoc-link/menu/index.js +7 -6
- package/dist/basic-sdk/extension/plugins/sdoc-link/render-elem.js +3 -2
- package/dist/basic-sdk/extension/plugins/table/helpers.js +2 -1
- package/dist/basic-sdk/extension/plugins/table/menu/active-table-menu/cell-text-align-menu.js +6 -3
- package/dist/basic-sdk/extension/plugins/table/menu/active-table-menu/common-menu.js +3 -2
- package/dist/basic-sdk/extension/plugins/table/menu/active-table-menu/index.js +12 -6
- package/dist/basic-sdk/extension/plugins/table/menu/active-table-menu/remove-table-menu.js +5 -3
- package/dist/basic-sdk/extension/plugins/table/menu/active-table-menu/table-column-menu.js +8 -4
- package/dist/basic-sdk/extension/plugins/table/menu/active-table-menu/table-row-menu.js +8 -4
- package/dist/basic-sdk/extension/plugins/table/menu/table-menu/index.js +7 -5
- package/dist/basic-sdk/extension/plugins/text-align/helpers.js +2 -1
- package/dist/basic-sdk/extension/plugins/text-align/menu/index.js +3 -2
- package/dist/basic-sdk/extension/plugins/text-style/helpers.js +2 -1
- package/dist/basic-sdk/extension/plugins/text-style/menu/index.js +5 -4
- package/dist/basic-sdk/extension/render/render-element.js +14 -48
- package/dist/basic-sdk/extension/toolbar/header-toolbar/index.js +37 -17
- package/dist/basic-sdk/extension/toolbar/header-toolbar/redo-undo.js +7 -4
- package/dist/basic-sdk/layout/editor-container.js +26 -0
- package/dist/basic-sdk/layout/editor-content.js +56 -0
- package/dist/basic-sdk/layout/index.js +4 -0
- package/dist/basic-sdk/outline/index.js +6 -7
- package/dist/basic-sdk/outline/style.css +5 -1
- package/dist/basic-sdk/slate-editor.js +149 -0
- package/dist/basic-sdk/socket/with-socket-io.js +1 -0
- package/dist/basic-sdk/utils/diff.js +12 -0
- package/dist/basic-sdk/views/diff-viewer.js +10 -5
- package/dist/basic-sdk/views/viewer.js +20 -20
- package/dist/components/doc-operations/index.js +2 -0
- package/dist/components/doc-operations/revision-operations/changes-count/index.css +34 -0
- package/dist/components/doc-operations/revision-operations/changes-count/index.js +85 -0
- package/dist/components/doc-operations/revision-operations/index.js +5 -1
- package/dist/pages/diff-viewer.js +2 -0
- package/dist/pages/simple-editor.js +16 -3
- package/package.json +1 -1
- package/public/media/sdoc-editor-font/iconfont.eot +0 -0
- package/public/media/sdoc-editor-font/iconfont.svg +4 -0
- package/public/media/sdoc-editor-font/iconfont.ttf +0 -0
- package/public/media/sdoc-editor-font/iconfont.woff +0 -0
- package/public/media/sdoc-editor-font/iconfont.woff2 +0 -0
- package/public/media/sdoc-editor-font.css +14 -6
- package/dist/basic-sdk/extension/plugins/sdoc-link/menu/local-files.css +0 -98
- package/dist/basic-sdk/extension/plugins/sdoc-link/menu/sdoc-link-file-dialog.css +0 -35
- package/dist/pages/diff-viewer/history-version-viewer.js +0 -15
- package/dist/pages/diff-viewer/index.js +0 -35
- /package/dist/basic-sdk/extension/plugins/sdoc-link/{menu/sdoc-link-hover-menu.css → hover-menu/index.css} +0 -0
|
@@ -41,8 +41,10 @@ var HeaderMenu = /*#__PURE__*/function (_React$Component) {
|
|
|
41
41
|
return _this.getValue() === type;
|
|
42
42
|
};
|
|
43
43
|
_this.isDisabled = function () {
|
|
44
|
-
var
|
|
45
|
-
|
|
44
|
+
var _this$props = _this.props,
|
|
45
|
+
editor = _this$props.editor,
|
|
46
|
+
readonly = _this$props.readonly;
|
|
47
|
+
return isMenuDisabled(editor, readonly);
|
|
46
48
|
};
|
|
47
49
|
_this.onToggleClick = function (event) {
|
|
48
50
|
event.stopPropagation();
|
|
@@ -5,7 +5,8 @@ import { Editor, Range, Transforms } from '@seafile/slate';
|
|
|
5
5
|
import { CODE_BLOCK, IMAGE } from '../../constants';
|
|
6
6
|
import { generateEmptyElement, getNodeType, isTextNode, getParentNode } from '../../core';
|
|
7
7
|
import context from '../../../../context';
|
|
8
|
-
export var isInsertImageMenuDisabled = function isInsertImageMenuDisabled(editor) {
|
|
8
|
+
export var isInsertImageMenuDisabled = function isInsertImageMenuDisabled(editor, readonly) {
|
|
9
|
+
if (readonly) return true;
|
|
9
10
|
var selection = editor.selection;
|
|
10
11
|
if (selection === null) return true;
|
|
11
12
|
if (!Range.isCollapsed(selection)) return true;
|
|
@@ -35,8 +35,10 @@ var ImageMenu = /*#__PURE__*/function (_React$Component) {
|
|
|
35
35
|
return false;
|
|
36
36
|
};
|
|
37
37
|
_this.isDisabled = function () {
|
|
38
|
-
var
|
|
39
|
-
|
|
38
|
+
var _this$props = _this.props,
|
|
39
|
+
editor = _this$props.editor,
|
|
40
|
+
readonly = _this$props.readonly;
|
|
41
|
+
return isInsertImageMenuDisabled(editor, readonly);
|
|
40
42
|
};
|
|
41
43
|
_this.onToggleClick = function (event) {
|
|
42
44
|
event.stopPropagation();
|
|
@@ -105,10 +107,10 @@ var ImageMenu = /*#__PURE__*/function (_React$Component) {
|
|
|
105
107
|
_createClass(ImageMenu, [{
|
|
106
108
|
key: "render",
|
|
107
109
|
value: function render() {
|
|
108
|
-
var _this$
|
|
109
|
-
isRichEditor = _this$
|
|
110
|
-
className = _this$
|
|
111
|
-
t = _this$
|
|
110
|
+
var _this$props2 = this.props,
|
|
111
|
+
isRichEditor = _this$props2.isRichEditor,
|
|
112
|
+
className = _this$props2.className,
|
|
113
|
+
t = _this$props2.t;
|
|
112
114
|
var _this$state = this.state,
|
|
113
115
|
isShowImagePopover = _this$state.isShowImagePopover,
|
|
114
116
|
isShowInsertImageDialog = _this$state.isShowInsertImageDialog;
|
|
@@ -12,6 +12,7 @@ import HtmlPlugin from './html';
|
|
|
12
12
|
import TextAlignPlugin from './text-align';
|
|
13
13
|
import FontPlugin from './font';
|
|
14
14
|
import SdocLinkPlugin from './sdoc-link';
|
|
15
|
+
import ParagraphPlugin from './paragraph';
|
|
15
16
|
var Plugins = [MarkDownPlugin, HtmlPlugin, HeaderPlugin, LinkPlugin, BlockquotePlugin, ListPlugin, CheckListPlugin, CodeBlockPlugin, ImagePlugin, TablePlugin, TextPlugin, TextAlignPlugin, FontPlugin, SdocLinkPlugin];
|
|
16
17
|
export default Plugins;
|
|
17
|
-
export { MarkDownPlugin, HeaderPlugin, LinkPlugin, BlockquotePlugin, ListPlugin, CheckListPlugin, CodeBlockPlugin, ImagePlugin, TablePlugin, TextPlugin, HtmlPlugin, TextAlignPlugin, FontPlugin, SdocLinkPlugin };
|
|
18
|
+
export { MarkDownPlugin, HeaderPlugin, LinkPlugin, BlockquotePlugin, ListPlugin, CheckListPlugin, CodeBlockPlugin, ImagePlugin, TablePlugin, TextPlugin, HtmlPlugin, TextAlignPlugin, FontPlugin, SdocLinkPlugin, ParagraphPlugin };
|
|
@@ -6,7 +6,8 @@ import { Editor, Transforms, Range } from '@seafile/slate';
|
|
|
6
6
|
import slugid from 'slugid';
|
|
7
7
|
import { LINK } from '../../constants';
|
|
8
8
|
import { getNodeType, getSelectedElems, getAboveNode, getEditorString, replaceNodeChildren } from '../../core';
|
|
9
|
-
export var isMenuDisabled = function isMenuDisabled(editor) {
|
|
9
|
+
export var isMenuDisabled = function isMenuDisabled(editor, readonly) {
|
|
10
|
+
if (readonly) return true;
|
|
10
11
|
if (editor.selection == null) return true;
|
|
11
12
|
var selectedElems = getSelectedElems(editor);
|
|
12
13
|
var notMatch = selectedElems.some(function (elem) {
|
|
@@ -21,8 +21,10 @@ var LinkMenu = /*#__PURE__*/function (_React$Component) {
|
|
|
21
21
|
return getLinkType(editor) === LINK;
|
|
22
22
|
};
|
|
23
23
|
_this.isDisabled = function () {
|
|
24
|
-
var
|
|
25
|
-
|
|
24
|
+
var _this$props = _this.props,
|
|
25
|
+
editor = _this$props.editor,
|
|
26
|
+
readonly = _this$props.readonly;
|
|
27
|
+
return isMenuDisabled(editor, readonly);
|
|
26
28
|
};
|
|
27
29
|
_this.onLinkDialogToggle = function () {
|
|
28
30
|
_this.setState({
|
|
@@ -40,10 +42,10 @@ var LinkMenu = /*#__PURE__*/function (_React$Component) {
|
|
|
40
42
|
_createClass(LinkMenu, [{
|
|
41
43
|
key: "render",
|
|
42
44
|
value: function render() {
|
|
43
|
-
var _this$
|
|
44
|
-
isRichEditor = _this$
|
|
45
|
-
className = _this$
|
|
46
|
-
editor = _this$
|
|
45
|
+
var _this$props2 = this.props,
|
|
46
|
+
isRichEditor = _this$props2.isRichEditor,
|
|
47
|
+
className = _this$props2.className,
|
|
48
|
+
editor = _this$props2.editor;
|
|
47
49
|
var isShowLinkDialog = this.state.isShowLinkDialog;
|
|
48
50
|
var menuConfig = MENUS_CONFIG_MAP[LINK];
|
|
49
51
|
var props = _objectSpread(_objectSpread({
|
|
@@ -4,7 +4,8 @@ import { Editor, Element } from '@seafile/slate';
|
|
|
4
4
|
import { PARAGRAPH } from '../../constants';
|
|
5
5
|
import { getSelectedNodeByType } from '../../core';
|
|
6
6
|
import { toggleList } from './transforms';
|
|
7
|
-
export var isMenuDisabled = function isMenuDisabled(editor) {
|
|
7
|
+
export var isMenuDisabled = function isMenuDisabled(editor, readonly) {
|
|
8
|
+
if (readonly) return true;
|
|
8
9
|
if (editor.selection == null) return true;
|
|
9
10
|
var selectedElements = [];
|
|
10
11
|
var nodeEntries = Editor.nodes(editor, {
|
|
@@ -25,16 +25,18 @@ var ListMenu = /*#__PURE__*/function (_React$Component) {
|
|
|
25
25
|
return getListType(editor, type) === type;
|
|
26
26
|
};
|
|
27
27
|
_this.isDisabled = function () {
|
|
28
|
-
var
|
|
29
|
-
|
|
28
|
+
var _this$props2 = _this.props,
|
|
29
|
+
editor = _this$props2.editor,
|
|
30
|
+
readonly = _this$props2.readonly;
|
|
31
|
+
return isMenuDisabled(editor, readonly);
|
|
30
32
|
};
|
|
31
33
|
_this.onMouseDown = function (e) {
|
|
32
34
|
e.preventDefault();
|
|
33
35
|
e.stopPropagation();
|
|
34
36
|
if (_this.isDisabled()) return;
|
|
35
|
-
var _this$
|
|
36
|
-
editor = _this$
|
|
37
|
-
type = _this$
|
|
37
|
+
var _this$props3 = _this.props,
|
|
38
|
+
editor = _this$props3.editor,
|
|
39
|
+
type = _this$props3.type;
|
|
38
40
|
|
|
39
41
|
// 执行命令
|
|
40
42
|
setListType(editor, type);
|
|
@@ -45,10 +47,10 @@ var ListMenu = /*#__PURE__*/function (_React$Component) {
|
|
|
45
47
|
_createClass(ListMenu, [{
|
|
46
48
|
key: "render",
|
|
47
49
|
value: function render() {
|
|
48
|
-
var _this$
|
|
49
|
-
isRichEditor = _this$
|
|
50
|
-
className = _this$
|
|
51
|
-
type = _this$
|
|
50
|
+
var _this$props4 = this.props,
|
|
51
|
+
isRichEditor = _this$props4.isRichEditor,
|
|
52
|
+
className = _this$props4.className,
|
|
53
|
+
type = _this$props4.type;
|
|
52
54
|
var menuConfig = MENUS_CONFIG_MAP[type];
|
|
53
55
|
var props = _objectSpread(_objectSpread({
|
|
54
56
|
isRichEditor: isRichEditor,
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { Node } from '@seafile/slate';
|
|
4
|
+
import { useSlateStatic } from '@seafile/slate-react';
|
|
5
|
+
import { Placeholder } from '../../core';
|
|
6
|
+
var Paragraph = function Paragraph(_ref) {
|
|
7
|
+
var isComposing = _ref.isComposing,
|
|
8
|
+
element = _ref.element,
|
|
9
|
+
attributes = _ref.attributes,
|
|
10
|
+
children = _ref.children;
|
|
11
|
+
var editor = useSlateStatic();
|
|
12
|
+
var isShowPlaceHolder = false;
|
|
13
|
+
if (editor.children.length === 1) {
|
|
14
|
+
isShowPlaceHolder = Node.string(element) === '' && !isComposing;
|
|
15
|
+
}
|
|
16
|
+
if (editor.children.length === 2 && editor.children[0].type.startsWith('header')) {
|
|
17
|
+
var node = editor.children[1];
|
|
18
|
+
isShowPlaceHolder = Node.string(element) === '' && (node === null || node === void 0 ? void 0 : node.id) === (element === null || element === void 0 ? void 0 : element.id) && !isComposing;
|
|
19
|
+
}
|
|
20
|
+
var style = {
|
|
21
|
+
textAlign: element.align
|
|
22
|
+
};
|
|
23
|
+
return /*#__PURE__*/React.createElement("p", Object.assign({
|
|
24
|
+
"data-id": element.id
|
|
25
|
+
}, attributes, {
|
|
26
|
+
style: _objectSpread({
|
|
27
|
+
position: isShowPlaceHolder ? 'relative' : ''
|
|
28
|
+
}, style)
|
|
29
|
+
}), children, isShowPlaceHolder && /*#__PURE__*/React.createElement(Placeholder, {
|
|
30
|
+
title: 'Please_enter_text'
|
|
31
|
+
}));
|
|
32
|
+
};
|
|
33
|
+
export var renderParagraph = function renderParagraph(props) {
|
|
34
|
+
return /*#__PURE__*/React.createElement(Paragraph, props);
|
|
35
|
+
};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
.sdoc-file-select-dialog {
|
|
2
|
+
max-width: 620px;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.sdoc-file-select-dialog .sdoc-file-select-modal {
|
|
6
|
+
width: 620px;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.sdoc-file-select-dialog .sdoc-file-select-container {
|
|
10
|
+
display: flex;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.sdoc-file-select-dialog .sdoc-file-select-left {
|
|
14
|
+
border-right: 1px solid #e9ecef;
|
|
15
|
+
width: 150px;
|
|
16
|
+
padding: 12px 8px;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.sdoc-file-select-dialog .sdoc-file-select-left .sdoc-file-select-nav-item {
|
|
20
|
+
padding: 5px 0 5px 8px;
|
|
21
|
+
border-radius: 3px;
|
|
22
|
+
display: inline-block;
|
|
23
|
+
cursor: pointer;
|
|
24
|
+
width: 100%;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.sdoc-file-select-dialog .sdoc-file-select-left .sdoc-file-select-nav-item:hover {
|
|
28
|
+
background-color: #f5f5f5;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.sdoc-file-select-dialog .sdoc-file-select-container .sdoc-file-select-left .selected-sdoc-file-select-nav-item {
|
|
32
|
+
background-color: #ff8000;
|
|
33
|
+
color: #fff;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.sdoc-file-select-dialog .sdoc-file-select-right {
|
|
37
|
+
height: 440px;
|
|
38
|
+
width: 468px;
|
|
39
|
+
display: flex;
|
|
40
|
+
padding: 0;
|
|
41
|
+
flex-direction: column;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.sdoc-file-select-dialog .sdoc-file-select-footer {
|
|
45
|
+
display: flex;
|
|
46
|
+
align-items: center;
|
|
47
|
+
justify-content: flex-end;
|
|
48
|
+
padding: 1rem;
|
|
49
|
+
border-top: 1px solid #e9ecef;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.sdoc-file-select-dialog .highlight-bg-color {
|
|
53
|
+
background-color: #FF8000;
|
|
54
|
+
border-color: #FF8000;
|
|
55
|
+
}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
2
2
|
import React, { useCallback, useState } from 'react';
|
|
3
|
-
import { Button, Modal, ModalHeader, ModalBody
|
|
4
|
-
import {
|
|
3
|
+
import { Button, Modal, ModalHeader, ModalBody } from 'reactstrap';
|
|
4
|
+
import { useTranslation } from 'react-i18next';
|
|
5
5
|
import LocalFiles from './local-files';
|
|
6
|
-
import { insertSdocFileLink } from '
|
|
7
|
-
import './
|
|
8
|
-
var
|
|
6
|
+
import { insertSdocFileLink } from '../../helpers';
|
|
7
|
+
import './index.css';
|
|
8
|
+
var SelectSdocFileDialog = function SelectSdocFileDialog(_ref) {
|
|
9
9
|
var editor = _ref.editor,
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
toggle = _ref.toggle;
|
|
11
|
+
var _useTranslation = useTranslation(),
|
|
12
|
+
t = _useTranslation.t;
|
|
12
13
|
var _useState = useState(null),
|
|
13
14
|
_useState2 = _slicedToArray(_useState, 2),
|
|
14
15
|
currentSelectedFile = _useState2[0],
|
|
@@ -16,8 +17,13 @@ var SdocLinkFileDialog = function SdocLinkFileDialog(_ref) {
|
|
|
16
17
|
var onSelectedFile = useCallback(function (fileInfo) {
|
|
17
18
|
setCurrentSelectedFile(fileInfo);
|
|
18
19
|
}, []);
|
|
20
|
+
var closeDialog = useCallback(function () {
|
|
21
|
+
toggle(false);
|
|
22
|
+
|
|
23
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
24
|
+
}, []);
|
|
19
25
|
var onSubmit = useCallback(function () {
|
|
20
|
-
|
|
26
|
+
closeDialog(false);
|
|
21
27
|
if (currentSelectedFile) {
|
|
22
28
|
insertSdocFileLink(editor, currentSelectedFile.name, currentSelectedFile.doc_uuid);
|
|
23
29
|
}
|
|
@@ -27,36 +33,37 @@ var SdocLinkFileDialog = function SdocLinkFileDialog(_ref) {
|
|
|
27
33
|
isOpen: true,
|
|
28
34
|
autoFocus: false,
|
|
29
35
|
zIndex: 1071,
|
|
30
|
-
returnFocusAfterClose: false
|
|
36
|
+
returnFocusAfterClose: false,
|
|
37
|
+
className: "sdoc-file-select-dialog",
|
|
38
|
+
contentClassName: "sdoc-file-select-modal"
|
|
31
39
|
}, /*#__PURE__*/React.createElement(ModalHeader, {
|
|
32
|
-
toggle:
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}, t('Select_sdoc_document')), /*#__PURE__*/React.createElement(ModalBody, null, /*#__PURE__*/React.createElement("div", {
|
|
36
|
-
className: "sdoc-file-addition-container"
|
|
40
|
+
toggle: closeDialog
|
|
41
|
+
}, t('Select_sdoc_document')), /*#__PURE__*/React.createElement(ModalBody, {
|
|
42
|
+
className: "p-0"
|
|
37
43
|
}, /*#__PURE__*/React.createElement("div", {
|
|
38
|
-
className: "sdoc-file-
|
|
44
|
+
className: "sdoc-file-select-container"
|
|
39
45
|
}, /*#__PURE__*/React.createElement("div", {
|
|
40
|
-
className: "sdoc-file-
|
|
46
|
+
className: "sdoc-file-select-left"
|
|
41
47
|
}, /*#__PURE__*/React.createElement("div", {
|
|
42
|
-
className:
|
|
43
|
-
|
|
48
|
+
className: "sdoc-file-select-nav"
|
|
49
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
50
|
+
className: "sdoc-file-select-nav-item selected-sdoc-file-select-nav-item"
|
|
44
51
|
}, t('Local_file')))), /*#__PURE__*/React.createElement("div", {
|
|
45
|
-
className: "sdoc-file-
|
|
52
|
+
className: "sdoc-file-select-right"
|
|
46
53
|
}, /*#__PURE__*/React.createElement(LocalFiles, {
|
|
47
54
|
onSelectedFile: onSelectedFile,
|
|
48
|
-
toggle:
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
}
|
|
55
|
+
toggle: closeDialog
|
|
56
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
57
|
+
className: "sdoc-file-select-footer"
|
|
58
|
+
}, /*#__PURE__*/React.createElement(Button, {
|
|
52
59
|
color: "secondary",
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
}
|
|
60
|
+
className: "mr-2",
|
|
61
|
+
onClick: closeDialog
|
|
56
62
|
}, t('Cancel')), /*#__PURE__*/React.createElement(Button, {
|
|
57
63
|
color: "primary",
|
|
58
|
-
|
|
64
|
+
className: "highlight-bg-color",
|
|
65
|
+
disabled: !currentSelectedFile,
|
|
59
66
|
onClick: onSubmit
|
|
60
|
-
}, t('Confirm'))));
|
|
67
|
+
}, t('Confirm')))))));
|
|
61
68
|
};
|
|
62
|
-
export default
|
|
69
|
+
export default SelectSdocFileDialog;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
.sdoc-files-tree {
|
|
2
|
+
flex: 1;
|
|
3
|
+
padding: 16px;
|
|
4
|
+
overflow: auto;
|
|
5
|
+
width: 100%;
|
|
6
|
+
display: flex;
|
|
7
|
+
flex-direction: column;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.sdoc-files-tree .sdoc-file-info {
|
|
11
|
+
border-radius: 2px;
|
|
12
|
+
height: 1.5rem;
|
|
13
|
+
line-height: 1.625;
|
|
14
|
+
overflow: hidden;
|
|
15
|
+
text-overflow: ellipsis;
|
|
16
|
+
white-space: nowrap;
|
|
17
|
+
position: relative;
|
|
18
|
+
padding-left: 2.8rem;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.sdoc-files-tree .sdoc-file-info:hover {
|
|
22
|
+
cursor: pointer;
|
|
23
|
+
background: #fdefb9;
|
|
24
|
+
box-shadow: inset 0 0 1px #999;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.sdoc-files-tree .sdoc-file-info .sdoc-file-icon-container {
|
|
28
|
+
width: 2.8rem;
|
|
29
|
+
height: 100%;
|
|
30
|
+
padding-left: 1.5rem;
|
|
31
|
+
position: absolute;
|
|
32
|
+
left: 0;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.sdoc-files-tree .sdoc-file-info .sdoc-file-icon {
|
|
36
|
+
color: #9aa0ac;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.sdoc-files-tree .sdoc-file-info.active {
|
|
40
|
+
background: #ff8000;
|
|
41
|
+
box-shadow: inset 0 0 1px #999;
|
|
42
|
+
color: #fff;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.sdoc-files-tree .sdoc-file-info.active .sdoc-file-icon {
|
|
46
|
+
color: #fff;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.sdoc-files-tree .sdoc-file-icon-toggle {
|
|
50
|
+
height: 1.5rem;
|
|
51
|
+
width: 1.5rem;
|
|
52
|
+
line-height: 1.5rem !important;
|
|
53
|
+
font-size: 12px !important;
|
|
54
|
+
transform: scale(.8);
|
|
55
|
+
text-align: center;
|
|
56
|
+
position: absolute;
|
|
57
|
+
left: 0;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.sdoc-files-tree .sdoc-file-info.expanded .sdoc-file-icon-toggle {
|
|
61
|
+
transform: rotate(90deg) scale(.8);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.sdoc-files-tree .sdoc-file-info .sdoc-file-name {
|
|
65
|
+
font-size: 14px;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.sdoc-files-tree .sdoc-folder-children {
|
|
69
|
+
padding-left: 20px;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.sdoc-files-tree .sdoc-folder-children-empty {
|
|
73
|
+
color: #999;
|
|
74
|
+
padding: 4px 20px;
|
|
75
|
+
}
|
|
@@ -2,12 +2,13 @@ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
|
2
2
|
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
3
3
|
import React, { useCallback, useState, useRef, useEffect } from 'react';
|
|
4
4
|
import { withTranslation } from 'react-i18next';
|
|
5
|
+
import classnames from 'classnames';
|
|
5
6
|
import slugid from 'slugid';
|
|
6
|
-
import context from '
|
|
7
|
-
import { getErrorMsg } from '
|
|
8
|
-
import toaster from '
|
|
9
|
-
import { getParentPathNameArr, getNewFileListData } from '
|
|
10
|
-
import './
|
|
7
|
+
import context from '../../../../../../../context';
|
|
8
|
+
import { getErrorMsg } from '../../../../../../../utils';
|
|
9
|
+
import toaster from '../../../../../../../components/toast';
|
|
10
|
+
import { getParentPathNameArr, getNewFileListData } from '../../../helpers';
|
|
11
|
+
import './index.css';
|
|
11
12
|
var LocalFiles = function LocalFiles(_ref) {
|
|
12
13
|
var onSelectedFile = _ref.onSelectedFile,
|
|
13
14
|
toggle = _ref.toggle,
|
|
@@ -72,6 +73,7 @@ var LocalFiles = function LocalFiles(_ref) {
|
|
|
72
73
|
getFileData(p, item.indexId, fileListData);
|
|
73
74
|
expandedFolder.add(item.indexId);
|
|
74
75
|
}
|
|
76
|
+
onSelectedFile(null);
|
|
75
77
|
setCurrentActiveItem(item);
|
|
76
78
|
setExpandedFolder(new Set(Array.from(expandedFolder)));
|
|
77
79
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
@@ -83,51 +85,59 @@ var LocalFiles = function LocalFiles(_ref) {
|
|
|
83
85
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
84
86
|
}, []);
|
|
85
87
|
var renderFileTree = useCallback(function (data) {
|
|
86
|
-
if (!Array.isArray(data))
|
|
87
|
-
return null;
|
|
88
|
-
}
|
|
88
|
+
if (!Array.isArray(data) || data.length === 0) return null;
|
|
89
89
|
return data.map(function (item) {
|
|
90
90
|
var _item$children, _item$children2;
|
|
91
|
+
if (!item) return null;
|
|
92
|
+
var type = item.type,
|
|
93
|
+
indexId = item.indexId,
|
|
94
|
+
name = item.name;
|
|
95
|
+
var selected = (currentActiveItem === null || currentActiveItem === void 0 ? void 0 : currentActiveItem.indexId) === indexId;
|
|
91
96
|
return /*#__PURE__*/React.createElement("div", {
|
|
92
|
-
key:
|
|
93
|
-
className: "sdoc-
|
|
94
|
-
},
|
|
97
|
+
key: indexId,
|
|
98
|
+
className: "sdoc-folder-container"
|
|
99
|
+
}, type === 'dir' && /*#__PURE__*/React.createElement("div", {
|
|
95
100
|
ref: folderRef,
|
|
96
|
-
className: "sdoc-
|
|
101
|
+
className: "sdoc-folder"
|
|
102
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
103
|
+
className: classnames('sdoc-folder-info sdoc-file-info', {
|
|
104
|
+
'active': selected,
|
|
105
|
+
'expanded': expandedFolder.has(indexId)
|
|
106
|
+
}),
|
|
97
107
|
onClick: function onClick(e) {
|
|
98
|
-
onToggle(e, item, fileListData);
|
|
108
|
+
return onToggle(e, item, fileListData);
|
|
99
109
|
}
|
|
100
110
|
}, /*#__PURE__*/React.createElement("div", {
|
|
101
|
-
className: "sdoc-
|
|
102
|
-
}, /*#__PURE__*/React.createElement("span", {
|
|
103
|
-
className: "".concat(expandedFolder.has(item.indexId) ? 'icon-drop-down-scale' : '')
|
|
111
|
+
className: "sdoc-file-icon-container"
|
|
104
112
|
}, /*#__PURE__*/React.createElement("i", {
|
|
105
|
-
className: "
|
|
106
|
-
})
|
|
107
|
-
className: "sdocfont sdoc-file"
|
|
113
|
+
className: "sdoc-file-icon sdoc-file-icon-toggle sdocfont sdoc-right-slide"
|
|
114
|
+
}), /*#__PURE__*/React.createElement("i", {
|
|
115
|
+
className: "sdoc-file-icon sdocfont sdoc-file sdoc-folder-icon"
|
|
108
116
|
})), /*#__PURE__*/React.createElement("span", {
|
|
109
|
-
className: "sdoc-folder-name"
|
|
110
|
-
},
|
|
111
|
-
className: "sdoc-
|
|
112
|
-
}, (
|
|
113
|
-
className: "sdoc-
|
|
114
|
-
}, t('Empty')), (
|
|
115
|
-
className:
|
|
117
|
+
className: "sdoc-folder-name sdoc-file-name"
|
|
118
|
+
}, name)), /*#__PURE__*/React.createElement("div", {
|
|
119
|
+
className: "sdoc-folder-children"
|
|
120
|
+
}, ((_item$children = item.children) === null || _item$children === void 0 ? void 0 : _item$children.length) === 0 && /*#__PURE__*/React.createElement("div", {
|
|
121
|
+
className: "sdoc-folder-children-empty"
|
|
122
|
+
}, "(".concat(t('Empty'), ")")), ((_item$children2 = item.children) === null || _item$children2 === void 0 ? void 0 : _item$children2.length) > 0 && renderFileTree(item.children))), type === 'file' && /*#__PURE__*/React.createElement("div", {
|
|
123
|
+
className: classnames('sdoc-file-info', {
|
|
124
|
+
'active': selected
|
|
125
|
+
}),
|
|
116
126
|
onClick: function onClick(e) {
|
|
117
127
|
onSelectFile(e, item);
|
|
118
128
|
}
|
|
119
|
-
}, /*#__PURE__*/React.createElement("
|
|
120
|
-
className: "sdoc-
|
|
129
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
130
|
+
className: "sdoc-file-icon-container"
|
|
121
131
|
}, /*#__PURE__*/React.createElement("i", {
|
|
122
|
-
className: "sdocfont sdoc-document"
|
|
132
|
+
className: "sdoc-file-icon sdocfont sdoc-document"
|
|
123
133
|
})), /*#__PURE__*/React.createElement("span", {
|
|
124
|
-
className: "sdoc-
|
|
125
|
-
},
|
|
134
|
+
className: "sdoc-file-name"
|
|
135
|
+
}, name)));
|
|
126
136
|
});
|
|
127
137
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
128
138
|
}, [fileListData, currentActiveItem, expandedFolder]);
|
|
129
139
|
return /*#__PURE__*/React.createElement("div", {
|
|
130
|
-
className: "sdoc-
|
|
140
|
+
className: "sdoc-files-tree"
|
|
131
141
|
}, renderFileTree(fileListData));
|
|
132
142
|
};
|
|
133
143
|
export default withTranslation('sdoc-editor')(LocalFiles);
|
|
@@ -6,7 +6,8 @@ import copy from 'copy-to-clipboard';
|
|
|
6
6
|
import context from '../../../../context';
|
|
7
7
|
import { SDOC_LINK, LINK, INSERT_FILE_DISPLAY_TYPE } from '../../constants';
|
|
8
8
|
import { getNodeType, getSelectedElems } from '../../core';
|
|
9
|
-
export var isMenuDisabled = function isMenuDisabled(editor) {
|
|
9
|
+
export var isMenuDisabled = function isMenuDisabled(editor, readonly) {
|
|
10
|
+
if (readonly) return true;
|
|
10
11
|
if (editor.selection == null) return true;
|
|
11
12
|
var selectedElems = getSelectedElems(editor);
|
|
12
13
|
var notMatch = selectedElems.some(function (elem) {
|
|
@@ -6,7 +6,7 @@ import { withTranslation } from 'react-i18next';
|
|
|
6
6
|
import { ElementPopover } from '../../../commons';
|
|
7
7
|
import toaster from '../../../../../components/toast';
|
|
8
8
|
import { getUrl, onCopySdocLinkNode } from '../helpers';
|
|
9
|
-
import './
|
|
9
|
+
import './index.css';
|
|
10
10
|
var SdocLinkHoverMenu = function SdocLinkHoverMenu(_ref) {
|
|
11
11
|
var editor = _ref.editor,
|
|
12
12
|
menuPosition = _ref.menuPosition,
|
|
@@ -5,13 +5,14 @@ import { withTranslation } from 'react-i18next';
|
|
|
5
5
|
import { SDOC_LINK, MENUS_CONFIG_MAP } from '../../../constants';
|
|
6
6
|
import { MenuItem } from '../../../commons';
|
|
7
7
|
import { getType, isMenuDisabled } from '../helpers';
|
|
8
|
-
import
|
|
8
|
+
import SelectSdocFileDialog from '../dialogs/select-sdoc-file-dialog';
|
|
9
9
|
import './index.css';
|
|
10
10
|
var SdocLinkMenu = function SdocLinkMenu(_ref) {
|
|
11
11
|
var isRichEditor = _ref.isRichEditor,
|
|
12
12
|
className = _ref.className,
|
|
13
13
|
editor = _ref.editor,
|
|
14
|
-
t = _ref.t
|
|
14
|
+
t = _ref.t,
|
|
15
|
+
readonly = _ref.readonly;
|
|
15
16
|
var _useState = useState(false),
|
|
16
17
|
_useState2 = _slicedToArray(_useState, 2),
|
|
17
18
|
showInsertDialog = _useState2[0],
|
|
@@ -25,9 +26,9 @@ var SdocLinkMenu = function SdocLinkMenu(_ref) {
|
|
|
25
26
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
26
27
|
}, []);
|
|
27
28
|
var isDisabled = useCallback(function () {
|
|
28
|
-
return isMenuDisabled(editor);
|
|
29
|
+
return isMenuDisabled(editor, readonly);
|
|
29
30
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
30
|
-
}, []);
|
|
31
|
+
}, [editor, readonly]);
|
|
31
32
|
var onInsertFileDialogToggle = useCallback(function () {
|
|
32
33
|
setShowInsertPopover(true);
|
|
33
34
|
}, []);
|
|
@@ -77,9 +78,9 @@ var SdocLinkMenu = function SdocLinkMenu(_ref) {
|
|
|
77
78
|
onMouseDown: onInsertSdocFile
|
|
78
79
|
}, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement("i", {
|
|
79
80
|
className: "sdocfont sdoc-document"
|
|
80
|
-
})), /*#__PURE__*/React.createElement("span", null, t('Sdoc_document')))), showInsertDialog && /*#__PURE__*/React.createElement(
|
|
81
|
+
})), /*#__PURE__*/React.createElement("span", null, t('Sdoc_document')))), showInsertDialog && /*#__PURE__*/React.createElement(SelectSdocFileDialog, {
|
|
81
82
|
editor: editor,
|
|
82
|
-
|
|
83
|
+
toggle: onDialogToggle
|
|
83
84
|
}));
|
|
84
85
|
};
|
|
85
86
|
export default withTranslation('sdoc-editor')(SdocLinkMenu);
|
|
@@ -3,7 +3,7 @@ import React, { useCallback, useEffect, useState, useRef } from 'react';
|
|
|
3
3
|
import { Range } from '@seafile/slate';
|
|
4
4
|
import { useScrollContext } from '../../../hooks/use-scroll-context';
|
|
5
5
|
import { unwrapLinkNode, getUrl } from './helpers';
|
|
6
|
-
import
|
|
6
|
+
import HoverMenu from './hover-menu';
|
|
7
7
|
import './render-elem.css';
|
|
8
8
|
var SdocFileLink = function SdocFileLink(_ref) {
|
|
9
9
|
var editor = _ref.editor,
|
|
@@ -87,6 +87,7 @@ var SdocFileLink = function SdocFileLink(_ref) {
|
|
|
87
87
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
88
88
|
}, []);
|
|
89
89
|
return /*#__PURE__*/React.createElement("span", Object.assign({}, attributes, {
|
|
90
|
+
"data-id": element.id,
|
|
90
91
|
contentEditable: false,
|
|
91
92
|
className: "sdoc-file-render ".concat(element.display_type === 'card_link' ? 'sdoc-file-card-link' : ''),
|
|
92
93
|
onClick: onClickFile
|
|
@@ -104,7 +105,7 @@ var SdocFileLink = function SdocFileLink(_ref) {
|
|
|
104
105
|
e.preventDefault();
|
|
105
106
|
},
|
|
106
107
|
title: element.title
|
|
107
|
-
}, children))), isShowInsertHoverMenu && Range.isCollapsed(editor.selection) && /*#__PURE__*/React.createElement(
|
|
108
|
+
}, children))), isShowInsertHoverMenu && Range.isCollapsed(editor.selection) && /*#__PURE__*/React.createElement(HoverMenu, {
|
|
108
109
|
editor: editor,
|
|
109
110
|
menuPosition: menuPosition,
|
|
110
111
|
element: element,
|
|
@@ -12,7 +12,8 @@ import EventBus from '../../../utils/event-bus';
|
|
|
12
12
|
import { INTERNAL_EVENT, PAGE_EDIT_AREA_WIDTH } from '../../../constants';
|
|
13
13
|
import ObjectUtils from '../../../utils/object-utils';
|
|
14
14
|
import { replacePastedDataId } from '../../../node-id/helpers';
|
|
15
|
-
export var isTableMenuDisabled = function isTableMenuDisabled(editor) {
|
|
15
|
+
export var isTableMenuDisabled = function isTableMenuDisabled(editor, readonly) {
|
|
16
|
+
if (readonly) return true;
|
|
16
17
|
var selection = editor.selection;
|
|
17
18
|
if (selection === null) return true;
|
|
18
19
|
if (!Range.isCollapsed(selection)) return true;
|