attachment: fix over reliance on fileType()

Signed-off-by: Yonle <yonle@proton.me>
This commit is contained in:
Yonle 2026-02-27 04:12:47 +07:00
commit 38444f3165
No known key found for this signature in database
GPG key ID: 11889F326F523287
10 changed files with 41 additions and 63 deletions

View file

@ -1,7 +1,6 @@
import { mapGetters } from 'vuex'
import nsfwImage from '../../assets/nsfw.png'
import fileTypeService from '../../services/file_type/file_type.service.js'
import Flash from '../flash/flash.vue'
import StillImage from '../still-image/still-image.vue'
import VideoAttachment from '../video_attachment/video_attachment.vue'
@ -61,9 +60,7 @@ const Attachment = {
hideNsfwLocal: this.$store.getters.mergedConfig.hideNsfw,
preloadImage: this.$store.getters.mergedConfig.preloadImage,
loading: false,
img:
fileTypeService.fileType(this.attachment.mimetype) === 'image' &&
document.createElement('img'),
img: this.attachment.type == "image" && document.createElement('img'),
modalOpen: false,
showHidden: false,
flashLoaded: false,
@ -84,7 +81,7 @@ const Attachment = {
'-editable': this.edit !== undefined,
'-compact': this.compact,
},
'-type-' + this.type,
'-type-' + this.attachment.type,
this.size && '-size-' + this.size,
`-${this.useContainFit ? 'contain' : 'cover'}-fit`,
]
@ -97,14 +94,14 @@ const Attachment = {
},
placeholderName() {
if (this.attachment.description === '' || !this.attachment.description) {
return this.type.toUpperCase()
return this.attachment.type.toUpperCase()
}
return this.attachment.description
},
placeholderIconClass() {
if (this.type === 'image') return 'image'
if (this.type === 'video') return 'video'
if (this.type === 'audio') return 'music'
if (this.attachment.type === 'image') return 'image'
if (this.attachment.type === 'video') return 'video'
if (this.attachment.type === 'audio') return 'music'
return 'file'
},
referrerpolicy() {
@ -112,14 +109,11 @@ const Attachment = {
? ''
: 'no-referrer'
},
type() {
return fileTypeService.fileType(this.attachment.mimetype)
},
hidden() {
return this.nsfw && this.hideNsfwLocal && !this.showHidden
},
isEmpty() {
return this.type === 'html' && !this.attachment.oembed
return this.attachment.type === 'html' && !this.attachment.oembed
},
useModal() {
let modalTypes = []
@ -134,7 +128,7 @@ const Attachment = {
: ['image']
break
}
return modalTypes.includes(this.type)
return modalTypes.includes(this.attachment.type)
},
videoTag() {
return this.useModal ? 'button' : 'span'
@ -159,7 +153,7 @@ const Attachment = {
if (this.useModal) {
this.$emit('setMedia')
useMediaViewerStore().setCurrentMedia(this.attachment)
} else if (this.type === 'unknown') {
} else if (this.attachment.type === 'unknown') {
window.open(this.attachment.url)
}
},
@ -192,7 +186,7 @@ const Attachment = {
if (
this.mergedConfig.useOneClickNsfw &&
!this.showHidden &&
(this.type !== 'video' || this.mergedConfig.playVideosInModal)
(this.attachment.type !== 'video' || this.mergedConfig.playVideosInModal)
) {
this.openModal(event)
return

View file

@ -6,7 +6,7 @@
@click="openModal"
>
<a
v-if="type !== 'html'"
v-if="attachment.type !== 'html'"
class="placeholder"
target="_blank"
:href="attachment.url"
@ -70,7 +70,7 @@
:src="nsfwImage"
>
<FAIcon
v-if="type === 'video'"
v-if="attachment.type === 'video'"
class="play-icon"
icon="play-circle"
/>
@ -80,7 +80,7 @@
class="attachment-buttons"
>
<button
v-if="type === 'flash' && flashLoaded"
v-if="attachment.type === 'flash' && flashLoaded"
class="button-default attachment-button -transparent"
:title="$t('status.attachment_stop_flash')"
@click.prevent="stopFlash"
@ -88,7 +88,7 @@
<FAIcon icon="stop" />
</button>
<button
v-if="attachment.description && size !== 'small' && !edit && type !== 'unknown'"
v-if="attachment.description && size !== 'small' && !edit && attachment.type !== 'unknown'"
class="button-default attachment-button -transparent"
:title="$t('status.show_attachment_description')"
@click.prevent="toggleDescription"
@ -96,7 +96,7 @@
<FAIcon icon="align-right" />
</button>
<button
v-if="!useModal && type !== 'unknown'"
v-if="!useModal && attachment.type !== 'unknown'"
class="button-default attachment-button -transparent"
:title="$t('status.show_attachment_in_modal')"
@click.prevent="openModalForce"
@ -138,7 +138,7 @@
</div>
<a
v-if="type === 'image' && (!hidden || preloadImage)"
v-if="attachment.type === 'image' && (!hidden || preloadImage)"
class="image-container"
:class="{'-hidden': hidden && preloadImage }"
:href="attachment.url"
@ -156,7 +156,7 @@
</a>
<a
v-if="type === 'unknown' && !hidden"
v-if="attachment.type === 'unknown' && !hidden"
class="placeholder-container"
:href="attachment.url"
target="_blank"
@ -173,7 +173,7 @@
<component
:is="videoTag"
v-if="type === 'video' && !hidden"
v-if="attachment.type === 'video' && !hidden"
class="video-container"
:href="attachment.url"
@click.stop.prevent="openModal"
@ -193,13 +193,13 @@
</component>
<span
v-if="type === 'audio' && !hidden"
v-if="attachment.type === 'audio' && !hidden"
class="audio-container"
:href="attachment.url"
@click.stop.prevent="openModal"
>
<audio
v-if="type === 'audio'"
v-if="attachment.type === 'audio'"
:src="attachment.url"
:alt="attachment.description"
:title="attachment.description"
@ -210,7 +210,7 @@
</span>
<div
v-if="type === 'html' && attachment.oembed"
v-if="attachment.type === 'html' && attachment.oembed"
class="oembed-container"
@click.prevent="linkClicked"
>
@ -229,7 +229,7 @@
</div>
<span
v-if="type === 'flash' && !hidden"
v-if="attachment.type === 'flash' && !hidden"
class="flash-container"
:href="attachment.url"
@click.stop.prevent="openModal"