PLT-862: Show images from website links below messages

Этот коммит содержится в:
Florian Orben
2015-11-13 23:55:21 +01:00
родитель f0b1adf6cf
Коммит 2a4a02b7bc
3 изменённых файлов: 23 добавлений и 19 удалений

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

@@ -16,13 +16,13 @@ export default class PostBody extends React.Component {
super(props); super(props);
this.receivedYoutubeData = false; this.receivedYoutubeData = false;
this.isGifLoading = false; this.isImgLoading = false;
this.handleUserChange = this.handleUserChange.bind(this); this.handleUserChange = this.handleUserChange.bind(this);
this.parseEmojis = this.parseEmojis.bind(this); this.parseEmojis = this.parseEmojis.bind(this);
this.createEmbed = this.createEmbed.bind(this); this.createEmbed = this.createEmbed.bind(this);
this.createGifEmbed = this.createGifEmbed.bind(this); this.createImageEmbed = this.createImageEmbed.bind(this);
this.loadGif = this.loadGif.bind(this); this.loadImg = this.loadImg.bind(this);
this.createYoutubeEmbed = this.createYoutubeEmbed.bind(this); this.createYoutubeEmbed = this.createYoutubeEmbed.bind(this);
const linkData = Utils.extractLinks(this.props.post.message); const linkData = Utils.extractLinks(this.props.post.message);
@@ -117,8 +117,12 @@ export default class PostBody extends React.Component {
return embed; return embed;
} }
if (link.substring(link.length - 4) === '.gif') { for (let i = 0; i < Constants.IMAGE_TYPES.length; i++) {
return this.createGifEmbed(link, this.state.gifLoaded); const imageType = Constants.IMAGE_TYPES[i];
const suffix = link.substring(link.length - (imageType.length + 1));
if (suffix === '.' + imageType || suffix === '=' + imageType) {
return this.createImageEmbed(link, this.state.imgLoaded);
}
} }
return null; return null;
@@ -135,29 +139,29 @@ export default class PostBody extends React.Component {
return false; return false;
} }
loadGif(src) { loadImg(src) {
if (this.isGifLoading) { if (this.isImgLoading) {
return; return;
} }
this.isGifLoading = true; this.isImgLoading = true;
const gif = new Image(); const img = new Image();
gif.onload = ( img.onload = (
() => { () => {
this.embed = this.createGifEmbed(src, true); this.embed = this.createImageEmbed(src, true);
this.setState({gifLoaded: true}); this.setState({imgLoaded: true});
} }
); );
gif.src = src; img.src = src;
} }
createGifEmbed(link, isLoaded) { createImageEmbed(link, isLoaded) {
if (!isLoaded) { if (!isLoaded) {
this.loadGif(link); this.loadImg(link);
return ( return (
<img <img
className='gif-div placeholder' className='img-div placeholder'
height='500px' height='500px'
/> />
); );
@@ -165,7 +169,7 @@ export default class PostBody extends React.Component {
return ( return (
<img <img
className='gif-div' className='img-div'
src={link} src={link}
/> />
); );

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

@@ -280,7 +280,7 @@
min-height: 100px; min-height: 100px;
} }
} }
.gif-div { .img-div {
max-width: 100%; max-width: 100%;
} }
.tip-div { .tip-div {

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

@@ -51,7 +51,7 @@
border-left:60px solid rgba(255,255,255,0.4); border-left:60px solid rgba(255,255,255,0.4);
} }
.gif-div { .img-div {
-moz-force-broken-image-icon: 1; -moz-force-broken-image-icon: 1;
position:relative; position:relative;
max-width: 450px; max-width: 450px;