@seafile/sdoc-editor 3.0.233 → 3.0.234

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.
@@ -4,11 +4,12 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.deserializeHtml = void 0;
7
+ exports.normalizePastedHtml = exports.deserializeHtml = void 0;
8
8
  var _slugid = _interopRequireDefault(require("slugid"));
9
9
  var _typeOf = _interopRequireDefault(require("type-of"));
10
10
  var _constants = require("../../constants");
11
11
  var _rules = _interopRequireDefault(require("./rules"));
12
+ var _wechatPasteNormalizer = require("./wechat-paste-normalizer");
12
13
  var cruftNewline = function cruftNewline(element) {
13
14
  return !(element.nodeName === '#text' && element.nodeValue === '\n');
14
15
  };
@@ -121,6 +122,11 @@ var parseHtml = function parseHtml(html) {
121
122
  var body = parsed.body;
122
123
  return body;
123
124
  };
125
+ var normalizePastedHtml = exports.normalizePastedHtml = function normalizePastedHtml(html) {
126
+ var fragment = parseHtml(html);
127
+ (0, _wechatPasteNormalizer.normalizeWechatPastedFragment)(fragment);
128
+ return fragment.innerHTML;
129
+ };
124
130
  var deserializeHtml = exports.deserializeHtml = function deserializeHtml(html) {
125
131
  var fragment = parseHtml(html);
126
132
  var children = Array.from(fragment.childNodes);
@@ -37,7 +37,8 @@ var withHtml = function withHtml(editor) {
37
37
  }
38
38
  var htmlContent = data.getData('text/html') || '';
39
39
  if (htmlContent) {
40
- var content = (0, _helper.deserializeHtml)(htmlContent);
40
+ var normalizedHtmlContent = (0, _helper.normalizePastedHtml)(htmlContent);
41
+ var content = (0, _helper.deserializeHtml)(normalizedHtmlContent);
41
42
  _localStorageUtils["default"].setItem(_constants.RECENT_COPY_CONTENT, htmlContent);
42
43
  editor.insertFragment(content);
43
44
  return;
@@ -19,10 +19,14 @@ var headerRule = function headerRule(element, parseChild) {
19
19
  var nodeName = element.nodeName,
20
20
  childNodes = element.childNodes;
21
21
  if (nodeName && HEADER_LIST.includes(nodeName)) {
22
+ var children = parseChild(childNodes);
22
23
  return {
23
24
  id: _slugid["default"].nice(),
24
25
  type: HEADER_TYPE_MAP[nodeName],
25
- children: parseChild(childNodes)
26
+ children: children.length > 0 ? children : [{
27
+ id: _slugid["default"].nice(),
28
+ text: ''
29
+ }]
26
30
  };
27
31
  }
28
32
  return;
@@ -10,11 +10,16 @@ var _constants = require("../../../constants");
10
10
  var imageRule = function imageRule(element, parseChild) {
11
11
  var nodeName = element.nodeName;
12
12
  if (nodeName === 'IMG') {
13
+ var src = element.getAttribute('src');
14
+ if (!src || !src.trim()) return {
15
+ id: _slugid["default"].nice(),
16
+ text: ''
17
+ };
13
18
  return {
14
19
  id: _slugid["default"].nice(),
15
20
  type: _constants.IMAGE,
16
21
  data: {
17
- src: element.getAttribute('src')
22
+ src: src
18
23
  },
19
24
  children: [{
20
25
  text: '',
@@ -11,16 +11,23 @@ var _constants = require("../../../constants");
11
11
  var _linkHelpers = require("../../image/link-helpers");
12
12
  var linkRule = function linkRule(element, parseChild) {
13
13
  var nodeName = element.nodeName;
14
- var content = element.textContent || element.getAttribute('title') || element.getAttribute('href');
15
14
  if (nodeName === 'A') {
15
+ var content = [element.textContent, element.getAttribute('title'), element.getAttribute('href')].find(function (value) {
16
+ return value === null || value === void 0 ? void 0 : value.trim();
17
+ });
16
18
  var image = (0, _linkHelpers.getOnlyImageChild)(element);
17
19
  if (image) {
20
+ var src = image.getAttribute('src');
21
+ if (!src || !src.trim()) return {
22
+ id: _slugid["default"].nice(),
23
+ text: ''
24
+ };
18
25
  var href = (0, _linkHelpers.normalizeWebUrl)(element.getAttribute('href'));
19
26
  return {
20
27
  id: _slugid["default"].nice(),
21
28
  type: _constants.IMAGE,
22
29
  data: (0, _objectSpread2["default"])({
23
- src: image.getAttribute('src')
30
+ src: src
24
31
  }, href && {
25
32
  href: href
26
33
  }),
@@ -40,6 +47,7 @@ var linkRule = function linkRule(element, parseChild) {
40
47
  })
41
48
  });
42
49
  if (typeof child.text === 'string') {
50
+ if (!child.text) return child;
43
51
  return {
44
52
  id: _slugid["default"].nice(),
45
53
  type: _constants.LINK,
@@ -51,6 +59,10 @@ var linkRule = function linkRule(element, parseChild) {
51
59
  return child;
52
60
  });
53
61
  }
62
+ if (!content) return {
63
+ id: _slugid["default"].nice(),
64
+ text: ''
65
+ };
54
66
  return {
55
67
  id: _slugid["default"].nice(),
56
68
  type: _constants.LINK,
@@ -11,10 +11,14 @@ var paragraphRule = function paragraphRule(element, parseChild) {
11
11
  var nodeName = element.nodeName,
12
12
  childNodes = element.childNodes;
13
13
  if (nodeName === 'P' && element.parentElement.nodeName !== 'LI') {
14
+ var children = parseChild(childNodes);
14
15
  return {
15
16
  id: _slugid["default"].nice(),
16
17
  type: _constants.PARAGRAPH,
17
- children: parseChild(childNodes)
18
+ children: children.length > 0 ? children : [{
19
+ id: _slugid["default"].nice(),
20
+ text: ''
21
+ }]
18
22
  };
19
23
  }
20
24
  return;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.normalizeWechatPastedFragment = void 0;
7
+ var WECHAT_REPLY_BREAK_ATTRIBUTE = 'data-sdoc-wechat-reply-break';
8
+ var WECHAT_REPLY_SELECTOR = 'div.discuss_media.js_reply_item[data-reply-id][data-content-id]';
9
+ var addWechatCommentReplyBreaks = function addWechatCommentReplyBreaks(fragment) {
10
+ var replies = fragment.querySelectorAll(WECHAT_REPLY_SELECTOR);
11
+ replies.forEach(function (reply) {
12
+ var replyId = reply.getAttribute('data-reply-id');
13
+ var contentId = reply.getAttribute('data-content-id');
14
+ var commentItem = reply.closest('li.js_comment_item.discuss_item');
15
+ if (!replyId || !contentId || !commentItem || commentItem.getAttribute('data-content-id') !== contentId) {
16
+ return;
17
+ }
18
+ var commentParts = Array.from(commentItem.querySelectorAll('.discuss_media[data-content-id]')).filter(function (item) {
19
+ return item.getAttribute('data-content-id') === contentId;
20
+ });
21
+ if (commentParts.indexOf(reply) <= 0) return;
22
+ var previousElement = reply.previousElementSibling;
23
+ if ((previousElement === null || previousElement === void 0 ? void 0 : previousElement.getAttribute(WECHAT_REPLY_BREAK_ATTRIBUTE)) === 'true') return;
24
+ var breakElement = fragment.ownerDocument.createElement('span');
25
+ breakElement.setAttribute(WECHAT_REPLY_BREAK_ATTRIBUTE, 'true');
26
+ breakElement.textContent = '\n';
27
+ reply.before(breakElement);
28
+ });
29
+ };
30
+ var normalizeWechatPastedFragment = exports.normalizeWechatPastedFragment = function normalizeWechatPastedFragment(fragment) {
31
+ addWechatCommentReplyBreaks(fragment);
32
+ };
@@ -197,6 +197,7 @@ var getImageURL = exports.getImageURL = function getImageURL(data, editor) {
197
197
  return _imgUrl;
198
198
  }
199
199
  }
200
+ if (url === null) return '';
200
201
 
201
202
  // upload image | drag drop image | cut image
202
203
  if (isImageUrlIsFromUpload(url)) return url;
@@ -11,10 +11,14 @@ var headerRule = function headerRule(element, parseChild) {
11
11
  var nodeName = element.nodeName,
12
12
  childNodes = element.childNodes;
13
13
  if (nodeName && _constants.HEADER_LIST.includes(nodeName)) {
14
+ var children = parseChild(childNodes);
14
15
  return {
15
16
  id: _slugid["default"].nice(),
16
17
  type: _constants.HEADER_TYPE_MAP[nodeName],
17
- children: parseChild(childNodes)
18
+ children: children.length > 0 ? children : [{
19
+ id: _slugid["default"].nice(),
20
+ text: ''
21
+ }]
18
22
  };
19
23
  }
20
24
  return;
@@ -10,11 +10,16 @@ var _constants = require("../constants");
10
10
  var imageRule = function imageRule(element, parseChild) {
11
11
  var nodeName = element.nodeName;
12
12
  if (nodeName === 'IMG') {
13
+ var src = element.getAttribute('src');
14
+ if (!src || !src.trim()) return {
15
+ id: _slugid["default"].nice(),
16
+ text: ''
17
+ };
13
18
  return {
14
19
  id: _slugid["default"].nice(),
15
20
  type: _constants.IMAGE,
16
21
  data: {
17
- src: element.getAttribute('src')
22
+ src: src
18
23
  },
19
24
  children: [{
20
25
  text: '',
@@ -11,16 +11,23 @@ var _linkHelpers = require("../../../extension/plugins/image/link-helpers");
11
11
  var _constants = require("../constants");
12
12
  var linkRule = function linkRule(element, parseChild) {
13
13
  var nodeName = element.nodeName;
14
- var content = element.textContent || element.getAttribute('title') || element.getAttribute('href');
15
14
  if (nodeName === 'A') {
15
+ var content = [element.textContent, element.getAttribute('title'), element.getAttribute('href')].find(function (value) {
16
+ return value === null || value === void 0 ? void 0 : value.trim();
17
+ });
16
18
  var image = (0, _linkHelpers.getOnlyImageChild)(element);
17
19
  if (image) {
20
+ var src = image.getAttribute('src');
21
+ if (!src || !src.trim()) return {
22
+ id: _slugid["default"].nice(),
23
+ text: ''
24
+ };
18
25
  var href = (0, _linkHelpers.normalizeWebUrl)(element.getAttribute('href'));
19
26
  return {
20
27
  id: _slugid["default"].nice(),
21
28
  type: _constants.IMAGE,
22
29
  data: (0, _objectSpread2["default"])({
23
- src: image.getAttribute('src')
30
+ src: src
24
31
  }, href && {
25
32
  href: href
26
33
  }),
@@ -40,6 +47,7 @@ var linkRule = function linkRule(element, parseChild) {
40
47
  })
41
48
  });
42
49
  if (typeof child.text === 'string') {
50
+ if (!child.text) return child;
43
51
  return {
44
52
  id: _slugid["default"].nice(),
45
53
  type: _constants.LINK,
@@ -51,6 +59,10 @@ var linkRule = function linkRule(element, parseChild) {
51
59
  return child;
52
60
  });
53
61
  }
62
+ if (!content) return {
63
+ id: _slugid["default"].nice(),
64
+ text: ''
65
+ };
54
66
  return {
55
67
  id: _slugid["default"].nice(),
56
68
  type: _constants.LINK,
@@ -11,7 +11,8 @@ var paragraphRule = function paragraphRule(element, parseChild) {
11
11
  var nodeName = element.nodeName,
12
12
  childNodes = element.childNodes;
13
13
  if (nodeName === 'P' && element.parentElement.nodeName !== 'LI') {
14
- if (childNodes.length === 0) {
14
+ var children = parseChild(childNodes);
15
+ if (children.length === 0) {
15
16
  return {
16
17
  id: _slugid["default"].nice(),
17
18
  type: _constants.PARAGRAPH,
@@ -24,7 +25,7 @@ var paragraphRule = function paragraphRule(element, parseChild) {
24
25
  return {
25
26
  id: _slugid["default"].nice(),
26
27
  type: _constants.PARAGRAPH,
27
- children: parseChild(childNodes)
28
+ children: children
28
29
  };
29
30
  }
30
31
  return;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/sdoc-editor",
3
- "version": "3.0.233",
3
+ "version": "3.0.234",
4
4
  "main": "dist/index.js",
5
5
  "scripts": {
6
6
  "test": "jest",
@@ -71,5 +71,5 @@
71
71
  "publishConfig": {
72
72
  "access": "public"
73
73
  },
74
- "gitHead": "9c710e1191cba9e4a85a901058e5d3ac2769fad9"
74
+ "gitHead": "3e872bda72ab8b41609dd2d7facbd5dc4b21508e"
75
75
  }