@seafile/seafile-editor 2.0.18 → 2.0.20-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.
Files changed (44) hide show
  1. package/dist/constants/event-types.js +4 -2
  2. package/dist/editors/inline-editor/index.js +34 -0
  3. package/dist/extension/commons/dropdown-menu-item/index.css +54 -0
  4. package/dist/extension/commons/dropdown-menu-item/index.js +60 -0
  5. package/dist/extension/commons/insert-element-dialog/index.js +50 -18
  6. package/dist/extension/commons/menu/menu-drop-down.js +1 -1
  7. package/dist/extension/commons/menu-shortcut-indicator/index.js +22 -0
  8. package/dist/extension/commons/menu-shortcut-indicator/style.css +18 -0
  9. package/dist/extension/constants/menus-config.js +7 -1
  10. package/dist/extension/plugins/code-block/menu/index.js +11 -12
  11. package/dist/extension/plugins/column/menu/index.js +14 -13
  12. package/dist/extension/plugins/formula/menu/formula-modal.js +2 -2
  13. package/dist/extension/plugins/formula/menu/index.js +15 -44
  14. package/dist/extension/plugins/header/menu/style.css +2 -2
  15. package/dist/extension/plugins/image/menu/image-menu-dialog.js +6 -6
  16. package/dist/extension/plugins/image/menu/image-menu-popover.js +1 -1
  17. package/dist/extension/plugins/image/menu/index.css +36 -0
  18. package/dist/extension/plugins/image/menu/index.js +57 -52
  19. package/dist/extension/plugins/table/constant.js +4 -1
  20. package/dist/extension/plugins/table/context-menu/horizontal-align-popover/index.js +77 -0
  21. package/dist/extension/plugins/table/context-menu/horizontal-align-popover/style.css +24 -0
  22. package/dist/extension/plugins/table/context-menu/index.js +20 -1
  23. package/dist/extension/plugins/table/context-menu/style.css +19 -0
  24. package/dist/extension/plugins/table/menu/index.js +14 -38
  25. package/dist/extension/plugins/table/menu/style.css +1 -0
  26. package/dist/extension/plugins/table/render-elem/index.js +6 -6
  27. package/dist/extension/toolbar/header-toolbar/index.js +17 -48
  28. package/dist/extension/toolbar/header-toolbar/insert-toolbar/index.js +100 -0
  29. package/dist/extension/toolbar/header-toolbar/insert-toolbar/style.css +47 -0
  30. package/dist/extension/toolbar/inline-toolbar/index.css +4 -0
  31. package/dist/extension/toolbar/inline-toolbar/index.js +17 -24
  32. package/dist/pages/longtext-inline-editor/fallback-editor.js +14 -0
  33. package/dist/slate-convert/slate-to-md/index.js +1 -7
  34. package/package.json +1 -1
  35. package/public/locales/en/seafile-editor.json +6 -1
  36. package/public/locales/zh-CN/seafile-editor.json +6 -1
  37. package/public/locales/zh_CN/seafile-editor.json +6 -1
  38. package/public/media/seafile-editor-font/iconfont.eot +0 -0
  39. package/public/media/seafile-editor-font/iconfont.svg +68 -60
  40. package/public/media/seafile-editor-font/iconfont.ttf +0 -0
  41. package/public/media/seafile-editor-font/iconfont.woff +0 -0
  42. package/public/media/seafile-editor-font/iconfont.woff2 +0 -0
  43. package/public/media/seafile-editor-font.css +139 -123
  44. /package/dist/extension/plugins/image/menu/{style.css → image-menu-popover.css} +0 -0
@@ -12,12 +12,14 @@ const INTERNAL_EVENTS = exports.INTERNAL_EVENTS = {
12
12
  ON_SELECT_ALL_CELL: 'on_select_all_cell',
13
13
  ON_TOGGLE_IMAGE_POPOVER: 'on_toggle_image_popover',
14
14
  OUTLINE_STATE_CHANGED: 'outline_state_changed',
15
- RESIZE_ARTICLE: 'resize_article'
15
+ RESIZE_ARTICLE: 'resize_article',
16
+ INSERT_ELEMENT: 'insert_element'
16
17
  };
