@seafile/sdoc-editor 0.1.172 → 0.1.173

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.
@@ -1,6 +1,6 @@
1
1
  import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
2
2
  import { commentDecorate } from '../comment/comment-decorate';
3
- import { highlightDecorate } from '../highlight-decorate';
3
+ import { highlightDecorate } from '../highlight';
4
4
  import useSelectionUpdate from '../hooks/use-selection-update';
5
5
  var pluginDecorates = [highlightDecorate, commentDecorate];
6
6
  export var usePipDecorate = function usePipDecorate(editor) {
@@ -5,7 +5,6 @@ import { getAboveBlockNode, getNextNode, getPrevNode, isSelectionAtBlockEnd, isS
5
5
  import EventProxy from '../utils/event-handler';
6
6
  import { useCursors } from '../cursor/use-cursors';
7
7
  import { INTERNAL_EVENT } from '../constants';
8
- import { SetNodeToDecorations } from '../highlight-decorate/setNodeToDecorations';
9
8
  import CommentContextProvider from '../comment/comment-context-provider';
10
9
  import CommentWrapper from '../comment';
11
10
  import { usePipDecorate } from '../decorates';
@@ -13,6 +12,7 @@ import { getCursorPosition, getDomHeight, getDomMarginTop } from '../utils/dom-u
13
12
  import EventBus from '../utils/event-bus';
14
13
  import { ArticleContainer } from '../layout';
15
14
  import { useScrollContext } from '../hooks/use-scroll-context';
15
+ import { SetNodeToDecorations } from '../highlight';
16
16
  var EditableArticle = function EditableArticle(_ref) {
17
17
  var isShowComment = _ref.isShowComment,
18
18
  editor = _ref.editor,
@@ -1,4 +1,5 @@
1
1
  export * from './move-children';
2
2
  export * from './remove-node-children';
3
3
  export * from './focus-editor';
4
- export * from './replace-node-children';
4
+ export * from './replace-node';
5
+ export * from './update-parent-node.js';
@@ -0,0 +1,25 @@
1
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
2
+ import { REBASE_MARK_KEY } from '../../../constants';
3
+ import { getNode } from '../queries';
4
+ import { replaceNode } from './replace-node';
5
+ export var updateRebaseParentNodeByPath = function updateRebaseParentNodeByPath(editor, path) {
6
+ var parentPath = path.slice(0, -1);
7
+ var parentNode = getNode(editor, parentPath);
8
+ if (parentNode.children.filter(function (item) {
9
+ return item[REBASE_MARK_KEY.REBASE_TYPE];
10
+ }).length !== 0) return;
11
+ var newParentElement = _objectSpread({}, parentNode);
12
+ newParentElement[REBASE_MARK_KEY.REBASE_TYPE] && delete newParentElement[REBASE_MARK_KEY.REBASE_TYPE];
13
+ newParentElement[REBASE_MARK_KEY.OLD_ELEMENT] && delete newParentElement[REBASE_MARK_KEY.OLD_ELEMENT];
14
+ newParentElement[REBASE_MARK_KEY.ORIGIN] && delete newParentElement[REBASE_MARK_KEY.ORIGIN];
15
+ newParentElement['children'] = newParentElement['children'].map(function (item) {
16
+ item[REBASE_MARK_KEY.REBASE_TYPE] && delete item[REBASE_MARK_KEY.REBASE_TYPE];
17
+ item[REBASE_MARK_KEY.OLD_ELEMENT] && delete item[REBASE_MARK_KEY.OLD_ELEMENT];
18
+ item[REBASE_MARK_KEY.ORIGIN] && delete item[REBASE_MARK_KEY.ORIGIN];
19
+ return item;
20
+ });
21
+ replaceNode(editor, {
22
+ at: parentPath,
23
+ nodes: newParentElement
24
+ });
25
+ };
@@ -0,0 +1,148 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
+ import { useCallback } from 'react';
3
+ import { useSlateStatic } from '@seafile/slate-react';
4
+ import { BLOCKQUOTE, LINK, CHECK_LIST_ITEM, HEADER1, HEADER2, HEADER3, HEADER4, HEADER5, HEADER6, LIST_ITEM, LIST_LIC, ORDERED_LIST, PARAGRAPH, UNORDERED_LIST, CODE_BLOCK, CODE_LINE, IMAGE, ELEMENT_TYPE, SDOC_LINK, FILE_LINK, TITLE, SUBTITLE } from '../constants';
5
+ import { BlockquotePlugin, LinkPlugin, CheckListPlugin, HeaderPlugin, ListPlugin, CodeBlockPlugin, ImagePlugin, TablePlugin, SdocLinkPlugin, ParagraphPlugin, FileLinkPlugin } from '../plugins';
6
+ import EventBus from '../../utils/event-bus';
7
+ import { INTERNAL_EVENT } from '../../constants';
8
+ var CustomRenderElement = function CustomRenderElement(props) {
9
+ var editor = useSlateStatic();
10
+ var element = props.element,
11
+ attributes = props.attributes;
12
+ var onMouseEnter = useCallback(function (event) {
13
+ event.stopPropagation();
14
+ var eventBus = EventBus.getInstance();
15
+ eventBus.dispatch(INTERNAL_EVENT.ON_MOUSE_ENTER_BLOCK, event);
16
+ }, []);
17
+ switch (element.type) {
18
+ case PARAGRAPH:
19
+ {
20
+ attributes['onMouseEnter'] = onMouseEnter;
21
+ var _ParagraphPlugin$rend = _slicedToArray(ParagraphPlugin.renderElements, 1),
22
+ renderParagraph = _ParagraphPlugin$rend[0];
23
+ return renderParagraph(props);
24
+ }
25
+ case TITLE:
26
+ {
27
+ var _HeaderPlugin$renderE = _slicedToArray(HeaderPlugin.renderElements, 1),
28
+ renderTitle = _HeaderPlugin$renderE[0];
29
+ return renderTitle(props, editor);
30
+ }
31
+ case SUBTITLE:
32
+ {
33
+ attributes['onMouseEnter'] = onMouseEnter;
34
+ var _HeaderPlugin$renderE2 = _slicedToArray(HeaderPlugin.renderElements, 2),
35
+ renderSubtitle = _HeaderPlugin$renderE2[1];
36
+ return renderSubtitle(props, editor);
37
+ }
38
+ case HEADER1:
39
+ case HEADER2:
40
+ case HEADER3:
41
+ case HEADER4:
42
+ case HEADER5:
43
+ case HEADER6:
44
+ {
45
+ attributes['onMouseEnter'] = onMouseEnter;
46
+ var _HeaderPlugin$renderE3 = _slicedToArray(HeaderPlugin.renderElements, 3),
47
+ renderHeader = _HeaderPlugin$renderE3[2];
48
+ return renderHeader(props, editor);
49
+ }
50
+ case LINK:
51
+ {
52
+ var _LinkPlugin$renderEle = _slicedToArray(LinkPlugin.renderElements, 1),
53
+ renderLink = _LinkPlugin$renderEle[0];
54
+ return renderLink(props, editor);
55
+ }
56
+ case BLOCKQUOTE:
57
+ {
58
+ attributes['onMouseEnter'] = onMouseEnter;
59
+ var _BlockquotePlugin$ren = _slicedToArray(BlockquotePlugin.renderElements, 1),
60
+ renderBlockquote = _BlockquotePlugin$ren[0];
61
+ return renderBlockquote(props, editor);
62
+ }
63
+ case ORDERED_LIST:
64
+ case UNORDERED_LIST:
65
+ {
66
+ var _ListPlugin$renderEle = _slicedToArray(ListPlugin.renderElements, 1),
67
+ renderList = _ListPlugin$renderEle[0];
68
+ return renderList(props, editor);
69
+ }
70
+ case LIST_ITEM:
71
+ {
72
+ attributes['onMouseEnter'] = onMouseEnter;
73
+ var _ListPlugin$renderEle2 = _slicedToArray(ListPlugin.renderElements, 2),
74
+ renderListItem = _ListPlugin$renderEle2[1];
75
+ return renderListItem(props, editor);
76
+ }
77
+ case LIST_LIC:
78
+ {
79
+ var _ListPlugin$renderEle3 = _slicedToArray(ListPlugin.renderElements, 3),
80
+ renderListLic = _ListPlugin$renderEle3[2];
81
+ return renderListLic(props, editor);
82
+ }
83
+ case CHECK_LIST_ITEM:
84
+ {
85
+ attributes['onMouseEnter'] = onMouseEnter;
86
+ var _CheckListPlugin$rend = _slicedToArray(CheckListPlugin.renderElements, 1),
87
+ renderCheckListItem = _CheckListPlugin$rend[0];
88
+ return renderCheckListItem(props, editor);
89
+ }
90
+ case CODE_BLOCK:
91
+ {
92
+ attributes['onMouseEnter'] = onMouseEnter;
93
+ var _CodeBlockPlugin$rend = _slicedToArray(CodeBlockPlugin.renderElements, 1),
94
+ renderCodeBlock = _CodeBlockPlugin$rend[0];
95
+ return renderCodeBlock(props, editor);
96
+ }
97
+ case CODE_LINE:
98
+ {
99
+ var _CodeBlockPlugin$rend2 = _slicedToArray(CodeBlockPlugin.renderElements, 2),
100
+ renderCodeLine = _CodeBlockPlugin$rend2[1];
101
+ return renderCodeLine(props, editor);
102
+ }
103
+ case IMAGE:
104
+ {
105
+ var _ImagePlugin$renderEl = _slicedToArray(ImagePlugin.renderElements, 1),
106
+ renderImage = _ImagePlugin$renderEl[0];
107
+ return renderImage(props, editor);
108
+ }
109
+ case ELEMENT_TYPE.TABLE:
110
+ {
111
+ attributes['onMouseEnter'] = onMouseEnter;
112
+ var _TablePlugin$renderEl = _slicedToArray(TablePlugin.renderElements, 1),
113
+ renderTable = _TablePlugin$renderEl[0];
114
+ return renderTable(props, editor);
115
+ }
116
+ case ELEMENT_TYPE.TABLE_ROW:
117
+ {
118
+ var _TablePlugin$renderEl2 = _slicedToArray(TablePlugin.renderElements, 2),
119
+ renderTableRow = _TablePlugin$renderEl2[1];
120
+ return renderTableRow(props, editor);
121
+ }
122
+ case ELEMENT_TYPE.TABLE_CELL:
123
+ {
124
+ var _TablePlugin$renderEl3 = _slicedToArray(TablePlugin.renderElements, 3),
125
+ renderTableCell = _TablePlugin$renderEl3[2];
126
+ return renderTableCell(props, editor);
127
+ }
128
+ case SDOC_LINK:
129
+ {
130
+ var _SdocLinkPlugin$rende = _slicedToArray(SdocLinkPlugin.renderElements, 1),
131
+ renderSdocLink = _SdocLinkPlugin$rende[0];
132
+ return renderSdocLink(props, editor);
133
+ }
134
+ case FILE_LINK:
135
+ {
136
+ var _FileLinkPlugin$rende = _slicedToArray(FileLinkPlugin.renderElements, 1),
137
+ renderFileLink = _FileLinkPlugin$rende[0];
138
+ return renderFileLink(props, editor);
139
+ }
140
+ default:
141
+ {
142
+ var _ParagraphPlugin$rend2 = _slicedToArray(ParagraphPlugin.renderElements, 1),
143
+ _renderParagraph = _ParagraphPlugin$rend2[0];
144
+ return _renderParagraph(props);
145
+ }
146
+ }
147
+ };
148
+ export default CustomRenderElement;
@@ -0,0 +1,2 @@
1
+ import RebaseDecorate from './rebase-decorate';
2
+ export { RebaseDecorate };
@@ -0,0 +1,29 @@
1
+ import React from 'react';
2
+ import RebaseModifyDeleteDecorate from './rebase-modify-delete-decorate';
3
+ import RebaseModifyModifyDecorate from './rebase-modify-modify-decorate';
4
+ import RebaseDeleteModifyDecorate from './rebase-delete-modify-decorate';
5
+ import { REBASE_MARK_KEY, REBASE_TYPE } from '../../../../constants';
6
+ import './index.css';
7
+ var RebaseDecorate = function RebaseDecorate(_ref) {
8
+ var element = _ref.element,
9
+ children = _ref.children;
10
+ var rebaseType = element[REBASE_MARK_KEY.REBASE_TYPE];
11
+ if (!rebaseType) return /*#__PURE__*/React.createElement(React.Fragment, null, children);
12
+ if (rebaseType === REBASE_TYPE.MODIFY_DELETE) {
13
+ return /*#__PURE__*/React.createElement(RebaseModifyDeleteDecorate, {
14
+ element: element
15
+ }, children);
16
+ }
17
+ if (rebaseType === REBASE_TYPE.DELETE_MODIFY) {
18
+ return /*#__PURE__*/React.createElement(RebaseDeleteModifyDecorate, {
19
+ element: element
20
+ }, children);
21
+ }
22
+ if (rebaseType === REBASE_TYPE.MODIFY_MODIFY) {
23
+ return /*#__PURE__*/React.createElement(RebaseModifyModifyDecorate, {
24
+ element: element
25
+ }, children);
26
+ }
27
+ return /*#__PURE__*/React.createElement(React.Fragment, null, children);
28
+ };
29
+ export default RebaseDecorate;
@@ -0,0 +1,64 @@
1
+ import React, { useCallback } from 'react';
2
+ import { useTranslation } from 'react-i18next';
3
+ import { Transforms } from '@seafile/slate';
4
+ import { useSlateStatic } from '@seafile/slate-react';
5
+ import { ELEMENT_TYPE } from '../../../constants';
6
+ import { REBASE_MARKS } from '../../../../constants';
7
+ import { findPath, deleteNodeMark, updateRebaseParentNodeByPath } from '../../../core';
8
+ var RebaseDeleteModifyDecorate = function RebaseDeleteModifyDecorate(_ref) {
9
+ var element = _ref.element,
10
+ children = _ref.children;
11
+ var _useTranslation = useTranslation(),
12
+ t = _useTranslation.t;
13
+ var editor = useSlateStatic();
14
+ var deleteElement = useCallback(function () {
15
+ var path = findPath(editor, element);
16
+ Transforms.removeNodes(editor, {
17
+ at: path
18
+ });
19
+ if (element.type === ELEMENT_TYPE.LIST_ITEM) {
20
+ updateRebaseParentNodeByPath(editor, path);
21
+ }
22
+
23
+ // eslint-disable-next-line react-hooks/exhaustive-deps
24
+ }, [editor, element]);
25
+ var deleteMark = useCallback(function () {
26
+ var path = findPath(editor, element);
27
+ deleteNodeMark(editor, path, element, REBASE_MARKS);
28
+ if (element.type === ELEMENT_TYPE.LIST_ITEM) {
29
+ updateRebaseParentNodeByPath(editor, path);
30
+ }
31
+
32
+ // eslint-disable-next-line react-hooks/exhaustive-deps
33
+ }, [editor, element]);
34
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
35
+ className: "w-100 d-flex sdoc-rebase-btn-group",
36
+ contentEditable: false
37
+ }, /*#__PURE__*/React.createElement("div", {
38
+ className: "sdoc-rebase-btn",
39
+ onClick: deleteElement
40
+ }, t('Keep_other_modification')), /*#__PURE__*/React.createElement("div", {
41
+ className: "mr-2 ml-2"
42
+ }, '|'), /*#__PURE__*/React.createElement("div", {
43
+ className: "sdoc-rebase-btn",
44
+ onClick: deleteMark
45
+ }, t('Keep_my_modification')), /*#__PURE__*/React.createElement("div", {
46
+ className: "mr-2 ml-2"
47
+ }, '|'), /*#__PURE__*/React.createElement("div", {
48
+ className: "sdoc-rebase-btn",
49
+ onClick: deleteMark
50
+ }, t('Keep_both_modification'))), /*#__PURE__*/React.createElement("div", {
51
+ className: "w-100 sdoc-rebase-current-changes-start",
52
+ contentEditable: false
53
+ }, '<<<<<<<'), /*#__PURE__*/React.createElement("div", {
54
+ className: "w-100",
55
+ contentEditable: false
56
+ }, '======='), /*#__PURE__*/React.createElement("div", {
57
+ className: "w-100 sdoc-rebase-incoming-changes",
58
+ contentEditable: false
59
+ }, children), /*#__PURE__*/React.createElement("div", {
60
+ className: "w-100 sdoc-rebase-incoming-changes-end",
61
+ contentEditable: false
62
+ }, '>>>>>>>'));
63
+ };
64
+ export default RebaseDeleteModifyDecorate;
@@ -0,0 +1,64 @@
1
+ import React, { useCallback } from 'react';
2
+ import { useTranslation } from 'react-i18next';
3
+ import { Transforms } from '@seafile/slate';
4
+ import { useSlateStatic } from '@seafile/slate-react';
5
+ import { ELEMENT_TYPE } from '../../../constants';
6
+ import { REBASE_MARKS } from '../../../../constants';
7
+ import { findPath, deleteNodeMark, updateRebaseParentNodeByPath } from '../../../core';
8
+ var RebaseModifyDeleteDecorate = function RebaseModifyDeleteDecorate(_ref) {
9
+ var element = _ref.element,
10
+ children = _ref.children;
11
+ var _useTranslation = useTranslation(),
12
+ t = _useTranslation.t;
13
+ var editor = useSlateStatic();
14
+ var deleteElement = useCallback(function () {
15
+ var path = findPath(editor, element);
16
+ Transforms.removeNodes(editor, {
17
+ at: path
18
+ });
19
+ if (element.type === ELEMENT_TYPE.LIST_ITEM) {
20
+ updateRebaseParentNodeByPath(editor, path);
21
+ }
22
+
23
+ // eslint-disable-next-line react-hooks/exhaustive-deps
24
+ }, [editor, element]);
25
+ var deleteMark = useCallback(function () {
26
+ var path = findPath(editor, element);
27
+ deleteNodeMark(editor, path, element, REBASE_MARKS);
28
+ if (element.type === ELEMENT_TYPE.LIST_ITEM) {
29
+ updateRebaseParentNodeByPath(editor, path);
30
+ }
31
+
32
+ // eslint-disable-next-line react-hooks/exhaustive-deps
33
+ }, [editor, element]);
34
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
35
+ className: "w-100 d-flex sdoc-rebase-btn-group",
36
+ contentEditable: false
37
+ }, /*#__PURE__*/React.createElement("div", {
38
+ className: "sdoc-rebase-btn",
39
+ onClick: deleteMark
40
+ }, t('Keep_other_modification')), /*#__PURE__*/React.createElement("div", {
41
+ className: "mr-2 ml-2"
42
+ }, '|'), /*#__PURE__*/React.createElement("div", {
43
+ className: "sdoc-rebase-btn",
44
+ onClick: deleteElement
45
+ }, t('Keep_my_modification')), /*#__PURE__*/React.createElement("div", {
46
+ className: "mr-2 ml-2"
47
+ }, '|'), /*#__PURE__*/React.createElement("div", {
48
+ className: "sdoc-rebase-btn",
49
+ onClick: deleteMark
50
+ }, t('Keep_both_modification'))), /*#__PURE__*/React.createElement("div", {
51
+ className: "w-100 sdoc-rebase-current-changes-start",
52
+ contentEditable: false
53
+ }, '<<<<<<<'), /*#__PURE__*/React.createElement("div", {
54
+ className: "w-100 sdoc-rebase-incoming-changes",
55
+ contentEditable: false
56
+ }, children), /*#__PURE__*/React.createElement("div", {
57
+ className: "w-100",
58
+ contentEditable: false
59
+ }, '======='), /*#__PURE__*/React.createElement("div", {
60
+ className: "w-100 sdoc-rebase-incoming-changes-end",
61
+ contentEditable: false
62
+ }, '>>>>>>>'));
63
+ };
64
+ export default RebaseModifyDeleteDecorate;
@@ -0,0 +1,97 @@
1
+ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
2
+ import React, { useCallback } from 'react';
3
+ import { useTranslation } from 'react-i18next';
4
+ import deepCopy from 'deep-copy';
5
+ import { Transforms } from '@seafile/slate';
6
+ import { useSlateStatic } from '@seafile/slate-react';
7
+ import { ELEMENT_TYPE } from '../../../constants';
8
+ import { REBASE_MARKS, REBASE_MARK_KEY, REBASE_ORIGIN } from '../../../../constants';
9
+ import { findPath, getNode, deleteNodeMark, updateRebaseParentNodeByPath } from '../../../core';
10
+ var RebaseModifyModifyDecorate = function RebaseModifyModifyDecorate(_ref) {
11
+ var element = _ref.element,
12
+ children = _ref.children;
13
+ var _useTranslation = useTranslation(),
14
+ t = _useTranslation.t;
15
+ var editor = useSlateStatic();
16
+ var useMasterChanges = useCallback(function () {
17
+ var path = findPath(editor, element);
18
+ deleteNodeMark(editor, path, element[REBASE_MARK_KEY.OLD_ELEMENT], REBASE_MARKS);
19
+ var nextElementPath = _toConsumableArray(path);
20
+ nextElementPath[path.length - 1] = path[path.length - 1] + 1;
21
+ Transforms.removeNodes(editor, {
22
+ at: nextElementPath
23
+ });
24
+ if (element.type === ELEMENT_TYPE.LIST_ITEM) {
25
+ updateRebaseParentNodeByPath(editor, path);
26
+ }
27
+
28
+ // eslint-disable-next-line react-hooks/exhaustive-deps
29
+ }, [editor, element]);
30
+ var useCurrentChanges = useCallback(function () {
31
+ var path = findPath(editor, element);
32
+ var currentElementPath = _toConsumableArray(path);
33
+ currentElementPath[path.length - 1] = path[path.length - 1] + 1;
34
+ var currentElement = getNode(editor, currentElementPath);
35
+ var newCurrentElement = deepCopy(currentElement);
36
+ deleteNodeMark(editor, currentElementPath, newCurrentElement, REBASE_MARKS);
37
+ Transforms.removeNodes(editor, {
38
+ at: path
39
+ });
40
+ if (element.type === ELEMENT_TYPE.LIST_ITEM) {
41
+ updateRebaseParentNodeByPath(editor, path);
42
+ }
43
+
44
+ // eslint-disable-next-line react-hooks/exhaustive-deps
45
+ }, [editor, element]);
46
+ var useBothChanges = useCallback(function () {
47
+ // delete element marks
48
+ var path = findPath(editor, element);
49
+ deleteNodeMark(editor, path, element, REBASE_MARKS);
50
+
51
+ // delete next element marks
52
+ var nextElementPath = [].concat(_toConsumableArray(path.slice(0, -1)), [path[path.length - 1] + 1]);
53
+ var nextElement = getNode(editor, nextElementPath);
54
+ deleteNodeMark(editor, nextElementPath, nextElement, REBASE_MARKS);
55
+ if (element.type === ELEMENT_TYPE.LIST_ITEM) {
56
+ updateRebaseParentNodeByPath(editor, path);
57
+ }
58
+
59
+ // eslint-disable-next-line react-hooks/exhaustive-deps
60
+ }, [editor, element]);
61
+ if (element[REBASE_MARK_KEY.ORIGIN] === REBASE_ORIGIN.OTHER) {
62
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
63
+ className: "w-100 d-flex sdoc-rebase-btn-group",
64
+ contentEditable: false
65
+ }, /*#__PURE__*/React.createElement("div", {
66
+ className: "sdoc-rebase-btn",
67
+ onClick: useMasterChanges
68
+ }, t('Keep_other_modification')), /*#__PURE__*/React.createElement("div", {
69
+ className: "mr-2 ml-2"
70
+ }, '|'), /*#__PURE__*/React.createElement("div", {
71
+ className: "sdoc-rebase-btn",
72
+ onClick: useCurrentChanges
73
+ }, t('Keep_my_modification')), /*#__PURE__*/React.createElement("div", {
74
+ className: "mr-2 ml-2"
75
+ }, '|'), /*#__PURE__*/React.createElement("div", {
76
+ className: "sdoc-rebase-btn",
77
+ onClick: useBothChanges
78
+ }, t('Keep_both_modification'))), /*#__PURE__*/React.createElement("div", {
79
+ className: "w-100 sdoc-rebase-current-changes-start",
80
+ contentEditable: false
81
+ }, '<<<<<<<'), /*#__PURE__*/React.createElement("div", {
82
+ className: "w-100 sdoc-rebase-current-changes",
83
+ contentEditable: false
84
+ }, children));
85
+ }
86
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
87
+ className: "w-100",
88
+ contentEditable: false
89
+ }, '======='), /*#__PURE__*/React.createElement("div", {
90
+ className: "w-100 sdoc-rebase-incoming-changes",
91
+ contentEditable: false
92
+ }, children), /*#__PURE__*/React.createElement("div", {
93
+ className: "w-100 sdoc-rebase-incoming-changes-end",
94
+ contentEditable: false
95
+ }, '>>>>>>>'));
96
+ };
97
+ export default RebaseModifyModifyDecorate;
@@ -1,371 +1,14 @@
1
- import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
2
- import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
3
- import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
4
- import React, { useCallback } from 'react';
5
- import { useSlateStatic } from '@seafile/slate-react';
6
- import { Transforms } from '@seafile/slate';
7
- import deepCopy from 'deep-copy';
8
- import { useTranslation } from 'react-i18next';
9
- import { BLOCKQUOTE, LINK, CHECK_LIST_ITEM, HEADER1, HEADER2, HEADER3, HEADER4, HEADER5, HEADER6, LIST_ITEM, LIST_LIC, ORDERED_LIST, PARAGRAPH, UNORDERED_LIST, CODE_BLOCK, CODE_LINE, IMAGE, ELEMENT_TYPE, SDOC_LINK, FILE_LINK, TITLE, SUBTITLE } from '../constants';
10
- import { BlockquotePlugin, LinkPlugin, CheckListPlugin, HeaderPlugin, ListPlugin, CodeBlockPlugin, ImagePlugin, TablePlugin, SdocLinkPlugin, ParagraphPlugin, FileLinkPlugin } from '../plugins';
11
- import EventBus from '../../utils/event-bus';
12
- import { INTERNAL_EVENT, REBASE_TYPE, REBASE_MARKS, REBASE_MARK_KEY, REBASE_ORIGIN } from '../../constants';
13
- import { findPath, getNode, replaceNode, deleteNodeMark } from '../../extension/core';
14
- import './rebase-style.css';
15
- var CustomElement = function CustomElement(props) {
16
- var editor = useSlateStatic();
17
- var element = props.element,
18
- attributes = props.attributes;
19
- var onMouseEnter = useCallback(function (event) {
20
- event.stopPropagation();
21
- var eventBus = EventBus.getInstance();
22
- eventBus.dispatch(INTERNAL_EVENT.ON_MOUSE_ENTER_BLOCK, event);
23
- }, []);
24
- switch (element.type) {
25
- case PARAGRAPH:
26
- {
27
- attributes['onMouseEnter'] = onMouseEnter;
28
- var _ParagraphPlugin$rend = _slicedToArray(ParagraphPlugin.renderElements, 1),
29
- renderParagraph = _ParagraphPlugin$rend[0];
30
- return renderParagraph(props);
31
- }
32
- case TITLE:
33
- {
34
- var _HeaderPlugin$renderE = _slicedToArray(HeaderPlugin.renderElements, 1),
35
- renderTitle = _HeaderPlugin$renderE[0];
36
- return renderTitle(props, editor);
37
- }
38
- case SUBTITLE:
39
- {
40
- attributes['onMouseEnter'] = onMouseEnter;
41
- var _HeaderPlugin$renderE2 = _slicedToArray(HeaderPlugin.renderElements, 2),
42
- renderSubtitle = _HeaderPlugin$renderE2[1];
43
- return renderSubtitle(props, editor);
44
- }
45
- case HEADER1:
46
- case HEADER2:
47
- case HEADER3:
48
- case HEADER4:
49
- case HEADER5:
50
- case HEADER6:
51
- {
52
- attributes['onMouseEnter'] = onMouseEnter;
53
- var _HeaderPlugin$renderE3 = _slicedToArray(HeaderPlugin.renderElements, 3),
54
- renderHeader = _HeaderPlugin$renderE3[2];
55
- return renderHeader(props, editor);
56
- }
57
- case LINK:
58
- {
59
- var _LinkPlugin$renderEle = _slicedToArray(LinkPlugin.renderElements, 1),
60
- renderLink = _LinkPlugin$renderEle[0];
61
- return renderLink(props, editor);
62
- }
63
- case BLOCKQUOTE:
64
- {
65
- attributes['onMouseEnter'] = onMouseEnter;
66
- var _BlockquotePlugin$ren = _slicedToArray(BlockquotePlugin.renderElements, 1),
67
- renderBlockquote = _BlockquotePlugin$ren[0];
68
- return renderBlockquote(props, editor);
69
- }
70
- case ORDERED_LIST:
71
- case UNORDERED_LIST:
72
- {
73
- var _ListPlugin$renderEle = _slicedToArray(ListPlugin.renderElements, 1),
74
- renderList = _ListPlugin$renderEle[0];
75
- return renderList(props, editor);
76
- }
77
- case LIST_ITEM:
78
- {
79
- attributes['onMouseEnter'] = onMouseEnter;
80
- var _ListPlugin$renderEle2 = _slicedToArray(ListPlugin.renderElements, 2),
81
- renderListItem = _ListPlugin$renderEle2[1];
82
- return renderListItem(props, editor);
83
- }
84
- case LIST_LIC:
85
- {
86
- var _ListPlugin$renderEle3 = _slicedToArray(ListPlugin.renderElements, 3),
87
- renderListLic = _ListPlugin$renderEle3[2];
88
- return renderListLic(props, editor);
89
- }
90
- case CHECK_LIST_ITEM:
91
- {
92
- attributes['onMouseEnter'] = onMouseEnter;
93
- var _CheckListPlugin$rend = _slicedToArray(CheckListPlugin.renderElements, 1),
94
- renderCheckListItem = _CheckListPlugin$rend[0];
95
- return renderCheckListItem(props, editor);
96
- }
97
- case CODE_BLOCK:
98
- {
99
- attributes['onMouseEnter'] = onMouseEnter;
100
- var _CodeBlockPlugin$rend = _slicedToArray(CodeBlockPlugin.renderElements, 1),
101
- renderCodeBlock = _CodeBlockPlugin$rend[0];
102
- return renderCodeBlock(props, editor);
103
- }
104
- case CODE_LINE:
105
- {
106
- var _CodeBlockPlugin$rend2 = _slicedToArray(CodeBlockPlugin.renderElements, 2),
107
- renderCodeLine = _CodeBlockPlugin$rend2[1];
108
- return renderCodeLine(props, editor);
109
- }
110
- case IMAGE:
111
- {
112
- var _ImagePlugin$renderEl = _slicedToArray(ImagePlugin.renderElements, 1),
113
- renderImage = _ImagePlugin$renderEl[0];
114
- return renderImage(props, editor);
115
- }
116
- case ELEMENT_TYPE.TABLE:
117
- {
118
- attributes['onMouseEnter'] = onMouseEnter;
119
- var _TablePlugin$renderEl = _slicedToArray(TablePlugin.renderElements, 1),
120
- renderTable = _TablePlugin$renderEl[0];
121
- return renderTable(props, editor);
122
- }
123
- case ELEMENT_TYPE.TABLE_ROW:
124
- {
125
- var _TablePlugin$renderEl2 = _slicedToArray(TablePlugin.renderElements, 2),
126
- renderTableRow = _TablePlugin$renderEl2[1];
127
- return renderTableRow(props, editor);
128
- }
129
- case ELEMENT_TYPE.TABLE_CELL:
130
- {
131
- var _TablePlugin$renderEl3 = _slicedToArray(TablePlugin.renderElements, 3),
132
- renderTableCell = _TablePlugin$renderEl3[2];
133
- return renderTableCell(props, editor);
134
- }
135
- case SDOC_LINK:
136
- {
137
- var _SdocLinkPlugin$rende = _slicedToArray(SdocLinkPlugin.renderElements, 1),
138
- renderSdocLink = _SdocLinkPlugin$rende[0];
139
- return renderSdocLink(props, editor);
140
- }
141
- case FILE_LINK:
142
- {
143
- var _FileLinkPlugin$rende = _slicedToArray(FileLinkPlugin.renderElements, 1),
144
- renderFileLink = _FileLinkPlugin$rende[0];
145
- return renderFileLink(props, editor);
146
- }
147
- default:
148
- {
149
- var _ParagraphPlugin$rend2 = _slicedToArray(ParagraphPlugin.renderElements, 1),
150
- _renderParagraph = _ParagraphPlugin$rend2[0];
151
- return _renderParagraph(props);
152
- }
153
- }
154
- };
1
+ import React from 'react';
2
+ import { REBASE_MARK_KEY } from '../../constants';
3
+ import { RebaseDecorate } from './element-decorate';
4
+ import CustomElement from './custom-element';
155
5
  var RenderElement = function RenderElement(props) {
156
- var editor = useSlateStatic();
157
- var _useTranslation = useTranslation(),
158
- t = _useTranslation.t;
159
- var updateParentNodeByPath = useCallback(function (path) {
160
- var parentPath = path.slice(0, -1);
161
- var parentNode = getNode(editor, parentPath);
162
- if (parentNode.children.filter(function (item) {
163
- return item[REBASE_MARK_KEY.REBASE_TYPE];
164
- }).length === 0) {
165
- var newParentElement = _objectSpread({}, parentNode);
166
- newParentElement[REBASE_MARK_KEY.REBASE_TYPE] && delete newParentElement[REBASE_MARK_KEY.REBASE_TYPE];
167
- newParentElement[REBASE_MARK_KEY.OLD_ELEMENT] && delete newParentElement[REBASE_MARK_KEY.OLD_ELEMENT];
168
- newParentElement[REBASE_MARK_KEY.ORIGIN] && delete newParentElement[REBASE_MARK_KEY.ORIGIN];
169
- newParentElement['children'] = newParentElement['children'].map(function (item) {
170
- item[REBASE_MARK_KEY.REBASE_TYPE] && delete item[REBASE_MARK_KEY.REBASE_TYPE];
171
- item[REBASE_MARK_KEY.OLD_ELEMENT] && delete item[REBASE_MARK_KEY.OLD_ELEMENT];
172
- item[REBASE_MARK_KEY.ORIGIN] && delete item[REBASE_MARK_KEY.ORIGIN];
173
- return item;
174
- });
175
- replaceNode(editor, {
176
- at: parentPath,
177
- nodes: newParentElement
178
- });
179
- }
180
-
181
- // eslint-disable-next-line react-hooks/exhaustive-deps
182
- }, [editor]);
183
- var deleteElement = useCallback(function (element) {
184
- var path = findPath(editor, element);
185
- Transforms.removeNodes(editor, {
186
- at: path
187
- });
188
- if (element.type === ELEMENT_TYPE.LIST_ITEM) {
189
- updateParentNodeByPath(path);
190
- }
191
-
192
- // eslint-disable-next-line react-hooks/exhaustive-deps
193
- }, [editor]);
194
- var deleteMark = useCallback(function (element) {
195
- var path = findPath(editor, element);
196
- deleteNodeMark(editor, path, element, REBASE_MARKS);
197
- if (element.type === ELEMENT_TYPE.LIST_ITEM) {
198
- updateParentNodeByPath(path);
199
- }
200
-
201
- // eslint-disable-next-line react-hooks/exhaustive-deps
202
- }, [editor]);
203
- var useMasterChanges = useCallback(function (element) {
204
- var path = findPath(editor, element);
205
- deleteNodeMark(editor, path, element[REBASE_MARK_KEY.OLD_ELEMENT], REBASE_MARKS);
206
- var nextElementPath = _toConsumableArray(path);
207
- nextElementPath[path.length - 1] = path[path.length - 1] + 1;
208
- Transforms.removeNodes(editor, {
209
- at: nextElementPath
210
- });
211
- if (element.type === ELEMENT_TYPE.LIST_ITEM) {
212
- updateParentNodeByPath(path);
213
- }
214
-
215
- // eslint-disable-next-line react-hooks/exhaustive-deps
216
- }, [editor]);
217
- var useCurrentChanges = useCallback(function (element) {
218
- var path = findPath(editor, element);
219
- var currentElementPath = _toConsumableArray(path);
220
- currentElementPath[path.length - 1] = path[path.length - 1] + 1;
221
- var currentElement = getNode(editor, currentElementPath);
222
- var newCurrentElement = deepCopy(currentElement);
223
- deleteNodeMark(editor, currentElementPath, newCurrentElement, REBASE_MARKS);
224
- Transforms.removeNodes(editor, {
225
- at: path
226
- });
227
- if (element.type === ELEMENT_TYPE.LIST_ITEM) {
228
- updateParentNodeByPath(path);
229
- }
230
-
231
- // eslint-disable-next-line react-hooks/exhaustive-deps
232
- }, [editor]);
233
- var useBothChanges = useCallback(function (element) {
234
- // delete element marks
235
- var path = findPath(editor, element);
236
- deleteNodeMark(editor, path, element, REBASE_MARKS);
237
-
238
- // delete next element marks
239
- var nextElementPath = [].concat(_toConsumableArray(path.slice(0, -1)), [path[path.length - 1] + 1]);
240
- var nextElement = getNode(editor, nextElementPath);
241
- deleteNodeMark(editor, nextElementPath, nextElement, REBASE_MARKS);
242
- if (element.type === ELEMENT_TYPE.LIST_ITEM) {
243
- updateParentNodeByPath(path);
244
- }
245
-
246
- // eslint-disable-next-line react-hooks/exhaustive-deps
247
- }, [editor]);
248
6
  var element = props.element;
249
7
  var rebaseType = element[REBASE_MARK_KEY.REBASE_TYPE];
250
- if (!rebaseType) {
251
- return /*#__PURE__*/React.createElement(CustomElement, props);
252
- }
253
- if (rebaseType === REBASE_TYPE.MODIFY_DELETE) {
254
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
255
- className: "w-100 d-flex sdoc-rebase-btn-group",
256
- contentEditable: false
257
- }, /*#__PURE__*/React.createElement("div", {
258
- className: "sdoc-rebase-btn",
259
- onClick: function onClick() {
260
- return deleteMark(element);
261
- }
262
- }, t('Keep_other_modification')), /*#__PURE__*/React.createElement("div", {
263
- className: "mr-2 ml-2"
264
- }, '|'), /*#__PURE__*/React.createElement("div", {
265
- className: "sdoc-rebase-btn",
266
- onClick: function onClick() {
267
- return deleteElement(element);
268
- }
269
- }, t('Keep_my_modification')), /*#__PURE__*/React.createElement("div", {
270
- className: "mr-2 ml-2"
271
- }, '|'), /*#__PURE__*/React.createElement("div", {
272
- className: "sdoc-rebase-btn",
273
- onClick: function onClick() {
274
- return deleteMark(element);
275
- }
276
- }, t('Keep_both_modification'))), /*#__PURE__*/React.createElement("div", {
277
- className: "w-100 sdoc-rebase-current-changes-start",
278
- contentEditable: false
279
- }, '<<<<<<<'), /*#__PURE__*/React.createElement("div", {
280
- className: "w-100 sdoc-rebase-incoming-changes",
281
- contentEditable: false
282
- }, /*#__PURE__*/React.createElement(CustomElement, props)), /*#__PURE__*/React.createElement("div", {
283
- className: "w-100",
284
- contentEditable: false
285
- }, '======='), /*#__PURE__*/React.createElement("div", {
286
- className: "w-100 sdoc-rebase-incoming-changes-end",
287
- contentEditable: false
288
- }, '>>>>>>>'));
289
- }
290
- if (rebaseType === REBASE_TYPE.DELETE_MODIFY) {
291
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
292
- className: "w-100 d-flex sdoc-rebase-btn-group",
293
- contentEditable: false
294
- }, /*#__PURE__*/React.createElement("div", {
295
- className: "sdoc-rebase-btn",
296
- onClick: function onClick() {
297
- return deleteElement(element);
298
- }
299
- }, t('Keep_other_modification')), /*#__PURE__*/React.createElement("div", {
300
- className: "mr-2 ml-2"
301
- }, '|'), /*#__PURE__*/React.createElement("div", {
302
- className: "sdoc-rebase-btn",
303
- onClick: function onClick() {
304
- return deleteMark(element);
305
- }
306
- }, t('Keep_my_modification')), /*#__PURE__*/React.createElement("div", {
307
- className: "mr-2 ml-2"
308
- }, '|'), /*#__PURE__*/React.createElement("div", {
309
- className: "sdoc-rebase-btn",
310
- onClick: function onClick() {
311
- return deleteMark(element);
312
- }
313
- }, t('Keep_both_modification'))), /*#__PURE__*/React.createElement("div", {
314
- className: "w-100 sdoc-rebase-current-changes-start",
315
- contentEditable: false
316
- }, '<<<<<<<'), /*#__PURE__*/React.createElement("div", {
317
- className: "w-100",
318
- contentEditable: false
319
- }, '======='), /*#__PURE__*/React.createElement("div", {
320
- className: "w-100 sdoc-rebase-incoming-changes",
321
- contentEditable: false
322
- }, /*#__PURE__*/React.createElement(CustomElement, props)), /*#__PURE__*/React.createElement("div", {
323
- className: "w-100 sdoc-rebase-incoming-changes-end",
324
- contentEditable: false
325
- }, '>>>>>>>'));
326
- }
327
- if (rebaseType === REBASE_TYPE.MODIFY_MODIFY) {
328
- if (element[REBASE_MARK_KEY.ORIGIN] === REBASE_ORIGIN.OTHER) {
329
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
330
- className: "w-100 d-flex sdoc-rebase-btn-group",
331
- contentEditable: false
332
- }, /*#__PURE__*/React.createElement("div", {
333
- className: "sdoc-rebase-btn",
334
- onClick: function onClick() {
335
- return useMasterChanges(element);
336
- }
337
- }, t('Keep_other_modification')), /*#__PURE__*/React.createElement("div", {
338
- className: "mr-2 ml-2"
339
- }, '|'), /*#__PURE__*/React.createElement("div", {
340
- className: "sdoc-rebase-btn",
341
- onClick: function onClick() {
342
- return useCurrentChanges(element);
343
- }
344
- }, t('Keep_my_modification')), /*#__PURE__*/React.createElement("div", {
345
- className: "mr-2 ml-2"
346
- }, '|'), /*#__PURE__*/React.createElement("div", {
347
- className: "sdoc-rebase-btn",
348
- onClick: function onClick() {
349
- return useBothChanges(element);
350
- }
351
- }, t('Keep_both_modification'))), /*#__PURE__*/React.createElement("div", {
352
- className: "w-100 sdoc-rebase-current-changes-start",
353
- contentEditable: false
354
- }, '<<<<<<<'), /*#__PURE__*/React.createElement("div", {
355
- className: "w-100 sdoc-rebase-current-changes",
356
- contentEditable: false
357
- }, /*#__PURE__*/React.createElement(CustomElement, props)));
358
- }
359
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
360
- className: "w-100",
361
- contentEditable: false
362
- }, '======='), /*#__PURE__*/React.createElement("div", {
363
- className: "w-100 sdoc-rebase-incoming-changes",
364
- contentEditable: false
365
- }, /*#__PURE__*/React.createElement(CustomElement, props)), /*#__PURE__*/React.createElement("div", {
366
- className: "w-100 sdoc-rebase-incoming-changes-end",
367
- contentEditable: false
368
- }, '>>>>>>>'));
8
+ if (rebaseType) {
9
+ return /*#__PURE__*/React.createElement(RebaseDecorate, {
10
+ element: element
11
+ }, /*#__PURE__*/React.createElement(CustomElement, props));
369
12
  }
