@seafile/sdoc-editor 0.1.56 → 0.1.57-test0

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 (41) hide show
  1. package/dist/basic-sdk/editor.js +1 -1
  2. package/dist/basic-sdk/extension/constants/element-type.js +5 -1
  3. package/dist/basic-sdk/extension/constants/index.js +14 -2
  4. package/dist/basic-sdk/extension/core/queries/index.js +8 -0
  5. package/dist/basic-sdk/extension/plugins/blockquote/render-elem.js +6 -1
  6. package/dist/basic-sdk/extension/plugins/check-list/render-elem.js +8 -4
  7. package/dist/basic-sdk/extension/plugins/header/render-elem.js +6 -2
  8. package/dist/basic-sdk/extension/plugins/html/plugin.js +8 -6
  9. package/dist/basic-sdk/extension/plugins/index.js +3 -2
  10. package/dist/basic-sdk/extension/plugins/list/render-elem.js +16 -2
  11. package/dist/basic-sdk/extension/plugins/table/constants/index.js +5 -1
  12. package/dist/basic-sdk/extension/plugins/table/helpers.js +159 -22
  13. package/dist/basic-sdk/extension/plugins/table/menu/active-table-menu/index.js +3 -3
  14. package/dist/basic-sdk/extension/plugins/table/plugin.js +2 -2
  15. package/dist/basic-sdk/extension/plugins/table/render/hooks.js +17 -0
  16. package/dist/basic-sdk/extension/plugins/table/render/index.css +137 -0
  17. package/dist/basic-sdk/extension/plugins/table/render/index.js +161 -0
  18. package/dist/basic-sdk/extension/plugins/table/render/render-cell.js +48 -14
  19. package/dist/basic-sdk/extension/plugins/table/render/render-row.js +122 -7
  20. package/dist/basic-sdk/extension/plugins/table/render/resize-handler.js +109 -0
  21. package/dist/basic-sdk/extension/plugins/table/render/resize-handlers.js +27 -0
  22. package/dist/basic-sdk/extension/plugins/table/render/table-root.js +38 -0
  23. package/dist/basic-sdk/extension/plugins/table/render-elem.js +1 -1
  24. package/dist/basic-sdk/extension/plugins/text-align/helpers.js +43 -0
  25. package/dist/basic-sdk/extension/plugins/text-align/index.js +2 -0
  26. package/dist/basic-sdk/extension/plugins/text-align/menu/index.js +105 -0
  27. package/dist/basic-sdk/extension/plugins/text-align/menu/style.css +61 -0
  28. package/dist/basic-sdk/extension/render/render-element.js +9 -3
  29. package/dist/basic-sdk/extension/toolbar/index.js +3 -0
  30. package/dist/basic-sdk/utils/mouse-event.js +59 -0
  31. package/dist/basic-sdk/utils/object-utils.js +1 -0
  32. package/dist/components/doc-info/index.js +19 -4
  33. package/dist/config.js +16 -0
  34. package/dist/constants/index.js +1 -0
  35. package/dist/pages/simple-editor.js +3 -1
  36. package/package.json +1 -1
  37. package/public/locales/en/sdoc-editor.json +5 -1
  38. package/public/media/sdoc-editor-font.css +2 -2
  39. package/dist/basic-sdk/extension/plugins/table/render/context.js +0 -5
  40. package/dist/basic-sdk/extension/plugins/table/render/render-table/index.css +0 -72
  41. package/dist/basic-sdk/extension/plugins/table/render/render-table/index.js +0 -94