17
18
  const EXTERNAL_EVENTS = exports.EXTERNAL_EVENTS = {
18
19
  ON_HELP_INFO_TOGGLE: 'on_help_info_toggle',
19
20
  ON_ARTICLE_INFO_TOGGLE: 'on_article_info_toggle',
20
21
  ON_LINK_CLICK: 'on_link_click',
21
22
  ON_INSERT_IMAGE: 'on_insert_image',
22
- INSERT_IMAGE: 'insert_image'
23
+ INSERT_IMAGE: 'insert_image',
24
+ CLEAR_ARTICLE: 'clear_article'
23
25
  };
@@ -9,12 +9,15 @@ exports.default = void 0;
9
9
  var _react = _interopRequireWildcard(require("react"));
10
10
  var _slateReact = require("slate-react");
11
11
  var _slate = require("slate");
12
+ var _slugid = _interopRequireDefault(require("slugid"));
12
13
  var _extension = require("../../extension");
13
14
  var _eventBus = _interopRequireDefault(require("../../utils/event-bus"));
14
15
  var _eventHandler = _interopRequireDefault(require("../../utils/event-handler"));
15
16
  var _withPropsEditor = _interopRequireDefault(require("./with-props-editor"));
16
17
  var _core = require("../../extension/core");
17
18
  var _common = require("../../utils/common");
19
+ var _eventTypes = require("../../constants/event-types");
20
+ var _elementTypes = require("../../extension/constants/element-types");
18
21
  require("./index.css");
19
22
  const isMacOS = (0, _common.isMac)();
20
23
  const InlineEditor = _ref => {
@@ -120,6 +123,37 @@ const InlineEditor = _ref => {
120
123
  };
121
124
  // eslint-disable-next-line react-hooks/exhaustive-deps
122
125
  }, []);
