@seafile/seafile-editor 1.0.123 → 1.0.124

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.
@@ -72,7 +72,8 @@ const Outline = _ref => {
72
72
  };
73
73
  scrollRef.current.addEventListener('scroll', updateScrollLeft);
74
74
  return () => {
75
- scrollRef.current.removeEventListener('scroll', updateScrollLeft);
75
+ var _scrollRef$current;
76
+ (_scrollRef$current = scrollRef.current) === null || _scrollRef$current === void 0 ? void 0 : _scrollRef$current.removeEventListener('scroll', updateScrollLeft);
76
77
  };
77
78
  }, [scrollRef]);
78
79
  (0, _react.useEffect)(() => {
@@ -18,8 +18,8 @@ var _core = require("../../extension/core");
18
18
  var _useScrollContext = require("../../hooks/use-scroll-context");
19
19
  var _useInsertImage = _interopRequireDefault(require("../../hooks/use-insert-image"));
20
20
  var _common = require("../../utils/common");
21
- var _outline = _interopRequireWildcard(require("../../containers/outline"));
22
- var _eventTypes = require("../../constants/event-types");
21
+ var _outline = _interopRequireDefault(require("../../containers/outline"));
22
+ var _useContainerStyle = _interopRequireDefault(require("../../hooks/use-container-style"));
23
23
  require("./style.css");
24
24
  const isMacOS = (0, _common.isMac)();
25
25
  function SlateEditor(_ref) {
@@ -32,9 +32,11 @@ function SlateEditor(_ref) {
32
32
  isSupportInsertSeafileImage,
33
33
  children
34
34
  } = _ref;
35
- const [slateValue, setSlateValue] = (0, _react.useState)(value);
36
- const [containerStyle, setContainerStyle] = (0, _react.useState)({});
37
35
  const scrollRef = (0, _react.useRef)(null);
36
+ const [slateValue, setSlateValue] = (0, _react.useState)(value);
37
+ const {
38
+ containerStyle
39
+ } = (0, _useContainerStyle.default)(scrollRef);
38
40
  const editor = (0, _react.useMemo)(() => (0, _withPropsEditor.default)(_extension.baseEditor, {
39
41
  editorApi,
40
42
  onSave
@@ -44,34 +46,6 @@ function SlateEditor(_ref) {
44
46
  }, [editor]);
45
47
  (0, _useInsertImage.default)(editor);
46
48
  const decorate = (0, _extension.useHighlight)(editor);
47
-
48
- // Adjust article container margin-left value according to isShown of the outline and width of window
49
- const handleWindowResize = (0, _react.useCallback)(() => {
50
- const rect = scrollRef.current.getBoundingClientRect();
51
- const articleElement = document.querySelector('.article');
52
- const articleRect = articleElement ? articleElement.getBoundingClientRect() : null;
53
- const isOutlineShow = (0, _outline.getOutlineSetting)();
54
- if (isOutlineShow && articleRect && (rect.width - articleRect.width) / 2 < 280) {
55
- setContainerStyle({
56
- marginLeft: 280
57
- });
58
- } else {
59
- setContainerStyle({});
60
- }
61
- }, []);
62
- (0, _react.useEffect)(() => {
63
- handleWindowResize();
64
- window.addEventListener('resize', handleWindowResize);
65
- const eventBus = _eventBus.default.getInstance();
66
- const unsubscribeOutline = eventBus.subscribe(_eventTypes.INTERNAL_EVENTS.OUTLINE_STATE_CHANGED, handleWindowResize);
67
- const unsubscribeResizeArticle = eventBus.subscribe(_eventTypes.INTERNAL_EVENTS.RESIZE_ARTICLE, handleWindowResize);
68
- return () => {
69
- window.removeEventListener('resize', handleWindowResize);
70
- unsubscribeOutline();
71
- unsubscribeResizeArticle();
72
- };
73
- // eslint-disable-next-line react-hooks/exhaustive-deps
74
- }, []);
75
49
  const onChange = (0, _react.useCallback)(value => {
76
50
  setSlateValue(value);
77
51
  if (editor.forceNormalize) return;
@@ -134,7 +108,7 @@ function SlateEditor(_ref) {
134
108
  }
135
109
  }, [editor, focusFirstNode]);
136
110
  return /*#__PURE__*/_react.default.createElement("div", {
137
- className: "sf-slate-editor-container"
111
+ className: "sf-slate-editor-container ".concat(_common.isMobile && 'mobile')
138
112
  }, /*#__PURE__*/_react.default.createElement(_extension.Toolbar, {
139
113
  editor: editor,
140
114
  isRichEditor: true,
@@ -156,7 +130,7 @@ function SlateEditor(_ref) {
156
130
  className: "sf-slate-scroll-container ".concat(isMacOS ? '' : 'isWin')
157
131
  }, /*#__PURE__*/_react.default.createElement("div", {
158
132
  className: "sf-slate-article-content"
159
- }, /*#__PURE__*/_react.default.createElement(_outline.default, {
133
+ }, !_common.isMobile && /*#__PURE__*/_react.default.createElement(_outline.default, {
160
134
  editor: editor
161
135
  }), /*#__PURE__*/_react.default.createElement("div", {
162
136
  className: "sf-slate-article-container",
@@ -4,7 +4,7 @@
4
4
  flex-direction: column;
5
5
  min-height: 0;
6
6
  min-width: 0;
7
- position:relative;
7
+ position: relative;
8
8
  }
9
9
 
10
10
  .sf-slate-editor-container .sf-slate-editor-toolbar {
@@ -18,6 +18,11 @@
18
18
  border-bottom: 1px solid #e5e6e8;
19
19
  position: relative;
20
20
  z-index: 102;
21
+ overflow-x: auto;
22
+ }
23
+
24
+ .sf-slate-editor-container .sf-slate-editor-toolbar::-webkit-scrollbar {
25
+ display: none;
21
26
  }
22
27
 
23
28
  .sf-slate-editor-container .sf-slate-editor-content {
@@ -42,7 +47,7 @@
42
47
  position: relative;
43
48
  }
44
49
 
45
- .sf-slate-editor-container .sf-slate-scroll-container.isWin::-webkit-scrollbar{
50
+ .sf-slate-editor-container .sf-slate-scroll-container.isWin::-webkit-scrollbar {
46
51
  width: 8px;
47
52
  height: 8px;
48
53
  }
@@ -56,7 +61,7 @@
56
61
  border-radius: 10px;
57
62
  }
58
63
 
59
- .sf-slate-scroll-container .sf-slate-article-content{
64
+ .sf-slate-scroll-container .sf-slate-article-content {
60
65
  display: flex;
61
66
  position: absolute;
62
67
  min-width: 1100px;
@@ -98,51 +103,19 @@
98
103
  outline: none;
99
104
  }
100
105
 
101
- @media (max-width: 991.8px) {
102
- .sf-slate-editor-toolbar {
103
- overflow-x: auto;
104
- padding-right: 40px !important;
105
- justify-content: flex-start !important;
106
- }
107
-
108
- .sf-slate-editor-toolbar::-webkit-scrollbar{
109
- display: none;
110
- }
111
-
112
- .sf-slate-editor-toolbar .sf-slate-article-info-control,
113
- .sf-slate-editor-toolbar .sf-slate-help-info-control {
114
- right: 0;
115
- padding: 0 20px;
116
- height: 43px;
117
- align-items: center;
118
- background-color: #fcfcfc;
119
- position: fixed;
120
- }
121
-
122
- .sf-slate-article-container {
123
- width: 100%;
124
- }
125
-
126
- .sf-slate-article-container .article {
127
- margin: 20px !important;
128
- padding: 20px 30px;
129
- }
106
+ .sf-slate-editor-container.mobile .sf-slate-scroll-container .sf-slate-article-content {
107
+ min-width: 0;
108
+ min-height: 0;
130
109
  }
131
110
 
132
- @media (max-width: 768px) {
133
- .sf-slate-editor-container .sf-slate-article-container {
134
- flex: 1;
135
- position: relative;
136
- max-width: 950px;
137
- min-width: auto;
138
- margin: 0 auto;
139
- padding-top: 0;
140
- padding-bottom: 0;
141
- }
111
+ .sf-slate-editor-container.mobile .sf-slate-article-container {
112
+ min-width: 0;
113
+ padding-top: 0;
114
+ padding-bottom: 0;
115
+ }
142
116
 
143
- .sf-slate-article-container .article {
144
- margin: 0 !important;
145
- padding: 10px 15px !important;
146
- border: 0 !important;
147
- }
117
+ .sf-slate-editor-container.mobile .sf-slate-article-container .article {
118
+ margin: 0 !important;
119
+ padding: 10px 15px !important;
120
+ border: 0 !important;
148
121
  }
@@ -13,6 +13,7 @@ var _outline = _interopRequireDefault(require("../../containers/outline"));
13
13
  var _useScrollContext = require("../../hooks/use-scroll-context");
14
14
  var _userLinkClick = _interopRequireDefault(require("../../hooks/user-link-click"));
15
15
  var _common = require("../../utils/common");
16
+ var _useContainerStyle = _interopRequireDefault(require("../../hooks/use-container-style"));
16
17
  require("./style.css");
17
18
  const isMacOS = (0, _common.isMac)();
18
19
  function SlateViewer(_ref) {
@@ -23,6 +24,9 @@ function SlateViewer(_ref) {
23
24
  onLinkClick
24
25
  } = _ref;
25
26
  const scrollRef = (0, _react.useRef)(null);
27
+ const {
28
+ containerStyle
29
+ } = (0, _useContainerStyle.default)(scrollRef);
26
30
  const editor = (0, _react.useMemo)(() => {
27
31
  return (0, _extension.createSlateEditor)();
28
32
  }, []);
@@ -41,7 +45,9 @@ function SlateViewer(_ref) {
41
45
  };
42
46
  // eslint-disable-next-line react-hooks/exhaustive-deps
43
47
  }, []);
44
- return /*#__PURE__*/_react.default.createElement(_slateReact.Slate, {
48
+ return /*#__PURE__*/_react.default.createElement("div", {
49
+ className: "sf-slate-viewer-container ".concat(_common.isMobile && 'mobile')
50
+ }, /*#__PURE__*/_react.default.createElement(_slateReact.Slate, {
45
51
  editor: editor,
46
52
  initialValue: value
47
53
  }, /*#__PURE__*/_react.default.createElement(_useScrollContext.ScrollContext.Provider, {
@@ -52,7 +58,12 @@ function SlateViewer(_ref) {
52
58
  ref: scrollRef,
53
59
  className: "sf-slate-viewer-scroll-container ".concat(isMacOS ? '' : 'isWin', " ").concat(isShowOutline ? 'outline' : '')
54
60
  }, /*#__PURE__*/_react.default.createElement("div", {
55
- className: "sf-slate-viewer-article-container"
61
+ className: "sf-slate-article-content"
62
+ }, isShowOutline && !_common.isMobile && /*#__PURE__*/_react.default.createElement(_outline.default, {
63
+ editor: editor
64
+ }), /*#__PURE__*/_react.default.createElement("div", {
65
+ className: "sf-slate-viewer-article-container",
66
+ style: containerStyle
56
67
  }, /*#__PURE__*/_react.default.createElement("div", {
57
68
  className: "article"
58
69
  }, /*#__PURE__*/_react.default.createElement(_extension.SetNodeToDecorations, null), /*#__PURE__*/_react.default.createElement(_slateReact.Editable, {
@@ -60,9 +71,5 @@ function SlateViewer(_ref) {
60
71
  decorate: decorate,
61
72
  renderElement: _extension.renderElement,
62
73
  renderLeaf: _extension.renderLeaf
63
- }))), isShowOutline && /*#__PURE__*/_react.default.createElement("div", {
64
- className: "sf-slate-viewer-outline"
65
- }, /*#__PURE__*/_react.default.createElement(_outline.default, {
66
- editor: editor
67
- })))));
74
+ }))))))));
68
75
  }
@@ -1,3 +1,12 @@
1
+ .sf-slate-viewer-container {
2
+ flex: 1;
3
+ display: flex;
4
+ flex-direction: column;
5
+ min-height: 0;
6
+ min-width: 0;
7
+ position: relative;
8
+ }
9
+
1
10
  .sf-slate-viewer-scroll-container {
2
11
  flex: 1;
3
12
  display: flex;
@@ -8,7 +17,7 @@
8
17
  padding: 30px 0 15px;
9
18
  }
10
19
 
11
- .sf-slate-viewer-scroll-container.isWin::-webkit-scrollbar{
20
+ .sf-slate-viewer-scroll-container.isWin::-webkit-scrollbar {
12
21
  width: 8px;
13
22
  height: 8px;
14
23
  }
@@ -22,27 +31,19 @@
22
31
  border-radius: 10px;
23
32
  }
24
33
 
25
- .sf-slate-viewer-scroll-container .sf-slate-viewer-article-container {
34
+ .sf-slate-viewer-scroll-container .sf-slate-article-content {
26
35
  flex: 1;
27
- margin: 0 auto 15px;
36
+ display: flex;
28
37
  }
29
38
 
30
39
  .sf-slate-viewer-scroll-container.outline .sf-slate-viewer-article-container {
31
- margin: 0 340px 15px 40px;
32
- }
33
-
34
- .sf-slate-viewer-scroll-container .sf-slate-viewer-outline {
35
- height: 80%;
36
- overflow-y: hidden;
37
- padding-right: 1rem;
38
- position: fixed;
39
- right: 0;
40
- top: 97px;
41
- width: 300px;
42
- }
43
-
44
- .sf-slate-viewer-scroll-container .sf-slate-viewer-outline:hover {
45
- overflow-y: auto;
40
+ flex: 1;
41
+ position: relative;
42
+ max-width: 950px;
43
+ min-width: 400px;
44
+ margin: 0 auto;
45
+ width: 794px;
46
+ top: 0px;
46
47
  }
47
48
 
48
49
  .sf-slate-viewer-scroll-container .article {
@@ -64,23 +65,24 @@
64
65
  color: #212529;
65
66
  }
66
67
 
67
- @media (max-width: 991.98px) {
68
- .sf-slate-viewer-article-container {
69
- padding: 0 10px;
70
- width: 100%;
71
- margin: 0 !important;
72
- }
73
-
74
- .sf-slate-viewer-outline {
75
- display: none !important;
76
- }
68
+ .sf-slate-viewer-container.mobile .sf-slate-article-content {
69
+ min-width: 0;
70
+ min-height: 0;
71
+ width: 100%;
77
72
  }
78
73
 
79
- @media (max-width: 768px) {
80
- .sf-slate-viewer-article-container .article {
81
- margin: 0 !important;
82
- padding: 20px !important;
83
- }
74
+ .sf-slate-viewer-container.mobile .sf-slate-viewer-article-container {
75
+ min-width: 0;
76
+ padding-top: 0;
77
+ padding-bottom: 0;
84
78
  }
85
79
 
80
+ .sf-slate-viewer-container.mobile .sf-slate-viewer-article-container .article {
81
+ margin: 0 !important;
82
+ padding: 10px 15px !important;
83
+ border: 0 !important;
84
+ }
86
85
 
86
+ .sf-slate-viewer-container .sf-editor-outline-wrapper {
87
+ top: 130px;
88
+ }
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _react = require("react");
9
+ var _outline = require("../containers/outline");
10
+ var _common = require("../utils/common");
11
+ var _eventBus = _interopRequireDefault(require("../utils/event-bus"));
12
+ var _eventTypes = require("../constants/event-types");
13
+ const useContainerStyle = scrollRef => {
14
+ const [containerStyle, setContainerStyle] = (0, _react.useState)({});
15
+
16
+ // Adjust article container margin-left value according to isShown of the outline and width of window
17
+ const handleWindowResize = (0, _react.useCallback)(() => {
18
+ const rect = scrollRef.current.getBoundingClientRect();
19
+ const articleElement = document.querySelector('.article');
20
+ const articleRect = articleElement ? articleElement.getBoundingClientRect() : null;
21
+ const isOutlineShow = (0, _outline.getOutlineSetting)();
22
+ if (isOutlineShow && articleRect && (rect.width - articleRect.width) / 2 < 280) {
23
+ setContainerStyle({
24
+ marginLeft: 280
25
+ });
26
+ } else {
27
+ setContainerStyle({});
28
+ }
29
+ }, [scrollRef]);
30
+ (0, _react.useEffect)(() => {
31
+ if (_common.isMobile) return;
32
+ handleWindowResize();
33
+ window.addEventListener('resize', handleWindowResize);
34
+ const eventBus = _eventBus.default.getInstance();
35
+ const unsubscribeOutline = eventBus.subscribe(_eventTypes.INTERNAL_EVENTS.OUTLINE_STATE_CHANGED, handleWindowResize);
36
+ const unsubscribeResizeArticle = eventBus.subscribe(_eventTypes.INTERNAL_EVENTS.RESIZE_ARTICLE, handleWindowResize);
37
+ return () => {
38
+ window.removeEventListener('resize', handleWindowResize);
39
+ unsubscribeOutline();
40
+ unsubscribeResizeArticle();
41
+ };
42
+ // eslint-disable-next-line react-hooks/exhaustive-deps
43
+ }, []);
44
+ return {
45
+ containerStyle
46
+ };
47
+ };
48
+ var _default = exports.default = useContainerStyle;
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.isUrl = exports.isMac = exports.isImage = exports.isDocumentEmpty = exports.IMAGE_TYPES = void 0;
7
+ exports.isUrl = exports.isMobile = exports.isMac = exports.isImage = exports.isDocumentEmpty = exports.IMAGE_TYPES = void 0;
8
8
  var _isUrl = _interopRequireDefault(require("is-url"));
9
9
  var _slate = require("slate");
10
10
  const isMac = () => {
@@ -42,4 +42,5 @@ const isDocumentEmpty = editor => {
42
42
  if (hasVoidNode) return false;
43
43
  return true;
44
44
  };
45
- exports.isDocumentEmpty = isDocumentEmpty;
45
+ exports.isDocumentEmpty = isDocumentEmpty;
46
+ const isMobile = exports.isMobile = typeof window !== 'undefined' && (window.innerWidth < 768 || navigator.userAgent.toLowerCase().match(/(ipod|ipad|iphone|android|coolpad|mmp|smartphone|midp|wap|xoom|symbian|j2me|blackberry|wince)/i) != null);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/seafile-editor",
3
- "version": "1.0.123",
3
+ "version": "1.0.124",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -86,7 +86,7 @@
86
86
  ]
87
87
  },
88
88
  "dependencies": {
89
- "@seafile/react-image-lightbox": "2.0.5",
89
+ "@seafile/react-image-lightbox": "3.0.1",
90
90
  "classnames": "2.3.2",
91
91
  "deep-copy": "1.4.2",
92
92
  "deepmerge": "4.3.1",
@@ -14,7 +14,7 @@
14
14
  />
15
15
  <missing-glyph />
16
16
 
17
- <glyph glyph-name="outline" unicode="&#59015;" d="M64 800h512c35.2 0 64-28.8 64-64s-28.8-64-64-64H64c-35.2 0-64 28.8-64 64s28.8 64 64 64z m934.4-444.8l-12.8-12.8-172.8-172.8c-25.6-25.6-64-25.6-89.6 0-25.6 25.6-25.6 64 0 89.6l134.4 134.4L723.2 528c-25.6 25.6-25.6 64 0 89.6 25.6 25.6 64 25.6 89.6 0l172.8-172.8 9.6-9.6c12.8-12.8 19.2-25.6 19.2-41.6v-3.2c0-12.8-9.6-28.8-16-35.2zM64 448h800c35.2 0 64-28.8 64-64s-28.8-64-64-64H64c-35.2 0-64 28.8-64 64s28.8 64 64 64z m0-352h512c35.2 0 64-28.8 64-64s-28.8-64-64-64H64c-35.2 0-64 28.8-64 64s28.8 64 64 64z" horiz-adv-x="1024" />
17
+ <glyph glyph-name="outline" unicode="&#58921;" d="M0 800h128v-96H0z m192-368h128v-96H192z m320 0h512v-96H512zM320 800h704v-96H320zM0 64h128v-96H0z m320 0h704v-96H320z" horiz-adv-x="1024" />
18
18
 
19
19
  <glyph glyph-name="description" unicode="&#58919;" d="M512 864C249.6 864 32 649.6 32 384s217.6-480 480-480 480 214.4 480 480S777.6 864 512 864z m-32-755.2c-19.2 0-35.2 16-35.2 35.2V419.2c0 19.2 16 35.2 35.2 35.2h67.2c19.2 0 35.2-16 35.2-35.2V144c0-19.2-16-35.2-35.2-35.2H480z m0 412.8c-19.2 0-35.2 16-35.2 35.2V624c0 19.2 16 35.2 35.2 35.2h67.2c19.2 0 35.2-16 35.2-35.2v-67.2c0-19.2-16-35.2-35.2-35.2H480z" horiz-adv-x="1024" />
20
20
 
@@ -1,14 +1,14 @@
1
1
  @font-face {
2
2
  font-family: "iconfont";
3
3
  /* Project id 4375832 */
4
- src: url('./seafile-editor-font/iconfont.eot?t=1726105923189');
4
+ src: url('./seafile-editor-font/iconfont.eot?t=1728893172756');
5
5
  /* IE9 */
6
- src: url('./seafile-editor-font/iconfont.eot?t=1726105923189#iefix') format('embedded-opentype'),
6
+ src: url('./seafile-editor-font/iconfont.eot?t=1728893172756#iefix') format('embedded-opentype'),
7
7
  /* IE6-IE8 */
8
- url('./seafile-editor-font/iconfont.woff2?t=1726105923189') format('woff2'),
9
- url('./seafile-editor-font/iconfont.woff?t=1726105923189') format('woff'),
10
- url('./seafile-editor-font/iconfont.ttf?t=1726105923189') format('truetype'),
11
- url('./seafile-editor-font/iconfont.svg?t=1726105923189#iconfont') format('svg');
8
+ url('./seafile-editor-font/iconfont.woff2?t=1728893172756') format('woff2'),
9
+ url('./seafile-editor-font/iconfont.woff?t=1728893172756') format('woff'),
10
+ url('./seafile-editor-font/iconfont.ttf?t=1728893172756') format('truetype'),
11
+ url('./seafile-editor-font/iconfont.svg?t=1728893172756#iconfont') format('svg');
12
12
  }
13
13
 
14
14
  .iconfont {
@@ -20,7 +20,7 @@
20
20
  }
21
21
 
22
22
  .icon-outline:before {
23
- content: "\e687";
23
+ content: "\e629";
24
24
  }
25
25
 
26
26
  .icon-description:before {