about summary refs log tree commit diff
path: root/app
diff options
context:
space:
mode:
authorkibigo! <marrus-sh@users.noreply.github.com>2017-06-25 13:57:52 -0700
committerkibigo! <marrus-sh@users.noreply.github.com>2017-06-25 13:57:52 -0700
commitefacfec3ed37c200bf5bad05b59e04a9f97d0d08 (patch)
tree006ad166c0451bbbbe26adcdbe87c070d3ce5ea3 /app
parent8ea779e59a516d96e3320aaaaf1cda987752c5e6 (diff)
Media previews for collapsed toots
Diffstat (limited to 'app')
-rw-r--r--app/javascript/mastodon/components/status.js5
-rw-r--r--app/javascript/styles/components.scss16
2 files changed, 20 insertions, 1 deletions
diff --git a/app/javascript/mastodon/components/status.js b/app/javascript/mastodon/components/status.js
index d795ff000..ec9b2a255 100644
--- a/app/javascript/mastodon/components/status.js
+++ b/app/javascript/mastodon/components/status.js
@@ -175,6 +175,7 @@ class StatusUnextended extends ImmutablePureComponent {
 
   render () {
     let media = null;
+    let thumb = null;
     let statusAvatar;
 
     // Exclude intersectionObserverWrapper from `other` variable
@@ -221,8 +222,10 @@ class StatusUnextended extends ImmutablePureComponent {
 
       } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {
         media = <VideoPlayer media={status.getIn(['media_attachments', 0])} sensitive={status.get('sensitive')} onOpenVideo={this.props.onOpenVideo} />;
+        if (!status.get('sensitive')) thumb = status.getIn(['media_attachments', 0]).get('preview_url');
       } else {
         media = <MediaGallery media={status.get('media_attachments')} sensitive={status.get('sensitive')} height={110} onOpenMedia={this.props.onOpenMedia} autoPlayGif={this.props.autoPlayGif} />;
+        if (!status.get('sensitive')) thumb = status.getIn(['media_attachments', 0]).get('preview_url');
       }
     }
 
@@ -233,7 +236,7 @@ class StatusUnextended extends ImmutablePureComponent {
     }
 
     return (
-      <div className={`status ${this.props.muted ? 'muted' : ''} status-${status.get('visibility')} ${isCollapsed ? 'status-collapsed' : ''}`} data-id={status.get('id')} ref={this.handleRef}>
+      <div className={`status ${this.props.muted ? 'muted' : ''} status-${status.get('visibility')} ${isCollapsed ? 'status-collapsed' : ''}`} data-id={status.get('id')} ref={this.handleRef} style={{ backgroundImage: thumb && isCollapsed ? 'url(' + thumb + ')' : 'none' }}>
         <div className='status__info'>
 
           <IconButton
diff --git a/app/javascript/styles/components.scss b/app/javascript/styles/components.scss
index af9da6c37..c1cf5a8c3 100644
--- a/app/javascript/styles/components.scss
+++ b/app/javascript/styles/components.scss
@@ -454,6 +454,7 @@
 
 .status__content,
 .reply-indicator__content {
+  position: relative;
   font-size: 15px;
   line-height: 20px;
   color: $primary-text-color;
@@ -604,6 +605,19 @@
 
   &.status-collapsed {
     height: 48px;
+    background-position: center;
+    background-size: cover;
+
+    &::before {
+      display: block;
+      position: absolute;
+      left: 0;
+      right: 0;
+      top: 0;
+      bottom: 0;
+    	background-image: linear-gradient(to bottom, transparentize($ui-base-color, .15), transparentize($ui-base-color, .3) 24px, transparentize($ui-base-color, .35));
+      content: "";
+    }
 
     .status__content {
       height: 20px;
@@ -644,6 +658,7 @@
 }
 
 .status__collapse-button {
+  position: relative;
   float: right;
 }
 
@@ -1162,6 +1177,7 @@
 
 .display-name {
   display: block;
+  position: relative;
   max-width: 100%;
   overflow: hidden;
   text-overflow: ellipsis;