@seafile/sdoc-editor 3.0.203 → 3.0.205
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/editor/sdoc-editor.js +10 -0
- package/dist/editor/wiki-editor.js +10 -0
- package/dist/extension/plugins/header/helpers.js +76 -2
- package/dist/extension/plugins/header/plugin.js +4 -5
- package/dist/extension/plugins/header/render-elem.css +19 -4
- package/dist/extension/plugins/header/render-elem.js +9 -15
- package/dist/extension/toolbar/side-toolbar/helpers.js +0 -1
- package/dist/views/readonly-article.js +15 -1
- package/package.json +2 -2
|
@@ -255,6 +255,16 @@ var SdocEditor = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
|
255
255
|
(0, _dispatchContentSelectEvent.dispatchContentSelectEvent)(validEditor);
|
|
256
256
|
}
|
|
257
257
|
};
|
|
258
|
+
(0, _react.useEffect)(function () {
|
|
259
|
+
validEditor.onHeaderCollapseStateChange = function () {
|
|
260
|
+
_setSlateValue(function (value) {
|
|
261
|
+
return (0, _toConsumableArray2["default"])(value);
|
|
262
|
+
});
|
|
263
|
+
};
|
|
264
|
+
return function () {
|
|
265
|
+
validEditor.onHeaderCollapseStateChange = null;
|
|
266
|
+
};
|
|
267
|
+
}, [validEditor]);
|
|
258
268
|
var isFreezed = _context["default"].getSetting('isFreezed');
|
|
259
269
|
if (isReloading || isLoadingMathJax) {
|
|
260
270
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
@@ -146,6 +146,16 @@ var WikiEditor = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
|
146
146
|
}, 0);
|
|
147
147
|
_setSlateValue(value);
|
|
148
148
|
};
|
|
149
|
+
(0, _react.useEffect)(function () {
|
|
150
|
+
validEditor.onHeaderCollapseStateChange = function () {
|
|
151
|
+
_setSlateValue(function (value) {
|
|
152
|
+
return (0, _toConsumableArray2["default"])(value);
|
|
153
|
+
});
|
|
154
|
+
};
|
|
155
|
+
return function () {
|
|
156
|
+
validEditor.onHeaderCollapseStateChange = null;
|
|
157
|
+
};
|
|
158
|
+
}, [validEditor]);
|
|
149
159
|
if (isReloading || isLoadingMathJax) {
|
|
150
160
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
151
161
|
className: "h-100 w-100 d-flex align-items-center justify-content-center"
|
|
@@ -4,11 +4,77 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.setHeaderType = exports.isSelectionInHeader = exports.isMenuDisabled = exports.isHasImage = exports.isElementHiddenByCollapsedHeader = exports.getSkippedHiddenHeaderMovePoint = exports.getHeaderType = exports.getHeaderLevel = exports.getCollapsedHeaderSectionEndIndex = 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.clearHeaderCollapsedState = void 0;
|
|
8
8
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
|
|
9
9
|
var _slate = require("@seafile/slate");
|
|
10
|
+
var _context = _interopRequireDefault(require("../../../context"));
|
|
11
|
+
var _localStorageUtils = _interopRequireDefault(require("../../../utils/local-storage-utils"));
|
|
10
12
|
var _constants = require("../../constants");
|
|
11
13
|
var _core = require("../../core");
|
|
14
|
+
var HEADER_COLLAPSE_STORAGE_PREFIX = 'sdoc-header-collapsed:';
|
|
15
|
+
var getHeaderStorageDocKey = function getHeaderStorageDocKey() {
|
|
16
|
+
return _context["default"].getSetting('docUuid') || _context["default"].getSetting('wikiId') || window.location.pathname || 'default';
|
|
17
|
+
};
|
|
18
|
+
var getHeaderStorageKey = function getHeaderStorageKey() {
|
|
19
|
+
return "".concat(HEADER_COLLAPSE_STORAGE_PREFIX).concat(getHeaderStorageDocKey());
|
|
20
|
+
};
|
|
21
|
+
var clearAllHeaderCollapsedState = function clearAllHeaderCollapsedState() {
|
|
22
|
+
Object.keys(window.localStorage).forEach(function (key) {
|
|
23
|
+
if (key.startsWith(HEADER_COLLAPSE_STORAGE_PREFIX)) {
|
|
24
|
+
_localStorageUtils["default"].removeItem(key);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
var getCollapsedHeaderState = function getCollapsedHeaderState() {
|
|
29
|
+
return _localStorageUtils["default"].getItem(getHeaderStorageKey(), {});
|
|
30
|
+
};
|
|
31
|
+
var persistCollapsedHeaderState = function persistCollapsedHeaderState(collapsedHeaderState) {
|
|
32
|
+
try {
|
|
33
|
+
_localStorageUtils["default"].setItem(getHeaderStorageKey(), collapsedHeaderState);
|
|
34
|
+
} catch (error) {
|
|
35
|
+
clearAllHeaderCollapsedState();
|
|
36
|
+
try {
|
|
37
|
+
_localStorageUtils["default"].setItem(getHeaderStorageKey(), collapsedHeaderState);
|
|
38
|
+
} catch (_unused) {
|
|
39
|
+
// Ignore storage failures after cleanup.
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
var getHeaderId = function getHeaderId(editor, element, defaultPath) {
|
|
44
|
+
var _Node$get;
|
|
45
|
+
if (element !== null && element !== void 0 && element.id) return element.id;
|
|
46
|
+
var path = defaultPath || (0, _core.findPath)(editor, element);
|
|
47
|
+
if (!path) return null;
|
|
48
|
+
return ((_Node$get = _slate.Node.get(editor, path)) === null || _Node$get === void 0 ? void 0 : _Node$get.id) || "path:".concat(path.join('.'));
|
|
49
|
+
};
|
|
50
|
+
var isHeaderCollapsed = exports.isHeaderCollapsed = function isHeaderCollapsed(editor, element, defaultPath) {
|
|
51
|
+
var headerId = getHeaderId(editor, element, defaultPath);
|
|
52
|
+
if (!headerId) {
|
|
53
|
+
return !!(element !== null && element !== void 0 && element.collapsed);
|
|
54
|
+
}
|
|
55
|
+
var collapsedHeaderState = getCollapsedHeaderState();
|
|
56
|
+
if (Object.prototype.hasOwnProperty.call(collapsedHeaderState, headerId)) {
|
|
57
|
+
return !!collapsedHeaderState[headerId];
|
|
58
|
+
}
|
|
59
|
+
return !!(element !== null && element !== void 0 && element.collapsed);
|
|
60
|
+
};
|
|
61
|
+
var setHeaderCollapsed = exports.setHeaderCollapsed = function setHeaderCollapsed(editor, element, collapsed, defaultPath) {
|
|
62
|
+
var _editor$onHeaderColla;
|
|
63
|
+
var headerId = getHeaderId(editor, element, defaultPath);
|
|
64
|
+
if (!headerId) return;
|
|
65
|
+
var collapsedHeaderState = getCollapsedHeaderState();
|
|
66
|
+
collapsedHeaderState[headerId] = collapsed;
|
|
67
|
+
persistCollapsedHeaderState(collapsedHeaderState);
|
|
68
|
+
(_editor$onHeaderColla = editor.onHeaderCollapseStateChange) === null || _editor$onHeaderColla === void 0 ? void 0 : _editor$onHeaderColla.call(editor);
|
|
69
|
+
};
|
|
70
|
+
var toggleHeaderCollapsed = exports.toggleHeaderCollapsed = function toggleHeaderCollapsed(editor, element, defaultPath) {
|
|
71
|
+
setHeaderCollapsed(editor, element, !isHeaderCollapsed(editor, element, defaultPath), defaultPath);
|
|
72
|
+
};
|
|
73
|
+
var clearHeaderCollapsedState = exports.clearHeaderCollapsedState = function clearHeaderCollapsedState(editor) {
|
|
74
|
+
var _editor$onHeaderColla2;
|
|
75
|
+
_localStorageUtils["default"].removeItem(getHeaderStorageKey());
|
|
76
|
+
editor === null || editor === void 0 ? void 0 : (_editor$onHeaderColla2 = editor.onHeaderCollapseStateChange) === null || _editor$onHeaderColla2 === void 0 ? void 0 : _editor$onHeaderColla2.call(editor);
|
|
77
|
+
};
|
|
12
78
|
var isMenuDisabled = exports.isMenuDisabled = function isMenuDisabled(editor) {
|
|
13
79
|
var readonly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
14
80
|
if (readonly) return true;
|
|
@@ -99,6 +165,14 @@ var getCollapsedHeaderSectionEndIndex = exports.getCollapsedHeaderSectionEndInde
|
|
|
99
165
|
if (level === null) return null;
|
|
100
166
|
return getSectionEndIndex(siblings, currentIndex, level);
|
|
101
167
|
};
|
|
168
|
+
var getCollapsedHeaderInsertPath = exports.getCollapsedHeaderInsertPath = function getCollapsedHeaderInsertPath(editor, element, defaultPath) {
|
|
169
|
+
var endIndex = getCollapsedHeaderSectionEndIndex(editor, element, defaultPath);
|
|
170
|
+
if (endIndex === null) {
|
|
171
|
+
var path = (0, _core.findPath)(editor, element, defaultPath);
|
|
172
|
+
return path ? _slate.Path.next(path) : null;
|
|
173
|
+
}
|
|
174
|
+
return [endIndex];
|
|
175
|
+
};
|
|
102
176
|
var isElementHiddenByCollapsedHeader = exports.isElementHiddenByCollapsedHeader = function isElementHiddenByCollapsedHeader(editor, element, defaultPath) {
|
|
103
177
|
var path = (0, _core.findPath)(editor, element, defaultPath);
|
|
104
178
|
if (!path || path.length !== 1) return false;
|
|
@@ -107,7 +181,7 @@ var isElementHiddenByCollapsedHeader = exports.isElementHiddenByCollapsedHeader
|
|
|
107
181
|
var siblings = parentPath.length === 0 ? editor.children : _slate.Node.get(editor, parentPath).children;
|
|
108
182
|
for (var index = currentIndex - 1; index >= 0; index--) {
|
|
109
183
|
var sibling = siblings[index];
|
|
110
|
-
if (!_slate.Element.isElement(sibling) || !sibling
|
|
184
|
+
if (!_slate.Element.isElement(sibling) || !isHeaderCollapsed(editor, sibling, [index])) continue;
|
|
111
185
|
var siblingLevel = getHeaderLevel(sibling.type);
|
|
112
186
|
if (siblingLevel === null) continue;
|
|
113
187
|
var endIndex = getSectionEndIndex(siblings, index, siblingLevel);
|
|
@@ -64,7 +64,7 @@ var withHeader = function withHeader(editor) {
|
|
|
64
64
|
var _match = (0, _slicedToArray2["default"])(match, 2),
|
|
65
65
|
currentNode = _match[0],
|
|
66
66
|
path = _match[1];
|
|
67
|
-
var isCollapsedHeader =
|
|
67
|
+
var isCollapsedHeader = (0, _helpers2.isHeaderCollapsed)(newEditor, currentNode, path);
|
|
68
68
|
var startPoint = _slate.Editor.start(newEditor, path);
|
|
69
69
|
var endPoint = _slate.Editor.end(newEditor, path);
|
|
70
70
|
if (isCollapsedHeader) {
|
|
@@ -80,8 +80,7 @@ var withHeader = function withHeader(editor) {
|
|
|
80
80
|
}
|
|
81
81
|
if (isAtHeaderEnd) {
|
|
82
82
|
_slate.Editor.withoutNormalizing(newEditor, function () {
|
|
83
|
-
var
|
|
84
|
-
var insertPath = sectionEndIndex === null ? _slate.Path.next(path) : [sectionEndIndex];
|
|
83
|
+
var insertPath = (0, _helpers2.getCollapsedHeaderInsertPath)(newEditor, currentNode, path);
|
|
85
84
|
var newNode = (0, _core.generateEmptyElement)(currentNode.type);
|
|
86
85
|
_slate.Transforms.insertNodes(newEditor, newNode, {
|
|
87
86
|
at: insertPath
|
|
@@ -91,7 +90,7 @@ var withHeader = function withHeader(editor) {
|
|
|
91
90
|
return;
|
|
92
91
|
}
|
|
93
92
|
_slate.Editor.withoutNormalizing(newEditor, function () {
|
|
94
|
-
var
|
|
93
|
+
var insertPath = (0, _helpers2.getCollapsedHeaderInsertPath)(newEditor, currentNode, path);
|
|
95
94
|
var afterRange = {
|
|
96
95
|
anchor: cursorPoint,
|
|
97
96
|
focus: endPoint
|
|
@@ -100,9 +99,9 @@ var withHeader = function withHeader(editor) {
|
|
|
100
99
|
_slate.Transforms["delete"](newEditor, {
|
|
101
100
|
at: afterRange
|
|
102
101
|
});
|
|
102
|
+
(0, _helpers2.setHeaderCollapsed)(newEditor, currentNode, true, path);
|
|
103
103
|
var newNode = (0, _core.generateEmptyElement)(currentNode.type);
|
|
104
104
|
newNode.children[0].text = afterText;
|
|
105
|
-
var insertPath = sectionEndIndex === null ? _slate.Path.next(path) : [sectionEndIndex];
|
|
106
105
|
_slate.Transforms.insertNodes(newEditor, newNode, {
|
|
107
106
|
at: insertPath
|
|
108
107
|
});
|
|
@@ -2,6 +2,15 @@
|
|
|
2
2
|
position: relative;
|
|
3
3
|
}
|
|
4
4
|
|
|
5
|
+
.sdoc-header-row::before {
|
|
6
|
+
content: '';
|
|
7
|
+
position: absolute;
|
|
8
|
+
right: 100%;
|
|
9
|
+
top: 0;
|
|
10
|
+
width: 20px;
|
|
11
|
+
height: 100%;
|
|
12
|
+
}
|
|
13
|
+
|
|
5
14
|
.sdoc-header-collapse-prefix {
|
|
6
15
|
display: inline-flex;
|
|
7
16
|
align-items: center;
|
|
@@ -11,7 +20,7 @@
|
|
|
11
20
|
top: 50%;
|
|
12
21
|
width: 16px;
|
|
13
22
|
height: 16px;
|
|
14
|
-
margin-right:
|
|
23
|
+
margin-right: 4px;
|
|
15
24
|
cursor: pointer;
|
|
16
25
|
transform: translateY(-50%);
|
|
17
26
|
opacity: 0;
|
|
@@ -19,7 +28,9 @@
|
|
|
19
28
|
}
|
|
20
29
|
|
|
21
30
|
.sdoc-header-collapse-prefix:hover {
|
|
22
|
-
|
|
31
|
+
opacity: 1;
|
|
32
|
+
pointer-events: auto;
|
|
33
|
+
background-color: rgba(0, 0, 0, .04);
|
|
23
34
|
border-radius: 2px;
|
|
24
35
|
}
|
|
25
36
|
|
|
@@ -28,6 +39,11 @@
|
|
|
28
39
|
pointer-events: auto;
|
|
29
40
|
}
|
|
30
41
|
|
|
42
|
+
.sdoc-header-row:hover .sdoc-header-collapse-prefix {
|
|
43
|
+
opacity: 1;
|
|
44
|
+
pointer-events: auto;
|
|
45
|
+
}
|
|
46
|
+
|
|
31
47
|
.sdoc-header-collapse-prefix .sdocfont {
|
|
32
48
|
width: 16px;
|
|
33
49
|
height: 16px;
|
|
@@ -36,8 +52,7 @@
|
|
|
36
52
|
display: inline-flex;
|
|
37
53
|
align-items: center;
|
|
38
54
|
justify-content: center;
|
|
39
|
-
color: #
|
|
40
|
-
opacity: 0.5;
|
|
55
|
+
color: #666;
|
|
41
56
|
}
|
|
42
57
|
|
|
43
58
|
.sdoc-header-collapse-prefix-collapsed {
|
|
@@ -12,6 +12,7 @@ var _slateReact = require("@seafile/slate-react");
|
|
|
12
12
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
13
13
|
var _constants = require("../../constants");
|
|
14
14
|
var _helper = require("../paragraph/helper");
|
|
15
|
+
var _helpers = require("./helpers");
|
|
15
16
|
var _placeholder = _interopRequireDefault(require("./placeholder"));
|
|
16
17
|
require("./render-elem.css");
|
|
17
18
|
var renderTitle = exports.renderTitle = function renderTitle(props, editor) {
|
|
@@ -52,16 +53,8 @@ var renderHeader = exports.renderHeader = function renderHeader(props, editor) {
|
|
|
52
53
|
isComposing = props.isComposing;
|
|
53
54
|
var type = element.type;
|
|
54
55
|
var level = type.split('header')[1];
|
|
55
|
-
var collapsed = !!element.collapsed;
|
|
56
56
|
var currentPath = _slateReact.ReactEditor.findPath(editor, element);
|
|
57
|
-
var
|
|
58
|
-
at: editor.selection,
|
|
59
|
-
match: function match(node, path) {
|
|
60
|
-
return _slate.Element.isElement(node) && node.id === element.id && path.length === currentPath.length;
|
|
61
|
-
},
|
|
62
|
-
mode: 'lowest'
|
|
63
|
-
}) : null;
|
|
64
|
-
var isActiveHeader = !!activeHeaderEntry;
|
|
57
|
+
var collapsed = (0, _helpers.isHeaderCollapsed)(editor, element, currentPath);
|
|
65
58
|
var style = (0, _objectSpread2["default"])({
|
|
66
59
|
textAlign: element.align,
|
|
67
60
|
fontSize: "".concat(_constants.SDOC_FONT_SIZE[element.type], "pt")
|
|
@@ -75,11 +68,12 @@ var renderHeader = exports.renderHeader = function renderHeader(props, editor) {
|
|
|
75
68
|
var onToggleCollapsed = function onToggleCollapsed(event) {
|
|
76
69
|
event.preventDefault();
|
|
77
70
|
event.stopPropagation();
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
71
|
+
(0, _helpers.toggleHeaderCollapsed)(editor, element, currentPath);
|
|
72
|
+
if (collapsed) {
|
|
73
|
+
var endPoint = _slate.Editor.end(editor, currentPath);
|
|
74
|
+
_slate.Transforms.select(editor, endPoint);
|
|
75
|
+
_slateReact.ReactEditor.focus(editor);
|
|
76
|
+
}
|
|
83
77
|
};
|
|
84
78
|
return /*#__PURE__*/_react["default"].createElement("div", Object.assign({
|
|
85
79
|
"data-id": element.id,
|
|
@@ -93,7 +87,7 @@ var renderHeader = exports.renderHeader = function renderHeader(props, editor) {
|
|
|
93
87
|
className: "sdoc-header-row"
|
|
94
88
|
}, /*#__PURE__*/_react["default"].createElement("span", {
|
|
95
89
|
className: (0, _classnames["default"])('sdoc-header-collapse-prefix', {
|
|
96
|
-
'sdoc-header-collapse-prefix-visible':
|
|
90
|
+
'sdoc-header-collapse-prefix-visible': collapsed,
|
|
97
91
|
'sdoc-header-collapse-prefix-collapsed': collapsed
|
|
98
92
|
}),
|
|
99
93
|
contentEditable: false,
|
|
@@ -109,7 +109,6 @@ var onSetNodeType = exports.onSetNodeType = function onSetNodeType(editor, eleme
|
|
|
109
109
|
id: _slugid["default"].nice(),
|
|
110
110
|
type: _constants2.TOGGLE_HEADER,
|
|
111
111
|
level: level,
|
|
112
|
-
collapsed: false,
|
|
113
112
|
children: [titleNode, bodyNode]
|
|
114
113
|
};
|
|
115
114
|
_slate.Editor.withoutNormalizing(editor, function () {
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
|
|
4
3
|
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"];
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
8
|
exports["default"] = void 0;
|
|
9
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
|
|
9
10
|
var _react = _interopRequireWildcard(require("react"));
|
|
10
11
|
var _slateReact = require("@seafile/slate-react");
|
|
11
12
|
var _comment = _interopRequireDefault(require("../comment"));
|
|
@@ -20,6 +21,19 @@ var ReadOnlyArticle = function ReadOnlyArticle(_ref) {
|
|
|
20
21
|
_ref$showComment = _ref.showComment,
|
|
21
22
|
showComment = _ref$showComment === void 0 ? false : _ref$showComment;
|
|
22
23
|
var decorate = (0, _decorates.usePipDecorate)(editor);
|
|
24
|
+
var _useState = (0, _react.useState)(0),
|
|
25
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
26
|
+
setVersion = _useState2[1];
|
|
27
|
+
(0, _react.useEffect)(function () {
|
|
28
|
+
editor.onHeaderCollapseStateChange = function () {
|
|
29
|
+
setVersion(function (value) {
|
|
30
|
+
return value + 1;
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
return function () {
|
|
34
|
+
editor.onHeaderCollapseStateChange = null;
|
|
35
|
+
};
|
|
36
|
+
}, [editor]);
|
|
23
37
|
return /*#__PURE__*/_react["default"].createElement(_slateReact.Slate, {
|
|
24
38
|
editor: editor,
|
|
25
39
|
value: slateValue,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seafile/sdoc-editor",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.205",
|
|
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": "
|
|
75
|
+
"gitHead": "8ced52244e7fab9a1f1af86ab419b8b5adb833b0"
|
|
76
76
|
}
|