370
13
  return /*#__PURE__*/React.createElement(CustomElement, props);
371
14
 
@@ -1,6 +1,7 @@
1
1
  import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
2
  import { Element } from '@seafile/slate';
3
3
  import { CODE_LINE } from '../extension/constants';
4
+ import { SetNodeToDecorations } from './setNodeToDecorations';
4
5
  export var highlightDecorate = function highlightDecorate(editor) {
5
6
  return function (_ref) {
6
7
  var _ref2 = _slicedToArray(_ref, 2),
@@ -14,4 +15,5 @@ export var highlightDecorate = function highlightDecorate(editor) {
14
15
  }
15
16
  return ranges;
16
17
  };
17
- };
18
+ };
19
+ export { SetNodeToDecorations };
@@ -1,9 +1,9 @@
1
1
  import React, { Fragment } from 'react';
2
2
  import { Editable, Slate } from '@seafile/slate-react';
3
3
  import { ArticleContainer } from '../layout';
4
- import { SetNodeToDecorations } from '../highlight-decorate/setNodeToDecorations';
5
4
  import { renderElement, renderLeaf } from '../extension';
6
5
  import { usePipDecorate } from '../decorates';
6
+ import { SetNodeToDecorations } from '../highlight';
7
7
  export default function ReadOnlyArticle(_ref) {
8
8
  var editor = _ref.editor,
9
9
  slateValue = _ref.slateValue;
@@ -52,6 +52,7 @@
52
52
  white-space: break-spaces;
53
53
  }
54
54
 
55
+ .sdoc-more-revision-operations-dropdown .dropdown-item:hover .sdoc-more-revision-operation,
55
56
  .sdoc-more-revision-operations-dropdown .dropdown-item:hover .sdoc-more-revision-operation-title-name,
56
57
  .sdoc-more-revision-operations-dropdown .dropdown-item:hover .sdoc-more-revision-operation-describe {
57
58
  color: #fff;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/sdoc-editor",
3
- "version": "0.1.172",
3
+ "version": "0.1.173",
4
4
  "private": false,
5
5
  "description": "This is a sdoc editor",
6
6
  "main": "dist/index.js",