@seafile/sdoc-editor 3.0.251 → 3.0.253
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/comment/components/global-comment/index.css +19 -4
- package/dist/extension/plugins/embed-link/helper.js +7 -4
- package/dist/extension/plugins/embed-link/render-elem.js +7 -10
- package/dist/extension/plugins/html/rules/link.js +14 -8
- package/dist/extension/plugins/image/link-helpers.js +15 -18
- package/dist/extension/plugins/link/helpers.js +10 -9
- package/dist/extension/plugins/link/hover/index.js +4 -4
- package/dist/extension/plugins/link/plugin.js +5 -4
- package/dist/extension/plugins/link/render-elem.js +16 -18
- package/dist/extension/plugins/table/plugin.js +2 -2
- package/dist/extension/plugins/whiteboard/render-elem.js +7 -6
- package/dist/extension/utils/index.js +6 -4
- package/dist/slate-convert/html-to-slate/rules/link.js +14 -8
- package/dist/slate-convert/md-to-slate/transform.js +2 -2
- package/dist/slate-convert/slate-to-md/transform.js +2 -2
- package/dist/utils/url-utils.js +24 -0
- package/package.json +2 -3
|
@@ -192,8 +192,11 @@
|
|
|
192
192
|
left: 0;
|
|
193
193
|
}
|
|
194
194
|
|
|
195
|
-
.sdoc-comment-drawer .sdoc-comment-list-container .comment-collapse-wrapper {
|
|
195
|
+
.sdoc-comment-drawer .sdoc-comment-list-container .comment-ui-container.comment-collapse-wrapper {
|
|
196
196
|
cursor: pointer;
|
|
197
|
+
margin: 8px;
|
|
198
|
+
padding: 8px;
|
|
199
|
+
border-radius: 4px;
|
|
197
200
|
}
|
|
198
201
|
|
|
199
202
|
.sdoc-comment-drawer .sdoc-comment-list-container .comment-ui-container {
|
|
@@ -205,7 +208,7 @@
|
|
|
205
208
|
}
|
|
206
209
|
|
|
207
210
|
.sdoc-comment-drawer .sdoc-comment-list-container .comment-ui-container:hover {
|
|
208
|
-
background-color:
|
|
211
|
+
background-color: rgba(0, 0, 0, 0.04);
|
|
209
212
|
}
|
|
210
213
|
|
|
211
214
|
.sdoc-comment-drawer .sdoc-comment-list-container .comment-ui-container.active .comment-item:hover {
|
|
@@ -222,12 +225,20 @@
|
|
|
222
225
|
border-radius: 50%;
|
|
223
226
|
}
|
|
224
227
|
|
|
228
|
+
.sdoc-comment-drawer .sdoc-comment-list-container .comment-header .comment-author__info .time .comment-success-resolved {
|
|
229
|
+
font-size: 12px;
|
|
230
|
+
}
|
|
231
|
+
|
|
225
232
|
.sdoc-comment-drawer .sdoc-comment-list-container .comment-item .comment-content {
|
|
226
233
|
margin-left: 35px;
|
|
227
234
|
display: flex;
|
|
228
235
|
align-items: center;
|
|
229
236
|
}
|
|
230
237
|
|
|
238
|
+
.sdoc-comment-drawer .sdoc-comment-list-container .comment-content blockquote {
|
|
239
|
+
padding-left: 16px;
|
|
240
|
+
}
|
|
241
|
+
|
|
231
242
|
.sdoc-comment-drawer .sdoc-comment-list-container .comment-item .comment-footer .comments-count {
|
|
232
243
|
display: flex;
|
|
233
244
|
align-items: center;
|
|
@@ -240,7 +251,7 @@
|
|
|
240
251
|
}
|
|
241
252
|
|
|
242
253
|
.sdoc-comment-drawer .sdoc-comment-list-container .comment-item .comment-footer .comment-author {
|
|
243
|
-
margin-left:
|
|
254
|
+
margin-left: 24px;
|
|
244
255
|
align-items: unset;
|
|
245
256
|
}
|
|
246
257
|
|
|
@@ -260,7 +271,7 @@
|
|
|
260
271
|
}
|
|
261
272
|
|
|
262
273
|
.sdoc-comment-drawer .sdoc-comment-list-container .comment-item .comment-footer .comment-author__latest-reply {
|
|
263
|
-
margin-left:
|
|
274
|
+
margin-left: 4px;
|
|
264
275
|
}
|
|
265
276
|
|
|
266
277
|
.sdoc-comment-drawer .sdoc-comment-list-container .comment-item .comment-footer .comment-author__latest-reply p {
|
|
@@ -283,6 +294,10 @@
|
|
|
283
294
|
overflow: hidden;
|
|
284
295
|
}
|
|
285
296
|
|
|
297
|
+
.sdoc-comment-drawer .sdoc-comment-list-container .comment-item-selected-text-container .comment-item-selected-text {
|
|
298
|
+
color: #666;
|
|
299
|
+
}
|
|
300
|
+
|
|
286
301
|
.sdoc-comment-drawer .sdoc-comment-list-container .detail-context-comment {
|
|
287
302
|
align-items: start !important;
|
|
288
303
|
}
|
|
@@ -9,6 +9,7 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm
|
|
|
9
9
|
var _slate = require("@seafile/slate");
|
|
10
10
|
var _slateReact = require("@seafile/slate-react");
|
|
11
11
|
var _slugid = _interopRequireDefault(require("slugid"));
|
|
12
|
+
var _urlUtils = require("../../../utils/url-utils");
|
|
12
13
|
var _constants = require("../../constants");
|
|
13
14
|
var _elementType = require("../../constants/element-type");
|
|
14
15
|
var _core = require("../../core");
|
|
@@ -46,7 +47,8 @@ var isInsertEmbedLinkDisabled = exports.isInsertEmbedLinkDisabled = function isI
|
|
|
46
47
|
return false;
|
|
47
48
|
};
|
|
48
49
|
var getEmbedLinkType = exports.getEmbedLinkType = function getEmbedLinkType(text) {
|
|
49
|
-
var link =
|
|
50
|
+
var link = (0, _urlUtils.normalizeWebUrl)(text);
|
|
51
|
+
if (!link) return null;
|
|
50
52
|
try {
|
|
51
53
|
var url = new URL(link);
|
|
52
54
|
var host = url.hostname.toLowerCase();
|
|
@@ -66,7 +68,8 @@ var getEmbedLinkType = exports.getEmbedLinkType = function getEmbedLinkType(text
|
|
|
66
68
|
}
|
|
67
69
|
};
|
|
68
70
|
var normalizeFigmaEmbedLink = exports.normalizeFigmaEmbedLink = function normalizeFigmaEmbedLink(text) {
|
|
69
|
-
var link =
|
|
71
|
+
var link = (0, _urlUtils.normalizeWebUrl)(text);
|
|
72
|
+
if (!link) return null;
|
|
70
73
|
try {
|
|
71
74
|
var url = new URL(link);
|
|
72
75
|
var host = url.hostname.toLowerCase();
|
|
@@ -88,7 +91,7 @@ var generateEmbedLinkNode = exports.generateEmbedLinkNode = function generateEmb
|
|
|
88
91
|
var embedLinkNode = {
|
|
89
92
|
id: _slugid["default"].nice(),
|
|
90
93
|
type: _elementType.EMBED_LINK,
|
|
91
|
-
link: link,
|
|
94
|
+
link: (0, _urlUtils.normalizeWebUrl)(link),
|
|
92
95
|
link_type: type,
|
|
93
96
|
children: [{
|
|
94
97
|
id: _slugid["default"].nice(),
|
|
@@ -100,7 +103,7 @@ var generateEmbedLinkNode = exports.generateEmbedLinkNode = function generateEmb
|
|
|
100
103
|
var insertEmbedLink = exports.insertEmbedLink = function insertEmbedLink(editor, link, type) {
|
|
101
104
|
var _editor$selection;
|
|
102
105
|
if (isInsertEmbedLinkDisabled(editor)) return;
|
|
103
|
-
if (editor.selection == null) return;
|
|
106
|
+
if (editor.selection == null || !(0, _urlUtils.normalizeWebUrl)(link)) return;
|
|
104
107
|
var embedLinkNode = generateEmbedLinkNode(link, type);
|
|
105
108
|
var path = (_editor$selection = editor.selection) === null || _editor$selection === void 0 ? void 0 : _editor$selection.anchor.path;
|
|
106
109
|
|
|
@@ -15,8 +15,8 @@ var _reactI18next = require("react-i18next");
|
|
|
15
15
|
var _slate = require("@seafile/slate");
|
|
16
16
|
var _slateReact = require("@seafile/slate-react");
|
|
17
17
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
18
|
-
var _isUrl = _interopRequireDefault(require("is-url"));
|
|
19
18
|
var _useScrollContext = require("../../../hooks/use-scroll-context");
|
|
19
|
+
var _urlUtils = require("../../../utils/url-utils");
|
|
20
20
|
var _core = require("../../core");
|
|
21
21
|
var _utils = require("../../utils");
|
|
22
22
|
var _constants = require("./constants");
|
|
@@ -59,13 +59,10 @@ var EmbedLink = function EmbedLink(_ref) {
|
|
|
59
59
|
setIsResizing = _useState8[1];
|
|
60
60
|
var originalLink = element.link,
|
|
61
61
|
link_type = element.link_type;
|
|
62
|
-
var link =
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
var isValidUrl = (0, _react.useMemo)(function () {
|
|
67
|
-
return (0, _isUrl["default"])(link);
|
|
68
|
-
}, [link]);
|
|
62
|
+
var link = (0, _react.useMemo)(function () {
|
|
63
|
+
return (0, _urlUtils.normalizeWebUrl)(link_type === _constants.EMBED_LINK_SOURCE.FIGMA ? (0, _helper.normalizeFigmaEmbedLink)(originalLink) : originalLink);
|
|
64
|
+
}, [originalLink, link_type]);
|
|
65
|
+
var isValidUrl = Boolean(link);
|
|
69
66
|
var registerEvent = (0, _react.useCallback)(function (eventList) {
|
|
70
67
|
eventList.forEach(function (element) {
|
|
71
68
|
document.addEventListener(element.eventName, element.event);
|
|
@@ -147,7 +144,7 @@ var EmbedLink = function EmbedLink(_ref) {
|
|
|
147
144
|
var handleDoubleClick = function handleDoubleClick(event) {
|
|
148
145
|
event.preventDefault();
|
|
149
146
|
if (!isValidUrl) return;
|
|
150
|
-
window.open(link, '_blank');
|
|
147
|
+
window.open(link, '_blank', 'noopener,noreferrer');
|
|
151
148
|
return;
|
|
152
149
|
};
|
|
153
150
|
var handleScroll = (0, _react.useCallback)(function (e) {
|
|
@@ -248,7 +245,7 @@ var EmbedLink = function EmbedLink(_ref) {
|
|
|
248
245
|
onOpen: handleDoubleClick,
|
|
249
246
|
openFullscreen: openFullscreen,
|
|
250
247
|
onDeleteEmbedLink: onDeleteEmbedLink
|
|
251
|
-
}), isShowZoomOut && (/*#__PURE__*/_reactDom["default"].createPortal(/*#__PURE__*/_react["default"].createElement("div", {
|
|
248
|
+
}), isShowZoomOut && isValidUrl && (/*#__PURE__*/_reactDom["default"].createPortal(/*#__PURE__*/_react["default"].createElement("div", {
|
|
252
249
|
className: "embed-link-zoom-out-container",
|
|
253
250
|
onClick: function onClick() {
|
|
254
251
|
return setIsShowZoomOut(false);
|
|
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports["default"] = void 0;
|
|
8
8
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
|
|
9
9
|
var _slugid = _interopRequireDefault(require("slugid"));
|
|
10
|
+
var _urlUtils = require("../../../../utils/url-utils");
|
|
10
11
|
var _constants = require("../../../constants");
|
|
11
12
|
var _linkHelpers = require("../../image/link-helpers");
|
|
12
13
|
var linkRule = function linkRule(element, parseChild) {
|
|
@@ -22,14 +23,14 @@ var linkRule = function linkRule(element, parseChild) {
|
|
|
22
23
|
id: _slugid["default"].nice(),
|
|
23
24
|
text: ''
|
|
24
25
|
};
|
|
25
|
-
var
|
|
26
|
+
var _href = (0, _urlUtils.normalizeWebUrl)(element.getAttribute('href'));
|
|
26
27
|
return {
|
|
27
28
|
id: _slugid["default"].nice(),
|
|
28
29
|
type: _constants.IMAGE,
|
|
29
30
|
data: (0, _objectSpread2["default"])({
|
|
30
31
|
src: src
|
|
31
|
-
},
|
|
32
|
-
href:
|
|
32
|
+
}, _href && {
|
|
33
|
+
href: _href
|
|
33
34
|
}),
|
|
34
35
|
children: [{
|
|
35
36
|
text: '',
|
|
@@ -38,12 +39,12 @@ var linkRule = function linkRule(element, parseChild) {
|
|
|
38
39
|
};
|
|
39
40
|
}
|
|
40
41
|
if (element.querySelector('img')) {
|
|
41
|
-
var
|
|
42
|
+
var _href2 = (0, _urlUtils.normalizeWebUrl)(element.getAttribute('href'));
|
|
42
43
|
return parseChild(element.childNodes).map(function (child) {
|
|
43
|
-
if (!
|
|
44
|
+
if (!_href2) return child;
|
|
44
45
|
if (child.type === _constants.IMAGE) return (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, child), {}, {
|
|
45
46
|
data: (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, child.data), {}, {
|
|
46
|
-
href:
|
|
47
|
+
href: _href2
|
|
47
48
|
})
|
|
48
49
|
});
|
|
49
50
|
if (typeof child.text === 'string') {
|
|
@@ -51,7 +52,7 @@ var linkRule = function linkRule(element, parseChild) {
|
|
|
51
52
|
return {
|
|
52
53
|
id: _slugid["default"].nice(),
|
|
53
54
|
type: _constants.LINK,
|
|
54
|
-
href:
|
|
55
|
+
href: _href2,
|
|
55
56
|
title: element.getAttribute('title'),
|
|
56
57
|
children: [child]
|
|
57
58
|
};
|
|
@@ -63,10 +64,15 @@ var linkRule = function linkRule(element, parseChild) {
|
|
|
63
64
|
id: _slugid["default"].nice(),
|
|
64
65
|
text: ''
|
|
65
66
|
};
|
|
67
|
+
var href = (0, _urlUtils.normalizeWebUrl)(element.getAttribute('href'));
|
|
68
|
+
if (!href) return {
|
|
69
|
+
id: _slugid["default"].nice(),
|
|
70
|
+
text: content
|
|
71
|
+
};
|
|
66
72
|
return {
|
|
67
73
|
id: _slugid["default"].nice(),
|
|
68
74
|
type: _constants.LINK,
|
|
69
|
-
href:
|
|
75
|
+
href: href,
|
|
70
76
|
title: element.getAttribute('title'),
|
|
71
77
|
children: [{
|
|
72
78
|
id: _slugid["default"].nice(),
|
|
@@ -4,28 +4,25 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.
|
|
7
|
+
exports.isInternalWebUrl = exports.isCurrentServerUrl = exports.getOnlyImageChild = exports.getImageWikiPageUrl = void 0;
|
|
8
|
+
Object.defineProperty(exports, "isValidWebUrl", {
|
|
9
|
+
enumerable: true,
|
|
10
|
+
get: function get() {
|
|
11
|
+
return _urlUtils.isValidWebUrl;
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
Object.defineProperty(exports, "normalizeWebUrl", {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
get: function get() {
|
|
17
|
+
return _urlUtils.normalizeWebUrl;
|
|
18
|
+
}
|
|
19
|
+
});
|
|
8
20
|
var _context = _interopRequireDefault(require("../../../context"));
|
|
21
|
+
var _urlUtils = require("../../../utils/url-utils");
|
|
9
22
|
var _helpers = require("../wiki-link/helpers");
|
|
10
|
-
var normalizeWebUrl = exports.normalizeWebUrl = function normalizeWebUrl() {
|
|
11
|
-
var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
12
|
-
if (typeof value !== 'string') return '';
|
|
13
|
-
var url = value.trim();
|
|
14
|
-
if (!/^https?:\/\//i.test(url)) return '';
|
|
15
|
-
try {
|
|
16
|
-
var parsedUrl = new URL(url);
|
|
17
|
-
return ['http:', 'https:'].includes(parsedUrl.protocol) && parsedUrl.hostname ? url : '';
|
|
18
|
-
} catch (error) {
|
|
19
|
-
return '';
|
|
20
|
-
}
|
|
21
|
-
};
|
|
22
|
-
var isValidWebUrl = exports.isValidWebUrl = function isValidWebUrl() {
|
|
23
|
-
var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
24
|
-
return Boolean(normalizeWebUrl(value));
|
|
25
|
-
};
|
|
26
23
|
var isInternalWebUrl = exports.isInternalWebUrl = function isInternalWebUrl() {
|
|
27
24
|
var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
28
|
-
var url = normalizeWebUrl(value);
|
|
25
|
+
var url = (0, _urlUtils.normalizeWebUrl)(value);
|
|
29
26
|
var serviceUrl = _context["default"].getSetting('serviceUrl');
|
|
30
27
|
if (!url || !serviceUrl) return false;
|
|
31
28
|
try {
|
|
@@ -12,6 +12,7 @@ var _slate = require("@seafile/slate");
|
|
|
12
12
|
var _slateReact = require("@seafile/slate-react");
|
|
13
13
|
var _slugid = _interopRequireDefault(require("slugid"));
|
|
14
14
|
var _constants = require("../../../constants");
|
|
15
|
+
var _urlUtils = require("../../../utils/url-utils");
|
|
15
16
|
var _constants2 = require("../../constants");
|
|
16
17
|
var _core = require("../../core");
|
|
17
18
|
var isMenuDisabled = exports.isMenuDisabled = function isMenuDisabled(editor, readonly) {
|
|
@@ -28,16 +29,13 @@ var isMenuDisabled = exports.isMenuDisabled = function isMenuDisabled(editor, re
|
|
|
28
29
|
return false; // enable
|
|
29
30
|
};
|
|
30
31
|
var checkLink = exports.checkLink = function checkLink(url) {
|
|
31
|
-
|
|
32
|
-
return true;
|
|
33
|
-
}
|
|
34
|
-
return false;
|
|
32
|
+
return !(0, _urlUtils.isValidWebUrl)(url);
|
|
35
33
|
};
|
|
36
34
|
var genLinkNode = exports.genLinkNode = function genLinkNode(url, text, nodeId, pageId) {
|
|
37
35
|
var linkNode = {
|
|
38
36
|
id: _slugid["default"].nice(),
|
|
39
37
|
type: 'link',
|
|
40
|
-
href: url
|
|
38
|
+
href: (0, _urlUtils.normalizeWebUrl)(url),
|
|
41
39
|
title: text,
|
|
42
40
|
linked_id: nodeId || '',
|
|
43
41
|
linked_wiki_page_id: pageId || '',
|
|
@@ -78,7 +76,7 @@ var insertLink = exports.insertLink = function insertLink(editor, title, url) {
|
|
|
78
76
|
return;
|
|
79
77
|
}
|
|
80
78
|
if (position === _constants2.INSERT_POSITION.CURRENT && isMenuDisabled(editor)) return;
|
|
81
|
-
if (!title || !url && !linkedNodeId && !selectedPageId) return;
|
|
79
|
+
if (!title || !(0, _urlUtils.normalizeWebUrl)(url) && !linkedNodeId && !selectedPageId) return;
|
|
82
80
|
var linkNode = genLinkNode(url, title);
|
|
83
81
|
if (linkedNodeId) {
|
|
84
82
|
linkNode = genLinkNode(url, title, linkedNodeId);
|
|
@@ -129,6 +127,9 @@ var insertLink = exports.insertLink = function insertLink(editor, title, url) {
|
|
|
129
127
|
});
|
|
130
128
|
};
|
|
131
129
|
var updateLink = exports.updateLink = function updateLink(editor, newText, newUrl, linkedNodeId, linkedPageId) {
|
|
130
|
+
var href = (0, _urlUtils.normalizeWebUrl)(newUrl);
|
|
131
|
+
if (!href && !linkedNodeId && !linkedPageId) return false;
|
|
132
|
+
|
|
132
133
|
// Update children
|
|
133
134
|
var linkAbove = (0, _core.getAboveNode)(editor, {
|
|
134
135
|
match: {
|
|
@@ -177,10 +178,10 @@ var updateLink = exports.updateLink = function updateLink(editor, newText, newUr
|
|
|
177
178
|
});
|
|
178
179
|
}
|
|
179
180
|
}
|
|
180
|
-
if (!linkedNodeId && !linkedPageId && (oldUrl !==
|
|
181
|
+
if (!linkedNodeId && !linkedPageId && (oldUrl !== href || oldText !== newText)) {
|
|
181
182
|
if (editor.editorType === _constants.WIKI_EDITOR) {
|
|
182
183
|
_slate.Transforms.setNodes(editor, {
|
|
183
|
-
href:
|
|
184
|
+
href: href,
|
|
184
185
|
title: newText,
|
|
185
186
|
linked_id: '',
|
|
186
187
|
linked_wiki_page_id: ''
|
|
@@ -189,7 +190,7 @@ var updateLink = exports.updateLink = function updateLink(editor, newText, newUr
|
|
|
189
190
|
});
|
|
190
191
|
} else {
|
|
191
192
|
_slate.Transforms.setNodes(editor, {
|
|
192
|
-
href:
|
|
193
|
+
href: href,
|
|
193
194
|
title: newText,
|
|
194
195
|
linked_id: ''
|
|
195
196
|
}, {
|
|
@@ -12,10 +12,10 @@ var _reactDom = require("react-dom");
|
|
|
12
12
|
var _reactI18next = require("react-i18next");
|
|
13
13
|
var _slate = require("@seafile/slate");
|
|
14
14
|
var _slateReact = require("@seafile/slate-react");
|
|
15
|
-
var _isUrl = _interopRequireDefault(require("is-url"));
|
|
16
15
|
var _toast = _interopRequireDefault(require("../../../../components/toast"));
|
|
17
16
|
var _tooltip = _interopRequireDefault(require("../../../../components/tooltip"));
|
|
18
17
|
var _eventBus = _interopRequireDefault(require("../../../../utils/event-bus"));
|
|
18
|
+
var _urlUtils = require("../../../../utils/url-utils");
|
|
19
19
|
var _helpers = require("../helpers");
|
|
20
20
|
require("./index.css");
|
|
21
21
|
var LinkHover = function LinkHover(_ref) {
|
|
@@ -37,15 +37,15 @@ var LinkHover = function LinkHover(_ref) {
|
|
|
37
37
|
setIsShowTooltip(true);
|
|
38
38
|
}, []);
|
|
39
39
|
var onMouseDown = (0, _react.useCallback)(function (event) {
|
|
40
|
-
var href = (0, _helpers.getElementHref)(element);
|
|
41
|
-
if (!
|
|
40
|
+
var href = (0, _urlUtils.normalizeWebUrl)((0, _helpers.getElementHref)(element));
|
|
41
|
+
if (!href) {
|
|
42
42
|
event.preventDefault();
|
|
43
43
|
_toast["default"].danger(t('The_link_is_invalid'));
|
|
44
44
|
return;
|
|
45
45
|
}
|
|
46
46
|
event.stopPropagation();
|
|
47
47
|
if (!(0, _helpers.isWeChat)()) {
|
|
48
|
-
window.open(href);
|
|
48
|
+
window.open(href, '_blank', 'noopener,noreferrer');
|
|
49
49
|
} else {
|
|
50
50
|
// eslint-disable-next-line no-restricted-globals
|
|
51
51
|
location.href = href;
|
|
@@ -12,10 +12,10 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm
|
|
|
12
12
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/asyncToGenerator"));
|
|
13
13
|
var _slate = require("@seafile/slate");
|
|
14
14
|
var _isHotkey = _interopRequireDefault(require("is-hotkey"));
|
|
15
|
-
var _isUrl = _interopRequireDefault(require("is-url"));
|
|
16
15
|
var _constants = require("../../../constants");
|
|
17
16
|
var _context2 = _interopRequireDefault(require("../../../context"));
|
|
18
17
|
var _eventBus = _interopRequireDefault(require("../../../utils/event-bus"));
|
|
18
|
+
var _urlUtils = require("../../../utils/url-utils");
|
|
19
19
|
var _constants2 = require("../../constants");
|
|
20
20
|
var _core = require("../../core");
|
|
21
21
|
var _utils = require("../../utils");
|
|
@@ -44,12 +44,13 @@ var withLink = function withLink(editor) {
|
|
|
44
44
|
};
|
|
45
45
|
newEditor.insertData = /*#__PURE__*/function () {
|
|
46
46
|
var _ref = (0, _asyncToGenerator2["default"])(/*#__PURE__*/(0, _regenerator2["default"])().m(function _callee(data) {
|
|
47
|
-
var text, selectedElems, isCodeContext, res, fileInfo, fileName, fileUuid, _fileName, fileParentPath, filePath, repoId, _fileName2, _fileUuid, url, pathname, _context$getSetting, parts, wikiPageId, title, wikiPageList, page, linkedNodeId, _title, params, link, _link, embedLinkType, _link2, _Editor$next, _Editor$next2, focusPath, focusPoint, _t;
|
|
47
|
+
var pastedText, text, selectedElems, isCodeContext, res, fileInfo, fileName, fileUuid, _fileName, fileParentPath, filePath, repoId, _fileName2, _fileUuid, url, pathname, _context$getSetting, parts, wikiPageId, title, wikiPageList, page, linkedNodeId, _title, params, link, _link, embedLinkType, _link2, _Editor$next, _Editor$next2, focusPath, focusPoint, _t;
|
|
48
48
|
return (0, _regenerator2["default"])().w(function (_context) {
|
|
49
49
|
while (1) switch (_context.p = _context.n) {
|
|
50
50
|
case 0:
|
|
51
51
|
// Paste link content
|
|
52
|
-
|
|
52
|
+
pastedText = data.getData('text/plain');
|
|
53
|
+
text = (0, _urlUtils.normalizeWebUrl)(pastedText);
|
|
53
54
|
selectedElems = (0, _core.getSelectedElems)(newEditor);
|
|
54
55
|
isCodeContext = selectedElems.some(function (elem) {
|
|
55
56
|
return [_constants2.CODE_BLOCK, _constants2.CODE_LINE].includes(elem === null || elem === void 0 ? void 0 : elem.type);
|
|
@@ -60,7 +61,7 @@ var withLink = function withLink(editor) {
|
|
|
60
61
|
}
|
|
61
62
|
return _context.a(2, insertData(data));
|
|
62
63
|
case 1:
|
|
63
|
-
if (!(
|
|
64
|
+
if (!(text && !(0, _utils.isImage)(text))) {
|
|
64
65
|
_context.n = 16;
|
|
65
66
|
break;
|
|
66
67
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"];
|
|
4
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
@@ -16,13 +15,12 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
16
15
|
var _reactI18next = require("react-i18next");
|
|
17
16
|
var _slate = require("@seafile/slate");
|
|
18
17
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
19
|
-
var _isUrl = _interopRequireDefault(require("is-url"));
|
|
20
|
-
var _propTypes = _interopRequireWildcard(require("prop-types"));
|
|
21
18
|
var _toast = _interopRequireDefault(require("../../../components/toast"));
|
|
22
19
|
var _constants = require("../../../constants");
|
|
23
20
|
var _useScrollContext = require("../../../hooks/use-scroll-context");
|
|
24
21
|
var _commonUtils = require("../../../utils/common-utils");
|
|
25
22
|
var _eventBus = _interopRequireDefault(require("../../../utils/event-bus"));
|
|
23
|
+
var _urlUtils = require("../../../utils/url-utils");
|
|
26
24
|
var _InlineBugFixWrapper = _interopRequireDefault(require("../../commons/Inline-bug-fix-wrapper"));
|
|
27
25
|
var _constants2 = require("../../constants");
|
|
28
26
|
var _helpers = require("./helpers");
|
|
@@ -86,22 +84,21 @@ var Link = /*#__PURE__*/function (_React$Component) {
|
|
|
86
84
|
});
|
|
87
85
|
(0, _defineProperty2["default"])(_this, "onLinkClick", function (e) {
|
|
88
86
|
var isModClick = (0, _commonUtils.isMac)() ? e.metaKey : e.ctrlKey;
|
|
89
|
-
var
|
|
90
|
-
|
|
91
|
-
linked_wiki_page_id =
|
|
92
|
-
var href = (0, _helpers.getElementHref)(_propTypes.element);
|
|
87
|
+
var element = _this.props.element;
|
|
88
|
+
var linked_id = element.linked_id,
|
|
89
|
+
linked_wiki_page_id = element.linked_wiki_page_id;
|
|
93
90
|
// mod + click
|
|
94
91
|
if (isModClick && !linked_id && !linked_wiki_page_id) {
|
|
95
|
-
|
|
92
|
+
_this.onOpenLink(e);
|
|
96
93
|
return;
|
|
97
94
|
}
|
|
98
95
|
// mod + click on linked wiki page
|
|
99
96
|
if (isModClick && linked_wiki_page_id) {
|
|
100
|
-
var
|
|
101
|
-
var parts =
|
|
97
|
+
var href = window.location.href;
|
|
98
|
+
var parts = href.split('/');
|
|
102
99
|
parts[parts.length - 2] = linked_wiki_page_id;
|
|
103
|
-
var newHref = parts.join('/');
|
|
104
|
-
window.open(newHref, '_blank', 'noreferrer');
|
|
100
|
+
var newHref = (0, _urlUtils.normalizeWebUrl)(parts.join('/'));
|
|
101
|
+
if (newHref) window.open(newHref, '_blank', 'noopener,noreferrer');
|
|
105
102
|
return;
|
|
106
103
|
}
|
|
107
104
|
_this.setPosition(e.target);
|
|
@@ -122,8 +119,8 @@ var Link = /*#__PURE__*/function (_React$Component) {
|
|
|
122
119
|
var _this$props = _this.props,
|
|
123
120
|
element = _this$props.element,
|
|
124
121
|
t = _this$props.t;
|
|
125
|
-
var href = (0, _helpers.getElementHref)(element);
|
|
126
|
-
if (!
|
|
122
|
+
var href = (0, _urlUtils.normalizeWebUrl)((0, _helpers.getElementHref)(element));
|
|
123
|
+
if (!href) {
|
|
127
124
|
_toast["default"].danger(t('The_link_is_invalid'));
|
|
128
125
|
return;
|
|
129
126
|
}
|
|
@@ -172,15 +169,16 @@ var Link = /*#__PURE__*/function (_React$Component) {
|
|
|
172
169
|
var className = isShowLinkMenu ? 'seafile-ed-hovermenu-mouseclick' : null;
|
|
173
170
|
var linkText = _slate.Node.string(element);
|
|
174
171
|
if (readonly) {
|
|
172
|
+
var href = (0, _urlUtils.normalizeWebUrl)((0, _helpers.getElementHref)(element));
|
|
175
173
|
return /*#__PURE__*/_react["default"].createElement("span", Object.assign({
|
|
176
174
|
className: (0, _classnames["default"])(className, 'virtual-link')
|
|
177
|
-
}, attributes), /*#__PURE__*/_react["default"].createElement("a", {
|
|
178
|
-
href:
|
|
175
|
+
}, attributes), href ? /*#__PURE__*/_react["default"].createElement("a", {
|
|
176
|
+
href: href,
|
|
179
177
|
title: linkText,
|
|
180
178
|
onClick: this.onOpenLink,
|
|
181
179
|
target: "_blank",
|
|
182
|
-
rel: "noreferrer"
|
|
183
|
-
}, children));
|
|
180
|
+
rel: "noopener noreferrer"
|
|
181
|
+
}, children) : children);
|
|
184
182
|
}
|
|
185
183
|
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("span", Object.assign({
|
|
186
184
|
className: className
|
|
@@ -11,11 +11,11 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm
|
|
|
11
11
|
var _slate = require("@seafile/slate");
|
|
12
12
|
var _slateReact = require("@seafile/slate-react");
|
|
13
13
|
var _isHotkey = _interopRequireDefault(require("is-hotkey"));
|
|
14
|
-
var _isUrl = _interopRequireDefault(require("is-url"));
|
|
15
14
|
var _constants = require("../../../constants");
|
|
16
15
|
var _helpers = require("../../../node-id/helpers");
|
|
17
16
|
var _eventBus = _interopRequireDefault(require("../../../utils/event-bus"));
|
|
18
17
|
var _objectUtils = _interopRequireDefault(require("../../../utils/object-utils"));
|
|
18
|
+
var _urlUtils = require("../../../utils/url-utils");
|
|
19
19
|
var _constants2 = require("../../constants");
|
|
20
20
|
var _core = require("../../core");
|
|
21
21
|
var _utils = require("../../utils");
|
|
@@ -442,7 +442,7 @@ var withTable = function withTable(editor) {
|
|
|
442
442
|
if (!text) return;
|
|
443
443
|
|
|
444
444
|
// Keep URL paste behavior consistent with normal text while preserving multi-cell paste behavior.
|
|
445
|
-
if ((0,
|
|
445
|
+
if ((0, _urlUtils.isValidWebUrl)(text) && !(0, _utils.isImage)(text) && (0, _helpers2.isInTableSameCell)(newEditor)) {
|
|
446
446
|
return insertData(data);
|
|
447
447
|
}
|
|
448
448
|
return _slate.Editor.insertText(newEditor, text);
|
|
@@ -14,11 +14,11 @@ var _reactI18next = require("react-i18next");
|
|
|
14
14
|
var _slate = require("@seafile/slate");
|
|
15
15
|
var _slateReact = require("@seafile/slate-react");
|
|
16
16
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
17
|
-
var _isUrl = _interopRequireDefault(require("is-url"));
|
|
18
17
|
var _constants = require("../../../constants");
|
|
19
18
|
var _context = _interopRequireDefault(require("../../../context"));
|
|
20
19
|
var _useScrollContext = require("../../../hooks/use-scroll-context");
|
|
21
20
|
var _eventBus = _interopRequireDefault(require("../../../utils/event-bus"));
|
|
21
|
+
var _urlUtils = require("../../../utils/url-utils");
|
|
22
22
|
var _core = require("../../core");
|
|
23
23
|
var _utils = require("../../utils");
|
|
24
24
|
var _hoverMenu = _interopRequireDefault(require("./hover-menu"));
|
|
@@ -29,7 +29,7 @@ var Whiteboard = function Whiteboard(_ref) {
|
|
|
29
29
|
var file_path = element.file_path,
|
|
30
30
|
repo_id = element.repo_id,
|
|
31
31
|
title = element.title,
|
|
32
|
-
|
|
32
|
+
originalLink = element.link;
|
|
33
33
|
var whiteboardRef = (0, _react.useRef)();
|
|
34
34
|
var fullscreenRef = (0, _react.useRef)();
|
|
35
35
|
var scrollRef = (0, _useScrollContext.useScrollContext)();
|
|
@@ -48,9 +48,10 @@ var Whiteboard = function Whiteboard(_ref) {
|
|
|
48
48
|
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
49
49
|
isShowZoomOut = _useState4[0],
|
|
50
50
|
setIsShowZoomOut = _useState4[1];
|
|
51
|
-
var
|
|
52
|
-
return (0,
|
|
53
|
-
}, [
|
|
51
|
+
var link = (0, _react.useMemo)(function () {
|
|
52
|
+
return (0, _urlUtils.normalizeWebUrl)(originalLink);
|
|
53
|
+
}, [originalLink]);
|
|
54
|
+
var isValidUrl = Boolean(link);
|
|
54
55
|
(0, _react.useEffect)(function () {
|
|
55
56
|
if (!isValidUrl) return;
|
|
56
57
|
var handleMessage = function handleMessage(event) {
|
|
@@ -200,7 +201,7 @@ var Whiteboard = function Whiteboard(_ref) {
|
|
|
200
201
|
onOpen: handleDoubleClick,
|
|
201
202
|
openFullscreen: openFullscreen,
|
|
202
203
|
onDeleteWhiteboard: onDeleteWhiteboard
|
|
203
|
-
}), isShowZoomOut && (/*#__PURE__*/_reactDom["default"].createPortal(/*#__PURE__*/_react["default"].createElement("div", {
|
|
204
|
+
}), isShowZoomOut && isValidUrl && (/*#__PURE__*/_reactDom["default"].createPortal(/*#__PURE__*/_react["default"].createElement("div", {
|
|
204
205
|
className: "whiteboard-zoom-out-container",
|
|
205
206
|
onClick: function onClick() {
|
|
206
207
|
return setIsShowZoomOut(false);
|
|
@@ -1,21 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
|
|
4
3
|
Object.defineProperty(exports, "__esModule", {
|
|
5
4
|
value: true
|
|
6
5
|
});
|
|
7
6
|
exports.onHandleOverflowScroll = exports.isSameDomain = exports.isOverflowPortByDirection = exports.isImage = exports.getMenuPosition = exports.IMAGE_TYPES = void 0;
|
|
8
|
-
var
|
|
7
|
+
var _urlUtils = require("../../utils/url-utils");
|
|
9
8
|
var IMAGE_TYPES = exports.IMAGE_TYPES = ['png', 'jpg', 'gif'];
|
|
10
9
|
var isImage = exports.isImage = function isImage(url) {
|
|
11
10
|
if (!url) return false;
|
|
12
|
-
if (!(0,
|
|
11
|
+
if (!(0, _urlUtils.isValidWebUrl)(url)) return false;
|
|
13
12
|
var suffix = url.split('.')[1]; // http://xx/mm/*.png
|
|
14
13
|
if (!suffix) return false;
|
|
15
14
|
return IMAGE_TYPES.includes(suffix.toLowerCase());
|
|
16
15
|
};
|
|
17
16
|
var isSameDomain = exports.isSameDomain = function isSameDomain(currentUrl, targetUrl) {
|
|
18
|
-
|
|
17
|
+
var current = (0, _urlUtils.normalizeWebUrl)(currentUrl);
|
|
18
|
+
var target = (0, _urlUtils.normalizeWebUrl)(targetUrl);
|
|
19
|
+
if (!current || !target) return false;
|
|
20
|
+
return new URL(current).origin === new URL(target).origin;
|
|
19
21
|
};
|
|
20
22
|
var isOverflowPortByDirection = exports.isOverflowPortByDirection = function isOverflowPortByDirection(targetDom, direction) {
|
|
21
23
|
var viewWidth = window.innerWidth || document.documentElement.clientWidth;
|
|
@@ -8,6 +8,7 @@ exports["default"] = void 0;
|
|
|
8
8
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
|
|
9
9
|
var _slugid = _interopRequireDefault(require("slugid"));
|
|
10
10
|
var _linkHelpers = require("../../../extension/plugins/image/link-helpers");
|
|
11
|
+
var _urlUtils = require("../../../utils/url-utils");
|
|
11
12
|
var _constants = require("../constants");
|
|
12
13
|
var linkRule = function linkRule(element, parseChild) {
|
|
13
14
|
var nodeName = element.nodeName;
|
|
@@ -22,14 +23,14 @@ var linkRule = function linkRule(element, parseChild) {
|
|
|
22
23
|
id: _slugid["default"].nice(),
|
|
23
24
|
text: ''
|
|
24
25
|
};
|
|
25
|
-
var
|
|
26
|
+
var _href = (0, _urlUtils.normalizeWebUrl)(element.getAttribute('href'));
|
|
26
27
|
return {
|
|
27
28
|
id: _slugid["default"].nice(),
|
|
28
29
|
type: _constants.IMAGE,
|
|
29
30
|
data: (0, _objectSpread2["default"])({
|
|
30
31
|
src: src
|
|
31
|
-
},
|
|
32
|
-
href:
|
|
32
|
+
}, _href && {
|
|
33
|
+
href: _href
|
|
33
34
|
}),
|
|
34
35
|
children: [{
|
|
35
36
|
text: '',
|
|
@@ -38,12 +39,12 @@ var linkRule = function linkRule(element, parseChild) {
|
|
|
38
39
|
};
|
|
39
40
|
}
|
|
40
41
|
if (element.querySelector('img')) {
|
|
41
|
-
var
|
|
42
|
+
var _href2 = (0, _urlUtils.normalizeWebUrl)(element.getAttribute('href'));
|
|
42
43
|
return parseChild(element.childNodes).map(function (child) {
|
|
43
|
-
if (!
|
|
44
|
+
if (!_href2) return child;
|
|
44
45
|
if (child.type === _constants.IMAGE) return (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, child), {}, {
|
|
45
46
|
data: (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, child.data), {}, {
|
|
46
|
-
href:
|
|
47
|
+
href: _href2
|
|
47
48
|
})
|
|
48
49
|
});
|
|
49
50
|
if (typeof child.text === 'string') {
|
|
@@ -51,7 +52,7 @@ var linkRule = function linkRule(element, parseChild) {
|
|
|
51
52
|
return {
|
|
52
53
|
id: _slugid["default"].nice(),
|
|
53
54
|
type: _constants.LINK,
|
|
54
|
-
href:
|
|
55
|
+
href: _href2,
|
|
55
56
|
title: element.getAttribute('title'),
|
|
56
57
|
children: [child]
|
|
57
58
|
};
|
|
@@ -63,10 +64,15 @@ var linkRule = function linkRule(element, parseChild) {
|
|
|
63
64
|
id: _slugid["default"].nice(),
|
|
64
65
|
text: ''
|
|
65
66
|
};
|
|
67
|
+
var href = (0, _urlUtils.normalizeWebUrl)(element.getAttribute('href'));
|
|
68
|
+
if (!href) return {
|
|
69
|
+
id: _slugid["default"].nice(),
|
|
70
|
+
text: content
|
|
71
|
+
};
|
|
66
72
|
return {
|
|
67
73
|
id: _slugid["default"].nice(),
|
|
68
74
|
type: _constants.LINK,
|
|
69
|
-
href:
|
|
75
|
+
href: href,
|
|
70
76
|
title: element.getAttribute('title'),
|
|
71
77
|
children: [{
|
|
72
78
|
id: _slugid["default"].nice(),
|
|
@@ -11,7 +11,7 @@ var _objectSpread3 = _interopRequireDefault(require("@babel/runtime/helpers/esm/
|
|
|
11
11
|
var _slugid = _interopRequireDefault(require("slugid"));
|
|
12
12
|
var _elementType = require("../../extension/constants/element-type");
|
|
13
13
|
var _core = require("../../extension/core");
|
|
14
|
-
var
|
|
14
|
+
var _urlUtils = require("../../utils/url-utils");
|
|
15
15
|
var _htmlToSlate = _interopRequireDefault(require("../html-to-slate"));
|
|
16
16
|
var INLINE_KEY_MAP = {
|
|
17
17
|
strong: 'bold',
|
|
@@ -52,7 +52,7 @@ var _applyMarkForInlineItem = function applyMarkForInlineItem(result, item) {
|
|
|
52
52
|
value: ''
|
|
53
53
|
} : children[0];
|
|
54
54
|
if (child.type === _elementType.IMAGE) {
|
|
55
|
-
var href = (0,
|
|
55
|
+
var href = (0, _urlUtils.normalizeWebUrl)(item.url);
|
|
56
56
|
var image = {
|
|
57
57
|
id: _slugid["default"].nice(),
|
|
58
58
|
type: _elementType.IMAGE,
|
|
@@ -8,8 +8,8 @@ exports.formatSlateToMd = void 0;
|
|
|
8
8
|
var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createForOfIteratorHelper"));
|
|
9
9
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
|
|
10
10
|
var _slate = require("@seafile/slate");
|
|
11
|
-
var _linkHelpers = require("../../extension/plugins/image/link-helpers");
|
|
12
11
|
var _isPunctuationMark = _interopRequireDefault(require("../../utils/is-punctuation-mark"));
|
|
12
|
+
var _urlUtils = require("../../utils/url-utils");
|
|
13
13
|
var escapeHtmlAttribute = function escapeHtmlAttribute(value) {
|
|
14
14
|
return String(value).replace(/&/g, '&').replace(/"/g, '"').replace(/</g, '<').replace(/>/g, '>');
|
|
15
15
|
};
|
|
@@ -80,7 +80,7 @@ var transformInlineChildren = function transformInlineChildren(result, item) {
|
|
|
80
80
|
value: "<img src=\"".concat(escapeHtmlAttribute(data.src), "\" alt=\"").concat(escapeHtmlAttribute(data.alt), "\" title=\"").concat(escapeHtmlAttribute(data.title), "\" width=\"").concat(escapeHtmlAttribute(data.width), "\" height=\"").concat(escapeHtmlAttribute(data.height), "\" />")
|
|
81
81
|
};
|
|
82
82
|
}
|
|
83
|
-
var imageLinkUrl = (0,
|
|
83
|
+
var imageLinkUrl = (0, _urlUtils.normalizeWebUrl)(data.href);
|
|
84
84
|
if (imageLinkUrl) {
|
|
85
85
|
image = image.type === 'html' ? {
|
|
86
86
|
type: 'html',
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.normalizeWebUrl = exports.isValidWebUrl = void 0;
|
|
7
|
+
// Only absolute HTTP(S) URLs may be opened or embedded in the editor.
|
|
8
|
+
var normalizeWebUrl = exports.normalizeWebUrl = function normalizeWebUrl() {
|
|
9
|
+
var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
10
|
+
if (typeof value !== 'string') return '';
|
|
11
|
+
var input = value.trim();
|
|
12
|
+
if (!/^https?:\/\//i.test(input)) return '';
|
|
13
|
+
try {
|
|
14
|
+
var url = new URL(input);
|
|
15
|
+
if (!['http:', 'https:'].includes(url.protocol) || !url.hostname) return '';
|
|
16
|
+
return url.href;
|
|
17
|
+
} catch (error) {
|
|
18
|
+
return '';
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
var isValidWebUrl = exports.isValidWebUrl = function isValidWebUrl() {
|
|
22
|
+
var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
23
|
+
return Boolean(normalizeWebUrl(value));
|
|
24
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seafile/sdoc-editor",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.253",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"test": "jest",
|
|
@@ -30,7 +30,6 @@
|
|
|
30
30
|
"dayjs": "1.10.7",
|
|
31
31
|
"deep-copy": "1.4.2",
|
|
32
32
|
"is-hotkey": "0.2.0",
|
|
33
|
-
"is-url": "^1.2.4",
|
|
34
33
|
"lodash.throttle": "4.1.1",
|
|
35
34
|
"prismjs": "^1.30.0",
|
|
36
35
|
"randomcolor": "0.6.2",
|
|
@@ -71,5 +70,5 @@
|
|
|
71
70
|
"publishConfig": {
|
|
72
71
|
"access": "public"
|
|
73
72
|
},
|
|
74
|
-
"gitHead": "
|
|
73
|
+
"gitHead": "c611c7584955e57fc785a18198584f10bbdb0425"
|
|
75
74
|
}
|