126
+ const handleClear = (0, _react.useCallback)(() => {
127
+ editor.children = [{
128
+ type: _elementTypes.PARAGRAPH,
129
+ id: _slugid.default.nice(),
130
+ children: [{
131
+ id: _slugid.default.nice(),
132
+ text: ''
133
+ }]
134
+ }];
135
+ editor.selection = null;
136
+ editor.operations = [{
137
+ type: 'remove_text',
138
+ path: [0, 0],
139
+ offset: 0,
140
+ text: ''
141
+ }];
142
+ editor.onChange();
143
+ editor.operations = [];
144
+ editor.history = {
145
+ redos: [],
146
+ undos: []
147
+ };
148
+ }, [editor]);
149
+ (0, _react.useEffect)(() => {
150
+ const eventBus = _eventBus.default.getInstance();
151
+ const clearSubscribe = eventBus.subscribe(_eventTypes.EXTERNAL_EVENTS.CLEAR_ARTICLE, handleClear);
152
+ return () => {
153
+ clearSubscribe();
154
+ };
155
+ // eslint-disable-next-line react-hooks/exhaustive-deps
156
+ }, []);
123
157
  const onEditorClick = (0, _react.useCallback)(() => {
124
158
  if (!enableEdit) {
125
159
  focusRangeRef.current = editor.selection;
@@ -0,0 +1,54 @@
1
+ /* insert element dropdown item */
2
+ .sf-dropdown-item-with-left-icon .sf-dropdown-item-content .sf-dropdown-item-content-icon {
3
+ color: #444;
4
+ }
5
+
6
+ .sf-link-dropdown-menu-item .sf-dropdown-item-content{
7
+ justify-content: space-between;
8
+ }
9
+
10
+ .sf-dropdown-menu-item-relative {
11
+ position: relative;
12
+ }
13
+
14
+ .sf-dropdown-menu .sf-dropdown-item-right-icon {
15
+ color: #999;
16
+ transform: scale(.8);
17
+ }
18
+
19
+ .sf-dropdown-menu .sf-dropdown-item-with-left-icon {
20
+ min-height:32px;
21
+ padding: 3px 12px;
22
+ }
23
+
24
+ .sf-dropdown-menu .sf-dropdown-menu-item {
25
+ align-items: center;
26
+ display: flex;
27
+ height: 30px;
28
+ -webkit-user-select: none;
29
+ -ms-user-select: none;
30
+ user-select: none;
31
+ width: 100%
32
+ }
33
+
34
+ .sf-dropdown-menu .sf-dropdown-menu-item .sf-dropdown-item-content {
35
+ align-items: center;
36
+ display: flex;
37
+ flex: 1 1;
38
+ font-size: 14px
39
+ }
40
+
41
+ .sf-dropdown-menu .sf-dropdown-menu-item .iconfont {
42
+ font-size: 12px;
43
+ line-height: 12px;
44
+ }
45
+
46
+ .sf-dropdown-menu .sf-dropdown-item-right-icon {
47
+ color: #999;
48
+ transform: scale(.8);
49
+ }
50
+
51
+ .sf-dropdown-menu .sf-dropdown-item-content .sf-dropdown-item-content-icon {
52
+ margin-right: 10px;
53
+ vertical-align: 1px;
54
+ }
@@ -0,0 +1,60 @@
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 = void 0;
9
+ var _react = _interopRequireWildcard(require("react"));
10
+ var _reactI18next = require("react-i18next");
11
+ var _classnames = _interopRequireDefault(require("classnames"));
12
+ var _constants = require("../../../constants");
13
+ var _menuShortcutIndicator = _interopRequireDefault(require("../menu-shortcut-indicator"));
14
+ require("./index.css");
15
+ const DropdownMenuItem = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
16
+ const {
17
+ disabled,
18
+ onClick,
19
+ menuConfig,
20
+ children,
21
+ className,
22
+ shortcut,
23
+ isHidden,
24
+ onMousedown
25
+ } = props;
26
+ const {
27
+ t
28
+ } = (0, _reactI18next.useTranslation)(_constants.TRANSLATE_NAMESPACE);
29
+ const {
30
+ iconClass
31
+ } = menuConfig;
32
+ const [isShowChildren, setShowChildren] = (0, _react.useState)(false);
33
+
34
+ // onMount
35
+ (0, _react.useEffect)(() => {
36
+ setShowChildren(!isShowChildren);
37
+ // eslint-disable-next-line react-hooks/exhaustive-deps
38
+ }, []);
39
+ return /*#__PURE__*/_react.default.createElement("div", {
40
+ className: (0, _classnames.default)('sf-dropdown-menu-item', className, {
41
+ 'disabled': disabled,
42
+ 'sf-dropdown-item-with-left-icon': iconClass,
43
+ 'sf-link-dropdown-menu-item': shortcut,
44
+ 'sf-dropdown-menu-item-hidden': isHidden
45
+ }),
46
+ id: menuConfig.id || '',
47
+ onClick: disabled ? () => {} : onClick || (() => {}),
48
+ ref: ref,
49
+ onMouseDown: onMousedown
50
+ }, /*#__PURE__*/_react.default.createElement("div", {
51
+ className: "sf-dropdown-item-content"
52
+ }, /*#__PURE__*/_react.default.createElement("div", {
53
+ className: "sf-dropdown-item-left"
54
+ }, iconClass && /*#__PURE__*/_react.default.createElement("i", {
55
+ className: (0, _classnames.default)(iconClass, 'sf-dropdown-item-content-icon')
56
+ }), /*#__PURE__*/_react.default.createElement("span", null, t(menuConfig.text))), shortcut && /*#__PURE__*/_react.default.createElement(_menuShortcutIndicator.default, {
57
+ shortcuts: shortcut
58
+ })), isShowChildren && children);
59
+ });
60
+ var _default = exports.default = DropdownMenuItem;
@@ -12,44 +12,65 @@ var _eventBus = _interopRequireDefault(require("../../../utils/event-bus"));
12
12
  var _eventTypes = require("../../../constants/event-types");
13
13
  var _constants = require("../../constants");
14
14
  var _linkModal = _interopRequireDefault(require("../../plugins/link/menu/link-modal"));
15
+ var _imageMenuDialog = _interopRequireDefault(require("../../plugins/image/menu/image-menu-dialog"));
16
+ var _formulaModal = _interopRequireDefault(require("../../plugins/formula/menu/formula-modal"));
15
17
  const InsertElementDialog = _ref => {
16
18
  let {
17
19
  editor
18
20
  } = _ref;
19
21
  const [dialogType, setDialogType] = (0, _react.useState)('');
20
22
  const [isOpenLinkModal, setIsOpenLinkModal] = (0, _react.useState)(false);
23
+ const [formula, setFormula] = (0, _react.useState)('');
21
24
  const [linkInfo, setLinkInfo] = (0, _react.useState)({
22
25
  linkTitle: '',
23
26
  linkUrl: ''
24
27
  });
25
- (0, _react.useEffect)(() => {
26
- const eventBus = _eventBus.default.getInstance();
27
- const toggleDialogSubscribe = eventBus.subscribe(_eventTypes.INTERNAL_EVENTS.INSERT_ELEMENT, toggleDialog);
28
- return () => {
29
- toggleDialogSubscribe();
30
- };
31
- }, []);
32
28
  const toggleDialog = (0, _react.useCallback)(_ref2 => {
33
29
  let {
34
30
  type
35
31
  } = _ref2;
36
32
  setDialogType(type);
37
33
  setIsOpenLinkModal(true);
38
- if (editor.selection) {
39
- const selectedText = _slate.Editor.string(editor, editor.selection);
40
- setLinkInfo({
41
- ...linkInfo,
42
- linkTitle: selectedText
43
- });
34
+ if (type === _constants.ELementTypes.LINK) {
35
+ if (editor.selection) {
36
+ const selectedText = _slate.Editor.string(editor, editor.selection);
37
+ setLinkInfo({
38
+ ...linkInfo,
39
+ linkTitle: selectedText
40
+ });
41
+ }
44
42
  }
45
43
  }, [editor, linkInfo]);
44
+ const handleOpenLinkModal = (0, _react.useCallback)(formulaElement => {
45
+ if (formulaElement) {
46
+ const {
47
+ formula
48
+ } = formulaElement.data || {};
49
+ setFormula(formula);
50
+ setIsOpenLinkModal(true);
51
+ }
52
+ }, []);
53
+ (0, _react.useEffect)(() => {
54
+ const eventBus = _eventBus.default.getInstance();
55
+ const toggleDialogSubscribe = eventBus.subscribe(_eventTypes.INTERNAL_EVENTS.INSERT_ELEMENT, toggleDialog);
56
+ const unsubscribe = eventBus.subscribe(_eventTypes.INTERNAL_EVENTS.ON_OPEN_FORMULA_DIALOG, handleOpenLinkModal);
57
+ return () => {
58
+ toggleDialogSubscribe();
59
+ unsubscribe();
60
+ };
61
+ }, [toggleDialog, handleOpenLinkModal]);
46
62
  const onCloseModal = (0, _react.useCallback)(() => {
47
63
  setIsOpenLinkModal(false);
48
- setLinkInfo({
49
- linkTitle: '',
50
- linkUrl: ''
51
- });
52
- }, []);
64
+ if (dialogType === _constants.ELementTypes.LINK) {
65
+ setLinkInfo({
66
+ linkTitle: '',
67
+ linkUrl: ''
68
+ });
69
+ }
70
+ if (dialogType === _constants.ELementTypes.FORMULA) {
71
+ setFormula('');
72
+ }
73
+ }, [dialogType]);
53
74
  if (_constants.ELementTypes.LINK === dialogType) {
54
75
  return isOpenLinkModal && /*#__PURE__*/_react.default.createElement(_linkModal.default, {
55
76
  onCloseModal: onCloseModal,
@@ -57,6 +78,17 @@ const InsertElementDialog = _ref => {
57
78
  linkTitle: linkInfo.linkTitle,
58
79
  linkUrl: linkInfo.linkUrl
59
80
  });
81
+ } else if (_constants.ELementTypes.IMAGE === dialogType) {
82
+ return isOpenLinkModal && /*#__PURE__*/_react.default.createElement(_imageMenuDialog.default, {
83
+ closeDialog: onCloseModal,
84
+ editor: editor
85
+ });
86
+ } else if (_constants.ELementTypes.FORMULA === dialogType) {
87
+ return isOpenLinkModal && /*#__PURE__*/_react.default.createElement(_formulaModal.default, {
88
+ onCloseModal: onCloseModal,
89
+ editor: editor,
90
+ formula: formula
91
+ });
60
92
  } else {
61
93
  return null;
62
94
  }
@@ -65,7 +65,7 @@ const MenuDropDown = props => {
65
65
  }), /*#__PURE__*/_react.default.createElement("div", {
66
66
  className: "sf-menu-with-dropdown-triangle"
67
67
  }, /*#__PURE__*/_react.default.createElement("i", {
68
- className: `sf-menu-with-dropdown-triangle-icon iconfont icon-${isShowDropDown ? 'caret-up' : 'drop-down'}`
68
+ className: `sf-menu-with-dropdown-triangle-icon iconfont icon-${isShowDropDown ? 'drop-down' : 'caret-up'}`
69
69
  })), !!isShowDropDown && /*#__PURE__*/_react.default.createElement("div", {
70
70
  ref: menuDropdownRef,
71
71
  className: "sf-dropdown-list "
@@ -0,0 +1,22 @@
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 = void 0;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _classnames = _interopRequireDefault(require("classnames"));
10
+ require("./style.css");
11
+ const MenuShortcutPrompt = _ref => {
12
+ let {
13
+ shortcuts,
14
+ containerClassName = ''
15
+ } = _ref;
16
+ return /*#__PURE__*/_react.default.createElement("div", {
17
+ className: (0, _classnames.default)('sf-shortcut-prompt-container', containerClassName)
18
+ }, shortcuts.map((shortcut, index) => /*#__PURE__*/_react.default.createElement("kbd", {
19
+ key: `sf-shortcut-${shortcut}-${index}`
20
+ }, shortcut)));
21
+ };
22
+ var _default = exports.default = MenuShortcutPrompt;
@@ -0,0 +1,18 @@
1
+ .sf-shortcut-prompt-container kbd {
2
+ display: inline-block;
3
+ margin-bottom: 0px;
4
+ margin-left: 1px;
5
+ margin-right: 1px;
6
+ padding: 1px 3px;
7
+ min-width: 12px;
8
+ border: none;
9
+ font: inherit;
10
+ text-align: center;
11
+ color: #999;
12
+ background-color: transparent;
13
+ }
14
+
15
+ .sf-shortcut-prompt-container kbd:last-child {
16
+ margin-right: 0px;
17
+ padding-right: 0px;
18
+ }
@@ -36,7 +36,7 @@ const TABLE_SUBMENU_MAP = exports.TABLE_SUBMENU_MAP = {
36
36
  const MENUS_CONFIG_MAP = exports.MENUS_CONFIG_MAP = {
37
37
  [_elementTypes.BLOCKQUOTE]: {
38
38
  id: `seafile_${_elementTypes.BLOCKQUOTE}`,
39
- iconClass: 'iconfont icon-quote-left',
39
+ iconClass: 'iconfont icon-quote',
40
40
  text: 'Quote'
41
41
  },
42
42
  [_elementTypes.ORDERED_LIST]: {
@@ -86,6 +86,12 @@ const MENUS_CONFIG_MAP = exports.MENUS_CONFIG_MAP = {
86
86
  text: 'Bold',
87
87
  type: BOLD
88
88
  },
89
+ [UNDERLINE]: {
90
+ id: `seafile_${UNDERLINE}`,
91
+ iconClass: 'iconfont icon-underline',
92
+ text: 'Underline',
93
+ type: UNDERLINE
94
+ },
89
95
  [CODE]: {
90
96
  id: `seafile_${CODE}`,
91
97
  iconClass: 'iconfont icon-code',
@@ -1,37 +1,36 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
3
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
9
  var _react = _interopRequireWildcard(require("react"));
9
- var _commons = require("../../../commons");
10
10
  var _elementTypes = require("../../../constants/element-types");
11
11
  var _helpers = require("../helpers");
12
12
  var _constants = require("../../../constants");
13
+ var _dropdownMenuItem = _interopRequireDefault(require("../../../commons/dropdown-menu-item"));
13
14
  const menuConfig = _constants.MENUS_CONFIG_MAP[_elementTypes.CODE_BLOCK];
14
15
  const CodeBlockMenu = _ref => {
15
16
  let {
16
- isRichEditor,
17
- className,
18
17
  readonly,
19
- editor
18
+ editor,
19
+ toggle
20
20
  } = _ref;
21
21
  // eslint-disable-next-line react-hooks/exhaustive-deps
22
22
  const isActive = (0, _react.useMemo)(() => (0, _helpers.isInCodeBlock)(editor), [editor.selection]);
23
23
  const onMousedown = (0, _react.useCallback)(e => {
24
24
  e.preventDefault();
25
25
  isActive ? (0, _helpers.unwrapCodeBlock)(editor) : (0, _helpers.transformToCodeBlock)(editor);
26
+ toggle && toggle();
26
27
  // eslint-disable-next-line react-hooks/exhaustive-deps
27
28
  }, [isActive]);
28
- return /*#__PURE__*/_react.default.createElement(_commons.MenuItem, Object.assign({
29
- type: _elementTypes.CODE_BLOCK,
30
- isRichEditor: isRichEditor,
31
- className: className,
32
- disabled: (0, _helpers.isMenuDisabled)(editor, readonly),
33
- isActive: isActive,
34
- onMouseDown: onMousedown
35
- }, menuConfig));
29
+ return /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
30
+ disabled: readonly,
31
+ menuConfig: menuConfig,
32
+ className: "pr-2",
33
+ onClick: onMousedown
34
+ });
36
35
  };
37
36
  var _default = exports.default = CodeBlockMenu;
@@ -1,35 +1,36 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
3
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 = ColumnMenu;
8
9
  var _react = _interopRequireWildcard(require("react"));
9
- var _commons = require("../../../commons");
10
10
  var _menusConfig = require("../../../constants/menus-config");
11
11
  var _elementTypes = require("../../../constants/element-types");
12
12
  var _helpers = require("../helpers");
13
+ var _dropdownMenuItem = _interopRequireDefault(require("../../../commons/dropdown-menu-item"));
13
14
  const menuConfig = _menusConfig.MENUS_CONFIG_MAP[_elementTypes.COLUMN];
14
15
  const isActive = editor => {
15
16
  return (0, _helpers.getColumnType)(editor) === _elementTypes.COLUMN;
16
17
  };
17
18
  function ColumnMenu(_ref) {
18
19
  let {
19
- isRichEditor,
20
- className,
21
20
  readonly,
22
- editor
21
+ editor,
22
+ toggle
23
23
  } = _ref;
24
- const onMousedown = (0, _react.useCallback)(event => {
24
+ const insertColumn = (0, _react.useCallback)(event => {
25
+ event.stopPropagation();
26
+ toggle && toggle();
25
27
  const active = isActive(editor);
26
28
  (0, _helpers.insertSeaTableColumn)(editor, active);
27
- }, [editor]);
28
- return /*#__PURE__*/_react.default.createElement(_commons.MenuItem, Object.assign({
29
- isRichEditor: isRichEditor,
30
- className: className,
31
- disabled: (0, _helpers.isMenuDisabled)(editor, readonly),
32
- isActive: isActive(editor),
33
- onMouseDown: onMousedown
34
- }, menuConfig));
29
+ }, [editor, toggle]);
30
+ return /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
31
+ disabled: readonly,
32
+ menuConfig: menuConfig,
33
+ className: "pr-2",
34
+ onClick: insertColumn
35
+ });
35
36
  }
@@ -8,10 +8,10 @@ exports.default = void 0;
8
8
  var _react = _interopRequireWildcard(require("react"));
9
9
  var _reactstrap = require("reactstrap");
10
10
  var _reactI18next = require("react-i18next");
11
+ var _constants = require("../../../../constants");
12
+ var _core = require("../../../core");
11
13
  var _components = require("../../../../components");
12
14
  var _helper = require("../helper");
13
- var _core = require("../../../core");
14
- var _constants = require("../../../../constants");
15
15
  const FormulaModal = _ref => {
16
16
  let {
17
17
  editor,
@@ -1,63 +1,34 @@
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;
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
- var _react = _interopRequireWildcard(require("react"));
8
+ var _react = _interopRequireDefault(require("react"));
10
9
  var _eventTypes = require("../../../../constants/event-types");
11
10
  var _menusConfig = require("../../../constants/menus-config");
12
11
  var _elementTypes = require("../../../constants/element-types");
13
- var _menuItem = _interopRequireDefault(require("../../../commons/menu/menu-item"));
14
- var _helper = require("../helper");
15
12
  var _eventBus = _interopRequireDefault(require("../../../../utils/event-bus"));
16
- var _formulaModal = _interopRequireDefault(require("./formula-modal"));
13
+ var _dropdownMenuItem = _interopRequireDefault(require("../../../commons/dropdown-menu-item"));
17
14
  const menuConfig = _menusConfig.MENUS_CONFIG_MAP[_elementTypes.FORMULA];
18
15
  const FormulaMenu = _ref => {
19
16
  let {
20
- isRichEditor,
21
- className,
22
17
  readonly,
23
- editor
18
+ toggle
24
19
  } = _ref;
25
- const [isOpenFormulaModal, setIsOpenFormulaModal] = (0, _react.useState)(false);
26
- const [formula, setFormula] = (0, _react.useState)('');
27
- // eslint-disable-next-line react-hooks/exhaustive-deps
28
- const isMenuActive = (0, _react.useMemo)(() => (0, _helper.isFormulaActive)(editor), [editor.selection]);
29
- (0, _react.useEffect)(() => {
20
+ const OpenFormulaModal = () => {
21
+ toggle && toggle();
30
22
  const eventBus = _eventBus.default.getInstance();
31
- const unsubscribe = eventBus.subscribe(_eventTypes.INTERNAL_EVENTS.ON_OPEN_FORMULA_DIALOG, handleOpenLinkModal);
32
- return () => unsubscribe();
33
- // eslint-disable-next-line react-hooks/exhaustive-deps
34
- }, []);
35
- const onMouseDown = (0, _react.useCallback)(() => {
36
- setIsOpenFormulaModal(true);
37
- }, []);
38
- const handleOpenLinkModal = (0, _react.useCallback)(formulaElement => {
39
- if (formulaElement) {
40
- const {
41
- formula
42
- } = formulaElement.data || {};
43
- setFormula(formula);
44
- setIsOpenFormulaModal(true);
45
- }
46
- }, []);
47
- const onCloseModal = (0, _react.useCallback)(() => {
48
- setIsOpenFormulaModal(false);
49
- setFormula('');
50
- }, []);
51
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_menuItem.default, Object.assign({
52
- isRichEditor: isRichEditor,
53
- className: className,
54
- disabled: (0, _helper.isMenuDisabled)(editor, readonly),
55
- isActive: isMenuActive,
56
- onMouseDown: onMouseDown
57
- }, menuConfig)), isOpenFormulaModal && /*#__PURE__*/_react.default.createElement(_formulaModal.default, {
58
- editor: editor,
59
- formula: formula,
60
- onCloseModal: onCloseModal
61
- }));
23
+ eventBus.dispatch(_eventTypes.INTERNAL_EVENTS.INSERT_ELEMENT, {
24
+ type: _elementTypes.FORMULA
25
+ });
26
+ };
27
+ return /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
28
+ disabled: readonly,
29
+ menuConfig: menuConfig,
30
+ className: "pr-2",
31
+ onClick: OpenFormulaModal
32
+ });
62
33
  };
63
34
  var _default = exports.default = FormulaMenu;
@@ -57,14 +57,14 @@
57
57
  }
