@seafile/sdoc-editor 0.1.138 → 0.1.140

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 (61) hide show
  1. package/dist/assets/css/simple-viewer.css +6 -0
  2. package/dist/basic-sdk/assets/css/default.css +4 -0
  3. package/dist/basic-sdk/assets/css/dropdown-menu.css +47 -2
  4. package/dist/basic-sdk/comment/comment/comment-list.css +1 -1
  5. package/dist/basic-sdk/constants/index.js +2 -1
  6. package/dist/basic-sdk/editor.js +5 -2
  7. package/dist/basic-sdk/extension/commons/color-menu/index.js +1 -1
  8. package/dist/basic-sdk/extension/commons/dropdown-menu-item/index.css +4 -0
  9. package/dist/basic-sdk/extension/commons/dropdown-menu-item/index.js +38 -0
  10. package/dist/basic-sdk/extension/commons/insert-element-dialog/index.js +105 -0
  11. package/dist/basic-sdk/extension/constants/index.js +25 -16
  12. package/dist/basic-sdk/extension/plugins/code-block/helpers.js +53 -29
  13. package/dist/basic-sdk/extension/plugins/code-block/hover-menu/index.js +3 -4
  14. package/dist/basic-sdk/extension/plugins/code-block/menu/index.js +23 -66
  15. package/dist/basic-sdk/extension/plugins/image/dialogs/insert-web-image-dialog.js +56 -67
  16. package/dist/basic-sdk/extension/plugins/image/helpers.js +16 -3
  17. package/dist/basic-sdk/extension/plugins/image/menu/index.js +51 -150
  18. package/dist/basic-sdk/extension/plugins/image/plugin.js +2 -1
  19. package/dist/basic-sdk/extension/plugins/link/dialog/add-link-dialog/index.js +129 -0
  20. package/dist/basic-sdk/extension/plugins/link/helpers.js +31 -11
  21. package/dist/basic-sdk/extension/plugins/link/hover/index.js +38 -0
  22. package/dist/basic-sdk/extension/plugins/link/menu/index.js +26 -68
  23. package/dist/basic-sdk/extension/plugins/link/render-elem.js +17 -23
  24. package/dist/basic-sdk/extension/plugins/sdoc-link/{dialogs → dialog}/select-sdoc-file-dialog/index.js +4 -10
  25. package/dist/basic-sdk/extension/plugins/sdoc-link/hover-menu/index.css +0 -42
  26. package/dist/basic-sdk/extension/plugins/sdoc-link/hover-menu/index.js +10 -10
  27. package/dist/basic-sdk/extension/plugins/sdoc-link/menu/index.js +23 -82
  28. package/dist/basic-sdk/extension/plugins/sdoc-link/render-elem.js +10 -5
  29. package/dist/basic-sdk/extension/plugins/table/dialog/custom-table-size-dialog/index.js +87 -100
  30. package/dist/basic-sdk/extension/plugins/table/helpers.js +13 -3
  31. package/dist/basic-sdk/extension/plugins/table/menu/table-menu/index.js +32 -58
  32. package/dist/basic-sdk/extension/plugins/table/popover/table-size-popover/index.js +99 -135
  33. package/dist/basic-sdk/extension/plugins/text-style/render-elem.js +1 -1
  34. package/dist/basic-sdk/extension/toolbar/header-toolbar/index.js +4 -23
  35. package/dist/basic-sdk/extension/toolbar/header-toolbar/insert-toolbar/index.css +18 -0
  36. package/dist/basic-sdk/extension/toolbar/header-toolbar/insert-toolbar/index.js +94 -0
  37. package/dist/basic-sdk/extension/toolbar/side-toolbar/helpers.js +2 -67
  38. package/dist/basic-sdk/extension/toolbar/side-toolbar/index.js +4 -0
  39. package/dist/basic-sdk/extension/toolbar/side-toolbar/insert-below-menu.js +4 -7
  40. package/dist/basic-sdk/extension/toolbar/side-toolbar/insert-block-menu.js +70 -76
  41. package/dist/basic-sdk/extension/toolbar/side-toolbar/side-menu.css +0 -40
  42. package/dist/basic-sdk/extension/toolbar/side-toolbar/side-menu.js +43 -27
  43. package/dist/basic-sdk/extension/toolbar/side-toolbar/transform-menus.js +7 -10
  44. package/dist/basic-sdk/highlight-decorate/index.js +2 -1
  45. package/dist/basic-sdk/highlight-decorate/setNodeToDecorations.js +2 -1
  46. package/dist/pages/simple-viewer.js +21 -7
  47. package/package.json +1 -1
  48. package/public/media/sdoc-editor-font/iconfont.eot +0 -0
  49. package/public/media/sdoc-editor-font/iconfont.svg +2 -0
  50. package/public/media/sdoc-editor-font/iconfont.ttf +0 -0
  51. package/public/media/sdoc-editor-font/iconfont.woff +0 -0
  52. package/public/media/sdoc-editor-font/iconfont.woff2 +0 -0
  53. package/public/media/sdoc-editor-font.css +10 -6
  54. package/dist/basic-sdk/extension/plugins/image/menu/style.css +0 -43
  55. package/dist/basic-sdk/extension/plugins/link/menu/add-link-dialog.js +0 -151
  56. package/dist/basic-sdk/extension/plugins/link/menu/hover-link-dialog.js +0 -51
  57. package/dist/basic-sdk/extension/plugins/sdoc-link/menu/index.css +0 -54
  58. package/dist/basic-sdk/extension/toolbar/side-toolbar/side-menu-item.js +0 -35
  59. /package/dist/basic-sdk/extension/plugins/sdoc-link/{dialogs → dialog}/select-sdoc-file-dialog/index.css +0 -0
  60. /package/dist/basic-sdk/extension/plugins/sdoc-link/{dialogs → dialog}/select-sdoc-file-dialog/local-files/index.css +0 -0
  61. /package/dist/basic-sdk/extension/plugins/sdoc-link/{dialogs → dialog}/select-sdoc-file-dialog/local-files/index.js +0 -0
