@seafile/sdoc-editor 0.1.82 → 0.1.84

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 (51) hide show
  1. package/dist/basic-sdk/assets/css/layout.css +33 -7
  2. package/dist/basic-sdk/comment/color-menu/color-item.js +22 -0
  3. package/dist/basic-sdk/comment/color-menu/index.css +109 -0
  4. package/dist/basic-sdk/comment/color-menu/index.js +199 -0
  5. package/dist/basic-sdk/comment/style.css +1 -0
  6. package/dist/basic-sdk/constants/index.js +1 -0
  7. package/dist/basic-sdk/editor.js +45 -4
  8. package/dist/basic-sdk/extension/constants/color.js +265 -0
  9. package/dist/basic-sdk/extension/constants/index.js +9 -2
  10. package/dist/basic-sdk/extension/plugins/header/menu/style.css +1 -1
  11. package/dist/basic-sdk/extension/plugins/header/plugin.js +2 -1
  12. package/dist/basic-sdk/extension/plugins/image/helpers.js +1 -3
  13. package/dist/basic-sdk/extension/plugins/image/menu/style.css +2 -2
  14. package/dist/basic-sdk/extension/plugins/image/plugin.js +21 -0
  15. package/dist/basic-sdk/extension/plugins/table/helpers.js +386 -49
  16. package/dist/basic-sdk/extension/plugins/table/menu/active-table-menu/common-menu.js +4 -0
  17. package/dist/basic-sdk/extension/plugins/table/menu/active-table-menu/index.js +40 -13
  18. package/dist/basic-sdk/extension/plugins/table/plugin.js +138 -214
  19. package/dist/basic-sdk/extension/plugins/table/render/index.js +38 -8
  20. package/dist/basic-sdk/extension/plugins/table/render/render-cell.js +16 -7
  21. package/dist/basic-sdk/extension/plugins/table/render/table-header/rows-header/row-header.js +2 -2
  22. package/dist/basic-sdk/extension/plugins/text-align/menu/style.css +1 -1
  23. package/dist/basic-sdk/node-id/helpers.js +18 -0
  24. package/dist/basic-sdk/node-id/index.js +3 -3
  25. package/dist/basic-sdk/outline/index.js +75 -0
  26. package/dist/basic-sdk/outline/outline-item.js +52 -0
  27. package/dist/basic-sdk/outline/style.css +83 -0
  28. package/dist/basic-sdk/utils/event-handler.js +9 -1
  29. package/dist/basic-sdk/utils/object-utils.js +3 -0
  30. package/dist/basic-sdk/views/viewer.js +6 -4
  31. package/dist/components/code-block-hover-menu/index.css +1 -1
  32. package/dist/components/doc-info/index.js +3 -1
  33. package/dist/components/draft-dropdown/index.js +77 -0
  34. package/dist/components/draft-dropdown/style.css +43 -0
  35. package/dist/components/more-dropdown/index.js +10 -3
  36. package/dist/components/more-dropdown/style.css +1 -1
  37. package/dist/constants/index.js +3 -1
  38. package/dist/pages/simple-editor.js +2 -0
  39. package/dist/utils/index.js +2 -1
  40. package/dist/utils/local-storage-utils.js +49 -0
  41. package/package.json +2 -1
  42. package/public/locales/en/sdoc-editor.json +46 -1
  43. package/public/locales/zh-CN/sdoc-editor.json +46 -1
  44. package/public/media/sdoc-editor-font/iconfont.eot +0 -0
  45. package/public/media/sdoc-editor-font/iconfont.svg +4 -0
  46. package/public/media/sdoc-editor-font/iconfont.ttf +0 -0
  47. package/public/media/sdoc-editor-font/iconfont.woff +0 -0
  48. package/public/media/sdoc-editor-font/iconfont.woff2 +0 -0
  49. package/public/media/sdoc-editor-font.css +14 -6
  50. package/dist/basic-sdk/assets/css/outline.css +0 -52
  51. package/dist/basic-sdk/outline.js +0 -125
