@seafile/sdoc-editor 3.0.36 → 3.0.38

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.
@@ -6,10 +6,15 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports["default"] = void 0;
8
8
  var _react = _interopRequireDefault(require("react"));
9
+ var _reactI18next = require("react-i18next");
9
10
  var _reactImageLightbox = _interopRequireDefault(require("@seafile/react-image-lightbox"));
11
+ var _commonUtils = require("../../utils/common-utils");
10
12
  require("@seafile/react-image-lightbox/style.css");
11
13
  function CommentImagePreviewer(props) {
14
+ var _useTranslation = (0, _reactI18next.useTranslation)('sdoc-editor'),
15
+ t = _useTranslation.t;
12
16
  var mainSrc = props.imageUrl;
17
+ var shortcutMain = (0, _commonUtils.isMac)() ? '⌘' : 'Ctrl';
13
18
  var imageTitle = '';
14
19
  try {
15
20
  imageTitle = mainSrc ? decodeURI(mainSrc.slice(mainSrc.lastIndexOf('/') + 1)) : '';
@@ -33,7 +38,9 @@ function CommentImagePreviewer(props) {
33
38
  onMoveNextRequest: function onMoveNextRequest() {},
34
39
  reactModalProps: {
35
40
  shouldReturnFocusAfterClose: false
36
- }
41
+ },
42
+ zoomInTip: t('Enlarge: {Ctrl} + Wheel').replace('{Ctrl}', shortcutMain),
43
+ zoomOutTip: t('Shrink: {Ctrl} + Wheel').replace('{Ctrl}', shortcutMain)
37
44
  });
38
45
  }
39
46
  var _default = exports["default"] = CommentImagePreviewer;
@@ -174,14 +174,14 @@
174
174
  }
175
175
 
176
176
  .sdoc-comment-list-container .comment-header .comment-author__info .name {
177
- color: #1f1f1f;
177
+ color: #212529;
178
178
  font-size: 14px;
179
179
  line-height: 20px;
180
180
  font-weight: 500;
181
181
  }
182
182
 
183
183
  .sdoc-comment-list-container .comment-header .comment-author__info .time {
184
- color: #444746;
184
+ color: #666666;
185
185
  font-size: 12px;
186
186
  line-height: 16px;
187
187
  display: inline-flex;
@@ -221,7 +221,7 @@
221
221
  align-items: center;
222
222
  justify-content: center;
223
223
  background-color: #fff;
224
- color: rgb(70, 77, 90);
224
+ color: #666666;
225
225
  overflow: hidden;
226
226
  border-radius: 2px;
227
227
  }
@@ -36,7 +36,7 @@
36
36
  width: 12px;
37
37
  line-height: 12px;
38
38
  font-size: 12px !important;
39
- margin-top: 5px;
39
+ margin-top: 3px;
40
40
  }
41
41
 
42
42
  .sdoc-color-menu .last-used-color {
@@ -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.updateFileView = exports.insertFileView = exports.getWikiSettings = exports.getFileUrl = exports.getAccessibleRepos = exports.genFileViewNode = void 0;
7
+ exports.updateFileView = exports.insertFileView = exports.getWikiSettings = exports.getFileUrl = exports.getAccessibleRepos = exports.genFileViewNode = exports.calculateSize = void 0;
8
8
  var _slate = require("@seafile/slate");
9
9
  var _slateReact = require("@seafile/slate-react");
10
10
  var _slugid = _interopRequireDefault(require("slugid"));
@@ -74,4 +74,16 @@ var updateFileView = exports.updateFileView = function updateFileView(newData, e
74
74
  }, {
75
75
  at: nodePath
76
76
  });
77
+ };
78
+ var calculateSize = exports.calculateSize = function calculateSize(e, position) {
79
+ var clientX = e.clientX,
80
+ clientY = e.clientY;
81
+ var left = position.left,
82
+ top = position.top;
83
+ var rightWidth = clientX - left;
84
+ var bottomHeight = clientY - top;
85
+ return {
86
+ width: rightWidth < 300 ? 300 : rightWidth,
87
+ height: bottomHeight < 200 ? 200 : bottomHeight
88
+ };
77
89
  };
@@ -2,14 +2,6 @@
2
2
  position: relative;
3
3
  display: flex;
4
4
  flex-direction: column;
