forked from DebaucheryLibrarian/traxxx
Improved release media layout.
This commit is contained in:
@@ -77,7 +77,7 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import Actor from '../tile/actor.vue';
|
||||
import Actor from './tile.vue';
|
||||
import Gender from './gender.vue';
|
||||
import Pagination from '../pagination/pagination.vue';
|
||||
|
||||
@@ -183,7 +183,7 @@ export default {
|
||||
.tiles {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fill, minmax(11rem, 1fr));
|
||||
grid-gap: 0 .5rem;
|
||||
grid-gap: .5rem;
|
||||
padding: 1rem;
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
@@ -73,17 +73,21 @@ export default {
|
||||
scrollbar-width: none;
|
||||
|
||||
&.expanded {
|
||||
flex-wrap: wrap;
|
||||
justify-content: center;
|
||||
|
||||
/*
|
||||
display: grid;
|
||||
grid-gap: .5rem;
|
||||
grid-template-columns: repeat(auto-fill, minmax(13rem, 1fr));
|
||||
*/
|
||||
|
||||
.photo-link {
|
||||
margin: 0;
|
||||
margin: 0 .5rem .5rem 0;
|
||||
}
|
||||
|
||||
.photo {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
height: 18rem;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
281
assets/components/actors/tile.vue
Normal file
281
assets/components/actors/tile.vue
Normal file
@@ -0,0 +1,281 @@
|
||||
<template>
|
||||
<div
|
||||
v-if="actor"
|
||||
class="actor"
|
||||
>
|
||||
<router-link
|
||||
:to="{ name: 'actor', params: { actorId: actor.id, actorSlug: actor.slug } }"
|
||||
class="link"
|
||||
>
|
||||
<span
|
||||
class="handle"
|
||||
>
|
||||
<span
|
||||
v-tooltip.top="actor.name"
|
||||
class="name"
|
||||
>{{ actor.name }}</span>
|
||||
|
||||
<router-link
|
||||
v-if="actor.network"
|
||||
v-tooltip="actor.network.name"
|
||||
:to="{ name: 'network', params: { networkSlug: actor.network.slug } }"
|
||||
class="favicon"
|
||||
>
|
||||
<img
|
||||
:src="`/img/logos/${actor.network.slug}/favicon.png`"
|
||||
class="favicon-icon"
|
||||
>
|
||||
</router-link>
|
||||
|
||||
<Icon
|
||||
v-if="alias"
|
||||
v-tooltip="`Alias of ${alias.name}`"
|
||||
icon="users3"
|
||||
class="favicon alias"
|
||||
/>
|
||||
|
||||
<Icon
|
||||
v-if="actor.dateOfDeath"
|
||||
v-tooltip="`Died ${formatDate(actor.dateOfDeath, 'MMMM D, YYYY')}`"
|
||||
icon="tombstone"
|
||||
class="favicon died"
|
||||
/>
|
||||
</span>
|
||||
|
||||
<div class="avatar-container">
|
||||
<img
|
||||
v-if="actor.avatar"
|
||||
:data-src="sfw ? `/img/${actor.avatar.sfw.thumbnail}` : `/media/${actor.avatar.thumbnail}`"
|
||||
:data-loading="sfw ? `/img/${actor.avatar.sfw.lazy}` : `/media/${actor.avatar.lazy}`"
|
||||
class="avatar lazy"
|
||||
>
|
||||
|
||||
<span
|
||||
v-else
|
||||
class="avatar"
|
||||
><img
|
||||
:src="`/img/avatar_${actor.gender || 'female'}.svg`"
|
||||
class="avatar-fallback"
|
||||
></span>
|
||||
|
||||
<span
|
||||
class="details"
|
||||
>
|
||||
<span class="gender-age">
|
||||
<Gender :gender="actor.gender" />
|
||||
|
||||
<span
|
||||
v-if="actor.ageAtDeath"
|
||||
v-tooltip="`Born ${formatDate(actor.dateOfBirth, 'MMMM D, YYYY')}<br>Died ${formatDate(actor.dateOfDeath, 'MMMM D, YYYY')}`"
|
||||
class="age-death"
|
||||
>{{ actor.ageAtDeath }}</span>
|
||||
|
||||
<span
|
||||
v-else-if="actor.age"
|
||||
v-tooltip="`Born on ${formatDate(actor.dateOfBirth, 'MMMM D, YYYY')}`"
|
||||
class="age-now"
|
||||
>{{ actor.age }}</span>
|
||||
|
||||
<span
|
||||
v-if="actor.ageThen && actor.ageThen < actor.age"
|
||||
v-tooltip="`${actor.ageThen} years old on release date`"
|
||||
class="age-then"
|
||||
>{{ actor.ageThen }}</span>
|
||||
</span>
|
||||
|
||||
<span
|
||||
v-if="actor.origin"
|
||||
v-tooltip="`Born in ${actor.origin.country.alias || actor.origin.country.name}`"
|
||||
class="country"
|
||||
>
|
||||
{{ actor.origin.country.alpha2 }}
|
||||
<img
|
||||
class="flag"
|
||||
:src="`/img/flags/${actor.origin.country.alpha2.toLowerCase()}.svg`"
|
||||
>
|
||||
</span>
|
||||
|
||||
<span
|
||||
v-else
|
||||
class="country"
|
||||
/>
|
||||
</span>
|
||||
</div>
|
||||
</router-link>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import Gender from './gender.vue';
|
||||
|
||||
function sfw() {
|
||||
return this.$store.state.ui.sfw;
|
||||
}
|
||||
|
||||
export default {
|
||||
components: {
|
||||
Gender,
|
||||
},
|
||||
props: {
|
||||
actor: {
|
||||
type: Object,
|
||||
default: null,
|
||||
},
|
||||
alias: {
|
||||
type: Object,
|
||||
default: null,
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
sfw,
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import 'theme';
|
||||
|
||||
.actor {
|
||||
width: 100%;
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
box-shadow: 0 0 3px var(--darken-weak);
|
||||
background: var(--background);
|
||||
overflow: hidden;
|
||||
|
||||
&::before {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
padding-bottom: 150%;
|
||||
}
|
||||
}
|
||||
|
||||
.link {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
color: var(--text);
|
||||
text-decoration: none;
|
||||
|
||||
&:hover {
|
||||
color: var(--primary);
|
||||
}
|
||||
}
|
||||
|
||||
.handle {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-weight: bold;
|
||||
box-shadow: 0 0 3px var(--shadow);
|
||||
|
||||
.name {
|
||||
padding: .5rem;
|
||||
}
|
||||
|
||||
.alias {
|
||||
fill: var(--shadow);
|
||||
}
|
||||
}
|
||||
|
||||
.favicon {
|
||||
font-size: 0;
|
||||
padding: .5rem .25rem;
|
||||
|
||||
&:last-child {
|
||||
padding: .5rem;
|
||||
}
|
||||
|
||||
&.died {
|
||||
fill: var(--shadow);
|
||||
}
|
||||
}
|
||||
|
||||
.favicon-icon {
|
||||
width: 1rem;
|
||||
height: 1rem;
|
||||
}
|
||||
|
||||
.name {
|
||||
flex-grow: 1;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.avatar-container {
|
||||
display: flex;
|
||||
flex-grow: 1;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
background: var(--profile);
|
||||
}
|
||||
|
||||
.avatar {
|
||||
color: var(--darken-weak);
|
||||
background: var(--darken-hint);
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
object-fit: cover;
|
||||
object-position: 50% 0;
|
||||
}
|
||||
|
||||
.avatar-fallback {
|
||||
max-height: 100%;
|
||||
max-width: 100%;
|
||||
opacity: .1;
|
||||
}
|
||||
|
||||
.details {
|
||||
background: var(--darken);
|
||||
color: var(--text-light);
|
||||
width: 100%;
|
||||
height: 1.75rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
box-sizing: border-box;
|
||||
padding: .5rem;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
font-size: .9rem;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.gender-age {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.gender {
|
||||
margin: .25rem .25rem 0 0;
|
||||
}
|
||||
|
||||
.country {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.flag {
|
||||
height: .75rem;
|
||||
margin: 0 0 0 .5rem;
|
||||
}
|
||||
|
||||
.age-now,
|
||||
.age-death {
|
||||
margin: 0 .25rem 0 0;
|
||||
}
|
||||
|
||||
.age-then {
|
||||
color: var(--lighten);
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user