@@ -0,0 +1,75 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
+ import React, { useCallback, useEffect, useMemo, useState } from 'react';
3
+ import { withTranslation } from 'react-i18next';
4
+ import { UncontrolledTooltip } from 'reactstrap';
5
+ import OutlineItem from './outline-item';
6
+ import './style.css';
7
+ var getOutlineSetting = function getOutlineSetting(docUuid) {
8
+ var currentValue = localStorage.getItem(docUuid);
9
+ var config = currentValue ? JSON.parse(currentValue) : {};
10
+ var _config$outlineOpen = config.outlineOpen,
11
+ outlineOpen = _config$outlineOpen === void 0 ? false : _config$outlineOpen;
12
+ return outlineOpen;
13
+ };
14
+ var setOutlineSetting = function setOutlineSetting(docUuid, isShown) {
15
+ var currentValue = localStorage.getItem(docUuid);
16
+ var config = currentValue ? JSON.parse(currentValue) : {};
17
+ config['outlineOpen'] = isShown;
18
+ localStorage.setItem(docUuid, JSON.stringify(config));
19
+ };
20
+ var SDocOutline = function SDocOutline(_ref) {
21
+ var scrollLeft = _ref.scrollLeft,
22
+ docUuid = _ref.docUuid,
23
+ doc = _ref.doc,
24
+ t = _ref.t;
25
+ var _useState = useState(false),
26
+ _useState2 = _slicedToArray(_useState, 2),
27
+ isShown = _useState2[0],
28
+ setIsShown = _useState2[1];
29
+ useEffect(function () {
30
+ var outlineOpen = getOutlineSetting(docUuid);
31
+ setIsShown(outlineOpen);
32
+ // eslint-disable-next-line react-hooks/exhaustive-deps
33
+ }, []);
34
+ var toggleShow = useCallback(function () {
35
+ setIsShown(!isShown);
36
+ setOutlineSetting(!isShown);
37
+ }, [isShown]);
38
+ var list = useMemo(function () {
39
+ return doc.filter(function (item) {
40
+ return ['header2', 'header3'].includes(item.type);
41
+ });
42
+ }, [doc]);
43
+ return /*#__PURE__*/React.createElement("div", {
44
+ className: "sdoc-outline-wrapper",
45
+ style: {
46
+ left: -scrollLeft
47
+ }
48
+ }, /*#__PURE__*/React.createElement("div", {
49
+ className: "sdoc-outline"
50
+ }, isShown && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
51
+ className: "sdoc-outline-header"
52
+ }, /*#__PURE__*/React.createElement("h2", {
53
+ className: "sdoc-outline-header__title"
54
+ }, t('Outline')), /*#__PURE__*/React.createElement("span", {
55
+ className: "sdoc-outline-header__close sdocfont sdoc-cancel",
56
+ onClick: toggleShow
57
+ })), list.length === 0 && /*#__PURE__*/React.createElement("p", {
58
+ className: "mt-4 text-secondary"
59
+ }, t('Headings_you_add_to_the_document_will_appear_here')), list.length > 0 && /*#__PURE__*/React.createElement("ol", {
60
+ className: "sdoc-outline-list-container"
61
+ }, list.map(function (item, index) {
62
+ return /*#__PURE__*/React.createElement(OutlineItem, {
63
+ key: index,
64
+ item: item
65
+ });
66
+ })))), !isShown && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("span", {
67
+ id: "sdoc-outline-menu",
68
+ className: "sdoc-outline-menu sdocfont sdoc-table-of-content",
69
+ onClick: toggleShow
70
+ }), /*#__PURE__*/React.createElement(UncontrolledTooltip, {
71
+ placement: "right",
72
+ target: "sdoc-outline-menu"
73
+ }, t('Outline'))));
74
+ };
75
+ export default withTranslation('sdoc-editor')(SDocOutline);
@@ -0,0 +1,52 @@
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
+ var OutlineItem = /*#__PURE__*/function (_React$PureComponent) {
7
+ _inherits(OutlineItem, _React$PureComponent);
8
+ var _super = _createSuper(OutlineItem);
9
+ function OutlineItem(props) {
10
+ var _this;
11
+ _classCallCheck(this, OutlineItem);
12
+ _this = _super.call(this, props);
13
+ _this.onItemClick = function () {
14
+ var item = _this.props.item;
15
+ var id = item.id;
16
+ document.getElementById(id).scrollIntoView();
17
+ };
18
+ _this.onMouseOver = function () {
19
+ _this.setState({
20
+ isHighlighted: true
21
+ });
22
+ };
23
+ _this.onMouseOut = function () {
24
+ _this.setState({
25
+ isHighlighted: false
26
+ });
27
+ };
28
+ _this.state = {
29
+ isHighlighted: false
30
+ };
31
+ return _this;
32
+ }
33
+ _createClass(OutlineItem, [{
34
+ key: "render",
35
+ value: function render() {
36
+ var isHighlighted = this.state.isHighlighted;
37
+ var item = this.props.item;
38
+ var type = item.type,
39
+ children = item.children;
40
+ return /*#__PURE__*/React.createElement("li", {
41
+ className: "sdoc-outline-item ".concat(type === 'header3' ? 'pl-5' : '', " ").concat(isHighlighted ? 'active' : ''),
42
+ onClick: this.onItemClick,
43
+ onMouseOver: this.onMouseOver,
44
+ onMouseOut: this.onMouseOut
45
+ }, children.map(function (child) {
46
+ return child.text;
47
+ }).join(''));
48
+ }
49
+ }]);
50
+ return OutlineItem;
51
+ }(React.PureComponent);
52
+ export default OutlineItem;
@@ -0,0 +1,83 @@
1
+ .sdoc-outline-wrapper {
2
+ position: absolute;
3
+ top: 0;
4
+ bottom: 0;
5
+ display: flex;
6
+ margin: 20px 30px 20px 16px;
7
+ min-height: 0;
8
+ z-index: 101;
9
+ }
10
+
11
+ .sdoc-outline {
12
+ flex: 1;
13
+ width: 220px;
14
+ display: flex;
15
+ min-height: 0;
16
+ flex-direction: column;
17
+ font-size: 14px;
18
+ position: relative;
19
+ }
20
+
21
+ .sdoc-outline-header {
22
+ display: flex;
23
+ justify-content: space-between;
24
+ align-items: center;
25
+ padding: 0.25rem 0;
26
+ color: #999;
27
+ border-bottom: 1px solid #dbdbdb;
28
+ }
29
+
30
+ .sdoc-outline-header__title {
31
+ font-size: 14px;
32
+ line-height: 1.1;
33
+ margin: 0 !important;
34
+ }
35
+
36
+ .sdoc-outline-header__close {
37
+ cursor: pointer;
38
+ font-size: 14px;
39
+ }
40
+
41
+ .sdoc-outline-header__close:hover {
42
+ color: #555;
43
+ }
44
+
45
+ .sdoc-outline-list-container {
46
+ list-style: none;
47
+ padding: 0.5rem 0;
48
+ flex: 1;
49
+ display: flex;
50
+ flex-direction: column;
51
+ overflow: auto;
52
+ }
53
+
54
+ .sdoc-outline-item {
55
+ padding: 4px 0;
56
+ cursor: pointer;
57
+ }
58
+
59
+ .sdoc-outline-item.active {
60
+ color: #ff8000;
61
+ }
62
+
63
+ .sdoc-outline-menu {
64
+ line-height: 1;
65
+ font-size: 14px;
66
+ color: #888;
67
+ cursor: pointer;
68
+ width: 28px;
69
+ height: 28px;
70
+ background: #fff;
71
+ border-radius: 0 50% 50% 0;
72
+ box-shadow: 0 0 6px rgba(0,0,0, 0.12);
73
+ display: flex;
74
+ align-items: center;
75
+ justify-content: center;
76
+ position: absolute;
77
+ top: 20px;
78
+ left: -16px;
79
+ }
80
+
81
+ .sdoc-outline-menu:hover {
82
+ color: #333;
83
+ }
@@ -52,13 +52,21 @@ var EventProxy = /*#__PURE__*/_createClass(function EventProxy(_editor) {
52
52
  if (node) {
53
53
  _this.editor.tableOnKeyDown(event);
54
54
  }
55
+ var imageNode = getSelectedNodeByType(editor, ELEMENT_TYPE.IMAGE);
56
+ if (imageNode) {
57
+ _this.editor.imageOnKeyDown(event);
58
+ }
55
59
  };
56
60
  this.onCopy = function (event) {
57
61
  event.stopPropagation();
58
62
  event.nativeEvent.stopImmediatePropagation();
59
63
  // 处理数据
60
64
  };
61
- this.onCut = function (event) {};
65
+ this.onCut = function (event) {
66
+ if (_this.editor.cut) {
67
+ _this.editor.cut(event);
68
+ }
69
+ };
62
70
  this.onPaste = function (event) {};
63
71
  this.editor = _editor;
64
72
  });
