36 lines
895 B
HTML
36 lines
895 B
HTML
{{#await imagePromise}}
|
|
<img class="{{className}} avatar" aria-hidden="true" alt=""
|
|
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=" />
|
|
{{then src}}
|
|
<img class="{{className}} avatar" aria-hidden="true" alt=""
|
|
src="{{account.avatar}}" />
|
|
{{catch error}}
|
|
<svg class="{{className}} avatar" aria-hidden="true">
|
|
<use xlink:href="#fa-user" />
|
|
</svg>
|
|
{{/await}}
|
|
|
|
<style>
|
|
.avatar {
|
|
width: 48px;
|
|
height: 48px;
|
|
border-radius: 4px;
|
|
}
|
|
|
|
svg.avatar {
|
|
fill: var(--deemphasized-text-color);
|
|
}
|
|
</style>
|
|
<script>
|
|
export default {
|
|
computed: {
|
|
imageSrc: (account) => account.avatar,
|
|
imagePromise: (imageSrc) => new Promise((resolve, reject) => {
|
|
let img = new Image()
|
|
img.onload = resolve
|
|
img.onerror = reject
|
|
img.src = imageSrc
|
|
})
|
|
}
|
|
}
|
|
</script> |