2019-03-19 09:26:07 +01:00
< template >
2021-11-19 11:36:12 +01:00
< div ref = "thumbnail" class = "zdjebgpv" >
2020-10-17 13:12:00 +02:00
< ImgWithBlurhash v -if = " isThumbnailAvailable " :hash ="file.blurhash" :src ="file.thumbnailUrl" :alt ="file.name" :title ="file.name" : style = "`object-fit: ${ fit }`" / >
2021-04-20 16:22:59 +02:00
< i v -else -if = " is = = = ' image ' " class = "fas fa-file-image icon" > < / i >
< i v -else -if = " is = = = ' video ' " class = "fas fa-file-video icon" > < / i >
< i v -else -if = " is = = = ' audio ' | | is = = = ' midi ' " class = "fas fa-music icon" > < / i >
< i v -else -if = " is = = = ' csv ' " class = "fas fa-file-csv icon" > < / i >
< i v -else -if = " is = = = ' pdf ' " class = "fas fa-file-pdf icon" > < / i >
< i v -else -if = " is = = = ' textfile ' " class = "fas fa-file-alt icon" > < / i >
< i v -else -if = " is = = = ' archive ' " class = "fas fa-file-archive icon" > < / i >
< i v -else class = "fas fa-file icon" > < / i >
< i v-if ="isThumbnailAvailable && is === 'video'" class="fas fa-film icon-sub" > < / i >
2019-03-19 09:26:07 +01:00
< / div >
< / template >
< script lang = "ts" >
2020-10-17 13:12:00 +02:00
import { defineComponent } from 'vue' ;
2021-11-11 18:02:25 +01:00
import ImgWithBlurhash from '@/components/img-with-blurhash.vue' ;
import { ColdDeviceStorage } from '@/store' ;
2019-03-19 09:26:07 +01:00
2020-10-17 13:12:00 +02:00
export default defineComponent ( {
2020-07-18 17:24:07 +02:00
components : {
ImgWithBlurhash
} ,
2019-03-19 09:26:07 +01:00
props : {
file : {
type : Object ,
required : true
} ,
fit : {
type : String ,
2019-09-01 22:42:30 +02:00
required : false ,
default : 'cover'
2019-03-19 09:26:07 +01:00
} ,
} ,
data ( ) {
return {
isContextmenuShowing : false ,
isDragging : false ,
} ;
} ,
computed : {
is ( ) : 'image' | 'video' | 'midi' | 'audio' | 'csv' | 'pdf' | 'textfile' | 'archive' | 'unknown' {
if ( this . file . type . startsWith ( 'image/' ) ) return 'image' ;
if ( this . file . type . startsWith ( 'video/' ) ) return 'video' ;
if ( this . file . type === 'audio/midi' ) return 'midi' ;
if ( this . file . type . startsWith ( 'audio/' ) ) return 'audio' ;
if ( this . file . type . endsWith ( '/csv' ) ) return 'csv' ;
if ( this . file . type . endsWith ( '/pdf' ) ) return 'pdf' ;
if ( this . file . type . startsWith ( 'text/' ) ) return 'textfile' ;
if ( [
"application/zip" ,
"application/x-cpio" ,
"application/x-bzip" ,
"application/x-bzip2" ,
"application/java-archive" ,
"application/x-rar-compressed" ,
"application/x-tar" ,
"application/gzip" ,
"application/x-7z-compressed"
] . some ( e => e === this . file . type ) ) return 'archive' ;
return 'unknown' ;
} ,
isThumbnailAvailable ( ) : boolean {
2019-03-19 15:35:22 +01:00
return this . file . thumbnailUrl
2019-04-14 10:12:04 +02:00
? ( this . is === 'image' || this . is === 'video' )
2019-03-19 15:35:22 +01:00
: false ;
2019-03-19 09:26:07 +01:00
} ,
} ,
mounted ( ) {
const audioTag = this . $refs . volumectrl as HTMLAudioElement ;
2020-12-19 02:55:52 +01:00
if ( audioTag ) audioTag . volume = ColdDeviceStorage . get ( 'mediaVolume' ) ;
2019-03-19 09:26:07 +01:00
} ,
methods : {
volumechange ( ) {
const audioTag = this . $refs . volumectrl as HTMLAudioElement ;
2020-12-19 02:55:52 +01:00
ColdDeviceStorage . set ( 'mediaVolume' , audioTag . volume ) ;
2019-03-19 09:26:07 +01:00
}
}
} ) ;
< / script >
2020-01-29 20:37:25 +01:00
< style lang = "scss" scoped >
. zdjebgpv {
2020-02-07 12:25:49 +01:00
position : relative ;
2021-12-10 02:46:29 +01:00
display : flex ;
background : # e1e1e1 ;
border - radius : 8 px ;
overflow : clip ;
2019-03-19 09:26:07 +01:00
2020-01-29 20:37:25 +01:00
> . icon - sub {
position : absolute ;
width : 30 % ;
height : auto ;
margin : 0 ;
right : 4 % ;
bottom : 4 % ;
}
2019-03-19 09:26:07 +01:00
2020-07-18 17:24:07 +02:00
> . icon {
pointer - events : none ;
2021-12-10 02:46:29 +01:00
margin : auto ;
font - size : 32 px ;
color : # 777 ;
2020-01-29 20:37:25 +01:00
}
}
2019-03-19 09:26:07 +01:00
< / style >