@automattic/social-previews 1.1.1 → 1.1.4
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.
- package/CHANGELOG.md +13 -0
- package/dist/cjs/facebook-preview/index.js +50 -71
- package/dist/cjs/helpers.js +10 -29
- package/dist/cjs/index.js +7 -7
- package/dist/cjs/search-preview/index.js +30 -30
- package/dist/cjs/twitter-preview/index.js +29 -63
- package/dist/cjs/twitter-preview/tweet.js +283 -299
- package/dist/esm/facebook-preview/index.js +49 -67
- package/dist/esm/helpers.js +9 -28
- package/dist/esm/search-preview/index.js +31 -30
- package/dist/esm/twitter-preview/index.js +28 -58
- package/dist/esm/twitter-preview/tweet.js +281 -302
- package/package.json +57 -61
- package/src/facebook-preview/index.jsx +2 -9
- package/src/helpers.js +5 -7
- package/src/search-preview/index.jsx +0 -8
- package/src/twitter-preview/index.jsx +1 -11
- package/src/twitter-preview/tweet.jsx +13 -39
- package/LICENSE.md +0 -257
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v1.1.4 (2022-05-25)
|
|
4
|
+
|
|
5
|
+
- Add missing dependency on `@emotion/react`.
|
|
6
|
+
|
|
7
|
+
## v1.1.3 (2022-05-16)
|
|
8
|
+
|
|
9
|
+
- Remove unnecessary peer dependencies on `@wordpress/data`, `reakit-utils`, and `redux`.
|
|
10
|
+
- Add missing peer dependency on `react-dom`.
|
|
11
|
+
|
|
12
|
+
## v1.1.2 (2022-05-13)
|
|
13
|
+
|
|
14
|
+
- Dependency updates and internal code cleanup.
|
|
15
|
+
|
|
3
16
|
## v1.1.1 (2021-04-05)
|
|
4
17
|
|
|
5
18
|
- Ensure that lengthy text doesn't overflow in the Twitter preview.
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
4
|
-
|
|
5
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
6
4
|
|
|
7
5
|
Object.defineProperty(exports, "__esModule", {
|
|
@@ -9,85 +7,66 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
9
7
|
});
|
|
10
8
|
exports.default = exports.FacebookPreview = void 0;
|
|
11
9
|
|
|
12
|
-
var
|
|
13
|
-
|
|
14
|
-
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
15
|
-
|
|
16
|
-
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
17
|
-
|
|
18
|
-
var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper"));
|
|
10
|
+
var _lodash = require("lodash");
|
|
19
11
|
|
|
20
12
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
21
13
|
|
|
22
|
-
var _react =
|
|
23
|
-
|
|
24
|
-
var _lodash = require("lodash");
|
|
14
|
+
var _react = require("react");
|
|
25
15
|
|
|
26
16
|
var _helpers = require("../helpers");
|
|
27
17
|
|
|
28
18
|
require("./style.scss");
|
|
29
19
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
20
|
+
var _jsxRuntime = require("@emotion/react/jsx-runtime");
|
|
21
|
+
|
|
22
|
+
const TITLE_LENGTH = 80;
|
|
23
|
+
const DESCRIPTION_LENGTH = 200;
|
|
24
|
+
|
|
25
|
+
const baseDomain = url => url && url.replace(/^[^/]+[/]*/, '') // strip leading protocol
|
|
26
|
+
.replace(/\/.*$/, ''); // strip everything after the domain
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
const facebookTitle = (0, _helpers.firstValid)((0, _helpers.shortEnough)(TITLE_LENGTH), (0, _helpers.hardTruncation)(TITLE_LENGTH));
|
|
30
|
+
const facebookDescription = (0, _helpers.firstValid)((0, _helpers.shortEnough)(DESCRIPTION_LENGTH), (0, _helpers.hardTruncation)(DESCRIPTION_LENGTH));
|
|
31
|
+
|
|
32
|
+
class FacebookPreview extends _react.PureComponent {
|
|
33
|
+
render() {
|
|
34
|
+
const {
|
|
35
|
+
url,
|
|
36
|
+
type,
|
|
37
|
+
title,
|
|
38
|
+
description,
|
|
39
|
+
image,
|
|
40
|
+
author
|
|
41
|
+
} = this.props;
|
|
42
|
+
return (0, _jsxRuntime.jsx)("div", {
|
|
43
|
+
className: `facebook-preview facebook-preview__${type}`,
|
|
44
|
+
children: (0, _jsxRuntime.jsxs)("div", {
|
|
45
|
+
className: "facebook-preview__content",
|
|
46
|
+
children: [(0, _jsxRuntime.jsx)("div", {
|
|
47
|
+
className: "facebook-preview__image",
|
|
48
|
+
children: image && (0, _jsxRuntime.jsx)("img", {
|
|
49
|
+
alt: "Facebook Preview Thumbnail",
|
|
50
|
+
src: image
|
|
51
|
+
})
|
|
52
|
+
}), (0, _jsxRuntime.jsxs)("div", {
|
|
53
|
+
className: "facebook-preview__body",
|
|
54
|
+
children: [(0, _jsxRuntime.jsx)("div", {
|
|
55
|
+
className: "facebook-preview__url",
|
|
56
|
+
children: (0, _lodash.compact)([baseDomain(url), author]).join(' | ')
|
|
57
|
+
}), (0, _jsxRuntime.jsx)("div", {
|
|
58
|
+
className: "facebook-preview__title",
|
|
59
|
+
children: facebookTitle(title || '')
|
|
60
|
+
}), (0, _jsxRuntime.jsx)("div", {
|
|
61
|
+
className: "facebook-preview__description",
|
|
62
|
+
children: facebookDescription((0, _helpers.stripHtmlTags)(description))
|
|
63
|
+
})]
|
|
64
|
+
})]
|
|
65
|
+
})
|
|
66
|
+
});
|
|
57
67
|
}
|
|
58
68
|
|
|
59
|
-
|
|
60
|
-
key: "render",
|
|
61
|
-
value: function render() {
|
|
62
|
-
var _this$props = this.props,
|
|
63
|
-
url = _this$props.url,
|
|
64
|
-
type = _this$props.type,
|
|
65
|
-
title = _this$props.title,
|
|
66
|
-
description = _this$props.description,
|
|
67
|
-
image = _this$props.image,
|
|
68
|
-
author = _this$props.author;
|
|
69
|
-
return /*#__PURE__*/_react.default.createElement("div", {
|
|
70
|
-
className: "facebook-preview facebook-preview__".concat(type)
|
|
71
|
-
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
72
|
-
className: "facebook-preview__content"
|
|
73
|
-
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
74
|
-
className: "facebook-preview__image"
|
|
75
|
-
}, image && /*#__PURE__*/_react.default.createElement("img", {
|
|
76
|
-
alt: "Facebook Preview Thumbnail",
|
|
77
|
-
src: image
|
|
78
|
-
})), /*#__PURE__*/_react.default.createElement("div", {
|
|
79
|
-
className: "facebook-preview__body"
|
|
80
|
-
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
81
|
-
className: "facebook-preview__url"
|
|
82
|
-
}, (0, _lodash.compact)([baseDomain(url), author]).join(' | ')), /*#__PURE__*/_react.default.createElement("div", {
|
|
83
|
-
className: "facebook-preview__title"
|
|
84
|
-
}, facebookTitle(title || '')), /*#__PURE__*/_react.default.createElement("div", {
|
|
85
|
-
className: "facebook-preview__description"
|
|
86
|
-
}, facebookDescription((0, _helpers.stripHtmlTags)(description))))));
|
|
87
|
-
}
|
|
88
|
-
}]);
|
|
89
|
-
return FacebookPreview;
|
|
90
|
-
}(_react.PureComponent);
|
|
69
|
+
}
|
|
91
70
|
|
|
92
71
|
exports.FacebookPreview = FacebookPreview;
|
|
93
72
|
FacebookPreview.propTypes = {
|
package/dist/cjs/helpers.js
CHANGED
|
@@ -3,55 +3,36 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.truncatedAtSpace = exports.stripHtmlTags = exports.shortEnough = exports.hardTruncation = exports.firstValid = void 0;
|
|
7
7
|
|
|
8
8
|
var _lodash = require("lodash");
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
* External dependencies
|
|
12
|
-
*/
|
|
13
|
-
var shortEnough = function shortEnough(limit) {
|
|
14
|
-
return function (title) {
|
|
15
|
-
return title.length <= limit ? title : false;
|
|
16
|
-
};
|
|
17
|
-
};
|
|
10
|
+
const shortEnough = limit => title => title.length <= limit ? title : false;
|
|
18
11
|
|
|
19
12
|
exports.shortEnough = shortEnough;
|
|
20
13
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
return lastSpace > lower && lastSpace < upper ? title.slice(0, lastSpace).concat('…') : false;
|
|
26
|
-
};
|
|
14
|
+
const truncatedAtSpace = (lower, upper) => fullTitle => {
|
|
15
|
+
const title = fullTitle.slice(0, upper);
|
|
16
|
+
const lastSpace = title.lastIndexOf(' ');
|
|
17
|
+
return lastSpace > lower && lastSpace < upper ? title.slice(0, lastSpace).concat('…') : false;
|
|
27
18
|
};
|
|
28
19
|
|
|
29
20
|
exports.truncatedAtSpace = truncatedAtSpace;
|
|
30
21
|
|
|
31
|
-
|
|
32
|
-
return function (title) {
|
|
33
|
-
return title.slice(0, limit).concat('…');
|
|
34
|
-
};
|
|
35
|
-
};
|
|
22
|
+
const hardTruncation = limit => title => title.slice(0, limit).concat('…');
|
|
36
23
|
|
|
37
24
|
exports.hardTruncation = hardTruncation;
|
|
38
25
|
|
|
39
|
-
|
|
26
|
+
const firstValid = function () {
|
|
40
27
|
for (var _len = arguments.length, predicates = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
41
28
|
predicates[_key] = arguments[_key];
|
|
42
29
|
}
|
|
43
30
|
|
|
44
|
-
return
|
|
45
|
-
return (0, _lodash.find)(predicates, function (p) {
|
|
46
|
-
return false !== p(a);
|
|
47
|
-
})(a);
|
|
48
|
-
};
|
|
31
|
+
return a => (0, _lodash.find)(predicates, p => false !== p(a))(a);
|
|
49
32
|
};
|
|
50
33
|
|
|
51
34
|
exports.firstValid = firstValid;
|
|
52
35
|
|
|
53
|
-
|
|
54
|
-
return description ? description.replace(/(<([^>]+)>)/gi, '') : '';
|
|
55
|
-
};
|
|
36
|
+
const stripHtmlTags = description => description ? description.replace(/(<([^>]+)>)/gi, '') : '';
|
|
56
37
|
|
|
57
38
|
exports.stripHtmlTags = stripHtmlTags;
|
package/dist/cjs/index.js
CHANGED
|
@@ -7,20 +7,20 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
Object.defineProperty(exports, "FacebookPreview", {
|
|
9
9
|
enumerable: true,
|
|
10
|
-
get: function
|
|
10
|
+
get: function () {
|
|
11
11
|
return _facebookPreview.default;
|
|
12
12
|
}
|
|
13
13
|
});
|
|
14
|
-
Object.defineProperty(exports, "
|
|
14
|
+
Object.defineProperty(exports, "SearchPreview", {
|
|
15
15
|
enumerable: true,
|
|
16
|
-
get: function
|
|
17
|
-
return
|
|
16
|
+
get: function () {
|
|
17
|
+
return _searchPreview.default;
|
|
18
18
|
}
|
|
19
19
|
});
|
|
20
|
-
Object.defineProperty(exports, "
|
|
20
|
+
Object.defineProperty(exports, "TwitterPreview", {
|
|
21
21
|
enumerable: true,
|
|
22
|
-
get: function
|
|
23
|
-
return
|
|
22
|
+
get: function () {
|
|
23
|
+
return _twitterPreview.default;
|
|
24
24
|
}
|
|
25
25
|
});
|
|
26
26
|
|
|
@@ -9,47 +9,47 @@ exports.default = SearchPreview;
|
|
|
9
9
|
|
|
10
10
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
11
11
|
|
|
12
|
-
var _react = _interopRequireDefault(require("react"));
|
|
13
|
-
|
|
14
12
|
var _helpers = require("../helpers");
|
|
15
13
|
|
|
16
14
|
require("./style.scss");
|
|
17
15
|
|
|
18
|
-
|
|
19
|
-
* External dependencies
|
|
20
|
-
*/
|
|
16
|
+
var _jsxRuntime = require("@emotion/react/jsx-runtime");
|
|
21
17
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
var URL_LENGTH = 68;
|
|
26
|
-
var TITLE_LENGTH = 63;
|
|
27
|
-
var DESCRIPTION_LENGTH = 160;
|
|
18
|
+
const URL_LENGTH = 68;
|
|
19
|
+
const TITLE_LENGTH = 63;
|
|
20
|
+
const DESCRIPTION_LENGTH = 160;
|
|
28
21
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
22
|
+
const googleUrl = url => {
|
|
23
|
+
const breadcrumb = url.replace(/^[^/]+[/]*/, '').split('/').join(' › ');
|
|
24
|
+
const truncateBreadcrumb = (0, _helpers.firstValid)((0, _helpers.shortEnough)(URL_LENGTH), (0, _helpers.hardTruncation)(URL_LENGTH));
|
|
32
25
|
return truncateBreadcrumb(breadcrumb);
|
|
33
26
|
};
|
|
34
27
|
|
|
35
|
-
|
|
36
|
-
|
|
28
|
+
const googleTitle = (0, _helpers.firstValid)((0, _helpers.shortEnough)(TITLE_LENGTH), (0, _helpers.truncatedAtSpace)(TITLE_LENGTH - 40, TITLE_LENGTH + 10), (0, _helpers.hardTruncation)(TITLE_LENGTH));
|
|
29
|
+
const googleDescription = (0, _helpers.firstValid)((0, _helpers.shortEnough)(DESCRIPTION_LENGTH), (0, _helpers.truncatedAtSpace)(DESCRIPTION_LENGTH - 80, DESCRIPTION_LENGTH + 10), (0, _helpers.hardTruncation)(DESCRIPTION_LENGTH));
|
|
37
30
|
|
|
38
31
|
function SearchPreview(_ref) {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
className: "search-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
32
|
+
let {
|
|
33
|
+
description,
|
|
34
|
+
title,
|
|
35
|
+
url
|
|
36
|
+
} = _ref;
|
|
37
|
+
return (0, _jsxRuntime.jsx)("div", {
|
|
38
|
+
className: "search-preview",
|
|
39
|
+
children: (0, _jsxRuntime.jsxs)("div", {
|
|
40
|
+
className: "search-preview__display",
|
|
41
|
+
children: [(0, _jsxRuntime.jsxs)("div", {
|
|
42
|
+
className: "search-preview__url",
|
|
43
|
+
children: [googleUrl(url), " \u25BE"]
|
|
44
|
+
}), (0, _jsxRuntime.jsx)("div", {
|
|
45
|
+
className: "search-preview__title",
|
|
46
|
+
children: googleTitle(title)
|
|
47
|
+
}), (0, _jsxRuntime.jsx)("div", {
|
|
48
|
+
className: "search-preview__description",
|
|
49
|
+
children: googleDescription((0, _helpers.stripHtmlTags)(description))
|
|
50
|
+
})]
|
|
51
|
+
})
|
|
52
|
+
});
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
SearchPreview.propTypes = {
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
4
|
-
|
|
5
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
6
4
|
|
|
7
5
|
Object.defineProperty(exports, "__esModule", {
|
|
@@ -9,76 +7,44 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
9
7
|
});
|
|
10
8
|
exports.default = exports.TwitterPreview = void 0;
|
|
11
9
|
|
|
12
|
-
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
13
|
-
|
|
14
|
-
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
15
|
-
|
|
16
|
-
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
17
|
-
|
|
18
|
-
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
19
|
-
|
|
20
|
-
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
21
|
-
|
|
22
|
-
var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper"));
|
|
23
|
-
|
|
24
10
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
25
11
|
|
|
26
|
-
var _react =
|
|
12
|
+
var _react = require("react");
|
|
27
13
|
|
|
28
14
|
var _tweet = require("./tweet");
|
|
29
15
|
|
|
30
16
|
require("./style.scss");
|
|
31
17
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
return
|
|
18
|
+
var _jsxRuntime = require("@emotion/react/jsx-runtime");
|
|
19
|
+
|
|
20
|
+
class TwitterPreview extends _react.PureComponent {
|
|
21
|
+
render() {
|
|
22
|
+
// Previous versions expected passed props to be the Twitter Card details for a single tweet,
|
|
23
|
+
// rather than an array of tweets. If the tweet array isn't passed, we can construct it from
|
|
24
|
+
// the old props.
|
|
25
|
+
const tweets = this.props.tweets || [{
|
|
26
|
+
text: '',
|
|
27
|
+
media: [],
|
|
28
|
+
card: { ...this.props,
|
|
29
|
+
type: 'large_image_summary' === this.props.type ? 'summary_large_image' : this.props.type
|
|
30
|
+
},
|
|
31
|
+
date: Date.now(),
|
|
32
|
+
name: 'Account Name',
|
|
33
|
+
profileImage: 'https://abs.twimg.com/sticky/default_profile_images/default_profile_bigger.png',
|
|
34
|
+
screenName: '@account'
|
|
35
|
+
}];
|
|
36
|
+
return (0, _jsxRuntime.jsx)("div", {
|
|
37
|
+
className: "twitter-preview",
|
|
38
|
+
children: tweets && tweets.map((tweet, index) => {
|
|
39
|
+
return (0, _jsxRuntime.jsx)(_tweet.Tweet, {
|
|
40
|
+
isLast: index + 1 === tweets.length,
|
|
41
|
+
...tweet
|
|
42
|
+
}, `twitter-preview__tweet-${index}`);
|
|
43
|
+
})
|
|
44
|
+
});
|
|
51
45
|
}
|
|
52
46
|
|
|
53
|
-
|
|
54
|
-
key: "render",
|
|
55
|
-
value: function render() {
|
|
56
|
-
// Previous versions expected passed props to be the Twitter Card details for a single tweet,
|
|
57
|
-
// rather than an array of tweets. If the tweet array isn't passed, we can construct it from
|
|
58
|
-
// the old props.
|
|
59
|
-
var tweets = this.props.tweets || [{
|
|
60
|
-
text: '',
|
|
61
|
-
media: [],
|
|
62
|
-
card: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, this.props), {}, {
|
|
63
|
-
type: 'large_image_summary' === this.props.type ? 'summary_large_image' : this.props.type
|
|
64
|
-
}),
|
|
65
|
-
date: Date.now(),
|
|
66
|
-
name: 'Account Name',
|
|
67
|
-
profileImage: 'https://abs.twimg.com/sticky/default_profile_images/default_profile_bigger.png',
|
|
68
|
-
screenName: '@account'
|
|
69
|
-
}];
|
|
70
|
-
return /*#__PURE__*/_react.default.createElement("div", {
|
|
71
|
-
className: "twitter-preview"
|
|
72
|
-
}, tweets && tweets.map(function (tweet, index) {
|
|
73
|
-
return /*#__PURE__*/_react.default.createElement(_tweet.Tweet, (0, _extends2.default)({
|
|
74
|
-
key: "twitter-preview__tweet-".concat(index),
|
|
75
|
-
isLast: index + 1 === tweets.length
|
|
76
|
-
}, tweet));
|
|
77
|
-
}));
|
|
78
|
-
}
|
|
79
|
-
}]);
|
|
80
|
-
return TwitterPreview;
|
|
81
|
-
}(_react.PureComponent);
|
|
47
|
+
}
|
|
82
48
|
|
|
83
49
|
exports.TwitterPreview = TwitterPreview;
|
|
84
50
|
TwitterPreview.propTypes = {
|