@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
@@ -1,23 +1,20 @@
1
1
  import React from 'react';
2
2
  import { UncontrolledPopover } from 'reactstrap';
3
- import { insertBelowImage, insertBelowTable, insertBelowLink, insertBelowCodeBlock } from './helpers';
4
3
  import InsertBlockMenu from './insert-block-menu';
4
+ import { INSERT_POSITION } from '../../constants';
5
5
  var InsertBelowMenu = function InsertBelowMenu(_ref) {
6
6
  var target = _ref.target;
7
7
  return /*#__PURE__*/React.createElement(UncontrolledPopover, {
8
8
  target: target,
9
- className: "sdoc-side-menu-insert-below-popover",
9
+ className: "sdoc-side-menu-insert-below-popover sdoc-sub-dropdown-menu sdoc-dropdown-menu",
10
10
  trigger: "hover",
11
11
  placement: "right-start",
12
12
  hideArrow: true,
13
13
  fade: false
14
14
  }, /*#__PURE__*/React.createElement("div", {
15
- className: "sdoc-side-inner-menu"
15
+ className: "sdoc-dropdown-menu-container"
16
16
  }, /*#__PURE__*/React.createElement(InsertBlockMenu, {
17
- insertImage: insertBelowImage,
18
- insertTable: insertBelowTable,
19
- insertLink: insertBelowLink,
20
- insertCodeBlock: insertBelowCodeBlock
17
+ insertPosition: INSERT_POSITION.AFTER
21
18
  })));
22
19
  };
23
20
  export default InsertBelowMenu;
@@ -1,95 +1,89 @@
1
- import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
- import React, { useRef, useCallback, useState } from 'react';
3
- import { withTranslation } from 'react-i18next';
4
- import { Transforms } from '@seafile/slate';
1
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
2
+ import React, { useCallback } from 'react';
5
3
  import { useSlateStatic } from '@seafile/slate-react';
6
- import context from '../../../../context';
7
- import AddLinkDialog from '../../plugins/link/menu/add-link-dialog';
8
- import { insertImage } from '../../plugins/image/helpers';
4
+ import { Transforms } from '@seafile/slate';
9
5
  import { insertTable } from '../../plugins/table/helpers';
10
- import SideMenuItem from './side-menu-item';
11
6
  import TableSizePopover from '../../plugins/table/popover/table-size-popover';
12
7
  import { changeToCodeBlock } from '../../plugins/code-block/helpers';
