@seafile/sdoc-editor 3.0.219 → 3.0.221
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/sdoc-editor-plugins.css +70 -0
- package/dist/extension/plugins/html/rules/link.js +40 -0
- package/dist/extension/plugins/image/helpers.js +33 -1
- package/dist/extension/plugins/image/hover-menu/index.js +122 -30
- package/dist/extension/plugins/image/link-helpers.js +58 -0
- package/dist/extension/plugins/image/plugin.js +3 -2
- package/dist/extension/plugins/image/popover/image-link-popover/helpers.js +80 -0
- package/dist/extension/plugins/image/popover/image-link-popover/index.css +135 -0
- package/dist/extension/plugins/image/popover/image-link-popover/index.js +143 -0
- package/dist/extension/plugins/image/render-elem.js +124 -47
- package/dist/extension/plugins/table/plugin.js +31 -7
- package/dist/slate-convert/html-to-slate/rules/link.js +40 -0
- package/dist/slate-convert/md-to-slate/transform.js +22 -2
- package/dist/slate-convert/slate-to-md/transform.js +17 -1
- package/package.json +2 -2
|
@@ -155,12 +155,82 @@
|
|
|
155
155
|
margin: 0;
|
|
156
156
|
}
|
|
157
157
|
|
|
158
|
+
.sdoc-editor__article .sdoc-image-visual {
|
|
159
|
+
position: relative;
|
|
160
|
+
display: inline-block;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
.sdoc-editor__article .sdoc-image-readonly-link-indicator {
|
|
164
|
+
position: absolute;
|
|
165
|
+
z-index: 2;
|
|
166
|
+
opacity: 0;
|
|
167
|
+
visibility: hidden;
|
|
168
|
+
transition: opacity 0.15s ease;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
.sdoc-editor__article .sdoc-image-readonly-link-indicator {
|
|
172
|
+
bottom: 8px;
|
|
173
|
+
left: 8px;
|
|
174
|
+
display: flex;
|
|
175
|
+
max-width: calc(100% - 16px);
|
|
176
|
+
color: #fff;
|
|
177
|
+
font-size: 14px;
|
|
178
|
+
line-height: 20px;
|
|
179
|
+
align-items: center;
|
|
180
|
+
gap: 6px;
|
|
181
|
+
pointer-events: none;
|
|
182
|
+
text-shadow: 0 1px 3px rgba(0, 0, 0, 0.7);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
.sdoc-editor__article .sdoc-image-readonly-link-indicator .sdocfont {
|
|
186
|
+
flex: 0 0 auto;
|
|
187
|
+
font-size: 18px;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
.sdoc-editor__article .sdoc-image-readonly-link-name {
|
|
191
|
+
min-width: 0;
|
|
192
|
+
overflow: hidden;
|
|
193
|
+
text-overflow: ellipsis;
|
|
194
|
+
white-space: nowrap;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
.sdoc-editor__article .sdoc-image-readonly-fullscreen-container {
|
|
198
|
+
top: -42px;
|
|
199
|
+
left: -3px;
|
|
200
|
+
z-index: auto;
|
|
201
|
+
opacity: 0;
|
|
202
|
+
visibility: hidden;
|
|
203
|
+
pointer-events: none;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
.sdoc-editor__article .sdoc-image-visual:hover .sdoc-image-readonly-fullscreen-container,
|
|
207
|
+
.sdoc-editor__article .sdoc-image-readonly-fullscreen-container:focus-within {
|
|
208
|
+
opacity: 1;
|
|
209
|
+
visibility: visible;
|
|
210
|
+
pointer-events: auto;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
.sdoc-editor__article .sdoc-image-visual:hover .sdoc-image-readonly-link-indicator {
|
|
214
|
+
opacity: 1;
|
|
215
|
+
visibility: visible;
|
|
216
|
+
}
|
|
217
|
+
|
|
158
218
|
.sdoc-editor__article .sdoc-image-content {
|
|
159
219
|
display: flex;
|
|
160
220
|
flex-direction: column;
|
|
161
221
|
align-items: center;
|
|
162
222
|
}
|
|
163
223
|
|
|
224
|
+
.sdoc-editor__article .sdoc-image-page-link {
|
|
225
|
+
display: inline-block;
|
|
226
|
+
cursor: pointer;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
.sdoc-editor__article .sdoc-image-page-link:focus-visible {
|
|
230
|
+
outline: 2px solid #1991eb;
|
|
231
|
+
outline-offset: 2px;
|
|
232
|
+
}
|
|
233
|
+
|
|
164
234
|
.sdoc-editor__article .sdoc-image-content :first-child {
|
|
165
235
|
position: relative;
|
|
166
236
|
}
|
|
@@ -5,12 +5,52 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports["default"] = void 0;
|
|
8
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
|
|
8
9
|
var _slugid = _interopRequireDefault(require("slugid"));
|
|
9
10
|
var _constants = require("../../../constants");
|
|
11
|
+
var _linkHelpers = require("../../image/link-helpers");
|
|
10
12
|
var linkRule = function linkRule(element, parseChild) {
|
|
11
13
|
var nodeName = element.nodeName;
|
|
12
14
|
var content = element.textContent || element.getAttribute('title') || element.getAttribute('href');
|
|
13
15
|
if (nodeName === 'A') {
|
|
16
|
+
var image = (0, _linkHelpers.getOnlyImageChild)(element);
|
|
17
|
+
if (image) {
|
|
18
|
+
var href = (0, _linkHelpers.normalizeWebUrl)(element.getAttribute('href'));
|
|
19
|
+
return {
|
|
20
|
+
id: _slugid["default"].nice(),
|
|
21
|
+
type: _constants.IMAGE,
|
|
22
|
+
data: (0, _objectSpread2["default"])({
|
|
23
|
+
src: image.getAttribute('src')
|
|
24
|
+
}, href && {
|
|
25
|
+
href: href
|
|
26
|
+
}),
|
|
27
|
+
children: [{
|
|
28
|
+
text: '',
|
|
29
|
+
id: _slugid["default"].nice()
|
|
30
|
+
}]
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
if (element.querySelector('img')) {
|
|
34
|
+
var _href = (0, _linkHelpers.normalizeWebUrl)(element.getAttribute('href'));
|
|
35
|
+
return parseChild(element.childNodes).map(function (child) {
|
|
36
|
+
if (!_href) return child;
|
|
37
|
+
if (child.type === _constants.IMAGE) return (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, child), {}, {
|
|
38
|
+
data: (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, child.data), {}, {
|
|
39
|
+
href: _href
|
|
40
|
+
})
|
|
41
|
+
});
|
|
42
|
+
if (typeof child.text === 'string') {
|
|
43
|
+
return {
|
|
44
|
+
id: _slugid["default"].nice(),
|
|
45
|
+
type: _constants.LINK,
|
|
46
|
+
href: _href,
|
|
47
|
+
title: element.getAttribute('title'),
|
|
48
|
+
children: [child]
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
return child;
|
|
52
|
+
});
|
|
53
|
+
}
|
|
14
54
|
return {
|
|
15
55
|
id: _slugid["default"].nice(),
|
|
16
56
|
type: _constants.LINK,
|
|
@@ -4,8 +4,16 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.
|
|
7
|
+
exports.getImageURL = exports.getImageData = exports.getDigitalSignImgUrl = exports.getColumnByKey = exports.generateImageNode = exports.generateImageInfos = void 0;
|
|
8
|
+
Object.defineProperty(exports, "getImageWikiPageUrl", {
|
|
9
|
+
enumerable: true,
|
|
10
|
+
get: function get() {
|
|
11
|
+
return _linkHelpers.getImageWikiPageUrl;
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
exports.updateImage = exports.selectImageWhenSelectPartial = exports.resetCursor = exports.removeImageWikiPageLinks = exports.removeImageBlockNode = exports.queryCopyMoveProgressView = exports.isInsertImageMenuDisabled = exports.isImageUrlIsFromUpload = exports.isImageUrlIsFromCopy = exports.isCommentEditor = exports.insertImageFiles = exports.insertImage = exports.hasSdocImages = exports.handleBase64Image = exports.getSingleImageFromFragment = void 0;
|
|
8
15
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/toConsumableArray"));
|
|
16
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectWithoutProperties"));
|
|
9
17
|
var _regenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/regenerator"));
|
|
10
18
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/asyncToGenerator"));
|
|
11
19
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
|
|
@@ -22,6 +30,8 @@ var _constants2 = require("../../constants");
|
|
|
22
30
|
var _core = require("../../core");
|
|
23
31
|
var _base64ToUnit8array = _interopRequireDefault(require("./base64-to-unit8array"));
|
|
24
32
|
var _imageCache = _interopRequireDefault(require("./image-cache"));
|
|
33
|
+
var _linkHelpers = require("./link-helpers");
|
|
34
|
+
var _excluded = ["href", "linked_wiki_id", "linked_wiki_page_id"];
|
|
25
35
|
// TODO: seatable_column
|
|
26
36
|
var getDigitalSignImgUrl = exports.getDigitalSignImgUrl = function getDigitalSignImgUrl(partUrl) {
|
|
27
37
|
var server = _context2["default"].getSetting('serviceUrl');
|
|
@@ -287,6 +297,28 @@ var getSingleImageFromFragment = exports.getSingleImageFromFragment = function g
|
|
|
287
297
|
if (images.length !== 1) return null;
|
|
288
298
|
return images[0];
|
|
289
299
|
};
|
|
300
|
+
var _removeImageWikiPageLinks = exports.removeImageWikiPageLinks = function removeImageWikiPageLinks() {
|
|
301
|
+
var nodes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
302
|
+
return nodes.map(function (node) {
|
|
303
|
+
if ((node === null || node === void 0 ? void 0 : node.type) === _constants2.IMAGE) {
|
|
304
|
+
var _node$data, _node$data2;
|
|
305
|
+
var isWikiPageLink = Boolean(((_node$data = node.data) === null || _node$data === void 0 ? void 0 : _node$data.linked_wiki_id) || ((_node$data2 = node.data) === null || _node$data2 === void 0 ? void 0 : _node$data2.linked_wiki_page_id));
|
|
306
|
+
if (!isWikiPageLink) return node;
|
|
307
|
+
var _ref4 = node.data || {},
|
|
308
|
+
href = _ref4.href,
|
|
309
|
+
linked_wiki_id = _ref4.linked_wiki_id,
|
|
310
|
+
linked_wiki_page_id = _ref4.linked_wiki_page_id,
|
|
311
|
+
data = (0, _objectWithoutProperties2["default"])(_ref4, _excluded);
|
|
312
|
+
return (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, node), {}, {
|
|
313
|
+
data: data
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
if (!Array.isArray(node === null || node === void 0 ? void 0 : node.children)) return node;
|
|
317
|
+
return (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, node), {}, {
|
|
318
|
+
children: _removeImageWikiPageLinks(node.children)
|
|
319
|
+
});
|
|
320
|
+
});
|
|
321
|
+
};
|
|
290
322
|
var insertImageFiles = exports.insertImageFiles = function insertImageFiles(files, editor, targetPath) {
|
|
291
323
|
var imgInfos = generateImageInfos(files);
|
|
292
324
|
insertImage(editor, imgInfos, targetPath, _constants2.INSERT_POSITION.AFTER);
|
|
@@ -1,12 +1,13 @@
|
|
|
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"];
|
|
4
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"];
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
8
|
exports["default"] = void 0;
|
|
9
9
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
|
|
10
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectWithoutProperties"));
|
|
10
11
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
|
|
11
12
|
var _react = _interopRequireWildcard(require("react"));
|
|
12
13
|
var _reactI18next = require("react-i18next");
|
|
@@ -14,15 +15,22 @@ var _slate = require("@seafile/slate");
|
|
|
14
15
|
var _slateReact = require("@seafile/slate-react");
|
|
15
16
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
16
17
|
var _tooltip = _interopRequireDefault(require("../../../../components/tooltip"));
|
|
18
|
+
var _constants = require("../../../../constants");
|
|
17
19
|
var _commons = require("../../../commons");
|
|
18
|
-
var
|
|
20
|
+
var _constants2 = require("../../../constants");
|
|
19
21
|
var _core = require("../../../core");
|
|
20
|
-
var
|
|
22
|
+
var _constants3 = require("../constants");
|
|
21
23
|
var _imagePreviewer = _interopRequireDefault(require("../dialogs/image-previewer"));
|
|
22
24
|
var _helpers = require("../helpers");
|
|
25
|
+
var _linkHelpers = require("../link-helpers");
|
|
26
|
+
var _imageLinkPopover = _interopRequireDefault(require("../popover/image-link-popover"));
|
|
23
27
|
require("./index.css");
|
|
28
|
+
var _excluded = ["href", "linked_wiki_id", "linked_wiki_page_id"],
|
|
29
|
+
_excluded2 = ["href", "linked_wiki_id", "linked_wiki_page_id"],
|
|
30
|
+
_excluded3 = ["href", "linked_wiki_id", "linked_wiki_page_id"];
|
|
24
31
|
var ImageHoverMenu = function ImageHoverMenu(_ref) {
|
|
25
32
|
var editor = _ref.editor,
|
|
33
|
+
menuRef = _ref.menuRef,
|
|
26
34
|
menuPosition = _ref.menuPosition,
|
|
27
35
|
element = _ref.element,
|
|
28
36
|
parentNodeEntry = _ref.parentNodeEntry,
|
|
@@ -32,7 +40,7 @@ var ImageHoverMenu = function ImageHoverMenu(_ref) {
|
|
|
32
40
|
readonly = _ref.readonly;
|
|
33
41
|
var data = element.data,
|
|
34
42
|
_element$border_type = element.border_type,
|
|
35
|
-
border_type = _element$border_type === void 0 ?
|
|
43
|
+
border_type = _element$border_type === void 0 ? _constants3.IMAGE_BORDER_TYPE[0].type : _element$border_type;
|
|
36
44
|
var _parentNodeEntry$ = parentNodeEntry[0],
|
|
37
45
|
_parentNodeEntry$$ali = _parentNodeEntry$.align,
|
|
38
46
|
align = _parentNodeEntry$$ali === void 0 ? 'left' : _parentNodeEntry$$ali,
|
|
@@ -53,28 +61,82 @@ var ImageHoverMenu = function ImageHoverMenu(_ref) {
|
|
|
53
61
|
setIsShowImagePreview = _useState4[1];
|
|
54
62
|
var _useState5 = (0, _react.useState)(false),
|
|
55
63
|
_useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
|
|
56
|
-
|
|
57
|
-
|
|
64
|
+
isShowImageLinkPopover = _useState6[0],
|
|
65
|
+
setIsShowImageLinkPopover = _useState6[1];
|
|
66
|
+
var _useState7 = (0, _react.useState)(false),
|
|
67
|
+
_useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
|
|
68
|
+
isShowTooltip = _useState8[0],
|
|
69
|
+
setIsShowTooltip = _useState8[1];
|
|
70
|
+
var isWiki = editor.editorType === _constants.WIKI_EDITOR;
|
|
71
|
+
var currentHref = data.href;
|
|
58
72
|
(0, _react.useEffect)(function () {
|
|
59
73
|
setIsShowTooltip(true);
|
|
60
74
|
}, []);
|
|
75
|
+
var updateImageLink = (0, _react.useCallback)(function (href) {
|
|
76
|
+
var path = _slateReact.ReactEditor.findPath(editor, element);
|
|
77
|
+
var oldHref = data.href,
|
|
78
|
+
linked_wiki_id = data.linked_wiki_id,
|
|
79
|
+
linked_wiki_page_id = data.linked_wiki_page_id,
|
|
80
|
+
newData = (0, _objectWithoutProperties2["default"])(data, _excluded);
|
|
81
|
+
var normalizedHref = (0, _linkHelpers.normalizeWebUrl)(href);
|
|
82
|
+
_slate.Transforms.setNodes(editor, {
|
|
83
|
+
data: (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, newData), {}, {
|
|
84
|
+
href: normalizedHref
|
|
85
|
+
})
|
|
86
|
+
}, {
|
|
87
|
+
at: path
|
|
88
|
+
});
|
|
89
|
+
setIsShowImageLinkPopover(false);
|
|
90
|
+
onHideImageHoverMenu();
|
|
91
|
+
}, [data, editor, element, onHideImageHoverMenu]);
|
|
92
|
+
var updateImagePageLink = (0, _react.useCallback)(function (pageId, wikiId) {
|
|
93
|
+
var path = _slateReact.ReactEditor.findPath(editor, element);
|
|
94
|
+
var href = data.href,
|
|
95
|
+
linked_wiki_id = data.linked_wiki_id,
|
|
96
|
+
linked_wiki_page_id = data.linked_wiki_page_id,
|
|
97
|
+
newData = (0, _objectWithoutProperties2["default"])(data, _excluded2);
|
|
98
|
+
_slate.Transforms.setNodes(editor, {
|
|
99
|
+
data: (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, newData), {}, {
|
|
100
|
+
href: (0, _linkHelpers.getImageWikiPageUrl)(wikiId, pageId),
|
|
101
|
+
linked_wiki_id: wikiId,
|
|
102
|
+
linked_wiki_page_id: pageId
|
|
103
|
+
})
|
|
104
|
+
}, {
|
|
105
|
+
at: path
|
|
106
|
+
});
|
|
107
|
+
setIsShowImageLinkPopover(false);
|
|
108
|
+
onHideImageHoverMenu();
|
|
109
|
+
}, [data, editor, element, onHideImageHoverMenu]);
|
|
110
|
+
var removeImageLink = (0, _react.useCallback)(function () {
|
|
111
|
+
var path = _slateReact.ReactEditor.findPath(editor, element);
|
|
112
|
+
var href = data.href,
|
|
113
|
+
linked_wiki_id = data.linked_wiki_id,
|
|
114
|
+
linked_wiki_page_id = data.linked_wiki_page_id,
|
|
115
|
+
newData = (0, _objectWithoutProperties2["default"])(data, _excluded3);
|
|
116
|
+
_slate.Transforms.setNodes(editor, {
|
|
117
|
+
data: newData
|
|
118
|
+
}, {
|
|
119
|
+
at: path
|
|
120
|
+
});
|
|
121
|
+
setIsShowImageLinkPopover(false);
|
|
122
|
+
onHideImageHoverMenu();
|
|
123
|
+
}, [data, editor, element, onHideImageHoverMenu]);
|
|
61
124
|
var onShowProver = (0, _react.useCallback)(function (event, showProverKey) {
|
|
62
125
|
event.stopPropagation();
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
newPopoverState[key] = false;
|
|
126
|
+
setIsShowImageLinkPopover(false);
|
|
127
|
+
setPopoverState(function (prevState) {
|
|
128
|
+
var nextState = {};
|
|
129
|
+
for (var key in prevState) {
|
|
130
|
+
nextState[key] = key === showProverKey ? !prevState[key] : false;
|
|
69
131
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
}, [
|
|
132
|
+
return nextState;
|
|
133
|
+
});
|
|
134
|
+
}, []);
|
|
73
135
|
var onSelect = (0, _react.useCallback)(function (event, props) {
|
|
74
136
|
event.stopPropagation();
|
|
75
137
|
var path = _slateReact.ReactEditor.findPath(editor, element);
|
|
76
138
|
if (path) {
|
|
77
|
-
if (props['display_type'] ===
|
|
139
|
+
if (props['display_type'] === _constants2.IMAGE_BLOCK && type === _constants2.PARAGRAPH) {
|
|
78
140
|
// Remove old node
|
|
79
141
|
var nodeEntry = _slate.Editor.node(editor, [path[0]]);
|
|
80
142
|
var newNodeEntry = JSON.parse(JSON.stringify(nodeEntry.slice(0)));
|
|
@@ -96,14 +158,14 @@ var ImageHoverMenu = function ImageHoverMenu(_ref) {
|
|
|
96
158
|
var _item$text;
|
|
97
159
|
return (item === null || item === void 0 ? void 0 : (_item$text = item.text) === null || _item$text === void 0 ? void 0 : _item$text.length) === 0;
|
|
98
160
|
})) {
|
|
99
|
-
beforeNode = (0, _core.generateEmptyElement)(
|
|
161
|
+
beforeNode = (0, _core.generateEmptyElement)(_constants2.PARAGRAPH);
|
|
100
162
|
beforeNode.children = beforeLeaf;
|
|
101
163
|
_slate.Transforms.insertNodes(editor, beforeNode, {
|
|
102
164
|
at: [p]
|
|
103
165
|
});
|
|
104
166
|
p = p + 1;
|
|
105
167
|
}
|
|
106
|
-
centerNode = (0, _core.generateEmptyElement)(
|
|
168
|
+
centerNode = (0, _core.generateEmptyElement)(_constants2.IMAGE_BLOCK);
|
|
107
169
|
centerNode.children = imageLeaf;
|
|
108
170
|
_slate.Transforms.insertNodes(editor, centerNode, {
|
|
109
171
|
at: [p]
|
|
@@ -113,7 +175,7 @@ var ImageHoverMenu = function ImageHoverMenu(_ref) {
|
|
|
113
175
|
var _item$text2;
|
|
114
176
|
return (item === null || item === void 0 ? void 0 : (_item$text2 = item.text) === null || _item$text2 === void 0 ? void 0 : _item$text2.length) === 0;
|
|
115
177
|
})) {
|
|
116
|
-
afterNode = (0, _core.generateEmptyElement)(
|
|
178
|
+
afterNode = (0, _core.generateEmptyElement)(_constants2.PARAGRAPH);
|
|
117
179
|
afterNode.children = afterLeaf;
|
|
118
180
|
_slate.Transforms.insertNodes(editor, afterNode, {
|
|
119
181
|
at: [p]
|
|
@@ -121,13 +183,13 @@ var ImageHoverMenu = function ImageHoverMenu(_ref) {
|
|
|
121
183
|
}
|
|
122
184
|
return;
|
|
123
185
|
}
|
|
124
|
-
if (props['display_type'] ===
|
|
186
|
+
if (props['display_type'] === _constants2.PARAGRAPH && type === _constants2.IMAGE_BLOCK) {
|
|
125
187
|
var _nodeEntry = _slate.Editor.node(editor, [path[0]]);
|
|
126
188
|
var _newNodeEntry = JSON.parse(JSON.stringify(_nodeEntry.slice(0)));
|
|
127
189
|
_slate.Transforms.removeNodes(editor, {
|
|
128
190
|
at: [path[0]]
|
|
129
191
|
});
|
|
130
|
-
var newNode = (0, _core.generateEmptyElement)(
|
|
192
|
+
var newNode = (0, _core.generateEmptyElement)(_constants2.PARAGRAPH);
|
|
131
193
|
newNode.children = _newNodeEntry[0].children;
|
|
132
194
|
_slate.Transforms.insertNodes(editor, newNode, {
|
|
133
195
|
at: [path[0]]
|
|
@@ -166,10 +228,11 @@ var ImageHoverMenu = function ImageHoverMenu(_ref) {
|
|
|
166
228
|
}, []);
|
|
167
229
|
return /*#__PURE__*/_react["default"].createElement(_commons.ElementPopover, null, /*#__PURE__*/_react["default"].createElement("div", {
|
|
168
230
|
className: "sdoc-image-hover-menu-container",
|
|
231
|
+
ref: menuRef,
|
|
169
232
|
style: menuPosition
|
|
170
233
|
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
171
234
|
className: "hover-menu-container"
|
|
172
|
-
}, ![
|
|
235
|
+
}, ![_constants2.TABLE, _constants2.BLOCKQUOTE, _constants2.CALL_OUT, _constants2.MULTI_COLUMN].includes(type) && !readonly && /*#__PURE__*/_react["default"].createElement("span", {
|
|
173
236
|
className: "op-group-item"
|
|
174
237
|
}, /*#__PURE__*/_react["default"].createElement("span", {
|
|
175
238
|
role: "button",
|
|
@@ -181,11 +244,11 @@ var ImageHoverMenu = function ImageHoverMenu(_ref) {
|
|
|
181
244
|
}
|
|
182
245
|
}, /*#__PURE__*/_react["default"].createElement("span", {
|
|
183
246
|
className: "mr-1"
|
|
184
|
-
}, t(type ===
|
|
247
|
+
}, t(type === _constants2.IMAGE_BLOCK ? 'Block' : 'Inline')), /*#__PURE__*/_react["default"].createElement("i", {
|
|
185
248
|
className: "sdocfont sdoc-arrow-down"
|
|
186
249
|
}), popoverState.displayPopover && /*#__PURE__*/_react["default"].createElement("div", {
|
|
187
250
|
className: "sdoc-image-popover sdoc-dropdown-menu"
|
|
188
|
-
},
|
|
251
|
+
}, _constants3.IMAGE_DISPLAY_TYPE.map(function (item) {
|
|
189
252
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
190
253
|
key: item.value,
|
|
191
254
|
className: (0, _classnames["default"])('sdoc-dropdown-menu-item', {
|
|
@@ -201,7 +264,7 @@ var ImageHoverMenu = function ImageHoverMenu(_ref) {
|
|
|
201
264
|
}));
|
|
202
265
|
})))), !readonly && /*#__PURE__*/_react["default"].createElement("span", {
|
|
203
266
|
className: "op-group-item"
|
|
204
|
-
}, type ===
|
|
267
|
+
}, type === _constants2.IMAGE_BLOCK && /*#__PURE__*/_react["default"].createElement("span", {
|
|
205
268
|
id: "sdoc_image_alignment",
|
|
206
269
|
role: "button",
|
|
207
270
|
className: (0, _classnames["default"])('op-item', {
|
|
@@ -216,7 +279,7 @@ var ImageHoverMenu = function ImageHoverMenu(_ref) {
|
|
|
216
279
|
className: "sdocfont sdoc-arrow-down"
|
|
217
280
|
}), popoverState.alignPopover && /*#__PURE__*/_react["default"].createElement("div", {
|
|
218
281
|
className: "sdoc-image-popover align-popover sdoc-dropdown-menu"
|
|
219
|
-
},
|
|
282
|
+
}, _constants2.MENUS_CONFIG_MAP[_constants2.TEXT_ALIGN].map(function (item) {
|
|
220
283
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
221
284
|
key: item.id,
|
|
222
285
|
className: (0, _classnames["default"])('sdoc-dropdown-menu-item', {
|
|
@@ -241,7 +304,7 @@ var ImageHoverMenu = function ImageHoverMenu(_ref) {
|
|
|
241
304
|
role: "button",
|
|
242
305
|
className: (0, _classnames["default"])('op-item', {
|
|
243
306
|
'active': popoverState.borderPopover,
|
|
244
|
-
'ml-1': ![
|
|
307
|
+
'ml-1': ![_constants2.TABLE, _constants2.BLOCKQUOTE, _constants2.CALL_OUT, _constants2.MULTI_COLUMN].includes(type)
|
|
245
308
|
}),
|
|
246
309
|
onClick: function onClick(e) {
|
|
247
310
|
onShowProver(e, 'borderPopover');
|
|
@@ -252,7 +315,7 @@ var ImageHoverMenu = function ImageHoverMenu(_ref) {
|
|
|
252
315
|
className: "sdocfont sdoc-arrow-down"
|
|
253
316
|
}), popoverState.borderPopover && /*#__PURE__*/_react["default"].createElement("div", {
|
|
254
317
|
className: "sdoc-image-popover border-popover sdoc-dropdown-menu"
|
|
255
|
-
},
|
|
318
|
+
}, _constants3.IMAGE_BORDER_TYPE.map(function (item) {
|
|
256
319
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
257
320
|
key: item.type,
|
|
258
321
|
className: "sdoc-dropdown-menu-item sdoc-dropdown-item-with-left-icon pr-2",
|
|
@@ -274,7 +337,7 @@ var ImageHoverMenu = function ImageHoverMenu(_ref) {
|
|
|
274
337
|
target: "sdoc_image_border",
|
|
275
338
|
placement: "top",
|
|
276
339
|
fade: true
|
|
277
|
-
}, t('Image_border'))), type ===
|
|
340
|
+
}, t('Image_border'))), type === _constants2.IMAGE_BLOCK && /*#__PURE__*/_react["default"].createElement("span", {
|
|
278
341
|
id: "sdoc_image_caption",
|
|
279
342
|
role: "button",
|
|
280
343
|
className: (0, _classnames["default"])('op-item', 'ml-1', {
|
|
@@ -291,7 +354,36 @@ var ImageHoverMenu = function ImageHoverMenu(_ref) {
|
|
|
291
354
|
target: "sdoc_image_caption",
|
|
292
355
|
placement: "top",
|
|
293
356
|
fade: true
|
|
294
|
-
}, t('Caption')))
|
|
357
|
+
}, t('Caption'))), /*#__PURE__*/_react["default"].createElement("span", {
|
|
358
|
+
id: "sdoc_image_link",
|
|
359
|
+
role: "button",
|
|
360
|
+
className: (0, _classnames["default"])('op-item', 'ml-1', {
|
|
361
|
+
'active': currentHref || isShowImageLinkPopover
|
|
362
|
+
}),
|
|
363
|
+
onClick: function onClick(event) {
|
|
364
|
+
event.stopPropagation();
|
|
365
|
+
setPopoverState({
|
|
366
|
+
displayPopover: false,
|
|
367
|
+
alignPopover: false,
|
|
368
|
+
borderPopover: false
|
|
369
|
+
});
|
|
370
|
+
setIsShowImageLinkPopover(!isShowImageLinkPopover);
|
|
371
|
+
}
|
|
372
|
+
}, /*#__PURE__*/_react["default"].createElement("i", {
|
|
373
|
+
className: "sdocfont sdoc-link"
|
|
374
|
+
}), isShowTooltip && !isShowImageLinkPopover && /*#__PURE__*/_react["default"].createElement(_tooltip["default"], {
|
|
375
|
+
target: "sdoc_image_link",
|
|
376
|
+
placement: "top",
|
|
377
|
+
fade: true
|
|
378
|
+
}, t(currentHref ? 'Edit_link' : 'Insert_link')), isShowImageLinkPopover && /*#__PURE__*/_react["default"].createElement(_imageLinkPopover["default"], {
|
|
379
|
+
editor: editor,
|
|
380
|
+
href: currentHref,
|
|
381
|
+
linkedPageId: isWiki ? data.linked_wiki_page_id : '',
|
|
382
|
+
linkedWikiId: isWiki ? data.linked_wiki_id : '',
|
|
383
|
+
onRemove: removeImageLink,
|
|
384
|
+
onSelectPage: updateImagePageLink,
|
|
385
|
+
onSubmit: updateImageLink
|
|
386
|
+
}))), /*#__PURE__*/_react["default"].createElement("span", {
|
|
295
387
|
className: "op-group-item"
|
|
296
388
|
}, /*#__PURE__*/_react["default"].createElement("span", {
|
|
297
389
|
id: "sdoc_image_full_screen_mode",
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.normalizeWebUrl = exports.isValidWebUrl = exports.isInternalWebUrl = exports.isCurrentServerUrl = exports.getOnlyImageChild = exports.getImageWikiPageUrl = void 0;
|
|
8
|
+
var _context = _interopRequireDefault(require("../../../context"));
|
|
9
|
+
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
|
+
var isInternalWebUrl = exports.isInternalWebUrl = function isInternalWebUrl() {
|
|
27
|
+
var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
28
|
+
var url = normalizeWebUrl(value);
|
|
29
|
+
var serviceUrl = _context["default"].getSetting('serviceUrl');
|
|
30
|
+
if (!url || !serviceUrl) return false;
|
|
31
|
+
try {
|
|
32
|
+
return new URL(url).origin === new URL(serviceUrl).origin;
|
|
33
|
+
} catch (error) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
var isCurrentServerUrl = exports.isCurrentServerUrl = isInternalWebUrl;
|
|
38
|
+
var getOnlyImageChild = exports.getOnlyImageChild = function getOnlyImageChild(element) {
|
|
39
|
+
var _meaningfulChildren$;
|
|
40
|
+
var meaningfulChildren = Array.from((element === null || element === void 0 ? void 0 : element.childNodes) || []).filter(function (child) {
|
|
41
|
+
var _child$textContent;
|
|
42
|
+
if (child.nodeType === 8) return false;
|
|
43
|
+
return child.nodeType !== 3 || Boolean((_child$textContent = child.textContent) === null || _child$textContent === void 0 ? void 0 : _child$textContent.trim());
|
|
44
|
+
});
|
|
45
|
+
if (meaningfulChildren.length !== 1 || ((_meaningfulChildren$ = meaningfulChildren[0]) === null || _meaningfulChildren$ === void 0 ? void 0 : _meaningfulChildren$.nodeName) !== 'IMG') return null;
|
|
46
|
+
return meaningfulChildren[0];
|
|
47
|
+
};
|
|
48
|
+
var getImageWikiPageUrl = exports.getImageWikiPageUrl = function getImageWikiPageUrl(wikiId, pageId) {
|
|
49
|
+
if (!wikiId || !pageId) return '';
|
|
50
|
+
var wikiUrl = (0, _helpers.getWikiUrl)(wikiId, pageId, false);
|
|
51
|
+
var serviceUrl = _context["default"].getSetting('serviceUrl');
|
|
52
|
+
if (!serviceUrl) return wikiUrl;
|
|
53
|
+
try {
|
|
54
|
+
return new URL(wikiUrl, serviceUrl).toString();
|
|
55
|
+
} catch (error) {
|
|
56
|
+
return wikiUrl;
|
|
57
|
+
}
|
|
58
|
+
};
|
|
@@ -78,7 +78,8 @@ var withImage = function withImage(editor) {
|
|
|
78
78
|
insertData(data);
|
|
79
79
|
};
|
|
80
80
|
newEditor.insertFragment = function (data) {
|
|
81
|
-
var
|
|
81
|
+
var fragment = editor.editorType === _constants.WIKI_EDITOR ? data : (0, _helpers.removeImageWikiPageLinks)(data);
|
|
82
|
+
var singleImage = (0, _helpers.getSingleImageFromFragment)(fragment);
|
|
82
83
|
if (singleImage && (0, _helpers.isInsertImageMenuDisabled)(editor)) {
|
|
83
84
|
var path = _slate.Editor.path(editor, editor.selection);
|
|
84
85
|
var nextPath = _slate.Path.next([path[0]]);
|
|
@@ -95,7 +96,7 @@ var withImage = function withImage(editor) {
|
|
|
95
96
|
if (singleImage) {
|
|
96
97
|
(0, _helpers.resetCursor)(newEditor);
|
|
97
98
|
}
|
|
98
|
-
return insertFragment(
|
|
99
|
+
return insertFragment(fragment);
|
|
99
100
|
};
|
|
100
101
|
newEditor.imageOnKeyDown = function (e) {
|
|
101
102
|
if (e.keyCode === 13) {
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getWikiPageLinkOptions = exports.getFuzzyPageResults = void 0;
|
|
7
|
+
Object.defineProperty(exports, "isValidWebUrl", {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
get: function get() {
|
|
10
|
+
return _linkHelpers.isValidWebUrl;
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
var _linkHelpers = require("../../link-helpers");
|
|
14
|
+
var normalizeText = function normalizeText() {
|
|
15
|
+
var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
16
|
+
return value.normalize('NFKC').toLocaleLowerCase().trim();
|
|
17
|
+
};
|
|
18
|
+
var getFuzzyScore = function getFuzzyScore(value, query) {
|
|
19
|
+
var normalizedValue = normalizeText(value);
|
|
20
|
+
var normalizedQuery = normalizeText(query);
|
|
21
|
+
if (!normalizedQuery) return 0;
|
|
22
|
+
if (normalizedValue === normalizedQuery) return 0;
|
|
23
|
+
if (normalizedValue.startsWith(normalizedQuery)) return 1;
|
|
24
|
+
var includedAt = normalizedValue.indexOf(normalizedQuery);
|
|
25
|
+
if (includedAt > -1) return 2 + includedAt;
|
|
26
|
+
var queryIndex = 0;
|
|
27
|
+
var firstMatchIndex = -1;
|
|
28
|
+
var previousMatchIndex = -1;
|
|
29
|
+
var gapScore = 0;
|
|
30
|
+
for (var valueIndex = 0; valueIndex < normalizedValue.length && queryIndex < normalizedQuery.length; valueIndex++) {
|
|
31
|
+
if (normalizedValue[valueIndex] !== normalizedQuery[queryIndex]) continue;
|
|
32
|
+
if (firstMatchIndex === -1) firstMatchIndex = valueIndex;
|
|
33
|
+
if (previousMatchIndex > -1) gapScore += valueIndex - previousMatchIndex - 1;
|
|
34
|
+
previousMatchIndex = valueIndex;
|
|
35
|
+
queryIndex++;
|
|
36
|
+
}
|
|
37
|
+
if (queryIndex !== normalizedQuery.length) return null;
|
|
38
|
+
return 100 + firstMatchIndex + gapScore;
|
|
39
|
+
};
|
|
40
|
+
var getFuzzyPageResults = exports.getFuzzyPageResults = function getFuzzyPageResults() {
|
|
41
|
+
var pages = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
42
|
+
var query = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
43
|
+
var limit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 8;
|
|
44
|
+
return pages.map(function (page, index) {
|
|
45
|
+
var nameScore = getFuzzyScore(page === null || page === void 0 ? void 0 : page.name, query);
|
|
46
|
+
return {
|
|
47
|
+
page: page,
|
|
48
|
+
index: index,
|
|
49
|
+
score: nameScore
|
|
50
|
+
};
|
|
51
|
+
}).filter(function (item) {
|
|
52
|
+
var _item$page;
|
|
53
|
+
return ((_item$page = item.page) === null || _item$page === void 0 ? void 0 : _item$page.id) && item.score !== null;
|
|
54
|
+
}).sort(function (a, b) {
|
|
55
|
+
return a.score - b.score || a.index - b.index;
|
|
56
|
+
}).slice(0, limit).map(function (item) {
|
|
57
|
+
return item.page;
|
|
58
|
+
});
|
|
59
|
+
};
|
|
60
|
+
var getWikiPageLinkOptions = exports.getWikiPageLinkOptions = function getWikiPageLinkOptions() {
|
|
61
|
+
var pages = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
62
|
+
var query = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
63
|
+
var linkedPageId = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
|
|
64
|
+
var linkedWikiId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';
|
|
65
|
+
var limit = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 8;
|
|
66
|
+
var isLinkedPage = function isLinkedPage(page) {
|
|
67
|
+
return (page === null || page === void 0 ? void 0 : page.id) === linkedPageId && (!linkedWikiId || (page === null || page === void 0 ? void 0 : page.wikiRepoId) === linkedWikiId);
|
|
68
|
+
};
|
|
69
|
+
var linkedPage = pages.find(isLinkedPage) || null;
|
|
70
|
+
var searchablePages = linkedPage ? pages.filter(function (page) {
|
|
71
|
+
return !isLinkedPage(page);
|
|
72
|
+
}) : pages;
|
|
73
|
+
var pageResults = getFuzzyPageResults(searchablePages, query, limit);
|
|
74
|
+
var isLinkedPageMatched = Boolean(linkedPage && getFuzzyPageResults([linkedPage], query, 1).length);
|
|
75
|
+
return {
|
|
76
|
+
linkedPage: linkedPage,
|
|
77
|
+
pageResults: pageResults,
|
|
78
|
+
hasPageMatch: isLinkedPageMatched || pageResults.length > 0
|
|
79
|
+
};
|
|
80
|
+
};
|