@@ -0,0 +1,38 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
+ import React, { useState, useRef } from 'react';
3
+ import classnames from 'classnames';
4
+ import { TABLE_MAX_WIDTH } from '../constants';
5
+ import { TableRootContext } from './hooks';
6
+ var TableRoot = function TableRoot(_ref) {
7
+ var attributes = _ref.attributes,
8
+ _ref$columns = _ref.columns,
9
+ columns = _ref$columns === void 0 ? [] : _ref$columns,
10
+ children = _ref.children;
11
+ var tableScrollWrapper = useRef(null);
12
+ var _useState = useState(0),
13
+ _useState2 = _slicedToArray(_useState, 2),
14
+ scrollLeft = _useState2[0],
15
+ setScrollLeft = _useState2[1];
16
+ var allWidth = columns.reduce(function (pre, cur) {
17
+ return pre + cur.width;
18
+ }, 0);
19
+ var onScroll = function onScroll(event) {
20
+ setScrollLeft(event.target.scrollLeft);
21
+ };
22
+ return /*#__PURE__*/React.createElement(TableRootContext.Provider, {
23
+ value: tableScrollWrapper.current
24
+ }, /*#__PURE__*/React.createElement("div", Object.assign({
25
+ className: classnames('sdoc-table-wrapper', {
26
+ 'scroll position-relative': allWidth > TABLE_MAX_WIDTH
27
+ })
28
+ }, attributes), /*#__PURE__*/React.createElement("div", {
29
+ className: classnames('sdoc-table-scroll-wrapper', {
30
+ 'scroll-at-center': scrollLeft + TABLE_MAX_WIDTH !== allWidth && scrollLeft > 0,
31
+ 'scroll-at-right': scrollLeft + TABLE_MAX_WIDTH === allWidth,
32
+ 'scroll-at-left': scrollLeft === 0
33
+ }),
34
+ ref: tableScrollWrapper,
35
+ onScroll: onScroll
36
+ }, children)));
37
+ };
38
+ export default TableRoot;
@@ -1,4 +1,4 @@
1
- import renderTable from './render/render-table';
1
+ import renderTable from './render';
2
2
  import renderTableRow from './render/render-row';
3
3
  import renderTableCell from './render/render-cell';
4
4
  export { renderTable, renderTableRow, renderTableCell };
