@seafile/sdoc-editor 2.0.95 → 2.0.96

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.
@@ -0,0 +1,39 @@
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 = _interopRequireDefault(require("react"));
9
+ var _reactImageLightbox = _interopRequireDefault(require("@seafile/react-image-lightbox"));
10
+ require("@seafile/react-image-lightbox/style.css");
11
+ function CommentImagePreviewer(props) {
12
+ var mainSrc = props.imageUrl;
13
+ var imageTitle = '';
14
+ try {
15
+ imageTitle = mainSrc ? decodeURI(mainSrc.slice(mainSrc.lastIndexOf('/') + 1)) : '';
16
+ } catch (error) {
17
+ // eslint-disable-next-line no-console
18
+ console.log(error);
19
+ }
20
+ return /*#__PURE__*/_react["default"].createElement(_reactImageLightbox["default"], {
21
+ wrapperClassName: "sf-editor-image-previewer",
22
+ imageTitle: /*#__PURE__*/_react["default"].createElement("span", {
23
+ className: "d-flex"
24
+ }, /*#__PURE__*/_react["default"].createElement("span", {
25
+ className: "text-truncate"
26
+ }, imageTitle)),
27
+ mainSrc: mainSrc,
28
+ toolbarButtons: [],
29
+ nextSrc: mainSrc,
30
+ prevSrc: mainSrc,
31
+ onCloseRequest: props.toggle,
32
+ onMovePrevRequest: function onMovePrevRequest() {},
33
+ onMoveNextRequest: function onMoveNextRequest() {},
34
+ reactModalProps: {
35
+ shouldReturnFocusAfterClose: false
36
+ }
37
+ });
38
+ }
39
+ var _default = exports["default"] = CommentImagePreviewer;
@@ -19,6 +19,7 @@ var _context2 = _interopRequireDefault(require("../../context"));
19
19
  var _mdToHtml = _interopRequireDefault(require("../../slate-convert/md-to-html"));
20
20
  var _notificationHooks = require("../hooks/notification-hooks");
21
21
  var _commentEditor = _interopRequireDefault(require("./comment-editor"));
