42 lines
1 KiB
JavaScript
42 lines
1 KiB
JavaScript
import { mapState } from 'pinia'
|
|
|
|
import { useSyncConfigStore } from 'src/stores/sync_config.js'
|
|
|
|
const LinkPreview = {
|
|
name: 'LinkPreview',
|
|
props: ['card', 'size', 'nsfw'],
|
|
data() {
|
|
return {
|
|
imageLoaded: false,
|
|
}
|
|
},
|
|
computed: {
|
|
useImage() {
|
|
// Currently BE shoudn't give cards if tagged NSFW, this is a bit paranoid
|
|
// as it makes sure to hide the image if somehow NSFW tagged preview can
|
|
// exist.
|
|
return this.card.image && !this.censored && this.size !== 'hide'
|
|
},
|
|
censored() {
|
|
return this.nsfw && this.hideNsfwConfig
|
|
},
|
|
useDescription() {
|
|
return this.card.description && /\S/.test(this.card.description)
|
|
},
|
|
hideNsfwConfig() {
|
|
return this.mergedConfig.hideNsfw
|
|
},
|
|
...mapState(useSyncConfigStore, ['mergedConfig']),
|
|
},
|
|
created() {
|
|
if (this.useImage) {
|
|
const newImg = new Image()
|
|
newImg.onload = () => {
|
|
this.imageLoaded = true
|
|
}
|
|
newImg.src = this.card.image
|
|
}
|
|
},
|
|
}
|
|
|
|
export default LinkPreview
|