@seafile/sdoc-editor 1.0.195 → 1.0.196
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/basic-sdk/extension/plugins/file-link/helpers.js +12 -2
- package/dist/basic-sdk/extension/plugins/file-link/plugin.js +21 -1
- package/dist/basic-sdk/extension/plugins/file-link/render-elem.css +3 -2
- package/dist/basic-sdk/extension/plugins/file-link/render-elem.js +3 -0
- package/dist/basic-sdk/extension/plugins/header/plugin.js +3 -3
- package/dist/basic-sdk/extension/plugins/list/helpers.js +14 -2
- package/dist/basic-sdk/extension/plugins/paragraph/plugin.js +3 -3
- package/dist/basic-sdk/extension/plugins/sdoc-link/helpers.js +12 -2
- package/dist/basic-sdk/extension/plugins/sdoc-link/plugin.js +10 -27
- package/dist/basic-sdk/extension/plugins/sdoc-link/render/render-elem.css +2 -1
- package/dist/basic-sdk/extension/plugins/sdoc-link/render/render-elem.js +2 -1
- package/package.json +1 -1
|
@@ -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.unwrapLinkNode = exports.onCopyFileLinkNode = exports.isMenuDisabled = exports.insertFileLink = exports.getUrl = exports.getType = exports.generateFileNode = void 0;
|
|
7
|
+
exports.unwrapLinkNode = exports.onCopyFileLinkNode = exports.isMenuDisabled = exports.insertFileLink = exports.getUrl = exports.getType = exports.getFileLinkEntry = exports.generateFileNode = void 0;
|
|
8
8
|
var _slateReact = require("@seafile/slate-react");
|
|
9
9
|
var _slate = require("@seafile/slate");
|
|
10
10
|
var _slugid = _interopRequireDefault(require("slugid"));
|
|
@@ -112,4 +112,14 @@ const onCopyFileLinkNode = (editor, element) => {
|
|
|
112
112
|
}
|
|
113
113
|
});
|
|
114
114
|
};
|
|
115
|
-
exports.onCopyFileLinkNode = onCopyFileLinkNode;
|
|
115
|
+
exports.onCopyFileLinkNode = onCopyFileLinkNode;
|
|
116
|
+
const getFileLinkEntry = function (editor) {
|
|
117
|
+
let at = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : editor.selection;
|
|
118
|
+
const aboveNodeEntry = _slate.Editor.above(editor, {
|
|
119
|
+
match: n => n.type === _constants.FILE_LINK,
|
|
120
|
+
mode: 'highest',
|
|
121
|
+
at
|
|
122
|
+
});
|
|
123
|
+
return aboveNodeEntry;
|
|
124
|
+
};
|
|
125
|
+
exports.getFileLinkEntry = getFileLinkEntry;
|
|
@@ -6,10 +6,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var _slate = require("@seafile/slate");
|
|
8
8
|
var _constants = require("../../constants");
|
|
9
|
+
var _helpers = require("./helpers");
|
|
9
10
|
const withFileLink = editor => {
|
|
10
11
|
const {
|
|
11
12
|
isInline,
|
|
12
|
-
deleteBackward
|
|
13
|
+
deleteBackward,
|
|
14
|
+
onHotKeyDown
|
|
13
15
|
} = editor;
|
|
14
16
|
const newEditor = editor;
|
|
15
17
|
|
|
@@ -47,6 +49,24 @@ const withFileLink = editor => {
|
|
|
47
49
|
}
|
|
48
50
|
return deleteBackward(unit);
|
|
49
51
|
};
|
|
52
|
+
newEditor.onHotKeyDown = e => {
|
|
53
|
+
const fileLinkEntry = (0, _helpers.getFileLinkEntry)(editor);
|
|
54
|
+
if (fileLinkEntry) {
|
|
55
|
+
if (e.key === 'ArrowLeft') {
|
|
56
|
+
const beforePointFileLink = _slate.Editor.before(newEditor, fileLinkEntry[1]);
|
|
57
|
+
_slate.Transforms.select(newEditor, beforePointFileLink);
|
|
58
|
+
e.preventDefault();
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
if (e.key === 'ArrowRight') {
|
|
62
|
+
const afterPointFileLink = _slate.Editor.after(newEditor, fileLinkEntry[1]);
|
|
63
|
+
_slate.Transforms.select(newEditor, afterPointFileLink);
|
|
64
|
+
e.preventDefault();
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return onHotKeyDown && onHotKeyDown(e);
|
|
69
|
+
};
|
|
50
70
|
return newEditor;
|
|
51
71
|
};
|
|
52
72
|
var _default = exports.default = withFileLink;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
.file-link-selected,
|
|
1
2
|
.sdoc-file-link-render:hover {
|
|
2
|
-
background-color: #e5e5e5
|
|
3
|
+
background-color: #e5e5e5 !important;
|
|
3
4
|
}
|
|
4
5
|
|
|
5
6
|
.sdoc-file-card-link {
|
|
@@ -20,7 +21,7 @@
|
|
|
20
21
|
}
|
|
21
22
|
|
|
22
23
|
.sdoc-file-card-link .sdoc-file-link-icon :first-child {
|
|
23
|
-
|
|
24
|
+
font-size: 24px;
|
|
24
25
|
}
|
|
25
26
|
|
|
26
27
|
.sdoc-file-card-link .sdoc-file-link-icon {
|
|
@@ -27,6 +27,7 @@ const FileLink = _ref => {
|
|
|
27
27
|
const readOnly = (0, _slateReact.useReadOnly)();
|
|
28
28
|
const [isShowInsertHoverMenu, setIsShowInsertHoverMenu] = (0, _react.useState)(false);
|
|
29
29
|
const [menuPosition, setMenuPosition] = (0, _react.useState)({});
|
|
30
|
+
const isSelected = (0, _slateReact.useSelected)();
|
|
30
31
|
const registerEventHandle = (0, _react.useCallback)(() => {
|
|
31
32
|
document.addEventListener('click', onHideInsertHoverMenu);
|
|
32
33
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
@@ -118,6 +119,8 @@ const FileLink = _ref => {
|
|
|
118
119
|
"data-id": element.id,
|
|
119
120
|
contentEditable: false,
|
|
120
121
|
className: (0, _classnames.default)('sdoc-file-link-render', {
|
|
122
|
+
'file-link-selected': isSelected
|
|
123
|
+
}, {
|
|
121
124
|
'sdoc-file-card-link': element.display_type === _constants2.FILE_LINK_TYPE.CARD_LINK
|
|
122
125
|
}),
|
|
123
126
|
onClick: onClickFile,
|
|
@@ -12,6 +12,7 @@ var _helpers = require("./helpers");
|
|
|
12
12
|
var _isHotkey = _interopRequireDefault(require("is-hotkey"));
|
|
13
13
|
var _keyboard = require("../../constants/keyboard");
|
|
14
14
|
var _utils = require("../../../../utils");
|
|
15
|
+
var _helpers2 = require("../list/helpers");
|
|
15
16
|
const isSelectionAtLineEnd = (editor, path) => {
|
|
16
17
|
const {
|
|
17
18
|
selection
|
|
@@ -77,14 +78,13 @@ const withHeader = editor => {
|
|
|
77
78
|
}
|
|
78
79
|
};
|
|
79
80
|
newEditor.insertFragment = data => {
|
|
80
|
-
var _data$, _data$$children;
|
|
81
81
|
const headerNode = (0, _core.getSelectedNodeByTypes)(editor, _constants.HEADERS);
|
|
82
82
|
const headerText = _slate.Node.string(headerNode || {
|
|
83
83
|
children: []
|
|
84
84
|
});
|
|
85
|
-
const
|
|
85
|
+
const onlyOneListItem = data.length === 1 && (0, _helpers2.isSingleListItem)(data[0]);
|
|
86
86
|
// Insert a list item when the header is empty, insert only the text
|
|
87
|
-
if (headerNode && headerText.length === 0 &&
|
|
87
|
+
if (headerNode && headerText.length === 0 && onlyOneListItem) {
|
|
88
88
|
const text = _slate.Node.string(data[0]);
|
|
89
89
|
insertText(text);
|
|
90
90
|
return;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.setListType = exports.isMenuDisabled = exports.getListType = exports.getBeforeText = void 0;
|
|
6
|
+
exports.setListType = exports.isSingleListItem = exports.isMenuDisabled = exports.getListType = exports.getBeforeText = void 0;
|
|
7
7
|
var _slate = require("@seafile/slate");
|
|
8
8
|
var _constants = require("../../constants");
|
|
9
9
|
var _transforms = require("./transforms");
|
|
@@ -100,4 +100,16 @@ const getBeforeText = editor => {
|
|
|
100
100
|
range
|
|
101
101
|
};
|
|
102
102
|
};
|
|
103
|
-
exports.getBeforeText = getBeforeText;
|
|
103
|
+
exports.getBeforeText = getBeforeText;
|
|
104
|
+
const isSingleListItem = node => {
|
|
105
|
+
// ordered_list/unordered_list -> list-item.children -> paragraph
|
|
106
|
+
// -> ordered_list/unordered_list
|
|
107
|
+
if (![_constants.ORDERED_LIST, _constants.UNORDERED_LIST].includes(node.type)) return false;
|
|
108
|
+
// list children
|
|
109
|
+
if (node.children.length !== 1) return false;
|
|
110
|
+
// listItem children
|
|
111
|
+
const listItem = node.children[0];
|
|
112
|
+
if (listItem.children.length !== 1) return false;
|
|
113
|
+
return true;
|
|
114
|
+
};
|
|
115
|
+
exports.isSingleListItem = isSingleListItem;
|
|
@@ -9,6 +9,7 @@ var _isHotkey = _interopRequireDefault(require("is-hotkey"));
|
|
|
9
9
|
var _slate = require("@seafile/slate");
|
|
10
10
|
var _core = require("../../core");
|
|
11
11
|
var _constants = require("../../constants");
|
|
12
|
+
var _helpers = require("../list/helpers");
|
|
12
13
|
const withParagraph = editor => {
|
|
13
14
|
const {
|
|
14
15
|
handleTab,
|
|
@@ -135,10 +136,9 @@ const withParagraph = editor => {
|
|
|
135
136
|
return onHotKeyDown && onHotKeyDown(event);
|
|
136
137
|
};
|
|
137
138
|
newEditor.insertFragment = data => {
|
|
138
|
-
var _data$, _data$$children;
|
|
139
139
|
const paragraphBlock = (0, _core.getSelectedNodeByType)(editor, _constants.PARAGRAPH);
|
|
140
|
-
const
|
|
141
|
-
if (paragraphBlock &&
|
|
140
|
+
const onlyOneListItem = data.length === 1 && (0, _helpers.isSingleListItem)(data[0]);
|
|
141
|
+
if (paragraphBlock && onlyOneListItem) {
|
|
142
142
|
const text = _slate.Node.string(data[0]);
|
|
143
143
|
editor.insertText(text);
|
|
144
144
|
return;
|
|
@@ -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.unwrapLinkNode = exports.sdocFileIcon = exports.removeTempInput = exports.removeShortCutSymbol = exports.onCopySdocLinkNode = exports.isTriggeredByShortcut = exports.isMenuDisabled = exports.insertTextWhenRemoveFileNameCollector = exports.insertTempInput = exports.insertSdocFileLink = exports.getUrl = exports.getType = exports.getNewFileListData = exports.getFileSearchInputEntry = exports.getBeforeText = exports.generateSdocFileNode = void 0;
|
|
7
|
+
exports.unwrapLinkNode = exports.sdocFileIcon = exports.removeTempInput = exports.removeShortCutSymbol = exports.onCopySdocLinkNode = exports.isTriggeredByShortcut = exports.isMenuDisabled = exports.insertTextWhenRemoveFileNameCollector = exports.insertTempInput = exports.insertSdocFileLink = exports.getUrl = exports.getType = exports.getSdocLinkEntry = exports.getNewFileListData = exports.getFileSearchInputEntry = exports.getBeforeText = exports.generateSdocFileNode = void 0;
|
|
8
8
|
var _slateReact = require("@seafile/slate-react");
|
|
9
9
|
var _slate = require("@seafile/slate");
|
|
10
10
|
var _slugid = _interopRequireDefault(require("slugid"));
|
|
@@ -278,4 +278,14 @@ const sdocFileIcon = () => {
|
|
|
278
278
|
const server = _context.default.getSetting('serviceUrl');
|
|
279
279
|
return `${server}/media/img/file/256/sdoc.png`;
|
|
280
280
|
};
|
|
281
|
-
exports.sdocFileIcon = sdocFileIcon;
|
|
281
|
+
exports.sdocFileIcon = sdocFileIcon;
|
|
282
|
+
const getSdocLinkEntry = function (editor) {
|
|
283
|
+
let at = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : editor.selection;
|
|
284
|
+
const aboveNodeEntry = _slate.Editor.above(editor, {
|
|
285
|
+
match: n => n.type === _constants.SDOC_LINK,
|
|
286
|
+
mode: 'highest',
|
|
287
|
+
at
|
|
288
|
+
});
|
|
289
|
+
return aboveNodeEntry;
|
|
290
|
+
};
|
|
291
|
+
exports.getSdocLinkEntry = getSdocLinkEntry;
|
|
@@ -80,36 +80,19 @@ const withSdocLink = editor => {
|
|
|
80
80
|
return onCompositionStart && onCompositionStart(event);
|
|
81
81
|
};
|
|
82
82
|
newEditor.onHotKeyDown = e => {
|
|
83
|
-
const
|
|
84
|
-
|
|
85
|
-
} = newEditor;
|
|
86
|
-
const isCollapsed = _slate.Range.isCollapsed(selection);
|
|
87
|
-
if (isCollapsed) {
|
|
83
|
+
const sdocLinkEntry = (0, _helpers.getSdocLinkEntry)(editor);
|
|
84
|
+
if (sdocLinkEntry) {
|
|
88
85
|
if (e.key === 'ArrowLeft') {
|
|
89
|
-
const
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
if ((preNode === null || preNode === void 0 ? void 0 : preNode.type) === _constants.SDOC_LINK) {
|
|
94
|
-
const beforePointSdocLink = _slate.Editor.before(newEditor, prePath);
|
|
95
|
-
_slate.Transforms.select(newEditor, beforePointSdocLink);
|
|
96
|
-
e.preventDefault();
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
86
|
+
const beforePointSdocLink = _slate.Editor.before(newEditor, sdocLinkEntry[1]);
|
|
87
|
+
_slate.Transforms.select(newEditor, beforePointSdocLink);
|
|
88
|
+
e.preventDefault();
|
|
89
|
+
return;
|
|
99
90
|
}
|
|
100
91
|
if (e.key === 'ArrowRight') {
|
|
101
|
-
const
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
});
|
|
106
|
-
if ((nextNode === null || nextNode === void 0 ? void 0 : nextNode.type) === _constants.SDOC_LINK) {
|
|
107
|
-
const afterPointSdocLink = _slate.Editor.after(newEditor, nextPath);
|
|
108
|
-
_slate.Transforms.select(newEditor, afterPointSdocLink);
|
|
109
|
-
e.preventDefault();
|
|
110
|
-
return;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
92
|
+
const afterPointSdocLink = _slate.Editor.after(newEditor, sdocLinkEntry[1]);
|
|
93
|
+
_slate.Transforms.select(newEditor, afterPointSdocLink);
|
|
94
|
+
e.preventDefault();
|
|
95
|
+
return;
|
|
113
96
|
}
|
|
114
97
|
}
|
|
115
98
|
return onHotKeyDown && onHotKeyDown(e);
|
|
@@ -35,6 +35,7 @@ const SdocFileLink = _ref => {
|
|
|
35
35
|
const [isShowInsertHoverMenu, setIsShowInsertHoverMenu] = (0, _react.useState)(false);
|
|
36
36
|
const [menuPosition, setMenuPosition] = (0, _react.useState)({});
|
|
37
37
|
const readOnly = (0, _slateReact.useReadOnly)();
|
|
38
|
+
const isSelected = (0, _slateReact.useSelected)();
|
|
38
39
|
const registerEventHandle = (0, _react.useCallback)(() => {
|
|
39
40
|
document.addEventListener('click', onHideInsertHoverMenu);
|
|
40
41
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
@@ -136,7 +137,7 @@ const SdocFileLink = _ref => {
|
|
|
136
137
|
return /*#__PURE__*/_react.default.createElement("span", Object.assign({}, attributes, {
|
|
137
138
|
"data-id": element.id,
|
|
138
139
|
contentEditable: false,
|
|
139
|
-
className: `sdoc-file-render ${element.display_type === _constants2.SDOC_LINK_TYPE.CARD_LINK ? 'sdoc-file-card-link' : ''}`,
|
|
140
|
+
className: `sdoc-file-render ${isSelected ? 'sdoc-file-link-selected' : ''} ${element.display_type === _constants2.SDOC_LINK_TYPE.CARD_LINK ? 'sdoc-file-card-link' : ''}`,
|
|
140
141
|
onClick: onClickFile,
|
|
141
142
|
style: element.display_type === _constants2.SDOC_LINK_TYPE.CARD_LINK ? style : {}
|
|
142
143
|
}), /*#__PURE__*/_react.default.createElement("span", {
|