8
+ import { ELEMENT_TYPE, INSERT_POSITION, INSERT_IMAGE_TYPE, MENUS_CONFIG_MAP } from '../../constants';
9
+ import EventBus from '../../../utils/event-bus';
10
+ import { INTERNAL_EVENT } from '../../../constants';
11
+ import DropdownMenuItem from '../../commons/dropdown-menu-item';
13
12
  var InsertBlockMenu = function InsertBlockMenu(_ref) {
14
- var propsInsertImage = _ref.insertImage,
15
- propsInsertLink = _ref.insertLink,
16
- propsInsertTable = _ref.insertTable,
17
- propsInsertCodeBlock = _ref.insertCodeBlock,
18
- t = _ref.t;
19
- var inputRef = useRef(null);
13
+ var insertPosition = _ref.insertPosition;
20
14
  var editor = useSlateStatic();
21
- var _useState = useState(false),
22
- _useState2 = _slicedToArray(_useState, 2),
23
- isShowLinkDialog = _useState2[0],
24
- setShowLinkDialog = _useState2[1];
25
15
  var onInsertImageToggle = useCallback(function () {
26
- if (propsInsertImage) {
27
- inputRef.current.click();
28
- return;
16
+ var eventBus = EventBus.getInstance();
17
+ if (insertPosition === INSERT_POSITION.CURRENT) {
18
+ Transforms.select(editor, editor.selection.focus);
29
19
  }
30
- Transforms.select(editor, editor.selection.focus);
31
- inputRef.current.click();
32
- }, [editor, propsInsertImage]);
33
- var onFileChanged = useCallback(function (event) {
34
- var file = event.target.files[0];
35
- context.uploadLocalImage(file).then(function (fileUrl) {
36
- if (propsInsertImage) {
37
- propsInsertImage(editor, fileUrl, editor.selection);
38
- } else {
39
- insertImage(editor, fileUrl, editor.selection);
40
- }
20
+ eventBus.dispatch(INTERNAL_EVENT.INSERT_ELEMENT, {
21
+ type: INSERT_IMAGE_TYPE.LOCAL_IMAGE,
22
+ insertPosition: insertPosition
41
23
  });
42
- }, [editor, propsInsertImage]);
24
+
25
+ // eslint-disable-next-line react-hooks/exhaustive-deps
26
+ }, [editor, insertPosition]);
43
27
  var createTable = useCallback(function (size) {
44
- if (propsInsertTable) {
45
- propsInsertTable(editor, size, editor.selection);
46
- } else {
47
- insertTable(editor, size, editor.selection);
48
- }
49
- }, [editor, propsInsertTable]);
50
- var onLinkDialogToggle = useCallback(function () {
51
- setShowLinkDialog(!isShowLinkDialog);
52
- }, [isShowLinkDialog]);
28
+ insertTable(editor, size, editor.selection, insertPosition);
29
+
30
+ // eslint-disable-next-line react-hooks/exhaustive-deps
31
+ }, [editor, insertPosition]);
32
+ var openLinkDialog = useCallback(function () {
33
+ var eventBus = EventBus.getInstance();
34
+ eventBus.dispatch(INTERNAL_EVENT.INSERT_ELEMENT, {
35
+ type: ELEMENT_TYPE.LINK,
36
+ insertPosition: insertPosition
37
+ });
38
+
39
+ // eslint-disable-next-line react-hooks/exhaustive-deps
40
+ }, [insertPosition]);
53
41
  var onInsertCodeBlock = useCallback(function () {
54
- if (propsInsertCodeBlock) {
55
- propsInsertCodeBlock(editor, 'plaintext');
56
- } else {
57
- changeToCodeBlock(editor, 'plaintext');
58
- }
59
- }, [editor, propsInsertCodeBlock]);
60
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SideMenuItem, {
61
- iconClass: "sdocfont sdoc-image",
62
- iconName: t('Image'),
42
+ changeToCodeBlock(editor, 'plaintext', insertPosition);
43
+
44
+ // eslint-disable-next-line react-hooks/exhaustive-deps
45
+ }, [editor, insertPosition]);
46
+ var openTableDialog = useCallback(function () {
47
+ var eventBus = EventBus.getInstance();
48
+ eventBus.dispatch(INTERNAL_EVENT.INSERT_ELEMENT, {
49
+ type: ELEMENT_TYPE.TABLE,
50
+ insertPosition: insertPosition
51
+ });
52
+
53
+ // eslint-disable-next-line react-hooks/exhaustive-deps
54
+ }, [insertPosition]);
55
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(DropdownMenuItem, {
56
+ menuConfig: _objectSpread(_objectSpread({}, MENUS_CONFIG_MAP[ELEMENT_TYPE.IMAGE]), {}, {
57
+ id: ''
58
+ }),
63
59
  onClick: onInsertImageToggle
64
- }, /*#__PURE__*/React.createElement("input", {
65
- ref: inputRef,
66
- type: "file",
67
- accept: "image/*",
68
- className: "sdoc-upload-locale-image",
69
- onChange: onFileChanged
70
- })), /*#__PURE__*/React.createElement(SideMenuItem, {
71
- menuId: "sdoc-side-menu-item-table",
72
- iconClass: "sdocfont sdoc-table",
73
- iconName: t('Table'),
74
- hasRight: true
75
- }, /*#__PURE__*/React.createElement(TableSizePopover, {
60
+ }), /*#__PURE__*/React.createElement(DropdownMenuItem, {
61
+ menuConfig: _objectSpread(_objectSpread({}, MENUS_CONFIG_MAP[ELEMENT_TYPE.TABLE]), {}, {
62
+ id: 'sdoc-side-menu-item-table'
63
+ }),
64
+ className: "pr-2"
65
+ }, /*#__PURE__*/React.createElement("i", {
66
+ className: "sdocfont sdoc-right-slide sdoc-dropdown-item-right-icon"
67
+ }), /*#__PURE__*/React.createElement(TableSizePopover, {
76
68
  target: "sdoc-side-menu-item-table",
77
69
  trigger: "hover",
78
70
  placement: "right-start",
79
71
  popperClassName: "sdoc-side-menu-table-size",
80
- createTable: createTable
81
- })), /*#__PURE__*/React.createElement(SideMenuItem, {
82
- iconClass: "sdocfont sdoc-link",
83
- iconName: t('Link'),
84
- onClick: onLinkDialogToggle
85
- }, isShowLinkDialog && /*#__PURE__*/React.createElement(AddLinkDialog, {
86
- editor: editor,
87
- insertLink: propsInsertLink,
88
- onLinkDialogToggle: onLinkDialogToggle
89
- })), /*#__PURE__*/React.createElement(SideMenuItem, {
90
- iconClass: "sdocfont sdoc-code-block",
91
- iconName: t('Code_block'),
72
+ createTable: createTable,
73
+ openDialog: openTableDialog
74
+ })), /*#__PURE__*/React.createElement(DropdownMenuItem, {
75
+ menuConfig: _objectSpread(_objectSpread({}, MENUS_CONFIG_MAP[ELEMENT_TYPE.LINK]), {}, {
76
+ id: ''
77
+ }),
78
+ onClick: openLinkDialog
79
+ }), /*#__PURE__*/React.createElement(DropdownMenuItem, {
80
+ menuConfig: _objectSpread(_objectSpread({}, MENUS_CONFIG_MAP[ELEMENT_TYPE.CODE_BLOCK]), {}, {
81
+ id: ''
82
+ }),
92
83
  onClick: onInsertCodeBlock
93
84
  }));
