@seafile/seafile-editor 2.0.34 → 2.0.35

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.
@@ -10,6 +10,12 @@ Object.defineProperty(exports, "BrowserTip", {
10
10
  return _browserTip.default;
11
11
  }
12
12
  });
13
+ Object.defineProperty(exports, "LinkVerifiedDialog", {
14
+ enumerable: true,
15
+ get: function () {
16
+ return _linkVerifiedDialog.default;
17
+ }
18
+ });
13
19
  Object.defineProperty(exports, "LongTextModal", {
14
20
  enumerable: true,
15
21
  get: function () {
@@ -24,4 +30,5 @@ Object.defineProperty(exports, "ModalHeader", {
24
30
  });
25
31
  var _longtextModal = _interopRequireDefault(require("./longtext-modal"));
26
32
  var _browserTip = _interopRequireDefault(require("./browser-tip"));
27
- var _modalHeader = _interopRequireDefault(require("./modal-header"));
33
+ var _modalHeader = _interopRequireDefault(require("./modal-header"));
34
+ var _linkVerifiedDialog = _interopRequireDefault(require("./link-verified-dialog"));
@@ -0,0 +1,8 @@
1
+ .sf-link-verified-dialog .sf-tip-default {
2
+ color: #666;
3
+ font-size: 14px;
4
+ }
5
+
6
+ .sf-link-verified-dialog .sf-verify-link {
7
+ word-break: break-all;
8
+ }
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+ var _react = _interopRequireWildcard(require("react"));
10
+ var _reactstrap = require("reactstrap");
11
+ var _reactI18next = require("react-i18next");
12
+ var _copyToClipboard = _interopRequireDefault(require("copy-to-clipboard"));
13
+ var _modalHeader = _interopRequireDefault(require("../modal-header"));
14
+ var _constants = require("../../constants");
15
+ require("./index.css");
16
+ /* eslint-disable react-hooks/rules-of-hooks */
17
+
18
+ const LinkVerifiedDialog = _ref => {
19
+ let {
20
+ onToggle,
21
+ link
22
+ } = _ref;
23
+ const {
24
+ t
25
+ } = (0, _reactI18next.useTranslation)(_constants.TRANSLATE_NAMESPACE);
26
+ const copyLink = (0, _react.useCallback)(() => {
27
+ (0, _copyToClipboard.default)(link);
28
+ onToggle && onToggle();
29
+ }, [link, onToggle]);
30
+ const openLink = (0, _react.useCallback)(() => {
31
+ window.open(link);
32
+ onToggle && onToggle();
33
+ }, [link, onToggle]);
34
+ const {
35
+ host,
36
+ protocol,
37
+ pathname
38
+ } = new URL(link);
39
+ return /*#__PURE__*/_react.default.createElement(_reactstrap.Modal, {
40
+ isOpen: true,
41
+ toggle: onToggle,
42
+ className: "sf-link-verified-dialog",
43
+ zIndex: 1071
44
+ }, /*#__PURE__*/_react.default.createElement(_modalHeader.default, {
45
+ toggle: onToggle
46
+ }, /*#__PURE__*/_react.default.createElement("span", {
47
+ className: "mr-2"
48
+ }, t('This_link_is_not_verified'))), /*#__PURE__*/_react.default.createElement(_reactstrap.ModalBody, null, /*#__PURE__*/_react.default.createElement("p", {
49
+ className: "sf-tip-default mb-5"
50
+ }, t('This_link_is_not_verified_tip')), /*#__PURE__*/_react.default.createElement("div", {
51
+ className: "sf-verify-link"
52
+ }, /*#__PURE__*/_react.default.createElement("span", {
53
+ className: "sf-tip-default"
54
+ }, protocol + '//'), /*#__PURE__*/_react.default.createElement("span", null, host), /*#__PURE__*/_react.default.createElement("span", {
55
+ className: "sf-tip-default"
56
+ }, pathname))), /*#__PURE__*/_react.default.createElement(_reactstrap.ModalFooter, null, /*#__PURE__*/_react.default.createElement(_reactstrap.Button, {
57
+ onClick: copyLink,
58
+ className: "m-0 mr-2"
59
+ }, t('Copy_link')), /*#__PURE__*/_react.default.createElement(_reactstrap.Button, {
60
+ color: "primary",
61
+ className: "m-0",
62
+ onClick: openLink
63
+ }, t('Open_link'))));
64
+ };
65
+ var _default = exports.default = LinkVerifiedDialog;
@@ -16,10 +16,10 @@ function ModalHeader(_ref) {
16
16
  let close = null;
17
17
  if (toggle) {
18
18
  close = /*#__PURE__*/_react.default.createElement("span", {
19
- class: "sf-editor-close-icon",
19
+ className: "sf-editor-close-icon",
20
20
  onClick: toggle
21
21
  }, /*#__PURE__*/_react.default.createElement("i", {
22
- class: "iconfont icon-x",
22
+ className: "iconfont icon-x",
23
23
  "aria-hidden": "true"
24
24
  }));
25
25
  }
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.UNORDERED_LIST = exports.TABLE_ROW = exports.TABLE_CELL = exports.TABLE = exports.PARAGRAPH = exports.ORDERED_LIST = exports.LIST_ITEM = exports.LINK = exports.IMAGE = exports.HEADER6 = exports.HEADER5 = exports.HEADER4 = exports.HEADER3 = exports.HEADER2 = exports.HEADER1 = exports.HEADER = exports.FORMULA = exports.COLUMN = exports.CODE_LINE = exports.CODE_BLOCK = exports.CHECK_LIST_ITEM = exports.BLOCKQUOTE = void 0;
6
+ exports.UNORDERED_LIST = exports.TABLE_ROW = exports.TABLE_CELL = exports.TABLE = exports.PARAGRAPH = exports.ORDERED_LIST = exports.LIST_ITEM = exports.LINK_REFERENCE = exports.LINK = exports.IMAGE = exports.HEADER6 = exports.HEADER5 = exports.HEADER4 = exports.HEADER3 = exports.HEADER2 = exports.HEADER1 = exports.HEADER = exports.FORMULA = exports.DEFINITION = exports.COLUMN = exports.CODE_LINE = exports.CODE_BLOCK = exports.CHECK_LIST_ITEM = exports.BLOCKQUOTE = void 0;
7
7
  const BLOCKQUOTE = exports.BLOCKQUOTE = 'blockquote';
8
8
  const HEADER = exports.HEADER = 'header';
9
9
  // each header type should be start with HEADER, all of justices should based on HEADER
@@ -26,4 +26,6 @@ const TABLE_CELL = exports.TABLE_CELL = 'table_cell';
26
26
  const IMAGE = exports.IMAGE = 'image';
27
27
  const LINK = exports.LINK = 'link';
28
28
  const FORMULA = exports.FORMULA = 'formula';
29
- const COLUMN = exports.COLUMN = 'column';
29
+ const COLUMN = exports.COLUMN = 'column';
30
+ const LINK_REFERENCE = exports.LINK_REFERENCE = 'link-reference';
31
+ const DEFINITION = exports.DEFINITION = 'definition';
@@ -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.isTextNode = exports.isStartPoint = exports.isSelectionAtBlockStart = exports.isSelectionAtBlockEnd = exports.isRangeAcrossBlocks = exports.isLastNode = exports.isLastChild = exports.isFirstNode = exports.isFirstChild = exports.isEndPoint = exports.isBlockTextEmptyAfterSelection = exports.isBlockAboveEmpty = exports.isAncestorEmpty = exports.getSelectedNodeEntryByTypes = exports.getSelectedNodeEntryByType = exports.getSelectedNodeByTypes = exports.getSelectedNodeByType = exports.getSelectedElems = exports.getQueryOptions = exports.getPreviousPath = exports.getPrevNode = exports.getParentNode = exports.getNodes = exports.getNodeType = exports.getNodePathById = exports.getNodeEntries = exports.getNode = exports.getNextSiblingNodes = exports.getNextNode = exports.getLastChildPath = exports.getLastChild = exports.getInlineNodes = exports.getEditorString = exports.getDeepInlineChildren = exports.getCommonNode = exports.getChildren = exports.getAboveNode = exports.getAboveBlockNode = exports.findPath = exports.findNode = exports.findDescendant = void 0;
7
+ exports.isTextNode = exports.isStartPoint = exports.isSelectionAtBlockStart = exports.isSelectionAtBlockEnd = exports.isRangeAcrossBlocks = exports.isLastNode = exports.isLastChild = exports.isFirstNode = exports.isFirstChild = exports.isEndPoint = exports.isBlockTextEmptyAfterSelection = exports.isBlockAboveEmpty = exports.isAncestorEmpty = exports.getSelectedNodeEntryByTypes = exports.getSelectedNodeEntryByType = exports.getSelectedNodeByTypes = exports.getSelectedNodeByType = exports.getSelectedElems = exports.getQueryOptions = exports.getPreviousPath = exports.getPrevNode = exports.getParentNode = exports.getNodesByType = exports.getNodes = exports.getNodeType = exports.getNodePathById = exports.getNodeEntries = exports.getNode = exports.getNextSiblingNodes = exports.getNextNode = exports.getLastChildPath = exports.getLastChild = exports.getInlineNodes = exports.getEditorString = exports.getDeepInlineChildren = exports.getCommonNode = exports.getChildren = exports.getAboveNode = exports.getAboveBlockNode = exports.findPath = exports.findNode = exports.findDescendant = void 0;
8
8
  var _slate = require("slate");
9
9
  var _slateReact = require("slate-react");
10
10
  var _slugid = _interopRequireDefault(require("slugid"));
@@ -46,6 +46,22 @@ const getNode = (editor, path) => {
46
46
  return node;
47
47
  };
48
48
  exports.getNode = getNode;
49
+ const getNodesByType = function () {
50
+ let target = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
51
+ let type = arguments.length > 1 ? arguments[1] : undefined;
52
+ let nodes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
53
+ Array.isArray(target) && target.forEach(n => {
54
+ if (n.type === type) {
55
+ nodes.push(n);
56
+ } else {
57
+ if (Array.isArray(n.children) && n.children.length > 0) {
58
+ getNodesByType(n, type, nodes);
59
+ }
60
+ }
61
+ });
62
+ return nodes;
63
+ };
64
+ exports.getNodesByType = getNodesByType;
49
65
  const getNodeType = node => {
50
66
  return _slate.Element.isElement(node) ? node.type : '';
51
67
  };
@@ -0,0 +1,15 @@
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 _elementTypes = require("../../constants/element-types");
9
+ var _renderElem = _interopRequireDefault(require("./render-elem"));
10
+ const DefinitionPlugin = {
11
+ type: _elementTypes.DEFINITION,
12
+ nodeType: 'element',
13
+ renderElements: [_renderElem.default]
14
+ };
15
+ var _default = exports.default = DefinitionPlugin;
@@ -0,0 +1,4 @@
1
+ .sf-virtual-definition {
2
+ margin-top: 0 !important;
3
+ margin-bottom: 0 !important;
4
+ }
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _react = _interopRequireWildcard(require("react"));
9
+ var _components = require("../../../../components");
10
+ require("./index.css");
11
+ /* eslint-disable react-hooks/rules-of-hooks */
12
+
13
+ const renderDefinition = (_ref, editor) => {
14
+ let {
15
+ attributes,
16
+ children,
17
+ element
18
+ } = _ref;
19
+ const [isShowConfirmDialog, setIsShowConfirmDialog] = (0, _react.useState)(false);
20
+ const onHrefClick = (0, _react.useCallback)(event => {
21
+ event.preventDefault();
22
+ if (element.url.startsWith(window.location.origin)) {
23
+ window.open(element.url);
24
+ return;
25
+ }
26
+ setIsShowConfirmDialog(true);
27
+ }, [element.url]);
28
+ const onToggle = (0, _react.useCallback)(() => {
29
+ setIsShowConfirmDialog(!isShowConfirmDialog);
30
+ }, [isShowConfirmDialog]);
31
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("p", Object.assign({
32
+ "data-url": element.url,
33
+ "data-id": element.id,
34
+ className: "sf-virtual-definition"
35
+ }, attributes), /*#__PURE__*/_react.default.createElement("span", null, element.identifier + '. '), /*#__PURE__*/_react.default.createElement("a", {
36
+ href: element.url,
37
+ "data-url": element.url,
38
+ onClick: onHrefClick
39
+ }, children)), isShowConfirmDialog && /*#__PURE__*/_react.default.createElement(_components.LinkVerifiedDialog, {
40
+ link: element.url,
41
+ onToggle: onToggle
42
+ }));
43
+ };
44
+ var _default = exports.default = renderDefinition;
@@ -28,6 +28,12 @@ Object.defineProperty(exports, "ColumnPlugin", {
28
28
  return _column.default;
29
29
  }
30
30
  });
31
+ Object.defineProperty(exports, "DefinitionPlugin", {
32
+ enumerable: true,
33
+ get: function () {
34
+ return _definition.default;
35
+ }
36
+ });
31
37
  Object.defineProperty(exports, "FormulaPlugin", {
32
38
  enumerable: true,
33
39
  get: function () {
@@ -58,6 +64,12 @@ Object.defineProperty(exports, "LinkPlugin", {
58
64
  return _link.default;
59
65
  }
60
66
  });
67
+ Object.defineProperty(exports, "LinkReferencePlugin", {
68
+ enumerable: true,
69
+ get: function () {
70
+ return _linkReference.default;
71
+ }
72
+ });
61
73
  Object.defineProperty(exports, "ListPlugin", {
62
74
  enumerable: true,
63
75
  get: function () {
@@ -110,7 +122,9 @@ var _formula = _interopRequireDefault(require("./formula"));
110
122
  var _column = _interopRequireDefault(require("./column"));
111
123
  var _markdown = _interopRequireDefault(require("./markdown"));
112
124
  var _html = _interopRequireDefault(require("./html"));
125
+ var _linkReference = _interopRequireDefault(require("./link-reference"));
126
+ var _definition = _interopRequireDefault(require("./definition"));
113
127
  const Plugins = [_paragraph.default, _textStyle.default, _header.default, _image.default, _checkList.default, _list.default, _codeBlock.default, _table.default, _blockquote.default, _link.default, _formula.default, _markdown.default, _html.default, _column.default,
114
128
  // put at the end
115
- _nodeId.default];
129
+ _nodeId.default, _linkReference.default, _definition.default];
116
130
  var _default = exports.default = Plugins;
@@ -0,0 +1,17 @@
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 _elementTypes = require("../../constants/element-types");
9
+ var _renderElem = _interopRequireDefault(require("./render-elem"));
10
+ const LinkReferencePlugin = {
11
+ type: _elementTypes.LINK_REFERENCE,
12
+ nodeType: 'element',
13
+ // editorMenus: [],
14
+ // editorPlugin: withLink,
15
+ renderElements: [_renderElem.default]
16
+ };
17
+ var _default = exports.default = LinkReferencePlugin;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _react = _interopRequireWildcard(require("react"));
9
+ var _core = require("../../../core");
10
+ var _elementTypes = require("../../../constants/element-types");
11
+ require("./index.css");
12
+ /* eslint-disable react-hooks/rules-of-hooks */
13
+
14
+ const renderLinkReference = (_ref, editor) => {
15
+ let {
16
+ attributes,
17
+ children,
18
+ element
19
+ } = _ref;
20
+ const onClick = (0, _react.useCallback)(() => {
21
+ const doms = (0, _core.getNodesByType)(editor.children, _elementTypes.DEFINITION);
22
+ const dom = doms.find(d => d.identifier === element.identifier);
23
+ if (!dom) return;
24
+ const selector = `[data-id="${dom.id}"]`;
25
+ const definitionDom = document.querySelector(selector);
26
+ if (!definitionDom) return;
27
+ definitionDom.scrollIntoView({
28
+ behavior: 'smooth',
29
+ block: 'center'
30
+ });
31
+ }, [element, editor]);
32
+ return /*#__PURE__*/_react.default.createElement("sup", Object.assign({
33
+ onClick: onClick,
34
+ className: "sf-virtual-link-reference",
35
+ "data-id": element.id
36
+ }, attributes, {
37
+ title: element.label
38
+ }), `[${element.identifier}]`);
39
+ };
40
+ var _default = exports.default = renderLinkReference;
@@ -41,6 +41,16 @@ const SlateElement = props => {
41
41
  const [renderLink] = _plugins.LinkPlugin.renderElements;
42
42
  return renderLink(props, editor);
43
43
  }
44
+ case ElementType.LINK_REFERENCE:
45
+ {
46
+ const [renderLinkReferencePlugin] = _plugins.LinkReferencePlugin.renderElements;
47
+ return renderLinkReferencePlugin(props, editor);
48
+ }
49
+ case ElementType.DEFINITION:
50
+ {
51
+ const [renderDefinition] = _plugins.DefinitionPlugin.renderElements;
52
+ return renderDefinition(props, editor);
53
+ }
44
54
  case ElementType.CODE_BLOCK:
45
55
  {
46
56
  const [renderCodeBlock] = _plugins.CodeBlockPlugin.renderElements;
@@ -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.transformUnorderedList = exports.transformTableRow = exports.transformTableCell = exports.transformTable = exports.transformParagraph = exports.transformOrderedList = exports.transformMath = exports.transformListItem = exports.transformListContent = exports.transformList = exports.transformHtml = exports.transformHr = exports.transformHeader = exports.transformCodeLine = exports.transformCodeBlock = exports.transformCheckListItem = exports.transformCheckList = exports.transformBlockquote = exports.transformBlockHtml = exports.formatMdToSlate = void 0;
7
+ exports.transformUnorderedList = exports.transformTableRow = exports.transformTableCell = exports.transformTable = exports.transformParagraph = exports.transformOrderedList = exports.transformMath = exports.transformListItem = exports.transformListContent = exports.transformList = exports.transformHtml = exports.transformHr = exports.transformHeader = exports.transformDefinition = exports.transformCodeLine = exports.transformCodeBlock = exports.transformCheckListItem = exports.transformCheckList = exports.transformBlockquote = exports.transformBlockHtml = exports.formatMdToSlate = void 0;
8
8
  var _slugid = _interopRequireDefault(require("slugid"));
9
9
  var _core = require("../../extension/core");
10
10
  var _elementTypes = require("../../extension/constants/element-types");
@@ -99,6 +99,21 @@ const applyMarkForInlineItem = function (result, item) {
99
99
  textNode = {};
100
100
  return;
101
101
  }
102
+ if (type === 'linkReference') {
103
+ var _item$children$;
104
+ textNode['type'] = _elementTypes.LINK_REFERENCE;
105
+ textNode['identifier'] = item.identifier;
106
+ textNode['referenceType'] = item.referenceType;
107
+ textNode['label'] = (_item$children$ = item.children[0]) === null || _item$children$ === void 0 ? void 0 : _item$children$.value;
108
+ textNode['children'] = [{
109
+ id: textNode.id,
110
+ text: ''
111
+ }];
112
+ result.push({
113
+ ...textNode
114
+ });
115
+ return;
116
+ }
102
117
  const attr_key = INLINE_KEY_MAP[type];
103
118
  if (!Array.isArray(children) || children.length === 0 || !attr_key) {
104
119
  textNode['text'] = value || '';
@@ -351,6 +366,20 @@ const transformCodeBlock = node => {
351
366
  };
352
367
  };
353
368
  exports.transformCodeBlock = transformCodeBlock;
369
+ const transformDefinition = node => {
370
+ return {
371
+ id: _slugid.default.nice(),
372
+ type: _elementTypes.DEFINITION,
373
+ identifier: node.identifier,
374
+ url: node === null || node === void 0 ? void 0 : node.url,
375
+ title: node === null || node === void 0 ? void 0 : node.title,
376
+ children: [{
377
+ id: _slugid.default.nice(),
378
+ text: node === null || node === void 0 ? void 0 : node.title
379
+ }]
380
+ };
381
+ };
382
+ exports.transformDefinition = transformDefinition;
354
383
  const transformHr = node => {
355
384
  return {
356
385
  id: _slugid.default.nice(),
@@ -430,7 +459,8 @@ const elementHandlers = {
430
459
  'code': transformCodeBlock,
431
460
  'thematicBreak': transformHr,
432
461
  'math': transformMath,
433
- 'html': transformBlockHtml
462
+ 'html': transformBlockHtml,
463
+ 'definition': transformDefinition
434
464
  };
435
465
  const formatMdToSlate = children => {
436
466
  const validChildren = children.filter(child => elementHandlers[child.type]);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/seafile-editor",
3
- "version": "2.0.34",
3
+ "version": "2.0.35",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -87,6 +87,7 @@
87
87
  "dependencies": {
88
88
  "@seafile/react-image-lightbox": "4.0.2",
89
89
  "classnames": "2.3.2",
90
+ "copy-to-clipboard": "3.3.1",
90
91
  "deep-copy": "1.4.2",
91
92
  "deepmerge": "4.3.1",
92
93
  "is-url": "^1.2.4",
@@ -235,5 +235,8 @@
235
235
  "Horizontal_align": "Horizontal align",
236
236
  "Underline": "Underline",
237
237
  "Row_number": "Row number",
238
- "Column_number": "Column number"
238
+ "Column_number": "Column number",
239
+ "This_link_is_not_verified": "This link is not verified",
240
+ "This_link_is_not_verified_tip": "Before continuing, please ensure you trust this link. If you do not trust the URL, do not open the link to access the site.",
241
+ "Copy_link": "Copy link"
239
242
  }