5
- border: 2px;
6
- border: 2px solid #eee;
7
- border-radius: 4px;
8
- }
9
-
10
- .sdoc-file-view-container.is-selected {
11
- border: 2px solid rgb(0, 123, 255);
12
- border-radius: 4px;
13
5
  }
14
6
 
15
7
  .sdoc-file-view-container .sdoc-file-view-title {
@@ -27,9 +19,30 @@
27
19
 
28
20
  .sdoc-file-view-container .sdoc-file-view-content {
29
21
  position: relative;
22
+ border: 2px solid #eee;
23
+ border-radius: 4px;
24
+ }
25
+
26
+ .sdoc-file-view-container .sdoc-file-view-content.is-selected {
27
+ border: 2px solid rgb(0, 123, 255);
28
+ border-radius: 4px;
29
+ }
30
+
31
+ .sdoc-file-view-container .sdoc-file-view-content {
32
+ height: 400;
30
33
  }
31
34
 
32
- .sdoc-file-view-container .sdoc-file-view-content,
33
35
  .sdoc-file-view-container .sdoc-file-view-content .sea-metadata {
34
- height: 400px;
36
+ height: 396px;
37
+ }
38
+
39
+ .sdoc-file-view-container .sdoc-file-view-content .file-view-resizer {
40
+ width: 10px;
41
+ height: 10px;
42
+ position: absolute;
43
+ right: -5px;
44
+ bottom: -5px;
45
+ background-color: #007bff;
46
+ border: 1px solid #fff;
47
+ cursor: se-resize;
35
48
  }
@@ -7,7 +7,9 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.renderFileView = void 0;
9
9
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
10
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
10
11
  var _react = _interopRequireWildcard(require("react"));
12
+ var _reactI18next = require("react-i18next");
11
13
  var _seafileDatabase = require("@seafile/seafile-database");
12
14
  var _slateReact = require("@seafile/slate-react");
13
15
  var _classnames = _interopRequireDefault(require("classnames"));
@@ -25,17 +27,34 @@ var FileView = function FileView(_ref) {
25
27
  var data = element.data;
26
28
  var editor = (0, _slateReact.useSlateStatic)();
27
29
  var isSelected = (0, _slateReact.useSelected)();
30
+ var _useReadOnly = (0, _slateReact.useReadOnly)(),
31
+ readOnly = _useReadOnly.readOnly;
32
+ var wrapperRef = (0, _react.useRef)(null);
33
+ var resizerRef = (0, _react.useRef)(null);
34
+ var databaseRef = (0, _react.useRef)(null);
35
+ var _useState = (0, _react.useState)(false),
36
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
37
+ isResizing = _useState2[0],
38
+ setIsResizing = _useState2[1];
39
+ var _useState3 = (0, _react.useState)(null),
40
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
41
+ movingSize = _useState4[0],
42
+ setMovingSize = _useState4[1];
43
+ var _useTranslation = (0, _reactI18next.useTranslation)('sdoc-editor'),
44
+ t = _useTranslation.t;
28
45
  var viewSettings = (0, _react.useMemo)(function () {
29
46
  var settings = _context["default"].getFileViewSetting();
30
47
  var viewSettings = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, settings), {}, {
31
48
  repoID: data.link_repo_id,
32
49
  view_data: {
33
50
  view_id: data.view_id,
34
- wiki_id: data.wiki_id
51
+ wiki_id: data.wiki_id,
52
+ height: data.height,
53
+ width: data.width
35
54
  }
36
55
  });
37
56
  return viewSettings;
38
- }, [data.link_repo_id, data.view_id, data.wiki_id]);
57
+ }, [data.height, data.link_repo_id, data.view_id, data.width, data.wiki_id]);
39
58
  (0, _react.useEffect)(function () {
40
59
  var copyContent = _localStorageUtils["default"].getItem(_constants.RECENT_COPY_CONTENT);
41
60
  var wikiId = _context["default"].getSetting('wikiId');
@@ -57,21 +76,108 @@ var FileView = function FileView(_ref) {
57
76
  }
58
77
  // eslint-disable-next-line react-hooks/exhaustive-deps
59
78
  }, []);