94
85
  };
95
- export default withTranslation('sdoc-editor')(InsertBlockMenu);
86
+ InsertBlockMenu.defaultProps = {
87
+ insertPosition: INSERT_POSITION.CURRENT
88
+ };
89
+ export default InsertBlockMenu;
@@ -14,41 +14,6 @@
14
14
  z-index: 999;
15
15
  }
16
16
 
17
- .sdoc-side-menu .sdoc-side-menu-item:nth-child(2),
18
- .sdoc-side-inner-menu .sdoc-side-menu-item:nth-child(2) {
19
- border-bottom: 1px solid var(--border-weak,rgba(0,0,0,.04));
20
- }
21
-
22
- .sdoc-side-menu .sdoc-side-menu-item,
23
- .sdoc-side-inner-menu .sdoc-side-menu-item {
24
- padding: 6px 16px;
25
- display: flex;
26
- justify-content: space-between;
27
- font-size: 12px;
28
- }
29
-
30
- .sdoc-side-menu .sdoc-upload-locale-image,
31
- .sdoc-side-inner-menu .sdoc-upload-locale-image {
32
- display: none;
33
- }
34
-
35
- .sdoc-side-menu .sdoc-side-menu-item:hover,
36
- .sdoc-side-inner-menu .sdoc-side-menu-item:hover {
37
- background-color: #F2F2F2;
38
- border-radius: 2px;
39
- }
40
-
41
- .sdoc-side-menu .sdoc-side-menu-item :nth-child(2),
42
- .sdoc-side-inner-menu .sdoc-side-menu-item :nth-child(2) {
43
- transform: scale(0.6);
44
- }
45
-
46
- .sdoc-side-menu .sdoc-side-menu-item :first-child,
47
- .sdoc-side-inner-menu .sdoc-side-menu-item :first-child {
48
- padding-right: 5px;
49
- font-size: 12px;
50
- }
51
-
52
17
  .sdoc-side-menu-insert-below-popover .popover {
53
18
  background-color: #fff;
54
19
  min-width: 150px;
@@ -57,8 +22,3 @@
57
22
  left: -6px !important;
58
23
  cursor: pointer;
59
24
  }
60
-
61
- .sdoc-side-operation-translate-popover .popover,
62
- .sdoc-selected-table-size-popover .sdoc-side-menu-table-size {
63
- left: -6px !important;
64
- }
@@ -1,15 +1,15 @@
1
1
  import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
- import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
2
+ import React, { useCallback, useEffect, useRef, useState } from 'react';
3
3
  import { withTranslation } from 'react-i18next';
4
4
  import { useSlateStatic } from '@seafile/slate-react';
5
5
  import EventBus from '../../../utils/event-bus';
6
6
  import { ElementPopover } from '../../commons';
7
7
  import InsertBelowMenu from './insert-below-menu';
8
8
  import InsertBlockMenu from './insert-block-menu';
