Added actor profile revisions.
This commit is contained in:
@@ -136,13 +136,32 @@
|
||||
class="bio-item figure"
|
||||
>
|
||||
<dfn class="bio-label"><Icon icon="ruler" />Figure</dfn>
|
||||
<span class="bio-value">{{ actor.bust || '??' }}{{ actor.cup || '?' }}-{{ actor.waist || '??' }}-{{ actor.hip || '??' }}</span>
|
||||
</li>
|
||||
|
||||
<li
|
||||
v-if="!actor.naturalBoobs || !actor.naturalButt"
|
||||
class="bio-item augmentations"
|
||||
>
|
||||
<dfn class="bio-label"><Icon icon="magic-wand2" />Augmentations</dfn>
|
||||
|
||||
<span class="bio-value">
|
||||
<Icon
|
||||
v-if="actor.naturalBoobs === false"
|
||||
:title="'Enhanced boobs'"
|
||||
icon="magic-wand2"
|
||||
class="enhanced"
|
||||
/>{{ actor.bust || '??' }}{{ actor.cup || '?' }}-{{ actor.waist || '??' }}-{{ actor.hip || '??' }}
|
||||
<div
|
||||
v-if="!actor.naturalBoobs"
|
||||
:title="[actor.boobsVolume, augmentationMap[actor.boobsPlacement] || actor.boobsPlacement, augmentationMap[actor.boobsImplant] || actor.boobsImplant].filter(Boolean).join(' ')"
|
||||
class="augmentations-section"
|
||||
>Boobs<template v-if="actor.boobsVolume || actor.boobsImplant">: </template>
|
||||
<template v-if="actor.boobsVolume">{{ actor.boobsVolume }}cc</template>
|
||||
<template v-if="actor.boobsImplant"> {{ augmentationMap[actor.boobsImplant] || actor.boobsImplant }}</template>
|
||||
</div>
|
||||
|
||||
<div
|
||||
v-if="!actor.naturalButt"
|
||||
class="augmentations-section"
|
||||
>Butt<template v-if="actor.buttVolume || actor.buttImplant">: </template>
|
||||
<template v-if="actor.buttVolume">{{ actor.buttVolume }}cc</template>
|
||||
<template v-if="actor.buttImplant"> {{ augmentationMap[actor.buttImplant] || actor.buttImplant }}</template>
|
||||
</div>
|
||||
</span>
|
||||
</li>
|
||||
|
||||
@@ -240,6 +259,21 @@
|
||||
</li>
|
||||
|
||||
<li class="bio-item updated hideable">Updated {{ formatDate(actor.updatedAt, 'yyyy-MM-dd hh:mm') }}, ID: {{ actor.id }}</li>
|
||||
|
||||
<li class="bio-item actor-actions">
|
||||
<a
|
||||
v-if="user && user.role !== 'user'"
|
||||
:href="`/actor/edit/${actor.id}/${actor.slug}`"
|
||||
target="_blank"
|
||||
class="link"
|
||||
>Edit bio</a>
|
||||
|
||||
<a
|
||||
:href="`/actor/revisions/${actor.id}/${actor.slug}`"
|
||||
target="_blank"
|
||||
class="link"
|
||||
>Revisions</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<div class="descriptions-container">
|
||||
@@ -294,13 +328,16 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref } from 'vue';
|
||||
import { ref, inject } from 'vue';
|
||||
|
||||
import getPath from '#/src/get-path.js';
|
||||
import { formatDate } from '#/utils/format.js';
|
||||
|
||||
const expanded = ref(false);
|
||||
|
||||
const pageContext = inject('pageContext');
|
||||
const user = pageContext.user;
|
||||
|
||||
const props = defineProps({
|
||||
actor: {
|
||||
type: Object,
|
||||
@@ -326,6 +363,17 @@ const showExpand = [
|
||||
'weight',
|
||||
].some((attribute) => !!props.actor[attribute]);
|
||||
|
||||
const augmentationMap = {
|
||||
bbl: 'BBL',
|
||||
fat: 'fat transfer',
|
||||
lift: 'direct lift',
|
||||
lipo: 'lipo without BBL',
|
||||
filler: 'filler',
|
||||
mms: 'MMS',
|
||||
over: 'over-muscle',
|
||||
under: 'under-muscle',
|
||||
};
|
||||
|
||||
const descriptions = Object.values(Object.fromEntries(props.actor.profiles
|
||||
.filter((profile) => !!profile.description)
|
||||
.map((profile) => [profile.descriptionHash, {
|
||||
@@ -519,6 +567,11 @@ const descriptions = Object.values(Object.fromEntries(props.actor.profiles
|
||||
content: ',\00a0';
|
||||
}
|
||||
|
||||
.augmentations .bio-value {
|
||||
flex-direction: column;
|
||||
align-items: flex-end;
|
||||
}
|
||||
|
||||
.updated {
|
||||
color: var(--highlight-weak-20);
|
||||
font-size: .8rem;
|
||||
@@ -638,6 +691,16 @@ const descriptions = Object.values(Object.fromEntries(props.actor.profiles
|
||||
}
|
||||
}
|
||||
|
||||
.actor-actions {
|
||||
justify-content: flex-start;
|
||||
gap: 1rem;
|
||||
font-weight: normal;
|
||||
|
||||
.link {
|
||||
color: var(--highlight-strong-20);
|
||||
}
|
||||
}
|
||||
|
||||
@media(--big) {
|
||||
.descriptions-container {
|
||||
display: none;
|
||||
|
||||
@@ -4,10 +4,18 @@
|
||||
<ul class="nav-items nolist">
|
||||
<li class="nav-item">
|
||||
<a
|
||||
href="/admin/revisions"
|
||||
href="/admin/revisions/scenes"
|
||||
class="nav-link nolink"
|
||||
:class="{ active: pageContext.routeParams.section === 'revisions' }"
|
||||
>Revisions</a>
|
||||
:class="{ active: pageContext.routeParams.section === 'revisions' && pageContext.routeParams.domain === 'scenes' }"
|
||||
>Scene Revisions</a>
|
||||
</li>
|
||||
|
||||
<li class="nav-item">
|
||||
<a
|
||||
href="/admin/revisions/actors"
|
||||
class="nav-link nolink"
|
||||
:class="{ active: pageContext.routeParams.section === 'revisions' && pageContext.routeParams.domain === 'actors' }"
|
||||
>Actor Revisions</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
@@ -22,8 +30,6 @@
|
||||
import { inject } from 'vue';
|
||||
|
||||
const pageContext = inject('pageContext');
|
||||
|
||||
// console.log(pageContext);
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
@@ -36,7 +42,14 @@ const pageContext = inject('pageContext');
|
||||
|
||||
.nav {
|
||||
display: flex;
|
||||
padding: 1rem 1rem 0 1rem;
|
||||
padding: 1rem 1rem .75rem 1rem;
|
||||
border-bottom: solid 1px var(--shadow-weak-30);
|
||||
margin-bottom: .25rem;
|
||||
}
|
||||
|
||||
.nav-items {
|
||||
display: flex;
|
||||
gap: .5rem;
|
||||
}
|
||||
|
||||
.nav-item {
|
||||
|
||||
@@ -27,16 +27,16 @@
|
||||
<template v-if="context === 'admin' || expanded.has(rev.id)">
|
||||
<div class="rev-header">
|
||||
<a
|
||||
:href="`/scene/${rev.sceneId}`"
|
||||
:href="`/${domain.slice(0, -1)}/${rev.sceneId || rev.actorId}/${rev.base.slug}`"
|
||||
target="_blank"
|
||||
class="rev-link rev-scene nolink noshrink"
|
||||
>{{ rev.sceneId }}@{{ rev.hash.slice(0, 6) }}</a>
|
||||
>{{ rev.sceneId || rev.actorId }}@{{ rev.hash.slice(0, 6) }}</a>
|
||||
|
||||
<a
|
||||
:href="`/scene/${rev.sceneId}`"
|
||||
:href="`/${domain.slice(0, -1)}/${rev.sceneId || rev.actorId}/${rev.base.slug}`"
|
||||
target="_blank"
|
||||
class="rev-link rev-title nolink ellipsis"
|
||||
>{{ rev.base.title }}</a>
|
||||
>{{ rev.base.title || rev.base.name }}</a>
|
||||
|
||||
<div class="rev-details noshrink">
|
||||
<a
|
||||
@@ -219,6 +219,7 @@ defineProps({
|
||||
|
||||
const pageContext = inject('pageContext');
|
||||
const revisions = ref(pageContext.pageProps.revisions);
|
||||
const domain = pageContext.routeParams.domain;
|
||||
|
||||
const actors = ref(pageContext.pageProps.actors);
|
||||
const tags = ref(pageContext.pageProps.tags);
|
||||
@@ -241,6 +242,8 @@ const mappedKeys = {
|
||||
|
||||
const dateKeys = [
|
||||
'date',
|
||||
'dateOfBirth',
|
||||
'dateOfDeath',
|
||||
'productionDate',
|
||||
'createdAt',
|
||||
];
|
||||
@@ -307,7 +310,7 @@ const curatedRevisions = computed(() => revisions.value.map((revision) => {
|
||||
}));
|
||||
|
||||
async function reloadRevisions() {
|
||||
const updatedRevisions = await get('/revisions', {
|
||||
const updatedRevisions = await get(`/revisions/${domain}`, {
|
||||
isFinalized: showReviewed.value ? undefined : false,
|
||||
limit: 50,
|
||||
});
|
||||
@@ -322,12 +325,12 @@ async function reviewRevision(revision, isApproved) {
|
||||
reviewedRevisions.value.add(revision.id);
|
||||
|
||||
try {
|
||||
await post(`/revisions/${revision.id}/reviews`, {
|
||||
await post(`/revisions/${domain}/${revision.id}/reviews`, {
|
||||
isApproved,
|
||||
feedback: feedbacks.value[revision.id],
|
||||
});
|
||||
|
||||
const updatedRevision = await get(`/revisions/${revision.id}`, {
|
||||
const updatedRevision = await get(`/revisions/${domain}/${revision.id}`, {
|
||||
revisionId: revision.id,
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user