blob: a76c59fb3747965109847e5c1eece9bcc460f244 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
import PostAttachmentList from './post_attachment_list.jsx';
import PostAttachmentOEmbed from './post_attachment_oembed.jsx';
import PostImage from './post_image.jsx';
import YoutubeVideo from './youtube_video.jsx';
import Constants from '../utils/constants.jsx';
import OEmbedProviders from './providers.json';
import * as Utils from '../utils/utils.jsx';
export default class PostBodyAdditionalContent extends React.Component {
constructor(props) {
super(props);
this.getSlackAttachment = this.getSlackAttachment.bind(this);
this.getOEmbedProvider = this.getOEmbedProvider.bind(this);
}
shouldComponentUpdate(nextProps) {
if (!Utils.areObjectsEqual(nextProps.post, this.props.post)) {
return true;
}
return false;
}
getSlackAttachment() {
let attachments = [];
if (this.props.post.props && this.props.post.props.attachments) {
attachments = this.props.post.props.attachments;
}
return (
<PostAttachmentList
attachments={attachments}
/>
);
}
getOEmbedProvider(link) {
for (let i = 0; i < OEmbedProviders.length; i++) {
for (let j = 0; j < OEmbedProviders[i].patterns.length; j++) {
if (link.match(OEmbedProviders[i].patterns[j])) {
return OEmbedProviders[i];
}
}
}
return null;
}
render() {
if (this.props.post.type === 'slack_attachment') {
return this.getSlackAttachment();
}
const link = Utils.extractLinks(this.props.post.message)[0];
if (!link) {
return null;
}
if (Utils.isFeatureEnabled(Constants.PRE_RELEASE_FEATURES.EMBED_PREVIEW)) {
const provider = this.getOEmbedProvider(link);
if (provider) {
return (
<PostAttachmentOEmbed
provider={provider}
link={link}
/>
);
}
}
if (YoutubeVideo.isYoutubeLink(link)) {
return (
<YoutubeVideo
channelId={this.props.post.channel_id}
link={link}
/>
);
}
for (let i = 0; i < Constants.IMAGE_TYPES.length; i++) {
const imageType = Constants.IMAGE_TYPES[i];
const suffix = link.substring(link.length - (imageType.length + 1));
if (suffix === '.' + imageType || suffix === '=' + imageType) {
return (
<PostImage
channelId={this.props.post.channel_id}
link={link}
/>
);
}
}
return null;
}
}
PostBodyAdditionalContent.propTypes = {
post: React.PropTypes.object.isRequired
};
|