@seafile/sdoc-editor 2.0.66 → 2.0.67

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 (158) hide show
  1. package/dist/basic-sdk/comment/components/comment-delete-popover.js +1 -1
  2. package/dist/basic-sdk/comment/utils/index.js +8 -2
  3. package/dist/basic-sdk/extension/commons/insert-element-dialog/index.js +12 -17
  4. package/dist/basic-sdk/extension/constants/element-type.js +1 -5
  5. package/dist/basic-sdk/extension/constants/index.js +2 -32
  6. package/dist/basic-sdk/extension/constants/menus-config.js +2 -34
  7. package/dist/basic-sdk/extension/plugins/image/helpers.js +1 -1
  8. package/dist/basic-sdk/extension/plugins/index.js +1 -29
  9. package/dist/basic-sdk/extension/plugins/quick-insert/render-elem.js +1 -2
  10. package/dist/basic-sdk/extension/plugins/text-style/helpers.js +2 -1
  11. package/dist/basic-sdk/extension/plugins/text-style/menu/index.js +2 -1
  12. package/dist/basic-sdk/extension/render/custom-element.js +0 -20
  13. package/dist/basic-sdk/extension/toolbar/header-toolbar/insert-toolbar/index.js +8 -13
  14. package/dist/basic-sdk/extension/toolbar/side-toolbar/helpers.js +2 -19
  15. package/dist/basic-sdk/extension/toolbar/side-toolbar/index.js +1 -1
  16. package/dist/basic-sdk/extension/toolbar/side-toolbar/insert-block-menu.js +21 -37
  17. package/dist/index.js +3 -3
  18. package/dist/plugin-module/assets/css/default.css +25 -0
  19. package/dist/plugin-module/assets/css/dropdown-menu.css +138 -0
  20. package/dist/plugin-module/assets/css/layout.css +160 -0
  21. package/dist/plugin-module/assets/css/sdoc-comment-editor-plugin.css +19 -0
  22. package/dist/plugin-module/assets/css/sdoc-editor-article.css +29 -0
  23. package/dist/plugin-module/assets/css/sdoc-editor-plugins.css +320 -0
  24. package/dist/plugin-module/assets/css/sdoc-viewer.css +14 -0
  25. package/dist/plugin-module/assets/css/sdoc-wiki-viewer.css +28 -0
  26. package/dist/plugin-module/assets/images/black-border.png +0 -0
  27. package/dist/plugin-module/assets/images/grey-border.png +0 -0
  28. package/dist/plugin-module/assets/images/image-placeholder.png +0 -0
  29. package/dist/plugin-module/assets/images/no-border.png +0 -0
  30. package/dist/plugin-module/assets/images/sdoc-ask-ai.png +0 -0
  31. package/dist/plugin-module/assets/images/sdoc-freezed.png +0 -0
  32. package/dist/plugin-module/constants/index.js +40 -0
  33. package/dist/plugin-module/editor/editable-article.js +243 -0
  34. package/dist/plugin-module/editor/plugin-editor.js +213 -0
  35. package/dist/plugin-module/error-boundary/error-page.css +16 -0
  36. package/dist/plugin-module/error-boundary/error-page.js +37 -0
  37. package/dist/plugin-module/error-boundary/index.js +33 -0
  38. package/dist/plugin-module/gloable-ui/insert-element-dialog.js +249 -0
  39. package/dist/plugin-module/index.js +112 -0
  40. package/dist/plugin-module/layout/article-container.js +39 -0
  41. package/dist/plugin-module/layout/editor-container.js +32 -0
  42. package/dist/plugin-module/layout/editor-content.js +79 -0
  43. package/dist/plugin-module/layout/index.js +27 -0
  44. package/dist/{basic-sdk/extension → plugin-module}/plugins/chart/chart-edit-dialog/index.js +1 -1
  45. package/dist/{basic-sdk/extension → plugin-module}/plugins/chart/helpers.js +5 -4
  46. package/dist/{basic-sdk/extension → plugin-module}/plugins/chart/hover-menu/index.js +2 -2
  47. package/dist/{basic-sdk/extension → plugin-module}/plugins/chart/menu/index.js +1 -1
  48. package/dist/{basic-sdk/extension → plugin-module}/plugins/chart/render-elem.js +3 -3
  49. package/dist/plugin-module/plugins/index.js +34 -0
  50. package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-column/helpers.js +8 -7
  51. package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-column/index.js +2 -2
  52. package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-column/menu/column-list-menu.js +4 -4
  53. package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-column/menu/index.js +2 -2
  54. package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-column/model.js +1 -1
  55. package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-column/plugin.js +3 -3
  56. package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-column/render-elem.js +4 -4
  57. package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-row/dialog/add-seatable-row-dialog/resize-handle/index.css +4 -4
  58. package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-row/dialog/add-seatable-row-dialog/row-card-header-cell.js +2 -2
  59. package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-row/dialog/add-seatable-row-dialog/row-card-item.js +2 -2
  60. package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-row/helpers.js +5 -4
  61. package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-row/index.js +2 -2
  62. package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-row/menu/index.js +2 -2
  63. package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-row/menu/seatable-list.js +5 -6
  64. package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-row/plugin.js +6 -5
  65. package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/draggable/index.js +1 -1
  66. package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/formatter/collaborator-wrapper.js +3 -3
  67. package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/helpers.js +4 -3
  68. package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/menu/index.js +4 -3
  69. package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/menu/seatable-list.js +1 -1
  70. package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/model.js +2 -2
  71. package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/op-menu/index.js +3 -3
  72. package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/plugin.js +9 -8
  73. package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/render-element/seatable-table.js +3 -3
  74. package/dist/plugin-module/render/render-elements.js +58 -0
  75. package/dist/plugin-module/toolbar/header-toolbar/index.js +81 -0
  76. package/dist/plugin-module/toolbar/header-toolbar/insert-toolbar/index.css +28 -0
  77. package/dist/plugin-module/toolbar/header-toolbar/insert-toolbar/index.js +104 -0
  78. package/dist/plugin-module/views/plugin-viewer.js +55 -0
  79. package/dist/plugin-module/views/readonly-article.js +41 -0
  80. package/dist/slate-convert/html-to-slate/constants.js +1 -2
  81. package/dist/slate-convert/slate-to-md/transform.js +4 -0
  82. package/package.json +1 -1
  83. /package/dist/{basic-sdk/extension → plugin-module}/plugins/chart/chart-edit-dialog/index.css +0 -0
  84. /package/dist/{basic-sdk/extension → plugin-module}/plugins/chart/hover-menu/index.css +0 -0
  85. /package/dist/{basic-sdk/extension → plugin-module}/plugins/chart/index.js +0 -0
  86. /package/dist/{basic-sdk/extension → plugin-module}/plugins/chart/plugin.js +0 -0
  87. /package/dist/{basic-sdk/extension → plugin-module}/plugins/chart/render-elem.css +0 -0
  88. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-column/constants/cell-types.js +0 -0
  89. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-column/constants/column.js +0 -0
  90. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-column/menu/column-list-item.js +0 -0
  91. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-column/menu/column-list-menu.css +0 -0
  92. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-column/render-elem.css +0 -0
  93. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-row/dialog/add-seatable-row-dialog/index.css +0 -0
  94. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-row/dialog/add-seatable-row-dialog/index.js +0 -0
  95. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-row/dialog/add-seatable-row-dialog/record-content.js +0 -0
  96. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-row/dialog/add-seatable-row-dialog/resize-handle/ResizeHandle.js +0 -0
  97. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-row/dialog/add-seatable-row-dialog/row-card-header.js +0 -0
  98. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-row/dialog/add-seatable-row-dialog/seatable-table-record.js +0 -0
  99. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-row/menu/index.css +0 -0
  100. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-row/model.js +0 -0
  101. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-row/render-elem/index.css +0 -0
  102. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-row/render-elem/index.js +0 -0
  103. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-row/render-elem/record-header.js +0 -0
  104. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-row/render-elem/record-item.js +0 -0
  105. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/draggable/index.css +0 -0
  106. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/formatter/index.js +0 -0
  107. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/formatter/link-formatter/index.css +0 -0
  108. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/formatter/link-formatter/index.js +0 -0
  109. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/formatter/link-formatter/utils.js +0 -0
  110. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/index.js +0 -0
  111. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/menu/index.css +0 -0
  112. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/op-menu/index.css +0 -0
  113. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/render-element/index.css +0 -0
  114. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/render-element/index.js +0 -0
  115. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/render-element/record-header.js +0 -0
  116. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/render-element/record-item.js +0 -0
  117. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/render-element/record-list.js +0 -0
  118. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/common-add-tool/index.css +0 -0
  119. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/common-add-tool/index.js +0 -0
  120. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/custom-switch/index.css +0 -0
  121. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/custom-switch/index.js +0 -0
  122. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/dtable-search-input/index.js +0 -0
  123. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/calendar-filter/date-translate.js +0 -0
  124. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/calendar-filter/dayjs.js +0 -0
  125. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/calendar-filter/index.js +0 -0
  126. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/collaborator-filter/index.js +0 -0
  127. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/department-filter/_department-select.css +0 -0
  128. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/department-filter/_department-utils.js +0 -0
  129. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/department-filter/department-multiple-select-filter.js +0 -0
  130. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/department-filter/department-multiple-select.js +0 -0
  131. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/department-filter/department-single-select-filter.js +0 -0
  132. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/department-filter/department-single-select.js +0 -0
  133. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/department-filter/index.js +0 -0
  134. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/department-filter/selected-departments.js +0 -0
  135. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/department-filter/use-click-outside.js +0 -0
  136. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/filter-item-utils.js +0 -0
  137. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/filter-item.js +0 -0
  138. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/filters-list.css +0 -0
  139. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/filters-list.js +0 -0
  140. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/number-editor/index.js +0 -0
  141. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/rate-item/index.js +0 -0
  142. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover.css +0 -0
  143. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover.js +0 -0
  144. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/filter-setter/filters-utils.js +0 -0
  145. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/filter-setter/index.css +0 -0
  146. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/filter-setter/index.js +0 -0
  147. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/hide-column-setter/hide-column-item.js +0 -0
  148. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/hide-column-setter/hide-column-popover.js +0 -0
  149. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/hide-column-setter/index.css +0 -0
  150. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/hide-column-setter/index.js +0 -0
  151. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/index.css +0 -0
  152. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/index.js +0 -0
  153. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/sort-setter/index.css +0 -0
  154. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/sort-setter/index.js +0 -0
  155. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/sort-setter/sort-popover.js +0 -0
  156. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/sort-setter/sort-utils.js +0 -0
  157. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/table-setting/index.js +0 -0
  158. /package/dist/{basic-sdk/extension → plugin-module}/plugins/seatable-tables/seatable-settings/utils/utils.js +0 -0
