@seafile/sdoc-editor 3.0.211 → 3.0.213

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.
@@ -19,7 +19,9 @@ var updateOutlineValue = exports.updateOutlineValue = function updateOutlineValu
19
19
  };
20
20
  var scrollToOutline = exports.scrollToOutline = function scrollToOutline(item) {
21
21
  var id = item.id;
22
- document.getElementById(id).scrollIntoView();
22
+ var target = document.getElementById(id);
23
+ if (!target) return false;
24
+ target.scrollIntoView();
23
25
  return true;
24
26
  };
25
27
  var registerOutlineEventHandler = exports.registerOutlineEventHandler = function registerOutlineEventHandler() {
@@ -16,7 +16,5 @@
16
16
  left: 0;
17
17
  width: 100%;
18
18
  border-top: 2px solid rgb(165, 32, 21);
19
- transform: rotate(-8deg);
20
- transform-origin: center;
21
19
  pointer-events: none;
22
20
  }
@@ -178,7 +178,8 @@ var WikiEditor = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
178
178
  slateValue: slateValue,
179
179
  showComment: false
180
180
  })), !_commonUtils.isMobile && isWikiReadOnly && /*#__PURE__*/_react["default"].createElement(_wikiOutline["default"], {
181
- doc: slateValue
181
+ doc: slateValue,
182
+ editor: validEditor
182
183
  })))));
183
184
  }
