diff options
author | Julien Veyssier <eneiluj@posteo.net> | 2022-03-16 14:20:43 +0300 |
---|---|---|
committer | Julien Veyssier <eneiluj@posteo.net> | 2022-03-16 14:33:02 +0300 |
commit | 5ffccc411e8838cbc52ac8c2d025b3c8375bed68 (patch) | |
tree | daa382b413ee2f4efa5951af09f9508e6bf7e8c8 | |
parent | 5ea058b94bc6a3404a292244f81abce9690b0a51 (diff) |
clarify image loading in ImageViewfix/serve-image-mimetype-check-2
Signed-off-by: Julien Veyssier <eneiluj@posteo.net>
-rw-r--r-- | src/nodes/ImageView.vue | 56 |
1 files changed, 34 insertions, 22 deletions
diff --git a/src/nodes/ImageView.vue b/src/nodes/ImageView.vue index f441df572..3b201b1c6 100644 --- a/src/nodes/ImageView.vue +++ b/src/nodes/ImageView.vue @@ -151,10 +151,6 @@ export default { } }, imageUrl() { - this.setImageSrc(this.imageUrl2) - return this.imageUrl2 - }, - imageUrl2() { if (this.src.startsWith('text://')) { const documentId = this.currentSession?.documentId const sessionId = this.currentSession?.id @@ -283,16 +279,12 @@ export default { this.loaded = true return } - const img = new Image() - img.onload = () => { - this.imageLoaded = true - } - img.onerror = () => { - this.failed = true - this.imageLoaded = false - this.loaded = true + + if (this.isDataUrl) { + this.loadImage(this.imageUrl) + } else { + this.setImageSrc() } - img.src = this.imageUrl }, methods: { updateAlt() { @@ -304,17 +296,37 @@ export default { this.editor.commands.scrollIntoView() }) }, - async setImageSrc(imageUrl) { - const fileHead = await axios.head(imageUrl) - const mime = fileHead.headers['content-type'] - if (imageMimes.includes(mime)) { - if (mime === 'image/svg+xml') { - const file = await axios.get(imageUrl) - this.imgSrc = `data:${mime};base64,${btoa(file.data)}` - } else { - this.imgSrc = imageUrl + async setImageSrc() { + try { + const fileHead = await axios.head(this.imageUrl) + const mime = fileHead.headers['content-type'] + if (imageMimes.includes(mime)) { + if (mime === 'image/svg+xml') { + const file = await axios.get(this.imageUrl) + this.loadImage(`data:${mime};base64,${btoa(file.data)}`) + } else { + this.loadImage(this.imageUrl) + } } + } catch (error) { + console.error(error) + this.failed = true + this.imageLoaded = false + this.loaded = true + } + }, + loadImage(src) { + const img = new Image() + img.onload = () => { + this.imgSrc = src + this.imageLoaded = true + } + img.onerror = () => { + this.failed = true + this.imageLoaded = false + this.loaded = true } + img.src = src }, }, } |