Added a toggle for full-width media previews

master
Ondřej Hruška 7 years ago committed by beatrix
parent e3c2183c12
commit dc2b8bdecd
  1. 5
      app/javascript/mastodon/components/media_gallery.js
  2. 2
      app/javascript/mastodon/components/status.js
  3. 7
      app/javascript/mastodon/components/video_player.js
  4. 8
      app/javascript/mastodon/features/ui/components/settings_modal.js
  5. 1
      app/javascript/mastodon/locales/en.json
  6. 1
      app/javascript/mastodon/reducers/local_settings.js
  7. 29
      app/javascript/styles/components.scss

@ -141,6 +141,7 @@ export default class MediaGallery extends React.PureComponent {
sensitive: PropTypes.bool,
media: ImmutablePropTypes.list.isRequired,
letterbox: PropTypes.bool,
fullwidth: PropTypes.bool,
height: PropTypes.number.isRequired,
onOpenMedia: PropTypes.func.isRequired,
intl: PropTypes.object.isRequired,
@ -160,7 +161,7 @@ export default class MediaGallery extends React.PureComponent {
}
render () {
const { media, intl, sensitive, letterbox } = this.props;
const { media, intl, sensitive, letterbox, fullwidth } = this.props;
let children;
@ -185,7 +186,7 @@ export default class MediaGallery extends React.PureComponent {
}
return (
<div className='media-gallery' style={{ height: `${this.props.height}px` }}>
<div className={`media-gallery ${fullwidth ? 'full-width' : ''}`} style={{ height: `${this.props.height}px` }}>
<div className={`spoiler-button ${this.state.visible ? 'spoiler-button--visible' : ''}`}>
<IconButton title={intl.formatMessage(messages.toggle_visible)} icon={this.state.visible ? 'eye' : 'eye-slash'} overlay onClick={this.handleOpen} />
</div>

@ -626,6 +626,7 @@ backgrounds for collapsed statuses are enabled.
media={attachments.get(0)}
sensitive={status.get('sensitive')}
letterbox={settings.getIn(['media', 'letterbox'])}
fullwidth={settings.getIn(['media', 'fullwidth'])}
height={250}
onOpenVideo={onOpenVideo}
/>
@ -637,6 +638,7 @@ backgrounds for collapsed statuses are enabled.
media={attachments}
sensitive={status.get('sensitive')}
letterbox={settings.getIn(['media', 'letterbox'])}
fullwidth={settings.getIn(['media', 'fullwidth'])}
height={250}
onOpenMedia={onOpenMedia}
autoPlayGif={autoPlayGif}

@ -17,6 +17,7 @@ export default class VideoPlayer extends React.PureComponent {
static propTypes = {
media: ImmutablePropTypes.map.isRequired,
letterbox: PropTypes.bool,
fullwidth: PropTypes.bool,
height: PropTypes.number,
sensitive: PropTypes.bool,
intl: PropTypes.object.isRequired,
@ -110,7 +111,7 @@ export default class VideoPlayer extends React.PureComponent {
}
render () {
const { media, intl, letterbox, height, sensitive, autoplay } = this.props;
const { media, intl, letterbox, fullwidth, height, sensitive, autoplay } = this.props;
let spoilerButton = (
<div className={`status__video-player-spoiler ${this.state.visible ? 'status__video-player-spoiler--visible' : ''}`}>
@ -156,7 +157,7 @@ export default class VideoPlayer extends React.PureComponent {
if (this.state.preview && !autoplay) {
return (
<div role='button' tabIndex='0' className='media-spoiler-video' style={{ height: `${height}px`, backgroundImage: `url(${media.get('preview_url')})` }} onClick={this.handleOpen}>
<div role='button' tabIndex='0' className={`media-spoiler-video ${fullwidth ? 'full-width' : ''}`} style={{ height: `${height}px`, backgroundImage: `url(${media.get('preview_url')})` }} onClick={this.handleOpen}>
{spoilerButton}
<div className='media-spoiler-video-play-icon'><i className='fa fa-play' /></div>
</div>
@ -172,7 +173,7 @@ export default class VideoPlayer extends React.PureComponent {
}
return (
<div className='status__video-player' style={{ height: `${height}px` }}>
<div className={`status__video-player ${fullwidth ? 'full-width' : ''}`} style={{ height: `${height}px` }}>
{spoilerButton}
{muteButton}
{expandButton}

@ -231,6 +231,14 @@ export default class SettingsModal extends React.PureComponent {
>
<FormattedMessage id='settings.media_letterbox' defaultMessage='Letterbox media' />
</SettingsItem>
<SettingsItem
settings={this.props.settings}
item={['media', 'fullwidth']}
id='mastodon-settings--media-fullwidth'
onChange={this.props.toggleSetting}
>
<FormattedMessage id='settings.media_fullwidth' defaultMessage='Full-width media previews' />
</SettingsItem>
</div>
);
}

@ -162,6 +162,7 @@
"settings.image_backgrounds_users": "Give collapsed toots an image background",
"settings.media": "Media",
"settings.media_letterbox": "Letterbox media",
"settings.media_fullwidth": "Full-width media previews",
"settings.preferences": "User preferences",
"settings.wide_view": "Wide view (Desktop mode only)",
"status.cannot_reblog": "This post cannot be boosted",

@ -21,6 +21,7 @@ const initialState = Immutable.fromJS({
},
media : {
letterbox : true,
fullwidth : true,
},
});

@ -2318,6 +2318,11 @@ button.icon-button.active i.fa-retweet {
position: relative;
text-align: center;
z-index: 100;
margin-top: 15px; // Add margin when used bare for NSFW video player
.media-gallery & {
margin-top: 0;
}
}
.media-spoiler__warning {
@ -3707,11 +3712,15 @@ button.icon-button.active i.fa-retweet {
.media-gallery {
box-sizing: border-box;
margin-top: 15px;
margin-left: -68px;
overflow: hidden;
position: relative;
width: calc(100% + 80px);
background: $base-shadow-color;
width: 100%;
&.full-width {
margin-left: -68px;
width: calc(100% + 80px);
}
.detailed-status & {
margin-left:-10px;
@ -3780,10 +3789,14 @@ button.icon-button.active i.fa-retweet {
box-sizing: border-box;
cursor: default; /* May not be needed */
margin-top: 15px;
margin-left:-68px;
width: calc(100% + 80px);
overflow: hidden;
position: relative;
width: 100%;
&.full-width {
margin-left: -68px;
width: calc(100% + 80px);
}
}
.status__video-player-video {
@ -3836,9 +3849,13 @@ button.icon-button.active i.fa-retweet {
background-position: center;
cursor: pointer;
margin-top: 15px;
margin-left: -68px;
width: calc(100% + 80px);
position: relative;
width: 100%;
&.full-width {
margin-left: -68px;
width: calc(100% + 80px);
}
}
.media-spoiler-video-play-icon {

Loading…
Cancel
Save