aboutsummaryrefslogtreecommitdiff
path: root/src/components/link-preview
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/link-preview')
-rw-r--r--src/components/link-preview/link-preview.js14
-rw-r--r--src/components/link-preview/link-preview.vue20
2 files changed, 30 insertions, 4 deletions
diff --git a/src/components/link-preview/link-preview.js b/src/components/link-preview/link-preview.js
index 2f6da55e..444aafbe 100644
--- a/src/components/link-preview/link-preview.js
+++ b/src/components/link-preview/link-preview.js
@@ -5,6 +5,11 @@ const LinkPreview = {
'size',
'nsfw'
],
+ data () {
+ return {
+ imageLoaded: false
+ }
+ },
computed: {
useImage () {
// Currently BE shoudn't give cards if tagged NSFW, this is a bit paranoid
@@ -15,6 +20,15 @@ const LinkPreview = {
useDescription () {
return this.card.description && /\S/.test(this.card.description)
}
+ },
+ created () {
+ if (this.useImage) {
+ const newImg = new Image()
+ newImg.onload = () => {
+ this.imageLoaded = true
+ }
+ newImg.src = this.card.image
+ }
}
}
diff --git a/src/components/link-preview/link-preview.vue b/src/components/link-preview/link-preview.vue
index 64b1a58b..69171977 100644
--- a/src/components/link-preview/link-preview.vue
+++ b/src/components/link-preview/link-preview.vue
@@ -1,13 +1,25 @@
<template>
<div>
- <a class="link-preview-card" :href="card.url" target="_blank" rel="noopener">
- <div class="card-image" :class="{ 'small-image': size === 'small' }" v-if="useImage">
- <img :src="card.image"></img>
+ <a
+ class="link-preview-card"
+ :href="card.url"
+ target="_blank"
+ rel="noopener"
+ >
+ <div
+ v-if="useImage && imageLoaded"
+ class="card-image"
+ :class="{ 'small-image': size === 'small' }"
+ >
+ <img :src="card.image">
</div>
<div class="card-content">
<span class="card-host faint">{{ card.provider_name }}</span>
<h4 class="card-title">{{ card.title }}</h4>
- <p class="card-description" v-if="useDescription">{{ card.description }}</p>
+ <p
+ v-if="useDescription"
+ class="card-description"
+ >{{ card.description }}</p>
</div>
</a>
</div>