@@ -0,0 +1,43 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
+ import { Editor, Transforms, Element } from '@seafile/slate';
3
+ import { TEXT_ALIGN, MENUS_CONFIG_MAP, CODE_BLOCK, TABLE } from '../../constants';
4
+ export var isMenuDisabled = function isMenuDisabled(editor) {
5
+ if (!editor.selection) return true;
6
+ var _Editor$nodes = Editor.nodes(editor, {
7
+ match: function match(node) {
8
+ return !Editor.isEditor(node) && Element.isElement(node) && Editor.isBlock(editor, node);
9
+ },
10
+ universal: true,
11
+ mode: 'highest'
12
+ }),
13
+ _Editor$nodes2 = _slicedToArray(_Editor$nodes, 1),
14
+ match = _Editor$nodes2[0];
15
+ var elementType = match[0].type;
16
+ // at present, TABLE got its own 'text align'
17
+ if (elementType == CODE_BLOCK || elementType == TABLE) {
18
+ return true;
19
+ }
20
+ return false;
21
+ };
22
+ export var getAlignType = function getAlignType(editor) {
23
+ var defaultType = MENUS_CONFIG_MAP[TEXT_ALIGN][0].type;
24
+ var selection = editor.selection;
25
+ if (!selection) {
26
+ return defaultType;
27
+ }
28
+ var _Editor$nodes3 = Editor.nodes(editor, {
29
+ at: Editor.unhangRange(editor, selection),
30
+ match: function match(n) {
31
+ return !Editor.isEditor(n) && Element.isElement(n) && n['align'];
32
+ }
33
+ }),
34
+ _Editor$nodes4 = _slicedToArray(_Editor$nodes3, 1),
35
+ match = _Editor$nodes4[0];
36
+ if (!match) return defaultType;
37
+ return match[0].align;
38
+ };
39
+ export var setAlignType = function setAlignType(editor, type) {
40
+ Transforms.setNodes(editor, {
41
+ 'align': type
42
+ });
43
+ };
@@ -0,0 +1,2 @@
1
+ var TextAlignPlugin = {};
2
+ export default TextAlignPlugin;
@@ -0,0 +1,105 @@
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 from 'react';
6
+ import { withTranslation } from 'react-i18next';
7
+ import classnames from 'classnames';
8
+ import { getAlignType, isMenuDisabled, setAlignType } from '../helpers';
9
+ import { TEXT_ALIGN, MENUS_CONFIG_MAP } from '../../../constants';
10
+ import './style.css';
11
+ var TextAlignMenu = /*#__PURE__*/function (_React$Component) {
12
+ _inherits(TextAlignMenu, _React$Component);
13
+ var _super = _createSuper(TextAlignMenu);
14
+ function TextAlignMenu(props) {
15
+ var _this;
16
+ _classCallCheck(this, TextAlignMenu);
17
+ _this = _super.call(this, props);
18
+ _this.registerEventHandler = function () {
19
+ document.addEventListener('click', _this.onHideTextAlignMenu);
20
+ };
21
+ _this.unregisterEventHandler = function () {
22
+ document.removeEventListener('click', _this.onHideTextAlignMenu);
23
+ };
24
+ _this.onHideTextAlignMenu = function () {
25
+ _this.setState({
26
+ isDropdownMenuOpen: false
27
+ }, function () {
28
+ _this.unregisterEventHandler();
29
+ });
30
+ };
31
+ _this.getCurrentType = function () {
32
+ var editor = _this.props.editor;
33
+ return getAlignType(editor);
34
+ };
35
+ _this.isActive = function (type) {
36
+ return _this.getCurrentType() === type;
37
+ };
38
+ _this.isDisabled = function () {
39
+ var editor = _this.props.editor;
40
+ return isMenuDisabled(editor);
41
+ };
42
+ _this.onToggleClick = function (event) {
43
+ event.stopPropagation();
44
+ event.nativeEvent.stopImmediatePropagation();
45
+ var isDropdownMenuOpen = !_this.state.isDropdownMenuOpen;
46
+ if (isDropdownMenuOpen) {
47
+ _this.setState({
48
+ isDropdownMenuOpen: isDropdownMenuOpen
49
+ }, function () {
50
+ _this.registerEventHandler();
51
+ });
52
+ } else {
53
+ _this.setState({
54
+ isDropdownMenuOpen: isDropdownMenuOpen
55
+ }, function () {
56
+ _this.unregisterEventHandler();
57
+ });
58
+ }
59
+ };
60
+ _this.setType = function (type) {
61
+ var editor = _this.props.editor;
62
+ setAlignType(editor, type);
63
+ };
64
+ _this.state = {
65
+ isDropdownMenuOpen: false
66
+ };
67
+ return _this;
68
+ }
69
+ _createClass(TextAlignMenu, [{
70
+ key: "render",
71
+ value: function render() {
72
+ var _this2 = this;
73
+ var t = this.props.t;
74
+ var isDropdownMenuOpen = this.state.isDropdownMenuOpen;
75
+ var caretIconClass = "caret-icon sdocfont sdoc-".concat(isDropdownMenuOpen ? 'caret-up' : 'drop-down');
76
+ var curType = this.getCurrentType();
77
+ var curIcon = MENUS_CONFIG_MAP[TEXT_ALIGN].filter(function (item) {
78
+ return item.type == curType;
79
+ })[0].iconClass;
80
+ var disabled = this.isDisabled();
81
+ return /*#__PURE__*/React.createElement("div", {
82
+ className: "align-menu"
83
+ }, /*#__PURE__*/React.createElement("div", {
84
+ className: classnames('align-toggle px-2', {
85
+ 'align-toggle-disabled': disabled
86
+ }),
87
+ onClick: disabled ? function () {} : this.onToggleClick
88
+ }, /*#__PURE__*/React.createElement("span", {
89
+ className: "mr-1 ".concat(curIcon)
90
+ }), !disabled && /*#__PURE__*/React.createElement("span", {
91
+ className: caretIconClass
92
+ })), isDropdownMenuOpen && /*#__PURE__*/React.createElement("div", {
93
+ className: "align-popover"
94
+ }, MENUS_CONFIG_MAP[TEXT_ALIGN].map(function (item, index) {
95
+ return /*#__PURE__*/React.createElement("span", {
96
+ key: index,
97
+ className: "align-menu-item ".concat(item.iconClass),
98
+ onClick: _this2.setType.bind(_this2, item.type)
99
+ });
100
+ })));
101
+ }
102
+ }]);
103
+ return TextAlignMenu;
104
+ }(React.Component);
105
+ export default withTranslation('sdoc-editor')(TextAlignMenu);
@@ -0,0 +1,61 @@
1
+ .align-menu {
2
+ display: flex;
3
+ position: relative;
4
+ margin-right: 10px;
5
+ }
6
+
7
+ .align-menu .align-toggle {
8
+ flex: 1;
9
+ display: flex;
10
+ justify-content: space-between;
11
+ align-items: center;
12
+ }
13
+
14
+ .align-menu .align-toggle-disabled {
15
+ color: #999;
16
+ }
17
+
18
+ .align-menu .align-toggle:not(.align-toggle-disabled):hover {
19
+ background: #e5e5e5;
20
+ border-radius: 2px;
21
+ }
22
+
23
+ .align-menu .align-toggle .sdocfont {
24
+ height: 30px;
25
+ display: inline-flex;
26
+ justify-content: center;
27
+ align-items: center;
28
+ font-size: 14px;
29
+ cursor: pointer;
30
+ }
31
+
32
+ .align-menu .align-toggle .caret-icon {
33
+ transform: scale(.8);
34
+ }
35
+
36
+ .align-menu .align-popover {
37
+ position: absolute;
38
+ top: 37px;
39
+ left: 0;
40
+ padding: 8px 0;
41
+ background-color: #fff;
42
+ border: 1px solid #e5e6e8;
43
+ border-radius: 2px;
44
+ box-shadow: 0 0 10px #ccc;
45
+ display: flex;
46
+ flex-direction: column;
47
+ align-items: flex-start;
48
+ z-index: 10;
49
+ }
50
+
51
+ .align-menu .align-popover .align-menu-item {
52
+ cursor: pointer;
53
+ height: 30px;
54
+ width: 100%;
55
+ padding: 4px 24px;
56
+ user-select: none;
57
+ }
58
+
59
+ .align-menu .align-popover .align-menu-item:hover {
60
+ background-color: rgb(245, 245, 245);
61
+ }
@@ -1,4 +1,5 @@
1
1
  import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
