@automattic/social-previews 1.0.4 → 1.1.2
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 +18 -5
- package/README.md +38 -0
- package/dist/cjs/facebook-preview/index.js +51 -72
- package/dist/cjs/helpers.js +10 -29
- package/dist/cjs/index.js +8 -8
- package/dist/cjs/search-preview/index.js +31 -31
- package/dist/cjs/twitter-preview/index.js +32 -79
- package/dist/cjs/twitter-preview/style.scss +214 -98
- package/dist/cjs/twitter-preview/tweet.js +346 -0
- 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 +30 -74
- package/dist/esm/twitter-preview/style.scss +214 -98
- package/dist/esm/twitter-preview/tweet.js +325 -0
- package/package.json +58 -52
- 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 +31 -46
- package/src/twitter-preview/style.scss +214 -98
- package/src/twitter-preview/tweet.jsx +296 -0
- package/LICENSE.md +0 -264
package/CHANGELOG.md
CHANGED
|
@@ -1,23 +1,36 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
## v1.1.2 (2022-05-13)
|
|
4
|
+
|
|
5
|
+
- Dependency updates and internal code cleanup.
|
|
6
|
+
|
|
7
|
+
## v1.1.1 (2021-04-05)
|
|
8
|
+
|
|
9
|
+
- Ensure that lengthy text doesn't overflow in the Twitter preview.
|
|
10
|
+
|
|
11
|
+
## v1.1.0 (2020-09-10)
|
|
12
|
+
|
|
13
|
+
- Twitter: Add previewing for attached images, videos, or quoted tweets.
|
|
14
|
+
- Twitter: Add support for previewing entire threads.
|
|
15
|
+
|
|
16
|
+
## v1.0.4 (2020-08-24)
|
|
4
17
|
|
|
5
18
|
- Fixed Twitter styles for viewports < 600px in width
|
|
6
19
|
|
|
7
|
-
|
|
20
|
+
## v1.0.3 (2020-08-21)
|
|
8
21
|
|
|
9
22
|
- Refreshed styles of Twitter, Facebook and Google previews to match their latest design.
|
|
10
23
|
|
|
11
|
-
|
|
24
|
+
## v1.0.2 (2020-08-03)
|
|
12
25
|
|
|
13
26
|
- Remove `i18n-calypso` dependency by removing search preview header.
|
|
14
27
|
- Strip html tags from descriptions for social previews.
|
|
15
28
|
- Add helper function with enhanced regex for stripping html tags.
|
|
16
29
|
|
|
17
|
-
|
|
30
|
+
## v1.0.1 (2020-07-23)
|
|
18
31
|
|
|
19
32
|
- Mark CSS and SCSS files as `sideEffects` to ensure they are not discarded during build processes tree-shaking.
|
|
20
33
|
|
|
21
|
-
|
|
34
|
+
## v1.0.0 (2020-07-22)
|
|
22
35
|
|
|
23
36
|
- Initial release after extracting from Calypso.
|
package/README.md
CHANGED
|
@@ -49,6 +49,44 @@ import { SearchPreview } from '@automattic/social-previews';
|
|
|
49
49
|
/>;
|
|
50
50
|
```
|
|
51
51
|
|
|
52
|
+
Twitter previews support the same properties for previewing a single tweet, but can also preview multiple tweets in the form of a Twitter thread. For that, the `tweets` property takes an array of tweets. Each item in this array can take additional information about the tweet, giving the preview a more native feel.
|
|
53
|
+
|
|
54
|
+
```js
|
|
55
|
+
import { TwitterPreview } from '@automattic/social-previews';
|
|
56
|
+
|
|
57
|
+
const tweetTemplate = {
|
|
58
|
+
date: Date.now(),
|
|
59
|
+
name: 'My Account Name',
|
|
60
|
+
profileImage: 'https://abs.twimg.com/sticky/default_profile_images/default_profile_bigger.png',
|
|
61
|
+
screenName: '@myAccount',
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
<TwitterPreview
|
|
65
|
+
tweets={ [
|
|
66
|
+
{
|
|
67
|
+
...tweetTemplate,
|
|
68
|
+
text: 'This is the first tweet in a thread, it only has text in it.',
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
...tweetTemplate,
|
|
72
|
+
text: 'The second tweet has some images attached, too!',
|
|
73
|
+
media: [
|
|
74
|
+
{
|
|
75
|
+
alt: 'The alt text for the first image.',
|
|
76
|
+
url: 'https://url.for.the/first/image.png',
|
|
77
|
+
type: 'image/png',
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
alt: 'The alt text for the second image.',
|
|
81
|
+
url: 'https://url.for.the/second/image.png',
|
|
82
|
+
type: 'image/png',
|
|
83
|
+
},
|
|
84
|
+
],
|
|
85
|
+
},
|
|
86
|
+
] }
|
|
87
|
+
/>;
|
|
88
|
+
```
|
|
89
|
+
|
|
52
90
|
## Properties
|
|
53
91
|
|
|
54
92
|
There are a number of common properties used across all components:
|
|
@@ -1,93 +1,72 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
|
|
5
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
6
4
|
|
|
7
5
|
Object.defineProperty(exports, "__esModule", {
|
|
8
6
|
value: true
|
|
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
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
4
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
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
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
4
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
@@ -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,101 +1,54 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
|
|
5
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
6
4
|
|
|
7
5
|
Object.defineProperty(exports, "__esModule", {
|
|
8
6
|
value: true
|
|
9
7
|
});
|
|
10
8
|
exports.default = exports.TwitterPreview = void 0;
|
|
11
9
|
|
|
12
|
-
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
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"));
|
|
19
|
-
|
|
20
10
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
21
11
|
|
|
22
|
-
var _react =
|
|
12
|
+
var _react = require("react");
|
|
23
13
|
|
|
24
|
-
var
|
|
14
|
+
var _tweet = require("./tweet");
|
|
25
15
|
|
|
26
16
|
require("./style.scss");
|
|
27
17
|
|
|
28
|
-
|
|
29
|
-
|
|
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
|
-
(0, _classCallCheck2.default)(this, TwitterPreview);
|
|
56
|
-
return _super.apply(this, arguments);
|
|
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
|
+
});
|
|
57
45
|
}
|
|
58
46
|
|
|
59
|
-
|
|
60
|
-
key: "render",
|
|
61
|
-
value: function render() {
|
|
62
|
-
var _this$props = this.props,
|
|
63
|
-
url = _this$props.url,
|
|
64
|
-
title = _this$props.title,
|
|
65
|
-
type = _this$props.type,
|
|
66
|
-
description = _this$props.description,
|
|
67
|
-
image = _this$props.image;
|
|
68
|
-
var previewImageStyle = {
|
|
69
|
-
backgroundImage: 'url(' + image + ')'
|
|
70
|
-
};
|
|
71
|
-
return /*#__PURE__*/_react.default.createElement("div", {
|
|
72
|
-
className: "twitter-preview"
|
|
73
|
-
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
74
|
-
className: "twitter-preview__".concat(type)
|
|
75
|
-
}, image && /*#__PURE__*/_react.default.createElement("div", {
|
|
76
|
-
className: "twitter-preview__image",
|
|
77
|
-
style: previewImageStyle
|
|
78
|
-
}), /*#__PURE__*/_react.default.createElement("div", {
|
|
79
|
-
className: "twitter-preview__body"
|
|
80
|
-
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
81
|
-
className: "twitter-preview__title"
|
|
82
|
-
}, title), /*#__PURE__*/_react.default.createElement("div", {
|
|
83
|
-
className: "twitter-preview__description"
|
|
84
|
-
}, twitterDescription((0, _helpers.stripHtmlTags)(description))), /*#__PURE__*/_react.default.createElement("div", {
|
|
85
|
-
className: "twitter-preview__url"
|
|
86
|
-
}, baseDomain(url || '')))));
|
|
87
|
-
}
|
|
88
|
-
}]);
|
|
89
|
-
return TwitterPreview;
|
|
90
|
-
}(_react.PureComponent);
|
|
47
|
+
}
|
|
91
48
|
|
|
92
49
|
exports.TwitterPreview = TwitterPreview;
|
|
93
50
|
TwitterPreview.propTypes = {
|
|
94
|
-
|
|
95
|
-
title: _propTypes.default.string,
|
|
96
|
-
type: _propTypes.default.string,
|
|
97
|
-
description: _propTypes.default.string,
|
|
98
|
-
image: _propTypes.default.string
|
|
51
|
+
tweets: _propTypes.default.array
|
|
99
52
|
};
|
|
100
53
|
var _default = TwitterPreview;
|
|
101
54
|
exports.default = _default;
|