@seafile/sdoc-editor 1.0.220 → 1.0.221-alph-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/basic-sdk/assets/css/sdoc-editor-plugins.css +0 -23
- package/dist/basic-sdk/extension/commons/insert-element-dialog/index.js +12 -2
- package/dist/basic-sdk/extension/commons/search-list/index.css +28 -0
- package/dist/basic-sdk/extension/commons/search-list/index.js +150 -0
- package/dist/basic-sdk/extension/constants/element-type.js +2 -1
- package/dist/basic-sdk/extension/constants/index.js +8 -2
- package/dist/basic-sdk/extension/constants/menus-config.js +5 -0
- package/dist/basic-sdk/extension/plugins/font/helpers.js +7 -0
- package/dist/basic-sdk/extension/plugins/header/render-elem.js +2 -1
- package/dist/basic-sdk/extension/plugins/image/helpers.js +9 -21
- package/dist/basic-sdk/extension/plugins/image/image-loader/index.css +37 -0
- package/dist/basic-sdk/extension/plugins/image/image-loader/index.js +23 -0
- package/dist/basic-sdk/extension/plugins/image/render-elem.js +24 -76
- package/dist/basic-sdk/extension/plugins/image/use-upload-image.js +80 -0
- package/dist/basic-sdk/extension/plugins/index.js +7 -0
- package/dist/basic-sdk/extension/plugins/multi-column/plugin.js +1 -1
- package/dist/basic-sdk/extension/plugins/seatable-column/menu/column-list-item.js +36 -0
- package/dist/basic-sdk/extension/plugins/seatable-column/menu/column-list-menu.css +4 -2
- package/dist/basic-sdk/extension/plugins/seatable-column/menu/column-list-menu.js +8 -13
- package/dist/basic-sdk/extension/plugins/seatable-column/menu/index.js +5 -9
- package/dist/basic-sdk/extension/plugins/seatable-column/plugin.js +9 -1
- package/dist/basic-sdk/extension/plugins/seatable-column/render-elem.js +71 -7
- package/dist/basic-sdk/extension/plugins/seatable-row/dialog/add-seatable-row-dialog/helpers.js +35 -0
- package/dist/basic-sdk/extension/plugins/seatable-row/dialog/add-seatable-row-dialog/index.css +106 -0
- package/dist/basic-sdk/extension/plugins/seatable-row/dialog/add-seatable-row-dialog/index.js +81 -0
- package/dist/basic-sdk/extension/plugins/seatable-row/dialog/add-seatable-row-dialog/record-content.js +201 -0
- package/dist/basic-sdk/extension/plugins/seatable-row/dialog/add-seatable-row-dialog/record-item.js +41 -0
- package/dist/basic-sdk/extension/plugins/seatable-row/dialog/add-seatable-row-dialog/row-card-header-cell.js +108 -0
- package/dist/basic-sdk/extension/plugins/seatable-row/dialog/add-seatable-row-dialog/row-card-header.js +143 -0
- package/dist/basic-sdk/extension/plugins/seatable-row/dialog/add-seatable-row-dialog/row-card-item.js +240 -0
- package/dist/basic-sdk/extension/plugins/seatable-row/dialog/add-seatable-row-dialog/seatable-table-record.js +37 -0
- package/dist/basic-sdk/extension/plugins/seatable-row/dialog/add-seatable-row-dialog/seatable-table.js +134 -0
- package/dist/basic-sdk/extension/plugins/seatable-row/helpers.js +90 -0
- package/dist/basic-sdk/extension/plugins/seatable-row/index.js +17 -0
- package/dist/basic-sdk/extension/plugins/seatable-row/menu/index.js +44 -0
- package/dist/basic-sdk/extension/plugins/seatable-row/menu/seatable-list.js +61 -0
- package/dist/basic-sdk/extension/plugins/seatable-row/model.js +19 -0
- package/dist/basic-sdk/extension/plugins/seatable-row/plugin.js +60 -0
- package/dist/basic-sdk/extension/plugins/seatable-row/render-elem/index.css +123 -0
- package/dist/basic-sdk/extension/plugins/seatable-row/render-elem/index.js +161 -0
- package/dist/basic-sdk/extension/plugins/seatable-row/render-elem/record-header.js +78 -0
- package/dist/basic-sdk/extension/plugins/seatable-row/render-elem/record-item.js +41 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/menu/index.js +3 -6
- package/dist/basic-sdk/extension/plugins/text-style/helpers.js +1 -1
- package/dist/basic-sdk/extension/plugins/text-style/menu/index.js +10 -1
- package/dist/basic-sdk/extension/render/custom-element.js +5 -0
- package/dist/basic-sdk/extension/toolbar/header-toolbar/insert-toolbar/index.js +7 -2
- package/dist/basic-sdk/extension/toolbar/side-toolbar/helpers.js +3 -1
- package/dist/pages/document-plugin-editor.js +3 -1
- package/package.json +1 -1
- package/public/locales/cs/sdoc-editor.json +7 -1
- package/public/locales/de/sdoc-editor.json +66 -60
- package/public/locales/en/sdoc-editor.json +8 -1
- package/public/locales/es/sdoc-editor.json +7 -1
- package/public/locales/es_AR/sdoc-editor.json +7 -1
- package/public/locales/es_MX/sdoc-editor.json +7 -1
- package/public/locales/fr/sdoc-editor.json +240 -234
- package/public/locales/it/sdoc-editor.json +7 -1
- package/public/locales/ru/sdoc-editor.json +8 -2
- package/public/locales/zh_CN/sdoc-editor.json +7 -1
- package/public/media/sdoc-editor-font/iconfont.css +15 -14
- package/public/media/sdoc-editor-font/iconfont.eot +0 -0
- package/public/media/sdoc-editor-font/iconfont.svg +3 -1
- package/public/media/sdoc-editor-font/iconfont.ttf +0 -0
- package/public/media/sdoc-editor-font/iconfont.woff +0 -0
- package/public/media/sdoc-editor-font/iconfont.woff2 +0 -0
- package/public/media/sdoc-editor-font.css +11 -7
|
@@ -94,29 +94,6 @@
|
|
|
94
94
|
pointer-events: none;
|
|
95
95
|
}
|
|
96
96
|
|
|
97
|
-
.sdoc-editor__article .sdoc-image-process-container {
|
|
98
|
-
width: 40px;
|
|
99
|
-
height: 40px;
|
|
100
|
-
display: flex;
|
|
101
|
-
align-items: center;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
.sdoc-editor__article .sdoc-image-process-container .loading-spinner {
|
|
105
|
-
border: 5px solid #d8d8d8;
|
|
106
|
-
border-top: 5px solid #939393;
|
|
107
|
-
border-radius: 50%;
|
|
108
|
-
width: 30px;
|
|
109
|
-
height: 30px;
|
|
110
|
-
animation: spin 1s linear infinite;
|
|
111
|
-
user-select: none;
|
|
112
|
-
pointer-events: none;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
@keyframes spin {
|
|
116
|
-
0% { transform: rotate(0deg); }
|
|
117
|
-
100% { transform: rotate(360deg); }
|
|
118
|
-
}
|
|
119
|
-
|
|
120
97
|
.sdoc-editor__article .sdoc-image-inner {
|
|
121
98
|
position: relative;
|
|
122
99
|
display: inline-block;
|
|
@@ -24,6 +24,7 @@ var _index5 = require("../../plugins/video/constants/index.js");
|
|
|
24
24
|
var _constants3 = require("../../../../basic-sdk/constants");
|
|
25
25
|
var _index6 = _interopRequireDefault(require("../../plugins/ai/ai-module/index.js"));
|
|
26
26
|
var _index7 = _interopRequireDefault(require("../../plugins/video/dialog/add-video-link-dialog/index.js"));
|
|
27
|
+
var _index8 = _interopRequireDefault(require("../../plugins/seatable-row/dialog/add-seatable-row-dialog/index.js"));
|
|
27
28
|
const InsertElementDialog = _ref => {
|
|
28
29
|
let {
|
|
29
30
|
editor
|
|
@@ -37,6 +38,7 @@ const InsertElementDialog = _ref => {
|
|
|
37
38
|
const [validEditor, setValidEditor] = (0, _react.useState)(editor);
|
|
38
39
|
const [linkTitle, setLinkTitle] = (0, _react.useState)('');
|
|
39
40
|
const [handleSubmit, setHandleSubmit] = (0, _react.useState)(() => void 0);
|
|
41
|
+
const [data, setData] = (0, _react.useState)({});
|
|
40
42
|
const {
|
|
41
43
|
t
|
|
42
44
|
} = (0, _reactI18next.useTranslation)('sdoc-editor');
|
|
@@ -96,7 +98,8 @@ const InsertElementDialog = _ref => {
|
|
|
96
98
|
editor: paramEditor,
|
|
97
99
|
linkTitle,
|
|
98
100
|
// link shortcut wrapping link
|
|
99
|
-
handleSubmit
|
|
101
|
+
handleSubmit,
|
|
102
|
+
data
|
|
100
103
|
} = _ref2;
|
|
101
104
|
setInsertPosition(insertPosition);
|
|
102
105
|
setSlateNode(slateNode);
|
|
@@ -113,6 +116,7 @@ const InsertElementDialog = _ref => {
|
|
|
113
116
|
setHandleSubmit(handleSubmit);
|
|
114
117
|
// Apply for comment editor, as it has a different editor instance
|
|
115
118
|
setValidEditor(paramEditor || editor);
|
|
119
|
+
setData(data);
|
|
116
120
|
if (type === _constants2.LOCAL_IMAGE) {
|
|
117
121
|
setTimeout(() => {
|
|
118
122
|
uploadLocalImageInputRef.current && uploadLocalImageInputRef.current.click();
|
|
@@ -133,6 +137,7 @@ const InsertElementDialog = _ref => {
|
|
|
133
137
|
setInsertVideoCallback(null);
|
|
134
138
|
setValidEditor(null);
|
|
135
139
|
setLinkTitle('');
|
|
140
|
+
setData('');
|
|
136
141
|
}, []);
|
|
137
142
|
const props = {
|
|
138
143
|
insertPosition,
|
|
@@ -141,7 +146,8 @@ const InsertElementDialog = _ref => {
|
|
|
141
146
|
element,
|
|
142
147
|
closeDialog,
|
|
143
148
|
linkTitle,
|
|
144
|
-
handleSubmit
|
|
149
|
+
handleSubmit,
|
|
150
|
+
data
|
|
145
151
|
};
|
|
146
152
|
switch (dialogType) {
|
|
147
153
|
case _constants2.ELEMENT_TYPE.TABLE:
|
|
@@ -240,6 +246,10 @@ const InsertElementDialog = _ref => {
|
|
|
240
246
|
closeModule: closeDialog
|
|
241
247
|
});
|
|
242
248
|
}
|
|
249
|
+
case _constants2.ELEMENT_TYPE.SEATABLE_ROW:
|
|
250
|
+
{
|
|
251
|
+
return /*#__PURE__*/_react.default.createElement(_index8.default, props);
|
|
252
|
+
}
|
|
243
253
|
default:
|
|
244
254
|
{
|
|
245
255
|
return null;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
.sdoc-search-list {
|
|
2
|
+
display: flex;
|
|
3
|
+
height: 100%;
|
|
4
|
+
width: 100%;
|
|
5
|
+
flex-direction: column;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.sdoc-search-list .sdoc-search-list-wrapper {
|
|
9
|
+
padding: 12px;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.sdoc-search-list .sdoc-search-list-wrapper>input {
|
|
13
|
+
font-size: 12px;
|
|
14
|
+
max-height: 30px;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.sdoc-search-list .sdoc-search-list-content-wrapper {
|
|
18
|
+
min-height: 0;
|
|
19
|
+
min-width: 0;
|
|
20
|
+
flex: 1;
|
|
21
|
+
overflow: auto;
|
|
22
|
+
max-height: 300px;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.sdoc-search-list .sdoc-search-list-with-no-results {
|
|
26
|
+
font-size: 12px;
|
|
27
|
+
padding: 4px 16px;
|
|
28
|
+
}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = SearchList;
|
|
9
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
10
|
+
var _reactI18next = require("react-i18next");
|
|
11
|
+
var _reactstrap = require("reactstrap");
|
|
12
|
+
var _keyCodes = _interopRequireDefault(require("../../../../constants/key-codes"));
|
|
13
|
+
require("./index.css");
|
|
14
|
+
function SearchList(_ref) {
|
|
15
|
+
let {
|
|
16
|
+
list: originalList,
|
|
17
|
+
listItem: ListItem,
|
|
18
|
+
onListItemClick,
|
|
19
|
+
onEscClick
|
|
20
|
+
} = _ref;
|
|
21
|
+
const {
|
|
22
|
+
t
|
|
23
|
+
} = (0, _reactI18next.useTranslation)('sdoc-editor');
|
|
24
|
+
const inputWrapperRef = (0, _react.useRef)(null);
|
|
25
|
+
const isComposingRef = (0, _react.useRef)(null);
|
|
26
|
+
const listRefs = (0, _react.useRef)([]);
|
|
27
|
+
const [searchedList, setSearchedList] = (0, _react.useState)(originalList);
|
|
28
|
+
const [currentSelectIndex, setCurrentSelectIndex] = (0, _react.useState)(-1);
|
|
29
|
+
|
|
30
|
+
// search input
|
|
31
|
+
const onChange = (0, _react.useCallback)(event => {
|
|
32
|
+
if (isComposingRef.current) return;
|
|
33
|
+
const value = event.target.value.trim();
|
|
34
|
+
if (value) {
|
|
35
|
+
const list = originalList.filter(item => item.label.indexOf(value) > -1);
|
|
36
|
+
setSearchedList(list);
|
|
37
|
+
} else {
|
|
38
|
+
setSearchedList(originalList);
|
|
39
|
+
}
|
|
40
|
+
}, [originalList]);
|
|
41
|
+
const onCompositionStart = (0, _react.useCallback)(() => {
|
|
42
|
+
isComposingRef.current = true;
|
|
43
|
+
}, []);
|
|
44
|
+
const onCompositionEnd = (0, _react.useCallback)(e => {
|
|
45
|
+
isComposingRef.current = false;
|
|
46
|
+
onChange(e);
|
|
47
|
+
}, [onChange]);
|
|
48
|
+
|
|
49
|
+
// search content list
|
|
50
|
+
const onItemClick = (0, _react.useCallback)(item => {
|
|
51
|
+
onListItemClick && onListItemClick(item);
|
|
52
|
+
}, [onListItemClick]);
|
|
53
|
+
const onHandleInputFocus = (0, _react.useCallback)(isFocus => {
|
|
54
|
+
if (inputWrapperRef.current) {
|
|
55
|
+
queueMicrotask(() => {
|
|
56
|
+
isFocus ? inputWrapperRef.current.focus() : inputWrapperRef.current.blur();
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}, []);
|
|
60
|
+
(0, _react.useEffect)(() => {
|
|
61
|
+
if (currentSelectIndex === -1) {
|
|
62
|
+
onHandleInputFocus(true);
|
|
63
|
+
} else {
|
|
64
|
+
onHandleInputFocus(false);
|
|
65
|
+
}
|
|
66
|
+
}, [currentSelectIndex, onHandleInputFocus]);
|
|
67
|
+
const handleClick = (0, _react.useCallback)(event => {
|
|
68
|
+
var _inputWrapperRef$curr;
|
|
69
|
+
if (inputWrapperRef !== null && inputWrapperRef !== void 0 && (_inputWrapperRef$curr = inputWrapperRef.current) !== null && _inputWrapperRef$curr !== void 0 && _inputWrapperRef$curr.contains(event.target) || inputWrapperRef.current === event.target) {
|
|
70
|
+
event.stopPropagation();
|
|
71
|
+
event.nativeEvent && event.nativeEvent.stopImmediatePropagation && event.nativeEvent.stopImmediatePropagation();
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
}, []);
|
|
75
|
+
const scrollIntoView = (0, _react.useCallback)(index => {
|
|
76
|
+
if (index === -1) return;
|
|
77
|
+
listRefs.current[index].scrollIntoView({
|
|
78
|
+
behavior: 'smooth',
|
|
79
|
+
block: 'center',
|
|
80
|
+
inline: 'nearest'
|
|
81
|
+
});
|
|
82
|
+
}, []);
|
|
83
|
+
const handleKeyDown = (0, _react.useCallback)(e => {
|
|
84
|
+
const {
|
|
85
|
+
UpArrow,
|
|
86
|
+
DownArrow,
|
|
87
|
+
Enter,
|
|
88
|
+
Esc
|
|
89
|
+
} = _keyCodes.default;
|
|
90
|
+
const {
|
|
91
|
+
keyCode
|
|
92
|
+
} = e;
|
|
93
|
+
if (keyCode === UpArrow) {
|
|
94
|
+
e.preventDefault();
|
|
95
|
+
if (currentSelectIndex > -1) {
|
|
96
|
+
setCurrentSelectIndex(currentSelectIndex - 1);
|
|
97
|
+
scrollIntoView(currentSelectIndex - 1);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (keyCode === DownArrow) {
|
|
101
|
+
e.preventDefault();
|
|
102
|
+
if (currentSelectIndex === searchedList.length - 1) return;
|
|
103
|
+
if (currentSelectIndex < searchedList.length - 1) {
|
|
104
|
+
setCurrentSelectIndex(currentSelectIndex + 1);
|
|
105
|
+
scrollIntoView(currentSelectIndex + 1);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (keyCode === Enter) {
|
|
109
|
+
e.preventDefault();
|
|
110
|
+
const item = searchedList[currentSelectIndex];
|
|
111
|
+
onItemClick(item);
|
|
112
|
+
}
|
|
113
|
+
if (keyCode === Esc) {
|
|
114
|
+
e.preventDefault();
|
|
115
|
+
onEscClick && onEscClick();
|
|
116
|
+
}
|
|
117
|
+
}, [currentSelectIndex, onEscClick, onItemClick, scrollIntoView, searchedList]);
|
|
118
|
+
(0, _react.useEffect)(() => {
|
|
119
|
+
document.addEventListener('mousedown', handleClick);
|
|
120
|
+
document.addEventListener('keydown', handleKeyDown);
|
|
121
|
+
return () => {
|
|
122
|
+
document.removeEventListener('keydown', handleKeyDown);
|
|
123
|
+
document.removeEventListener('click', handleClick);
|
|
124
|
+
};
|
|
125
|
+
}, [handleClick, handleKeyDown]);
|
|
126
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
127
|
+
className: "sdoc-search-list"
|
|
128
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
129
|
+
className: "sdoc-search-list-wrapper"
|
|
130
|
+
}, /*#__PURE__*/_react.default.createElement(_reactstrap.Input, {
|
|
131
|
+
innerRef: inputWrapperRef,
|
|
132
|
+
placeholder: t('Search_action'),
|
|
133
|
+
onChange: onChange,
|
|
134
|
+
onCompositionStart: onCompositionStart,
|
|
135
|
+
onCompositionEnd: onCompositionEnd
|
|
136
|
+
})), /*#__PURE__*/_react.default.createElement("div", {
|
|
137
|
+
className: "sdoc-search-list-content-wrapper"
|
|
138
|
+
}, searchedList.length === 0 && /*#__PURE__*/_react.default.createElement("div", {
|
|
139
|
+
className: "sdoc-search-list-with-no-results"
|
|
140
|
+
}, t('No_results')), searchedList.map((item, index) => {
|
|
141
|
+
const isSelected = index === currentSelectIndex;
|
|
142
|
+
return /*#__PURE__*/_react.default.createElement(ListItem, {
|
|
143
|
+
innerRef: el => listRefs.current[index] = el,
|
|
144
|
+
key: index,
|
|
145
|
+
item: item,
|
|
146
|
+
onItemClick: onItemClick,
|
|
147
|
+
isSelected: isSelected
|
|
148
|
+
});
|
|
149
|
+
})));
|
|
150
|
+
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.WIKI_LINK = exports.VIDEO_LINK = exports.VIDEO = exports.UNORDERED_LIST = exports.TWO_COLUMN = exports.TOP_LEVEL_TYPES = exports.TITLE = exports.THREE_COLUMN = exports.TABLE_ROW = exports.TABLE_CELL = exports.TABLE = exports.SUBTITLE = exports.SEATABLE_TABLE = exports.SEATABLE_COLUMN = exports.SDOC_LINK = exports.QUICK_INSERT = exports.PARAGRAPH = exports.ORDERED_LIST = exports.MULTI_COLUMN = exports.MENTION_TEMP = exports.MENTION = exports.LIST_ITEM = exports.LINK = exports.INLINE_LEVEL_TYPES = exports.IMAGE_BLOCK = exports.IMAGE = exports.HEADER6 = exports.HEADER5 = exports.HEADER4 = exports.HEADER3 = exports.HEADER2 = exports.HEADER1 = exports.HEADER = exports.GROUP = exports.FOUR_COLUMN = exports.FONT_SIZE_REDUCE = exports.FONT_SIZE_INCREASE = exports.FONT_SIZE = exports.FIVE_COLUMN = exports.FILE_LINK_INSET_INPUT_TEMP = exports.FILE_LINK = exports.COLUMN = exports.CODE_LINE = exports.CODE_BLOCK = exports.CHECK_LIST_ITEM = exports.CALL_OUT = exports.BLOCKQUOTE = exports.ASK_AI = void 0;
|
|
6
|
+
exports.WIKI_LINK = exports.VIDEO_LINK = exports.VIDEO = exports.UNORDERED_LIST = exports.TWO_COLUMN = exports.TOP_LEVEL_TYPES = exports.TITLE = exports.THREE_COLUMN = exports.TABLE_ROW = exports.TABLE_CELL = exports.TABLE = exports.SUBTITLE = exports.SEATABLE_TABLE = exports.SEATABLE_ROW = exports.SEATABLE_COLUMN = exports.SDOC_LINK = exports.QUICK_INSERT = exports.PARAGRAPH = exports.ORDERED_LIST = exports.MULTI_COLUMN = exports.MENTION_TEMP = exports.MENTION = exports.LIST_ITEM = exports.LINK = exports.INLINE_LEVEL_TYPES = exports.IMAGE_BLOCK = exports.IMAGE = exports.HEADER6 = exports.HEADER5 = exports.HEADER4 = exports.HEADER3 = exports.HEADER2 = exports.HEADER1 = exports.HEADER = exports.GROUP = exports.FOUR_COLUMN = exports.FONT_SIZE_REDUCE = exports.FONT_SIZE_INCREASE = exports.FONT_SIZE = exports.FIVE_COLUMN = exports.FILE_LINK_INSET_INPUT_TEMP = exports.FILE_LINK = exports.COLUMN = exports.CODE_LINE = exports.CODE_BLOCK = exports.CHECK_LIST_ITEM = exports.CALL_OUT = exports.BLOCKQUOTE = exports.ASK_AI = void 0;
|
|
7
7
|
const BLOCKQUOTE = exports.BLOCKQUOTE = 'blockquote';
|
|
8
8
|
const TITLE = exports.TITLE = 'title';
|
|
9
9
|
const SUBTITLE = exports.SUBTITLE = 'subtitle';
|
|
@@ -44,6 +44,7 @@ const FILE_LINK_INSET_INPUT_TEMP = exports.FILE_LINK_INSET_INPUT_TEMP = 'file_li
|
|
|
44
44
|
const QUICK_INSERT = exports.QUICK_INSERT = 'quick_insert';
|
|
45
45
|
const VIDEO_LINK = exports.VIDEO_LINK = 'video_link';
|
|
46
46
|
const SEATABLE_COLUMN = exports.SEATABLE_COLUMN = 'seatable_column';
|
|
47
|
+
const SEATABLE_ROW = exports.SEATABLE_ROW = 'seatable_row';
|
|
47
48
|
const SEATABLE_TABLE = exports.SEATABLE_TABLE = 'seatable_table';
|
|
48
49
|
const ASK_AI = exports.ASK_AI = 'ask_ai';
|
|
49
50
|
|
|
@@ -349,6 +349,12 @@ Object.defineProperty(exports, "SEATABLE_COLUMN", {
|
|
|
349
349
|
return _elementType.SEATABLE_COLUMN;
|
|
350
350
|
}
|
|
351
351
|
});
|
|
352
|
+
Object.defineProperty(exports, "SEATABLE_ROW", {
|
|
353
|
+
enumerable: true,
|
|
354
|
+
get: function () {
|
|
355
|
+
return _elementType.SEATABLE_ROW;
|
|
356
|
+
}
|
|
357
|
+
});
|
|
352
358
|
Object.defineProperty(exports, "SEATABLE_TABLE", {
|
|
353
359
|
enumerable: true,
|
|
354
360
|
get: function () {
|
|
@@ -541,7 +547,7 @@ const FILE_TYPE = exports.FILE_TYPE = {
|
|
|
541
547
|
[_elementType.SDOC_LINK]: 'sdoc',
|
|
542
548
|
[_elementType.VIDEO]: 'video'
|
|
543
549
|
};
|
|
544
|
-
const SUPPORTED_SIDE_OPERATION_TYPE = exports.SUPPORTED_SIDE_OPERATION_TYPE = [_elementType.PARAGRAPH, _elementType.SUBTITLE, _elementType.HEADER1, _elementType.HEADER2, _elementType.HEADER3, _elementType.HEADER4, _elementType.HEADER5, _elementType.HEADER6, _elementType.CHECK_LIST_ITEM, _elementType.CODE_BLOCK, _elementType.TABLE, _elementType.BLOCKQUOTE, _elementType.CALL_OUT, _elementType.IMAGE_BLOCK, _elementType.VIDEO, _elementType.SEATABLE_TABLE, _elementType.MULTI_COLUMN];
|
|
550
|
+
const SUPPORTED_SIDE_OPERATION_TYPE = exports.SUPPORTED_SIDE_OPERATION_TYPE = [_elementType.PARAGRAPH, _elementType.SUBTITLE, _elementType.HEADER1, _elementType.HEADER2, _elementType.HEADER3, _elementType.HEADER4, _elementType.HEADER5, _elementType.HEADER6, _elementType.CHECK_LIST_ITEM, _elementType.CODE_BLOCK, _elementType.TABLE, _elementType.BLOCKQUOTE, _elementType.CALL_OUT, _elementType.IMAGE_BLOCK, _elementType.VIDEO, _elementType.SEATABLE_TABLE, _elementType.MULTI_COLUMN, _elementType.SEATABLE_ROW];
|
|
545
551
|
const MOUSE_ENTER_EVENT_DISABLED_MAP = exports.MOUSE_ENTER_EVENT_DISABLED_MAP = {
|
|
546
552
|
[_elementType.PARAGRAPH]: [_elementType.CALL_OUT],
|
|
547
553
|
[_elementType.TITLE]: [_elementType.CALL_OUT],
|
|
@@ -559,4 +565,4 @@ const MOUSE_ENTER_EVENT_DISABLED_MAP = exports.MOUSE_ENTER_EVENT_DISABLED_MAP =
|
|
|
559
565
|
[_elementType.HEADER6]: [_elementType.CALL_OUT],
|
|
560
566
|
[_elementType.CALL_OUT]: [_elementType.CALL_OUT]
|
|
561
567
|
};
|
|
562
|
-
const ROOT_ELEMENT_TYPES = exports.ROOT_ELEMENT_TYPES = [_elementType.PARAGRAPH, _elementType.TITLE, _elementType.SUBTITLE, _elementType.CHECK_LIST_ITEM, _elementType.ORDERED_LIST, _elementType.UNORDERED_LIST, _elementType.BLOCKQUOTE, _elementType.HEADER1, _elementType.HEADER2, _elementType.HEADER3, _elementType.HEADER4, _elementType.HEADER5, _elementType.HEADER6, _elementType.CALL_OUT, _elementType.TABLE, _elementType.CODE_BLOCK, _elementType.IMAGE_BLOCK, _elementType.VIDEO, _elementType.SEATABLE_TABLE];
|
|
568
|
+
const ROOT_ELEMENT_TYPES = exports.ROOT_ELEMENT_TYPES = [_elementType.PARAGRAPH, _elementType.TITLE, _elementType.SUBTITLE, _elementType.CHECK_LIST_ITEM, _elementType.ORDERED_LIST, _elementType.UNORDERED_LIST, _elementType.BLOCKQUOTE, _elementType.HEADER1, _elementType.HEADER2, _elementType.HEADER3, _elementType.HEADER4, _elementType.HEADER5, _elementType.HEADER6, _elementType.CALL_OUT, _elementType.TABLE, _elementType.CODE_BLOCK, _elementType.IMAGE_BLOCK, _elementType.VIDEO, _elementType.SEATABLE_TABLE, _elementType.SEATABLE_ROW];
|
|
@@ -223,6 +223,11 @@ const MENUS_CONFIG_MAP = exports.MENUS_CONFIG_MAP = {
|
|
|
223
223
|
iconClass: 'sdocfont sdoc-find-replace',
|
|
224
224
|
text: 'Search_and_replace'
|
|
225
225
|
},
|
|
226
|
+
[_elementType.SEATABLE_ROW]: {
|
|
227
|
+
id: `sdoc_${_elementType.SEATABLE_ROW}`,
|
|
228
|
+
iconClass: 'sdocfont sdoc-seatable-row',
|
|
229
|
+
text: 'SeaTable_row'
|
|
230
|
+
},
|
|
226
231
|
[_elementType.SEATABLE_COLUMN]: {
|
|
227
232
|
id: `sdoc_${_elementType.SEATABLE_COLUMN}`,
|
|
228
233
|
iconClass: 'sdocfont sdoc-choose-column',
|
|
@@ -52,6 +52,13 @@ const getFontSize = editor => {
|
|
|
52
52
|
}
|
|
53
53
|
return false;
|
|
54
54
|
}
|
|
55
|
+
if (!_slate.Editor.isEditor(n) && _slate.Editor.isVoid(editor, n)) {
|
|
56
|
+
const parentNode = (0, _core.getParentNode)(editor.children, n.id);
|
|
57
|
+
if (!parentNode) return false;
|
|
58
|
+
if ([_constants.TITLE, _constants.SUBTITLE, ..._constants.HEADERS, _constants.CODE_LINE].includes(parentNode.type)) {
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
55
62
|
return false;
|
|
56
63
|
}
|
|
57
64
|
});
|
|
@@ -9,6 +9,7 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
9
9
|
var _slate = require("@seafile/slate");
|
|
10
10
|
var _core = require("../../core");
|
|
11
11
|
var _constants = require("../../constants");
|
|
12
|
+
var _helper = require("../paragraph/helper");
|
|
12
13
|
const renderTitle = (props, editor) => {
|
|
13
14
|
const {
|
|
14
15
|
element,
|
|
@@ -69,7 +70,7 @@ const renderHeader = (props, editor) => {
|
|
|
69
70
|
})
|
|
70
71
|
};
|
|
71
72
|
let isShowPlaceHolder = false;
|
|
72
|
-
if (_slate.Node.string(element) === '' && !isComposing) {
|
|
73
|
+
if ((0, _helper.isEmptyNode)(element) && _slate.Node.string(element) === '' && !isComposing) {
|
|
73
74
|
isShowPlaceHolder = true;
|
|
74
75
|
}
|
|
75
76
|
return /*#__PURE__*/_react.default.createElement("div", Object.assign({
|
|
@@ -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.
|
|
7
|
+
exports.updateImage = exports.selectImageWhenSelectPartial = exports.resetCursor = exports.queryCopyMoveProgressView = exports.isInsertImageMenuDisabled = exports.isImagUrlIsFromCopy = exports.insertImageFiles = exports.insertImage = exports.hasSdocImages = exports.handleBase64Image = exports.getSingleImageFromFragment = exports.getImageURL = exports.getImageData = exports.generateImageNode = void 0;
|
|
8
8
|
var _urlJoin = _interopRequireDefault(require("url-join"));
|
|
9
9
|
var _slate = require("@seafile/slate");
|
|
10
10
|
var _slateReact = require("@seafile/slate-react");
|
|
@@ -133,24 +133,6 @@ const updateImage = (editor, data) => {
|
|
|
133
133
|
});
|
|
134
134
|
};
|
|
135
135
|
exports.updateImage = updateImage;
|
|
136
|
-
const updateImageNode = (editor, originalUrl, newUrl) => {
|
|
137
|
-
_slate.Editor.nodes(editor, {
|
|
138
|
-
match: n => n.type === _constants2.IMAGE && n.data.src === originalUrl,
|
|
139
|
-
at: []
|
|
140
|
-
}).forEach(_ref => {
|
|
141
|
-
let [node, path] = _ref;
|
|
142
|
-
const newData = {
|
|
143
|
-
...node.data,
|
|
144
|
-
src: newUrl
|
|
145
|
-
};
|
|
146
|
-
_slate.Transforms.setNodes(editor, {
|
|
147
|
-
data: newData
|
|
148
|
-
}, {
|
|
149
|
-
at: path
|
|
150
|
-
});
|
|
151
|
-
});
|
|
152
|
-
};
|
|
153
|
-
exports.updateImageNode = updateImageNode;
|
|
154
136
|
const getImageURL = (data, editor) => {
|
|
155
137
|
const {
|
|
156
138
|
src: url,
|
|
@@ -171,7 +153,7 @@ const getImageURL = (data, editor) => {
|
|
|
171
153
|
return imgUrl;
|
|
172
154
|
}
|
|
173
155
|
}
|
|
174
|
-
if (url
|
|
156
|
+
if (isImagUrlIsFromCopy(url)) return url;
|
|
175
157
|
const serviceUrl = _context.default.getSetting('serviceUrl');
|
|
176
158
|
const assetsUrl = _context.default.getSetting('assetsUrl');
|
|
177
159
|
return (0, _urlJoin.default)(serviceUrl, assetsUrl, url);
|
|
@@ -295,4 +277,10 @@ const handleBase64Image = (editor, path, imgData) => {
|
|
|
295
277
|
});
|
|
296
278
|
});
|
|
297
279
|
};
|
|
298
|
-
exports.handleBase64Image = handleBase64Image;
|
|
280
|
+
exports.handleBase64Image = handleBase64Image;
|
|
281
|
+
const isImagUrlIsFromCopy = url => {
|
|
282
|
+
if (url && url.startsWith('http')) return true;
|
|
283
|
+
if (url && url.startsWith('attachment')) return true; // from yuque
|
|
284
|
+
return false;
|
|
285
|
+
};
|
|
286
|
+
exports.isImagUrlIsFromCopy = isImagUrlIsFromCopy;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
.sdoc-image-process-container {
|
|
2
|
+
position: absolute;
|
|
3
|
+
width: 100%;
|
|
4
|
+
height: 100%;
|
|
5
|
+
display: flex;
|
|
6
|
+
flex-direction: column;
|
|
7
|
+
align-items: center;
|
|
8
|
+
justify-content: center;
|
|
9
|
+
top: 0;
|
|
10
|
+
left: 0;
|
|
11
|
+
background-color: 'rgba(0, 0, 0, 0.5)'
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
@keyframes spin {
|
|
15
|
+
0% {
|
|
16
|
+
transform: rotate(0deg);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
100% {
|
|
20
|
+
transform: rotate(360deg);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.sdoc-image-process-container .loading-spinner {
|
|
25
|
+
border: 3px solid #d8d8d8;
|
|
26
|
+
border-top: 3px solid #939393;
|
|
27
|
+
border-radius: 50%;
|
|
28
|
+
width: 20px;
|
|
29
|
+
height: 20px;
|
|
30
|
+
animation: spin 1s linear infinite;
|
|
31
|
+
user-select: none;
|
|
32
|
+
pointer-events: none;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.sdoc-image-process-container .copyright {
|
|
36
|
+
margin-top: 4px;
|
|
37
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = ImageLoader;
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
require("./index.css");
|
|
10
|
+
function ImageLoader(_ref) {
|
|
11
|
+
let {
|
|
12
|
+
copyright
|
|
13
|
+
} = _ref;
|
|
14
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
15
|
+
className: "sdoc-image-process-container"
|
|
16
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
17
|
+
className: "loading-spinner"
|
|
18
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
19
|
+
className: "spinner"
|
|
20
|
+
})), copyright && /*#__PURE__*/_react.default.createElement("div", {
|
|
21
|
+
className: "copyright"
|
|
22
|
+
}, copyright));
|
|
23
|
+
}
|
|
@@ -21,8 +21,9 @@ var _constants2 = require("./constants");
|
|
|
21
21
|
var _constants3 = require("../../constants");
|
|
22
22
|
var _constants4 = require("../../../../constants");
|
|
23
23
|
var _imagePlaceholder = _interopRequireDefault(require("../../../assets/images/image-placeholder.png"));
|
|
24
|
-
var _context = _interopRequireDefault(require("../../../../context"));
|
|
25
24
|
var _copyImageErrorSvg = _interopRequireDefault(require("../../../../components/copy-image-error-svg"));
|
|
25
|
+
var _useUploadImage = _interopRequireDefault(require("./use-upload-image"));
|
|
26
|
+
var _imageLoader = _interopRequireDefault(require("./image-loader"));
|
|
26
27
|
const Image = _ref => {
|
|
27
28
|
var _imageRef$current, _imageRef$current2;
|
|
28
29
|
let {
|
|
@@ -52,7 +53,6 @@ const Image = _ref => {
|
|
|
52
53
|
const imageRef = (0, _react.useRef)(null);
|
|
53
54
|
const resizerRef = (0, _react.useRef)(null);
|
|
54
55
|
const imageCaptionInputRef = (0, _react.useRef)(null);
|
|
55
|
-
const isLoadingRef = (0, _react.useRef)(false);
|
|
56
56
|
const scrollRef = (0, _useScrollContext.useScrollContext)();
|
|
57
57
|
const [movingWidth, setMovingWidth] = (0, _react.useState)(null);
|
|
58
58
|
const [isResizing, setIsResizing] = (0, _react.useState)(false);
|
|
@@ -60,8 +60,14 @@ const Image = _ref => {
|
|
|
60
60
|
const [isShowImageHoverMenu, setIsShowImageHoverMenu] = (0, _react.useState)(false);
|
|
61
61
|
const [menuPosition, setMenuPosition] = (0, _react.useState)({});
|
|
62
62
|
const [caption, setCaption] = (0, _react.useState)((data === null || data === void 0 ? void 0 : data.caption) || '');
|
|
63
|
-
const
|
|
64
|
-
|
|
63
|
+
const {
|
|
64
|
+
isCopyImageLoading,
|
|
65
|
+
isCopyImageError,
|
|
66
|
+
setCopyImageLoading
|
|
67
|
+
} = (0, _useUploadImage.default)({
|
|
68
|
+
editor,
|
|
69
|
+
element
|
|
70
|
+
});
|
|
65
71
|
const registerEvent = (0, _react.useCallback)(eventList => {
|
|
66
72
|
eventList.forEach(element => {
|
|
67
73
|
document.addEventListener(element.eventName, element.event);
|
|
@@ -202,20 +208,16 @@ const Image = _ref => {
|
|
|
202
208
|
setIsShowImagePlaceholder(false);
|
|
203
209
|
}
|
|
204
210
|
}, [data, editor]);
|
|
211
|
+
const onImageLoaded = (0, _react.useCallback)(() => {
|
|
212
|
+
if ((0, _helpers.isImagUrlIsFromCopy)(data.src)) {
|
|
213
|
+
setCopyImageLoading(true);
|
|
214
|
+
}
|
|
215
|
+
}, [data.src, setCopyImageLoading]);
|
|
205
216
|
const onImageLoadError = (0, _react.useCallback)(() => {
|
|
206
217
|
// Check is due to the image is pasted from the clipboard in base64
|
|
207
218
|
if (data.src.startsWith('data:image/jpeg;base64')) {
|
|
208
219
|
return (0, _helpers.handleBase64Image)(editor, path, data);
|
|
209
220
|
}
|
|
210
|
-
|
|
211
|
-
// Check whether copying images is wrong
|
|
212
|
-
if (data.src.startsWith('attachment') || data.src.endsWith('_copy_error')) {
|
|
213
|
-
if (!isCopyError) {
|
|
214
|
-
setIsCopyError(true);
|
|
215
|
-
}
|
|
216
|
-
return;
|
|
217
|
-
}
|
|
218
|
-
if (isLoadingRef.current) return;
|
|
219
221
|
setIsShowImagePlaceholder(true);
|
|
220
222
|
// External network images do not reload after failure to load
|
|
221
223
|
if (!data.src.startsWith('http')) {
|
|
@@ -238,66 +240,7 @@ const Image = _ref => {
|
|
|
238
240
|
});
|
|
239
241
|
}
|
|
240
242
|
}, [data, editor, element]);
|
|
241
|
-
(
|
|
242
|
-
isLoadingRef.current = isLoading;
|
|
243
|
-
if (data.src.endsWith('_copy_error') && !isCopyError) {
|
|
244
|
-
setIsCopyError(true);
|
|
245
|
-
}
|
|
246
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
247
|
-
}, [isLoading, data.src]);
|
|
248
|
-
(0, _react.useEffect)(() => {
|
|
249
|
-
const {
|
|
250
|
-
src: url
|
|
251
|
-
} = data;
|
|
252
|
-
if (url && !url.startsWith('http')) return;
|
|
253
|
-
if (url && url.endsWith('_copy_error')) {
|
|
254
|
-
setIsCopyError(true);
|
|
255
|
-
return;
|
|
256
|
-
}
|
|
257
|
-
// Return if copying image from local server
|
|
258
|
-
const serviceUrl = _context.default.getSetting('serviceUrl');
|
|
259
|
-
if (url && url.startsWith(serviceUrl)) return;
|
|
260
|
-
if (url && url.startsWith('http')) {
|
|
261
|
-
setIsLoading(true);
|
|
262
|
-
const downloadAndUploadImages = async url => {
|
|
263
|
-
try {
|
|
264
|
-
const response = await fetch(url);
|
|
265
|
-
if (response.ok) {
|
|
266
|
-
const blob = await response.blob();
|
|
267
|
-
const file = new File([blob], 'downloaded_image.png', {
|
|
268
|
-
type: blob.type
|
|
269
|
-
});
|
|
270
|
-
const imageUrl = await _context.default.uploadLocalImage([file]);
|
|
271
|
-
if (imageUrl && imageUrl[0]) {
|
|
272
|
-
(0, _helpers.updateImageNode)(editor, url, imageUrl[0]);
|
|
273
|
-
}
|
|
274
|
-
} else {
|
|
275
|
-
console.error(response.status);
|
|
276
|
-
const newUrl = url + '_copy_error';
|
|
277
|
-
(0, _helpers.updateImageNode)(editor, url, newUrl);
|
|
278
|
-
}
|
|
279
|
-
} catch (error) {
|
|
280
|
-
console.error(error);
|
|
281
|
-
const newUrl = url + '_copy_error';
|
|
282
|
-
(0, _helpers.updateImageNode)(editor, url, newUrl);
|
|
283
|
-
} finally {
|
|
284
|
-
setIsLoading(false);
|
|
285
|
-
}
|
|
286
|
-
};
|
|
287
|
-
downloadAndUploadImages(url);
|
|
288
|
-
}
|
|
289
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
290
|
-
}, []);
|
|
291
|
-
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, isLoading && /*#__PURE__*/_react.default.createElement("div", {
|
|
292
|
-
className: "sdoc-image-process-container",
|
|
293
|
-
style: {
|
|
294
|
-
display: 'inline-block'
|
|
295
|
-
}
|
|
296
|
-
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
297
|
-
className: "loading-spinner"
|
|
298
|
-
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
299
|
-
className: "spinner"
|
|
300
|
-
}))), isShowImagePlaceholder && /*#__PURE__*/_react.default.createElement("span", Object.assign({
|
|
243
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, isShowImagePlaceholder && /*#__PURE__*/_react.default.createElement("span", Object.assign({
|
|
301
244
|
className: (0, _classnames.default)('sdoc-image-wrapper', className)
|
|
302
245
|
}, attributes, {
|
|
303
246
|
style: {
|
|
@@ -305,6 +248,7 @@ const Image = _ref => {
|
|
|
305
248
|
},
|
|
306
249
|
onMouseOver: e => (0, _helpers.selectImageWhenSelectPartial)(e, editor, element, isSelected),
|
|
307
250
|
contentEditable: "false",
|
|
251
|
+
"data-src": (0, _helpers.getImageURL)(data, editor),
|
|
308
252
|
suppressContentEditableWarning: true
|
|
309
253
|
}), /*#__PURE__*/_react.default.createElement("img", {
|
|
310
254
|
ref: imageRef,
|
|
@@ -312,7 +256,7 @@ const Image = _ref => {
|
|
|
312
256
|
style: getImageStyle(),
|
|
313
257
|
draggable: false,
|
|
314
258
|
alt: ""
|
|
315
|
-
}), children),
|
|
259
|
+
}), children), isCopyImageError && /*#__PURE__*/_react.default.createElement("span", Object.assign({
|
|
316
260
|
className: (0, _classnames.default)('sdoc-image-wrapper', className)
|
|
317
261
|
}, attributes, {
|
|
318
262
|
style: {
|
|
@@ -320,12 +264,13 @@ const Image = _ref => {
|
|
|
320
264
|
},
|
|
321
265
|
onMouseOver: e => (0, _helpers.selectImageWhenSelectPartial)(e, editor, element, isSelected),
|
|
322
266
|
contentEditable: "false",
|
|
267
|
+
"data-src": data.src,
|
|
323
268
|
suppressContentEditableWarning: true
|
|
324
269
|
}), /*#__PURE__*/_react.default.createElement(_copyImageErrorSvg.default, {
|
|
325
270
|
t: t,
|
|
326
271
|
isSelected: isSelected,
|
|
327
272
|
imageRef: imageRef
|
|
328
|
-
}), children), !isShowImagePlaceholder && !
|
|
273
|
+
}), children), !isShowImagePlaceholder && !isCopyImageError && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("span", Object.assign({
|
|
329
274
|
"data-id": element.id,
|
|
330
275
|
className: (0, _classnames.default)('sdoc-image-wrapper', className)
|
|
331
276
|
}, attributes, {
|
|
@@ -342,16 +287,19 @@ const Image = _ref => {
|
|
|
342
287
|
}, /*#__PURE__*/_react.default.createElement("span", {
|
|
343
288
|
style: imageStyle
|
|
344
289
|
}, /*#__PURE__*/_react.default.createElement("img", {
|
|
290
|
+
ref: imageRef,
|
|
345
291
|
className: (0, _classnames.default)({
|
|
346
292
|
'image-selected': isSelected
|
|
347
293
|
}),
|
|
348
294
|
onClick: onClickImage,
|
|
349
|
-
ref: imageRef,
|
|
350
295
|
src: (0, _helpers.getImageURL)(data, editor),
|
|
351
296
|
style: getImageStyle(),
|
|
352
297
|
draggable: false,
|
|
298
|
+
onLoad: onImageLoaded,
|
|
353
299
|
onError: onImageLoadError,
|
|
354
300
|
alt: ""
|
|
301
|
+
}), isCopyImageLoading && /*#__PURE__*/_react.default.createElement(_imageLoader.default, {
|
|
302
|
+
copyright: t('Image_is_uploading')
|
|
355
303
|
}), isSelected && /*#__PURE__*/_react.default.createElement("span", {
|
|
356
304
|
className: "image-resizer",
|
|
357
305
|
ref: resizerRef,
|