Lazy load more images
This commit is contained in:
parent
74959029b5
commit
4f44a5ab44
|
@ -39,7 +39,7 @@
|
||||||
<translate :translate-params="{username: $store.state.auth.username}">
|
<translate :translate-params="{username: $store.state.auth.username}">
|
||||||
Logged in as %{ username }
|
Logged in as %{ username }
|
||||||
</translate>
|
</translate>
|
||||||
<img class="ui right floated circular tiny avatar image" v-if="$store.state.auth.profile.avatar.square_crop" :src="$store.getters['instance/absoluteUrl']($store.state.auth.profile.avatar.square_crop)" />
|
<img class="ui right floated circular tiny avatar image" v-if="$store.state.auth.profile.avatar.square_crop" v-lazy="$store.getters['instance/absoluteUrl']($store.state.auth.profile.avatar.square_crop)" />
|
||||||
</router-link>
|
</router-link>
|
||||||
<router-link class="item" v-if="$store.state.auth.authenticated" :to="{path: '/settings'}"><i class="setting icon"></i><translate>Settings</translate></router-link>
|
<router-link class="item" v-if="$store.state.auth.authenticated" :to="{path: '/settings'}"><i class="setting icon"></i><translate>Settings</translate></router-link>
|
||||||
<router-link class="item" v-if="$store.state.auth.authenticated" :to="{name: 'notifications'}">
|
<router-link class="item" v-if="$store.state.auth.authenticated" :to="{name: 'notifications'}">
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
<div class="ui loader"></div>
|
<div class="ui loader"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card" v-for="album in albums" :key="album.id">
|
<div class="card" v-for="album in albums" :key="album.id">
|
||||||
<div :class="['ui', 'image', 'with-overlay', {'default-cover': !album.cover.original}]" :style="getImageStyle(album)">
|
<div :class="['ui', 'image', 'with-overlay', {'default-cover': !album.cover.original}]" v-lazy:background-image="getImageUrl(album)">
|
||||||
<play-button class="play-overlay" :icon-only="true" :is-playable="album.is_playable" :button-classes="['ui', 'circular', 'large', 'orange', 'icon', 'button']" :album="album.id"></play-button>
|
<play-button class="play-overlay" :icon-only="true" :is-playable="album.is_playable" :button-classes="['ui', 'circular', 'large', 'orange', 'icon', 'button']" :album="album.id"></play-button>
|
||||||
</div>
|
</div>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
|
@ -87,17 +87,15 @@ export default {
|
||||||
this.offset = Math.max(this.offset - this.limit, 0)
|
this.offset = Math.max(this.offset - this.limit, 0)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
getImageStyle (album) {
|
getImageUrl (album) {
|
||||||
let url = '../../../assets/audio/default-cover.png'
|
let url = '../../../assets/audio/default-cover.png'
|
||||||
|
|
||||||
if (album.cover.original) {
|
if (album.cover.original) {
|
||||||
url = this.$store.getters['instance/absoluteUrl'](album.cover.medium_square_crop)
|
url = this.$store.getters['instance/absoluteUrl'](album.cover.medium_square_crop)
|
||||||
} else {
|
} else {
|
||||||
return {}
|
return null
|
||||||
}
|
|
||||||
return {
|
|
||||||
'background-image': `url("${url}")`
|
|
||||||
}
|
}
|
||||||
|
return url
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
|
@ -108,10 +106,10 @@ export default {
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
@import '../../../style/vendor/media';
|
@import "../../../style/vendor/media";
|
||||||
|
|
||||||
.default-cover {
|
.default-cover {
|
||||||
background-image: url('../../../assets/audio/default-cover.png') !important;
|
background-image: url("../../../assets/audio/default-cover.png") !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.wrapper {
|
.wrapper {
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr v-for="album in albums">
|
<tr v-for="album in albums">
|
||||||
<td>
|
<td>
|
||||||
<img class="ui mini image" v-if="album.cover.original" :src="$store.getters['instance/absoluteUrl'](album.cover.small_square_crop)">
|
<img class="ui mini image" v-if="album.cover.original" v-lazy="$store.getters['instance/absoluteUrl'](album.cover.small_square_crop)">
|
||||||
<img class="ui mini image" v-else src="../../../assets/audio/default-cover.png">
|
<img class="ui mini image" v-else src="../../../assets/audio/default-cover.png">
|
||||||
</td>
|
</td>
|
||||||
<td colspan="4">
|
<td colspan="4">
|
||||||
|
@ -82,5 +82,4 @@ export default {
|
||||||
|
|
||||||
<!-- Add "scoped" attribute to limit CSS to this component only -->
|
<!-- Add "scoped" attribute to limit CSS to this component only -->
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<div :class="['ui', 'head', 'vertical', 'center', 'aligned', 'stripe', 'segment']">
|
<div :class="['ui', 'head', 'vertical', 'center', 'aligned', 'stripe', 'segment']">
|
||||||
<h2 class="ui center aligned icon header">
|
<h2 class="ui center aligned icon header">
|
||||||
<i v-if="!profile.avatar.square_crop" class="circular inverted user green icon"></i>
|
<i v-if="!profile.avatar.square_crop" class="circular inverted user green icon"></i>
|
||||||
<img class="ui big circular image" v-else :src="$store.getters['instance/absoluteUrl'](profile.avatar.square_crop)" />
|
<img class="ui big circular image" v-else v-lazy="$store.getters['instance/absoluteUrl'](profile.avatar.square_crop)" />
|
||||||
<div class="content">
|
<div class="content">
|
||||||
{{ profile.username }}
|
{{ profile.username }}
|
||||||
<div class="sub header" v-translate="{date: signupDate}">Registered since %{ date }</div>
|
<div class="sub header" v-translate="{date: signupDate}">Registered since %{ date }</div>
|
||||||
|
|
|
@ -53,7 +53,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="ui six wide column">
|
<div class="ui six wide column">
|
||||||
<h3 class="ui header"><translate>Current avatar</translate></h3>
|
<h3 class="ui header"><translate>Current avatar</translate></h3>
|
||||||
<img class="ui circular image" v-if="currentAvatar && currentAvatar.square_crop" :src="$store.getters['instance/absoluteUrl'](currentAvatar.medium_square_crop)" />
|
<img class="ui circular image" v-if="currentAvatar && currentAvatar.square_crop" v-lazy="$store.getters['instance/absoluteUrl'](currentAvatar.medium_square_crop)" />
|
||||||
<div class="ui hidden divider"></div>
|
<div class="ui hidden divider"></div>
|
||||||
<button @click="removeAvatar" v-if="currentAvatar && currentAvatar.square_crop" :class="['ui', {'loading': isLoadingAvatar}, ,'yellow', 'button']">
|
<button @click="removeAvatar" v-if="currentAvatar && currentAvatar.square_crop" :class="['ui', {'loading': isLoadingAvatar}, ,'yellow', 'button']">
|
||||||
<translate>Remove avatar</translate>
|
<translate>Remove avatar</translate>
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<img
|
<img
|
||||||
class="ui tiny circular avatar"
|
class="ui tiny circular avatar"
|
||||||
v-if="user.avatar && user.avatar.small_square_crop"
|
v-if="user.avatar && user.avatar.small_square_crop"
|
||||||
:src="$store.getters['instance/absoluteUrl'](user.avatar.small_square_crop)" />
|
v-lazy="$store.getters['instance/absoluteUrl'](user.avatar.small_square_crop)" />
|
||||||
<span v-else :style="defaultAvatarStyle" class="ui circular label">{{ user.username[0]}}</span>
|
<span v-else :style="defaultAvatarStyle" class="ui circular label">{{ user.username[0]}}</span>
|
||||||
@{{ user.username }}
|
@{{ user.username }}
|
||||||
</span>
|
</span>
|
||||||
|
|
Loading…
Reference in New Issue