@@ -6,7 +6,7 @@ import slugid from 'slugid';
6
6
  import { Editor, Range, Transforms, Point, Node } from '@seafile/slate';
7
7
  import { ReactEditor } from '@seafile/slate-react';
8
8
  import { getNodeType, getParentNode, getSelectedNodeByType, isTextNode, getSelectedElems, focusEditor, getNode, findPath, replaceNodeChildren } from '../../core';
9
- import { ELEMENT_TYPE, KEYBOARD, CLIPBOARD_FORMAT_KEY } from '../../constants';
9
+ import { ELEMENT_TYPE, KEYBOARD, CLIPBOARD_FORMAT_KEY, INSERT_POSITION } from '../../constants';
10
10
  import { TABLE_MAX_ROWS, TABLE_MAX_COLUMNS, EMPTY_SELECTED_RANGE, TABLE_ROW_MIN_HEIGHT, TABLE_CELL_MIN_WIDTH, TABLE_ELEMENT, TABLE_ELEMENT_POSITION } from './constants';
11
11
  import EventBus from '../../../utils/event-bus';
12
12
  import { INTERNAL_EVENT, PAGE_EDIT_AREA_WIDTH } from '../../../constants';
@@ -93,10 +93,20 @@ export var generateEmptyTable = function generateEmptyTable(editor) {
93
93
  };
94
94
  };