@@ -54,6 +54,9 @@ var ObjectUtils = /*#__PURE__*/function () {
54
54
  }]);
55
55
  return ObjectUtils;
56
56
  }();
57
+ ObjectUtils.isObject = function (data) {
58
+ return ObjectUtils.getDataType(data) === 'Object';
59
+ };
57
60
  ObjectUtils.hasProperty = function (obj, prop) {
58
61
  if (!obj) return false;
59
62
  return Object.prototype.hasOwnProperty.call(obj, prop);
@@ -25,10 +25,12 @@ var SDocViewer = function SDocViewer(_ref) {
25
25
  return /*#__PURE__*/React.createElement("div", {
26
26
  className: "sdoc-editor-container"
27
27
  }, /*#__PURE__*/React.createElement("div", {
28
- className: "sdoc-editor-content"
28
+ className: "sdoc-editor-content readonly"
29
29
  }, /*#__PURE__*/React.createElement("div", {
30
30
  ref: scrollRef,
31
- className: "sdoc-editor-article-container"
31
+ className: "sdoc-article-wrapper"
32
+ }, /*#__PURE__*/React.createElement("div", {
33
+ className: "sdoc-article-container"
32
34
  }, /*#__PURE__*/React.createElement(ScrollContext.Provider, {
33
35
  value: {
34
36
  scrollRef: scrollRef
@@ -37,7 +39,7 @@ var SDocViewer = function SDocViewer(_ref) {
37
39
  editor: editor,
38
40
  value: slateValue
39
41
  }, /*#__PURE__*/React.createElement("div", {
40
- className: "article mx-auto",
42
+ className: "article",
41
43
  ref: articleRef
42
44
  }, /*#__PURE__*/React.createElement(SetNodeToDecorations, null), /*#__PURE__*/React.createElement(Editable, {
43
45
  readOnly: true,
@@ -50,6 +52,6 @@ var SDocViewer = function SDocViewer(_ref) {
50
52
  },
51
53
  onDOMBeforeInput: function onDOMBeforeInput(event) {},
52
54
  decorate: decorate
53
- })))))));
55
+ }))))))));
54
56
  };
