[Glitch] Change media elements to use aspect-ratio rather than compute height themselves
Port 598e63dad2 to glitch-soc
Signed-off-by: Claire <claire.github-309c@sitedethib.com>
			
			
This commit is contained in:
		@@ -358,12 +358,10 @@ class MediaGallery extends React.PureComponent {
 | 
			
		||||
 | 
			
		||||
    const computedClass = classNames('media-gallery', { 'full-width': fullwidth });
 | 
			
		||||
 | 
			
		||||
    if (this.isStandaloneEligible() && width) {
 | 
			
		||||
      style.height = width / this.props.media.getIn([0, 'meta', 'small', 'aspect']);
 | 
			
		||||
    } else if (width) {
 | 
			
		||||
      style.height = width / (16/9);
 | 
			
		||||
    if (this.isStandaloneEligible()) { // TODO: cropImages setting
 | 
			
		||||
      style.aspectRatio = `${this.props.media.getIn([0, 'meta', 'small', 'aspect'])}`;
 | 
			
		||||
    } else {
 | 
			
		||||
      return (<div className={computedClass} ref={this.handleRef} />);
 | 
			
		||||
      style.aspectRatio = '16 / 9';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (this.isStandaloneEligible()) {
 | 
			
		||||
 
 | 
			
		||||
@@ -3,62 +3,22 @@ import PropTypes from 'prop-types';
 | 
			
		||||
import Icon from 'flavours/glitch/components/icon';
 | 
			
		||||
import { removePictureInPicture } from 'flavours/glitch/actions/picture_in_picture';
 | 
			
		||||
import { connect } from 'react-redux';
 | 
			
		||||
import { debounce } from 'lodash';
 | 
			
		||||
import { FormattedMessage } from 'react-intl';
 | 
			
		||||
 | 
			
		||||
class PictureInPicturePlaceholder extends React.PureComponent {
 | 
			
		||||
 | 
			
		||||
  static propTypes = {
 | 
			
		||||
    width: PropTypes.number,
 | 
			
		||||
    dispatch: PropTypes.func.isRequired,
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  state = {
 | 
			
		||||
    width: this.props.width,
 | 
			
		||||
    height: this.props.width && (this.props.width / (16/9)),
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  handleClick = () => {
 | 
			
		||||
    const { dispatch } = this.props;
 | 
			
		||||
    dispatch(removePictureInPicture());
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  setRef = c => {
 | 
			
		||||
    this.node = c;
 | 
			
		||||
 | 
			
		||||
    if (this.node) {
 | 
			
		||||
      this._setDimensions();
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  _setDimensions () {
 | 
			
		||||
    const width  = this.node.offsetWidth;
 | 
			
		||||
    const height = width / (16/9);
 | 
			
		||||
 | 
			
		||||
    this.setState({ width, height });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  componentDidMount () {
 | 
			
		||||
    window.addEventListener('resize', this.handleResize, { passive: true });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  componentWillUnmount () {
 | 
			
		||||
    window.removeEventListener('resize', this.handleResize);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  handleResize = debounce(() => {
 | 
			
		||||
    if (this.node) {
 | 
			
		||||
      this._setDimensions();
 | 
			
		||||
    }
 | 
			
		||||
  }, 250, {
 | 
			
		||||
    trailing: true,
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  render () {
 | 
			
		||||
    const { height } = this.state;
 | 
			
		||||
 | 
			
		||||
    return (
 | 
			
		||||
      <div ref={this.setRef} className='picture-in-picture-placeholder' style={{ height }} role='button' tabIndex={0} onClick={this.handleClick}>
 | 
			
		||||
      <div className='picture-in-picture-placeholder' role='button' tabIndex={0} onClick={this.handleClick}>
 | 
			
		||||
        <Icon id='window-restore' />
 | 
			
		||||
        <FormattedMessage id='picture_in_picture.restore' defaultMessage='Put it back' />
 | 
			
		||||
      </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -624,7 +624,7 @@ class Status extends ImmutablePureComponent {
 | 
			
		||||
    attachments = status.get('media_attachments');
 | 
			
		||||
 | 
			
		||||
    if (pictureInPicture.get('inUse')) {
 | 
			
		||||
      media.push(<PictureInPicturePlaceholder width={this.props.cachedMediaWidth} />);
 | 
			
		||||
      media.push(<PictureInPicturePlaceholder />);
 | 
			
		||||
      mediaIcons.push('video-camera');
 | 
			
		||||
    } else if (attachments.size > 0) {
 | 
			
		||||
      if (muted || attachments.some(item => item.get('type') === 'unknown')) {
 | 
			
		||||
@@ -680,8 +680,6 @@ class Status extends ImmutablePureComponent {
 | 
			
		||||
              fullwidth={!rootId && settings.getIn(['media', 'fullwidth'])}
 | 
			
		||||
              preventPlayback={isCollapsed || !isExpanded}
 | 
			
		||||
              onOpenVideo={this.handleOpenVideo}
 | 
			
		||||
              width={this.props.cachedMediaWidth}
 | 
			
		||||
              cacheWidth={this.props.cacheMediaWidth}
 | 
			
		||||
              deployPictureInPicture={pictureInPicture.get('available') ? this.handleDeployPictureInPicture : undefined}
 | 
			
		||||
              visible={this.state.showMedia}
 | 
			
		||||
              onToggleVisibility={this.handleToggleMediaVisibility}
 | 
			
		||||
@@ -721,8 +719,6 @@ class Status extends ImmutablePureComponent {
 | 
			
		||||
          onOpenMedia={this.handleOpenMedia}
 | 
			
		||||
          card={status.get('card')}
 | 
			
		||||
          compact
 | 
			
		||||
          cacheWidth={this.props.cacheMediaWidth}
 | 
			
		||||
          defaultWidth={this.props.cachedMediaWidth}
 | 
			
		||||
          sensitive={status.get('sensitive')}
 | 
			
		||||
        />,
 | 
			
		||||
      );
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user