@seafile/seafile-editor 0.3.76

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.
Files changed (156) hide show
  1. package/README.md +119 -0
  2. package/TODO.md +55 -0
  3. package/dist/components/add-formula-dialog.js +135 -0
  4. package/dist/components/add-image-dialog.js +78 -0
  5. package/dist/components/add-link-dialog.js +148 -0
  6. package/dist/components/comment-dialog.js +107 -0
  7. package/dist/components/comment-panel.js +452 -0
  8. package/dist/components/context-menu.js +112 -0
  9. package/dist/components/detail-list-view.js +119 -0
  10. package/dist/components/generate-share-link.js +412 -0
  11. package/dist/components/internal-link-dialog.js +96 -0
  12. package/dist/components/loading.js +32 -0
  13. package/dist/components/markdown-lint.js +87 -0
  14. package/dist/components/modal-portal.js +46 -0
  15. package/dist/components/outline.js +130 -0
  16. package/dist/components/participants-list.js +126 -0
  17. package/dist/components/related-files-list.js +75 -0
  18. package/dist/components/shortcut-dialog.js +167 -0
  19. package/dist/components/side-panel.js +175 -0
  20. package/dist/components/toast/alert.js +150 -0
  21. package/dist/components/toast/index.js +3 -0
  22. package/dist/components/toast/toast.js +179 -0
  23. package/dist/components/toast/toastManager.js +158 -0
  24. package/dist/components/toast/toaster.js +76 -0
  25. package/dist/components/toolbar.js +235 -0
  26. package/dist/components/topbar-component/button-group.js +31 -0
  27. package/dist/components/topbar-component/editor-toolbar.js +545 -0
  28. package/dist/components/topbar-component/file-info.js +65 -0
  29. package/dist/components/topbar-component/header-list.js +128 -0
  30. package/dist/components/topbar-component/icon-button.js +99 -0
  31. package/dist/components/topbar-component/insert-file.js +67 -0
  32. package/dist/components/topbar-component/table-toolbar.js +175 -0
  33. package/dist/components/topbar-component/upload-img.js +122 -0
  34. package/dist/components/user-help.js +205 -0
  35. package/dist/css/diff-viewer.css +105 -0
  36. package/dist/css/history-viewer.css +104 -0
  37. package/dist/css/keyboard-shortcuts.css +59 -0
  38. package/dist/css/layout.css +110 -0
  39. package/dist/css/markdown-viewer-slate/file-tags-list.css +76 -0
  40. package/dist/css/markdown-viewer.css +69 -0
  41. package/dist/css/plaineditor/markdown-editor.css +12 -0
  42. package/dist/css/react-mentions-default-style.js +72 -0
  43. package/dist/css/related-files-list.css +56 -0
  44. package/dist/css/richeditor/comments-list.css +184 -0
  45. package/dist/css/richeditor/detail-list-view.css +114 -0
  46. package/dist/css/richeditor/document-info.css +57 -0
  47. package/dist/css/richeditor/formula.css +19 -0
  48. package/dist/css/richeditor/image.css +141 -0
  49. package/dist/css/richeditor/link.css +7 -0
  50. package/dist/css/richeditor/navbar-imgbutton.css +79 -0
  51. package/dist/css/richeditor/participants-list.css +22 -0
  52. package/dist/css/richeditor/rich-editor-main.css +42 -0
  53. package/dist/css/richeditor/right-panel.css +84 -0
  54. package/dist/css/richeditor/side-panel.css +190 -0
  55. package/dist/css/richeditor/table.css +57 -0
  56. package/dist/css/richeditor/textlink-hovermenu.css +47 -0
  57. package/dist/css/richeditor/tree-view.css +67 -0
  58. package/dist/css/topbar.css +400 -0
  59. package/dist/editor/code-highlight-package.js +27 -0
  60. package/dist/editor/controller/block-element-controller.js +376 -0
  61. package/dist/editor/controller/inline-element-controller.js +129 -0
  62. package/dist/editor/controller/normalize-controller.js +107 -0
  63. package/dist/editor/controller/shortcut-controller.js +394 -0
  64. package/dist/editor/controller/void-element-controller.js +12 -0
  65. package/dist/editor/custom/custom.js +17 -0
  66. package/dist/editor/custom/get-event-transfer.js +34 -0
  67. package/dist/editor/custom/getNodesByTypeAtRange.js +69 -0
  68. package/dist/editor/custom/insertNodes.js +140 -0
  69. package/dist/editor/custom/is-empty-paragraph.js +13 -0
  70. package/dist/editor/custom/set-event-transfer.js +31 -0
  71. package/dist/editor/custom/split-nodes-at-point.js +162 -0
  72. package/dist/editor/custom/unwrap-node-by-type-at-range.js +81 -0
  73. package/dist/editor/editor-component/check-list-item.js +64 -0
  74. package/dist/editor/editor-component/code-block.js +150 -0
  75. package/dist/editor/editor-component/formula.js +79 -0
  76. package/dist/editor/editor-component/image.js +215 -0
  77. package/dist/editor/editor-component/link.js +11 -0
  78. package/dist/editor/editor-component/table.js +172 -0
  79. package/dist/editor/editor-component/textlink-hovermenu.js +136 -0
  80. package/dist/editor/editor-plugin.js +249 -0
  81. package/dist/editor/editor-utils/block-element-utils/blockquote-utils.js +96 -0
  82. package/dist/editor/editor-utils/block-element-utils/code-utils.js +162 -0
  83. package/dist/editor/editor-utils/block-element-utils/formula-utils.js +58 -0
  84. package/dist/editor/editor-utils/block-element-utils/index.js +38 -0
  85. package/dist/editor/editor-utils/block-element-utils/list-utils.js +398 -0
  86. package/dist/editor/editor-utils/block-element-utils/table-utils.js +418 -0
  87. package/dist/editor/editor-utils/common-editor-utils.js +587 -0
  88. package/dist/editor/editor-utils/inline-element-utils/index.js +95 -0
  89. package/dist/editor/editor-utils/mark-utils.js +25 -0
  90. package/dist/editor/editor-utils/range-utils.js +9 -0
  91. package/dist/editor/editor-utils/selection-utils.js +33 -0
  92. package/dist/editor/editor-utils/text-utils.js +130 -0
  93. package/dist/editor/editor.js +66 -0
  94. package/dist/editor/element-model/blockquote.js +16 -0
  95. package/dist/editor/element-model/image.js +19 -0
  96. package/dist/editor/element-model/link.js +19 -0
  97. package/dist/editor/element-model/table.js +50 -0
  98. package/dist/editor/element-model/text.js +13 -0
  99. package/dist/editor/load-script.js +83 -0
  100. package/dist/editor/plain-markdown-editor.js +324 -0
  101. package/dist/editor/rich-markdown-editor.js +580 -0
  102. package/dist/editor/seafile-editor.js +326 -0
  103. package/dist/editor/simple-editor.js +245 -0
  104. package/dist/editor-api.js +261 -0
  105. package/dist/index.css +97 -0
  106. package/dist/lib/slate-hyperscript/creators.js +263 -0
  107. package/dist/lib/slate-hyperscript/hyperscript.js +92 -0
  108. package/dist/lib/slate-hyperscript/index.js +3 -0
  109. package/dist/lib/slate-hyperscript/tokens.js +102 -0
  110. package/dist/lib/unified/index.js +470 -0
  111. package/dist/lib/vfile/core.js +172 -0
  112. package/dist/lib/vfile/index.js +48 -0
  113. package/dist/seafile-editor-chooser.js +45 -0
  114. package/dist/seafile-markdown-editor.js +301 -0
  115. package/dist/seafile-markdown-viewer.js +79 -0
  116. package/dist/seafile-simple-editor.js +56 -0
  117. package/dist/utils/copy-to-clipboard.js +47 -0
  118. package/dist/utils/deserialize-html.js +282 -0
  119. package/dist/utils/diff/compare-strings.js +46 -0
  120. package/dist/utils/diff/diff.js +855 -0
  121. package/dist/utils/diff/index.js +2 -0
  122. package/dist/utils/render-slate.js +219 -0
  123. package/dist/utils/seafile-markdown2html.js +62 -0
  124. package/dist/utils/slate2markdown/deserialize.js +689 -0
  125. package/dist/utils/slate2markdown/index.js +3 -0
  126. package/dist/utils/slate2markdown/serialize.js +407 -0
  127. package/dist/utils/utils.js +28 -0
  128. package/dist/viewer/diff-viewer.js +98 -0
  129. package/dist/viewer/markdown-viewer.js +139 -0
  130. package/dist/viewer/slate-viewer.js +73 -0
  131. package/dist/viewer/viewer-formula.js +67 -0
  132. package/dist/viewer/viewer-image.js +93 -0
  133. package/dist/viewer/viewer-outline.js +118 -0
  134. package/package.json +215 -0
  135. package/public/favicon.ico +0 -0
  136. package/public/index.html +45 -0
  137. package/public/locales/cs/seafile-editor.json +169 -0
  138. package/public/locales/de/seafile-editor.json +169 -0
  139. package/public/locales/en/seafile-editor.json +222 -0
  140. package/public/locales/es/seafile-editor.json +169 -0
  141. package/public/locales/es-AR/seafile-editor.json +169 -0
  142. package/public/locales/es-MX/seafile-editor.json +169 -0
  143. package/public/locales/fr/seafile-editor.json +169 -0
  144. package/public/locales/it/seafile-editor.json +169 -0
  145. package/public/locales/ru/seafile-editor.json +169 -0
  146. package/public/locales/zh-CN/seafile-editor.json +219 -0
  147. package/public/manifest.json +15 -0
  148. package/public/media/scripts/mathjax/tex-svg.js +1 -0
  149. package/public/media/seafile-editor-font/iconfont.eot +0 -0
  150. package/public/media/seafile-editor-font/iconfont.svg +164 -0
  151. package/public/media/seafile-editor-font/iconfont.ttf +0 -0
  152. package/public/media/seafile-editor-font/iconfont.woff +0 -0
  153. package/public/media/seafile-editor-font/iconfont.woff2 +0 -0
  154. package/public/media/seafile-editor-font.css +201 -0
  155. package/public/media/seafile-logo.png +0 -0
  156. package/public/media/seafile-ui.css +11169 -0
