@seafile/seafile-editor 1.0.89 → 1.0.91-beta

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.
@@ -10,7 +10,8 @@ const INTERNAL_EVENTS = exports.INTERNAL_EVENTS = {
10
10
  ON_OPEN_LINK_MODAL: 'on_open_link_modal',
11
11
  ON_CLOSE_LINK_POPOVER: 'on_close_link_popover',
12
12
  ON_OPEN_FORMULA_DIALOG: 'on_open_formula_dialog',
13
- ON_SELECT_ALL_CELL: 'on_select_all_cell'
13
+ ON_SELECT_ALL_CELL: 'on_select_all_cell',
14
+ ON_TOGGLE_IMAGE_POPOVER: 'on_toggle_image_popover'
14
15
  };
15
16
  const EXTERNAL_EVENTS = exports.EXTERNAL_EVENTS = {
16
17
  ON_HELP_INFO_TOGGLE: 'on_help_info_toggle',
@@ -1,14 +1,17 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
6
7
  });
7
8
  exports.default = void 0;
8
- var _react = _interopRequireDefault(require("react"));
9
+ var _react = _interopRequireWildcard(require("react"));
9
10
  var _classnames = _interopRequireDefault(require("classnames"));
10
11
  var _reactstrap = require("reactstrap");
11
12
  var _constants = require("../../constants");
13
+ var _eventBus = _interopRequireDefault(require("../../../utils/event-bus"));
14
+ var _eventTypes = require("../../../constants/event-types");
12
15
  require("./index.css");
