Use LoadingBar instead of blur to indicate that an image is loading (fixes #4060) (#7562)

master
ThibG 6 years ago committed by Eugen Rochko
parent af161e849d
commit 955d5d36e8
  1. 4
      app/javascript/mastodon/features/ui/components/image_loader.js
  2. 5
      app/javascript/styles/mastodon/components.scss

@ -1,6 +1,7 @@
import React from 'react'; import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import classNames from 'classnames'; import classNames from 'classnames';
import { LoadingBar } from 'react-redux-loading-bar';
import ZoomableImage from './zoomable_image'; import ZoomableImage from './zoomable_image';
export default class ImageLoader extends React.PureComponent { export default class ImageLoader extends React.PureComponent {
@ -23,6 +24,7 @@ export default class ImageLoader extends React.PureComponent {
state = { state = {
loading: true, loading: true,
error: false, error: false,
width: null,
} }
removers = []; removers = [];
@ -122,6 +124,7 @@ export default class ImageLoader extends React.PureComponent {
setCanvasRef = c => { setCanvasRef = c => {
this.canvas = c; this.canvas = c;
if (c) this.setState({ width: c.offsetWidth });
} }
render () { render () {
@ -135,6 +138,7 @@ export default class ImageLoader extends React.PureComponent {
return ( return (
<div className={className}> <div className={className}>
<LoadingBar loading={loading ? 1 : 0} className='loading-bar' style={{ width: this.state.width || width }} />
{loading ? ( {loading ? (
<canvas <canvas
className='image-loader__preview-canvas' className='image-loader__preview-canvas'

@ -1478,6 +1478,7 @@ a.account__display-name {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
flex-direction: column;
.image-loader__preview-canvas { .image-loader__preview-canvas {
max-width: $media-modal-media-max-width; max-width: $media-modal-media-max-width;
@ -1486,8 +1487,8 @@ a.account__display-name {
object-fit: contain; object-fit: contain;
} }
&.image-loader--loading .image-loader__preview-canvas { .loading-bar {
filter: blur(2px); position: relative;
} }
&.image-loader--amorphous .image-loader__preview-canvas { &.image-loader--amorphous .image-loader__preview-canvas {

Loading…
Cancel
Save