logo

mastofe

My custom branche(s) on git.pleroma.social/pleroma/mastofe
commit: 684001d729a4684ab00a24e31ec39f8cae6e37a7
parent: 292f3cd7e0db0d71cb3202e65185f06fd04c475f
Author: Eugen Rochko <eugen@zeonfederated.com>
Date:   Sun,  8 Oct 2017 02:34:49 +0200

Dynamically calculate card height for embeds instead of padding (#5265)

The padding trick was hard-coded to a 16:9 ratio, but we can use
width and height provided from OEmbed information and width
of the card itself to calculate a new height

Diffstat:

Mapp/javascript/mastodon/features/status/components/card.js19+++++++++++++++++--
Mapp/javascript/styles/components.scss17++---------------
2 files changed, 19 insertions(+), 17 deletions(-)

diff --git a/app/javascript/mastodon/features/status/components/card.js b/app/javascript/mastodon/features/status/components/card.js @@ -30,6 +30,10 @@ export default class Card extends React.PureComponent { maxDescription: 50, }; + state = { + width: 0, + }; + renderLink () { const { card, maxDescription } = this.props; @@ -75,14 +79,25 @@ export default class Card extends React.PureComponent { ); } + setRef = c => { + if (c) { + this.setState({ width: c.offsetWidth }); + } + } + renderVideo () { - const { card } = this.props; - const content = { __html: card.get('html') }; + const { card } = this.props; + const content = { __html: card.get('html') }; + const { width } = this.state; + const ratio = card.get('width') / card.get('height'); + const height = card.get('width') > card.get('height') ? (width / ratio) : (width * ratio); return ( <div + ref={this.setRef} className='status-card-video' dangerouslySetInnerHTML={content} + style={{ height }} /> ); } diff --git a/app/javascript/styles/components.scss b/app/javascript/styles/components.scss @@ -2155,22 +2155,9 @@ button.icon-button.active i.fa-retweet { } .status-card-video { - position: relative; - width: 100%; - height: auto; - padding-top: 56.25%; - iframe { - position: absolute; - top: 0; - left: 0; - bottom: 0; - right: 0; - width: 1px; - min-width: 100%; - height: 1px; - min-height: 100%; - margin: auto; + width: 100%; + height: 100%; } }