@seafile/seafile-editor 1.0.59 → 1.0.61

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.
@@ -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.updateImage = exports.isMenuDisabled = exports.insertSeafileImage = exports.insertImage = exports.handleUpdateImage = exports.getImagesUrlList = void 0;
7
+ exports.updateImage = exports.lazyLoadImage = exports.isMenuDisabled = exports.insertSeafileImage = exports.insertImage = exports.handleUpdateImage = exports.getImagesUrlList = void 0;
8
8
  var _slate = require("slate");
9
9
  var _slugid = _interopRequireDefault(require("slugid"));
10
10
  var _helper = require("../header/helper");
@@ -99,4 +99,19 @@ const handleUpdateImage = async (editor, file) => {
99
99
  }
100
100
  }
101
101
  };
102
- exports.handleUpdateImage = handleUpdateImage;
102
+ exports.handleUpdateImage = handleUpdateImage;
103
+ const lazyLoadImage = (url, resolve, reject) => {
104
+ if (!url) {
105
+ reject('img path is require');
106
+ return;
107
+ }
108
+ const image = new Image();
109
+ image.onload = () => {
110
+ resolve(image);
111
+ };
112
+ image.onerror = e => {
113
+ reject(e);
114
+ };
115
+ image.src = url;
116
+ };
117
+ exports.lazyLoadImage = lazyLoadImage;
@@ -43,7 +43,12 @@ const ImageMenuInsertInternetDialog = _ref => {
43
43
  handleSubmit(e);
44
44
  }
45
45
  };
