commit: b79ab15859e7f8383526afd147e8416d2df2f7a7
parent: 77406d3a092db48250a85984dde2f2cc81386146
Author: Eugen Rochko <eugen@zeonfederated.com>
Date: Thu, 8 Mar 2018 08:57:21 +0100
When enabled, always display media in gallery. Also: click to reveal (#6692)
Fix #6677
Diffstat:
3 files changed, 45 insertions(+), 8 deletions(-)
diff --git a/app/javascript/mastodon/components/permalink.js b/app/javascript/mastodon/components/permalink.js
@@ -12,9 +12,15 @@ export default class Permalink extends React.PureComponent {
href: PropTypes.string.isRequired,
to: PropTypes.string.isRequired,
children: PropTypes.node,
+ onInterceptClick: PropTypes.func,
};
- handleClick = (e) => {
+ handleClick = e => {
+ if (this.props.onInterceptClick && this.props.onInterceptClick()) {
+ e.preventDefault();
+ return;
+ }
+
if (this.context.router && e.button === 0 && !(e.ctrlKey || e.metaKey)) {
e.preventDefault();
this.context.router.history.push(this.props.to);
@@ -22,7 +28,7 @@ export default class Permalink extends React.PureComponent {
}
render () {
- const { href, children, className, ...other } = this.props;
+ const { href, children, className, onInterceptClick, ...other } = this.props;
return (
<a target='_blank' href={href} onClick={this.handleClick} {...other} className={`permalink${className ? ' ' + className : ''}`}>
diff --git a/app/javascript/mastodon/features/account_gallery/components/media_item.js b/app/javascript/mastodon/features/account_gallery/components/media_item.js
@@ -2,6 +2,7 @@ import React from 'react';
import ImmutablePropTypes from 'react-immutable-proptypes';
import ImmutablePureComponent from 'react-immutable-pure-component';
import Permalink from '../../../components/permalink';
+import { displaySensitiveMedia } from '../../../initial_state';
export default class MediaItem extends ImmutablePureComponent {
@@ -9,8 +10,22 @@ export default class MediaItem extends ImmutablePureComponent {
media: ImmutablePropTypes.map.isRequired,
};
+ state = {
+ visible: !this.props.media.getIn(['status', 'sensitive']) || displaySensitiveMedia,
+ };
+
+ handleClick = () => {
+ if (!this.state.visible) {
+ this.setState({ visible: true });
+ return true;
+ }
+
+ return false;
+ }
+
render () {
const { media } = this.props;
+ const { visible } = this.state;
const status = media.get('status');
const focusX = media.getIn(['meta', 'focus', 'x']);
const focusY = media.getIn(['meta', 'focus', 'y']);
@@ -18,21 +33,28 @@ export default class MediaItem extends ImmutablePureComponent {
const y = ((focusY / -2) + .5) * 100;
const style = {};
- let content;
+ let label, icon;
if (media.get('type') === 'gifv') {
- content = <span className='media-gallery__gifv__label'>GIF</span>;
+ label = <span className='media-gallery__gifv__label'>GIF</span>;
}
- if (!status.get('sensitive')) {
+ if (visible) {
style.backgroundImage = `url(${media.get('preview_url')})`;
style.backgroundPosition = `${x}% ${y}%`;
+ } else {
+ icon = (
+ <span className='account-gallery__item__icons'>
+ <i className='fa fa-eye-slash' />
+ </span>
+ );
}
return (
<div className='account-gallery__item'>
- <Permalink to={`/statuses/${status.get('id')}`} href={status.get('url')} style={style}>
- {content}
+ <Permalink to={`/statuses/${status.get('id')}`} href={status.get('url')} style={style} onInterceptClick={this.handleClick}>
+ {icon}
+ {label}
</Permalink>
</div>
);
diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss
@@ -4680,7 +4680,7 @@ a.status-card {
background-size: cover;
background-position: center;
position: absolute;
- color: inherit;
+ color: $ui-primary-color;
text-decoration: none;
border-radius: 4px;
@@ -4688,6 +4688,7 @@ a.status-card {
&:active,
&:focus {
outline: 0;
+ color: $ui-secondary-color;
&::before {
content: "";
@@ -4699,6 +4700,14 @@ a.status-card {
}
}
}
+
+ &__icons {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ font-size: 24px;
+ }
}
.account__section-headline {