@seafile/sdoc-editor 2.0.179 → 2.0.181-test-0.0.1
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/assets/css/default.css +12 -0
- package/dist/constants/index.js +2 -1
- package/dist/editor/editable-article.js +23 -3
- package/dist/extension/commons/select-file-dialog/index.css +4 -1
- package/dist/extension/commons/select-file-dialog/index.js +19 -0
- package/dist/extension/constants/index.js +2 -1
- package/dist/extension/plugins/image/helpers.js +1 -1
- package/dist/extension/plugins/image/render-elem.js +3 -1
- package/dist/extension/plugins/link/dialog/add-link-dialog/index.css +122 -0
- package/dist/extension/plugins/link/dialog/add-link-dialog/index.js +240 -24
- package/dist/extension/plugins/link/helpers.js +46 -6
- package/dist/extension/plugins/link/hover/index.js +35 -1
- package/dist/extension/plugins/link/plugin.js +38 -18
- package/dist/extension/render/custom-element.js +6 -1
- package/dist/extension/toolbar/side-toolbar/side-menu.js +4 -4
- package/dist/slate-convert/md-to-html/helper.js +29 -0
- package/dist/slate-convert/md-to-html/index.js +41 -30
- package/dist/utils/diff-text.js +1 -1
- package/package.json +2 -3
- package/LICENSE.txt +0 -13
|
@@ -25,3 +25,15 @@
|
|
|
25
25
|
.sdoc-icon-btn:hover .sdocfont {
|
|
26
26
|
color: #5a5a5a;
|
|
27
27
|
}
|
|
28
|
+
|
|
29
|
+
.linked-block-highlight-overlay {
|
|
30
|
+
position: relative;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.linked-block-highlight-overlay::after {
|
|
34
|
+
content: '';
|
|
35
|
+
position: absolute;
|
|
36
|
+
inset: 0;
|
|
37
|
+
background: rgba(169, 201, 237, 0.3);
|
|
38
|
+
pointer-events: none;
|
|
39
|
+
}
|
package/dist/constants/index.js
CHANGED
|
@@ -77,7 +77,8 @@ var INTERNAL_EVENT = exports.INTERNAL_EVENT = {
|
|
|
77
77
|
IMAGE_COLUMN_TOGGLE: 'Image_column_toggle',
|
|
78
78
|
CREATE_WHITEBOARD_FILE: 'create_whiteboard_file',
|
|
79
79
|
GENERATE_EXDRAW_READ_ONLY_LINK: 'generate_exdraw_read_only_link',
|
|
80
|
-
TRANSFER_PREVIEW_FILE_ID: 'transfer_preview_file_id'
|
|
80
|
+
TRANSFER_PREVIEW_FILE_ID: 'transfer_preview_file_id',
|
|
81
|
+
FILE_METADATA_COMPONENT: 'file_metadata_component'
|
|
81
82
|
};
|
|
82
83
|
var PAGE_EDIT_AREA_WIDTH = exports.PAGE_EDIT_AREA_WIDTH = 672; // 672 = 794 - 2[borderLeft + borderRight] - 120[paddingLeft + paddingRight]
|
|
83
84
|
var COMMENT_EDITOR_EDIT_AREA_WIDTH = exports.COMMENT_EDITOR_EDIT_AREA_WIDTH = 364;
|
|
@@ -63,6 +63,26 @@ var EditableArticle = function EditableArticle(_ref) {
|
|
|
63
63
|
eventBus.dispatch(_constants.INTERNAL_EVENT.CANCEL_TABLE_SELECT_RANGE);
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
|
+
|
|
67
|
+
// Remove linked block overlay style when operating
|
|
68
|
+
var _Editor$nodes = _slate.Editor.nodes(editor, {
|
|
69
|
+
at: [],
|
|
70
|
+
match: function match(n) {
|
|
71
|
+
return n.linked_block === true;
|
|
72
|
+
}
|
|
73
|
+
}),
|
|
74
|
+
_Editor$nodes2 = (0, _slicedToArray2["default"])(_Editor$nodes, 1),
|
|
75
|
+
linkedNodeEntry = _Editor$nodes2[0];
|
|
76
|
+
if (linkedNodeEntry) {
|
|
77
|
+
var _linkedNodeEntry = (0, _slicedToArray2["default"])(linkedNodeEntry, 2),
|
|
78
|
+
node = _linkedNodeEntry[0],
|
|
79
|
+
path = _linkedNodeEntry[1];
|
|
80
|
+
var linkedDomNode = _slateReact.ReactEditor.toDOMNode(editor, node);
|
|
81
|
+
linkedDomNode.classList.remove('linked-block-highlight-overlay');
|
|
82
|
+
_slate.Transforms.unsetNodes(editor, ['linked_block'], {
|
|
83
|
+
at: path
|
|
84
|
+
});
|
|
85
|
+
}
|
|
66
86
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
67
87
|
}, []);
|
|
68
88
|
var scrollRef = (0, _useScrollContext.useScrollContext)();
|
|
@@ -334,14 +354,14 @@ var EditableArticle = function EditableArticle(_ref) {
|
|
|
334
354
|
editor.oldSelection = (0, _objectSpread2["default"])({}, selection);
|
|
335
355
|
|
|
336
356
|
// Do not scroll into view, when focus on image
|
|
337
|
-
var _Editor$
|
|
357
|
+
var _Editor$nodes3 = _slate.Editor.nodes(editor, {
|
|
338
358
|
match: function match(n) {
|
|
339
359
|
return [_constants2.IMAGE, _constants2.IMAGE_BLOCK].includes(n.type);
|
|
340
360
|
},
|
|
341
361
|
at: selection
|
|
342
362
|
}),
|
|
343
|
-
_Editor$
|
|
344
|
-
imageNodeEntry = _Editor$
|
|
363
|
+
_Editor$nodes4 = (0, _slicedToArray2["default"])(_Editor$nodes3, 1),
|
|
364
|
+
imageNodeEntry = _Editor$nodes4[0];
|
|
345
365
|
if (imageNodeEntry) return;
|
|
346
366
|
var focusedNode = _slate.Node.get(editor, selection.focus.path);
|
|
347
367
|
var domNode = _slateReact.ReactEditor.toDOMNode(editor, focusedNode);
|
|
@@ -97,7 +97,6 @@
|
|
|
97
97
|
height: 28px;
|
|
98
98
|
padding: 0 25px;
|
|
99
99
|
line-height: 28px;
|
|
100
|
-
|
|
101
100
|
}
|
|
102
101
|
|
|
103
102
|
.sdoc-search-input::placeholder {
|
|
@@ -135,3 +134,7 @@
|
|
|
135
134
|
position: absolute;
|
|
136
135
|
right: 4px;
|
|
137
136
|
}
|
|
137
|
+
|
|
138
|
+
.sdoc-file-select-container .sdoc-file-select-wrapper {
|
|
139
|
+
display: flex;
|
|
140
|
+
}
|
|
@@ -18,6 +18,7 @@ var _commonUtils = require("../../../utils/common-utils");
|
|
|
18
18
|
var _constants = require("../../constants");
|
|
19
19
|
var _localFiles = _interopRequireDefault(require("./local-files"));
|
|
20
20
|
require("./index.css");
|
|
21
|
+
var _seafileSdocEditor = require("@seafile/seafile-sdoc-editor");
|
|
21
22
|
var SelectSdocFileDialog = function SelectSdocFileDialog(_ref) {
|
|
22
23
|
var editor = _ref.editor,
|
|
23
24
|
dialogType = _ref.dialogType,
|
|
@@ -43,6 +44,10 @@ var SelectSdocFileDialog = function SelectSdocFileDialog(_ref) {
|
|
|
43
44
|
_useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
|
|
44
45
|
isOpenSearch = _useState8[0],
|
|
45
46
|
setIsOpenSearch = _useState8[1];
|
|
47
|
+
var _useState9 = (0, _react.useState)(null),
|
|
48
|
+
_useState0 = (0, _slicedToArray2["default"])(_useState9, 2),
|
|
49
|
+
fileMetadataComponent = _useState0[0],
|
|
50
|
+
setFileMetadataComponent = _useState0[1];
|
|
46
51
|
var modalTitle;
|
|
47
52
|
switch (dialogType) {
|
|
48
53
|
case _constants.ELEMENT_TYPE.FILE_LINK:
|
|
@@ -61,6 +66,7 @@ var SelectSdocFileDialog = function SelectSdocFileDialog(_ref) {
|
|
|
61
66
|
break;
|
|
62
67
|
}
|
|
63
68
|
var onSelectedFile = (0, _react.useCallback)(function (fileInfo) {
|
|
69
|
+
console.log(3, fileInfo);
|
|
64
70
|
setCurrentSelectedFile(fileInfo);
|
|
65
71
|
}, []);
|
|
66
72
|
var insertFile = (0, _react.useCallback)(function (fileInfo) {
|
|
@@ -166,6 +172,15 @@ var SelectSdocFileDialog = function SelectSdocFileDialog(_ref) {
|
|
|
166
172
|
setSearchContent('');
|
|
167
173
|
}
|
|
168
174
|
}, [isOpenSearch]);
|
|
175
|
+
(0, _react.useEffect)(function () {
|
|
176
|
+
var eventBus = _seafileSdocEditor.EventBus.getInstance();
|
|
177
|
+
var unsubscribeFileMetadataComponent = eventBus.subscribe(EXTERNAL_EVENT.FILE_METADATA_COMPONENT, function (component) {
|
|
178
|
+
setFileMetadataComponent(component);
|
|
179
|
+
});
|
|
180
|
+
return function () {
|
|
181
|
+
unsubscribeFileMetadataComponent();
|
|
182
|
+
};
|
|
183
|
+
}, []);
|
|
169
184
|
return /*#__PURE__*/_react["default"].createElement(_reactstrap.Modal, {
|
|
170
185
|
isOpen: true,
|
|
171
186
|
autoFocus: true,
|
|
@@ -208,6 +223,8 @@ var SelectSdocFileDialog = function SelectSdocFileDialog(_ref) {
|
|
|
208
223
|
className: "p-0"
|
|
209
224
|
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
210
225
|
className: "sdoc-file-select-container"
|
|
226
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
227
|
+
className: "sdoc-file-select-wrapper"
|
|
211
228
|
}, /*#__PURE__*/_react["default"].createElement(_localFiles["default"], {
|
|
212
229
|
fileType: _constants.FILE_TYPE[dialogType],
|
|
213
230
|
onSelectedFile: onSelectedFile,
|
|
@@ -215,6 +232,8 @@ var SelectSdocFileDialog = function SelectSdocFileDialog(_ref) {
|
|
|
215
232
|
searchContent: searchContent,
|
|
216
233
|
isOpenSearch: isOpenSearch
|
|
217
234
|
}), /*#__PURE__*/_react["default"].createElement("div", {
|
|
235
|
+
className: "sdoc-file-metadata-wrapper"
|
|
236
|
+
}, fileMetadataComponent && /*#__PURE__*/_react["default"].createElement("fileMetadataComponent", null))), /*#__PURE__*/_react["default"].createElement("div", {
|
|
218
237
|
className: "sdoc-file-select-footer"
|
|
219
238
|
}, /*#__PURE__*/_react["default"].createElement(_reactstrap.Button, {
|
|
220
239
|
color: "secondary",
|
|
@@ -220,7 +220,7 @@ Object.defineProperty(exports, "INLINE_LEVEL_TYPES", {
|
|
|
220
220
|
return _elementType.INLINE_LEVEL_TYPES;
|
|
221
221
|
}
|
|
222
222
|
});
|
|
223
|
-
exports.INSERT_POSITION = exports.INSERT_FILE_DISPLAY_TYPE = void 0;
|
|
223
|
+
exports.INTERNAL_LINKED_TYPE = exports.INSERT_POSITION = exports.INSERT_FILE_DISPLAY_TYPE = void 0;
|
|
224
224
|
Object.defineProperty(exports, "KEYBOARD", {
|
|
225
225
|
enumerable: true,
|
|
226
226
|
get: function get() {
|
|
@@ -516,6 +516,7 @@ var LIST_TYPE_ARRAY = exports.LIST_TYPE_ARRAY = [_elementType.UNORDERED_LIST, _e
|
|
|
516
516
|
var LIST_ITEM_CORRELATION_TYPE = exports.LIST_ITEM_CORRELATION_TYPE = [_elementType.UNORDERED_LIST, _elementType.ORDERED_LIST, _elementType.LIST_ITEM];
|
|
517
517
|
var LIST_ITEM_SUPPORTED_TRANSFORMATION = exports.LIST_ITEM_SUPPORTED_TRANSFORMATION = [_elementType.UNORDERED_LIST, _elementType.ORDERED_LIST, 'left', 'center', 'right', _elementType.BLOCKQUOTE];
|
|
518
518
|
var ADD_POSITION_OFFSET_TYPE = exports.ADD_POSITION_OFFSET_TYPE = [_elementType.PARAGRAPH, _elementType.SUBTITLE, _elementType.HEADER1, _elementType.HEADER2, _elementType.HEADER3, _elementType.HEADER4, _elementType.HEADER5, _elementType.HEADER6, _elementType.CHECK_LIST_ITEM, _elementType.IMAGE_BLOCK];
|
|
519
|
+
var INTERNAL_LINKED_TYPE = exports.INTERNAL_LINKED_TYPE = [_elementType.HEADER1, _elementType.HEADER2, _elementType.HEADER3, _elementType.HEADER4, _elementType.HEADER5, _elementType.HEADER6, _elementType.IMAGE_BLOCK, _elementType.CODE_BLOCK, _elementType.BLOCKQUOTE];
|
|
519
520
|
var FILE_TYPE = exports.FILE_TYPE = (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, _elementType.FILE_LINK, 'file'), _elementType.SDOC_LINK, 'sdoc'), _elementType.VIDEO, 'video'), _elementType.WHITEBOARD, 'exdraw');
|
|
520
521
|
var FILEEXT_TYPE = exports.FILEEXT_TYPE = {
|
|
521
522
|
VIDEO: ['mp4', 'ogv', 'webm', 'mov'],
|
|
@@ -182,7 +182,7 @@ var getImageURL = exports.getImageURL = function getImageURL(data, editor) {
|
|
|
182
182
|
var assetsUrl = _context2["default"].getSetting('assetsUrl');
|
|
183
183
|
|
|
184
184
|
// If in sdoc link preview
|
|
185
|
-
var docUuid = editor.preview_docUuid;
|
|
185
|
+
var docUuid = editor && editor.preview_docUuid;
|
|
186
186
|
if (docUuid) {
|
|
187
187
|
var baseUrl = assetsUrl.split('/');
|
|
188
188
|
baseUrl[baseUrl.length - 1] = docUuid;
|
|
@@ -36,7 +36,8 @@ var Image = function Image(_ref) {
|
|
|
36
36
|
attributes = _ref.attributes,
|
|
37
37
|
children = _ref.children,
|
|
38
38
|
isSelected = _ref.isSelected,
|
|
39
|
-
t = _ref.t
|
|
39
|
+
t = _ref.t,
|
|
40
|
+
parentImageBlockId = _ref.parentImageBlockId;
|
|
40
41
|
var data = element.data,
|
|
41
42
|
_element$border_type = element.border_type,
|
|
42
43
|
border_type = _element$border_type === void 0 ? _constants3.IMAGE_BORDER_TYPE[0].type : _element$border_type;
|
|
@@ -326,6 +327,7 @@ var Image = function Image(_ref) {
|
|
|
326
327
|
imageRef: imageRef
|
|
327
328
|
}), children), !isShowImagePlaceholder && !isCopyImageError && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("span", Object.assign({
|
|
328
329
|
"data-id": element.id,
|
|
330
|
+
"data-parent-id": parentImageBlockId,
|
|
329
331
|
className: (0, _classnames["default"])('sdoc-image-wrapper', className)
|
|
330
332
|
}, attributes, {
|
|
331
333
|
contentEditable: canEditable,
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
.select-btn {
|
|
2
|
+
margin-bottom: .575rem;
|
|
3
|
+
display: flex;
|
|
4
|
+
flex-direction: row;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.select-btn .link-address-btn,
|
|
8
|
+
.select-btn .link-block-btn {
|
|
9
|
+
font-size: .875rem;
|
|
10
|
+
font-weight: 600;
|
|
11
|
+
padding-bottom: 1px;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.select-btn .link-address-btn:hover,
|
|
15
|
+
.select-btn .link-block-btn:hover {
|
|
16
|
+
cursor: pointer;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.select-btn .link-address-btn.active,
|
|
20
|
+
.select-btn .link-block-btn.active {
|
|
21
|
+
color: #ff9800;
|
|
22
|
+
border-bottom: 1.5px solid #ff9800;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.select-btn .link-address-btn {
|
|
26
|
+
margin-right: 40px;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.selected-linked-block-wrapper {
|
|
30
|
+
position: relative;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.selected-linked-block-wrapper .form-control {
|
|
34
|
+
display: flex;
|
|
35
|
+
justify-content: space-between;
|
|
36
|
+
cursor: pointer;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.selected-linked-block-wrapper .select-block-wrapper.expanded .sdoc-file-icon-toggle,
|
|
40
|
+
.selected-linked-block-wrapper .form-control.expanded .sdoc-file-icon-toggle {
|
|
41
|
+
transform: rotate(90deg);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.selected-linked-block-wrapper .sdoc-file-icon-toggle {
|
|
45
|
+
color: #9aa0ac;
|
|
46
|
+
font-size: 12px;
|
|
47
|
+
display: flex;
|
|
48
|
+
align-items: center;
|
|
49
|
+
justify-content: center;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.selected-linked-block-wrapper .selected-linked-block:not(img) {
|
|
53
|
+
width: 95%;
|
|
54
|
+
overflow-y: auto;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.selected-linked-block-wrapper .selected-linked-block .linked-block-item {
|
|
58
|
+
margin-bottom: 0 !important;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.selected-linked-block-wrapper .linked-block-item:not(img) {
|
|
62
|
+
max-height: 60px;
|
|
63
|
+
overflow-y: auto;
|
|
64
|
+
padding-top: 3px;
|
|
65
|
+
padding-bottom: 3px;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.selected-linked-block-wrapper .linked-block-item:has(img) {
|
|
69
|
+
max-height: none !important;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.selected-linked-block-wrapper .link-block-wrapper {
|
|
73
|
+
border: 1px solid rgba(0, 40, 100, 0.12);
|
|
74
|
+
max-height: 400px;
|
|
75
|
+
width: 100%;
|
|
76
|
+
height: fit-content;
|
|
77
|
+
padding: 0.75rem;
|
|
78
|
+
margin-top: 3px;
|
|
79
|
+
overflow-y: auto;
|
|
80
|
+
box-sizing: border-box;
|
|
81
|
+
position: absolute;
|
|
82
|
+
background-color: white;
|
|
83
|
+
display: flex;
|
|
84
|
+
flex-direction: column;
|
|
85
|
+
align-items: flex-start;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.link-block-wrapper .select-block-wrapper {
|
|
89
|
+
display: flex;
|
|
90
|
+
flex-direction: row;
|
|
91
|
+
align-items: center;
|
|
92
|
+
justify-content: center;
|
|
93
|
+
cursor: pointer;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.link-block-wrapper .select-block-wrapper .title {
|
|
97
|
+
margin-left: 5px;
|
|
98
|
+
color: #666;
|
|
99
|
+
font-size: 14px;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.link-block-wrapper .link-block-container {
|
|
103
|
+
width: 100%;
|
|
104
|
+
margin: 5px 0;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.link-block-wrapper .link-block-container .linked-block-item {
|
|
108
|
+
margin-bottom: 5px !important;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.selected-linked-block-wrapper img {
|
|
112
|
+
width: 160px !important;
|
|
113
|
+
height: auto !important;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.selected-linked-block-wrapper .link-block-wrapper .linked-block-item:hover {
|
|
117
|
+
background-color: rgb(245, 245, 245);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.selected-linked-block-wrapper .link-block-wrapper .dropdown-item {
|
|
121
|
+
padding: 3px 8px;
|
|
122
|
+
}
|
|
@@ -6,12 +6,20 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
8
|
exports["default"] = void 0;
|
|
9
|
+
var _regenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/regenerator"));
|
|
10
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/asyncToGenerator"));
|
|
9
11
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
|
|
10
12
|
var _react = _interopRequireWildcard(require("react"));
|
|
11
13
|
var _reactI18next = require("react-i18next");
|
|
12
14
|
var _reactstrap = require("reactstrap");
|
|
15
|
+
var _slate = require("@seafile/slate");
|
|
16
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
17
|
+
var _mdToHtml = require("../../../../../slate-convert/md-to-html");
|
|
18
|
+
var _slateToMd = _interopRequireDefault(require("../../../../../slate-convert/slate-to-md"));
|
|
19
|
+
var _constants = require("../../../../constants");
|
|
13
20
|
var _core = require("../../../../core");
|
|
14
21
|
var _helpers = require("../../helpers");
|
|
22
|
+
require("./index.css");
|
|
15
23
|
var AddLinkDialog = function AddLinkDialog(_ref) {
|
|
16
24
|
var editor = _ref.editor,
|
|
17
25
|
className = _ref.className,
|
|
@@ -36,7 +44,8 @@ var AddLinkDialog = function AddLinkDialog(_ref) {
|
|
|
36
44
|
href: ''
|
|
37
45
|
},
|
|
38
46
|
oldTitle = _ref2.title,
|
|
39
|
-
oldURL = _ref2.href
|
|
47
|
+
oldURL = _ref2.href,
|
|
48
|
+
linked_id = _ref2.linked_id;
|
|
40
49
|
var initTitle = (0, _react.useMemo)(function () {
|
|
41
50
|
return oldTitle ? oldTitle : (0, _core.getEditorString)(editor, editor.selection);
|
|
42
51
|
}, [editor, oldTitle]);
|
|
@@ -44,36 +53,68 @@ var AddLinkDialog = function AddLinkDialog(_ref) {
|
|
|
44
53
|
_useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
|
|
45
54
|
title = _useState6[0],
|
|
46
55
|
setTitle = _useState6[1];
|
|
47
|
-
var _useState7 = (0, _react.useState)(oldURL),
|
|
56
|
+
var _useState7 = (0, _react.useState)(linked_id ? '' : oldURL),
|
|
48
57
|
_useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
|
|
49
58
|
url = _useState8[0],
|
|
50
59
|
setURL = _useState8[1];
|
|
60
|
+
var _useState9 = (0, _react.useState)(linked_id ? 'block' : 'url'),
|
|
61
|
+
_useState0 = (0, _slicedToArray2["default"])(_useState9, 2),
|
|
62
|
+
activeTab = _useState0[0],
|
|
63
|
+
setActiveTab = _useState0[1];
|
|
64
|
+
var _useState1 = (0, _react.useState)(''),
|
|
65
|
+
_useState10 = (0, _slicedToArray2["default"])(_useState1, 2),
|
|
66
|
+
selectedBlockId = _useState10[0],
|
|
67
|
+
setSelectedBlockId = _useState10[1];
|
|
68
|
+
var _useState11 = (0, _react.useState)(false),
|
|
69
|
+
_useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
|
|
70
|
+
isOpenSelect = _useState12[0],
|
|
71
|
+
setIsOpenSelect = _useState12[1];
|
|
72
|
+
var _useState13 = (0, _react.useState)(false),
|
|
73
|
+
_useState14 = (0, _slicedToArray2["default"])(_useState13, 2),
|
|
74
|
+
isOpenSelectHeader = _useState14[0],
|
|
75
|
+
setIsOpenSelectHeader = _useState14[1];
|
|
76
|
+
var _useState15 = (0, _react.useState)(false),
|
|
77
|
+
_useState16 = (0, _slicedToArray2["default"])(_useState15, 2),
|
|
78
|
+
isOpenSelectImageBlock = _useState16[0],
|
|
79
|
+
setIsOpenSelectImageBlock = _useState16[1];
|
|
80
|
+
var _useState17 = (0, _react.useState)(false),
|
|
81
|
+
_useState18 = (0, _slicedToArray2["default"])(_useState17, 2),
|
|
82
|
+
isOpenSelectCodeBlock = _useState18[0],
|
|
83
|
+
setIsOpenSelectCodeBlock = _useState18[1];
|
|
84
|
+
var _useState19 = (0, _react.useState)(false),
|
|
85
|
+
_useState20 = (0, _slicedToArray2["default"])(_useState19, 2),
|
|
86
|
+
isOpenSelectBlockquote = _useState20[0],
|
|
87
|
+
setIsOpenSelectBlockquote = _useState20[1];
|
|
88
|
+
var _useState21 = (0, _react.useState)(''),
|
|
89
|
+
_useState22 = (0, _slicedToArray2["default"])(_useState21, 2),
|
|
90
|
+
htmlString = _useState22[0],
|
|
91
|
+
setHtmlString = _useState22[1];
|
|
51
92
|
var submit = (0, _react.useCallback)(function () {
|
|
52
93
|
setLinkErrorMessage('');
|
|
53
94
|
setTitleErrorMessage('');
|
|
54
|
-
if (!url) {
|
|
55
|
-
setLinkErrorMessage(t('
|
|
95
|
+
if (!url && !selectedBlockId) {
|
|
96
|
+
setLinkErrorMessage(t('The_link_address_or_link_block_is_required'));
|
|
56
97
|
return;
|
|
57
98
|
}
|
|
58
99
|
if (!title) {
|
|
59
100
|
setTitleErrorMessage(t('The_link_title_is_required'));
|
|
60
101
|
return;
|
|
61
102
|
}
|
|
62
|
-
if ((0, _helpers.checkLink)(url)) {
|
|
103
|
+
if (url && (0, _helpers.checkLink)(url)) {
|
|
63
104
|
setLinkErrorMessage(t('The_link_address_is_invalid'));
|
|
64
105
|
return;
|
|
65
106
|
}
|
|
66
107
|
var isEdit = oldURL || oldTitle;
|
|
67
108
|
if (isEdit) {
|
|
68
|
-
(0, _helpers.updateLink)(editor, title, url);
|
|
109
|
+
(0, _helpers.updateLink)(editor, title, url, selectedBlockId);
|
|
69
110
|
} else {
|
|
70
|
-
(0, _helpers.insertLink)(editor, title, url, insertPosition, slateNode);
|
|
111
|
+
(0, _helpers.insertLink)(editor, title, url, insertPosition, slateNode, selectedBlockId);
|
|
71
112
|
}
|
|
72
113
|
handleSubmit && handleSubmit();
|
|
73
114
|
closeDialog();
|
|
74
115
|
|
|
75
116
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
76
|
-
}, [editor, url, title, oldTitle, oldURL, insertPosition]);
|
|
117
|
+
}, [editor, url, title, oldTitle, oldURL, insertPosition, selectedBlockId]);
|
|
77
118
|
var onKeyDown = (0, _react.useCallback)(function (event) {
|
|
78
119
|
if (event.keyCode === 13) {
|
|
79
120
|
event.preventDefault();
|
|
@@ -87,6 +128,7 @@ var AddLinkDialog = function AddLinkDialog(_ref) {
|
|
|
87
128
|
var value = event.target.value.trim();
|
|
88
129
|
if (value === url) return;
|
|
89
130
|
setURL(value);
|
|
131
|
+
setSelectedBlockId('');
|
|
90
132
|
}, [url]);
|
|
91
133
|
var handleTitleChange = (0, _react.useCallback)(function (event) {
|
|
92
134
|
var value = event.target.value;
|
|
@@ -102,6 +144,74 @@ var AddLinkDialog = function AddLinkDialog(_ref) {
|
|
|
102
144
|
"aria-hidden": "true"
|
|
103
145
|
}));
|
|
104
146
|
}, [closeDialog]);
|
|
147
|
+
var handleOnChangeBlock = function handleOnChangeBlock(e) {
|
|
148
|
+
var block = e.target.closest('.linked-block-item');
|
|
149
|
+
if (block) {
|
|
150
|
+
var clone = block.cloneNode(true);
|
|
151
|
+
var displayContainer = document.getElementById('selected-block-display');
|
|
152
|
+
displayContainer.innerHTML = '';
|
|
153
|
+
displayContainer.appendChild(clone);
|
|
154
|
+
var nodeId = block.dataset.id;
|
|
155
|
+
setSelectedBlockId(nodeId);
|
|
156
|
+
setURL('');
|
|
157
|
+
setIsOpenSelect(false);
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
(0, _react.useEffect)(function () {
|
|
161
|
+
if (!linked_id) return;
|
|
162
|
+
var timer = setTimeout(function () {
|
|
163
|
+
var displayContainer = document.getElementById('selected-block-display');
|
|
164
|
+
if (!displayContainer) return;
|
|
165
|
+
|
|
166
|
+
// 'data-parent-id' check for linked image block node
|
|
167
|
+
var linkedDomNode = document.querySelector("[data-id=\"".concat(linked_id, "\"]")) || document.querySelector("[data-parent-id=\"".concat(linked_id, "\"]"));
|
|
168
|
+
if (linkedDomNode) {
|
|
169
|
+
var clone = linkedDomNode.cloneNode(true);
|
|
170
|
+
displayContainer.innerHTML = '';
|
|
171
|
+
displayContainer.appendChild(clone);
|
|
172
|
+
}
|
|
173
|
+
}, 0);
|
|
174
|
+
return function () {
|
|
175
|
+
return clearTimeout(timer);
|
|
176
|
+
};
|
|
177
|
+
}, []);
|
|
178
|
+
(0, _react.useEffect)(function () {
|
|
179
|
+
var genHtml = /*#__PURE__*/function () {
|
|
180
|
+
var _ref3 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/(0, _regenerator2["default"])().m(function _callee() {
|
|
181
|
+
var list, mdValue, ids, processor, file;
|
|
182
|
+
return (0, _regenerator2["default"])().w(function (_context) {
|
|
183
|
+
while (1) switch (_context.n) {
|
|
184
|
+
case 0:
|
|
185
|
+
list = editor.children.filter(function (node) {
|
|
186
|
+
return _slate.Element.isElement(node) && _constants.INTERNAL_LINKED_TYPE.includes(node.type);
|
|
187
|
+
});
|
|
188
|
+
mdValue = list.map(function (node) {
|
|
189
|
+
return "<!--".concat(node.id, "-->\n").concat((0, _slateToMd["default"])([node]));
|
|
190
|
+
}).join('\n\n');
|
|
191
|
+
ids = list.map(function (n) {
|
|
192
|
+
return n.id;
|
|
193
|
+
});
|
|
194
|
+
processor = (0, _mdToHtml.createProcessor)(ids, 'linked-block-item');
|
|
195
|
+
_context.n = 1;
|
|
196
|
+
return processor.process(mdValue);
|
|
197
|
+
case 1:
|
|
198
|
+
file = _context.v;
|
|
199
|
+
setHtmlString(String(file));
|
|
200
|
+
case 2:
|
|
201
|
+
return _context.a(2);
|
|
202
|
+
}
|
|
203
|
+
}, _callee);
|
|
204
|
+
}));
|
|
205
|
+
return function genHtml() {
|
|
206
|
+
return _ref3.apply(this, arguments);
|
|
207
|
+
};
|
|
208
|
+
}();
|
|
209
|
+
genHtml();
|
|
210
|
+
}, [editor.children]);
|
|
211
|
+
var headersHTML = (0, _helpers.parseHtmlString)(htmlString, 'h1,h2,h3,h4,h5,h6');
|
|
212
|
+
var imagesHTML = (0, _helpers.parseHtmlString)(htmlString, 'img');
|
|
213
|
+
var codeBlockHTML = (0, _helpers.parseHtmlString)(htmlString, 'pre');
|
|
214
|
+
var blockquoteHTML = (0, _helpers.parseHtmlString)(htmlString, 'blockquote');
|
|
105
215
|
return /*#__PURE__*/_react["default"].createElement(_reactstrap.Modal, {
|
|
106
216
|
isOpen: true,
|
|
107
217
|
autoFocus: false,
|
|
@@ -113,21 +223,6 @@ var AddLinkDialog = function AddLinkDialog(_ref) {
|
|
|
113
223
|
close: close
|
|
114
224
|
}, t('Insert_link')), /*#__PURE__*/_react["default"].createElement(_reactstrap.ModalBody, null, /*#__PURE__*/_react["default"].createElement(_react.Fragment, null, /*#__PURE__*/_react["default"].createElement("div", {
|
|
115
225
|
className: "form-group"
|
|
116
|
-
}, /*#__PURE__*/_react["default"].createElement(_reactstrap.Label, {
|
|
117
|
-
"for": "addLink"
|
|
118
|
-
}, t('Link_address')), /*#__PURE__*/_react["default"].createElement("input", {
|
|
119
|
-
onKeyDown: onKeyDown,
|
|
120
|
-
autoFocus: true,
|
|
121
|
-
type: "url",
|
|
122
|
-
className: "form-control",
|
|
123
|
-
id: "addLink",
|
|
124
|
-
value: url || '',
|
|
125
|
-
onChange: handleUrlChange
|
|
126
|
-
}), linkErrorMessage && /*#__PURE__*/_react["default"].createElement(_reactstrap.Alert, {
|
|
127
|
-
color: "danger",
|
|
128
|
-
className: "mt-2"
|
|
129
|
-
}, t(linkErrorMessage))), /*#__PURE__*/_react["default"].createElement("div", {
|
|
130
|
-
className: "form-group"
|
|
131
226
|
}, /*#__PURE__*/_react["default"].createElement(_reactstrap.Label, {
|
|
132
227
|
"for": "addTitle"
|
|
133
228
|
}, t('Link_title')), /*#__PURE__*/_react["default"].createElement("input", {
|
|
@@ -140,7 +235,128 @@ var AddLinkDialog = function AddLinkDialog(_ref) {
|
|
|
140
235
|
}), titleErrorMessage && /*#__PURE__*/_react["default"].createElement(_reactstrap.Alert, {
|
|
141
236
|
color: "danger",
|
|
142
237
|
className: "mt-2"
|
|
143
|
-
}, t(titleErrorMessage)))
|
|
238
|
+
}, t(titleErrorMessage))), /*#__PURE__*/_react["default"].createElement("div", {
|
|
239
|
+
className: "select-btn"
|
|
240
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
241
|
+
className: (0, _classnames["default"])('link-address-btn', {
|
|
242
|
+
'active': activeTab === 'url'
|
|
243
|
+
}),
|
|
244
|
+
onClick: function onClick() {
|
|
245
|
+
return setActiveTab('url');
|
|
246
|
+
}
|
|
247
|
+
}, t('Link_address')), /*#__PURE__*/_react["default"].createElement("div", {
|
|
248
|
+
className: (0, _classnames["default"])('link-block-btn', {
|
|
249
|
+
'active': activeTab === 'block'
|
|
250
|
+
}),
|
|
251
|
+
onClick: function onClick() {
|
|
252
|
+
return setActiveTab('block');
|
|
253
|
+
}
|
|
254
|
+
}, t('Link_block'))), activeTab === 'url' && /*#__PURE__*/_react["default"].createElement("div", {
|
|
255
|
+
className: "form-group"
|
|
256
|
+
}, /*#__PURE__*/_react["default"].createElement("input", {
|
|
257
|
+
onKeyDown: onKeyDown,
|
|
258
|
+
autoFocus: true,
|
|
259
|
+
type: "url",
|
|
260
|
+
className: "form-control",
|
|
261
|
+
id: "addLink",
|
|
262
|
+
value: url || '',
|
|
263
|
+
onChange: handleUrlChange
|
|
264
|
+
}), linkErrorMessage && /*#__PURE__*/_react["default"].createElement(_reactstrap.Alert, {
|
|
265
|
+
color: "danger",
|
|
266
|
+
className: "mt-2"
|
|
267
|
+
}, t(linkErrorMessage))), activeTab === 'block' && /*#__PURE__*/_react["default"].createElement("div", {
|
|
268
|
+
className: "form-group selected-linked-block-wrapper"
|
|
269
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
270
|
+
className: (0, _classnames["default"])('form-control', {
|
|
271
|
+
'expanded': isOpenSelect
|
|
272
|
+
}),
|
|
273
|
+
onClick: function onClick() {
|
|
274
|
+
setIsOpenSelect(!isOpenSelect);
|
|
275
|
+
}
|
|
276
|
+
}, /*#__PURE__*/_react["default"].createElement("span", {
|
|
277
|
+
id: "selected-block-display",
|
|
278
|
+
className: "selected-linked-block"
|
|
279
|
+
}), /*#__PURE__*/_react["default"].createElement("i", {
|
|
280
|
+
className: "sdoc-file-icon sdoc-file-icon-toggle sdocfont sdoc-right-slide"
|
|
281
|
+
})), isOpenSelect && /*#__PURE__*/_react["default"].createElement("div", {
|
|
282
|
+
className: "link-block-wrapper"
|
|
283
|
+
}, headersHTML && /*#__PURE__*/_react["default"].createElement("div", {
|
|
284
|
+
className: (0, _classnames["default"])('select-block-wrapper', {
|
|
285
|
+
'expanded': isOpenSelectHeader
|
|
286
|
+
}),
|
|
287
|
+
onClick: function onClick(e) {
|
|
288
|
+
return setIsOpenSelectHeader(!isOpenSelectHeader);
|
|
289
|
+
}
|
|
290
|
+
}, /*#__PURE__*/_react["default"].createElement("i", {
|
|
291
|
+
className: "sdoc-file-icon sdoc-file-icon-toggle sdocfont sdoc-right-slide"
|
|
292
|
+
}), /*#__PURE__*/_react["default"].createElement("div", {
|
|
293
|
+
className: "title"
|
|
294
|
+
}, t('Header'))), isOpenSelectHeader && /*#__PURE__*/_react["default"].createElement("div", {
|
|
295
|
+
className: "link-block-container",
|
|
296
|
+
dangerouslySetInnerHTML: {
|
|
297
|
+
__html: headersHTML
|
|
298
|
+
},
|
|
299
|
+
onClick: function onClick(e) {
|
|
300
|
+
return handleOnChangeBlock(e);
|
|
301
|
+
}
|
|
302
|
+
}), imagesHTML && /*#__PURE__*/_react["default"].createElement("div", {
|
|
303
|
+
className: (0, _classnames["default"])('select-block-wrapper', {
|
|
304
|
+
'expanded': isOpenSelectImageBlock
|
|
305
|
+
}),
|
|
306
|
+
onClick: function onClick(e) {
|
|
307
|
+
return setIsOpenSelectImageBlock(!isOpenSelectImageBlock);
|
|
308
|
+
}
|
|
309
|
+
}, /*#__PURE__*/_react["default"].createElement("i", {
|
|
310
|
+
className: "sdoc-file-icon sdoc-file-icon-toggle sdocfont sdoc-right-slide"
|
|
311
|
+
}), /*#__PURE__*/_react["default"].createElement("div", {
|
|
312
|
+
className: "title"
|
|
313
|
+
}, t('Image'))), isOpenSelectImageBlock && /*#__PURE__*/_react["default"].createElement("div", {
|
|
314
|
+
className: "link-block-container",
|
|
315
|
+
dangerouslySetInnerHTML: {
|
|
316
|
+
__html: imagesHTML
|
|
317
|
+
},
|
|
318
|
+
onClick: function onClick(e) {
|
|
319
|
+
return handleOnChangeBlock(e);
|
|
320
|
+
}
|
|
321
|
+
}), codeBlockHTML && /*#__PURE__*/_react["default"].createElement("div", {
|
|
322
|
+
className: (0, _classnames["default"])('select-block-wrapper', {
|
|
323
|
+
'expanded': isOpenSelectCodeBlock
|
|
324
|
+
}),
|
|
325
|
+
onClick: function onClick(e) {
|
|
326
|
+
return setIsOpenSelectCodeBlock(!isOpenSelectCodeBlock);
|
|
327
|
+
}
|
|
328
|
+
}, /*#__PURE__*/_react["default"].createElement("i", {
|
|
329
|
+
className: "sdoc-file-icon sdoc-file-icon-toggle sdocfont sdoc-right-slide"
|
|
330
|
+
}), /*#__PURE__*/_react["default"].createElement("div", {
|
|
331
|
+
className: "title"
|
|
332
|
+
}, t('Code_block'))), isOpenSelectCodeBlock && /*#__PURE__*/_react["default"].createElement("div", {
|
|
333
|
+
className: "link-block-container",
|
|
334
|
+
dangerouslySetInnerHTML: {
|
|
335
|
+
__html: codeBlockHTML
|
|
336
|
+
},
|
|
337
|
+
onClick: function onClick(e) {
|
|
338
|
+
return handleOnChangeBlock(e);
|
|
339
|
+
}
|
|
340
|
+
}), blockquoteHTML && /*#__PURE__*/_react["default"].createElement("div", {
|
|
341
|
+
className: (0, _classnames["default"])('select-block-wrapper', {
|
|
342
|
+
'expanded': isOpenSelectBlockquote
|
|
343
|
+
}),
|
|
344
|
+
onClick: function onClick(e) {
|
|
345
|
+
return setIsOpenSelectBlockquote(!isOpenSelectBlockquote);
|
|
346
|
+
}
|
|
347
|
+
}, /*#__PURE__*/_react["default"].createElement("i", {
|
|
348
|
+
className: "sdoc-file-icon sdoc-file-icon-toggle sdocfont sdoc-right-slide"
|
|
349
|
+
}), /*#__PURE__*/_react["default"].createElement("div", {
|
|
350
|
+
className: "title"
|
|
351
|
+
}, t('Quote'))), isOpenSelectBlockquote && /*#__PURE__*/_react["default"].createElement("div", {
|
|
352
|
+
className: "link-block-container",
|
|
353
|
+
dangerouslySetInnerHTML: {
|
|
354
|
+
__html: blockquoteHTML
|
|
355
|
+
},
|
|
356
|
+
onClick: function onClick(e) {
|
|
357
|
+
return handleOnChangeBlock(e);
|
|
358
|
+
}
|
|
359
|
+
}))))), /*#__PURE__*/_react["default"].createElement(_reactstrap.ModalFooter, null, /*#__PURE__*/_react["default"].createElement(_reactstrap.Button, {
|
|
144
360
|
color: "secondary",
|
|
145
361
|
onClick: closeDialog
|
|
146
362
|
}, t('Cancel')), /*#__PURE__*/_react["default"].createElement(_reactstrap.Button, {
|
|
@@ -4,7 +4,8 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.upsertLinkText = exports.updateLink = exports.unWrapLinkNode = exports.isWeChat = exports.isSdocFile = exports.isMenuDisabled = exports.isLinkToolBarActive = exports.insertLink = exports.getMenuPosition = exports.getLinkType = exports.genLinkNode = exports.checkLink = void 0;
|
|
7
|
+
exports.upsertLinkText = exports.updateLink = exports.unWrapLinkNode = exports.parseHtmlString = exports.isWeChat = exports.isSdocFile = exports.isNodeInCurrentView = exports.isMenuDisabled = exports.isLinkToolBarActive = exports.insertLink = exports.getMenuPosition = exports.getLinkType = exports.genLinkNode = exports.checkLink = void 0;
|
|
8
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/toConsumableArray"));
|
|
8
9
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
|
|
9
10
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
|
|
10
11
|
var _slate = require("@seafile/slate");
|
|
@@ -31,12 +32,13 @@ var checkLink = exports.checkLink = function checkLink(url) {
|
|
|
31
32
|
}
|
|
32
33
|
return false;
|
|
33
34
|
};
|
|
34
|
-
var genLinkNode = exports.genLinkNode = function genLinkNode(url, text) {
|
|
35
|
+
var genLinkNode = exports.genLinkNode = function genLinkNode(url, text, nodeId) {
|
|
35
36
|
var linkNode = {
|
|
36
37
|
id: _slugid["default"].nice(),
|
|
37
38
|
type: 'link',
|
|
38
39
|
href: url,
|
|
39
40
|
title: text,
|
|
41
|
+
linked_id: nodeId || '',
|
|
40
42
|
children: [{
|
|
41
43
|
id: _slugid["default"].nice(),
|
|
42
44
|
text: text || ''
|
|
@@ -61,9 +63,13 @@ var getLinkType = exports.getLinkType = function getLinkType(editor) {
|
|
|
61
63
|
var insertLink = exports.insertLink = function insertLink(editor, title, url) {
|
|
62
64
|
var position = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : _constants.INSERT_POSITION.CURRENT;
|
|
63
65
|
var slateNode = arguments.length > 4 ? arguments[4] : undefined;
|
|
66
|
+
var linkedNodeId = arguments.length > 5 ? arguments[5] : undefined;
|
|
64
67
|
if (position === _constants.INSERT_POSITION.CURRENT && isMenuDisabled(editor)) return;
|
|
65
|
-
if (!title || !url) return;
|
|
68
|
+
if (!title || !url && !linkedNodeId) return;
|
|
66
69
|
var linkNode = genLinkNode(url, title);
|
|
70
|
+
if (linkedNodeId) {
|
|
71
|
+
linkNode = genLinkNode(url, title, linkedNodeId);
|
|
72
|
+
}
|
|
67
73
|
if (position === _constants.INSERT_POSITION.AFTER) {
|
|
68
74
|
var path = _slate.Editor.path(editor, editor.selection);
|
|
69
75
|
if (slateNode && (slateNode === null || slateNode === void 0 ? void 0 : slateNode.type) === _constants.LIST_ITEM) {
|
|
@@ -107,7 +113,7 @@ var insertLink = exports.insertLink = function insertLink(editor, title, url) {
|
|
|
107
113
|
edge: 'end'
|
|
108
114
|
});
|
|
109
115
|
};
|
|
110
|
-
var updateLink = exports.updateLink = function updateLink(editor, newText, newUrl) {
|
|
116
|
+
var updateLink = exports.updateLink = function updateLink(editor, newText, newUrl, linkedNodeId) {
|
|
111
117
|
// Update children
|
|
112
118
|
var linkAbove = (0, _core.getAboveNode)(editor, {
|
|
113
119
|
match: {
|
|
@@ -118,10 +124,25 @@ var updateLink = exports.updateLink = function updateLink(editor, newText, newUr
|
|
|
118
124
|
var _ref = linkAbove[0] || {},
|
|
119
125
|
oldUrl = _ref.href,
|
|
120
126
|
oldText = _ref.title;
|
|
121
|
-
if (
|
|
127
|
+
if (linkedNodeId) {
|
|
128
|
+
_slate.Transforms.setNodes(editor, {
|
|
129
|
+
linked_id: linkedNodeId
|
|
130
|
+
}, {
|
|
131
|
+
at: linkAbove[1]
|
|
132
|
+
});
|
|
133
|
+
if (oldText !== newText) {
|
|
134
|
+
_slate.Transforms.setNodes(editor, {
|
|
135
|
+
title: newText
|
|
136
|
+
}, {
|
|
137
|
+
at: linkAbove[1]
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
if (!linkedNodeId && (oldUrl !== newUrl || oldText !== newText)) {
|
|
122
142
|
_slate.Transforms.setNodes(editor, {
|
|
123
143
|
href: newUrl,
|
|
124
|
-
title: newText
|
|
144
|
+
title: newText,
|
|
145
|
+
linked_id: ''
|
|
125
146
|
}, {
|
|
126
147
|
at: linkAbove[1]
|
|
127
148
|
});
|
|
@@ -222,4 +243,23 @@ var isLinkToolBarActive = exports.isLinkToolBarActive = function isLinkToolBarAc
|
|
|
222
243
|
nodeEntry = _Editor$nodes6[0];
|
|
223
244
|
if (nodeEntry) return true;
|
|
224
245
|
return false;
|
|
246
|
+
};
|
|
247
|
+
var isNodeInCurrentView = exports.isNodeInCurrentView = function isNodeInCurrentView(domNode) {
|
|
248
|
+
var rect = domNode.getBoundingClientRect();
|
|
249
|
+
return rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth);
|
|
250
|
+
};
|
|
251
|
+
var parseHtmlString = exports.parseHtmlString = function parseHtmlString(htmlString, targetType) {
|
|
252
|
+
var parser = new DOMParser();
|
|
253
|
+
var doc = parser.parseFromString(htmlString, 'text/html');
|
|
254
|
+
var resultHtml;
|
|
255
|
+
if (targetType == 'img') {
|
|
256
|
+
resultHtml = (0, _toConsumableArray2["default"])(doc.querySelectorAll('p:has(img)')).map(function (p) {
|
|
257
|
+
return p.outerHTML;
|
|
258
|
+
}).join('');
|
|
259
|
+
} else {
|
|
260
|
+
resultHtml = (0, _toConsumableArray2["default"])(doc.querySelectorAll(targetType)).map(function (html) {
|
|
261
|
+
return html.outerHTML;
|
|
262
|
+
}).join('');
|
|
263
|
+
}
|
|
264
|
+
return resultHtml;
|
|
225
265
|
};
|
|
@@ -10,6 +10,7 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm
|
|
|
10
10
|
var _react = _interopRequireWildcard(require("react"));
|
|
11
11
|
var _reactDom = require("react-dom");
|
|
12
12
|
var _reactI18next = require("react-i18next");
|
|
13
|
+
var _slate = require("@seafile/slate");
|
|
13
14
|
var _slateReact = require("@seafile/slate-react");
|
|
14
15
|
var _tooltip = _interopRequireDefault(require("../../../../components/tooltip"));
|
|
15
16
|
var _helpers = require("../helpers");
|
|
@@ -23,6 +24,7 @@ var LinkHover = function LinkHover(_ref) {
|
|
|
23
24
|
var readOnly = (0, _slateReact.useReadOnly)();
|
|
24
25
|
var _useTranslation = (0, _reactI18next.useTranslation)('sdoc-editor'),
|
|
25
26
|
t = _useTranslation.t;
|
|
27
|
+
var linked_id = element.linked_id;
|
|
26
28
|
var _useState = (0, _react.useState)(false),
|
|
27
29
|
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
28
30
|
isShowTooltip = _useState2[0],
|
|
@@ -39,11 +41,43 @@ var LinkHover = function LinkHover(_ref) {
|
|
|
39
41
|
location.href = element.href;
|
|
40
42
|
}
|
|
41
43
|
}, [element.href]);
|
|
44
|
+
var handleOnClick = (0, _react.useCallback)(function (event) {
|
|
45
|
+
event.stopPropagation();
|
|
46
|
+
if (!linked_id) return;
|
|
47
|
+
var _Editor$nodes = _slate.Editor.nodes(editor, {
|
|
48
|
+
at: [],
|
|
49
|
+
match: function match(n) {
|
|
50
|
+
return n.id === linked_id;
|
|
51
|
+
}
|
|
52
|
+
}),
|
|
53
|
+
_Editor$nodes2 = (0, _slicedToArray2["default"])(_Editor$nodes, 1),
|
|
54
|
+
linkedNodeEntry = _Editor$nodes2[0];
|
|
55
|
+
if (linkedNodeEntry) {
|
|
56
|
+
var _linkedNodeEntry = (0, _slicedToArray2["default"])(linkedNodeEntry, 2),
|
|
57
|
+
node = _linkedNodeEntry[0],
|
|
58
|
+
path = _linkedNodeEntry[1];
|
|
59
|
+
var linkedDomNode = _slateReact.ReactEditor.toDOMNode(editor, node);
|
|
60
|
+
linkedDomNode.classList.add('linked-block-highlight-overlay');
|
|
61
|
+
_slate.Transforms.setNodes(editor, {
|
|
62
|
+
linked_block: true
|
|
63
|
+
}, {
|
|
64
|
+
at: path
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
// Scroll linked node to view if not in current view
|
|
68
|
+
if (!(0, _helpers.isNodeInCurrentView)(linkedDomNode)) {
|
|
69
|
+
linkedDomNode.scrollIntoView();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}, [linked_id]);
|
|
42
73
|
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/(0, _reactDom.createPortal)(/*#__PURE__*/_react["default"].createElement("div", {
|
|
43
74
|
id: "link-op-menu",
|
|
44
75
|
className: "link-op-menu",
|
|
45
76
|
style: menuPosition
|
|
46
|
-
}, /*#__PURE__*/_react["default"].createElement("span", {
|
|
77
|
+
}, linked_id ? /*#__PURE__*/_react["default"].createElement("span", {
|
|
78
|
+
className: "link-op-menu-link",
|
|
79
|
+
onClick: handleOnClick
|
|
80
|
+
}, t('Go_to_link')) : /*#__PURE__*/_react["default"].createElement("span", {
|
|
47
81
|
target: "_blank",
|
|
48
82
|
rel: "noopener noreferrer",
|
|
49
83
|
className: "link-op-menu-link",
|
|
@@ -39,18 +39,18 @@ var withLink = function withLink(editor) {
|
|
|
39
39
|
};
|
|
40
40
|
newEditor.insertData = /*#__PURE__*/function () {
|
|
41
41
|
var _ref = (0, _asyncToGenerator2["default"])(/*#__PURE__*/(0, _regenerator2["default"])().m(function _callee(data) {
|
|
42
|
-
var text, res, fileName, fileUuid, link, _link, _link2, _Editor$next, _Editor$next2, focusPath, focusPoint, _t;
|
|
42
|
+
var text, res, fileName, fileUuid, url, linkedNodeId, title, params, link, _link, _link2, _Editor$next, _Editor$next2, focusPath, focusPoint, _t;
|
|
43
43
|
return (0, _regenerator2["default"])().w(function (_context) {
|
|
44
44
|
while (1) switch (_context.p = _context.n) {
|
|
45
45
|
case 0:
|
|
46
46
|
// Paste link content
|
|
47
47
|
text = data.getData('text/plain'); // Internal link, insert sdoc file link
|
|
48
48
|
if (!((0, _isUrl["default"])(text) && !(0, _utils.isImage)(text))) {
|
|
49
|
-
_context.n =
|
|
49
|
+
_context.n = 10;
|
|
50
50
|
break;
|
|
51
51
|
}
|
|
52
52
|
if (!(0, _utils.isSameDomain)(text, _context2["default"].getSetting('serviceUrl'))) {
|
|
53
|
-
_context.n =
|
|
53
|
+
_context.n = 8;
|
|
54
54
|
break;
|
|
55
55
|
}
|
|
56
56
|
_context.p = 1;
|
|
@@ -58,39 +58,59 @@ var withLink = function withLink(editor) {
|
|
|
58
58
|
return _context2["default"].getLinkFilesInfo([text]);
|
|
59
59
|
case 2:
|
|
60
60
|
res = _context.v;
|
|
61
|
-
if ((0, _helpers2.isSdocFile)(res, text)) {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
61
|
+
if (!(0, _helpers2.isSdocFile)(res, text)) {
|
|
62
|
+
_context.n = 3;
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
fileName = res.data.files_info[text].name;
|
|
66
|
+
fileUuid = res.data.files_info[text].file_uuid;
|
|
67
|
+
(0, _helpers.insertSdocFileLink)(editor, fileName, fileUuid);
|
|
68
|
+
_context.n = 5;
|
|
69
|
+
break;
|
|
70
|
+
case 3:
|
|
71
|
+
url = new URL(text);
|
|
72
|
+
linkedNodeId = url.hash.replace(/^#/, '');
|
|
73
|
+
if (!(editor.selection && !_slate.Range.isCollapsed(editor.selection))) {
|
|
74
|
+
_context.n = 4;
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
title = (0, _core.getEditorString)(editor, editor.selection);
|
|
78
|
+
(0, _helpers2.insertLink)(editor, title, text, _constants2.INSERT_POSITION.CURRENT, null, linkedNodeId);
|
|
79
|
+
return _context.a(2);
|
|
80
|
+
case 4:
|
|
81
|
+
params = new URLSearchParams(url.search);
|
|
82
|
+
if (params.get('from') === 'copy-block') {
|
|
83
|
+
link = (0, _helpers2.genLinkNode)(text, text, linkedNodeId);
|
|
65
84
|
} else {
|
|
66
85
|
link = (0, _helpers2.genLinkNode)(text, text);
|
|
67
|
-
_slate.Transforms.insertNodes(newEditor, link);
|
|
68
86
|
}
|
|
69
|
-
|
|
87
|
+
_slate.Transforms.insertNodes(newEditor, link);
|
|
88
|
+
case 5:
|
|
89
|
+
_context.n = 7;
|
|
70
90
|
break;
|
|
71
|
-
case
|
|
72
|
-
_context.p =
|
|
91
|
+
case 6:
|
|
92
|
+
_context.p = 6;
|
|
73
93
|
_t = _context.v;
|
|
74
94
|
_link = (0, _helpers2.genLinkNode)(text, text);
|
|
75
95
|
_slate.Transforms.insertNodes(newEditor, _link);
|
|
76
|
-
case
|
|
77
|
-
_context.n =
|
|
96
|
+
case 7:
|
|
97
|
+
_context.n = 9;
|
|
78
98
|
break;
|
|
79
|
-
case
|
|
99
|
+
case 8:
|
|
80
100
|
_link2 = (0, _helpers2.genLinkNode)(text, text);
|
|
81
101
|
_slate.Transforms.insertNodes(newEditor, _link2);
|
|
82
|
-
case
|
|
102
|
+
case 9:
|
|
83
103
|
// Void merging text from link
|
|
84
104
|
_Editor$next = _slate.Editor.next(newEditor), _Editor$next2 = (0, _slicedToArray2["default"])(_Editor$next, 2), focusPath = _Editor$next2[1];
|
|
85
105
|
focusPoint = _slate.Editor.start(newEditor, focusPath);
|
|
86
106
|
_slate.Transforms.select(newEditor, focusPoint);
|
|
87
107
|
return _context.a(2);
|
|
88
|
-
case
|
|
108
|
+
case 10:
|
|
89
109
|
insertData(data);
|
|
90
|
-
case
|
|
110
|
+
case 11:
|
|
91
111
|
return _context.a(2);
|
|
92
112
|
}
|
|
93
|
-
}, _callee, null, [[1,
|
|
113
|
+
}, _callee, null, [[1, 6]]);
|
|
94
114
|
}));
|
|
95
115
|
return function (_x) {
|
|
96
116
|
return _ref.apply(this, arguments);
|
|
@@ -119,6 +119,10 @@ var CustomRenderElement = function CustomRenderElement(props) {
|
|
|
119
119
|
{
|
|
120
120
|
var _editor$element_comme;
|
|
121
121
|
var _parentNode = (0, _core.getParentNode)(editor.children, element.id);
|
|
122
|
+
var parentImageBlockId = '';
|
|
123
|
+
if (_parentNode.type === _constants2.IMAGE_BLOCK) {
|
|
124
|
+
parentImageBlockId = _parentNode.id;
|
|
125
|
+
}
|
|
122
126
|
var comments = ((_editor$element_comme = editor.element_comments_map) === null || _editor$element_comme === void 0 ? void 0 : _editor$element_comme[_parentNode.id]) || [];
|
|
123
127
|
var unresolvedComments = comments && comments.filter(function (item) {
|
|
124
128
|
return !item.resolved;
|
|
@@ -130,7 +134,8 @@ var CustomRenderElement = function CustomRenderElement(props) {
|
|
|
130
134
|
var _ImagePlugin$renderEl = (0, _slicedToArray2["default"])(_plugins.ImagePlugin.renderElements, 1),
|
|
131
135
|
renderImage = _ImagePlugin$renderEl[0];
|
|
132
136
|
return renderImage((0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, props), {}, {
|
|
133
|
-
leaf: leaf
|
|
137
|
+
leaf: leaf,
|
|
138
|
+
parentImageBlockId: parentImageBlockId
|
|
134
139
|
}), editor);
|
|
135
140
|
}
|
|
136
141
|
case _constants2.IMAGE_BLOCK:
|
|
@@ -74,10 +74,10 @@ var SideMenu = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
|
74
74
|
(0, _helpers.onDeleteNode)(editor, slateNode);
|
|
75
75
|
onReset();
|
|
76
76
|
}, [editor, onReset, slateNode]);
|
|
77
|
-
var
|
|
77
|
+
var onCopyBlockLink = (0, _react.useCallback)(function () {
|
|
78
78
|
var serviceUrl = _context["default"].getSetting('serviceUrl');
|
|
79
79
|
var sdocUuid = _context["default"].getSetting('docUuid');
|
|
80
|
-
var href = serviceUrl + "/smart-link/".concat(sdocUuid, "
|
|
80
|
+
var href = serviceUrl + "/smart-link/".concat(sdocUuid, "/?from=copy-block#").concat(slateNode.id);
|
|
81
81
|
(0, _copyToClipboard["default"])(href);
|
|
82
82
|
_toast["default"].success(t('Copied'), {
|
|
83
83
|
hasCloseButton: false,
|
|
@@ -227,12 +227,12 @@ var SideMenu = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
|
227
227
|
slateNode: slateNode
|
|
228
228
|
})), !insertBelowMenuSearchMap['searching'] && /*#__PURE__*/_react["default"].createElement("div", {
|
|
229
229
|
className: "sdoc-dropdown-menu-divider"
|
|
230
|
-
}),
|
|
230
|
+
}), _constants.INTERNAL_LINKED_TYPE.includes(slateNode === null || slateNode === void 0 ? void 0 : slateNode.type) && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_dropdownMenuItem["default"], {
|
|
231
231
|
menuConfig: {
|
|
232
232
|
text: 'Copy_link_of_section',
|
|
233
233
|
iconClass: 'sdocfont sdoc-link'
|
|
234
234
|
},
|
|
235
|
-
onClick:
|
|
235
|
+
onClick: onCopyBlockLink,
|
|
236
236
|
isHidden: !otherOperatonsMenuSearchMap['COPY_LINK_OF_SECTION']
|
|
237
237
|
}), !otherOperatonsMenuSearchMap['searching'] && /*#__PURE__*/_react["default"].createElement("div", {
|
|
238
238
|
className: "sdoc-dropdown-menu-divider"
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.rehypeAddDataId = void 0;
|
|
7
|
+
var _unistUtilVisit = require("unist-util-visit");
|
|
8
|
+
var _helpers = require("../../extension/plugins/image/helpers");
|
|
9
|
+
var rehypeAddDataId = exports.rehypeAddDataId = function rehypeAddDataId() {
|
|
10
|
+
var ids = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
11
|
+
var className = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
12
|
+
return function (tree) {
|
|
13
|
+
var index = 0;
|
|
14
|
+
(0, _unistUtilVisit.visit)(tree, 'element', function (node, _, parent) {
|
|
15
|
+
var _node$properties;
|
|
16
|
+
if (parent.type === 'root' && ids[index]) {
|
|
17
|
+
node.properties['data-id'] = ids[index];
|
|
18
|
+
node.properties.className = className;
|
|
19
|
+
index++;
|
|
20
|
+
}
|
|
21
|
+
if (node.tagName === 'img' && (_node$properties = node.properties) !== null && _node$properties !== void 0 && _node$properties.src) {
|
|
22
|
+
var oldSrc = node.properties.src;
|
|
23
|
+
node.properties.src = (0, _helpers.getImageURL)({
|
|
24
|
+
src: oldSrc
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
};
|
|
@@ -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["default"] = void 0;
|
|
7
|
+
exports["default"] = exports.createProcessor = void 0;
|
|
8
8
|
var _rehypeFormat = _interopRequireDefault(require("rehype-format"));
|
|
9
9
|
var _browser = _interopRequireDefault(require("rehype-mathjax/browser"));
|
|
10
10
|
var _rehypeRaw = _interopRequireDefault(require("rehype-raw"));
|
|
@@ -17,37 +17,48 @@ var _remarkMath = _interopRequireDefault(require("remark-math"));
|
|
|
17
17
|
var _remarkParse = _interopRequireDefault(require("remark-parse"));
|
|
18
18
|
var _remarkRehype = _interopRequireDefault(require("remark-rehype"));
|
|
19
19
|
var _unified = require("unified");
|
|
20
|
+
var _helper = require("./helper");
|
|
20
21
|
var _sanitizeSchema = _interopRequireDefault(require("./sanitize-schema"));
|
|
21
22
|
// mdString -> mdast -> html ast -> html
|
|
22
|
-
var
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
.
|
|
26
|
-
//
|
|
27
|
-
// https://github.com/remarkjs/remark
|
|
28
|
-
.use(
|
|
29
|
-
//
|
|
30
|
-
.
|
|
31
|
-
|
|
32
|
-
.
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
.
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
.
|
|
49
|
-
|
|
50
|
-
.
|
|
23
|
+
var createProcessor = exports.createProcessor = function createProcessor() {
|
|
24
|
+
var nodeIds = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
|
|
25
|
+
var className = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
26
|
+
var p = (0, _unified.unified)()
|
|
27
|
+
// Handles markdown basic syntax
|
|
28
|
+
// https://github.com/remarkjs/remark/tree/main
|
|
29
|
+
.use(_remarkParse["default"])
|
|
30
|
+
// Handle markdown extension syntax
|
|
31
|
+
// https://github.com/remarkjs/remark-gfm
|
|
32
|
+
.use(_remarkGfm["default"])
|
|
33
|
+
// https://github.com/remarkjs/remark-math
|
|
34
|
+
.use(_remarkMath["default"])
|
|
35
|
+
// https://github.com/remarkjs/remark-breaks
|
|
36
|
+
.use(_remarkBreaks["default"]).use(_remarkRehype["default"], {
|
|
37
|
+
allowDangerousHtml: true
|
|
38
|
+
}) // convert mdast -> hast
|
|
39
|
+
// https://www.npmjs.com/package/rehype-mathjax
|
|
40
|
+
.use(_browser["default"], {
|
|
41
|
+
displayMath: ['$$', '$$']
|
|
42
|
+
})
|
|
43
|
+
// https://www.npmjs.com/package/rehype-raw
|
|
44
|
+
.use(_rehypeRaw["default"])
|
|
45
|
+
// https://www.npmjs.com/package/rehype-format
|
|
46
|
+
.use(_rehypeFormat["default"], {
|
|
47
|
+
blanks: ['pre', 'code']
|
|
48
|
+
})
|
|
49
|
+
// https://github.com/rehypejs/rehype-slug
|
|
50
|
+
.use(_rehypeSlug["default"])
|
|
51
|
+
// https://github.com/rehypejs/rehype-sanitize
|
|
52
|
+
.use(_rehypeSanitize["default"], _sanitizeSchema["default"])
|
|
53
|
+
// https://github.com/rehypejs/rehype/tree/main/packages/rehype-stringify
|
|
54
|
+
.use(_rehypeStringify["default"]);
|
|
55
|
+
if (nodeIds) {
|
|
56
|
+
p.use(_helper.rehypeAddDataId, nodeIds, className);
|
|
57
|
+
}
|
|
58
|
+
return p;
|
|
59
|
+
};
|
|
51
60
|
|
|
52
61
|
// transform rules: https://github.com/syntax-tree/mdast-util-to-hast
|
|
62
|
+
|
|
63
|
+
var processor = createProcessor();
|
|
53
64
|
var _default = exports["default"] = processor;
|
package/dist/utils/diff-text.js
CHANGED
|
@@ -156,7 +156,7 @@ var DiffText = /*#__PURE__*/(0, _createClass2["default"])(function DiffText(oldV
|
|
|
156
156
|
var newPos = basePath.newPos;
|
|
157
157
|
var oldPos = newPos - diagonalPath;
|
|
158
158
|
var commonCount = 0;
|
|
159
|
-
while (newPos + 1 < newLen && oldPos + 1 < oldLen && _this.equals(newString[newPos + 1], oldString[oldPos + 1])) {
|
|
159
|
+
while (newPos + 1 < newLen && oldPos + 1 < oldLen && _this.equals(newString[newPos + 1] || '', oldString[oldPos + 1] || '')) {
|
|
160
160
|
newPos++;
|
|
161
161
|
oldPos++;
|
|
162
162
|
commonCount++;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seafile/sdoc-editor",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.181-test-0.0.1",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"test": "jest",
|
|
@@ -70,6 +70,5 @@
|
|
|
70
70
|
},
|
|
71
71
|
"publishConfig": {
|
|
72
72
|
"access": "public"
|
|
73
|
-
}
|
|
74
|
-
"gitHead": "91e347e5bec343490b0bf168242eea7e6d84a90c"
|
|
73
|
+
}
|
|
75
74
|
}
|
package/LICENSE.txt
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
Copyright (c) 2025 Seafile Ltd.
|
|
2
|
-
|
|
3
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
you may not use this file except in compliance with the License.
|
|
5
|
-
You may obtain a copy of the License at
|
|
6
|
-
|
|
7
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
|
|
9
|
-
Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
See the License for the specific language governing permissions and
|
|
13
|
-
limitations under the License.
|