diff --git a/src/components/MessagesList/MessagesGroup/Message/MessagePart/FilePreview.vue b/src/components/MessagesList/MessagesGroup/Message/MessagePart/FilePreview.vue index 820b99d9fde..01dce9ab0e8 100644 --- a/src/components/MessagesList/MessagesGroup/Message/MessagePart/FilePreview.vue +++ b/src/components/MessagesList/MessagesGroup/Message/MessagePart/FilePreview.vue @@ -28,16 +28,22 @@ :class="{ 'file-preview--viewer-available': isViewerAvailable, 'file-preview--upload-editor': isUploadEditor }" @click="handleClick" @keydown.enter="handleClick"> - - +
+ + + +
@@ -272,6 +278,15 @@ export default { return false }, + isPlayable() { + // don't show play button for direct renders + if (this.failed || !this.isViewerAvailable || this.previewType !== PREVIEW_TYPE.PREVIEW) { + return false + } + + // videos only display a preview, so always show a button if playable + return this.mimetype === 'image/gif' || this.mimetype.startsWith('video/') + }, internalAbsolutePath() { if (this.path.startsWith('/')) { return this.path @@ -398,6 +413,42 @@ export default { max-height: 64px; } + .image-container { + display: inline-block; + position: relative; + + &.playable { + .preview { + transition: filter 250ms ease-in-out; + } + + .play-video-button { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + padding: 22px; + border: 2px solid white; + border-radius: 25px; + opacity: 0.8; + z-index: 1; + transition: opacity 250ms ease-in-out; + background-size: 25px; + background-position-x: 11px; + } + + &:hover { + .preview { + filter: brightness(80%); + } + + .play-video-button { + opacity: 1; + } + } + } + } + .mimeicon { min-height: 128px; }