2019-03-19 17:26:07 +09:00
< template >
2021-11-19 19:36:12 +09:00
< div ref = "thumbnail" class = "zdjebgpv" >
2020-10-17 20:12:00 +09:00
< ImgWithBlurhash v -if = " isThumbnailAvailable " :hash ="file.blurhash" :src ="file.thumbnailUrl" :alt ="file.name" :title ="file.name" : style = "`object-fit: ${ fit }`" / >
2021-04-20 23:22:59 +09: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 17:26:07 +09:00
< / div >
< / template >
2022-01-18 23:06:16 +09:00
< script lang = "ts" setup >
import { computed } from 'vue' ;
import * as Misskey from 'misskey-js' ;
2021-11-12 02:02:25 +09:00
import ImgWithBlurhash from '@/components/img-with-blurhash.vue' ;
2019-03-19 17:26:07 +09:00
2022-01-18 23:06:16 +09:00
const props = defineProps < {
file : Misskey . entities . DriveFile ;
fit : string ;
} > ( ) ;
2019-03-19 17:26:07 +09:00
2022-01-18 23:06:16 +09:00
const is = computed ( ( ) => {
if ( props . file . type . startsWith ( 'image/' ) ) return 'image' ;
if ( props . file . type . startsWith ( 'video/' ) ) return 'video' ;
if ( props . file . type === 'audio/midi' ) return 'midi' ;
if ( props . file . type . startsWith ( 'audio/' ) ) return 'audio' ;
if ( props . file . type . endsWith ( '/csv' ) ) return 'csv' ;
if ( props . file . type . endsWith ( '/pdf' ) ) return 'pdf' ;
if ( props . 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"
2022-05-05 20:45:50 +09:00
] . some ( archiveType => archiveType === props . file . type ) ) return 'archive' ;
2022-01-18 23:06:16 +09:00
return 'unknown' ;
} ) ;
const isThumbnailAvailable = computed ( ( ) => {
return props . file . thumbnailUrl
? ( is . value === 'image' as const || is . value === 'video' )
: false ;
2019-03-19 17:26:07 +09:00
} ) ;
< / script >
2020-01-30 04:37:25 +09:00
< style lang = "scss" scoped >
. zdjebgpv {
2020-02-07 20:25:49 +09:00
position : relative ;
2021-12-10 10:46:29 +09:00
display : flex ;
background : # e1e1e1 ;
border - radius : 8 px ;
overflow : clip ;
2019-03-19 17:26:07 +09:00
2020-01-30 04:37:25 +09:00
> . icon - sub {
position : absolute ;
width : 30 % ;
height : auto ;
margin : 0 ;
right : 4 % ;
bottom : 4 % ;
}
2019-03-19 17:26:07 +09:00
2020-07-19 00:24:07 +09:00
> . icon {
pointer - events : none ;
2021-12-10 10:46:29 +09:00
margin : auto ;
font - size : 32 px ;
color : # 777 ;
2020-01-30 04:37:25 +09:00
}
}
2019-03-19 17:26:07 +09:00
< / style >