95
95
  export var insertTable = function insertTable(editor, size, selection) {
96
+ var position = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : INSERT_POSITION.CURRENT;
96
97
  if (!size) return;
97
- if (isTableMenuDisabled(editor)) return;
98
+ if (position !== INSERT_POSITION.AFTER) {
99
+ if (isTableMenuDisabled(editor)) return;
100
+ }
98
101
  var tableNode = generateEmptyTable(editor, size);
99
- var path = Editor.path(editor, selection);
102
+ var validSelection = selection || editor.selection;
103
+ var path = Editor.path(editor, validSelection);
104
+ if (position === INSERT_POSITION.AFTER) {
105
+ Transforms.insertNodes(editor, tableNode, {
106
+ at: [path[0] + 1]
107
+ });
108
+ return;
109
+ }
100
110
  Transforms.insertNodes(editor, tableNode, {
101
111
  at: [path[0]]
102
112
  });
@@ -1,62 +1,36 @@
1
- import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
2
- import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
3
- import _createClass from "@babel/runtime/helpers/esm/createClass";
4
- import _inherits from "@babel/runtime/helpers/esm/inherits";
5
- import _createSuper from "@babel/runtime/helpers/esm/createSuper";
6
- import React from 'react';
1
+ import React, { useCallback } from 'react';
7
2
  import { withTranslation } from 'react-i18next';
8
3
  import { insertTable, isTableMenuDisabled } from '../../helpers';
9
- import { TABLE, MENUS_CONFIG_MAP } from '../../../../constants';
10
- import { MenuItem } from '../../../../commons';
4
+ import { MENUS_CONFIG_MAP, ELEMENT_TYPE, INSERT_POSITION } from '../../../../constants';
11
5
  import TableSizePopover from '../../popover/table-size-popover';
12
- var TableMenu = /*#__PURE__*/function (_React$Component) {
13
- _inherits(TableMenu, _React$Component);
14
- var _super = _createSuper(TableMenu);
15
- function TableMenu() {
16
- var _this;
17
- _classCallCheck(this, TableMenu);
18
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
19
- args[_key] = arguments[_key];
20
- }
21
- _this = _super.call.apply(_super, [this].concat(args));
22
- _this.isActive = function () {
23
- return false;
24
- };
25
- _this.isDisabled = function () {
26
- var _this$props = _this.props,
27
- editor = _this$props.editor,
28
- readonly = _this$props.readonly;
29
- return isTableMenuDisabled(editor, readonly);
30
- };
31
- _this.createTable = function (size) {
32
- var editor = _this.props.editor;
33
- insertTable(editor, size, editor.selection);
34
- };
35
- return _this;
36
- }
37
- _createClass(TableMenu, [{
38
- key: "render",
39
- value: function render() {
40
- var _this$props2 = this.props,
41
- isRichEditor = _this$props2.isRichEditor,
42
- className = _this$props2.className;
43
- var menuConfig = MENUS_CONFIG_MAP[TABLE];
44
- var props = _objectSpread(_objectSpread({
45
- isRichEditor: isRichEditor,
46
- className: className
47
- }, menuConfig), {}, {
48
- disabled: this.isDisabled(),
49
- isActive: this.isActive(),
50
- onMouseDown: function onMouseDown() {}
51
- });
52
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
53
- className: "table-menu"
54
- }, /*#__PURE__*/React.createElement(MenuItem, props)), /*#__PURE__*/React.createElement(TableSizePopover, {
55
- target: menuConfig.id,
56
- createTable: this.createTable
57
- }));
58
- }
59
- }]);
60
- return TableMenu;
61
- }(React.Component);
6
+ import ElementDropdownMenuItem from '../../../../commons/dropdown-menu-item';
7
+ import { INTERNAL_EVENT } from '../../../../../constants';
8
+ var TableMenu = function TableMenu(_ref) {
9
+ var editor = _ref.editor,
10
+ readonly = _ref.readonly,
11
+ eventBus = _ref.eventBus;
12
+ var disabled = isTableMenuDisabled(editor, readonly);
13
+ var menuConfig = MENUS_CONFIG_MAP[ELEMENT_TYPE.TABLE];
14
+ var createTable = useCallback(function (size) {
15
+ insertTable(editor, size, editor.selection, INSERT_POSITION.CURRENT);
16
+ }, [editor]);
17
+ var openDialog = useCallback(function () {
18
+ eventBus.dispatch(INTERNAL_EVENT.INSERT_ELEMENT, {
19
+ type: ELEMENT_TYPE.TABLE
20
+ });
21
+ }, [eventBus]);
22
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ElementDropdownMenuItem, {
23
+ disabled: disabled,
24
+ menuConfig: menuConfig,
25
+ className: "pr-2"
26
+ }, !disabled && /*#__PURE__*/React.createElement("i", {
27
+ className: "sdocfont sdoc-right-slide sdoc-dropdown-item-right-icon"
28
+ })), !disabled && /*#__PURE__*/React.createElement(TableSizePopover, {
29
+ target: menuConfig.id,
30
+ trigger: "hover",
31
+ placement: "right-start",
32
+ createTable: createTable,
33
+ openDialog: openDialog
34
+ }));
35
+ };
62
36
  export default withTranslation('sdoc-editor')(TableMenu);
@@ -1,142 +1,106 @@
1
- import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
2
- import _createClass from "@babel/runtime/helpers/esm/createClass";
3
- import _inherits from "@babel/runtime/helpers/esm/inherits";
4
- import _createSuper from "@babel/runtime/helpers/esm/createSuper";
5
- import React, { Component } from 'react';
1
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
+ import React, { useCallback, useRef, useState } from 'react';
6
3
  import classnames from 'classnames';
7
- import { withTranslation } from 'react-i18next';
4
+ import { useTranslation } from 'react-i18next';
8
5
  import { UncontrolledPopover } from 'reactstrap';
9
- import CustomTableSizeDialog from '../../dialog/custom-table-size-dialog';
10
6
  import './index.css';