@@ -0,0 +1,14 @@
1
+ .sdoc-editor-container .sdoc-editor-content.no-outline .sdoc-article-container {
2
+ margin-left: 0 !important;
3
+ }
4
+
5
+ .sdoc-editor-container.mobile .sdoc-editor-content.readonly .sdoc-article-container {
6
+ padding: 0;
7
+ width: 100% !important;
8
+ min-width: 100% !important;
9
+ }
10
+
11
+ .sdoc-editor-container.mobile .sdoc-editor-content.readonly .article {
12
+ width: 100vw !important;
13
+ padding: 1rem;
14
+ }
@@ -0,0 +1,28 @@
1
+ .sdoc-editor-container {
2
+ flex: 1;
3
+ display: flex;
4
+ min-height: 0;
5
+ }
6
+
7
+ .sdoc-wiki-scroll-container {
8
+ display: flex;
9
+ overflow: auto;
10
+ }
11
+
12
+ .sdoc-wiki-scroll-container .sdoc-article-container {
13
+ width: 100%;
14
+ }
15
+
16
+ .sdoc-wiki-scroll-container .sdoc-article-container .article .sdoc-header-2 {
17
+ border-bottom: 1px solid #ccc;
18
+ }
19
+
20
+ .sdoc-wiki-outline-container {
21
+ height: 80%;
22
+ overflow-y: auto;
23
+ padding-right: 1rem;
24
+ position: fixed;
25
+ right: 0;
26
+ top: 97px;
27
+ width: 300px;
28
+ }
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.SUPPORTED_SIDE_OPERATION_TYPE = exports.SEATABLE_TABLE = exports.SEATABLE_ROW = exports.SEATABLE_COLUMN = exports.MENUS_CONFIG_MAP = exports.CHART_PREVIEW_TYPE = exports.CHART = void 0;
7
+ // extension plugins
8
+ const CHART = exports.CHART = 'chart';
9
+ const SEATABLE_COLUMN = exports.SEATABLE_COLUMN = 'seatable_column';
10
+ const SEATABLE_ROW = exports.SEATABLE_ROW = 'seatable_row';
11
+ const SEATABLE_TABLE = exports.SEATABLE_TABLE = 'seatable_table';
12
+ const CHART_PREVIEW_TYPE = exports.CHART_PREVIEW_TYPE = {
13
+ VIEW: 'view',
14
+ EDITOR: 'editor',
15
+ FULL_SCREEN: 'fullScreen'
16
+ };
17
+ const SUPPORTED_SIDE_OPERATION_TYPE = exports.SUPPORTED_SIDE_OPERATION_TYPE = [SEATABLE_TABLE, SEATABLE_ROW];
18
+ const MENUS_CONFIG_MAP = exports.MENUS_CONFIG_MAP = {
19
+ [SEATABLE_ROW]: {
20
+ id: `sdoc_${SEATABLE_ROW}`,
21
+ iconClass: 'sdocfont sdoc-seatable-row',
22
+ text: 'SeaTable_row'
23
+ },
24
+ [SEATABLE_COLUMN]: {
25
+ id: `sdoc_${SEATABLE_COLUMN}`,
26
+ iconClass: 'sdocfont sdoc-choose-column',
27
+ text: 'SeaTable_column'
28
+ },
29
+ [SEATABLE_TABLE]: {
30
+ id: SEATABLE_TABLE,
31
+ iconClass: 'sdocfont sdoc-seatable-table',
32
+ type: SEATABLE_TABLE,
33
+ text: 'SeaTable_table'
34
+ },
35
+ [CHART]: {
36
+ id: `sdoc_${CHART}`,
37
+ iconClass: 'sdocfont sdoc-chart',
38
+ text: 'chart'
39
+ }
40
+ };
@@ -0,0 +1,243 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+ var _react = _interopRequireWildcard(require("react"));
10
+ var _slate = require("@seafile/slate");
11
+ var _slateReact = require("@seafile/slate-react");
12
+ var _scrollIntoViewIfNeeded = _interopRequireDefault(require("scroll-into-view-if-needed"));
13
+ var _comment = _interopRequireDefault(require("@/basic-sdk/comment"));
14
+ var _constants = require("@/basic-sdk/constants");
15
+ var _useCursors = require("@/basic-sdk/cursor/use-cursors");
16
+ var _decorates = require("@/basic-sdk/decorates");
17
+ var _extension = require("@/basic-sdk/extension");
18
+ var _constants2 = require("@/basic-sdk/extension/constants");
19
+ var _core = require("@/basic-sdk/extension/core");
20
+ var _helpers = require("@/basic-sdk/extension/plugins/table/helpers");
21
+ var _highlight = require("@/basic-sdk/highlight");
22
+ var _useForceUpdate = _interopRequireDefault(require("@/basic-sdk/hooks/use-force-update"));
23
+ var _useScrollContext = require("@/basic-sdk/hooks/use-scroll-context");
24
+ var _domUtils = require("@/basic-sdk/utils/dom-utils");
25
+ var _eventBus = _interopRequireDefault(require("@/basic-sdk/utils/event-bus"));
26
+ var _eventHandler = _interopRequireDefault(require("@/basic-sdk/utils/event-handler"));
27
+ var _layout = require("../layout");
28
+ var _renderElements = _interopRequireDefault(require("../render/render-elements"));
29
+ const EditableArticle = _ref => {
30
+ let {
31
+ showComment = true,
32
+ editor,
33
+ slateValue,
34
+ updateSlateValue
35
+ } = _ref;
36
+ const {
37
+ cursors
38
+ } = (0, _useCursors.useCursors)(editor);
39
+ const decorate = (0, _decorates.usePipDecorate)(editor);
40
+ const forceUpdate = (0, _useForceUpdate.default)();
41
+
42
+ // init eventHandler
43
+ // eslint-disable-next-line react-hooks/exhaustive-deps
44
+ const eventProxy = (0, _react.useMemo)(() => new _eventHandler.default(editor), []);
45
+ const onMouseDown = (0, _react.useCallback)(event => {
46
+ if (event.button === 0) {
47
+ const isPreventReset = (0, _helpers.isPreventResetTableSelectedRange)(event);
48
+ if (!isPreventReset) {
49
+ editor.reSetTableSelectedRange();
50
+ const eventBus = _eventBus.default.getInstance();
51
+ eventBus.dispatch(_constants.INTERNAL_EVENT.CANCEL_TABLE_SELECT_RANGE);
52
+ }
53
+ }
54
+ // eslint-disable-next-line react-hooks/exhaustive-deps
55
+ }, []);
56
+ const scrollRef = (0, _useScrollContext.useScrollContext)();
57
+ const onReloadComment = () => {
58
+ forceUpdate();
59
+ };
60
+ (0, _react.useEffect)(() => {
61
+ const eventBus = _eventBus.default.getInstance();
62
+ const unsubscribeReloadComment = eventBus.subscribe(_constants.INTERNAL_EVENT.RELOAD_COMMENT, onReloadComment);
63
+ return () => {
64
+ unsubscribeReloadComment();
65
+ };
66
+ // eslint-disable-next-line react-hooks/exhaustive-deps
67
+ }, []);
68
+ const onKeyDown = (0, _react.useCallback)(event => {
69
+ const {
70
+ scrollTop,
71
+ clientHeight
72
+ } = scrollRef.current;
73
+ eventProxy.onKeyDown(event);
74
+ if (event.key === 'ArrowLeft') {
75
+ if (!(0, _core.isSelectionAtBlockStart)(editor)) return;
76
+ }
77
+ if (event.key === 'ArrowUp' || event.key === 'ArrowLeft') {
78
+ if (scrollTop === 0) return;
79
+ let prevNode = (0, _core.getPrevNode)(editor);
80
+ if (!prevNode) return;
81
+ const domNode = _slateReact.ReactEditor.toDOMNode(editor, prevNode[0]);
82
+ const domHeight = (0, _domUtils.getDomHeight)(domNode);
83
+ const isScrollUp = true;
84
+ const {
85
+ y
86
+ } = (0, _domUtils.getCursorPosition)(isScrollUp);
87
+ if (y >= domHeight) return;
88
+ scrollRef.current.scroll(0, Math.max(0, scrollTop - domHeight));
89
+ return;
90
+ }
91
+ if (event.key === 'ArrowRight') {
92
+ if (!(0, _core.isSelectionAtBlockEnd)(editor)) return;
93
+ }
94
+ if (event.key === 'ArrowDown' || event.key === 'ArrowRight') {
95
+ let nextNode = (0, _core.getNextNode)(editor);
96
+ if (!nextNode) return;
97
+ const domNode = _slateReact.ReactEditor.toDOMNode(editor, nextNode[0]);
98
+ const domHeight = (0, _domUtils.getDomHeight)(domNode);
99
+ const isScrollUp = false;
100
+ const {
101
+ y
102
+ } = (0, _domUtils.getCursorPosition)(isScrollUp);
103
+ if (clientHeight - y >= domHeight) return;
104
+ scrollRef.current.scroll(0, Math.max(0, scrollTop + domHeight));
105
+ return;
106
+ }
107
+ if (event.key === 'Backspace') {
108
+ const [currentNode] = (0, _core.getCurrentNode)(editor);
109
+ let prevNode = null;
110
+ let prevPath = null;
111
+ if ((0, _core.getPrevNode)(editor)) {
112
+ [prevNode, prevPath] = (0, _core.getPrevNode)(editor);
113
+ }
114
+ // If the cursor is collapsed at the beginning, and the current line is not empty, is not a CODE_LINE, and the previous line is a CODE_LINE.
115
+ const isCursorCollapsed = _slate.Range.isCollapsed(editor.selection);
116
+ if (isCursorCollapsed && prevNode && (0, _core.isSelectionAtBlockStart)(editor) && !(0, _core.isCurrentLineEmpty)(editor) && prevNode.type === _constants2.CODE_LINE && currentNode.type !== _constants2.CODE_LINE) {
117
+ if (!(0, _core.isCurrentLineHasText)(currentNode)) {
118
+ const prevNodeText = _slate.Node.string(prevNode);
119
+ _slate.Transforms.removeNodes(editor, {
120
+ at: prevPath
121
+ });
122
+ _slate.Transforms.insertText(editor, prevNodeText);
123
+ event.preventDefault();
124
+ } else {
125
+ const path = prevPath;
126
+ path[path.length] = 0;
127
+ const end = prevNode.children[0].text.length;
128
+ const range = {
129
+ anchor: {
130
+ path,
131
+ offset: end
132
+ },
133
+ focus: {
134
+ path,
135
+ offset: end
136
+ }
137
+ };
138
+ _slate.Transforms.select(editor, range);
139
+ event.preventDefault();
140
+ }
141
+ }
142
+ const {
143
+ y
144
+ } = (0, _domUtils.getCursorPosition)();
145
+
146
+ // above viewport
147
+ if (y < 0) {
148
+ const newY = Math.abs(y);
149
+ if ((0, _core.isSelectionAtBlockStart)(editor)) {
150
+ const prevNode = (0, _core.getPrevNode)(editor);
151
+ if (!prevNode) return;
152
+ const domNode = _slateReact.ReactEditor.toDOMNode(editor, prevNode[0]);
153
+ const domHeight = (0, _domUtils.getDomHeight)(domNode);
154
+ const node = (0, _core.getAboveBlockNode)(editor);
155
+ if (!node) return;
156
+ const currentDomNode = _slateReact.ReactEditor.toDOMNode(editor, node[0]);
157
+ const marginTop = (0, _domUtils.getDomMarginTop)(currentDomNode);
158
+ scrollRef.current.scroll(0, Math.max(0, scrollTop - (newY + domHeight + marginTop)));
159
+ } else {
160
+ scrollRef.current.scroll(0, Math.max(0, scrollTop - newY));
161
+ }
162
+ return;
163
+ }
164
+
165
+ // insider viewport
166
+ if (y >= 0 && y <= clientHeight) {
167
+ if ((0, _core.isSelectionAtBlockStart)(editor)) {
168
+ const prevNode = (0, _core.getPrevNode)(editor);
169
+ if (!prevNode) return;
170
+ const domNode = _slateReact.ReactEditor.toDOMNode(editor, prevNode[0]);
171
+ const domHeight = (0, _domUtils.getDomHeight)(domNode);
172
+ if (y >= domHeight) return;
173
+ // Scroll up the height of the previous block
174
+ scrollRef.current.scroll(0, Math.max(0, scrollTop - domHeight));
175
+ return;
176
+ }
177
+ }
178
+
179
+ // below viewport
180
+ if (y > clientHeight) {
181
+ if ((0, _core.isSelectionAtBlockStart)(editor)) {
182
+ // y: text top border
183
+ scrollRef.current.scroll(0, Math.max(0, scrollTop + (y - clientHeight)));
184
+ } else {
185
+ const marginBottom = 11.2;
186
+ const {
187
+ y: newY
188
+ } = (0, _domUtils.getCursorPosition)(false);
189
+ const rectBottom = newY + marginBottom; // text bottom border
190
+ scrollRef.current.scroll(0, Math.max(0, scrollTop + (rectBottom - clientHeight)));
191
+ }
192
+ return;
193
+ }
194
+ }
195
+
196
+ // eslint-disable-next-line react-hooks/exhaustive-deps
197
+ }, [scrollRef]);
198
+ const handleScrollIntoView = (0, _react.useCallback)((editor, domRange) => {
199
+ try {
200
+ const {
201
+ selection
202
+ } = editor;
203
+ // Do not scroll into view, when focus on image
204
+ const [imageNodeEntry] = _slate.Editor.nodes(editor, {
205
+ match: n => [_constants2.IMAGE, _constants2.IMAGE_BLOCK].includes(n.type),
206
+ at: selection
207
+ });
208
+ if (imageNodeEntry) return;
209
+ const focusedNode = _slate.Node.get(editor, selection.focus.path);
210
+ const domNode = _slateReact.ReactEditor.toDOMNode(editor, focusedNode);
211
+ if (!domNode) return;
212
+ (0, _scrollIntoViewIfNeeded.default)(domNode, {
213
+ 'scrollMode': 'if-needed'
214
+ });
215
+ } catch (error) {
216
+ //
217
+ }
218
+ }, []);
219
+ return /*#__PURE__*/_react.default.createElement(_slateReact.Slate, {
220
+ editor: editor,
221
+ value: slateValue,
222
+ onChange: updateSlateValue
223
+ }, /*#__PURE__*/_react.default.createElement(_layout.ArticleContainer, {
224
+ editor: editor
225
+ }, /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(_extension.ContextToolbar, null), /*#__PURE__*/_react.default.createElement(_highlight.SetNodeToDecorations, null), /*#__PURE__*/_react.default.createElement(_slateReact.Editable, {
226
+ scrollSelectionIntoView: handleScrollIntoView,
227
+ cursors: cursors,
228
+ renderElement: _renderElements.default,
229
+ renderLeaf: _extension.renderLeaf,
230
+ onKeyDown: onKeyDown,
231
+ onMouseDown: onMouseDown,
232
+ decorate: decorate,
233
+ onCut: eventProxy.onCut,
234
+ onCopy: eventProxy.onCopy,
235
+ onCompositionStart: eventProxy.onCompositionStart,
236
+ id: "sdoc-editor",
237
+ "aria-label": "textbox"
238
+ })), /*#__PURE__*/_react.default.createElement(_extension.SideToolbar, null), showComment && /*#__PURE__*/_react.default.createElement(_comment.default, {
239
+ editor: editor,
240
+ type: "editor"
241
+ })));
242
+ };
243
+ var _default = exports.default = EditableArticle;
@@ -0,0 +1,213 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+ var _react = _interopRequireWildcard(require("react"));
10
+ var _slate = require("@seafile/slate");
11
+ var _deepCopy = _interopRequireDefault(require("deep-copy"));
12
+ var _isHotkey = _interopRequireDefault(require("is-hotkey"));
13
+ var _basicSdk = require("@/basic-sdk");
14
+ var _constants = require("@/basic-sdk/constants");
15
+ var _extension = require("@/basic-sdk/extension");
16
+ var _core = require("@/basic-sdk/extension/core");
17
+ var _helpers = require("@/basic-sdk/extension/plugins/ai/ai-module/helpers");
18
+ var _useColorContext = require("@/basic-sdk/hooks/use-color-context");
19
+ var _nodeId = _interopRequireDefault(require("@/basic-sdk/node-id"));
20
+ var _socket = require("@/basic-sdk/socket");
21
+ var _commonLoading = _interopRequireDefault(require("@/components/common-loading"));
22
+ var _context = _interopRequireDefault(require("@/context"));
23
+ var _constants2 = require("../../constants");
24
+ var _insertElementDialog = _interopRequireDefault(require("../gloable-ui/insert-element-dialog"));
25
+ var _layout = require("../layout");
26
+ var _headerToolbar = _interopRequireDefault(require("../toolbar/header-toolbar"));
27
+ var _editableArticle = _interopRequireDefault(require("./editable-article"));
28
+ const PluginEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
29
+ let {
30
+ editor: propsEditor,
31
+ document,
32
+ isReloading,
33
+ showComment,
34
+ isShowHeaderToolbar = true,
35
+ showOutline = true
36
+ } = _ref;
37
+ // eslint-disable-next-line no-unused-vars
38
+ const [showFullScreen, setShowFullScreen] = (0, _react.useState)(false);
39
+ const validEditor = (0, _react.useMemo)(() => {
40
+ if (propsEditor) return propsEditor;
41
+ const defaultEditor = (0, _extension.createDefaultEditor)();
42
+ const editorConfig = _context.default.getEditorConfig();
43
+ const newEditor = (0, _nodeId.default)((0, _socket.withSocketIO)(defaultEditor, {
44
+ document,
45
+ config: editorConfig
46
+ }));
47
+ const {
48
+ cursors
49
+ } = document;
50
+ newEditor.cursors = cursors || {};
51
+ newEditor.width = _constants.PAGE_EDIT_AREA_WIDTH; // default width
52
+ return newEditor;
53
+
54
+ // eslint-disable-next-line react-hooks/exhaustive-deps
55
+ }, []);
56
+ const [slateValue, setSlateValue] = (0, _react.useState)(document.elements);
57
+
58
+ // Fix: The editor's children are not updated when the document is updated in revision
59
+ // In revision mode, the document is updated, but the editor's children are not updated,as onValueChange override the new document.elements. This unexpected action cause the editor to display the old content
60
+ (0, _react.useEffect)(() => {
61
+ setSlateValue(document.elements);
62
+ }, [document.elements]);
63
+ (0, _react.useEffect)(() => {
64
+ validEditor.readonly = false;
65
+ return () => {
66
+ validEditor.selection = null;
67
+ };
68
+
69
+ // eslint-disable-next-line react-hooks/exhaustive-deps
70
+ }, []);
71
+ // useMount: init socket connection
72
+ (0, _react.useEffect)(() => {
73
+ if (propsEditor) return;
74
+ validEditor.openConnection();
75
+ return () => {
76
+ validEditor.closeConnection();
77
+ };
78
+ // eslint-disable-next-line react-hooks/exhaustive-deps
79
+ }, []);
80
+
81
+ // useMount: focus editor
82
+ (0, _react.useEffect)(() => {
83
+ const timer = setTimeout(() => {
84
+ const [firstNode] = validEditor.children;
85
+ if (firstNode) {
86
+ const [firstNodeFirstChild] = firstNode.children;
87
+ if (firstNodeFirstChild) {
88
+ const endOfFirstNode = _slate.Editor.end(validEditor, [0, 0]);
89
+ const range = {
90
+ anchor: endOfFirstNode,
91
+ focus: endOfFirstNode
92
+ };
93
+ (0, _core.focusEditor)(validEditor, range);
94
+ }
95
+ }
96
+ }, 300);
97
+ return () => {
98
+ clearTimeout(timer);
99
+ };
100
+ // eslint-disable-next-line react-hooks/exhaustive-deps
101
+ }, []);
102
+ const onRefreshDocument = (0, _react.useCallback)(() => {
103
+ window.location.reload();
104
+ }, []);
105
+
106
+ // useMount: refresh document
107
+ (0, _react.useEffect)(() => {
108
+ const eventBus = _basicSdk.EventBus.getInstance();
109
+ eventBus.subscribe(_constants2.EXTERNAL_EVENT.REFRESH_DOCUMENT, onRefreshDocument);
110
+
111
+ // Remove aiMarks on special conditions like unexpected exit or refresh page using AI
112
+ const hasAIMark = !_slate.Editor.nodes(validEditor, {
113
+ at: [],
114
+ match: n => _slate.Text.isText(n) && n.sdoc_ai === true
115
+ }).next().done;
116
+ if (hasAIMark) {
117
+ (0, _helpers.removeMarks)(validEditor);
118
+ }
119
+ // eslint-disable-next-line react-hooks/exhaustive-deps
120
+ }, [onRefreshDocument]);
121
+
122
+ // Handle presentation fullscreen mode
123
+ const handleFullScreenPresentation = (0, _react.useCallback)(_ref2 => {
124
+ let {
125
+ isShowFullScreen
126
+ } = _ref2;
127
+ if (isShowFullScreen) {
128
+ setShowFullScreen(true);
129
+ }
130
+ }, []);
131
+ (0, _react.useEffect)(() => {
132
+ const eventBus = _basicSdk.EventBus.getInstance();
133
+ const unsubscribePresentationFullScreen = eventBus.subscribe(_constants2.EXTERNAL_EVENT.TOGGLE_PRESENTATION_MODE, handleFullScreenPresentation);
134
+ return () => {
135
+ unsubscribePresentationFullScreen();
136
+ };
137
+ }, [handleFullScreenPresentation]);
138
+ (0, _react.useEffect)(() => {
139
+ const handleExit = e => {
140
+ if ((0, _isHotkey.default)('esc', e)) {
141
+ e.preventDefault();
142
+ if (window.document.fullscreenElement) {
143
+ window.document.exitFullscreen();
144
+ }
145
+ }
146
+ };
147
+ const onFullscreenChange = () => {
148
+ if (!window.document.fullscreenElement) {
149
+ setShowFullScreen(false);
150
+ }
151
+ };
152
+ window.addEventListener('keydown', handleExit);
153
+ window.document.addEventListener('fullscreenchange', onFullscreenChange);
154
+ return () => {
155
+ window.removeEventListener('keydown', handleExit);
156
+ window.document.removeEventListener('fullscreenchange', onFullscreenChange);
157
+ };
158
+ // eslint-disable-next-line react-hooks/exhaustive-deps
159
+ }, []);
160
+
161
+ // The parent component can call the method of this component through ref
162
+ (0, _react.useImperativeHandle)(ref, () => ({
163
+ setSlateValue: document => {
164
+ // Force update of editor's child elements
165
+ validEditor.children = document.elements;
166
+ setSlateValue([...document.elements]);
167
+ },
168
+ updateDocumentVersion: document => {
169
+ validEditor.updateDocumentVersion(document);
170
+ },
171
+ // get value
172
+ getSlateValue: () => {
173
+ return (0, _deepCopy.default)({
174
+ ...document,
175
+ elements: slateValue
176
+ });
177
+ }
178
+
179
+ // eslint-disable-next-line react-hooks/exhaustive-deps
180
+ }), [document, validEditor, slateValue]);
181
+ const onValueChange = value => {
182
+ const eventBus = _basicSdk.EventBus.getInstance();
183
+ setSlateValue(value);
184
+ // After the content is updated, update the search content
185
+ setTimeout(() => {
186
+ eventBus.dispatch(_constants.INTERNAL_EVENT.UPDATE_SEARCH_REPLACE_HIGHLIGHT, value);
187
+ }, 0);
188
+ };
189
+ if (isReloading) {
190
+ return /*#__PURE__*/_react.default.createElement("div", {
191
+ className: "h-100 w-100 d-flex align-items-center justify-content-center"
192
+ }, /*#__PURE__*/_react.default.createElement(_commonLoading.default, null));
193
+ }
194
+ const isShowComment = typeof showComment === 'boolean' ? showComment : true;
195
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_layout.EditorContainer, {
196
+ editor: validEditor
197
+ }, /*#__PURE__*/_react.default.createElement(_useColorContext.ColorProvider, null, isShowHeaderToolbar && /*#__PURE__*/_react.default.createElement(_headerToolbar.default, {
198
+ editor: validEditor
199
+ }), /*#__PURE__*/_react.default.createElement(_layout.EditorContent, {
200
+ docValue: slateValue,
201
+ showOutline: showOutline !== null && showOutline !== void 0 ? showOutline : true,
202
+ editor: validEditor,
203
+ showComment: isShowComment
204
+ }, /*#__PURE__*/_react.default.createElement(_editableArticle.default, {
205
+ editor: validEditor,
206
+ slateValue: slateValue,
207
+ updateSlateValue: onValueChange,
208
+ showComment: isShowComment
209
+ })))), /*#__PURE__*/_react.default.createElement(_insertElementDialog.default, {
210
+ editor: validEditor
211
+ }));
212
+ });
213
+ var _default = exports.default = PluginEditor;
@@ -0,0 +1,16 @@
1
+ .error-page {
2
+ flex: 1;
3
+ display: flex;
4
+ flex-direction: column;
5
+ justify-content: center;
6
+ align-items: center;
7
+ overflow: hidden;
8
+ }
9
+
10
+ .error-page .error-tip {
11
+ color: red;
12
+ }
13
+
14
+ .error-page .error-button {
15
+ margin-top: 20px;
16
+ }
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+ var _react = _interopRequireWildcard(require("react"));
10
+ var _reactI18next = require("react-i18next");
11
+ var _reactstrap = require("reactstrap");
12
+ var _context = _interopRequireDefault(require("@/context"));
13
+ require("./error-page.css");
14
+ function ErrorPage(_ref) {
15
+ let {
16
+ t
17
+ } = _ref;
18
+ const normalizeSdoc = (0, _react.useCallback)(async () => {
19
+ const res = await _context.default.normalizeSdocContent();
20
+ const {
21
+ success
22
+ } = res.data;
23
+ if (success) {
24
+ // eslint-disable-next-line no-restricted-globals
25
+ location.reload(true);
26
+ }
27
+ }, []);
28
+ return /*#__PURE__*/_react.default.createElement("div", {
29
+ className: "error-page"
30
+ }, /*#__PURE__*/_react.default.createElement("span", {
31
+ className: "error-tip"
32
+ }, t('Sdoc_error_tip')), /*#__PURE__*/_react.default.createElement(_reactstrap.Button, {
33
+ className: "error-button",
34
+ onClick: () => normalizeSdoc()
35
+ }, t('Repair')));
36
+ }
37
+ var _default = exports.default = (0, _reactI18next.withTranslation)('sdoc-editor')(ErrorPage);
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+ var _react = _interopRequireWildcard(require("react"));
10
+ var _errorPage = _interopRequireDefault(require("./error-page"));
11
+ class ErrorBoundary extends _react.PureComponent {
12
+ constructor(props) {
13
+ super(props);
14
+ this.state = {
15
+ hasError: false
16
+ };
17
+ }
18
+ static getDerivedStateFromError(error) {
19
+ return {
20
+ hasError: true
21
+ };
22
+ }
23
+ componentDidCatch(error, errorInfo) {
24
+ console.log(error, errorInfo);
25
+ }
26
+ render() {
27
+ if (this.state.hasError) {
28
+ return /*#__PURE__*/_react.default.createElement(_errorPage.default, null);
29
+ }
30
+ return this.props.children;
31
+ }
32
+ }
33
+ exports.default = ErrorBoundary;