13
16
  const MoreMenu = _ref => {
14
17
  let {
@@ -17,6 +20,8 @@ const MoreMenu = _ref => {
17
20
  isRichEditor,
18
21
  children
19
22
  } = _ref;
23
+ const popoverRef = (0, _react.useRef)(null);
24
+ const imagePopoverRef = (0, _react.useRef)(false);
20
25
  const validClassName = (0, _classnames.default)(className, {
21
26
  'sf-rich-editor': isRichEditor,
22
27
  'sf-icon-btn': true,
@@ -24,6 +29,20 @@ const MoreMenu = _ref => {
24
29
  'sf-icon-btn-hover': !disabled
25
30
  });
26
31
  const config = _constants.MENUS_CONFIG_MAP[_constants.MORE_OPERATION];
32
+ const toggle = (0, _react.useCallback)(() => {
33
+ if (imagePopoverRef.current) return;
34
+ popoverRef.current.toggle();
35
+ }, []);
36
+ const toggleImagePopover = (0, _react.useCallback)(isPopoverShow => {
37
+ imagePopoverRef.current = isPopoverShow;
38
+ }, []);
39
+ (0, _react.useEffect)(() => {
40
+ const eventBus = _eventBus.default.getInstance();
41
+ const unsubscribe = eventBus.subscribe(_eventTypes.INTERNAL_EVENTS.ON_TOGGLE_IMAGE_POPOVER, toggleImagePopover);
42
+ return () => unsubscribe();
43
+
44
+ // eslint-disable-next-line react-hooks/exhaustive-deps
45
+ }, []);
27
46
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("button", {
28
47
  className: validClassName,
29
48
  type: "button",
@@ -36,7 +55,9 @@ const MoreMenu = _ref => {
36
55
  trigger: "legacy",
37
56
  placement: "bottom-end",
38
57
  hideArrow: true,
39
- fade: false
58
+ fade: false,
59
+ toggle: toggle,
60
+ ref: popoverRef
40
61
  }, children));
41
62
  };
42
63
  MoreMenu.defaultProps = {
@@ -36,6 +36,7 @@ const insertImage = (editor, url, title) => {
36
36
  at: editor.selection,
37
37
  select: true
38
38
  });
39
+ (0, _core.focusEditor)(editor);
39
40
  };
40
41
  exports.insertImage = insertImage;
41
42
  const insertSeafileImage = _ref => {
@@ -12,7 +12,6 @@ var _imageMenuDialog = _interopRequireDefault(require("./image-menu-dialog"));
12
12
  var _eventBus = _interopRequireDefault(require("../../../../utils/event-bus"));
13
13
  var _eventTypes = require("../../../../constants/event-types");
14
14
  var _helper = require("../helper");
15
- var _core = require("../../../core");
16
15
  var _constants = require("../../../../constants");
17
16
  require("./style.css");
18
17
  const ImageMenuPopover = /*#__PURE__*/_react.default.forwardRef((_ref, ref) => {
@@ -39,7 +38,6 @@ const ImageMenuPopover = /*#__PURE__*/_react.default.forwardRef((_ref, ref) => {
39
38
  const file = e.target.files[0];
40
39
  (0, _helper.handleUpdateImage)(editor, file);
41
40
  handelClosePopover();
42
- (0, _core.focusEditor)(editor);
43
41
  }, [editor, handelClosePopover]);
44
42
  const onToggleImageDialog = (0, _react.useCallback)(() => {
45
43
  setIsShowInternetImageModal(false);
@@ -9,6 +9,8 @@ exports.default = void 0;
9
9
  var _react = _interopRequireWildcard(require("react"));
10
10
  var _elementTypes = require("../../../constants/element-types");
11
11
  var _menusConfig = require("../../../constants/menus-config");
12
+ var _eventBus = _interopRequireDefault(require("../../../../utils/event-bus"));
13
+ var _eventTypes = require("../../../../constants/event-types");
12
14
  var _helper = require("../helper");
13
15
  var _commons = require("../../../commons");
14
16
  var _imageMenuPopover = _interopRequireDefault(require("./image-menu-popover"));
@@ -31,6 +33,10 @@ const ImageMenu = _ref => {
31
33
  }
32
34
  setIsShowImagePopover(false);
33
35
  unregisterEventHandler();
36
+ setTimeout(() => {
37
+ const eventBus = _eventBus.default.getInstance();
38
+ eventBus.dispatch(_eventTypes.INTERNAL_EVENTS.ON_TOGGLE_IMAGE_POPOVER, false);
39
+ }, 150);
34
40
  // eslint-disable-next-line react-hooks/exhaustive-deps
35
41
  }, []);
36
42
  const registerEventHandler = (0, _react.useCallback)(() => {
@@ -43,6 +49,7 @@ const ImageMenu = _ref => {
43
49
  e.stopPropagation();
44
50
  e.nativeEvent.stopImmediatePropagation();
45
51
  const state = !isShowImagePopover;
52
+ const eventBus = _eventBus.default.getInstance();
46
53
  if (state) {
47
54
  setIsShowImagePopover(state);
48
55
  registerEventHandler();
@@ -50,6 +57,7 @@ const ImageMenu = _ref => {
50
57
  setIsShowImagePopover(state);
51
58
  unregisterEventHandler();
52
59
  }
60
+ eventBus.dispatch(_eventTypes.INTERNAL_EVENTS.ON_TOGGLE_IMAGE_POPOVER, state);
53
61
  }, [isShowImagePopover, registerEventHandler, unregisterEventHandler]);
54
62
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_commons.MenuItem, Object.assign({
55
63
  type: Image,
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  var _constants = require("../../constants");
8
8
  var _elementTypes = require("../../constants/element-types");
9
- var _core = require("../../core");
10
9
  var _helper = require("./helper");
11
10
  const withImages = editor => {
12
11
  const {
@@ -33,7 +32,6 @@ const withImages = editor => {
33
32
  if (data.types && data.types.includes('Files') && data.files[0].type.includes(_elementTypes.IMAGE)) {
34
33
  const file = data.files[0];
35
34
  (0, _helper.handleUpdateImage)(newEditor, file);
36
- (0, _core.focusEditor)(newEditor);
37
35
  return;
38
36
  }
39
37
  return insertData(data);
@@ -46,6 +46,7 @@ const renderLink = (_ref, editor) => {
46
46
  e.stopPropagation();
47
47
  const eventBus = _eventBus.default.getInstance();
48
48
  if (isReadonly) {
49
+ e.nativeEvent.stopImmediatePropagation();
49
50
  eventBus.dispatch(_eventTypes.EXTERNAL_EVENTS.ON_LINK_CLICK, e);
50
51
  return;
51
52
  }
@@ -287,6 +287,7 @@ const withTable = editor => {
287
287
  const tableCell = (0, _core.getSelectedNodeByType)(newEditor, _elementTypes.TABLE_CELL);
288
288
  if (tableCell) {
289
289
  const selection = window.getSelection();
290
+ const selectedText = selection.toString();
290
291
  const range = selection.getRangeAt(0);
291
292
  const selectedContent = range.cloneContents();
292
293
  const div = document.createElement('div');
@@ -299,6 +300,7 @@ const withTable = editor => {
299
300
  }
300
301
  div.appendChild(node.cloneNode(true));
301
302
  });
303
+ (0, _setEventTransfer.default)(event, 'text', selectedText);
302
304
  (0, _setEventTransfer.default)(event, 'html', div.innerHTML.toString());
303
305
  return true;
304
306
  }
@@ -93,3 +93,11 @@
93
93
  .sf-long-text-inline-editor-container .sf-image-wrapper .full-screen .iconfont {
94
94
  color: #fff;
95
95
  }
96
+
97
+ .sf-long-text-inline-editor-container .empty-loading-page {
98
+ position: relative;
99
+ }
100
+
101
+ .sf-long-text-inline-editor-container .sf-simple-slate-editor-container .sf-slate-editor-content {
102
+ border-radius: 3px;
103
+ }
@@ -81,7 +81,7 @@ const NormalEditor = _ref => {
81
81
  const onCloseEditorDialog = (0, _react.useCallback)(value => {
82
82
  if (value) {
83
83
  valueRef.current = value;
84
- saveValue(value);
84
+ saveValue(value, true);
85
85
  }
86
86
  setStyle({});
87
87
  setShowExpandEditor(false);
@@ -324,6 +324,15 @@ const transformFormula = node => {
324
324
  value: data.formula
325
325
  };
326
326
  };
327
+ const transformAsParagraph = node => {
328
+ const paragraph = {
329
+ type: 'paragraph',
330
+ children: [{
331
+ text: _slate.Node.string(node)
332
+ }]
333
+ };
334
+ return transformParagraph(paragraph);
335
+ };
327
336
  const elementHandlers = {
328
337
  'paragraph': transformParagraph,
329
338
  'header1': transformHeader,
@@ -341,10 +350,15 @@ const elementHandlers = {
341
350
  'formula': transformFormula
342
351
  };
343
352
  const formatSlateToMd = children => {
344
- const validChildren = children.filter(child => elementHandlers[child.type]);
353
+ // const validChildren = children.filter(child => elementHandlers[child.type]);
354
+ const validChildren = children;
345
355
  return validChildren.map(child => {
346
356
  const handler = elementHandlers[child.type];
347
- return handler(child);
357
+ if (handler) {
358
+ return handler(child);
359
+ } else {
360
+ return transformAsParagraph(child);
361
+ }
348
362
  }).flat();
349
363
  };
350
364
  exports.formatSlateToMd = formatSlateToMd;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/seafile-editor",
3
- "version": "1.0.89",
3
+ "version": "1.0.91beta",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {