@seafile/seafile-editor 2.0.25-beta → 2.0.26

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.
@@ -21,7 +21,7 @@ var _elementTypes = require("../../extension/constants/element-types");
21
21
  var _useInsertImage = _interopRequireDefault(require("../../hooks/use-insert-image"));
22
22
  require("./index.css");
23
23
  const isMacOS = (0, _common.isMac)();
24
- const InlineEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
24
+ const InlineEditor = _ref => {
25
25
  let {
26
26
  enableEdit,
27
27
  value,
@@ -30,6 +30,8 @@ const InlineEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
30
30
  columns,
31
31
  onContentChanged,
32
32
  isSupportFormula,
33
+ isSupportFileToLink,
34
+ isSupportMultipleFiles,
33
35
  onExpandEditorToggle,
34
36
  handelEnableEdit
35
37
  } = _ref;
@@ -40,9 +42,11 @@ const InlineEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
40
42
  return (0, _withPropsEditor.default)(baseEditor, {
41
43
  editorApi,
42
44
  onSave,
43
- columns
45
+ columns,
46
+ isSupportMultipleFiles,
47
+ isSupportFileToLink
44
48
  });
45
- }, [columns, editorApi, onSave]);
49
+ }, [columns, isSupportFileToLink, isSupportMultipleFiles, editorApi, onSave]);
46
50
  const eventProxy = (0, _react.useMemo)(() => {
47
51
  return new _eventHandler.default(editor);
48
52
  }, [editor]);
@@ -156,11 +160,6 @@ const InlineEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
156
160
  };
157
161
  // eslint-disable-next-line react-hooks/exhaustive-deps
158
162
  }, []);
159
- (0, _react.useImperativeHandle)(ref, () => {
160
- return {
161
- getEditor: () => editor
162
- };
163
- }, [editor]);
164
163
  const onEditorClick = (0, _react.useCallback)(() => {
165
164
  if (!enableEdit) {
166
165
  focusRangeRef.current = editor.selection;
@@ -202,5 +201,5 @@ const InlineEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
202
201
  onKeyDown: eventProxy.onKeyDown,
203
202
  onCopy: eventProxy.onCopy
204
203
  })))))));
205
- });
204
+ };
206
205
  var _default = exports.default = InlineEditor;
@@ -16,6 +16,8 @@ const withPropsEditor = function (editor) {
16
16
  if (props.columns) {
17
17
  newEditor.columns = props.columns;
18
18
  }
19
+ newEditor.isSupportFileToLink = Boolean(props.isSupportFileToLink);
20
+ newEditor.isSupportMultipleFiles = Boolean(props.isSupportMultipleFiles);
19
21
  newEditor.isInlineEditor = true;
20
22
  return newEditor;
21
23
  };
@@ -4,13 +4,14 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.updateImage = exports.lazyLoadImage = exports.isMenuDisabled = exports.insertSeafileImage = exports.insertImage = exports.handleUpdateImage = exports.getImagesUrlList = void 0;
7
+ exports.updateImage = exports.lazyLoadImage = exports.isMenuDisabled = exports.insertSeafileImage = exports.insertImage = exports.handleUpdateFile = exports.getImagesUrlList = void 0;
8
8
  var _slate = require("slate");
9
9
  var _slugid = _interopRequireDefault(require("slugid"));
10
10
  var _helper = require("../header/helper");
11
11
  var _elementTypes = require("../../constants/element-types");
12
12
  var _core = require("../../core");
13
13
  var _helpers = require("../code-block/helpers");