9
- import SideMenuItem from './side-menu-item';
10
9
  import { onCopyNode, onDeleteNode } from './helpers';
11
- import './side-menu.css';
12
10
  import TransformMenus from './transform-menus';
11
+ import DropdownMenuItem from '../../commons/dropdown-menu-item';
12
+ import './side-menu.css';
13
13
  var SideMenu = function SideMenu(_ref) {
14
14
  var slateNode = _ref.slateNode,
15
15
  isNodeEmpty = _ref.isNodeEmpty,
@@ -56,35 +56,51 @@ var SideMenu = function SideMenu(_ref) {
56
56
  className: "sdoc-side-menu-popover",
57
57
  style: menuStyle
58
58
  }, /*#__PURE__*/React.createElement("div", {
59
- className: "sdoc-side-menu",
59
+ className: "sdoc-side-menu sdoc-dropdown-menu",
60
60
  ref: sideMenuRef
61
- }, /*#__PURE__*/React.createElement(SideMenuItem, {
62
- menuId: "sdoc-side-menu-item__transform",
63
- iconClass: "sdocfont sdoc-table-of-content",
64
- iconName: t('Transform_to'),
65
- hasRight: true
66
- }, /*#__PURE__*/React.createElement(TransformMenus, {
67
- target: "sdoc-side-menu-item__transform",
61
+ }, /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(DropdownMenuItem, {
62
+ menuConfig: {
63
+ id: 'sdoc-side-menu-item-transform',
64
+ text: 'Transform_to',
65
+ iconClass: 'sdocfont sdoc-table-of-content'
66
+ },
67
+ className: "pr-2"
68
+ }, /*#__PURE__*/React.createElement("i", {
69
+ className: "sdocfont sdoc-right-slide sdoc-dropdown-item-right-icon"
70
+ }), /*#__PURE__*/React.createElement(TransformMenus, {
71
+ target: "sdoc-side-menu-item-transform",
68
72
  slateNode: slateNode,
69
73
  onReset: onReset
70
- })), isNodeEmpty && /*#__PURE__*/React.createElement(InsertBlockMenu, null), !isNodeEmpty && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SideMenuItem, {
71
- menuId: "sdoc-side-menu-item__below",
72
- iconClass: "sdocfont sdoc-insert",
73
- iconName: t('Insert_below'),
74
- hasRight: true
75
- }, /*#__PURE__*/React.createElement(InsertBelowMenu, {
76
- target: "sdoc-side-menu-item__below"
77
- })), /*#__PURE__*/React.createElement(SideMenuItem, {
78
- iconClass: "sdocfont sdoc-copy",
79
- iconName: t('Copy'),
74
+ }))), isNodeEmpty && /*#__PURE__*/React.createElement(InsertBlockMenu, null), !isNodeEmpty && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(DropdownMenuItem, {
75
+ menuConfig: {
76
+ id: 'sdoc-side-menu-item-insert-below',
77
+ text: 'Insert_below',
78
+ iconClass: 'sdocfont sdoc-insert'
79
+ },
80
+ className: "pr-2"
81
+ }, /*#__PURE__*/React.createElement("i", {
82
+ className: "sdocfont sdoc-right-slide sdoc-dropdown-item-right-icon"
83
+ }), /*#__PURE__*/React.createElement(InsertBelowMenu, {
84
+ target: "sdoc-side-menu-item-insert-below"
85
+ })), /*#__PURE__*/React.createElement("div", {
86
+ className: "sdoc-dropdown-menu-divider"
87
+ }), /*#__PURE__*/React.createElement(DropdownMenuItem, {
88
+ menuConfig: {
89
+ text: 'Copy',
90
+ iconClass: 'sdocfont sdoc-copy'
91
+ },
80
92
  onClick: onCopy
81
- }), /*#__PURE__*/React.createElement(SideMenuItem, {
82
- iconClass: "sdocfont sdoc-cut",
83
- iconName: t('Cut'),
93
+ }), /*#__PURE__*/React.createElement(DropdownMenuItem, {
94
+ menuConfig: {
95
+ text: 'Cut',
96
+ iconClass: 'sdocfont sdoc-cut'
97
+ },
84
98
  onClick: onCut
85
- }), /*#__PURE__*/React.createElement(SideMenuItem, {
86
- iconClass: "sdocfont sdoc-delete",
87
- iconName: t('Delete'),
99
+ }), /*#__PURE__*/React.createElement(DropdownMenuItem, {
100
+ menuConfig: {
101
+ text: 'Delete',
102
+ iconClass: 'sdocfont sdoc-delete'
103
+ },
88
104
  onClick: onDelete
89
105
  }))));