79
+ var registerEvent = (0, _react.useCallback)(function (eventList) {
80
+ eventList.forEach(function (element) {
81
+ document.addEventListener(element.eventName, element.event);
82
+ });
83
+ }, []);
84
+ var unregisterEvent = (0, _react.useCallback)(function (eventList) {
85
+ eventList.forEach(function (element) {
86
+ document.removeEventListener(element.eventName, element.event);
87
+ });
88
+ }, []);
89
+ var onMouseMove = (0, _react.useCallback)(function (event) {
90
+ event.preventDefault();
91
+ event.stopPropagation();
92
+ var wrapperElement = wrapperRef.current;
93
+ var _wrapperElement$getBo = wrapperElement.getBoundingClientRect(),
94
+ left = _wrapperElement$getBo.left,
95
+ right = _wrapperElement$getBo.right,
96
+ top = _wrapperElement$getBo.top,
97
+ bottom = _wrapperElement$getBo.bottom;
98
+ var size = (0, _helpers.calculateSize)(event, {
99
+ left: left,
100
+ right: right,
101
+ top: top,
102
+ bottom: bottom
103
+ });
104
+ var style = wrapperElement.style;
105
+ style.width = size.width + 'px';
106
+ style.height = size.height + 'px';
107
+ var databaseStyle = databaseRef.current.style;
108
+ databaseStyle.width = size.width - 4 + 'px';
109
+ databaseStyle.height = size.height - 4 + 'px';
110
+ setMovingSize(size);
111
+ }, []);
112
+ var onResizeEnd = (0, _react.useCallback)(function (event) {
113
+ event.preventDefault();
114
+ event.stopPropagation();
115
+ unregisterEvent([{
116
+ 'eventName': 'mousemove',
117
+ 'event': onMouseMove
118
+ }, {
119
+ 'eventName': 'mouseup',
120
+ 'event': onResizeEnd
121
+ }]);
122
+ var style = wrapperRef.current.style;
123
+ var newData = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, element.data), {}, {
124
+ width: parseFloat(style.width),
125
+ height: parseFloat(style.height)
126
+ });
127
+ (0, _helpers.updateFileView)(newData, editor, element);
128
+ // Reset hover menu position
129
+ setTimeout(function () {
130
+ setIsResizing(false);
131
+ }, 100);
132
+ // eslint-disable-next-line react-hooks/exhaustive-deps
133
+ }, [editor, element.data, wrapperRef.current]);
134
+ var onResizeStart = (0, _react.useCallback)(function (event) {
135
+ event.preventDefault();
136
+ event.stopPropagation();
137
+ setIsResizing(true);
138
+ registerEvent([{
139
+ 'eventName': 'mousemove',
140
+ 'event': onMouseMove
141
+ }, {
142
+ 'eventName': 'mouseup',
143
+ 'event': onResizeEnd
144
+ }]);
145
+ }, [onMouseMove, onResizeEnd, registerEvent]);
146
+ var style = (0, _react.useMemo)(function () {
147
+ var width = data.width,
148
+ height = data.height;
149
+ if (width && height) {
150
+ return {
151
+ width: width,
152
+ height: height
153
+ };
154
+ }
155
+ return null;
156
+ }, [data]);
60
157
  return /*#__PURE__*/_react["default"].createElement("div", Object.assign({
61
158
  "data-id": element.id
62
159
  }, attributes, {
63
- className: (0, _classnames["default"])('sdoc-file-view-container', {
64
- 'is-selected': isSelected
65
- }),
160
+ className: "sdoc-file-view-container",
66
161
  contentEditable: "false",
67
162
  suppressContentEditableWarning: true
68
163
  }), /*#__PURE__*/_react["default"].createElement("div", {
69
164
  className: "sdoc-file-view-title"
70
165
  }, data.view_name), /*#__PURE__*/_react["default"].createElement("div", {
71
- className: "sdoc-file-view-content"
166
+ className: (0, _classnames["default"])('sdoc-file-view-content', {
167
+ 'is-selected': isSelected
168
+ }),
169
+ ref: wrapperRef,
170
+ style: style
72
171
  }, /*#__PURE__*/_react["default"].createElement(_seafileDatabase.Database, {
73
- settings: viewSettings
74
- })), children);
172
+ settings: viewSettings,
173
+ ref: databaseRef
174
+ }), !readOnly && isSelected && /*#__PURE__*/_react["default"].createElement("span", {
175
+ className: "file-view-resizer",
176
+ ref: resizerRef,
177
+ onMouseDown: onResizeStart
178
+ }), isResizing && movingSize && /*#__PURE__*/_react["default"].createElement("span", {
179
+ className: "image-size"
180
+ }, /*#__PURE__*/_react["default"].createElement("span", null, t('Width'), ':', parseInt(movingSize.width)), /*#__PURE__*/_react["default"].createElement("span", null, "\xA0\xA0"), /*#__PURE__*/_react["default"].createElement("span", null, t('Height'), ':', parseInt(movingSize.height)))), children);
75
181
  };