55
57
  export default SDocViewer;
@@ -1,6 +1,7 @@
1
1
  .sdoc-code-block-hover-menu-container {
2
2
  position: absolute;
3
3
  height: 42px;
4
+ z-index: 101;
4
5
  }
5
6
 
6
7
  .sdoc-code-block-hover-menu-container .hover-menu-container {
@@ -14,7 +15,6 @@
14
15
  border-radius: 3px;
15
16
  box-shadow: 0 1px 0 rgba(0, 0, 0, 0.08);
16
17
  border: 1px solid #e8e8e8;
17
- z-index: 1000;
18
18
  }
19
19
 
20
20
  .sdoc-code-block-hover-menu-container .hover-menu-container .active {
@@ -5,9 +5,11 @@ import context from '../../context';
5
5
  import { EventBus } from '../../basic-sdk';
6
6
  import { EXTERNAL_EVENT } from '../../constants';
7
7
  import { DateUtils } from '../../utils';
8
+ import DraftDropdown from '../draft-dropdown';
8
9
  var DocInfo = function DocInfo(_ref) {
9
10
  var t = _ref.t,
10
11
  isStarred = _ref.isStarred,
12
+ isDraft = _ref.isDraft,
11
13
  isEditMode = _ref.isEditMode;
12
14
  var onInternalLinkClick = useCallback(function () {
13
15
  var eventBus = EventBus.getInstance();
@@ -22,7 +24,7 @@ var DocInfo = function DocInfo(_ref) {
22
24
  var _context$getSettings = context.getSettings(),
23
25
  isShowInternalLink = _context$getSettings.isShowInternalLink,
24
26
  isStarIconShown = _context$getSettings.isStarIconShown;
25
- var docInfo = /*#__PURE__*/React.createElement(React.Fragment, null, isStarIconShown && /*#__PURE__*/React.createElement("button", {
27
+ var docInfo = /*#__PURE__*/React.createElement(React.Fragment, null, isDraft && /*#__PURE__*/React.createElement(DraftDropdown, null), isStarIconShown && /*#__PURE__*/React.createElement("button", {
26
28
  className: "doc-icon sdocfont ".concat(isStarred ? 'sdoc-starred' : 'sdoc-unstarred', " border-0 p-0 bg-transparent"),
27
29
  title: isStarred ? t('Starred') : t('Unstarred'),
28
30
  "aria-label": isStarred ? t('Unstar') : t('Star'),
@@ -0,0 +1,77 @@
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 { EventBus } from '../../basic-sdk';
8
+ import { EXTERNAL_EVENT } from '../../constants';
9
+ import './style.css';
10
+ var DraftDropdownMenu = /*#__PURE__*/function (_React$Component) {
11
+ _inherits(DraftDropdownMenu, _React$Component);
12
+ var _super = _createSuper(DraftDropdownMenu);
13
+ function DraftDropdownMenu(props) {
14
+ var _this;
15
+ _classCallCheck(this, DraftDropdownMenu);
16
+ _this = _super.call(this, props);
17
+ _this.registerEventHandler = function () {
18
+ document.addEventListener('click', _this.onHideDraftDropdownMenu);
19
+ };
20
+ _this.unregisterEventHandler = function () {
21
+ document.removeEventListener('click', _this.onHideDraftDropdownMenu);
22
+ };
23
+ _this.onHideDraftDropdownMenu = function () {
24
+ _this.setState({
25
+ isDropdownMenuOpen: false
26
+ }, function () {
27
+ _this.unregisterEventHandler();
28
+ });
29
+ };
30
+ _this.onToggleClick = function (event) {
31
+ event.stopPropagation();
32
+ event.nativeEvent.stopImmediatePropagation();
33
+ var isDropdownMenuOpen = !_this.state.isDropdownMenuOpen;
34
+ if (isDropdownMenuOpen) {
35
+ _this.setState({
36
+ isDropdownMenuOpen: isDropdownMenuOpen
37
+ }, function () {
38
+ _this.registerEventHandler();
39
+ });
40
+ } else {
41
+ _this.setState({
42
+ isDropdownMenuOpen: isDropdownMenuOpen
43
+ }, function () {
44
+ _this.unregisterEventHandler();
45
+ });
46
+ }
47
+ };
48
+ _this.unmark = function () {
49
+ var eventBus = EventBus.getInstance();
50
+ eventBus.dispatch(EXTERNAL_EVENT.UNMARK_AS_DRAFT);
51
+ };
52
+ _this.state = {
53
+ isDropdownMenuOpen: false
54
+ };
55
+ return _this;
56
+ }
57
+ _createClass(DraftDropdownMenu, [{
58
+ key: "render",
59
+ value: function render() {
60
+ var isDropdownMenuOpen = this.state.isDropdownMenuOpen;
61
+ var t = this.props.t;
62
+ return /*#__PURE__*/React.createElement("div", {
63
+ className: "sdoc-draft-menu"
64
+ }, /*#__PURE__*/React.createElement("span", {
65
+ className: "draft-toggle sdoc-draft-identifier",
66
+ onClick: this.onToggleClick
67
+ }, t('Draft')), isDropdownMenuOpen && /*#__PURE__*/React.createElement("ul", {
68
+ className: "draft-popover list-unstyled m-0"
69
+ }, /*#__PURE__*/React.createElement("li", {
70
+ className: "draft-menu-item",
71
+ onClick: this.unmark
72
+ }, t('Unmark_as_draft'))));
73
+ }
74
+ }]);
75
+ return DraftDropdownMenu;
76
+ }(React.Component);
77
+ export default withTranslation('sdoc-editor')(DraftDropdownMenu);
@@ -0,0 +1,43 @@
1
+ .sdoc-draft-menu {
2
+ position: relative;
3
+ margin-left: 0.5rem;
4
+ }
5
+
6
+ .sdoc-draft-identifier {
7
+ display: inline-block;
8
+ font-size: 14px;
9
+ color: #888;
10
+ background: #eee;
11
+ padding: 0 8px;
12
+ height: 20px;
13
+ line-height: 20px;
14
+ border-radius: 10px;
15
+ cursor: pointer;
16
+ }
17
+
18
+ .sdoc-draft-identifier:hover {
19
+ background: #dbdbdb;
20
+ }
21
+
22
+ .sdoc-draft-menu .draft-popover {
23
+ position: absolute;
24
+ top: 25px;
25
+ left: 0;
26
+ width: 178px;
27
+ background-color: #fff;
28
+ border: 1px solid #e5e6e8;
29
+ border-radius: 2px;
30
+ padding: 8px 0;
31
+ box-shadow: 0 0 10px #e5e6e8;
32
+ z-index: 10;
33
+ }
34
+
35
+ .sdoc-draft-menu .draft-popover .draft-menu-item {
36
+ cursor: pointer;
37
+ width: 100%;
38
+ padding: 4px 12px;
39
+ }
40
+
41
+ .sdoc-draft-menu .draft-popover .draft-menu-item:hover {
42
+ background-color: rgb(245, 245, 245);
43
+ }
@@ -12,12 +12,15 @@ var MoreDropdownMenu = /*#__PURE__*/function (_React$Component) {
12
12
  _classCallCheck(this, MoreDropdownMenu);
13
13
  _this = _super.call(this, props);
14
14
  _this.registerEventHandler = function () {
15
- document.addEventListener('click', _this.onHideMoreDropdownMenu);
15
+ document.addEventListener('click', _this.onHideMoreDropdownMenu, true);
16
16
  };
17
17
  _this.unregisterEventHandler = function () {
18
- document.removeEventListener('click', _this.onHideMoreDropdownMenu);
18
+ document.removeEventListener('click', _this.onHideMoreDropdownMenu, true);
19
19
  };
20
- _this.onHideMoreDropdownMenu = function () {
20
+ _this.onHideMoreDropdownMenu = function (e) {
21
+ var menu = _this.menu;
22
+ var clickIsInMenu = menu && menu.contains(e.target) && menu !== e.target;
23
+ if (clickIsInMenu) return;
21
24
  _this.setState({
22
25
  isDropdownMenuOpen: false
23
26
  }, function () {
@@ -42,6 +45,9 @@ var MoreDropdownMenu = /*#__PURE__*/function (_React$Component) {
42
45
  });
43
46
  }
44
47
  };
48
+ _this.setMenuRef = function (ref) {
49
+ _this.menu = ref;
50
+ };
45
51
  _this.state = {
46
52
  isDropdownMenuOpen: false
47
53
  };
@@ -59,6 +65,7 @@ var MoreDropdownMenu = /*#__PURE__*/function (_React$Component) {
59
65
  }, /*#__PURE__*/React.createElement("span", {
60
66
  className: "sdocfont sdoc-more"
61
67
  })), isDropdownMenuOpen && /*#__PURE__*/React.createElement("div", {
68
+ ref: this.setMenuRef,
62
69
  className: "more-popover"
63
70
  }, this.props.children));
64
71
  }
@@ -48,7 +48,7 @@
48
48
  border-radius: 2px;
49
49
  box-shadow: 0 0 10px #ccc;
50
50
  display: flex;
51
- z-index: 10;
51
+ z-index: 101;
52
52
  }
53
53
 
54
54
  .sdoc-more-menu .more-popover .more-menu-item {
@@ -1,6 +1,8 @@
1
1
  export var EXTERNAL_EVENT = {
2
2
  INTERNAL_LINK_CLICK: 'internal_link_click',
3
3
  TOGGLE_STAR: 'toggle_star',
4
- CANCEL_TABLE_SELECT_RANGE: 'cancel_table_select_range'
4
+ UNMARK_AS_DRAFT: 'unmark_as_draft',
5
+ CANCEL_TABLE_SELECT_RANGE: 'cancel_table_select_range',
6
+ SET_TABLE_SELECT_RANGE: 'set_table_select_range'
5
7
  };
6
8
  export var PAGE_EDIT_AREA_WIDTH = 672; // 672 = 794 - 2[borderLeft + borderRight] - 120[paddingLeft + paddingRight]
@@ -12,6 +12,7 @@ import DiffViewer from './diff-viewer';
12
12
  import '../assets/css/simple-editor.css';
13
13
  var SimpleEditor = function SimpleEditor(_ref) {
14
14
  var isStarred = _ref.isStarred,
15
+ isDraft = _ref.isDraft,
15
16
  t = _ref.t;
16
17
  var _useState = useState(true),
17
18
  _useState2 = _slicedToArray(_useState, 2),
@@ -123,6 +124,7 @@ var SimpleEditor = function SimpleEditor(_ref) {
123
124
  }
124
125
  return /*#__PURE__*/React.createElement(Layout, null, /*#__PURE__*/React.createElement(Header, null, /*#__PURE__*/React.createElement(DocInfo, {
125
126
  isStarred: isStarred,
127
+ isDraft: isDraft,
126
128
  isEditMode: !isShowChanges
127
129
  }), /*#__PURE__*/React.createElement(DocOperations, {
128
130
  isShowChanges: isShowChanges,
@@ -1,4 +1,5 @@
1
1
  import DateUtils from './date-utils';
2
+ import LocalStorage from './local-storage-utils';
2
3
  export var getDirPath = function getDirPath(path) {
3
4
  var dir = path.slice(0, path.lastIndexOf('/'));
4
5
  if (dir === '') {
@@ -39,4 +40,4 @@ export var getErrorMsg = function getErrorMsg(error) {
39
40
  }
40
41
  return errorMsg;
41
42
  };
42
- export { DateUtils };
43
+ export { DateUtils, LocalStorage };
@@ -0,0 +1,49 @@
1
+ import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
2
+ import _createClass from "@babel/runtime/helpers/esm/createClass";
3
+ var LocalStorage = /*#__PURE__*/function () {
4
+ function LocalStorage() {
5
+ _classCallCheck(this, LocalStorage);
6
+ }
7
+ _createClass(LocalStorage, null, [{
8
+ key: "setItem",
9
+ value: function setItem(key, value) {
10
+ return window.localStorage.setItem(key, JSON.stringify(value));
11
+ }
12
+ }, {
13
+ key: "getItem",
14
+ value: function getItem(key, defaultValue) {
15
+ return JSON.parse(window.localStorage.getItem(key)) || defaultValue;
16
+ }
17
+ }, {
18
+ key: "removeItem",
19
+ value: function removeItem(key) {
20
+ return window.localStorage.removeItem(key);
21
+ }
22
+
23
+ //The setExpire and getExpire methods used to satisfy some cases that need to be updated regularly
24
+ }, {
25
+ key: "setExpire",
26
+ value: function setExpire(key, value, expire) {
27
+ var obj = {
28
+ data: value,
29
+ time: Date.now(),
30
+ expire: expire
31
+ };
32
+ this.setItem(key, JSON.stringify(obj));
33
+ }
34
+ }, {
35
+ key: "getExpire",
36
+ value: function getExpire(key) {
37
+ var val = this.getItem(key);
38
+ if (!val) return val;
39
+ val = JSON.parse(val);
40
+ if (Date.now() - val.time > val.expire) {
41
+ this.removeItem(key);
42
+ return null;
43
+ }
44
+ return val.data;
45
+ }
46
+ }]);
47
+ return LocalStorage;
48
+ }();
49
+ export default LocalStorage;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/sdoc-editor",
3
- "version": "0.1.82",
3
+ "version": "0.1.84",
4
4
  "private": false,
5
5
  "description": "This is a sdoc editor",
6
6
  "main": "dist/index.js",
@@ -19,6 +19,7 @@
19
19
  "lodash.throttle": "4.1.1",
20
20
  "randomcolor": "0.6.2",
21
21
  "prismjs": "^1.29.0",
22
+ "react-color": "2.19.3",
22
23
  "react-cookies": "0.1.1",
23
24
  "reactstrap": "8.9.0",
24
25
  "slugid": "3.2.0",
@@ -260,5 +260,50 @@
260
260
  "Start_revise": "Start revise",
261
261
  "Failed_to_execute_operation_on_server": "Failed to execute operation on server",
262
262
  "Start_revise_tip": "Create a temporary document and modify on it, merge it back after reviewing changes",
263
- "Load_doc_content_error": "Load doc content error"
263
+ "Load_doc_content_error": "Load doc content error",
264
+ "Draft": "Draft",
265
+ "Unmark_as_draft": "Unmark as draft",
266
+ "Background_color": "Background color",
267
+ "No_color": "No color",
268
+ "Standard_color": "Standard color",
269
+ "Recently_used": "Recently used",
270
+ "More_color": "More color",
271
+ "White": "White",
272
+ "Black": "Black",
273
+ "Blue_grey": "Blue_grey",
274
+ "Blue": "Blue",
275
+ "Sky_blue": "Sky_blue",
276
+ "Green": "Green",
277
+ "Red": "Red",
278
+ "Orange": "Orange",
279
+ "Yellow": "Yellow",
280
+ "Purple": "Purple",
281
+ "Light_grey_x": "Light grey {{value}}",
282
+ "Dark_grey_x": "Dark grey {{value}}",
283
+ "Light_blue_grey_x": "Light blue grey {{value}}",
284
+ "Light_blue_x": "Light blue {{value}}",
285
+ "Light_sky_blue_x": "Light sky blue {{value}}",
286
+ "Light_green_x": "Light green {{value}}",
287
+ "Light_red_x": "Light red {{value}}",
288
+ "Light_orange_x": "Light orange {{value}}",
289
+ "Light_yellow_x": "Light yellow {{value}}",
290
+ "Light_purple_x": "Light purple {{value}}",
291
+ "Dark_blue_grey_x": "Dark blue grey {{value}}",
292
+ "Dark_blue_x": "Dark blue {{value}}",
293
+ "Dark_sky_blue_x": "Dark sky blue {{value}}",
294
+ "Dark_green_x": "Dark green {{value}}",
295
+ "Dark_red_x": "Dark red {{value}}",
296
+ "Dark_orange_x": "Dark orange {{value}}",
297
+ "Dark_yellow_x": "Dark yellow {{value}}",
298
+ "Dark_purple_x": "Dark purple {{value}}",
299
+ "Standard_dark_red": "Standard dark red",
300
+ "Standard_red": "Standard red",
301
+ "Standard_orange": "Standard orange",
302
+ "Standard_yellow": "Standard yellow",
303
+ "Standard_light_green": "Standard light green",
304
+ "Standard_green": "Standard green",
305
+ "Standard_light_blue": "Standard light blue",
306
+ "Standard_blue": "Standard blue",
307
+ "Standard_dark_blue": "Standard dark blue",
308
+ "Standard_purple": "Standard purple"
264
309
  }