46
+ const onModalContainerMouseDown = e => {
47
+ e.stopPropagation();
48
+ e.nativeEvent.stopImmediatePropagation();
49
+ };
46
50
  return /*#__PURE__*/_react.default.createElement(_reactstrap.Modal, {
51
+ onMouseDown: onModalContainerMouseDown,
47
52
  isOpen: true,
48
53
  toggle: onToggleImageDialog,
49
54
  className: className,
@@ -26,8 +26,8 @@ const ImageMenuPopover = /*#__PURE__*/_react.default.forwardRef((_ref, ref) => {
26
26
  t
27
27
  } = (0, _reactI18next.useTranslation)(_constants.TRANSLATE_NAMESPACE);
28
28
  const handleInsertNetworkImage = e => {
29
- e.nativeEvent.stopImmediatePropagation();
30
29
  e.stopPropagation();
30
+ e.nativeEvent.stopImmediatePropagation();
31
31
  setIsShowInternetImageModal(true);
32
32
  };
33
33
  const handleClickFileInput = (0, _react.useCallback)(e => {
@@ -23,6 +23,8 @@ const renderImage = (_ref, editor) => {
23
23
  children,
24
24
  element
25
25
  } = _ref;
26
+ const [isLoadingImage, setIsLoadingImage] = (0, _react.useState)(true);
27
+ const [isError, setIsError] = (0, _react.useState)(true);
26
28
  const [isResizing, setIsResizing] = (0, _react.useState)(false);
27
29
  const [isFullScreening, setIsFullScreening] = (0, _react.useState)(false);
28
30
  const [imgSizeInfo, setImgSizeInfo] = (0, _react.useState)({
@@ -35,6 +37,20 @@ const renderImage = (_ref, editor) => {
35
37
  const imgRef = (0, _react.useRef)(null);
36
38
  const resizerRef = (0, _react.useRef)();
37
39
  const isSelected = (0, _slateReact.useSelected)();
40
+ (0, _react.useEffect)(() => {
41
+ const {
42
+ data = {}
43
+ } = element;
44
+ const url = data.src;
45
+ (0, _helper.lazyLoadImage)(url, image => {
46
+ setIsLoadingImage(false);
47
+ setIsError(false);
48
+ }, () => {
49
+ setIsLoadingImage(false);
50
+ setIsError(true);
51
+ });
52
+ // eslint-disable-next-line react-hooks/exhaustive-deps
53
+ }, []);
38
54
  const handleStartResize = (0, _react.useCallback)(event => {
39
55
  event.stopPropagation();
40
56
  const {
@@ -88,16 +104,17 @@ const renderImage = (_ref, editor) => {
88
104
  return /*#__PURE__*/_react.default.createElement("span", Object.assign({}, attributes, {
89
105
  contentEditable: false,
90
106
  className: "sf-image-wrapper"
91
- }), /*#__PURE__*/_react.default.createElement("img", {
107
+ }), isLoadingImage && /*#__PURE__*/_react.default.createElement("span", null, t('Image_is_uploading'), "..."), !isLoadingImage && /*#__PURE__*/_react.default.createElement("img", {
92
108
  ref: imgRef,
93
109
  className: (0, _classnames.default)('sf-image', {
94
- 'selected': isSelected
110
+ 'selected': isSelected,
111
+ 'error': isError
95
112
  }),
96
- alt: element === null || element === void 0 ? void 0 : (_element$data = element.data) === null || _element$data === void 0 ? void 0 : _element$data.alt,
113
+ alt: (element === null || element === void 0 ? void 0 : (_element$data = element.data) === null || _element$data === void 0 ? void 0 : _element$data.alt) || '',
97
114
  src: element === null || element === void 0 ? void 0 : (_element$data2 = element.data) === null || _element$data2 === void 0 ? void 0 : _element$data2.src,
98
115
  width: element === null || element === void 0 ? void 0 : element.data.width,
99
116
  height: element === null || element === void 0 ? void 0 : element.data.height
100
- }), isSelected && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("span", {
117
+ }), isSelected && !isError && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("span", {
101
118
  ref: resizerRef,
102
119
  className: "resizer",
103
120
  onMouseDown: handleStartResize
@@ -5,6 +5,11 @@
5
5
  padding: 1px;
6
6
  }
7
7
 
8
+ .sf-image-wrapper .sf-image.error {
9
+ height: 21px;
10
+ width: 21px;
11
+ }
12
+
8
13
  .sf-image-wrapper .sf-image.selected {
9
14
  box-shadow: 0 0 0 2px #007bff;
10
15
  }
@@ -178,6 +178,8 @@ const transformListItem = node => {
178
178
  } else if (child.type === 'list') {
179
179
  const hasParent = true;
180
180
  return transformList(child, hasParent);
181
+ } else if (child.type === 'heading') {
182
+ return transformParagraph(child);
181
183
  } else if (child.type === 'html') {
182
184
  // patch
183
185
  return transformBlockHtml(child);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/seafile-editor",
3
- "version": "1.0.59",
3
+ "version": "1.0.61",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -220,5 +220,6 @@
220
220
  },
221
221
  "Select_field": "Vyberte pole",
222
222
  "Font_style": "Styl písma",
223
- "Open_link": "Open link"
223
+ "Open_link": "Open link",
224
+ "Image_is_uploading": "Image is uploading"
224
225
  }
@@ -220,5 +220,6 @@
220
220
  },
221
221
  "Select_field": "Feld auswählen",
222
222
  "Font_style": "Schriftschnitt",
223
- "Open_link": "Open link"
223
+ "Open_link": "Open link",
224
+ "Image_is_uploading": "Image is uploading"
224
225
  }
@@ -220,5 +220,6 @@
220
220
  },
221
221
  "Select_field": "Select field",
222
222
  "Font_style": "Font style",
223
- "Open_link": "Open link"
223
+ "Open_link": "Open link",
224
+ "Image_is_uploading": "Image is uploading"
224
225
  }
@@ -220,5 +220,6 @@
220
220
  },
221
221
  "Select_field": "Select field",
222
222
  "Font_style": "Font style",
223
- "Open_link": "Open link"
223
+ "Open_link": "Open link",
224
+ "Image_is_uploading": "Image is uploading"
224
225
  }
@@ -220,5 +220,6 @@
220
220
  },
221
221
  "Select_field": "Select field",
222
222
  "Font_style": "Font style",
223
- "Open_link": "Ouvrir le lien"
223
+ "Open_link": "Ouvrir le lien",
224
+ "Image_is_uploading": "Image is uploading"
224
225
  }
@@ -220,5 +220,6 @@
220
220
  },
221
221
  "Select_field": "Select field",
222
222
  "Font_style": "Font style",
223
- "Open_link": "Open link"
223
+ "Open_link": "Open link",
224
+ "Image_is_uploading": "Image is uploading"
224
225
  }
@@ -220,5 +220,6 @@
220
220
  },
221
221
  "Select_field": "Выбрать поле",
222
222
  "Font_style": "Стиль шрифта",
223
- "Open_link": "Открыть ссылку"
223
+ "Open_link": "Открыть ссылку",
224
+ "Image_is_uploading": "Image is uploading"
224
225
  }
@@ -220,5 +220,6 @@
220
220
  },
221
221
  "Select_field": "选中字段",
222
222
  "Font_style": "字体样式",
223
- "Open_link": "打开链接"
223
+ "Open_link": "打开链接",
224
+ "Image_is_uploading": "图片正在上传"
224
225
  }