2
3
  import React from 'react';
3
4
  import { Node } from '@seafile/slate';
4
5
  import { useSlateStatic } from '@seafile/slate-react';
@@ -10,6 +11,9 @@ var CustomElement = function CustomElement(props) {
10
11
  var attributes = props.attributes,
11
12
  children = props.children,
12
13
  element = props.element;
14
+ var style = {
15
+ textAlign: element.align
16
+ };
13
17
  switch (element.type) {
14
18
  case PARAGRAPH:
15
19
  {
@@ -25,9 +29,9 @@ var CustomElement = function CustomElement(props) {
25
29
  return /*#__PURE__*/React.createElement("p", Object.assign({
26
30
  "data-id": element.id
27
31
  }, attributes, {
28
- style: {
32
+ style: _objectSpread({
29
33
  position: isShowPlaceHolder ? 'relative' : ''
30
- }
34
+ }, style)
31
35
  }), children, isShowPlaceHolder && /*#__PURE__*/React.createElement(Placeholder, {
32
36
  title: 'Please_enter_text'
33
37
  }));
@@ -116,7 +120,9 @@ var CustomElement = function CustomElement(props) {
116
120
  {
117
121
  return /*#__PURE__*/React.createElement("p", Object.assign({
118
122
  "data-id": element.id
119
- }, attributes), children);
123
+ }, attributes, {
124
+ style: style
125
+ }), children);
120
126
  }
121
127
  }
122
128
  };
@@ -10,6 +10,7 @@ import HeaderMenu from '../plugins/header/menu';
10
10
  import CheckListMenu from '../plugins/check-list/menu';
11
11
  import TextStyleMenuList from '../plugins/text-style/menu';
12
12
  import CodeBlockMenu from '../plugins/code-block/menu';
13
+ import TextAlignMenu from '../plugins/text-align/menu';
13
14
  import HistoryMenu from './redo-undo';
14
15
  import { TableMenu, ActiveTableMenu } from '../plugins/table/menu';
15
16
  import EventBus from '../../utils/event-bus';
