Auto-embed gifs from .gif links

Этот коммит содержится в:
JoramWilander
2015-10-22 08:45:28 -04:00
родитель 02a6f6b2cd
Коммит d4f1f981a5
4 изменённых файлов: 72 добавлений и 5 удалений

Просмотреть файл

@@ -15,6 +15,9 @@ export default class PostBody extends React.Component {
this.receivedYoutubeData = false;
this.parseEmojis = this.parseEmojis.bind(this);
this.createEmbed = this.createEmbed.bind(this);
this.createGifEmbed = this.createGifEmbed.bind(this);
this.loadGif = this.loadGif.bind(this);
this.createYoutubeEmbed = this.createYoutubeEmbed.bind(this);
const linkData = Utils.extractLinks(this.props.post.message);
@@ -46,6 +49,7 @@ export default class PostBody extends React.Component {
componentDidUpdate() {
this.parseEmojis();
this.props.resize();
}
componentWillReceiveProps(nextProps) {
@@ -53,6 +57,46 @@ export default class PostBody extends React.Component {
this.setState({links: linkData.links, message: linkData.text});
}
createEmbed(link) {
let embed = this.createYoutubeEmbed(link);
if (embed != null) {
return embed;
}
embed = this.createGifEmbed(link);
return embed;
}
loadGif(src) {
const gif = new Image();
gif.src = src;
gif.onload = (
() => {
this.setState({gifLoaded: true});
}
);
}
createGifEmbed(link) {
if (link.substring(link.length - 4) !== '.gif') {
return null;
}
if (!this.state.gifLoaded) {
this.loadGif(link);
return null;
}
return (
<img
className='gif-div'
src={link}
/>
);
}
handleYoutubeTime(link) {
const timeRegex = /[\\?&]t=([0-9hms]+)/;
@@ -247,7 +291,7 @@ export default class PostBody extends React.Component {
let embed;
if (filenames.length === 0 && this.state.links) {
embed = this.createYoutubeEmbed(this.state.links[0]);
embed = this.createEmbed(this.state.links[0]);
}
let fileAttachmentHolder = '';
@@ -287,5 +331,6 @@ PostBody.propTypes = {
post: React.PropTypes.object.isRequired,
parentPost: React.PropTypes.object,
retryPost: React.PropTypes.func.isRequired,
handleCommentClick: React.PropTypes.func.isRequired
handleCommentClick: React.PropTypes.func.isRequired,
resize: React.PropTypes.func.isRequired
};