Added actor profile revisions.

This commit is contained in:
2024-10-22 03:12:42 +02:00
parent b5bef49f73
commit 3967745fb3
31 changed files with 1907 additions and 67 deletions

View File

@@ -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">:&nbsp;</template>
<template v-if="actor.boobsVolume">{{ actor.boobsVolume }}cc</template>
<template v-if="actor.boobsImplant">&nbsp;{{ augmentationMap[actor.boobsImplant] || actor.boobsImplant }}</template>
</div>
<div
v-if="!actor.naturalButt"
class="augmentations-section"
>Butt<template v-if="actor.buttVolume || actor.buttImplant">:&nbsp;</template>
<template v-if="actor.buttVolume">{{ actor.buttVolume }}cc</template>
<template v-if="actor.buttImplant">&nbsp;{{ 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;

View File

@@ -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 {

View File

@@ -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,
});