90
106
  };
@@ -4,6 +4,7 @@ import { withTranslation } from 'react-i18next';
4
4
  import { useSlateStatic } from '@seafile/slate-react';
5
5
  import { onSetNodeType } from './helpers';
6
6
  import { SIDE_MENUS_CONFIG } from '../../constants';
7
+ import DropdownMenuItem from '../../commons/dropdown-menu-item';
7
8
  var TransformMenus = function TransformMenus(_ref) {
8
9
  var target = _ref.target,
9
10
  slateNode = _ref.slateNode,
@@ -17,25 +18,21 @@ var TransformMenus = function TransformMenus(_ref) {
17
18
  }, []);
18
19
  return /*#__PURE__*/React.createElement(UncontrolledPopover, {
19
20
  target: target,
20
- className: "sdoc-side-operation-translate-popover",
21
+ className: "sdoc-side-operation-translate-popover sdoc-sub-dropdown-menu sdoc-dropdown-menu",
21
22
  trigger: "hover",
22
23
  placement: "right-start",
23
24
  hideArrow: true,
24
25
  fade: false
25
26
  }, /*#__PURE__*/React.createElement("div", {
26
- className: "sdoc-side-inner-menu"
27
+ className: "sdoc-dropdown-menu-container"
27
28
  }, SIDE_MENUS_CONFIG.map(function (item) {
28
- return /*#__PURE__*/React.createElement("div", {
29
+ return /*#__PURE__*/React.createElement(DropdownMenuItem, {
29
30
  key: item.id,
30
- className: "sdoc-side-menu-item",
31
+ menuConfig: item,
31
32
  onClick: function onClick() {
32
- onSetType(item.type);
33
+ return onSetType(item.type);
33
34
  }
34
- }, /*#__PURE__*/React.createElement("span", {
35
- className: "sdoc-side-menu-item__left"
36
- }, /*#__PURE__*/React.createElement("span", {
37
- className: item.iconClass
38
- }), /*#__PURE__*/React.createElement("span", null, t(item.title))));
35
+ });
39
36
  })));
40
37
  };
41
38
  export default withTranslation('sdoc-editor')(TransformMenus);