@@ -48,6 +49,8 @@ var Toolbar = function Toolbar(_ref) {
48
49
  type: ORDERED_LIST
49
50
  }), /*#__PURE__*/React.createElement(CheckListMenu, {
50
51
  editor: editor
52
+ }), /*#__PURE__*/React.createElement(TextAlignMenu, {
53
+ editor: editor
51
54
  })), /*#__PURE__*/React.createElement(MenuGroup, null, /*#__PURE__*/React.createElement(CodeBlockMenu, {
52
55
  editor: editor
53
56
  }), /*#__PURE__*/React.createElement(TableMenu, {
@@ -0,0 +1,59 @@
1
+ export var eventStopPropagation = function eventStopPropagation(event) {
2
+ if (!event) return;
3
+ event.stopPropagation();
4
+ event.nativeEvent && event.nativeEvent.stopImmediatePropagation && event.nativeEvent.stopImmediatePropagation();
5
+ };
6
+ export var registerResizeEvents = function registerResizeEvents() {
7
+ var eventsMap = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
8
+ for (var key in eventsMap) {
9
+ document.addEventListener(key, eventsMap[key]);
10
+ }
11
+ };
12
+ export var unregisterResizeEvents = function unregisterResizeEvents() {
13
+ var eventsMap = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
14
+ for (var key in eventsMap) {
15
+ document.removeEventListener(key, eventsMap[key]);
16
+ }
17
+ };
18
+ export var getMouseDownInfo = function getMouseDownInfo(event, scrollContainer) {
19
+ var positionX = 0;
20
+ var positionY = 0;
21
+ var scrollLeft = 0;
22
+ var scrollTop = 0;
23
+ if (event) {
24
+ positionX = event.clientX;
25
+ positionY = event.clientY;
26
+ }
27
+ if (scrollContainer) {
28
+ scrollLeft = scrollContainer.scrollLeft;
29
+ scrollTop = scrollContainer.scrollTop;
30
+ }
31
+ return {
32
+ positionX: positionX,
33
+ positionY: positionY,
34
+ scrollLeft: scrollLeft,
35
+ scrollTop: scrollTop
36
+ };
37
+ };
38
+ export var getMouseMoveInfo = function getMouseMoveInfo(event, mouseDownInfo, scrollContainer) {
39
+ var displacementX = 0;
40
+ var displacementY = 0;
41
+ if (!event) return {
42
+ displacementX: displacementX,
43
+ displacementY: displacementY
44
+ };
45
+ var currPositionX = event.clientX,
46
+ currPositionY = event.clientY;
47
+ var scrollLeft = 0;
48
+ var scrollTop = 0;
49
+ if (scrollContainer) {
50
+ scrollLeft = scrollContainer.scrollLeft;
51
+ scrollTop = scrollContainer.scrollTop;
52
+ }
53
+ displacementX = currPositionX - mouseDownInfo.positionX + scrollLeft - (mouseDownInfo.scrollLeft || 0);
54
+ displacementY = currPositionY - mouseDownInfo.positionY + scrollTop - (mouseDownInfo.scrollTop || 0);
55
+ return {
56
+ displacementX: displacementX,
57
+ displacementY: displacementY
58
+ };
59
+ };
@@ -55,6 +55,7 @@ var ObjectUtils = /*#__PURE__*/function () {
55
55
  return ObjectUtils;
56
56
  }();
57
57
  ObjectUtils.hasProperty = function (obj, prop) {
58
+ if (!obj) return false;
58
59
  return Object.prototype.hasOwnProperty.call(obj, prop);
59
60
  };
60
61
  export default ObjectUtils;
@@ -22,21 +22,36 @@ var DocInfo = /*#__PURE__*/function (_React$Component) {
22
22
  var eventBus = EventBus.getInstance();
23
23
  eventBus.dispatch(EXTERNAL_EVENT.INTERNAL_LINK_CLICK);
24
24
  };
25
+ _this.toggleStar = function () {
26
+ var eventBus = EventBus.getInstance();
27
+ eventBus.dispatch(EXTERNAL_EVENT.TOGGLE_STAR);
28
+ };
25
29
  return _this;
26
30
  }
27
31
  _createClass(DocInfo, [{
28
32
  key: "render",
29
33
  value: function render() {
30
- var t = this.props.t;
34
+ var _this$props = this.props,
35
+ t = _this$props.t,
36
+ isStarred = _this$props.isStarred;
31
37
  var docName = context.getSetting('docName');
32
- var isShowInternalLink = context.getSetting('isShowInternalLink');
38
+ var _context$getSettings = context.getSettings(),
39
+ isShowInternalLink = _context$getSettings.isShowInternalLink,
40
+ isStarIconShown = _context$getSettings.isStarIconShown;
33
41
  return /*#__PURE__*/React.createElement("div", {
34
42
  className: "doc-info"
35
43
  }, /*#__PURE__*/React.createElement("div", {
36
44
  className: "doc-name"
37
- }, docName), /*#__PURE__*/React.createElement("span", {
45
+ }, docName), isStarIconShown && /*#__PURE__*/React.createElement("a", {
46
+ className: "file-star ".concat(isStarred ? 'fa' : 'far', " fa-star"),
47
+ href: "#",
48
+ title: isStarred ? t('starred') : t('unstarred'),
49
+ role: "button",
50
+ "aria-label": isStarred ? t('Unstar') : t('Star'),
51
+ onClick: this.toggleStar
52
+ }), isShowInternalLink && /*#__PURE__*/React.createElement("span", {
38
53
  className: "doc-icon"
39
- }, isShowInternalLink && /*#__PURE__*/React.createElement("span", {
54
+ }, /*#__PURE__*/React.createElement("span", {
40
55
  className: "internal-link sdocfont sdoc-link",
41
56
  title: t('internal_link'),
42
57
  onClick: this.onInternalLinkClick
package/dist/config.js ADDED
@@ -0,0 +1,16 @@
1
+ var serverConfig = {
2
+ //serviceUrl: "http://127.0.0.1:8000",
3
+ serviceUrl: "http://192.168.1.100:8000",
4
+ username: "lj@11.com",
5
+ password: "11",
6
+ repoID: "79d1fa93-4b5f-4d6c-8fb5-ad3958e1fa47",
7
+ userInfo: {
8
+ username: 'lj@11.com',
9
+ name: 'lj-',
10
+ contact_email: 'lj@11.com'
11
+ },
12
+ filePath: '/xxx.md',
13
+ fileName: 'xxx.md',
14
+ dirPath: '/'
15
+ };
16
+ export { serverConfig };
@@ -1,4 +1,5 @@
1
1
  export var EXTERNAL_EVENT = {
2
2
  INTERNAL_LINK_CLICK: 'internal_link_click',
3
+ TOGGLE_STAR: 'toggle_star',
3
4
  CANCEL_TABLE_SELECT_RANGE: 'cancel_table_select_range'
4
5
  };
@@ -112,7 +112,9 @@ var SimpleEditor = /*#__PURE__*/function (_React$Component) {
112
112
  }, errorMessage);
113
113
  }
114
114
  var isOpenSocket = context.getSetting('isOpenSocket');
115
- return /*#__PURE__*/React.createElement(Layout, null, /*#__PURE__*/React.createElement(Header, null, /*#__PURE__*/React.createElement(DocInfo, null), /*#__PURE__*/React.createElement(DocOperations, null)), /*#__PURE__*/React.createElement(Content, null, /*#__PURE__*/React.createElement(SDocEditor, {
115
+ return /*#__PURE__*/React.createElement(Layout, null, /*#__PURE__*/React.createElement(Header, null, /*#__PURE__*/React.createElement(DocInfo, {
116
+ isStarred: this.props.isStarred
117
+ }), /*#__PURE__*/React.createElement(DocOperations, null)), /*#__PURE__*/React.createElement(Content, null, /*#__PURE__*/React.createElement(SDocEditor, {
116
118
  config: context.getEditorConfig(),
117
119
  document: document,
118
120
  isOpenSocket: isOpenSocket,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/sdoc-editor",
3
- "version": "0.1.56",
3
+ "version": "0.1.57-test0",
4
4
  "private": false,
5
5
  "description": "This is a sdoc editor",
6
6
  "main": "dist/index.js",
@@ -247,5 +247,9 @@
247
247
  "Insert_below": "Insert below",
248
248
  "Insert_above": "Insert above",
249
249
  "Insert_on_the_right": "Insert on the right",
250
- "Insert_on_the_left": "Insert on the left"
250
+ "Insert_on_the_left": "Insert on the left",
251
+ "starred": "starred",
252
+ "unstarred": "unstarred",
253
+ "Star": "Star",
254
+ "Unstar": "Unstar"
251
255
  }
@@ -28,11 +28,11 @@
28
28
  content: "\e636";
29
29
  }
30
30
 
31
- .sdoc-left-alignment:before {
31
+ .sdoc-align-left:before {
32
32
  content: "\e62e";
33
33
  }
34
34
 
35
- .sdoc-center-horizontally:before {
35
+ .sdoc-align-center:before {
36
36
  content: "\e62f";
37
37
  }
38
38
 
@@ -1,5 +0,0 @@
1
- import { createContext, useContext } from 'react';
2
- export var TableContext = createContext();
3
- export var useTableContext = function useTableContext() {
4
- return useContext(TableContext);
5
- };
@@ -1,72 +0,0 @@
1
- .sdoc-table-selected {
2
- position: relative;
3
- }
4
-
5
- .sdoc-table-selected .sdoc-table-rows-header {
6
- width: 12px;
7
- left: -12px;
8
- top: 0;
9
- height: 100%;
10
- background-color: rgb(243, 245, 247);
11
- display: flex;
12
- flex-direction: column;
13
- }
14
-
15
- .sdoc-table-selected .sdoc-table-rows-header .sdoc-table-rows-header-item {
16
- border-bottom: 1px solid #ccc;
17
- flex-shrink: 0;
18
- }
19
-
20
- .sdoc-table-selected .sdoc-table-rows-header .sdoc-table-rows-header-item:last-child {
21
- border-bottom: none;
22
- }
23
-
24
- .sdoc-table-wrapper {
25
- overflow: scroll;
26
- }
27
-
28
- .sdoc-table-wrapper tr:first-child {
29
- font-weight: unset;
30
- }
31
-
32
- .sdoc-table-wrapper tr:nth-child(2n+1) {
33
- background-color: unset;
34
- }
35
-
36
- .article .sdoc-table-wrapper td {
37
- min-width: 35px;
38
- }
39
-
40
- .sdoc-table-wrapper .cell-selected {
41
- caret-color: transparent;
42
- background-color: #fff4e6;
43
- position: relative;
44
- }
45
-
46
- .sdoc-table-wrapper .cell-light-height-top-border::before {
47
- content: '';
48
- position: absolute;
49
- top: -1px;
50
- left: 0;
51
- width: 100%;
52
- height: 2px;
53
- border-top: 1px double #ffa94d;
54
- }
55
-
56
- .sdoc-table-wrapper .cell-light-height-bottom-border {
57
- border-bottom: 1px double #ffa94d;
58
- }
59
-
60
- .sdoc-table-wrapper .cell-light-height-left-border::after {
61
- content: '';
62
- position: absolute;
63
- top: 0px;
64
- left: -1px;
65
- width: 2px;
66
- height: 100%;
67
- border-left: 1px double #ffa94d;
68
- }
69
-
70
- .sdoc-table-wrapper .cell-light-height-right-border {
71
- border-right: 1px double #ffa94d;
72
- }
@@ -1,94 +0,0 @@
1
- import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
- import React, { useRef, useState, useEffect } from 'react';
3
- import classnames from 'classnames';
4
- import throttle from 'lodash.throttle';
5
- import { useSelected } from '@seafile/slate-react';
6
- import { EMPTY_SELECTED_RANGE } from '../../constants';
7
- import { TableContext } from '../context';
8
- import EventBus from '../../../../../utils/event-bus';
9
- import { EXTERNAL_EVENT } from '../../../../../../constants';
10
- import { setTableSelectedRange } from '../../helpers';
11
- import ObjectUtils from '../../../../../utils/object-utils';
12
- import './index.css';
13
- var Table = function Table(_ref) {
14
- var className = _ref.className,
15
- attributes = _ref.attributes,
16
- children = _ref.children,
17
- isSelected = _ref.isSelected,
18
- editor = _ref.editor;
19
- var table = useRef(null);
20
- var startRowIndex = 0;
21
- var startColIndex = 0;
22
- var _selectedRange = EMPTY_SELECTED_RANGE;
23
- var _useState = useState(EMPTY_SELECTED_RANGE),
24
- _useState2 = _slicedToArray(_useState, 2),
25
- selectedRange = _useState2[0],
26
- setSelectedRange = _useState2[1];
27
- var eventBus = EventBus.getInstance();
28
- useEffect(function () {
29
- var cancelTableSelectRangeSubscribe = eventBus.subscribe(EXTERNAL_EVENT.CANCEL_TABLE_SELECT_RANGE, clearRange);
30
- return function () {
31
- cancelTableSelectRangeSubscribe();
32
- };
33
- // eslint-disable-next-line react-hooks/exhaustive-deps
34
- }, []);
35
- var clearRange = function clearRange() {
36
- _selectedRange = EMPTY_SELECTED_RANGE;
37
- setSelectedRange(EMPTY_SELECTED_RANGE);
38
- };
39
- var onMouseMove = throttle(function (event) {
40
- // if event.target not in the table, clear the mouseMove event
41
- if (event.target.nodeName === 'TBODY' || !table.current.contains(event.target)) {
42
- return;
43
- }
44
- var endRowIndex = Number(event.target.getAttribute('row-index'));
45
- var endColIndex = Number(event.target.getAttribute('cell-index'));
46
- var newSelectedRange = {
47
- minRowIndex: Math.min(startRowIndex, endRowIndex),
48
- maxRowIndex: Math.max(startRowIndex, endRowIndex),
49
- minColIndex: Math.min(startColIndex, endColIndex),
50
- maxColIndex: Math.max(startColIndex, endColIndex)
51
- };
52
-
53
- // same cell
54
- if (newSelectedRange.minRowIndex === newSelectedRange.maxRowIndex && newSelectedRange.minColIndex === newSelectedRange.maxColIndex) return;
55
- _selectedRange = newSelectedRange;
56
- setSelectedRange(newSelectedRange);
57
- setTableSelectedRange(editor, newSelectedRange);
58
- }, 200);
59
- var onMouseUp = function onMouseUp(event) {
60
- if (!ObjectUtils.isSameObject(_selectedRange, EMPTY_SELECTED_RANGE)) {
61
- window.getSelection().collapseToEnd();
62
- }
63
- window.document.removeEventListener('mousemove', onMouseMove);
64
- window.document.removeEventListener('mouseup', onMouseUp);
65
- };
66
- var onMouseDown = function onMouseDown(event) {
67
- if (event.button !== 0) return; // right click not deal
68
- startRowIndex = Number(event.target.getAttribute('row-index'));
69
- startColIndex = Number(event.target.getAttribute('cell-index'));
70
- setSelectedRange(EMPTY_SELECTED_RANGE);
71
- setTableSelectedRange(editor, EMPTY_SELECTED_RANGE);
72
- window.document.addEventListener('mousemove', onMouseMove);
73
- window.document.addEventListener('mouseup', onMouseUp);
74
- };
75
- return /*#__PURE__*/React.createElement(TableContext.Provider, {
76
- value: selectedRange
77
- }, /*#__PURE__*/React.createElement("div", Object.assign({}, attributes, {
78
- className: classnames('sdoc-table-wrapper', attributes.className, className, {
79
- 'sdoc-table-selected': isSelected
80
- })
81
- }), /*#__PURE__*/React.createElement("table", {
82
- onMouseDown: onMouseDown,
83
- ref: table
84
- }, /*#__PURE__*/React.createElement("tbody", null, children))));
85
- };
86
- function renderTable(props, editor) {
87
- // eslint-disable-next-line react-hooks/rules-of-hooks
88
- var isSelected = useSelected();
89
- return /*#__PURE__*/React.createElement(Table, Object.assign({}, props, {
90
- editor: editor,
91
- isSelected: isSelected
92
- }));
93
- }
94
- export default renderTable;