14
+ var _helper2 = require("../link/helper");
14
15
  const isMenuDisabled = (editor, readonly) => {
15
16
  if (readonly) return true;
16
17
  const isHeader = (0, _helper.getHeaderType)(editor);
@@ -91,17 +92,27 @@ const getImagesUrlList = nodes => {
91
92
  return list;
92
93
  };
93
94
  exports.getImagesUrlList = getImagesUrlList;
94
- const handleUpdateImage = async (editor, file) => {
95
+ const handleUpdateFile = async (editor, file, insertPosition) => {
95
96
  if (editor.api.uploadLocalImage) {
96
97
  try {
97
- const imgUrl = await editor.api.uploadLocalImage(file);
98
- insertImage(editor, imgUrl);
98
+ const url = await editor.api.uploadLocalImage(file);
99
+ const title = file.name;
100
+ if (file.type.includes(_elementTypes.IMAGE)) {
101
+ insertImage(editor, url);
102
+ } else {
103
+ (0, _helper2.insertLink)({
104
+ editor,
105
+ url,
106
+ title,
107
+ insertPosition
108
+ });
109
+ }
99
110
  } catch (error) {
100
111
  console.log('error', error);
101
112
  }
102
113
  }
103
114
  };
104
- exports.handleUpdateImage = handleUpdateImage;
115
+ exports.handleUpdateFile = handleUpdateFile;
105
116
  const lazyLoadImage = (url, resolve, reject) => {
106
117
  if (!url) {
107
118
  reject('img path is require');
@@ -37,7 +37,7 @@ const ImageMenuPopover = /*#__PURE__*/_react.default.forwardRef((_ref, ref) => {
37
37
  }, []);
38
38
  const handleUploadLocalImage = (0, _react.useCallback)(async e => {
39
39
  const file = e.target.files[0];
40
- (0, _helper.handleUpdateImage)(editor, file);
40
+ (0, _helper.handleUpdateFile)(editor, file);
41
41
  handelClosePopover();
42
42
  }, [editor, handelClosePopover]);
43
43
  const onToggleImageDialog = (0, _react.useCallback)(() => {
@@ -37,7 +37,7 @@ const ImageMenu = _ref => {
37
37
  const handleUploadLocalImage = (0, _react.useCallback)(async e => {
38
38
  const file = e.target.files[0];
39
39
  if (!file) return;
40
- (0, _helper.handleUpdateImage)(editor, file);
40
+ (0, _helper.handleUpdateFile)(editor, file);
41
41
  e.target.value = null;
42
42
  }, [editor]);
43
43
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
@@ -29,9 +29,24 @@ const withImages = editor => {
29
29
  return isVoid(element);
30
30
  };
31
31
  newEditor.insertData = data => {
32
- if (data.types && data.types.includes('Files') && data.files[0].type.includes(_elementTypes.IMAGE)) {
33
- const file = data.files[0];
34
- (0, _helper.handleUpdateImage)(newEditor, file);
32
+ if (data.types && data.types.includes('Files') && data.files) {
33
+ if (!newEditor.isSupportMultipleFiles) {
34
+ const file = data.files[0];
35
+ if (!file.type.includes(_elementTypes.IMAGE) && !newEditor.isSupportFileToLink) return;
36
+ (0, _helper.handleUpdateFile)(newEditor, file);
37
+ return;
38
+ }
39
+ let files = [];
40
+ for (let i = 0; i < data.files.length; i++) {
41
+ const file = data.files[i];
42
+ if (!newEditor.isSupportFileToLink && !file.type.includes(_elementTypes.IMAGE)) continue;
43
+ files.push(file);
44
+ }
45
+ const hasImage = files.some(file => file.type.includes(_elementTypes.IMAGE));
46
+ for (let i = 0; i < files.length; i++) {
47
+ const file = files[i];
48
+ (0, _helper.handleUpdateFile)(newEditor, file, hasImage ? _constants.INSERT_POSITION.AFTER : _constants.INSERT_POSITION.CURRENT);
49
+ }
35
50
  return;
36
51
  }
37
52
  return insertData(data);
@@ -19,7 +19,6 @@ const useSeafileUtils = editor => {
19
19
  isImage,
20
20
  selection
21
21
  } = _ref;
22
- console.log('insertImage');
23
22
  if (isImage) {
24
23
  (0, _helper.insertSeafileImage)({
25
24
  editor,
@@ -28,7 +27,6 @@ const useSeafileUtils = editor => {
28
27
  selection
29
28
  });
30
29
  } else {
31
- console.log('insertSeafileLink');
32
30
  (0, _helper2.insertSeafileLink)({
33
31
  editor,
34
32
  title,
@@ -37,7 +35,6 @@ const useSeafileUtils = editor => {
37
35
  });
38
36
  }
39
37
  };
40
- console.log('123232');
41
38
  const eventBus = _eventBus.default.getInstance();
42
39
  const subscribe = eventBus.subscribe(_eventTypes.EXTERNAL_EVENTS.INSERT_IMAGE, insertImage);
43
40
  return subscribe;
@@ -23,6 +23,8 @@ const LongTextInlineEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) =>
23
23
  value,
24
24
  lang,
25
25
  headerName,
26
+ isSupportFileToLink = false,
27
+ isSupportMultipleFiles = false,
26
28
  onClick,
27
29
  onSaveEditorValue,
28
30
  editorApi
@@ -32,7 +34,6 @@ const LongTextInlineEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) =>
32
34
  text: value
33
35
  } : value);
34
36
  const longTextValueChangedRef = (0, _react.useRef)(false);
35
- const editorRef = (0, _react.useRef)(null);
36
37
  const {
37
38
  isWindowsWechat
38
39
  } = (0, _react.useMemo)(() => {
@@ -70,13 +71,11 @@ const LongTextInlineEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) =>
70
71
  }, [enableEdit, closeEditor]);
71
72
  (0, _react.useImperativeHandle)(ref, () => {
72
73
  return {
73
- isWindowsWechat: isWindowsWechat,
74
74
  enableEdit: enableEdit,
75
75
  openEditor: openEditor,
76
- closeEditor: closeEditor,
77
- getEditor: () => editorRef.current.getEditor()
76
+ closeEditor: closeEditor
78
77
  };
79
- }, [enableEdit, openEditor, closeEditor, isWindowsWechat, editorRef]);
78
+ }, [enableEdit, openEditor, closeEditor]);
80
79
  const handelEnableEdit = (0, _react.useCallback)(() => {
81
80
  onClick && onClick();
82
81
  openEditor();
@@ -89,7 +88,6 @@ const LongTextInlineEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) =>
89
88
  }, isWindowsWechat ? /*#__PURE__*/_react.default.createElement(_fallbackEditor.default, {
90
89
  enableEdit: enableEdit,
91
90
  value: valueRef.current.text,
92
- ref: editorRef,
93
91
  onChange: onEditorValueChanged,
94
92
  closeEditor: closeEditor
95
93
  }) : /*#__PURE__*/_react.default.createElement(_normalEditor.default, {
@@ -101,7 +99,8 @@ const LongTextInlineEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) =>
101
99
  autoSave: autoSave,
102
100
  saveDelay: saveDelay,
103
101
  isCheckBrowser: isCheckBrowser,
104
- ref: editorRef,
102
+ isSupportFileToLink: isSupportFileToLink,
103
+ isSupportMultipleFiles: isSupportMultipleFiles,
105
104
  editorApi: editorApi,
106
105
  onSaveEditorValue: onSaveEditorValue,
107
106
  onEditorValueChanged: onEditorValueChanged
@@ -13,7 +13,7 @@ var _getPreviewContent = _interopRequireDefault(require("../../utils/get-preview
13
13
  var _markdownPreview = _interopRequireDefault(require("../markdown-preview"));
14
14
  var _longtextEditorDialog = _interopRequireDefault(require("../longtext-editor-dialog"));
15
15
  var _slateConvert = require("../../slate-convert");
16
- const NormalEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
16
+ const NormalEditor = _ref => {
17
17
  let {
18
18
  enableEdit,
19
19
  handelEnableEdit,
@@ -23,6 +23,8 @@ const NormalEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
23
23
  autoSave = true,
24
24
  saveDelay = 60000,
25
25
  isCheckBrowser = false,
26
+ isSupportFileToLink = false,
27
+ isSupportMultipleFiles = false,
26
28
  editorApi,
27
29
  onSaveEditorValue,
28
30
  onEditorValueChanged
@@ -91,11 +93,6 @@ const NormalEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
91
93
  timer && clearTimeout(timer);
92
94
  };
93
95
  }, [autoSave, saveDelay, handelAutoSave]);
94
- (0, _react.useImperativeHandle)(ref, () => {
95
- return {
96
- getEditor: () => editorRef.current.getEditor()
97
- };
98
- }, [editorRef]);
99
96
  if (!enableEdit && !valueRef.current.text) {
100
97
  return /*#__PURE__*/_react.default.createElement("div", {
101
98
  className: (0, _classnames.default)('sf-long-text-inline-editor-container', {
@@ -115,6 +112,8 @@ const NormalEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
115
112
  ref: editorRef,
116
113
  enableEdit: enableEdit,
117
114
  isInline: true,
115
+ isSupportFileToLink: isSupportFileToLink,
116
+ isSupportMultipleFiles: isSupportMultipleFiles,
118
117
  value: valueRef.current.text,
119
118
  handelEnableEdit: handelEnableEdit,
120
119
  onSave: handelAutoSave,
@@ -133,6 +132,8 @@ const NormalEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
133
132
  })))), showExpandEditor && /*#__PURE__*/_react.default.createElement(_longtextEditorDialog.default, {
134
133
  lang: lang,
135
134
  readOnly: false,
135
+ isSupportFileToLink: isSupportFileToLink,
136
+ isSupportMultipleFiles: isSupportMultipleFiles,
136
137
  headerName: headerName,
137
138
  value: valueRef.current.text,
138
139
  autoSave: autoSave,
@@ -143,5 +144,5 @@ const NormalEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
143
144
  onEditorValueChanged: saveValue,
144
145
  onCloseEditorDialog: onCloseEditorDialog
145
146
  }));
146
- });
147
+ };
147
148
  var _default = exports.default = NormalEditor;
@@ -29,13 +29,8 @@ const SimpleEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
29
29
  const {
30
30
  isLoadingMathJax
31
31
  } = (0, _useMathjax.default)(mathJaxSource);
32
- const editorRef = (0, _react.useRef)(null);
33
32
  (0, _react.useImperativeHandle)(ref, () => {
34
33
  return {
35
- getEditor: () => {
36
- var _editorRef$current;
37
- return (_editorRef$current = editorRef.current) === null || _editorRef$current === void 0 ? void 0 : _editorRef$current.getEditor();
38
- },
39
34
  getValue: () => {
40
35
  const mdStringValue = (0, _slateConvert.slateToMdString)(richValue);
41
36
  return mdStringValue;
@@ -44,7 +39,7 @@ const SimpleEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
44
39
  return richValue;
45
40
  }
46
41
  };
47
- }, [richValue, editorRef]);
42
+ }, [richValue]);
48
43
  (0, _react.useEffect)(() => {
49
44
  if (!isFetching) {
50
45
  const richValue = (0, _slateConvert.mdStringToSlate)(value);
@@ -66,17 +61,12 @@ const SimpleEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
66
61
  onContentChanged: onContentChanged,
67
62
  ...otherProps
68
63
  };
69
- console.log(otherProps);
70
64
  if (isFetching || isLoading || isLoadingMathJax) {
71
65
  return /*#__PURE__*/_react.default.createElement(_loading.default, null);
72
66
  }
73
67
  if (isInline) {
74
- return /*#__PURE__*/_react.default.createElement(_inlineEditor.default, Object.assign({}, props, {
75
- ref: editorRef
76
- }));
68
+ return /*#__PURE__*/_react.default.createElement(_inlineEditor.default, props);
77
69
  }
78
- return /*#__PURE__*/_react.default.createElement(_simpleSlateEditor.default, Object.assign({}, props, {
79
- ref: editorRef
80
- }));
70
+ return /*#__PURE__*/_react.default.createElement(_simpleSlateEditor.default, props);
81
71
  });
82
72
  var _default = exports.default = SimpleEditor;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/seafile-editor",
3
- "version": "2.0.25beta",
3
+ "version": "2.0.26",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {