@seafile/sdoc-editor 2.0.72 → 2.0.73

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.
@@ -16,7 +16,6 @@ var _useSelectionUpdate = _interopRequireDefault(require("../../hooks/use-select
16
16
  var _eventBus = _interopRequireDefault(require("../../utils/event-bus"));
17
17
  var _helper = require("../helper");
18
18
  var _useCommentContext = require("../hooks/comment-hooks/use-comment-context");
19
- var _index = require("../utils/index");
20
19
  var _commentList = _interopRequireDefault(require("./comment-list"));
21
20
  var _elementsCommentCount = _interopRequireDefault(require("./elements-comment-count"));
22
21
  const EditorComment = _ref => {
@@ -8,12 +8,12 @@ Object.defineProperty(exports, "__esModule", {
8
8
  exports.default = void 0;
9
9
  var _react = _interopRequireWildcard(require("react"));
10
10
  var _reactI18next = require("react-i18next");
11
- var _basicSdk = require("../../../basic-sdk");
12
11
  var _toast = _interopRequireDefault(require("../../../components/toast"));
13
12
  var _constants = require("../../../constants");
14
13
  var _context = _interopRequireDefault(require("../../../context"));
15
14
  var _model = require("../../../model");
16
15
  var _utils = require("../../../utils");
16
+ var _eventBus = _interopRequireDefault(require("../../utils/event-bus"));
17
17
  var _useParticipants = require("../hooks/use-participants");
18
18
  const ParticipantsProvider = _ref => {
19
19
  let {
@@ -77,7 +77,7 @@ const ParticipantsProvider = _ref => {
77
77
  // eslint-disable-next-line react-hooks/exhaustive-deps
78
78
  }, []);
79
79
  (0, _react.useEffect)(() => {
80
- const eventBus = _basicSdk.EventBus.getInstance();
80
+ const eventBus = _eventBus.default.getInstance();
81
81
  const unsubscribeParticipantAdded = eventBus.subscribe(_constants.EXTERNAL_EVENT.PARTICIPANT_ADDED, updateLocalParticipants);
82
82
  const unsubscribeParticipantRemoved = eventBus.subscribe(_constants.EXTERNAL_EVENT.PARTICIPANT_REMOVED, deleteLocalParticipant);
83
83
  return () => {
@@ -10,7 +10,6 @@ var _react = _interopRequireWildcard(require("react"));
10
10
  var _slate = require("@seafile/slate");
11
11
  var _slateReact = require("@seafile/slate-react");
12
12
  var _scrollIntoViewIfNeeded = _interopRequireDefault(require("scroll-into-view-if-needed"));
13
- var _useForceUpdate = _interopRequireDefault(require("../../basic-sdk/hooks/use-force-update"));
14
13
  var _comment = _interopRequireDefault(require("../comment"));
15
14
  var _constants = require("../constants");
16
15
  var _useCursors = require("../cursor/use-cursors");
@@ -20,6 +19,7 @@ var _constants2 = require("../extension/constants");
20
19
  var _core = require("../extension/core");
21
20
  var _helpers = require("../extension/plugins/table/helpers");
22
21
  var _highlight = require("../highlight");
22
+ var _useForceUpdate = _interopRequireDefault(require("../hooks/use-force-update"));
23
23
  var _useScrollContext = require("../hooks/use-scroll-context");
24
24
  var _layout = require("../layout");
25
25
  var _domUtils = require("../utils/dom-utils");
@@ -9,7 +9,6 @@ exports.default = void 0;
9
9
  var _react = _interopRequireWildcard(require("react"));
10
10
  var _slate = require("@seafile/slate");
11
11
  var _deepCopy = _interopRequireDefault(require("deep-copy"));
12
- var _basicSdk = require("../../basic-sdk");
13
12
  var _commonLoading = _interopRequireDefault(require("../../components/common-loading"));
14
13
  var _constants = require("../../constants");
15
14
  var _context = _interopRequireDefault(require("../../context"));
@@ -22,6 +21,7 @@ var _useScrollContext = require("../hooks/use-scroll-context");
22
21
  var _layout = require("../layout");
23
22
  var _nodeId = _interopRequireDefault(require("../node-id"));
24
23
  var _socket = require("../socket");
24
+ var _eventBus = _interopRequireDefault(require("../utils/event-bus"));
25
25
  var _commentArticle = _interopRequireDefault(require("./comment-article"));
26
26
  const SdocCommentEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
27
27
  let {
@@ -77,7 +77,7 @@ const SdocCommentEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
77
77
 
78
78
  // useMount: refresh document
79
79
  (0, _react.useEffect)(() => {
80
- const eventBus = _basicSdk.EventBus.getInstance();
80
+ const eventBus = _eventBus.default.getInstance();
81
81
  eventBus.subscribe(_constants.EXTERNAL_EVENT.REFRESH_DOCUMENT, onRefreshDocument);
82
82
  }, [onRefreshDocument]);
83
83
 
@@ -12,7 +12,6 @@ var _deepCopy = _interopRequireDefault(require("deep-copy"));
12
12
  var _isHotkey = _interopRequireDefault(require("is-hotkey"));
13
13
  var _jsBridge = _interopRequireDefault(require("../../android/js-bridge"));
14
14
  var _outlineModule = require("../../android/outline-module");
15
- var _basicSdk = require("../../basic-sdk");
16
15
  var _commonLoading = _interopRequireDefault(require("../../components/common-loading"));
17
16
  var _constants = require("../../constants");
18
17
  var _context = _interopRequireDefault(require("../../context"));
@@ -26,6 +25,7 @@ var _useColorContext = require("../hooks/use-color-context");
26
25
  var _layout = require("../layout");
27
26
  var _nodeId = _interopRequireDefault(require("../node-id"));
28
27
  var _socket = require("../socket");
28
+ var _eventBus = _interopRequireDefault(require("../utils/event-bus"));
29
29
  var _readonlyArticle = _interopRequireDefault(require("../views/readonly-article"));
30
30
  var _editableArticle = _interopRequireDefault(require("./editable-article"));
31
31
  const SdocEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
@@ -119,7 +119,7 @@ const SdocEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
119
119
 
120
120
  // useMount: refresh document
121
121
  (0, _react.useEffect)(() => {
122
- const eventBus = _basicSdk.EventBus.getInstance();
122
+ const eventBus = _eventBus.default.getInstance();
123
123
  eventBus.subscribe(_constants.EXTERNAL_EVENT.REFRESH_DOCUMENT, onRefreshDocument);
124
124
 
125
125
  // Remove Marks on special conditions like unexpected exit or refresh page using AI or context comment
@@ -143,7 +143,7 @@ const SdocEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
143
143
  }
144
144
  }, []);
145
145
  (0, _react.useEffect)(() => {
146
- const eventBus = _basicSdk.EventBus.getInstance();
146
+ const eventBus = _eventBus.default.getInstance();
147
147
  const unsubscribePresentationFullScreen = eventBus.subscribe(_constants.EXTERNAL_EVENT.TOGGLE_PRESENTATION_MODE, handleFullScreenPresentation);
148
148
  return () => {
149
149
  unsubscribePresentationFullScreen();
@@ -193,7 +193,7 @@ const SdocEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
193
193
  // eslint-disable-next-line react-hooks/exhaustive-deps
194
194
  }), [document, validEditor, slateValue]);
195
195
  const onValueChange = value => {
196
- const eventBus = _basicSdk.EventBus.getInstance();
196
+ const eventBus = _eventBus.default.getInstance();
197
197
  setSlateValue(value);
198
198
  // After the content is updated, update the search content
199
199
  setTimeout(() => {
@@ -10,7 +10,6 @@ var _react = _interopRequireWildcard(require("react"));
10
10
  var _slate = require("@seafile/slate");
11
11
  var _classnames = _interopRequireDefault(require("classnames"));
12
12
  var _deepCopy = _interopRequireDefault(require("deep-copy"));
13
- var _basicSdk = require("../../basic-sdk");
14
13
  var _commonLoading = _interopRequireDefault(require("../../components/common-loading"));
15
14
  var _constants = require("../../constants");
16
15
  var _context = _interopRequireDefault(require("../../context"));
@@ -25,6 +24,7 @@ var _layout = require("../layout");
25
24
  var _nodeId = _interopRequireDefault(require("../node-id"));
26
25
  var _wikiOutline = _interopRequireDefault(require("../outline/wiki-outline"));
27
26
  var _socket = require("../socket");
27
+ var _eventBus = _interopRequireDefault(require("../utils/event-bus"));
28
28
  var _readonlyArticle = _interopRequireDefault(require("../views/readonly-article"));
29
29
  var _editableArticle = _interopRequireDefault(require("./editable-article"));
30
30
  const WikiEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
@@ -109,7 +109,7 @@ const WikiEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
109
109
 
110
110
  // useMount: refresh document
111
111
  (0, _react.useEffect)(() => {
112
- const eventBus = _basicSdk.EventBus.getInstance();
112
+ const eventBus = _eventBus.default.getInstance();
113
113
  eventBus.subscribe(_constants.EXTERNAL_EVENT.REFRESH_DOCUMENT, onRefreshDocument);
114
114
  }, [onRefreshDocument]);
115
115
 
@@ -134,7 +134,7 @@ const WikiEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
134
134
  // eslint-disable-next-line react-hooks/exhaustive-deps
135
135
  }), [document, validEditor, slateValue]);
136
136
  const onValueChange = value => {
137
- const eventBus = _basicSdk.EventBus.getInstance();
137
+ const eventBus = _eventBus.default.getInstance();
138
138
  // After the content is updated, update the search content
139
139
  setTimeout(() => {
140
140
  eventBus.dispatch(_constants2.INTERNAL_EVENT.UPDATE_SEARCH_REPLACE_HIGHLIGHT, value);
@@ -3,8 +3,10 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.removeMarks = void 0;
6
+ exports.removeMarks = exports.markdownTableRenderer = exports.insertHtmlTransferredNodes = void 0;
7
7
  var _slate = require("@seafile/slate");
8
+ var _constants = require("../../../constants");
9
+ var _core = require("../../../core");
8
10
  const removeMarks = editor => {
9
11
  const {
10
12
  selection
@@ -23,4 +25,46 @@ const removeMarks = editor => {
23
25
  _slate.Transforms.deselect(editor);
24
26
  }
25
27
  };
26
- exports.removeMarks = removeMarks;
28
+ exports.removeMarks = removeMarks;
29
+ const markdownTableRenderer = searchResult => {
30
+ if (!searchResult) return '';
31
+ return /*#__PURE__*/React.createElement("div", {
32
+ className: "md-rendered-html",
33
+ dangerouslySetInnerHTML: {
34
+ __html: searchResult
35
+ }
36
+ });
37
+ };
38
+ exports.markdownTableRenderer = markdownTableRenderer;
39
+ const insertHtmlTransferredNodes = (slateNodeList, nextPath, editor) => {
40
+ slateNodeList.forEach(childNode => {
41
+ // Insert paragraph nodes
42
+ if (childNode.type === _constants.PARAGRAPH) {
43
+ if (childNode.children.length > 1) {
44
+ childNode.children.forEach((textNode, index) => {
45
+ if (!textNode.text.trim()) return;
46
+ const p = (0, _core.generateEmptyElement)(_constants.PARAGRAPH);
47
+ p.children.push(textNode);
48
+ _slate.Transforms.insertNodes(editor, p, {
49
+ at: nextPath
50
+ });
51
+ nextPath = _slate.Path.next(nextPath);
52
+ });
53
+ } else {
54
+ _slate.Transforms.insertNodes(editor, childNode, {
55
+ at: nextPath
56
+ });
57
+ nextPath = _slate.Path.next(nextPath);
58
+ }
59
+ }
60
+
61
+ // Insert non-paragraph nodes
62
+ if (childNode.type !== _constants.PARAGRAPH) {
63
+ _slate.Transforms.insertNodes(editor, childNode, {
64
+ at: nextPath
65
+ });
66
+ nextPath = _slate.Path.next(nextPath);
67
+ }
68
+ });
69
+ };
70
+ exports.insertHtmlTransferredNodes = insertHtmlTransferredNodes;
@@ -14,6 +14,8 @@ var _copyToClipboard = _interopRequireDefault(require("copy-to-clipboard"));
14
14
  var _isHotkey = _interopRequireDefault(require("is-hotkey"));
15
15
  var _toast = _interopRequireDefault(require("../../../../../components/toast"));
16
16
  var _context = _interopRequireDefault(require("../../../../../context"));
17
+ var _mdToHtml = _interopRequireDefault(require("../../../../../slate-convert/md-to-html"));
18
+ var _mdToSlate = _interopRequireDefault(require("../../../../../slate-convert/md-to-slate"));
17
19
  var _commons = require("../../../commons");
18
20
  var _dropdownMenuItem = _interopRequireDefault(require("../../../commons/dropdown-menu-item"));
19
21
  var _constants = require("../../../constants");
@@ -217,6 +219,11 @@ function AIModule(_ref) {
217
219
  if (value === searchValue) return;
218
220
  setSearchValue(value);
219
221
  }, [searchValue]);
222
+ const transferHtml = async mdString => {
223
+ const htmlString = await _mdToHtml.default.process(mdString);
224
+ const formatHtml = String(htmlString).trim();
225
+ setSearchResult(formatHtml);
226
+ };
220
227
  const onEnter = (0, _react.useCallback)(event => {
221
228
  if (!searchValue) return;
222
229
  setOpType(_constants2.OPERATION_TYPES.DEFAULT);
@@ -228,10 +235,10 @@ function AIModule(_ref) {
228
235
  return;
229
236
  }
230
237
  _context.default.writingAssistant(defaultContent, 'ask', custom_prompt).then(res => {
231
- const {
238
+ let {
232
239
  content
233
240
  } = res.data;
234
- setSearchResult(content);
241
+ transferHtml(content);
235
242
  setIsGenerating(false);
236
243
  setSearchValue('');
237
244
  setOldSearchValue(searchValue);
@@ -265,7 +272,7 @@ function AIModule(_ref) {
265
272
  const {
266
273
  content
267
274
  } = res.data;
268
- setSearchResult(content);
275
+ transferHtml(content);
269
276
  setIsGenerating(false);
270
277
  }).catch(err => {
271
278
  setIsGenerating(false);
@@ -284,7 +291,7 @@ function AIModule(_ref) {
284
291
  const {
285
292
  content
286
293
  } = res.data;
287
- setSearchResult(content);
294
+ transferHtml(content);
288
295
  setIsGenerating(false);
289
296
  }).catch(err => {
290
297
  setIsGenerating(false);
@@ -303,7 +310,7 @@ function AIModule(_ref) {
303
310
  const {
304
311
  content
305
312
  } = res.data;
306
- setSearchResult(content);
313
+ transferHtml(content);
307
314
  setIsGenerating(false);
308
315
  }).catch(err => {
309
316
  setIsGenerating(false);
@@ -322,7 +329,7 @@ function AIModule(_ref) {
322
329
  const {
323
330
  content
324
331
  } = res.data;
325
- setSearchResult(content);
332
+ transferHtml(content);
326
333
  setIsGenerating(false);
327
334
  }).catch(err => {
328
335
  setIsGenerating(false);
@@ -341,7 +348,7 @@ function AIModule(_ref) {
341
348
  const {
342
349
  content
343
350
  } = res.data;
344
- setSearchResult(content);
351
+ transferHtml(content);
345
352
  setIsGenerating(false);
346
353
  }).catch(err => {
347
354
  setIsGenerating(false);
@@ -362,7 +369,7 @@ function AIModule(_ref) {
362
369
  const {
363
370
  translation
364
371
  } = res.data;
365
- setSearchResult(translation);
372
+ transferHtml(translation);
366
373
  setIsGenerating(false);
367
374
  }).catch(err => {
368
375
  setIsGenerating(false);
@@ -392,19 +399,13 @@ function AIModule(_ref) {
392
399
  nextPath = _slate.Path.next(path);
393
400
  }
394
401
 
395
- // Prevent '\\n' from being pre-wrapped
396
- const tempResult = searchResult.replace(/\\n/g, '\v');
397
- const paragraphs = tempResult.split('\n').map(line => line.replace(/\v/g, '\\n')).filter(line => line.trim() !== '');
398
- const p = (0, _core.generateEmptyElement)(_constants.PARAGRAPH);
399
- paragraphs.forEach((line, index) => {
400
- p.children[0].text = line;
401
- _slate.Transforms.insertNodes(editor, p, {
402
- at: nextPath
403
- });
404
- if (index < paragraphs.length - 1) {
405
- nextPath = _slate.Path.next(nextPath);
406
- }
407
- });
402
+ // Transfer markdown search result to slate
403
+ // If codeMd,keep all; otherwise,delete \n and empty area
404
+ const optimizedSearchResult = searchResult.replace(/<pre[\s\S]*?<\/pre>|>\s+</g, match => {
405
+ return match.startsWith('<pre') ? match : '><';
406
+ }).trim();
407
+ const slateNodeList = (0, _mdToSlate.default)(optimizedSearchResult);
408
+ (0, _helpers.insertHtmlTransferredNodes)(slateNodeList, nextPath, editor);
408
409
  onCloseClick();
409
410
  focusToEndPath(nextPath);
410
411
  }, [editor, element, focusToEndPath, onCloseClick, searchResult]);
@@ -440,7 +441,19 @@ function AIModule(_ref) {
440
441
  if (!element) {
441
442
  editor.deleteFragment();
442
443
  if (searchResult) {
443
- editor.insertText(searchResult);
444
+ const optimizedSearchResult = searchResult.replace(/<pre[\s\S]*?<\/pre>|>\s+</g, match => {
445
+ return match.startsWith('<pre') ? match : '><';
446
+ }).trim();
447
+ const slateNodeList = (0, _mdToSlate.default)(optimizedSearchResult);
448
+ // Insert selection as text if result node is one paragraph nodes; otherwise, insert below
449
+ if (slateNodeList.length === 1 && slateNodeList[0].type === _constants.PARAGRAPH && slateNodeList[0].children.length <= 1) {
450
+ const text = slateNodeList[0].children[0].text;
451
+ editor.insertText(text);
452
+ } else {
453
+ const topBlockNode = (0, _core.getTopLevelBlockNode)(editor);
454
+ const nextPath = _slate.Path.next(topBlockNode[1]);
455
+ (0, _helpers.insertHtmlTransferredNodes)(slateNodeList, nextPath, editor);
456
+ }
444
457
  }
445
458
  onCloseClick();
446
459
  const end = _slate.Range.end(editor.selection);
@@ -542,9 +555,7 @@ function AIModule(_ref) {
542
555
  className: "sdoc-ai-result"
543
556
  }, /*#__PURE__*/_react.default.createElement("div", {
544
557
  className: "sdoc-ai-result-content"
545
- }, isGenerating ? t('Processing_message') : searchResult.split('\n').map((paragraph, index) => /*#__PURE__*/_react.default.createElement("p", {
546
- key: index
547
- }, paragraph)))), /*#__PURE__*/_react.default.createElement("div", {
558
+ }, isGenerating ? t('Processing_message') : (0, _helpers.markdownTableRenderer)(searchResult))), /*#__PURE__*/_react.default.createElement("div", {
548
559
  className: "sdoc-ai-search"
549
560
  }, /*#__PURE__*/_react.default.createElement(_aiIcon.default, null), /*#__PURE__*/_react.default.createElement("input", {
550
561
  placeholder: t('Ask_AI_anything'),
@@ -90,12 +90,6 @@
90
90
  overflow-y: auto;
91
91
  }
92
92
 
93
- .sdoc-ai-module-container .sdoc-ai-result .sdoc-ai-result-content p {
94
- line-height: 1.6;
95
- padding: 5px 0;
96
- margin-bottom: 0 !important;
97
- }
98
-
99
93
  .sdoc-ai-module-container .sdoc-ai-result .sdoc-ai-result-header {
100
94
  display: flex;
101
95
  justify-content: space-between;
@@ -134,3 +128,21 @@
134
128
  box-shadow: 0 0 10px #ccc;
135
129
  background-color: #fff;
136
130
  }
131
+
132
+ .md-rendered-html table {
133
+ border-collapse: collapse;
134
+ border: 1px solid #ccc;
135
+ }
136
+
137
+ .md-rendered-html th,
138
+ .md-rendered-html tr,
139
+ .md-rendered-html td {
140
+ padding: 6px;
141
+ border: 1px solid #ccc;
142
+ }
143
+
144
+ .md-rendered-html p {
145
+ padding-bottom: 5px;
146
+ line-height: 1.6;
147
+ margin-bottom: 0 !important;
148
+ }
@@ -8,8 +8,8 @@ Object.defineProperty(exports, "__esModule", {
8
8
  exports.default = void 0;
9
9
  var _react = _interopRequireWildcard(require("react"));
10
10
  var _classnames = _interopRequireDefault(require("classnames"));
11
- var _constants = require("../../basic-sdk/constants");
12
11
  var _provider = _interopRequireDefault(require("../comment/provider"));
12
+ var _constants = require("../constants");
13
13
  var _useScrollContext = require("../hooks/use-scroll-context");
14
14
  var _outline = _interopRequireDefault(require("../outline"));
15
15
  var _rightPanel = _interopRequireDefault(require("../right-panel"));
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.getTopLevelChanges = exports.getMergedChanges = exports.getIdDiffs = exports.getDiff = exports.generateIdMapAndIds = void 0;
8
8
  var _slugid = _interopRequireDefault(require("slugid"));
9
- var _constants = require("../../basic-sdk/extension/constants");
9
+ var _constants = require("../extension/constants");
10
10
  var _diffText = _interopRequireDefault(require("./diff-text"));
11
11
  var _documentUtils = require("./document-utils");
12
12
  var _objectUtils = _interopRequireDefault(require("./object-utils"));
@@ -6,9 +6,9 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.setOriginSdocKey = exports.normalizeCopyNodes = exports.normalizeChildren = exports.getSlateFragmentAttribute = exports.generateDefaultDocContent = void 0;
8
8
  var _deepCopy = _interopRequireDefault(require("deep-copy"));
9
- var _index = require("../../basic-sdk/extension/core/utils/index");
10
9
  var _context = _interopRequireDefault(require("../../context"));
11
10
  var _constants = require("../extension/constants");
11
+ var _index = require("../extension/core/utils/index");
12
12
  var _helpers = require("../extension/plugins/table/helpers");
13
13
  var _objectUtils = _interopRequireDefault(require("./object-utils"));
14
14
  const normalizeChildren = children => {
@@ -73,7 +73,7 @@ const codeBlockRule = (element, parseChild) => {
73
73
  }]
74
74
  };
75
75
  }
76
- const codes = content.slugid('\n').filter(Boolean);
76
+ const codes = content.split('\n').filter(Boolean);
77
77
  return codes.map(item => {
78
78
  return {
79
79
  id: _slugid.default.nice(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/sdoc-editor",
3
- "version": "2.0.72",
3
+ "version": "2.0.73",
4
4
  "private": false,
5
5
  "description": "This is a sdoc editor",
6
6
  "main": "dist/index.js",