184
185
  return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_layout.EditorContainer, {
@@ -199,7 +200,8 @@ var WikiEditor = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
199
200
  updateSlateValue: onValueChange,
200
201
  showComment: showComment
201
202
  })), /*#__PURE__*/_react["default"].createElement(_wikiOutline["default"], {
202
- doc: slateValue
203
+ doc: slateValue,
204
+ editor: validEditor
203
205
  }), /*#__PURE__*/_react["default"].createElement(_menu["default"], {
204
206
  editor: validEditor,
205
207
  className: "wiki-search-and-replace",
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.toggleHeaderCollapsed = exports.setHeaderType = exports.setHeaderCollapsed = exports.isSelectionInHeader = exports.isMenuDisabled = exports.isHeaderCollapsed = exports.isHasImage = exports.isElementHiddenByCollapsedHeader = exports.getSkippedHiddenHeaderMovePoint = exports.getHeaderType = exports.getHeaderLevel = exports.getCollapsedHeaderSectionEndIndex = exports.getCollapsedHeaderInsertPath = exports.clearHeaderCollapsedState = void 0;
7
+ exports.toggleHeaderCollapsed = exports.setHeaderType = exports.setHeaderCollapsed = exports.isSelectionInHeader = exports.isMenuDisabled = exports.isHeaderCollapsed = exports.isHasImage = exports.isElementHiddenByCollapsedHeader = exports.getSkippedHiddenHeaderMovePoint = exports.getHeaderType = exports.getHeaderLevel = exports.getCollapsedHeaderSectionEndIndex = exports.getCollapsedHeaderInsertPath = exports.expandCollapsedHeaderAncestors = exports.clearHeaderCollapsedState = void 0;
8
8
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
9
9
  var _slate = require("@seafile/slate");
10
10
  var _context = _interopRequireDefault(require("../../../context"));
@@ -155,6 +155,25 @@ var getSectionEndIndex = function getSectionEndIndex(siblings, startIndex, level
155
155
  }
156
156
  return endIndex;
157
157
  };
158
+ var getCollapsedHeaderAncestorEntries = function getCollapsedHeaderAncestorEntries(editor, element, defaultPath) {
159
+ var path = (0, _core.findPath)(editor, element, defaultPath);
160
+ if (!path || path.length !== 1) return [];
161
+ var currentIndex = path[path.length - 1];
162
+ var parentPath = _slate.Path.parent(path);
163
+ var siblings = parentPath.length === 0 ? editor.children : _slate.Node.get(editor, parentPath).children;
164
+ var ancestorEntries = [];
165
+ for (var index = currentIndex - 1; index >= 0; index--) {
166
+ var sibling = siblings[index];
167
+ if (!_slate.Element.isElement(sibling) || !isHeaderCollapsed(editor, sibling, [index])) continue;
168
+ var siblingLevel = getHeaderLevel(sibling.type);
169
+ if (siblingLevel === null) continue;
170
+ var endIndex = getSectionEndIndex(siblings, index, siblingLevel);
171
+ if (currentIndex < endIndex) {
172
+ ancestorEntries.unshift([sibling, [index]]);
173
+ }
174
+ }
175
+ return ancestorEntries;
176
+ };
158
177
  var getCollapsedHeaderSectionEndIndex = exports.getCollapsedHeaderSectionEndIndex = function getCollapsedHeaderSectionEndIndex(editor, element, defaultPath) {
159
178
  var path = (0, _core.findPath)(editor, element, defaultPath);
160
179
  if (!path || path.length !== 1) return null;
@@ -174,22 +193,27 @@ var getCollapsedHeaderInsertPath = exports.getCollapsedHeaderInsertPath = functi
174
193
  return [endIndex];
175
194
  };
176
195
  var isElementHiddenByCollapsedHeader = exports.isElementHiddenByCollapsedHeader = function isElementHiddenByCollapsedHeader(editor, element, defaultPath) {
177
- var path = (0, _core.findPath)(editor, element, defaultPath);
178
- if (!path || path.length !== 1) return false;
179
- var currentIndex = path[path.length - 1];
180
- var parentPath = _slate.Path.parent(path);
181
- var siblings = parentPath.length === 0 ? editor.children : _slate.Node.get(editor, parentPath).children;
182
- for (var index = currentIndex - 1; index >= 0; index--) {
183
- var sibling = siblings[index];
184
- if (!_slate.Element.isElement(sibling) || !isHeaderCollapsed(editor, sibling, [index])) continue;
185
- var siblingLevel = getHeaderLevel(sibling.type);
186
- if (siblingLevel === null) continue;
187
- var endIndex = getSectionEndIndex(siblings, index, siblingLevel);
188
- if (currentIndex < endIndex) {
189
- return true;
190
- }
191
- }
192
- return false;
196
+ return getCollapsedHeaderAncestorEntries(editor, element, defaultPath).length > 0;
197
+ };
198
+ var expandCollapsedHeaderAncestors = exports.expandCollapsedHeaderAncestors = function expandCollapsedHeaderAncestors(editor, element, defaultPath) {
199
+ var _editor$onHeaderColla3;
200
+ var ancestorEntries = getCollapsedHeaderAncestorEntries(editor, element, defaultPath);
201
+ if (ancestorEntries.length === 0) return false;
202
+ var collapsedHeaderState = getCollapsedHeaderState();
203
+ var isUpdated = false;
204
+ ancestorEntries.forEach(function (_ref) {
205
+ var _ref2 = (0, _slicedToArray2["default"])(_ref, 2),
206
+ header = _ref2[0],
207
+ path = _ref2[1];
208
+ var headerId = getHeaderId(editor, header, path);
209
+ if (!headerId || !collapsedHeaderState[headerId]) return;
210
+ collapsedHeaderState[headerId] = false;
211
+ isUpdated = true;
212
+ });
213
+ if (!isUpdated) return false;
214
+ persistCollapsedHeaderState(collapsedHeaderState);
215
+ (_editor$onHeaderColla3 = editor.onHeaderCollapseStateChange) === null || _editor$onHeaderColla3 === void 0 ? void 0 : _editor$onHeaderColla3.call(editor);
216
+ return true;
193
217
  };
194
218
  var getSkippedHiddenHeaderMovePoint = exports.getSkippedHiddenHeaderMovePoint = function getSkippedHiddenHeaderMovePoint(editor, point) {
195
219
  var reverse = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
@@ -33,7 +33,8 @@ var CustomRenderElement = function CustomRenderElement(props) {
33
33
  (0, _helper.setDataRoot)(element, attributes);
34
34
  if ((0, _helpers.isElementHiddenByCollapsedHeader)(editor, element)) {
35
35
  return /*#__PURE__*/_react["default"].createElement("div", Object.assign({
36
- "data-id": element.id
36
+ "data-id": element.id,
37
+ id: element.id
37
38
  }, attributes, {
38
39
  style: {
39
40
  display: 'none'
@@ -74,7 +74,8 @@ var EditorContent = function EditorContent(_ref) {
74
74
  style: (0, _fullWidthMode.getContentStyleByFullModeStyle)()
75
75
  }, showOutline && /*#__PURE__*/_react["default"].createElement(_outline["default"], {
76
76
  scrollLeft: scrollLeft,
77
- doc: docValue
77
+ doc: docValue,
78
+ editor: editor
78
79
  }), children))), /*#__PURE__*/_react["default"].createElement(_rightPanel["default"], {
79
80
  editor: editor
80
81
  })));
@@ -32,6 +32,7 @@ var setOutlineSetting = exports.setOutlineSetting = function setOutlineSetting(i
32
32
  var SDocOutline = function SDocOutline(_ref) {
33
33
  var scrollLeft = _ref.scrollLeft,
34
34
  doc = _ref.doc,
35
+ editor = _ref.editor,
35
36
  t = _ref.t;
36
37
  var _useState = (0, _react.useState)(false),
37
38
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
@@ -52,9 +53,15 @@ var SDocOutline = function SDocOutline(_ref) {
52
53
  updateOutlineState(!isShown);
53
54
  }, [isShown, updateOutlineState]);
54
55
  var list = (0, _react.useMemo)(function () {
55
- return doc === null || doc === void 0 ? void 0 : doc.filter(function (item) {
56
- return ['header1', 'header2', 'header3'].includes(item.type);
57
- });
56
+ return doc === null || doc === void 0 ? void 0 : doc.reduce(function (headerList, item, index) {
57
+ if (['header1', 'header2', 'header3'].includes(item.type)) {
58
+ headerList.push({
59
+ item: item,
60
+ path: [index]
61
+ });
62
+ }
63
+ return headerList;
64
+ }, []);
58
65
  }, [doc]);
59
66
  return /*#__PURE__*/_react["default"].createElement("div", {
60
67
  className: (0, _classnames["default"])('sdoc-outline-wrapper', {
@@ -79,10 +86,14 @@ var SDocOutline = function SDocOutline(_ref) {
79
86
  className: "mt-4 text-secondary"
80
87
  }, t('Headings_you_add_to_the_document_will_appear_here')), list.length > 0 && /*#__PURE__*/_react["default"].createElement("div", {
81
88
  className: "sdoc-outline-list-container"
82
- }, list.map(function (item, index) {
89
+ }, list.map(function (_ref2, index) {
90
+ var item = _ref2.item,
91
+ path = _ref2.path;
83
92
  return /*#__PURE__*/_react["default"].createElement(_outlineItem["default"], {
84
93
  key: index,
85
94
  item: item,
95
+ itemPath: path,
96
+ editor: editor,
86
97
  isSdocRevision: isSdocRevision
87
98
  });
88
99
  })))), !isShown && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("span", {
@@ -15,15 +15,33 @@ var _react = _interopRequireDefault(require("react"));
15
15
  var _classnames = _interopRequireDefault(require("classnames"));
16
16
  var _constants = require("../constants");
17
17
  var _constants2 = require("../extension/constants");
18
+ var _helpers = require("../extension/plugins/header/helpers");
18
19
  var OutlineItem = /*#__PURE__*/function (_React$PureComponent) {
19
20
  function OutlineItem(props) {
20
21
  var _this;
21
22
  (0, _classCallCheck2["default"])(this, OutlineItem);
22
23
  _this = (0, _callSuper2["default"])(this, OutlineItem, [props]);
23
24
  (0, _defineProperty2["default"])(_this, "onItemClick", function () {
24
- var item = _this.props.item;
25
+ var _this$props = _this.props,
26
+ item = _this$props.item,
27
+ editor = _this$props.editor,
28
+ itemPath = _this$props.itemPath;
25
29
  var id = item.id;
26
- document.getElementById(id).scrollIntoView();
30
+ var scrollToTarget = function scrollToTarget() {
31
+ var target = document.getElementById(id);
32
+ if (!target) return;
33
+ target.scrollIntoView();
34
+ };
35
+ var isExpanded = editor ? (0, _helpers.expandCollapsedHeaderAncestors)(editor, item, itemPath) : false;
36
+ if (!isExpanded) {
37
+ scrollToTarget();
38
+ return;
39
+ }
40
+ if (typeof window !== 'undefined' && typeof window.requestAnimationFrame === 'function') {
41
+ window.requestAnimationFrame(scrollToTarget);
42
+ return;
43
+ }
44
+ setTimeout(scrollToTarget, 0);
27
45
  });
28
46
  (0, _defineProperty2["default"])(_this, "onMouseOver", function () {
29
47
  _this.setState({
@@ -37,9 +55,9 @@ var OutlineItem = /*#__PURE__*/function (_React$PureComponent) {
37
55
  });
38
56
  (0, _defineProperty2["default"])(_this, "getOutlineItemClass", function () {
39
57
  var isHighlighted = _this.state.isHighlighted;
40
- var _this$props = _this.props,
41
- item = _this$props.item,
42
- isDisplayHorizontalBar = _this$props.isDisplayHorizontalBar;
58
+ var _this$props2 = _this.props,
59
+ item = _this$props2.item,
60
+ isDisplayHorizontalBar = _this$props2.isDisplayHorizontalBar;
43
61
  var type = item.type,
44
62
  isActive = item.isActive;
45
63
  var outlineItemClass = null;
@@ -67,10 +85,10 @@ var OutlineItem = /*#__PURE__*/function (_React$PureComponent) {
67
85
  return (0, _createClass2["default"])(OutlineItem, [{
68
86
  key: "render",
69
87
  value: function render() {
70
- var _this$props2 = this.props,
71
- item = _this$props2.item,
72
- isDisplayHorizontalBar = _this$props2.isDisplayHorizontalBar,
73
- isSdocRevision = _this$props2.isSdocRevision;
88
+ var _this$props3 = this.props,
89
+ item = _this$props3.item,
90
+ isDisplayHorizontalBar = _this$props3.isDisplayHorizontalBar,
91
+ isSdocRevision = _this$props3.isSdocRevision;
74
92
  var type = item.type,
75
93
  children = item.children,
76
94
  isActive = item.isActive;
@@ -16,7 +16,8 @@ var _outlineItem = _interopRequireDefault(require("./outline-item"));
16
16
  require("./style.css");
17
17
  var WikiOutline = function WikiOutline(_ref) {
18
18
  var _ref$doc = _ref.doc,
19
- doc = _ref$doc === void 0 ? [] : _ref$doc;
19
+ doc = _ref$doc === void 0 ? [] : _ref$doc,
20
+ editor = _ref.editor;
20
21
  var scrollRef = (0, _useScrollContext.useScrollContext)();
21
22
  var wikiOutlineRef = (0, _react.useRef)(null);
22
23
  var _useState = (0, _react.useState)([]),
@@ -33,9 +34,15 @@ var WikiOutline = function WikiOutline(_ref) {
33
34
  }
34
35
  }, [isShowOutlinePopover]);
35
36
  var updateWikiOutlineList = (0, _react.useCallback)(function () {
36
- var list = doc.filter(function (item) {
37
- return ['header1', 'header2', 'header3'].includes(item.type);
38
- });
37
+ var list = doc.reduce(function (headerList, item, index) {
38
+ if (['header1', 'header2', 'header3'].includes(item.type)) {
39
+ headerList.push({
40
+ item: item,
41
+ path: [index]
42
+ });
43
+ }
44
+ return headerList;
45
+ }, []);
39
46
  if (list.length === 0) {
40
47
  setWikiOutlineList([]);
41
48
  return;
@@ -43,7 +50,8 @@ var WikiOutline = function WikiOutline(_ref) {
43
50
 
44
51
  // The slateValue value in the document cannot be operated, so copy it for operation
45
52
  var newList = JSON.parse(JSON.stringify(list));
46
- var index = list.findIndex(function (item) {
53
+ var index = list.findIndex(function (_ref2) {
54
+ var item = _ref2.item;
47
55
  var id = item.id;
48
56
  var el = document.getElementById(id);
49
57
  if (el) {
@@ -63,7 +71,7 @@ var WikiOutline = function WikiOutline(_ref) {
63
71
  }
64
72
  // There is no title in the visible area
65
73
  if (index === -1) {
66
- var lastItemId = list[list.length - 1].id;
74
+ var lastItemId = list[list.length - 1].item.id;
67
75
  var lastItemEl = document.getElementById(lastItemId);
68
76
  if (lastItemEl) {
69
77
  var _lastItemEl$getBoundi = lastItemEl.getBoundingClientRect(),
@@ -98,10 +106,14 @@ var WikiOutline = function WikiOutline(_ref) {
98
106
  }, wikiOutlineList.length > 0 && /*#__PURE__*/_react["default"].createElement("div", {
99
107
  className: "sdoc-outline-list-container",
100
108
  onMouseOver: onMouseOver
101
- }, wikiOutlineList.map(function (item, index) {
109
+ }, wikiOutlineList.map(function (_ref3, index) {
110
+ var item = _ref3.item,
111
+ path = _ref3.path;
102
112
  return /*#__PURE__*/_react["default"].createElement(_outlineItem["default"], {
103
113
  key: index,
104
114
  item: item,
115
+ itemPath: path,
116
+ editor: editor,
105
117
  isDisplayHorizontalBar: true
106
118
  });
107
119
  }))), isShowOutlinePopover && /*#__PURE__*/_react["default"].createElement("div", {
@@ -109,10 +121,14 @@ var WikiOutline = function WikiOutline(_ref) {
109
121
  ref: wikiOutlineRef
110
122
  }, /*#__PURE__*/_react["default"].createElement("div", {
111
123
  className: "sdoc-outline-list-container"
112
- }, wikiOutlineList.map(function (item, index) {
124
+ }, wikiOutlineList.map(function (_ref4, index) {
125
+ var item = _ref4.item,
126
+ path = _ref4.path;
113
127
  return /*#__PURE__*/_react["default"].createElement(_outlineItem["default"], {
114
128
  key: index,
115
- item: item
129
+ item: item,
130
+ itemPath: path,
131
+ editor: editor
116
132
  });
117
133
  }))));
118
134
  };
@@ -55,7 +55,8 @@ var SDocWikiSSRViewer = function SDocWikiSSRViewer(_ref) {
55
55
  slateValue: slateValue,
56
56
  showComment: false
57
57
  })), /*#__PURE__*/_react["default"].createElement(_wikiOutline["default"], {
58
- doc: slateValue
58
+ doc: slateValue,
59
+ editor: validEditor
59
60
  })))));
60
61
  };
61
62
  var _default = exports["default"] = SDocWikiSSRViewer;
@@ -14,9 +14,12 @@ var _outlineItem = _interopRequireDefault(require("./outline-item"));
14
14
  require("./style.css");
15
15
  var getHeaderList = function getHeaderList(children) {
16
16
  var headerList = [];
17
- children.forEach(function (node) {
17
+ children.forEach(function (node, index) {
18
18
  if (node.type === 'header2' || node.type === 'header3') {
19
- headerList.push(node);
19
+ headerList.push({
20
+ node: node,
21
+ path: [index]
22
+ });
20
23
  }
21
24
  });
22
25
  return headerList;
@@ -43,8 +46,9 @@ var Outline = function Outline(_ref) {
43
46
  var styles = getComputedStyle(scrollRef === null || scrollRef === void 0 ? void 0 : scrollRef.current);
44
47
  var paddingTop = parseInt(styles.paddingTop);
45
48
  for (var i = 0; i < headerList.length; i++) {
46
- var headerItem = headerList[i];
49
+ var headerItem = headerList[i].node;
47
50
  var dom = document.getElementById(headerItem.id);
51
+ if (!dom) continue;
48
52
  var offsetTop = dom.offsetTop,
49
53
  offsetHeight = dom.offsetHeight;
50
54
  var _styles = getComputedStyle(dom);
@@ -69,10 +73,14 @@ var Outline = function Outline(_ref) {
69
73
  className: "sdoc-wiki-viewer-outline"
70
74
  }, headerList.length === 0 && /*#__PURE__*/_react["default"].createElement("div", {
71
75
  className: "empty-container"
72
- }, t('No_out_line')), headerList.length > 0 && headerList.map(function (node, index) {
76
+ }, t('No_out_line')), headerList.length > 0 && headerList.map(function (_ref2, index) {
77
+ var node = _ref2.node,
78
+ path = _ref2.path;
73
79
  return /*#__PURE__*/_react["default"].createElement(_outlineItem["default"], {
74
80
  key: index,
75
81
  node: node,
82
+ itemPath: path,
83
+ editor: editor,
76
84
  activeId: activeId
77
85
  });
78
86
  }));
@@ -8,13 +8,30 @@ 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 _helpers = require("../extension/plugins/header/helpers");
11
12
  var OutlineItem = function OutlineItem(_ref) {
12
13
  var node = _ref.node,
13
- activeId = _ref.activeId;
14
+ activeId = _ref.activeId,
15
+ itemPath = _ref.itemPath,
16
+ editor = _ref.editor;
14
17
  var onItemClick = (0, _react.useCallback)(function () {
15
18
  var id = node.id;
16
- document.getElementById(id).scrollIntoView();
17
- }, [node]);
19
+ var scrollToTarget = function scrollToTarget() {
20
+ var target = document.getElementById(id);
21
+ if (!target) return;
22
+ target.scrollIntoView();
23
+ };
24
+ var isExpanded = editor ? (0, _helpers.expandCollapsedHeaderAncestors)(editor, node, itemPath) : false;
25
+ if (!isExpanded) {
26
+ scrollToTarget();
27
+ return;
28
+ }
29
+ if (typeof window !== 'undefined' && typeof window.requestAnimationFrame === 'function') {
30
+ window.requestAnimationFrame(scrollToTarget);
31
+ return;
32
+ }
33
+ setTimeout(scrollToTarget, 0);
34
+ }, [editor, itemPath, node]);
18
35
  var className = (0, _classnames["default"])({
19
36
  'outline-h2': node.type === 'header2',
20
37
  'outline-h3': node.type === 'header3',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/sdoc-editor",
3
- "version": "3.0.211",
3
+ "version": "3.0.213",
4
4
  "main": "dist/index.js",
5
5
  "scripts": {
6
6
  "test": "jest",
@@ -72,5 +72,5 @@
72
72
  "publishConfig": {
73
73
  "access": "public"
74
74
  },
75
- "gitHead": "b421cea7a382540366e165119cf4b51d5aff9825"
75
+ "gitHead": "abb638bf8bdc057fb404ef9f9c370a91362c5e8f"
76
76
  }