22
+ var _commentImagePreviewer = _interopRequireDefault(require("./comment-image-previewer"));
22
23
  var CommentItemContent = function CommentItemContent(_ref) {
23
24
  var isActive = _ref.isActive,
24
25
  container = _ref.container,
@@ -42,6 +43,10 @@ var CommentItemContent = function CommentItemContent(_ref) {
42
43
  _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
43
44
  editorContent = _useState6[0],
44
45
  setEditorContent = _useState6[1];
46
+ var _useState7 = (0, _react.useState)(''),
47
+ _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
48
+ imageUrl = _useState8[0],
49
+ setImageUrl = _useState8[1];
45
50
  var onEditToggle = (0, _react.useCallback)(function (event) {
46
51
  event.stopPropagation();
47
52
  setIsEditing(true);
@@ -109,6 +114,11 @@ var CommentItemContent = function CommentItemContent(_ref) {
109
114
  return "comment_".concat(comment.id);
110
115
  }, [comment]);
111
116
  var user = _context2["default"].getUserInfo();
117
+ var onCommentContentClick = (0, _react.useCallback)(function (event) {
118
+ if (event.target && event.target.tagName === 'IMG' && event.target.src) {
119
+ setImageUrl(event.target.src);
120
+ }
121
+ }, []);
112
122
  return /*#__PURE__*/_react["default"].createElement("div", {
113
123
  className: "comment-item"
114
124
  }, /*#__PURE__*/_react["default"].createElement("div", {
@@ -171,7 +181,8 @@ var CommentItemContent = function CommentItemContent(_ref) {
171
181
  tag: "div",
172
182
  onClick: resubmit
173
183
  }, t('Resubmit')))))), /*#__PURE__*/_react["default"].createElement("div", {
174
- className: "comment-content"
184
+ className: "comment-content",
185
+ onClick: onCommentContentClick
175
186
  }, !isEditing && /*#__PURE__*/_react["default"].createElement("div", {
176
187
  dangerouslySetInnerHTML: {
177
188
  __html: editorContent
@@ -181,6 +192,11 @@ var CommentItemContent = function CommentItemContent(_ref) {
181
192
  content: comment.comment,
182
193
  updateContent: updateContent,
183
194
  setIsEditing: setIsEditing
195
+ }), imageUrl && /*#__PURE__*/_react["default"].createElement(_commentImagePreviewer["default"], {
196
+ imageUrl: imageUrl,
197
+ toggle: function toggle() {
198
+ return setImageUrl('');
199
+ }
184
200
  }));
185
201
  };
186
202
  var _default = exports["default"] = (0, _reactI18next.withTranslation)('sdoc-editor')(CommentItemContent);
@@ -17,6 +17,7 @@ var _context2 = _interopRequireDefault(require("../../context"));
17
17
  var _mdToHtml = _interopRequireDefault(require("../../slate-convert/md-to-html"));
18
18
  var _commentDeletePopover = _interopRequireDefault(require("./comment-delete-popover"));
19
19
  var _commentEditor = _interopRequireDefault(require("./comment-editor"));
20
+ var _commentImagePreviewer = _interopRequireDefault(require("./comment-image-previewer"));
20
21
  var CommentItemReply = function CommentItemReply(_ref) {
21
22
  var isActive = _ref.isActive,
22
23
  container = _ref.container,
@@ -28,24 +29,28 @@ var CommentItemReply = function CommentItemReply(_ref) {
28
29
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
29
30
  isDropdownOpen = _useState2[0],
30
31
  setDropdownOpen = _useState2[1];
31
- var itemRef = (0, _react.useRef)(null);
32
- var _useState3 = (0, _react.useState)(false),
32
+ var _useState3 = (0, _react.useState)(''),
33
33
  _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
34
- isEditing = _useState4[0],
35
- setIsEditing = _useState4[1];
36
- var _useState5 = (0, _react.useState)(''),
34
+ imageUrl = _useState4[0],
35
+ setImageUrl = _useState4[1];
36
+ var itemRef = (0, _react.useRef)(null);
37
+ var _useState5 = (0, _react.useState)(false),
37
38
  _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
38
- editorContent = _useState6[0],
39
- setEditorContent = _useState6[1];
39
+ isEditing = _useState6[0],
40
+ setIsEditing = _useState6[1];
41
+ var _useState7 = (0, _react.useState)(''),
42
+ _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
43
+ editorContent = _useState8[0],
44
+ setEditorContent = _useState8[1];
40
45
  var replyOpToolsId = "replyOpTools_".concat(reply.id);
41
46
  var onEditToggle = (0, _react.useCallback)(function (event) {
42
47
  event.stopPropagation();
43
48
  setIsEditing(true);
44
49
  }, []);
45
- var _useState7 = (0, _react.useState)(false),
46
- _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
47
- isShowDeletePopover = _useState8[0],
48
- setIsShowDeletePopover = _useState8[1];
50
+ var _useState9 = (0, _react.useState)(false),
51
+ _useState0 = (0, _slicedToArray2["default"])(_useState9, 2),
52
+ isShowDeletePopover = _useState0[0],
53
+ setIsShowDeletePopover = _useState0[1];
49
54
  var onDeleteToggle = (0, _react.useCallback)(function (event) {
50
55
  event.stopPropagation();
51
56
  setIsShowDeletePopover(true);
@@ -91,6 +96,11 @@ var CommentItemReply = function CommentItemReply(_ref) {
91
96
  setIsEditing(false);
92
97
  }, [reply, updateReply]);
93
98
  var user = _context2["default"].getUserInfo();
99
+ var onCommentContentClick = (0, _react.useCallback)(function (event) {
100
+ if (event.target && event.target.tagName === 'IMG' && event.target.src) {
101
+ setImageUrl(event.target.src);
102
+ }
103
+ }, []);
94
104
  return /*#__PURE__*/_react["default"].createElement("div", {
95
105
  className: "comment-item",
96
106
  ref: itemRef
@@ -134,7 +144,8 @@ var CommentItemReply = function CommentItemReply(_ref) {
134
144
  tag: "div",
135
145
  onClick: onDeleteToggle
136
146
  }, t('Delete')))))), /*#__PURE__*/_react["default"].createElement("div", {
137
- className: "comment-content"
147
+ className: "comment-content",
148
+ onClick: onCommentContentClick
138
149
  }, !isEditing && /*#__PURE__*/_react["default"].createElement("div", {
139
150
  dangerouslySetInnerHTML: {
140
151
  __html: editorContent
@@ -151,6 +162,11 @@ var CommentItemReply = function CommentItemReply(_ref) {
151
162
  deleteConfirm: _deleteReply,
152
163
  setIsShowDeletePopover: setIsShowDeletePopover,
153
164
  targetId: replyOpToolsId
165
+ }), imageUrl && /*#__PURE__*/_react["default"].createElement(_commentImagePreviewer["default"], {
166
+ imageUrl: imageUrl,
167
+ toggle: function toggle() {
168
+ return setImageUrl('');
169
+ }
154
170
  }));
155
171
  };
156
172
  var _default = exports["default"] = (0, _reactI18next.withTranslation)('sdoc-editor')(CommentItemReply);
@@ -120,6 +120,10 @@
120
120
  margin: 0;
121
121
  }
122
122
 
123
+ .comment-item .comment-content img {
124
+ cursor: pointer;
125
+ }
126
+
123
127
  /* footer */
124
128
  .comment-item .comment-footer {
125
129
  display: flex;
@@ -72,6 +72,11 @@ var EditableArticle = function EditableArticle(_ref) {
72
72
  clientHeight = _scrollRef$current.clientHeight;
73
73
  eventProxy.onKeyDown(event);
74
74
  if (event.key === 'ArrowLeft') {
75
+ event.preventDefault();
76
+ _slate.Transforms.move(editor, {
77
+ unit: 'offset',
78
+ reverse: true
79
+ });
75
80
  if (!(0, _core.isSelectionAtBlockStart)(editor)) return;
76
81
  }
77
82
  if (event.key === 'ArrowUp' || event.key === 'ArrowLeft') {
@@ -88,6 +93,10 @@ var EditableArticle = function EditableArticle(_ref) {
88
93
  return;
89
94
  }
90
95
  if (event.key === 'ArrowRight') {
96
+ event.preventDefault();
97
+ _slate.Transforms.move(editor, {
98
+ unit: 'offset'
99
+ });
91
100
  if (!(0, _core.isSelectionAtBlockEnd)(editor)) return;
92
101
  }
93
102
  if (event.key === 'ArrowDown' || event.key === 'ArrowRight') {
@@ -422,7 +422,7 @@ function AIModule(_ref) {
422
422
  var aboveNode = (0, _core.getAboveBlockNode)(editor, {
423
423
  at: end
424
424
  });
425
- nextPath = _slate.Path.next(aboveNode[1]);
425
+ nextPath = _slate.Path.next([aboveNode[1][0]]);
426
426
  } else {
427
427
  var path = _slateReact.ReactEditor.findPath(editor, element);
428
428
  nextPath = _slate.Path.next(path);
@@ -443,6 +443,9 @@ function AIModule(_ref) {
443
443
  case _constants2.OPERATION_TYPES.TRANSLATE:
444
444
  onTranslateClick();
445
445
  return;
446
+ case _constants2.OPERATION_TYPES.MORE_FLUENT:
447
+ onMoreFluentClick();
448
+ return;
446
449
  case _constants2.OPERATION_TYPES.MORE_DETAILS:
447
450
  onMoreDetailsClick();
448
451
  return;
@@ -1,6 +1,7 @@
1
1
  .file-link-selected,
2
2
  .sdoc-file-link-render:hover {
3
3
  background-color: #e5e5e5 !important;
4
+ padding: 3px 0;
4
5
  }
5
6
 
6
7
  .sdoc-file-card-link {
@@ -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.unwrapLinkNode = exports.removeTempInput = exports.removeShortCutSymbol = exports.onCopySdocLinkNode = exports.isTriggeredByShortcut = exports.isMenuDisabled = exports.insertTextWhenRemoveFileNameCollector = exports.insertTempInput = exports.insertSdocFileLink = exports.getUrl = exports.getType = exports.getSdocLinkEntry = exports.getSdocFileIcon = exports.getNewFileListData = exports.getFileSearchInputEntry = exports.getBeforeText = exports.generateSdocFileNode = void 0;
7
+ exports.unwrapLinkNode = exports.removeTempInput = exports.removeShortCutSymbol = exports.onCopySdocLinkNode = exports.isTriggeredByShortcut = exports.isMenuDisabled = exports.isInTable = exports.insertTextWhenRemoveFileNameCollector = exports.insertTempInput = exports.insertSdocFileLink = exports.getUrl = exports.getType = exports.getSdocLinkEntry = exports.getSdocFileIcon = exports.getNewFileListData = exports.getFileSearchInputEntry = exports.getBeforeText = exports.generateSdocFileNode = void 0;
8
8
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
9
9
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
10
10
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/toConsumableArray"));
@@ -275,4 +275,10 @@ var getSdocLinkEntry = exports.getSdocLinkEntry = function getSdocLinkEntry(edit
275
275
  at: at
276
276
  });
277
277
  return aboveNodeEntry;
278
+ };
279
+ var isInTable = exports.isInTable = function isInTable(editor, element) {
280
+ var _getNode;
281
+ var path = _slateReact.ReactEditor.findPath(editor, element);
282
+ var isInTable = ((_getNode = (0, _core.getNode)(editor, [path[0]])) === null || _getNode === void 0 ? void 0 : _getNode.type) === _constants.TABLE;
283
+ return isInTable;
278
284
  };
@@ -14,9 +14,7 @@ var _slateReact = require("@seafile/slate-react");
14
14
  var _classnames = _interopRequireDefault(require("classnames"));
15
15
  var _toast = _interopRequireDefault(require("../../../../components/toast"));
16
16
  var _commons = require("../../../commons");
17
- var _constants = require("../../../constants");
18
- var _core = require("../../../core");
19
- var _constants2 = require("../constants");
17
+ var _constants = require("../constants");
20
18
  var _helpers = require("../helpers");
21
19
  require("./index.css");
22
20
  var SdocLinkHoverMenu = function SdocLinkHoverMenu(_ref) {
@@ -58,10 +56,10 @@ var SdocLinkHoverMenu = function SdocLinkHoverMenu(_ref) {
58
56
  onHideInsertHoverMenu();
59
57
  // eslint-disable-next-line react-hooks/exhaustive-deps
60
58
  }, []);
61
- var selectedType = element.display_type || _constants2.SDOC_LINK_TYPE.TEXT_LINK;
59
+ var selectedType = element.display_type || _constants.SDOC_LINK_TYPE.TEXT_LINK;
62
60
  var id = "sdoc-link-display-type-".concat(element.id);
63
- var newSdocFileTypes = _constants2.SDOC_LINK_TYPES.filter(function (sdocLinkType) {
64
- return (0, _core.getCurrentNode)(editor)[0].type === _constants.TABLE_CELL ? sdocLinkType !== _constants2.SDOC_LINK_TYPE.CARD_LINK : true;
61
+ var newSdocFileTypes = _constants.SDOC_LINK_TYPES.filter(function (sdocLinkType) {
62
+ return (0, _helpers.isInTable)(editor, element) ? sdocLinkType !== _constants.SDOC_LINK_TYPE.CARD_LINK : true;
65
63
  });
66
64
  return /*#__PURE__*/_react["default"].createElement(_commons.ElementPopover, null, /*#__PURE__*/_react["default"].createElement("div", {
67
65
  className: "sdoc-link-hover-menu-container",
@@ -94,7 +92,7 @@ var SdocLinkHoverMenu = function SdocLinkHoverMenu(_ref) {
94
92
  onClick: onShowProver,
95
93
  id: id
96
94
  }, /*#__PURE__*/_react["default"].createElement("i", {
97
- className: (0, _classnames["default"])('icon-font mr-1', _constants2.SDOC_LINK_TYPE_CONFIG[selectedType].icon)
95
+ className: (0, _classnames["default"])('icon-font mr-1', _constants.SDOC_LINK_TYPE_CONFIG[selectedType].icon)
98
96
  }), /*#__PURE__*/_react["default"].createElement("i", {
99
97
  className: "sdocfont sdoc-drop-down icon-font"
100
98
  })), /*#__PURE__*/_react["default"].createElement("span", {
@@ -116,8 +114,8 @@ var SdocLinkHoverMenu = function SdocLinkHoverMenu(_ref) {
116
114
  }, /*#__PURE__*/_react["default"].createElement("div", {
117
115
  className: "sdoc-dropdown-item-content"
118
116
  }, /*#__PURE__*/_react["default"].createElement("i", {
119
- className: (0, _classnames["default"])('sdoc-dropdown-item-content-icon', _constants2.SDOC_LINK_TYPE_CONFIG[sdocLinkType].icon)
120
- }), /*#__PURE__*/_react["default"].createElement("span", null, t(_constants2.SDOC_LINK_TYPE_CONFIG[sdocLinkType].text))), selectedType === sdocLinkType && /*#__PURE__*/_react["default"].createElement("i", {
117
+ className: (0, _classnames["default"])('sdoc-dropdown-item-content-icon', _constants.SDOC_LINK_TYPE_CONFIG[sdocLinkType].icon)
118
+ }), /*#__PURE__*/_react["default"].createElement("span", null, t(_constants.SDOC_LINK_TYPE_CONFIG[sdocLinkType].text))), selectedType === sdocLinkType && /*#__PURE__*/_react["default"].createElement("i", {
121
119
  className: "sdocfont sdoc-check-mark sdoc-dropdown-item-right-icon"
122
120
  }));
123
121
  }))));
@@ -139,15 +139,38 @@ var renderText = function renderText(props) {
139
139
  className: "token ".concat(leaf.type)
140
140
  }, markedChildren);
141
141
  }
142
- return /*#__PURE__*/_react["default"].createElement("span", Object.assign({
143
- "data-id": leaf.id
144
- }, attributes, {
145
- style: style,
146
- className: Object.keys(rest).join(' ')
147
- }), leaf.isCaret ? /*#__PURE__*/_react["default"].createElement(_caret["default"], leaf) : null, leaf.isCaret && /*#__PURE__*/_react["default"].createElement("span", {
148
- key: Math.random(),
149
- "data-slate-zero-width": "z",
150
- "data-slate-length": "0"
151
- }, "\uFEFF"), !leaf.isCaret && markedChildren);
142
+ var GenericLeafStyle = function GenericLeafStyle() {
143
+ return /*#__PURE__*/_react["default"].createElement("span", Object.assign({
144
+ "data-id": leaf.id
145
+ }, attributes, {
146
+ style: style,
147
+ className: Object.keys(rest).join(' ')
148
+ }), leaf.isCaret ? /*#__PURE__*/_react["default"].createElement(_caret["default"], leaf) : null, leaf.isCaret && /*#__PURE__*/_react["default"].createElement("span", {
149
+ key: Math.random(),
150
+ "data-slate-zero-width": "z",
151
+ "data-slate-length": "0"
152
+ }, "\uFEFF"), !leaf.isCaret && markedChildren);
153
+ };
154
+ var CursorPositonFix = function CursorPositonFix() {
155
+ return /*#__PURE__*/_react["default"].createElement("span", {
156
+ contentEditable: false,
157
+ style: {
158
+ fontSize: 1
159
+ }
160
+ }, String.fromCodePoint(160) /* Non-breaking space */);
161
+ };
162
+ var InlineCodeCustomized = function InlineCodeCustomized() {
163
+ return /*#__PURE__*/_react["default"].createElement("span", Object.assign({
164
+ "data-id": leaf.id
165
+ }, attributes, {
166
+ style: style,
167
+ className: Object.keys(rest).join(' ')
168
+ }), leaf.isCaret ? /*#__PURE__*/_react["default"].createElement(_caret["default"], leaf) : null, leaf.isCaret && /*#__PURE__*/_react["default"].createElement("span", {
169
+ key: Math.random(),
170
+ "data-slate-zero-width": "z",
171
+ "data-slate-length": "0"
172
+ }, "\uFEFF"), /*#__PURE__*/_react["default"].createElement(CursorPositonFix, null), !leaf.isCaret && markedChildren, /*#__PURE__*/_react["default"].createElement(CursorPositonFix, null));
173
+ };
174
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, leaf[_constants.TEXT_STYLE_MAP.CODE] && /*#__PURE__*/_react["default"].createElement(InlineCodeCustomized, null) || /*#__PURE__*/_react["default"].createElement(GenericLeafStyle, null));
152
175
  };
153
176
  var _default = exports["default"] = renderText;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/sdoc-editor",
3
- "version": "2.0.95",
3
+ "version": "2.0.96",
4
4
  "main": "dist/index.js",
5
5
  "scripts": {
6
6
  "test": "jest",
@@ -70,5 +70,5 @@
70
70
  "publishConfig": {
71
71
  "access": "public"
72
72
  },
73
- "gitHead": "bdaa45d04ea4395c841fbdf07b5588d79324d3a3"
73
+ "gitHead": "c2ceb9c5be6f89eea943cc6e0fd856b35791191f"
74
74
  }