58
58
 
59
59
  .sf-header-menu .sf-header-toggle .iconfont {
60
- color: #555;
60
+ color: #999;
61
61
  width: 12px;
62
62
  height: 24px;
63
63
  margin-left: 8px;
64
64
  display: inline-flex;
65
65
  justify-content: center;
66
66
  align-items: center;
67
- font-size: 12px;
67
+ font-size: 13px;
68
68
  cursor: pointer;
69
69
  }
70
70
 
@@ -16,7 +16,7 @@ var _constants = require("../../../../constants");
16
16
  const ImageMenuInsertInternetDialog = _ref => {
17
17
  let {
18
18
  editor,
19
- onToggleImageDialog,
19
+ closeDialog,
20
20
  className = ''
21
21
  } = _ref;
22
22
  const [imageUrl, setSetImageUrl] = (0, _react.useState)('');
@@ -37,7 +37,7 @@ const ImageMenuInsertInternetDialog = _ref => {
37
37
  if (!(0, _isUrl.default)(imageUrl)) return false;
38
38
  if (imageUrl.length === 0) return;
39
39
  (0, _helper.insertImage)(editor, imageUrl);
40
- onToggleImageDialog();
40
+ closeDialog();
41
41
  };
42
42
  const handleInputKeyDown = e => {
43
43
  if (e.key === 'Enter') {
@@ -51,13 +51,13 @@ const ImageMenuInsertInternetDialog = _ref => {
51
51
  return /*#__PURE__*/_react.default.createElement(_reactstrap.Modal, {
52
52
  onMouseDown: onModalContainerMouseDown,
53
53
  isOpen: true,
54
- toggle: onToggleImageDialog,
54
+ toggle: closeDialog,
55
55
  className: className,
56
56
  zIndex: 1071,
57
57
  onOpened: onModalOpened,
58
- onClosed: onToggleImageDialog
58
+ onClosed: closeDialog
59
59
  }, /*#__PURE__*/_react.default.createElement(_components.ModalHeader, {
60
- toggle: onToggleImageDialog
60
+ toggle: closeDialog
61
61
  }, t('Insert_image')), /*#__PURE__*/_react.default.createElement(_reactstrap.ModalBody, null, /*#__PURE__*/_react.default.createElement(_reactstrap.Form, null, /*#__PURE__*/_react.default.createElement(_reactstrap.FormGroup, null, /*#__PURE__*/_react.default.createElement(_reactstrap.Label, {
62
62
  for: "imageUrlInput"
63
63
  }, t('Image_address')), /*#__PURE__*/_react.default.createElement(_reactstrap.Input, {
@@ -70,7 +70,7 @@ const ImageMenuInsertInternetDialog = _ref => {
70
70
  onChange: e => setSetImageUrl(e.target.value.trim())
71
71
  }), /*#__PURE__*/_react.default.createElement(_reactstrap.FormFeedback, null, t('Image_address_invalid'))))), /*#__PURE__*/_react.default.createElement(_reactstrap.ModalFooter, null, /*#__PURE__*/_react.default.createElement(_reactstrap.Button, {
72
72
  color: "secondary",
73
- onClick: onToggleImageDialog
73
+ onClick: closeDialog
74
74
  }, t('Cancel')), /*#__PURE__*/_react.default.createElement(_reactstrap.Button, {
75
75
  color: "primary",
76
76
  disabled: isCommitBtnDisabled,
@@ -13,7 +13,7 @@ var _eventBus = _interopRequireDefault(require("../../../../utils/event-bus"));
13
13
  var _eventTypes = require("../../../../constants/event-types");
14
14
  var _helper = require("../helper");
15
15
  var _constants = require("../../../../constants");
16
- require("./style.css");
16
+ require("./image-menu-popover.css");
17
17
  const ImageMenuPopover = /*#__PURE__*/_react.default.forwardRef((_ref, ref) => {
18
18
  var _editor$api;
19
19
  let {
@@ -0,0 +1,36 @@
1
+ .sf-insert-image-menu-popover-container {
2
+ padding: 8px 0;
3
+ }
4
+
5
+ .sf-insert-video-menu-popover-container {
6
+ padding: 8px 0;
7
+ }
8
+
9
+ .sf-dropdown-menu .sf-dropdown-menu-container {
10
+ min-width: 12rem;
11
+ z-index: 1500;
12
+ }
13
+
14
+ .sf-sub-dropdown-menu .popover {
15
+ left: -8px !important;
16
+ z-index: 1070;
17
+ }
18
+
19
+ .sf-sub-dropdown-menu .bs-popover-auto[x-placement^="left"] {
20
+ left: 8px !important;
21
+ }
22
+
23
+ .sf-dropdown-menu .sf-dropdown-menu-item {
24
+ height: 30px;
25
+ width: 100%;
26
+ padding: 3px 12px;
27
+ user-select: none;
28
+ display: flex;
29
+ align-items: center;
30
+ }
31
+
32
+ .sf-sub-dropdown-menu:hover,
33
+ .sf-dropdown-menu .sf-dropdown-menu-item:hover {
34
+ background-color: rgb(245, 245, 245);
35
+ cursor: pointer;
36
+ }