@seafile/sdoc-editor 3.0.74 → 3.0.76

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.
@@ -12,6 +12,8 @@ var _reactDom = require("react-dom");
12
12
  var _reactI18next = require("react-i18next");
13
13
  var _slate = require("@seafile/slate");
14
14
  var _slateReact = require("@seafile/slate-react");
15
+ var _isUrl = _interopRequireDefault(require("is-url"));
16
+ var _toast = _interopRequireDefault(require("../../../../components/toast"));
15
17
  var _tooltip = _interopRequireDefault(require("../../../../components/tooltip"));
16
18
  var _eventBus = _interopRequireDefault(require("../../../../utils/event-bus"));
17
19
  var _helpers = require("../helpers");
@@ -35,6 +37,11 @@ var LinkHover = function LinkHover(_ref) {
35
37
  setIsShowTooltip(true);
36
38
  }, []);
37
39
  var onMouseDown = (0, _react.useCallback)(function (event) {
40
+ if (!(0, _isUrl["default"])(element.href)) {
41
+ event.preventDefault();
42
+ _toast["default"].danger('The_link_is_invalid');
43
+ return;
44
+ }
38
45
  event.stopPropagation();
39
46
  if (!(0, _helpers.isWeChat)()) {
40
47
  window.open(element.href);
@@ -14,6 +14,8 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/es
14
14
  var _react = _interopRequireDefault(require("react"));
15
15
  var _slate = require("@seafile/slate");
16
16
  var _classnames = _interopRequireDefault(require("classnames"));
17
+ var _isUrl = _interopRequireDefault(require("is-url"));
18
+ var _toast = _interopRequireDefault(require("../../../components/toast"));
17
19
  var _constants = require("../../../constants");
18
20
  var _useScrollContext = require("../../../hooks/use-scroll-context");
19
21
  var _commonUtils = require("../../../utils/common-utils");
@@ -111,6 +113,20 @@ var Link = /*#__PURE__*/function (_React$Component) {
111
113
  var editor = _this.props.editor;
112
114
  (0, _helpers.unWrapLinkNode)(editor);
113
115
  });
116
+ (0, _defineProperty2["default"])(_this, "onOpenLink", function (event) {
117
+ var element = _this.props.element;
118
+ if (!(0, _isUrl["default"])(element.href)) {
119
+ event.preventDefault();
120
+ _toast["default"].danger('The_link_is_invalid');
121
+ return;
122
+ }
123
+ if (!(0, _helpers.isWeChat)()) {
124
+ window.open(element.href, '_blank', 'noopener,noreferrer');
125
+ } else {
126
+ // eslint-disable-next-line no-restricted-globals
127
+ location.href = element.href;
128
+ }
129
+ });
114
130
  (0, _defineProperty2["default"])(_this, "openDialog", function () {
115
131
  var element = _this.props.element;
116
132
  _this.eventBus.dispatch(_constants.INTERNAL_EVENT.INSERT_ELEMENT, {
@@ -155,6 +171,7 @@ var Link = /*#__PURE__*/function (_React$Component) {
155
171
  }, attributes), /*#__PURE__*/_react["default"].createElement("a", {
156
172
  href: element.href,
157
173
  title: (_element$children$ = element.children[0]) === null || _element$children$ === void 0 ? void 0 : _element$children$.text,
174
+ onClick: this.onOpenLink,
158
175
  target: "_blank",
159
176
  rel: "noreferrer"
160
177
  }, children));
@@ -192,6 +192,7 @@ var Video = function Video(_ref) {
192
192
  scrollRef.current && scrollRef.current.addEventListener('scroll', onScroll);
193
193
  observerRefValue = scrollRef.current;
194
194
  resizeObserver = new ResizeObserver(function (entries) {
195
+ // eslint-disable-next-line no-unused-vars
195
196
  var _iterator = (0, _createForOfIteratorHelper2["default"])(entries),
196
197
  _step;
197
198
  try {
@@ -13,7 +13,8 @@ var _tooltip = _interopRequireDefault(require("../../../../components/tooltip"))
13
13
  var _commons = require("../../../commons");
14
14
  require("./index.css");
15
15
  var WhiteboardHoverMenu = function WhiteboardHoverMenu(_ref) {
16
- var menuPosition = _ref.menuPosition,
16
+ var isValidUrl = _ref.isValidUrl,
17
+ menuPosition = _ref.menuPosition,
17
18
  onOpen = _ref.onOpen,
18
19
  openFullscreen = _ref.openFullscreen,
19
20
  onDeleteWhiteboard = _ref.onDeleteWhiteboard;
@@ -31,14 +32,16 @@ var WhiteboardHoverMenu = function WhiteboardHoverMenu(_ref) {
31
32
  style: menuPosition
32
33
  }, /*#__PURE__*/_react["default"].createElement("div", {
33
34
  className: "hover-menu-container"
34
- }, /*#__PURE__*/_react["default"].createElement("span", {
35
+ }, isValidUrl && /*#__PURE__*/_react["default"].createElement("span", {
35
36
  className: "op-group-item"
36
37
  }, /*#__PURE__*/_react["default"].createElement("span", {
37
38
  id: "sdoc_whiteboard_open",
38
39
  role: "button",
39
40
  className: "op-item",
40
41
  onClick: onOpen
41
- }, /*#__PURE__*/_react["default"].createElement("span", null, t('Open')))), /*#__PURE__*/_react["default"].createElement("span", {
42
+ }, /*#__PURE__*/_react["default"].createElement("span", {
43
+ className: "mr-1"
44
+ }, t('Open')))), /*#__PURE__*/_react["default"].createElement("span", {
42
45
  className: "op-group-item"
43
46
  }, /*#__PURE__*/_react["default"].createElement("span", {
44
47
  id: "sdoc_whiteboard_delete",
@@ -51,7 +54,7 @@ var WhiteboardHoverMenu = function WhiteboardHoverMenu(_ref) {
51
54
  target: "sdoc_whiteboard_delete",
52
55
  placement: "top",
53
56
  fade: true
54
- }, t('Delete')))), /*#__PURE__*/_react["default"].createElement("span", {
57
+ }, t('Delete')))), isValidUrl && /*#__PURE__*/_react["default"].createElement("span", {
55
58
  className: "op-group-item"
56
59
  }, /*#__PURE__*/_react["default"].createElement("span", {
57
60
  id: "sdoc_whiteboard_full_screen_mode",
@@ -59,7 +62,7 @@ var WhiteboardHoverMenu = function WhiteboardHoverMenu(_ref) {
59
62
  className: "op-item",
60
63
  onClick: openFullscreen
61
64
  }, /*#__PURE__*/_react["default"].createElement("i", {
62
- className: "sdocfont sdoc-fullscreen"
65
+ className: "sdocfont sdoc-fullscreen icon-font"
63
66
  }), showTooltip && /*#__PURE__*/_react["default"].createElement(_tooltip["default"], {
64
67
  target: "sdoc_whiteboard_full_screen_mode",
65
68
  placement: "top",
@@ -58,3 +58,12 @@
58
58
  height: 80%;
59
59
  overflow: auto;
60
60
  }
61
+
62
+ .sdoc-whiteboard-tip {
63
+ width: 100%;
64
+ height: 100%;
65
+ display: flex;
66
+ align-items: center;
67
+ justify-content: center;
68
+ color: red;
69
+ }
@@ -10,9 +10,11 @@ var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime
10
10
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
11
11
  var _react = _interopRequireWildcard(require("react"));
12
12
  var _reactDom = _interopRequireDefault(require("react-dom"));
13
+ var _reactI18next = require("react-i18next");
13
14
  var _slate = require("@seafile/slate");
14
15
  var _slateReact = require("@seafile/slate-react");
15
16
  var _classnames = _interopRequireDefault(require("classnames"));
17
+ var _isUrl = _interopRequireDefault(require("is-url"));
16
18
  var _constants = require("../../../constants");
17
19
  var _context = _interopRequireDefault(require("../../../context"));
18
20
  var _useScrollContext = require("../../../hooks/use-scroll-context");
@@ -33,6 +35,8 @@ var Whiteboard = function Whiteboard(_ref) {
33
35
  var scrollRef = (0, _useScrollContext.useScrollContext)();
34
36
  var isSelected = (0, _slateReact.useSelected)();
35
37
  var readOnly = (0, _slateReact.useReadOnly)();
38
+ var _useTranslation = (0, _reactI18next.useTranslation)('sdoc-editor'),
39
+ t = _useTranslation.t;
36
40
  var _useState = (0, _react.useState)({
37
41
  top: '',
38
42
  left: ''
@@ -44,7 +48,11 @@ var Whiteboard = function Whiteboard(_ref) {
44
48
  _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
45
49
  isShowZoomOut = _useState4[0],
46
50
  setIsShowZoomOut = _useState4[1];
51
+ var isValidUrl = (0, _react.useMemo)(function () {
52
+ return (0, _isUrl["default"])(link);
53
+ }, [link]);
47
54
  (0, _react.useEffect)(function () {
55
+ if (!isValidUrl) return;
48
56
  var handleMessage = function handleMessage(event) {
49
57
  var _event$data;
50
58
  if (((_event$data = event.data) === null || _event$data === void 0 ? void 0 : _event$data.type) === 'checkSdocParent') {
@@ -86,7 +94,7 @@ var Whiteboard = function Whiteboard(_ref) {
86
94
  window.removeEventListener('message', handleMessage);
87
95
  unsubscribeResizeArticle();
88
96
  };
89
- }, []);
97
+ }, [isValidUrl]);
90
98
  var onDeleteWhiteboard = (0, _react.useCallback)(function () {
91
99
  var path = _slateReact.ReactEditor.findPath(editor, element);
92
100
  _slate.Transforms.removeNodes(editor, {
@@ -97,6 +105,7 @@ var Whiteboard = function Whiteboard(_ref) {
97
105
  }, [editor, element]);
98
106
  var handleDoubleClick = function handleDoubleClick(event) {
99
107
  event.preventDefault();
108
+ if (!isValidUrl) return;
100
109
  var siteRoot = _context["default"].getSetting('siteRoot');
101
110
  var url = "".concat(siteRoot, "lib/").concat(repo_id, "/file").concat(file_path);
102
111
  window.open(url, '_blank');
@@ -116,6 +125,7 @@ var Whiteboard = function Whiteboard(_ref) {
116
125
  scrollRef.current.addEventListener('scroll', handleScroll);
117
126
  observerRefValue = scrollRef.current;
118
127
  resizeObserver = new ResizeObserver(function (entries) {
128
+ // eslint-disable-next-line no-unused-vars
119
129
  var _iterator = (0, _createForOfIteratorHelper2["default"])(entries),
120
130
  _step;
121
131
  try {
@@ -172,7 +182,7 @@ var Whiteboard = function Whiteboard(_ref) {
172
182
  scrolling: "no"
173
183
  }, /*#__PURE__*/_react["default"].createElement("div", {
174
184
  className: "sdoc-whiteboard-title"
175
- }, title), /*#__PURE__*/_react["default"].createElement("iframe", {
185
+ }, title), isValidUrl && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("iframe", {
176
186
  className: "sdoc-whiteboard-element",
177
187
  title: title,
178
188
  src: link,
@@ -181,7 +191,11 @@ var Whiteboard = function Whiteboard(_ref) {
181
191
  className: "iframe-overlay",
182
192
  onDoubleClick: handleDoubleClick,
183
193
  onClick: handleOnClick
184
- })), isSelected && !readOnly && !isShowZoomOut && /*#__PURE__*/_react["default"].createElement(_hoverMenu["default"], {
194
+ })), !isValidUrl && /*#__PURE__*/_react["default"].createElement("div", {
195
+ ref: whiteboardRef,
196
+ className: "sdoc-whiteboard-tip"
197
+ }, t('Whiteboard_link_invalid_tip'))), isSelected && !readOnly && !isShowZoomOut && /*#__PURE__*/_react["default"].createElement(_hoverMenu["default"], {
198
+ isValidUrl: isValidUrl,
185
199
  menuPosition: menuPosition,
186
200
  onOpen: handleDoubleClick,
187
201
  openFullscreen: openFullscreen,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/sdoc-editor",
3
- "version": "3.0.74",
3
+ "version": "3.0.76",
4
4
  "main": "dist/index.js",
5
5
  "scripts": {
6
6
  "test": "jest",
@@ -72,5 +72,5 @@
72
72
  "publishConfig": {
73
73
  "access": "public"
74
74
  },
75
- "gitHead": "e433dda5d52c7307eb22dc8277ebc2c250737d55"
75
+ "gitHead": "505f9405730c95e54e8b47fc131ad5a3bf959eeb"
76
76
  }