@seafile/sdoc-editor 2.0.68 → 2.0.70
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-decorate.js +17 -17
- package/dist/basic-sdk/comment/components/comment-context-menu/index.css +16 -0
- package/dist/basic-sdk/comment/components/comment-context-menu/index.js +38 -0
- package/dist/basic-sdk/comment/components/comment-context-menu/menu-item.js +57 -0
- package/dist/basic-sdk/comment/components/comment-editor.js +5 -2
- package/dist/basic-sdk/comment/components/comment-item-collapse-wrapper.js +17 -1
- package/dist/basic-sdk/comment/components/comment-item-wrapper.js +85 -30
- package/dist/basic-sdk/comment/components/comment-list.css +34 -0
- package/dist/basic-sdk/comment/components/comment-list.js +96 -20
- package/dist/basic-sdk/comment/components/editor-comment.js +117 -57
- package/dist/basic-sdk/comment/components/elements-comment-count/index.js +15 -3
- package/dist/basic-sdk/comment/components/global-comment/index.css +25 -0
- package/dist/basic-sdk/comment/helper.js +111 -2
- package/dist/basic-sdk/comment/hooks/notification-hooks/use-notification-mount.js +2 -1
- package/dist/basic-sdk/comment/reducer/comment-reducer.js +2 -3
- package/dist/basic-sdk/constants/index.js +2 -1
- package/dist/basic-sdk/editor/sdoc-editor.js +4 -4
- package/dist/basic-sdk/extension/plugins/ai/ai-icon/index.js +2 -2
- package/dist/basic-sdk/extension/plugins/ai/ai-module/helpers.js +4 -0
- package/dist/basic-sdk/extension/plugins/text-style/menu/index.js +2 -1
- package/dist/basic-sdk/extension/plugins/text-style/render-elem.js +28 -4
- package/dist/basic-sdk/hooks/use-selection-position.js +51 -30
- package/dist/basic-sdk/node-id/helpers.js +26 -2
- package/dist/basic-sdk/node-id/index.js +37 -2
- package/dist/components/doc-operations/revision-operations/index.js +1 -1
- package/dist/hooks/use-document.js +3 -1
- package/package.json +1 -1
- package/public/locales/en/sdoc-editor.json +2 -1
- package/public/locales/zh_CN/sdoc-editor.json +2 -1
|
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.replacePastedDataId = exports.replaceNodeId = exports.decorateOperation = void 0;
|
|
8
|
+
exports.replacePastedDataId = exports.replaceNodeId = exports.removeCommentMarks = exports.decorateOperation = void 0;
|
|
9
9
|
var _slate = require("@seafile/slate");
|
|
10
10
|
var _deepCopy = _interopRequireDefault(require("deep-copy"));
|
|
11
11
|
var _slugid = _interopRequireDefault(require("slugid"));
|
|
@@ -133,4 +133,28 @@ const replacePastedDataId = pastedData => {
|
|
|
133
133
|
return item;
|
|
134
134
|
});
|
|
135
135
|
};
|
|
136
|
-
exports.replacePastedDataId = replacePastedDataId;
|
|
136
|
+
exports.replacePastedDataId = replacePastedDataId;
|
|
137
|
+
const removeCommentMarks = fragment => {
|
|
138
|
+
const cleanNode = node => {
|
|
139
|
+
if (_slate.Text.isText(node)) {
|
|
140
|
+
const newNode = {
|
|
141
|
+
...node
|
|
142
|
+
};
|
|
143
|
+
for (const key of Object.keys(newNode)) {
|
|
144
|
+
if (key.startsWith('sdoc_comment') || key.startsWith('removed_')) {
|
|
145
|
+
delete newNode[key];
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return newNode;
|
|
149
|
+
}
|
|
150
|
+
if (node.children) {
|
|
151
|
+
return {
|
|
152
|
+
...node,
|
|
153
|
+
children: node.children.map(cleanNode)
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
return node;
|
|
157
|
+
};
|
|
158
|
+
return fragment.map(cleanNode);
|
|
159
|
+
};
|
|
160
|
+
exports.removeCommentMarks = removeCommentMarks;
|
|
@@ -4,18 +4,50 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
+
var _slate = require("@seafile/slate");
|
|
7
8
|
var _constants = require("../extension/constants");
|
|
8
9
|
var _documentUtils = require("../utils/document-utils");
|
|
9
10
|
var _helpers = require("./helpers");
|
|
10
11
|
const withNodeId = editor => {
|
|
11
12
|
const {
|
|
12
|
-
apply
|
|
13
|
+
apply,
|
|
14
|
+
insertText
|
|
13
15
|
} = editor;
|
|
14
16
|
const newEditor = editor;
|
|
15
17
|
newEditor.apply = op => {
|
|
16
18
|
const newOp = (0, _helpers.decorateOperation)(newEditor, op);
|
|
17
19
|
apply(newOp);
|
|
18
20
|
};
|
|
21
|
+
newEditor.insertText = text => {
|
|
22
|
+
const {
|
|
23
|
+
selection
|
|
24
|
+
} = editor;
|
|
25
|
+
// Remove context comment marks when inserting position has comment before selection and no comment after selection
|
|
26
|
+
if (selection && _slate.Range.isCollapsed(selection)) {
|
|
27
|
+
const beforePoint = _slate.Editor.before(editor, selection.focus, {
|
|
28
|
+
unit: 'character'
|
|
29
|
+
});
|
|
30
|
+
const afterPoint = _slate.Editor.after(editor, selection.focus, {
|
|
31
|
+
unit: 'character'
|
|
32
|
+
});
|
|
33
|
+
const beforeText = beforePoint && _slate.Editor.node(editor, beforePoint);
|
|
34
|
+
const afterText = afterPoint && _slate.Editor.node(editor, afterPoint);
|
|
35
|
+
const hasCommentBefore = beforeText && _slate.Text.isText(beforeText[0]) && Object.keys(beforeText[0]).some(k => k.includes('sdoc_comment'));
|
|
36
|
+
const hasCommentAfter = afterText && _slate.Text.isText(afterText[0]) && Object.keys(afterText[0]).some(k => k.includes('sdoc_comment'));
|
|
37
|
+
const hasTrueCommentAfter = afterText && _slate.Text.isText(afterText[0]) && Object.keys(afterText[0]).filter(k => k.includes('sdoc_comment')).some(k => afterText[0][k]);
|
|
38
|
+
if (hasCommentBefore && (!hasCommentAfter || !hasTrueCommentAfter)) {
|
|
39
|
+
const marks = _slate.Editor.marks(editor);
|
|
40
|
+
if (marks) {
|
|
41
|
+
for (const key of Object.keys(marks)) {
|
|
42
|
+
if (key.includes('sdoc_comment')) {
|
|
43
|
+
_slate.Editor.removeMark(editor, key);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
insertText(text);
|
|
50
|
+
};
|
|
19
51
|
|
|
20
52
|
// rewrite insert fragment data
|
|
21
53
|
newEditor.insertFragmentData = data => {
|
|
@@ -23,7 +55,10 @@ const withNodeId = editor => {
|
|
|
23
55
|
if (fragment) {
|
|
24
56
|
const decoded = decodeURIComponent(window.atob(fragment));
|
|
25
57
|
const parsed = JSON.parse(decoded);
|
|
26
|
-
|
|
58
|
+
|
|
59
|
+
// Clean context comment style when pasting commented context
|
|
60
|
+
const cleaned = (0, _helpers.removeCommentMarks)(parsed);
|
|
61
|
+
const newData = (0, _helpers.replacePastedDataId)(cleaned);
|
|
27
62
|
const normalizeNewData = (0, _documentUtils.normalizeCopyNodes)(newEditor, newData);
|
|
28
63
|
newEditor.insertFragment(normalizeNewData);
|
|
29
64
|
return newEditor;
|
|
@@ -39,7 +39,7 @@ const RevisionOperations = _ref => {
|
|
|
39
39
|
const [isLoading, setLoading] = (0, _react.useState)(false);
|
|
40
40
|
const {
|
|
41
41
|
loadDocument
|
|
42
|
-
} = (0, _hooks.useDocument)();
|
|
42
|
+
} = (0, _hooks.useDocument)(false);
|
|
43
43
|
(0, _react.useEffect)(() => {
|
|
44
44
|
if (!isSdocRevision) return;
|
|
45
45
|
if (isShowChanges) return;
|
|
@@ -7,7 +7,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.useDocument = void 0;
|
|
8
8
|
var _react = require("react");
|
|
9
9
|
var _context = _interopRequireDefault(require("../context"));
|
|
10
|
-
const useDocument = ()
|
|
10
|
+
const useDocument = function () {
|
|
11
|
+
let isInitData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
|
11
12
|
const isSdocRevision = _context.default.getSetting('isSdocRevision');
|
|
12
13
|
const isPublished = _context.default.getSetting('isPublished');
|
|
13
14
|
const [isFirstLoading, setIsFirstLoading] = (0, _react.useState)(true);
|
|
@@ -53,6 +54,7 @@ const useDocument = () => {
|
|
|
53
54
|
}, [loadDocument]);
|
|
54
55
|
(0, _react.useEffect)(() => {
|
|
55
56
|
if (isSdocRevision && isPublished) return;
|
|
57
|
+
if (!isInitData) return;
|
|
56
58
|
loadDocument().then(document => {
|
|
57
59
|
setDocument(document);
|
|
58
60
|
setIsFirstLoading(false);
|
package/package.json
CHANGED