@@ -8,7 +8,8 @@ export var highlightDecorate = function highlightDecorate(editor) {
8
8
  path = _ref2[1];
9
9
  var ranges = [];
10
10
  if (Element.isElement(node) && node.type === CODE_LINE) {
11
- ranges = (editor === null || editor === void 0 ? void 0 : editor.nodeToDecorations.get(node)) || [];
11
+ var _editor$nodeToDecorat;
12
+ ranges = (editor === null || editor === void 0 ? void 0 : (_editor$nodeToDecorat = editor.nodeToDecorations) === null || _editor$nodeToDecorat === void 0 ? void 0 : _editor$nodeToDecorat.get(node)) || [];
12
13
  return ranges;
13
14
  }
14
15
  return ranges;
@@ -6,6 +6,7 @@ import { Node, Element, Editor } from '@seafile/slate';
6
6
  import { useSlateStatic } from '@seafile/slate-react';
7
7
  import Prism, { normalizeTokens, normalizeTokensByLanguageType } from '../extension/plugins/code-block/prismjs';
8
8
  import { CODE_BLOCK } from '../extension/constants';
9
+ import { getValidLang } from '../extension/plugins/code-block/helpers';
9
10
  var mergeMaps = function mergeMaps() {
10
11
  var map = new Map();
11
12
  for (var _len = arguments.length, maps = new Array(_len), _key = 0; _key < _len; _key++) {
@@ -36,7 +37,7 @@ var getChildNodeToDecorations = function getChildNodeToDecorations(_ref) {
36
37
  var text = block.children.map(function (line) {
37
38
  return Node.string(line);
38
39
  }).join('\n');
39
- var language = block.language || 'plaintext'; // default 'plaintext'
40
+ var language = getValidLang(block.language);
40
41
  var tokens = Prism.tokenize(text, Prism.languages[language]);
41
42
  if (Object.keys(normalizeTokensByLanguageType).includes(language)) {
42
43
  tokens = normalizeTokensByLanguageType[language](tokens);
@@ -12,6 +12,7 @@ import Loading from '../components/loading';
12
12
  import Layout, { Header, Content } from '../layout';
13
13
  import { generateDefaultDocContent } from '../utils';
14
14
  import ErrorBoundary from './error-boundary';
15
+ import '../assets/css/simple-viewer.css';
15
16
  var SimpleViewer = /*#__PURE__*/function (_React$Component) {
16
17
  _inherits(SimpleViewer, _React$Component);
17
18
  var _super = _createSuper(SimpleViewer);
@@ -19,10 +20,6 @@ var SimpleViewer = /*#__PURE__*/function (_React$Component) {
19
20
  var _this;
20
21
  _classCallCheck(this, SimpleViewer);
21
22
  _this = _super.call(this, props);
22
- _this.onValueChanged = function (value) {
23
- _this.isValueChanged = true;
24
- _this.value = value;
25
- };
26
23
  _this.state = {
27
24
  isContextInit: false,
28
25
  errorMessage: null,
@@ -95,10 +92,27 @@ var SimpleViewer = /*#__PURE__*/function (_React$Component) {
95
92
  className: "d-flex justify-content-center"
96
93
  }, t(errorMessage));
97
94
  }
98
- var docName = context.getSetting('docName');
99
- return /*#__PURE__*/React.createElement(ErrorBoundary, null, /*#__PURE__*/React.createElement(Layout, null, /*#__PURE__*/React.createElement(Header, null, /*#__PURE__*/React.createElement("div", null, docName)), /*#__PURE__*/React.createElement(Content, null, /*#__PURE__*/React.createElement(SDocViewer, {
95
+ var _context$getSettings = context.getSettings(),
96
+ docName = _context$getSettings.docName,
97
+ sharePermissionText = _context$getSettings.sharePermissionText,
98
+ downloadURL = _context$getSettings.downloadURL;
99
+ return /*#__PURE__*/React.createElement(ErrorBoundary, null, /*#__PURE__*/React.createElement(Layout, null, /*#__PURE__*/React.createElement(Header, null, /*#__PURE__*/React.createElement("div", {
100
+ className: "doc-info"
101
+ }, /*#__PURE__*/React.createElement("h2", {
102
+ className: "doc-name my-0"
103
+ }, docName), sharePermissionText && /*#__PURE__*/React.createElement("span", {
104
+ className: "sdoc-share-permission ml-2"
105
+ }, sharePermissionText)), /*#__PURE__*/React.createElement("div", {
106
+ className: "doc-ops"
107
+ }, downloadURL && /*#__PURE__*/React.createElement("a", {
108
+ href: downloadURL,
109
+ className: "op-item"
110
+ }, /*#__PURE__*/React.createElement("i", {
111
+ className: "sdocfont sdoc-download"
112
+ })))), /*#__PURE__*/React.createElement(Content, null, /*#__PURE__*/React.createElement(SDocViewer, {
100
113
  document: document,
101
- onValueChanged: this.onValueChanged
114
+ showToolbar: true,
115
+ showOutline: true
102
116
  }))));
103
117
  }
104
118
  }]);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/sdoc-editor",
3
- "version": "0.1.138",
3
+ "version": "0.1.140",
4
4
  "private": false,
5
5
  "description": "This is a sdoc editor",
6
6
  "main": "dist/index.js",
@@ -14,6 +14,8 @@
14
14
  />
15
15
  <missing-glyph />
16
16
 
17
+ <glyph glyph-name="sdoc-download" unicode="&#58962;" d="M582.4 326.4V793.6c0 41.6-32 70.4-70.4 70.4s-70.4-28.8-70.4-70.4v-467.2l-172.8 172.8c-25.6 25.6-70.4 25.6-96-3.2-25.6-25.6-25.6-70.4 0-96l291.2-291.2c25.6-25.6 70.4-25.6 96 0l291.2 291.2c25.6 25.6 25.6 70.4 3.2 96-25.6 25.6-70.4 25.6-96 3.2l-3.2-3.2-172.8-169.6z m-480-284.8h822.4c38.4 0 70.4-28.8 70.4-70.4s-32-67.2-73.6-67.2H102.4C60.8-96 32-67.2 32-25.6c0 35.2 28.8 67.2 70.4 67.2z" horiz-adv-x="1024" />
18
+
17
19
  <glyph glyph-name="sdoc-next-page" unicode="&#58918;" d="M342.4 768c12.8 0 28.8-6.4 38.4-16l329.6-329.6c22.4-22.4 22.4-57.6 0-76.8L380.8 16c-22.4-22.4-57.6-22.4-76.8 0-22.4 22.4-22.4 57.6 0 76.8L595.2 384 304 675.2c-22.4 22.4-22.4 57.6 0 76.8 9.6 9.6 25.6 16 38.4 16z" horiz-adv-x="1024" />
18
20
 
19
21
  <glyph glyph-name="sdoc-previous-page" unicode="&#58961;" d="M672 768c-12.8 0-28.8-6.4-38.4-16L304 422.4c-22.4-22.4-22.4-57.6 0-76.8L633.6 16c22.4-22.4 57.6-22.4 76.8 0 22.4 22.4 22.4 57.6 0 76.8L419.2 384l291.2 291.2c22.4 22.4 22.4 57.6 0 76.8-9.6 9.6-25.6 16-38.4 16z" horiz-adv-x="1024" />
@@ -1,11 +1,11 @@
1
1
  @font-face {
2
2
  font-family: "sdocfont"; /* Project id 4097705 */
3
- src: url('./sdoc-editor-font/iconfont.eot?t=1692935854632'); /* IE9 */
4
- src: url('./sdoc-editor-font/iconfont.eot?t=1692935854632#iefix') format('embedded-opentype'), /* IE6-IE8 */
5
- url('./sdoc-editor-font/iconfont.woff2?t=1692935854632') format('woff2'),
6
- url('./sdoc-editor-font/iconfont.woff?t=1692935854632') format('woff'),
7
- url('./sdoc-editor-font/iconfont.ttf?t=1692935854632') format('truetype'),
8
- url('./sdoc-editor-font/iconfont.svg?t=1692935854632#sdocfont') format('svg');
3
+ src: url('./sdoc-editor-font/iconfont.eot?t=1693362307040'); /* IE9 */
4
+ src: url('./sdoc-editor-font/iconfont.eot?t=1693362307040#iefix') format('embedded-opentype'), /* IE6-IE8 */
5
+ url('./sdoc-editor-font/iconfont.woff2?t=1693362307040') format('woff2'),
6
+ url('./sdoc-editor-font/iconfont.woff?t=1693362307040') format('woff'),
7
+ url('./sdoc-editor-font/iconfont.ttf?t=1693362307040') format('truetype'),
8
+ url('./sdoc-editor-font/iconfont.svg?t=1693362307040#sdocfont') format('svg');
9
9
  }
10
10
 
11
11
  .sdocfont {
@@ -16,6 +16,10 @@
16
16
  -moz-osx-font-smoothing: grayscale;
17
17
  }
18
18
 
19
+ .sdoc-download:before {
20
+ content: "\e652";
21
+ }
22
+
19
23
  .sdoc-next-page:before {
20
24
  content: "\e626";
21
25
  }
@@ -1,43 +0,0 @@
1
- .image-menu {
2
- position: relative;
3
- }
4
-
5
- .image-menu .image-popover {
6
- position: absolute;
7
- top: 36px;
8
- left: 0px;
9
- padding: 8px 0;
10
- background-color: #fff;
11
- border: 1px solid #e5e6e8;
12
- border-radius: 2px;
13
- box-shadow: 0 0 10px #ccc;
14
- display: flex;
15
- flex-direction: column;
16
- align-items: flex-start;
17
- z-index: 101;
18
- white-space: nowrap;
19
- }
20
-
21
- .image-menu .image-popover .image-menu-item {
22
- cursor: pointer;
23
- height: 30px;
24
- padding: 4px 24px;
25
- user-select: none;
26
- display: flex;
27
- align-items: center;
28
- font-size: 0.9375rem;
29
- }
30
-
31
- .image-menu .image-popover .image-menu-item:hover {
32
- background-color: rgb(245, 245, 245);
33
- }
34
-
35
- .image-menu .locale-image-uploader {
36
- position: absolute;
37
- top: 0;
38
- left: 0;
39
- width: 0;
40
- height: 0;
41
- opacity: 0;
42
- font-size: 0;
43
- }