11
- var TableSizePopover = /*#__PURE__*/function (_Component) {
12
- _inherits(TableSizePopover, _Component);
13
- var _super = _createSuper(TableSizePopover);
14
- function TableSizePopover(props) {
15
- var _this;
16
- _classCallCheck(this, TableSizePopover);
17
- _this = _super.call(this, props);
18
- _this.createTable = function () {
19
- var selectedSize = _this.state.selectedSize;
20
- _this.props.createTable(selectedSize);
21
- _this.ref && _this.ref.toggle();
22
- };
23
- _this.createCustomSizeTable = function () {
24
- var customSize = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [0, 0];
25
- _this.props.createTable(customSize);
26
- _this.closeCustomTableSizeDialog();
27
- };
28
- _this.onMouseEnter = function (event) {
29
- var cellPosition = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [1, 1];
30
- var displaySize = _this.state.displaySize;
31
- var cellPositionX = cellPosition[0];
32
- var cellPositionY = cellPosition[1];
33
- displaySize[0] = cellPositionX < _this.minSize[0] ? _this.minSize[0] : cellPositionX + 1;
34
- displaySize[1] = cellPositionY < _this.minSize[1] ? _this.minSize[1] : cellPositionY + 1;
35
- if (displaySize[0] > _this.maxSize[0]) {
36
- displaySize[0] = _this.maxSize[0];
37
- }
38
- if (displaySize[1] > _this.maxSize[1]) {
39
- displaySize[1] = _this.maxSize[1];
40
- }
41
- _this.setState({
42
- selectedSize: cellPosition,
43
- displaySize: displaySize
44
- });
45
- };
46
- _this.openCustomTableSizeDialog = function () {
47
- _this.setState({
48
- isShowCustomSizeDialog: true
49
- });
50
- _this.ref && _this.ref.toggle();
51
- };
52
- _this.closeCustomTableSizeDialog = function () {
53
- _this.setState({
54
- isShowCustomSizeDialog: false
55
- });
56
- };
57
- _this.setRef = function (ref) {
58
- _this.ref = ref;
59
- };
60
- _this.renderTableSize = function () {
61
- var _this$state = _this.state,
62
- displaySize = _this$state.displaySize,
63
- selectedSize = _this$state.selectedSize;
64
- var tableSize = [];
65
- var _loop = function _loop(i) {
66
- var children = [];
67
- var _loop2 = function _loop2(j) {
68
- var isSelectedChild = i <= selectedSize[0] && selectedSize[0] !== 0 && j <= selectedSize[1] && selectedSize[1] !== 0;
69
- var child = /*#__PURE__*/React.createElement("div", {
70
- key: "sdoc-table-size-cell-".concat(i, "-").concat(j),
71
- className: classnames('sdoc-table-size-cell', {
72
- 'active': isSelectedChild
73
- }),
74
- onClick: _this.createTable,
75
- onMouseEnter: function onMouseEnter(event) {
76
- return _this.onMouseEnter(event, [i, j]);
77
- }
78
- });
79
- children.push(child);
80
- };
81
- for (var j = 1; j <= displaySize[1]; j++) {
82
- _loop2(j);
83
- }
84
- tableSize.push( /*#__PURE__*/React.createElement("div", {
85
- key: "sdoc-table-size-row-".concat(i),
86
- className: "sdoc-table-size-row d-flex"
87
- }, children));
7
+ var TableSizePopover = function TableSizePopover(_ref) {
8
+ var target = _ref.target,
9
+ _ref$trigger = _ref.trigger,
10
+ trigger = _ref$trigger === void 0 ? 'legacy' : _ref$trigger,
11
+ _ref$placement = _ref.placement,
12
+ placement = _ref$placement === void 0 ? 'bottom-start' : _ref$placement,
13
+ popperClassName = _ref.popperClassName,
14
+ createTable = _ref.createTable,
15
+ openDialog = _ref.openDialog;
16
+ var minSize = [4, 4];
17
+ var maxSize = [10, 10];
18
+ var _useTranslation = useTranslation(),
19
+ t = _useTranslation.t;
20
+ var _useState = useState([4, 4]),
21
+ _useState2 = _slicedToArray(_useState, 2),
22
+ displaySize = _useState2[0],
23
+ setDisplaySize = _useState2[1];
24
+ var _useState3 = useState([0, 0]),
25
+ _useState4 = _slicedToArray(_useState3, 2),
26
+ selectedSize = _useState4[0],
27
+ setSelectedSize = _useState4[1];
28
+ var ref = useRef(null);
29
+ var _onMouseEnter = useCallback(function (event) {
30
+ var cellPosition = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [1, 1];
31
+ var newDisplaySize = displaySize.slice(0);
32
+ var cellPositionX = cellPosition[0];
33
+ var cellPositionY = cellPosition[1];
34
+ newDisplaySize[0] = cellPositionX < minSize[0] ? minSize[0] : cellPositionX + 1;
35
+ newDisplaySize[1] = cellPositionY < minSize[1] ? minSize[1] : cellPositionY + 1;
36
+ if (newDisplaySize[0] > maxSize[0]) {
37
+ newDisplaySize[0] = maxSize[0];
38
+ }
39
+ if (newDisplaySize[1] > maxSize[1]) {
40
+ newDisplaySize[1] = maxSize[1];
41
+ }
42
+ setDisplaySize(newDisplaySize);
43
+ setSelectedSize(cellPosition);
44
+
45
+ // eslint-disable-next-line react-hooks/exhaustive-deps
46
+ }, [displaySize, selectedSize, maxSize, minSize]);
47
+ var onCreateTable = useCallback(function () {
48
+ createTable(selectedSize);
49
+ ref && ref.current && ref.current.toggle();
50
+
51
+ // eslint-disable-next-line react-hooks/exhaustive-deps
52
+ }, [selectedSize, ref]);
53
+ var renderTableSize = useCallback(function () {
54
+ var tableSize = [];
55
+ var _loop = function _loop(i) {
56
+ var children = [];
57
+ var _loop2 = function _loop2(j) {
58
+ var isSelectedChild = i <= selectedSize[0] && selectedSize[0] !== 0 && j <= selectedSize[1] && selectedSize[1] !== 0;
59
+ var child = /*#__PURE__*/React.createElement("div", {
60
+ key: "sdoc-table-size-cell-".concat(i, "-").concat(j),
61
+ className: classnames('sdoc-table-size-cell', {
62
+ 'active': isSelectedChild
63
+ }),
64
+ onClick: onCreateTable,
65
+ onMouseEnter: function onMouseEnter(event) {
66
+ return _onMouseEnter(event, [i, j]);
67
+ }
68
+ });
69
+ children.push(child);
88
70
  };
89
- for (var i = 1; i <= displaySize[0]; i++) {
90
- _loop(i);
71
+ for (var j = 1; j <= displaySize[1]; j++) {
72
+ _loop2(j);
91
73
  }
92
- return tableSize;
93
- };
94
- _this.minSize = [4, 4];
95
- _this.maxSize = [10, 10];
96
- _this.state = {
97
- displaySize: [4, 4],
98
- selectedSize: [0, 0],
99
- isShowCustomSizeDialog: false
74
+ tableSize.push( /*#__PURE__*/React.createElement("div", {
75
+ key: "sdoc-table-size-row-".concat(i),
76
+ className: "sdoc-table-size-row d-flex"
77
+ }, children));
100
78
  };
101
- return _this;
102
- }
103
- _createClass(TableSizePopover, [{
104
- key: "render",
105
- value: function render() {
106
- var _this$state2 = this.state,
107
- selectedSize = _this$state2.selectedSize,
108
- isShowCustomSizeDialog = _this$state2.isShowCustomSizeDialog;
109
- var _this$props = this.props,
110
- _this$props$trigger = _this$props.trigger,
111
- trigger = _this$props$trigger === void 0 ? 'legacy' : _this$props$trigger,
112
- _this$props$placement = _this$props.placement,
113
- placement = _this$props$placement === void 0 ? 'bottom-start' : _this$props$placement,
114
- popperClassName = _this$props.popperClassName,
115
- t = _this$props.t;
116
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(UncontrolledPopover, {
117
- target: this.props.target,
118
- className: "sdoc-selected-table-size-popover",
119
- trigger: trigger,
120
- placement: placement,
121
- hideArrow: true,
122
- fade: false,
123
- ref: this.setRef,
124
- popperClassName: popperClassName
125
- }, /*#__PURE__*/React.createElement("div", {
126
- className: "sdoc-selected-table-size-container w-100 h-100 d-flex flex-column"
127
- }, /*#__PURE__*/React.createElement("div", {
128
- className: "sdoc-selected-table-size-tip w-100 "
129
- }, "".concat(selectedSize[0], " x ").concat(selectedSize[1])), /*#__PURE__*/React.createElement("div", {
130
- className: "sdoc-table-size-select"
131
- }, this.renderTableSize()), /*#__PURE__*/React.createElement("div", {
132
- className: "sdoc-selected-table-size-custom",
133
- onClick: this.openCustomTableSizeDialog
134
- }, t('Customize_the_number_of_rows_and_columns')))), isShowCustomSizeDialog && /*#__PURE__*/React.createElement(CustomTableSizeDialog, {
135
- toggle: this.closeCustomTableSizeDialog,
136
- submit: this.createCustomSizeTable
137
- }));
79
+ for (var i = 1; i <= displaySize[0]; i++) {
80
+ _loop(i);
138
81
  }
139
- }]);
140
- return TableSizePopover;
141
- }(Component);
142
- export default withTranslation('sdoc-editor')(TableSizePopover);
82
+ return tableSize;
83
+
84
+ // eslint-disable-next-line react-hooks/exhaustive-deps
85
+ }, [displaySize, selectedSize]);
86
+ return /*#__PURE__*/React.createElement(UncontrolledPopover, {
87
+ target: target,
88
+ className: "sdoc-selected-table-size-popover sdoc-sub-dropdown-menu",
89
+ trigger: trigger,
90
+ placement: placement,
91
+ hideArrow: true,
92
+ fade: false,
93
+ ref: ref,
94
+ popperClassName: popperClassName
95
+ }, /*#__PURE__*/React.createElement("div", {
96
+ className: "sdoc-selected-table-size-container w-100 h-100 d-flex flex-column"
97
+ }, /*#__PURE__*/React.createElement("div", {
98
+ className: "sdoc-selected-table-size-tip w-100 "
99
+ }, "".concat(selectedSize[0], " x ").concat(selectedSize[1])), /*#__PURE__*/React.createElement("div", {
100
+ className: "sdoc-table-size-select"
101
+ }, renderTableSize()), /*#__PURE__*/React.createElement("div", {
102
+ className: "sdoc-selected-table-size-custom",
103
+ onClick: openDialog
104
+ }, t('Customize_the_number_of_rows_and_columns'))));
105
+ };
106
+ export default TableSizePopover;
@@ -29,7 +29,7 @@ var renderText = function renderText(props, editor) {
29
29
  if (leaf['font-size']) {
30
30
  var fontSize = leaf['font-size'];
31
31
  if (typeof fontSize === 'number') {
32
- style['fontSize'] = "".concat(fontSize, "px");
32
+ style['fontSize'] = "".concat(fontSize, "pt");
33
33
  }
34
34
  }
35
35
  var font = leaf['font'] || DEFAULT_FONT;
@@ -3,19 +3,15 @@ import useSelectionUpdate from '../../../hooks/use-selection-update';
3
3
  import { ORDERED_LIST, UNORDERED_LIST } from '../../constants';
4
4
  import { MenuGroup } from '../../commons';
5
5
  import QuoteMenu from '../../plugins/blockquote/menu';
6
- import LinkMenu from '../../plugins/link/menu';
7
6
  import ListMenu from '../../plugins/list/menu';
8
- import ImageMenu from '../../plugins/image/menu';
9
7
  import HeaderMenu from '../../plugins/header/menu';
10
8
  import CheckListMenu from '../../plugins/check-list/menu';
11
9
  import TextStyleMenuList from '../../plugins/text-style/menu';
12
- import CodeBlockMenu from '../../plugins/code-block/menu';
13
10
  import TextAlignMenu from '../../plugins/text-align/menu';
14
- import { TableMenu, ActiveTableMenu } from '../../plugins/table/menu';
15
11
  import ClearFormatMenu from '../../plugins/clear-format/menu';
16
12
  import HistoryMenu from './redo-undo';
17
13
  import Font from '../../plugins/font/menu';
18
- import SdocLinkMenu from '../../plugins/sdoc-link/menu';
14
+ import InsertToolbar from './insert-toolbar';
19
15
  var Toolbar = function Toolbar(_ref) {
20
16
  var editor = _ref.editor,
21
17
  readonly = _ref.readonly;
@@ -28,6 +24,9 @@ var Toolbar = function Toolbar(_ref) {
28
24
  }), /*#__PURE__*/React.createElement(ClearFormatMenu, {
29
25
  editor: editor,
30
26
  readonly: readonly
27
+ })), /*#__PURE__*/React.createElement(MenuGroup, null, /*#__PURE__*/React.createElement(InsertToolbar, {
28
+ editor: editor,
29
+ readonly: readonly
31
30
  })), /*#__PURE__*/React.createElement(HeaderMenu, {
32
31
  editor: editor,
33
32
  readonly: readonly
@@ -54,24 +53,6 @@ var Toolbar = function Toolbar(_ref) {
54
53
  }), /*#__PURE__*/React.createElement(TextAlignMenu, {
55
54
  editor: editor,
56
55
  readonly: readonly
57
- })), /*#__PURE__*/React.createElement(MenuGroup, null, /*#__PURE__*/React.createElement(CodeBlockMenu, {
58
- editor: editor,
59
- readonly: readonly
60
- }), /*#__PURE__*/React.createElement(TableMenu, {
61
- editor: editor,
62
- readonly: readonly
63
- })), /*#__PURE__*/React.createElement(ActiveTableMenu, {
64
- editor: editor,
65
- readonly: readonly
66
- }), /*#__PURE__*/React.createElement(MenuGroup, null, /*#__PURE__*/React.createElement(ImageMenu, {
67
- editor: editor,
68
- readonly: readonly
69
- }), /*#__PURE__*/React.createElement(LinkMenu, {
70
- editor: editor,
71
- readonly: readonly
72
- })), /*#__PURE__*/React.createElement(MenuGroup, null, /*#__PURE__*/React.createElement(SdocLinkMenu, {
73
- editor: editor,
74
- readonly: readonly
75
56
  })));
76
57
  };
77
58
  Toolbar.defaultProps = {
@@ -0,0 +1,18 @@
1
+ .menu-group .menu-group-item.sdoc-insert-toolbar-btn {
2
+ width: 140px;
3
+ display: flex;
4
+ align-items: center;
5
+ justify-content: space-between;
6
+ }
7
+
8
+ .menu-group .sdoc-insert-toolbar-btn .sdoc-menu-with-dropdown-icon {
9
+ flex: 1;
10
+ justify-content: flex-start;
11
+ padding-left: 5px;
12
+ padding-right: 2px;
13
+ font-size: 14px;
14
+ }
15
+
16
+ .sdoc-insert-menu-popover .popover {
17
+ min-width: 200px;
18
+ }
@@ -0,0 +1,94 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
+ import React, { useState, useRef, useCallback, useMemo } from 'react';
3
+ import { useTranslation } from 'react-i18next';
4
+ import { UncontrolledPopover } from 'reactstrap';
5
+ import classnames from 'classnames';
6
+ import ImageMenu from '../../../plugins/image/menu';
7
+ import TableMenu from '../../../plugins/table/menu/table-menu';
8
+ import LinkMenu from '../../../plugins/link/menu';
9
+ import CodeBlockMenu from '../../../plugins/code-block/menu';
10
+ import SdocLinkMenu from '../../../plugins/sdoc-link/menu';
11
+ import EventBus from '../../../../utils/event-bus';
12
+ import './index.css';
13
+ var InsertToolbar = function InsertToolbar(_ref) {
14
+ var isRichEditor = _ref.isRichEditor,
15
+ className = _ref.className,
16
+ editor = _ref.editor,
17
+ readonly = _ref.readonly;
18
+ var _useState = useState(false),
19
+ _useState2 = _slicedToArray(_useState, 2),
20
+ isShowMenu = _useState2[0],
21
+ setMenuShow = _useState2[1];
22
+ var _useTranslation = useTranslation(),
23
+ t = _useTranslation.t;
24
+ var popoverRef = useRef(null);
25
+ var disabled = readonly;
26
+ var insertButtonRef = useRef(null);
27
+ var insertToolbarId = 'sdoc-insert-toolbar-btn';
28
+ var eventBus = useMemo(function () {
29
+ return EventBus.getInstance();
30
+ }, []);
31
+ var toggle = useCallback(function (event) {
32
+ popoverRef.current && popoverRef.current.toggle();
33
+ setMenuShow(!isShowMenu);
34
+
35
+ // eslint-disable-next-line react-hooks/exhaustive-deps
36
+ }, [isShowMenu]);
37
+ var validClassName = classnames(className, 'sdoc-menu-with-dropdown sdoc-insert-toolbar-btn', {
38
+ 'menu-show': isShowMenu,
39
+ 'disabled': disabled,
40
+ 'rich-icon-btn d-flex': isRichEditor,
41
+ 'rich-icon-btn-disabled': isRichEditor && disabled,
42
+ 'rich-icon-btn-hover': isRichEditor && !disabled,
43
+ 'btn btn-icon btn-secondary btn-active d-flex': !isRichEditor
44
+ });
45
+ var caretIconClass = "sdoc-menu-with-dropdown-triangle-icon sdocfont sdoc-".concat(isShowMenu ? 'caret-up' : 'drop-down');
46
+ var _ref2 = insertButtonRef.current ? insertButtonRef.current.getBoundingClientRect() : {
47
+ bottom: 92.5
48
+ },
49
+ bottom = _ref2.bottom;
50
+ var props = {
51
+ eventBus: eventBus,
52
+ editor: editor,
53
+ readonly: readonly,
54
+ toggle: toggle
55
+ };
56
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("button", {
57
+ type: "button",
58
+ className: validClassName,
59
+ id: insertToolbarId,
60
+ disabled: disabled,
61
+ ref: insertButtonRef
62
+ }, /*#__PURE__*/React.createElement("div", {
63
+ className: "sdoc-menu-with-dropdown-icon"
64
+ }, /*#__PURE__*/React.createElement("i", {
65
+ className: "sdocfont sdoc-insert mr-1"
66
+ }), /*#__PURE__*/React.createElement("span", {
67
+ className: "text-truncate"
68
+ }, t('Insert'))), !disabled && /*#__PURE__*/React.createElement("div", {
69
+ className: "sdoc-menu-with-dropdown-triangle"
70
+ }, /*#__PURE__*/React.createElement("span", {
71
+ className: caretIconClass
72
+ }))), !disabled && /*#__PURE__*/React.createElement(UncontrolledPopover, {
73
+ target: insertToolbarId,
74
+ className: "sdoc-menu-popover sdoc-dropdown-menu sdoc-insert-menu-popover",
75
+ trigger: "legacy",
76
+ placement: "bottom-start",
77
+ hideArrow: true,
78
+ toggle: toggle,
79
+ fade: false,
80
+ ref: popoverRef
81
+ }, /*#__PURE__*/React.createElement("div", {
82
+ className: "sdoc-insert-menu-container sdoc-dropdown-menu-container",
83
+ style: {
84
+ maxHeight: window.innerHeight - bottom - 100
85
+ }
86
+ }, /*#__PURE__*/React.createElement(ImageMenu, props), /*#__PURE__*/React.createElement(TableMenu, props), /*#__PURE__*/React.createElement(LinkMenu, props), /*#__PURE__*/React.createElement(CodeBlockMenu, props), /*#__PURE__*/React.createElement("div", {
87
+ className: "sdoc-dropdown-menu-divider"
88
+ }), /*#__PURE__*/React.createElement(SdocLinkMenu, props))));
89
+ };
90
+ InsertToolbar.defaultProps = {
91
+ isRichEditor: true,
92
+ className: 'menu-group-item'
93
+ };
94
+ export default InsertToolbar;
@@ -1,13 +1,8 @@
1
- import { Transforms, Editor } from '@seafile/slate';
1
+ import { Transforms } from '@seafile/slate';
2
2
  import { ReactEditor } from '@seafile/slate-react';
3
3
  import copy from 'copy-to-clipboard';
4
- import slugid from 'slugid';
5
4
  import { toggleList } from '../../plugins/list/transforms';
6
- import { generateImageNode } from '../../plugins/image/helpers';
7
- import { generateEmptyTable } from '../../plugins/table/helpers';
8
- import { genLinkNode } from '../../plugins/link/helpers';
9
- import { generateEmptyElement } from '../../core';
10
- import { ORDERED_LIST, UNORDERED_LIST, PARAGRAPH, CHECK_LIST_ITEM, CODE_BLOCK, CODE_LINE } from '../../constants';
5
+ import { ORDERED_LIST, UNORDERED_LIST, PARAGRAPH, CHECK_LIST_ITEM } from '../../constants';
11
6
  export var onSetNodeType = function onSetNodeType(editor, element, type) {
12
7
  if (!type) return;
13
8
  if ([ORDERED_LIST, UNORDERED_LIST].includes(type)) {
@@ -54,66 +49,6 @@ export var onDeleteNode = function onDeleteNode(editor, element) {
54
49
  at: path
55
50
  });
56
51
  };
57
- export var insertBelowImage = function insertBelowImage(editor, src, selection) {
58
- if (!src) return;
59
- var p = generateEmptyElement(PARAGRAPH);
60
- var imageNode = generateImageNode(src);
61
- p.children[0] = imageNode;
62
- var path = Editor.path(editor, selection);
63
- Transforms.insertNodes(editor, p, {
64
- at: [path[0] + 1]
65
- });
66
- };
67
- export var insertBelowCodeBlock = function insertBelowCodeBlock(editor, language) {
68
- var newCodeBlockNode = {
69
- id: slugid.nice(),
70
- type: CODE_BLOCK,
71
- language: language,
72
- style: {
73
- white_space: 'nowrap' // default nowrap
74
- },
75
-
76
- children: [{
77
- id: slugid.nice(),
78
- type: CODE_LINE,
79
- children: [{
80
- text: '',
81
- id: slugid.nice()
82
- }]
83
- }]
84
- };
85
- var path = Editor.path(editor, editor.selection);
86
- Transforms.insertNodes(editor, newCodeBlockNode, {
87
- mode: 'highest',
88
- at: [path[0] + 1]
89
- });
90
- };
91
- export var insertBelowTable = function insertBelowTable(editor, size, selection) {
92
- if (!size) return;
93
- var tableNode = generateEmptyTable(editor, size);
94
- var path = Editor.path(editor, selection);
95
- Transforms.insertNodes(editor, tableNode, {
96
- at: [path[0] + 1]
97
- });
98
- };
99
- export var insertBelowLink = function insertBelowLink(editor, title, url) {
100
- if (!title || !url) return;
101
- var p = generateEmptyElement(PARAGRAPH);
102
- var linkNode = genLinkNode(url, title);
103
- p.children[0] = {
104
- id: slugid.nice(),
105
- text: ' '
106
- };
107
- p.children[1] = linkNode;
108
- p.children[2] = {
109
- id: slugid.nice(),
110
- text: ' '
111
- };
112
- var path = Editor.path(editor, editor.selection);
113
- Transforms.insertNodes(editor, p, {
114
- at: [path[0] + 1]
115
- });
116
- };
117
52
  export var getDomTopHeight = function getDomTopHeight(dom) {
118
53
  var HEADER_HEIGHT = 56 + 44;
119
54
  var rect = dom.getBoundingClientRect();
@@ -42,6 +42,8 @@ var SideToolbar = function SideToolbar() {
42
42
  setMenuPosition({});
43
43
  setSlateNode(null);
44
44
  setActive(false);
45
+
46
+ // eslint-disable-next-line react-hooks/exhaustive-deps
45
47
  }, []);
46
48
  useEffect(function () {
47
49
  var observerRefValue;
@@ -81,6 +83,8 @@ var SideToolbar = function SideToolbar() {
81
83
  var eventBus = EventBus.getInstance();
82
84
  var unSubscribeMouseEnter = eventBus.subscribe(INTERNAL_EVENT.ON_MOUSE_ENTER_BLOCK, handleMouseEnter);
83
85
  return unSubscribeMouseEnter;
86
+
87
+ // eslint-disable-next-line react-hooks/exhaustive-deps
84
88
  }, [editor, isShowSideMenu, scrollRef]);
85
89
  var onActiveToggle = useCallback(function () {
86
90
  if (isShowSideMenu) return;