76
182
  var renderFileView = exports.renderFileView = function renderFileView(props) {
77
183
  return /*#__PURE__*/_react["default"].createElement(FileView, props);
@@ -13,6 +13,7 @@ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/inhe
13
13
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/defineProperty"));
14
14
  var _react = _interopRequireDefault(require("react"));
15
15
  var _reactImageLightbox = _interopRequireDefault(require("@seafile/react-image-lightbox"));
16
+ var _commonUtils = require("../../../../utils/common-utils");
16
17
  var _helpers = require("../helpers");
17
18
  require("@seafile/react-image-lightbox/style.css");
18
19
  var ImagePreviewer = /*#__PURE__*/function (_React$Component) {
@@ -73,6 +74,7 @@ var ImagePreviewer = /*#__PURE__*/function (_React$Component) {
73
74
  var imageIndex = this.state.imageIndex;
74
75
  var imageItemsLength = this.images.length;
75
76
  var mainSrc = this.images[imageIndex] || '';
77
+ var shortcutMain = (0, _commonUtils.isMac)() ? '⌘' : 'Ctrl';
76
78
  var imageTitle = '';
77
79
  try {
78
80
  imageTitle = mainSrc ? decodeURI(mainSrc.slice(mainSrc.lastIndexOf('/') + 1)) : '';
@@ -104,7 +106,9 @@ var ImagePreviewer = /*#__PURE__*/function (_React$Component) {
104
106
  onMoveNextRequest: this.moveToNextImage,
105
107
  reactModalProps: {
106
108
  shouldReturnFocusAfterClose: false
107
- }
109
+ },
110
+ zoomInTip: this.props.t('Enlarge: {Ctrl} + Wheel').replace('{Ctrl}', shortcutMain),
111
+ zoomOutTip: this.props.t('Shrink: {Ctrl} + Wheel').replace('{Ctrl}', shortcutMain)
108
112
  });
109
113
  }
110
114
  }]);
@@ -308,7 +308,8 @@ var ImageHoverMenu = function ImageHoverMenu(_ref) {
308
308
  editor: editor,
309
309
  toggleImagePreviewer: function toggleImagePreviewer() {
310
310
  setIsShowImagePreview(!isShowImagePreview);
311
- }
311
+ },
312
+ t: t
312
313
  })));
313
314
  };
314
315
  var _default = exports["default"] = (0, _reactI18next.withTranslation)('sdoc-editor')(ImageHoverMenu);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/sdoc-editor",
3
- "version": "3.0.36",
3
+ "version": "3.0.38",
4
4
  "main": "dist/index.js",
5
5
  "scripts": {
6
6
  "test": "jest",
@@ -17,10 +17,10 @@
17
17
  "license": "ISC",
18
18
  "description": "",
19
19
  "dependencies": {
20
- "@seafile/comment-editor": "1.0.1",
20
+ "@seafile/comment-editor": "1.0.3",
21
21
  "@seafile/print-js": "1.6.6",
22
- "@seafile/react-image-lightbox": "^5.0.1",
23
- "@seafile/seafile-database": "0.0.13",
22
+ "@seafile/react-image-lightbox": "^5.0.2",
23
+ "@seafile/seafile-database": "0.0.15",
24
24
  "@seafile/slate": "0.91.8",
25
25
  "@seafile/slate-history": "0.86.2",
26
26
  "@seafile/slate-hyperscript": "0.81.7",
@@ -72,5 +72,5 @@
72
72
  "publishConfig": {
73
73
  "access": "public"
74
74
  },
75
- "gitHead": "e1b3a4aa2e5830f7a238c710f26d3b0cb33338ba"
75
+ "gitHead": "c89a3c31a2f1885ca2f237d98f70affbd8981102"
76
76
  }