@@ -0,0 +1,407 @@
1
+ import _createForOfIteratorHelper from "@babel/runtime/helpers/esm/createForOfIteratorHelper";
2
+ import { Text, Node } from 'slate';
3
+ import { isEmptyParagraph } from '../utils';
4
+
5
+ var unified = require('../../lib/unified');
6
+
7
+ var stringify = require('remark-stringify');
8
+
9
+ var math = require('remark-math/block');
10
+
11
+ var processor = unified().use(stringify, {
12
+ rule: '-',
13
+ ruleSpaces: false,
14
+ listItemIndent: 1,
15
+ bullet: '*',
16
+ commonmark: true,
17
+ fences: true
18
+ }).use(math);
19
+
20
+ function _applyMark(node, markString) {
21
+ switch (markString) {
22
+ case 'BOLD':
23
+ return {
24
+ type: 'strong',
25
+ children: [node]
26
+ };
27
+
28
+ case 'ITALIC':
29
+ return {
30
+ type: 'emphasis',
31
+ children: [node]
32
+ };
33
+
34
+ case 'CODE':
35
+ return {
36
+ type: 'inlineCode',
37
+ value: node.value
38
+ };
39
+
40
+ default:
41
+ console.log('unknown mark string: ' + markString);
42
+ return node;
43
+ }
44
+ }
45
+
46
+ function _text2MdNodes(node) {
47
+ var mdNode = {};
48
+ var textKeys = Object.keys(node);
49
+ var marks = [];
50
+ textKeys.forEach(function (key) {
51
+ if (node[key] && key !== 'text') marks.push(key);
52
+ });
53
+
54
+ if (marks.length === 0) {
55
+ mdNode = {
56
+ type: 'text',
57
+ value: node.text
58
+ };
59
+ } else {
60
+ mdNode = {
61
+ type: 'text',
62
+ value: node.text
63
+ };
64
+
65
+ var _iterator = _createForOfIteratorHelper(marks),
66
+ _step;
67
+
68
+ try {
69
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
70
+ var mark = _step.value;
71
+ mdNode = _applyMark(mdNode, mark);
72
+ }
73
+ } catch (err) {
74
+ _iterator.e(err);
75
+ } finally {
76
+ _iterator.f();
77
+ }
78
+ }
79
+
80
+ return mdNode;
81
+ }
82
+
83
+ function _image2MdNode(node) {
84
+ if (node.data.height || node.data.width) {
85
+ var text = '<img ';
86
+
87
+ for (var key in node.data) {
88
+ text = text + key + '="' + node.data[key] + '" ';
89
+ }
90
+
91
+ text += '/>';
92
+ return [{
93
+ type: 'html',
94
+ value: text
95
+ }];
96
+ } else {
97
+ return {
98
+ type: 'image',
99
+ url: node.data.src,
100
+ alt: node.data.alt ? node.data.alt : null,
101
+ title: node.data.title ? node.data.title : null
102
+ };
103
+ }
104
+ }
105
+
106
+ function getTableAlignments(node) {
107
+ var alignments = [];
108
+ node.children[0].children.forEach(function (cell) {
109
+ var alignment = cell.data ? cell.data.align : 'left';
110
+ alignments.push(alignment);
111
+ });
112
+ return alignments;
113
+ }
114
+
115
+ function addChildNodeOrNodes(children, childNodeOrNodes) {
116
+ if (childNodeOrNodes instanceof Array) {
117
+ childNodeOrNodes.map(function (item) {
118
+ return children.push(item);
119
+ });
120
+ } else {
121
+ if (childNodeOrNodes !== undefined) children.push(childNodeOrNodes);
122
+ }
123
+ }
124
+
125
+ function parseChildren(node) {
126
+ var children = [];
127
+
128
+ var _iterator2 = _createForOfIteratorHelper(node.children),
129
+ _step2;
130
+
131
+ try {
132
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
133
+ var child = _step2.value;
134
+
135
+ var ret = _slateNodeToMD(child);
136
+
137
+ addChildNodeOrNodes(children, ret);
138
+ }
139
+ } catch (err) {
140
+ _iterator2.e(err);
141
+ } finally {
142
+ _iterator2.f();
143
+ }
144
+
145
+ return children;
146
+ }
147
+
148
+ function _slateNodeToMD(node) {
149
+ if (!Text.isText(node)) {
150
+ var mdNodes;
151
+
152
+ switch (node.type) {
153
+ case 'paragraph':
154
+ mdNodes = parseChildren(node);
155
+ return {
156
+ type: 'paragraph',
157
+ children: mdNodes
158
+ };
159
+
160
+ case 'header_one':
161
+ mdNodes = parseChildren(node);
162
+ return {
163
+ type: 'heading',
164
+ depth: 1,
165
+ children: mdNodes
166
+ };
167
+
168
+ case 'header_two':
169
+ mdNodes = parseChildren(node);
170
+ return {
171
+ type: 'heading',
172
+ depth: 2,
173
+ children: mdNodes
174
+ };
175
+
176
+ case 'header_three':
177
+ mdNodes = parseChildren(node);
178
+ return {
179
+ type: 'heading',
180
+ depth: 3,
181
+ children: mdNodes
182
+ };
183
+
184
+ case 'header_four':
185
+ mdNodes = parseChildren(node);
186
+ return {
187
+ type: 'heading',
188
+ depth: 4,
189
+ children: mdNodes
190
+ };
191
+
192
+ case 'header_five':
193
+ mdNodes = parseChildren(node);
194
+ return {
195
+ type: 'heading',
196
+ depth: 5,
197
+ children: mdNodes
198
+ };
199
+
200
+ case 'header_six':
201
+ mdNodes = parseChildren(node);
202
+ return {
203
+ type: 'heading',
204
+ depth: 6,
205
+ children: mdNodes
206
+ };
207
+
208
+ case 'hr':
209
+ return {
210
+ type: 'thematicBreak'
211
+ };
212
+
213
+ case 'ordered_list':
214
+ mdNodes = parseChildren(node);
215
+ var loose = false;
216
+
217
+ var _iterator3 = _createForOfIteratorHelper(mdNodes),
218
+ _step3;
219
+
220
+ try {
221
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
222
+ var _node = _step3.value;
223
+
224
+ if (_node.loose === true) {
225
+ loose = true;
226
+ break;
227
+ }
228
+ }
229
+ } catch (err) {
230
+ _iterator3.e(err);
231
+ } finally {
232
+ _iterator3.f();
233
+ }
234
+
235
+ return {
236
+ type: 'list',
237
+ ordered: true,
238
+ start: 1,
239
+ loose: loose,
240
+ children: mdNodes
241
+ };
242
+
243
+ case 'unordered_list':
244
+ mdNodes = parseChildren(node);
245
+ var loose = false;
246
+
247
+ var _iterator4 = _createForOfIteratorHelper(mdNodes),
248
+ _step4;
249
+
250
+ try {
251
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
252
+ var _node2 = _step4.value;
253
+
254
+ if (_node2.loose === true) {
255
+ loose = true;
256
+ break;
257
+ }
258
+ }
259
+ } catch (err) {
260
+ _iterator4.e(err);
261
+ } finally {
262
+ _iterator4.f();
263
+ }
264
+
265
+ return {
266
+ type: 'list',
267
+ ordered: false,
268
+ start: 1,
269
+ loose: loose,
270
+ children: mdNodes
271
+ };
272
+
273
+ case 'list_item':
274
+ mdNodes = parseChildren(node);
275
+ var loose = false;
276
+
277
+ if (mdNodes) {
278
+ if (mdNodes.length === 1) {
279
+ loose = false;
280
+ } else if (mdNodes.length === 2 && mdNodes[1].type === 'list') {
281
+ loose = false;
282
+ } else {
283
+ loose = true;
284
+ }
285
+ }
286
+
287
+ return {
288
+ type: 'listItem',
289
+ loose: loose,
290
+ checked: node.data.checked !== undefined ? node.data.checked : null,
291
+ children: mdNodes
292
+ };
293
+
294
+ case 'code_block':
295
+ mdNodes = parseChildren(node);
296
+ return {
297
+ type: 'code',
298
+ lang: node.data.syntax ? node.data.syntax : null,
299
+ value: mdNodes.join('')
300
+ };
301
+
302
+ case 'code_line':
303
+ return Node.text(node) + '\n';
304
+
305
+ case 'table':
306
+ mdNodes = parseChildren(node);
307
+ return {
308
+ type: 'table',
309
+ align: getTableAlignments(node),
310
+ children: mdNodes
311
+ };
312
+
313
+ case 'table_row':
314
+ mdNodes = parseChildren(node);
315
+ return {
316
+ type: 'tableRow',
317
+ children: mdNodes
318
+ };
319
+
320
+ case 'table_cell':
321
+ mdNodes = parseChildren(node);
322
+ return {
323
+ type: 'tableCell',
324
+ children: mdNodes
325
+ };
326
+
327
+ case 'blockquote':
328
+ mdNodes = parseChildren(node);
329
+ return {
330
+ type: 'blockquote',
331
+ children: mdNodes
332
+ };
333
+
334
+ case 'html_block':
335
+ return {
336
+ type: 'html',
337
+ value: node.data.html
338
+ };
339
+
340
+ case 'image':
341
+ return _image2MdNode(node);
342
+
343
+ case 'link':
344
+ mdNodes = parseChildren(node);
345
+ return {
346
+ type: 'link',
347
+ url: node.data.href,
348
+ title: node.data.title ? node.data.title : null,
349
+ children: mdNodes
350
+ };
351
+
352
+ case 'formula':
353
+ var data = node.data;
354
+ return {
355
+ type: 'math',
356
+ value: data.formula
357
+ };
358
+
359
+ default:
360
+ // turn the block to paragraph default when it`s type is unknown
361
+ mdNodes = parseChildren(node);
362
+ return {
363
+ type: 'paragraph',
364
+ children: mdNodes
365
+ };
366
+ }
367
+ } else if (Text.isText(node)) {
368
+ return _text2MdNodes(node);
369
+ }
370
+ }
371
+ /**
372
+ * @param value : a JSON object of editor value
373
+ * @returns markdownContent
374
+ */
375
+
376
+
377
+ function serialize(value) {
378
+ // Return an empty string when the article only has an empty paragraph
379
+ if (value.length === 1 && isEmptyParagraph(value[0])) {
380
+ return '';
381
+ }
382
+
383
+ var children = [];
384
+
385
+ var _iterator5 = _createForOfIteratorHelper(value),
386
+ _step5;
387
+
388
+ try {
389
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
390
+ var child = _step5.value;
391
+ addChildNodeOrNodes(children, _slateNodeToMD(child));
392
+ }
393
+ } catch (err) {
394
+ _iterator5.e(err);
395
+ } finally {
396
+ _iterator5.f();
397
+ }
398
+
399
+ var root = {
400
+ type: 'root',
401
+ children: children
402
+ };
403
+ var content = processor.stringify(root);
404
+ return content;
405
+ }
406
+
407
+ export { serialize };
@@ -0,0 +1,28 @@
1
+ import { Node, Text } from 'slate';
2
+ export var Utils = {
3
+ pathNormalize: function pathNormalize(originalPath) {
4
+ var oldPath = originalPath.split('/');
5
+ var newPath = [];
6
+
7
+ for (var i = 0; i < oldPath.length; i++) {
8
+ if (oldPath[i] === '.' || oldPath[i] === '') {
9
+ continue;
10
+ } else if (oldPath[i] === '..') {
11
+ newPath.pop();
12
+ } else {
13
+ newPath.push(oldPath[i]);
14
+ }
15
+ }
16
+
17
+ return newPath.join('/');
18
+ }
19
+ };
20
+ export var isEmptyParagraph = function isEmptyParagraph(node) {
21
+ if (node.type !== 'paragraph') return false;
22
+
23
+ if (node.children.length === 1 && Text.isText(node.children[0]) && Node.text(node).length === 0) {
24
+ return true;
25
+ }
26
+
27
+ return false;
28
+ };
@@ -0,0 +1,98 @@
1
+ import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
2
+ import _createClass from "@babel/runtime/helpers/esm/createClass";
3
+ import _inherits from "@babel/runtime/helpers/esm/inherits";
4
+ import _createSuper from "@babel/runtime/helpers/esm/createSuper";
5
+ import React from 'react';
6
+ import { SlateDiff } from '../utils/diff';
7
+ import { renderNode, renderLeaf } from '../utils/render-slate';
8
+ import SlateViewer from '../viewer/slate-viewer';
9
+ import LoadScript from '../editor/load-script';
10
+ import '../css/diff-viewer.css';
11
+
12
+ var DiffViewer = /*#__PURE__*/function (_React$PureComponent) {
13
+ _inherits(DiffViewer, _React$PureComponent);
14
+
15
+ var _super = _createSuper(DiffViewer);
16
+
17
+ function DiffViewer(_props) {
18
+ var _this;
19
+
20
+ _classCallCheck(this, DiffViewer);
21
+
22
+ _this = _super.call(this, _props);
23
+
24
+ _this.renderDiffNode = function (props) {
25
+ var element = props.element;
26
+ var data = element.data ? element.data : {};
27
+ var diffState = data['diff_state'];
28
+ var nodeDepth = data['node_depth'];
29
+
30
+ if (diffState === 'diff-added') {
31
+ if (nodeDepth > 1) {
32
+ if (element.type === 'blockquote' || element.type === 'code_block') {
33
+ return /*#__PURE__*/React.createElement("div", {
34
+ className: 'diff-added-container'
35
+ }, renderNode(props));
36
+ }
37
+
38
+ return renderNode(props);
39
+ } else {
40
+ return /*#__PURE__*/React.createElement("div", {
41
+ className: 'diff-added'
42
+ }, renderNode(props));
43
+ }
44
+ } else if (diffState === 'diff-removed') {
45
+ if (nodeDepth > 1) {
46
+ if (element.type === 'blockquote' || element.type === 'code_block') {
47
+ return /*#__PURE__*/React.createElement("div", {
48
+ className: 'diff-removed-container'
49
+ }, renderNode(props));
50
+ }
51
+
52
+ return renderNode(props);
53
+ } else {
54
+ return /*#__PURE__*/React.createElement("div", {
55
+ className: 'diff-removed'
56
+ }, renderNode(props));
57
+ }
58
+ } else if (diffState === 'diff-replaced') {
59
+ if (nodeDepth > 1) {
60
+ return renderNode(props);
61
+ } else {
62
+ return /*#__PURE__*/React.createElement("div", {
63
+ className: 'diff-replaced'
64
+ }, renderNode(props));
65
+ }
66
+ } else {
67
+ return renderNode(props);
68
+ }
69
+ };
70
+
71
+ _this.value = [];
72
+ _this.slateDiff = new SlateDiff();
73
+ return _this;
74
+ }
75
+
76
+ _createClass(DiffViewer, [{
77
+ key: "render",
78
+ value: function render() {
79
+ var newMarkdownContent = this.props.newMarkdownContent;
80
+ var oldMarkdownContent = this.props.oldMarkdownContent;
81
+ this.value = this.slateDiff.getDiffDocument(newMarkdownContent, oldMarkdownContent);
82
+ return /*#__PURE__*/React.createElement(LoadScript, {
83
+ scriptSource: this.props.scriptSource
84
+ }, /*#__PURE__*/React.createElement(SlateViewer, {
85
+ style: {
86
+ width: '100%'
87
+ },
88
+ renderDiffElement: this.renderDiffNode,
89
+ renderDiffLeaf: renderLeaf,
90
+ value: this.value
91
+ }));
92
+ }
93
+ }]);
94
+
95
+ return DiffViewer;
96
+ }(React.PureComponent);
97
+
98
+ export default DiffViewer;
@@ -0,0 +1,139 @@
1
+ import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
2
+ import _createClass from "@babel/runtime/helpers/esm/createClass";
3
+ import _inherits from "@babel/runtime/helpers/esm/inherits";
4
+ import _createSuper from "@babel/runtime/helpers/esm/createSuper";
5
+ import React, { Fragment } from 'react';
6
+ import { deserialize } from '../utils/slate2markdown';
7
+ import OutlineView from '../components/outline';
8
+ import SlateViewer from './slate-viewer';
9
+ import LoadScript from '../editor/load-script';
10
+ import '../css/markdown-viewer.css';
11
+
12
+ var URL = require('url-parse');
13
+
14
+ var MarkdownViewer = /*#__PURE__*/function (_React$Component) {
15
+ _inherits(MarkdownViewer, _React$Component);
16
+
17
+ var _super = _createSuper(MarkdownViewer);
18
+
19
+ function MarkdownViewer(props) {
20
+ var _this;
21
+
22
+ _classCallCheck(this, MarkdownViewer);
23
+
24
+ _this = _super.call(this, props);
25
+
26
+ _this.scrollToNode = function (node) {
27
+ var url = new URL(window.location.href);
28
+ url.set('hash', 'user-content-' + node.children[0].text);
29
+ window.location.href = url.toString();
30
+ };
31
+
32
+ _this.getTitlesInfo = function () {
33
+ var titlesInfo = [];
34
+ var headingList = document.querySelectorAll('h2[id^="user-content"], h3[id^="user-content"]');
35
+
36
+ for (var i = 0; i < headingList.length; i++) {
37
+ titlesInfo.push(headingList[i].offsetTop);
38
+ }
39
+
40
+ _this.titlesInfo = titlesInfo;
41
+ };
42
+
43
+ _this.deserializeValue = function (markdownContent) {
44
+ var nodes = deserialize(markdownContent);
45
+
46
+ if (_this.props.modifyValueBeforeRender) {
47
+ nodes = _this.props.modifyValueBeforeRender(nodes);
48
+ }
49
+
50
+ _this.setState({
51
+ value: nodes
52
+ });
53
+ };
54
+
55
+ _this.titlesInfo = [];
56
+ _this.state = {
57
+ value: null
58
+ };
59
+ return _this;
60
+ }
61
+
62
+ _createClass(MarkdownViewer, [{
63
+ key: "componentWillMount",
64
+ value: function componentWillMount() {
65
+ this.deserializeValue(this.props.markdownContent);
66
+ }
67
+ }, {
68
+ key: "componentDidMount",
69
+ value: function componentDidMount() {
70
+ if (this.props.showTOC) {
71
+ this.getTitlesInfo();
72
+ }
73
+
74
+ if (this.props.onContentRendered) {
75
+ this.props.onContentRendered(this);
76
+ }
77
+
78
+ window.markdownViewer = this;
79
+ }
80
+ }, {
81
+ key: "componentWillReceiveProps",
82
+ value: function componentWillReceiveProps(nextProps) {
83
+ if (this.props.markdownContent !== nextProps.markdownContent) {
84
+ this.deserializeValue(nextProps.markdownContent);
85
+ }
86
+ }
87
+ }, {
88
+ key: "componentWillUnmount",
89
+ value: function componentWillUnmount() {
90
+ window.markdownViewer = null;
91
+ }
92
+ }, {
93
+ key: "render",
94
+ value: function render() {
95
+ var value = this.state.value;
96
+ if (!value) return null;
97
+ var _this$props = this.props,
98
+ scriptSource = _this$props.scriptSource,
99
+ showTOC = _this$props.showTOC;
100
+
101
+ if (scriptSource) {
102
+ return /*#__PURE__*/React.createElement(LoadScript, {
103
+ scriptSource: this.props.scriptSource
104
+ }, /*#__PURE__*/React.createElement(SlateViewer, {
105
+ value: value
106
+ }), showTOC && /*#__PURE__*/React.createElement("div", {
107
+ className: "seafile-markdown-outline"
108
+ }, /*#__PURE__*/React.createElement(OutlineView, {
109
+ document: value,
110
+ isViewer: true,
111
+ editor: this,
112
+ activeTitleIndex: this.props.activeTitleIndex
113
+ })));
114
+ } else {
115
+ return /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement(SlateViewer, {
116
+ value: value
117
+ }), showTOC && /*#__PURE__*/React.createElement("div", {
118
+ className: "seafile-markdown-outline"
119
+ }, /*#__PURE__*/React.createElement(OutlineView, {
120
+ document: value,
121
+ isViewer: true,
122
+ editor: this,
123
+ activeTitleIndex: this.props.activeTitleIndex
124
+ })));
125
+ }
126
+ }
127
+ }]);
128
+
129
+ return MarkdownViewer;
130
+ }(React.Component);
131
+
132
+ var defaultProps = {
133
+ activeTitleIndex: 0,
134
+ markdownContent: '',
135
+ showTOC: true,
136
+ isShared: false
137
+ };
138
+ MarkdownViewer.defaultProps = defaultProps;
139
+ export default MarkdownViewer;