Compare commits

...

2 Commits

6 changed files with 72 additions and 43 deletions

43
assets/mockup-release.ts Normal file
View File

@ -0,0 +1,43 @@
const now = new Date();
export default {
id: 0,
shootId: 12345,
title: 'Nut For Human Consumption',
slug: 'nut-for-human-consumption',
link: 'https://traxxx.me/scene/0/nut-for-human-consumption',
url: 'https://example.com/video/12345/nut-for-human-consumption',
date: now,
effectiveDate: now,
createdAt: new Date(now.getFullYear(), 0, 1),
actors: [
{
name: 'Chanel Chakra',
gender: 'female',
ageThen: 26,
ageFromBirth: 31,
},
{
name: 'Mo The Fucker',
gender: 'male',
ageThen: 32,
ageFromBirth: 37,
},
],
tags: [
{ name: 'anal' },
{ name: 'facefucking' },
{ name: 'deepthroat' },
{ name: 'blowjob' },
{ name: 'facial' },
],
movies: [{
title: `Best Of Traxxx ${String(now.getFullYear()).slice(2)}`,
}],
channel: {
name: 'Traxxxed',
},
network: {
name: 'Traxxx',
},
};

View File

@ -37,6 +37,7 @@
class="input edit"
@input="update"
@blur="save(false)"
@keydown.tab.prevent="indent"
/>
<textarea
@ -227,6 +228,11 @@ function reset() {
}
}
function indent() {
// YAML does not support tabs
input.value.setRangeText(' ', input.value.selectionStart, input.value.selectionEnd, 'end');
}
onMounted(() => {
window.addEventListener('beforeunload', (event) => {
if (changed.value) {

4
package-lock.json generated
View File

@ -1,11 +1,11 @@
{
"name": "traxxx-web",
"version": "0.41.11",
"version": "0.41.12",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"version": "0.41.11",
"version": "0.41.12",
"dependencies": {
"@brillout/json-serializer": "^0.5.8",
"@dicebear/collection": "^7.0.5",

View File

@ -87,7 +87,7 @@
"overrides": {
"vite": "$vite"
},
"version": "0.41.11",
"version": "0.41.12",
"imports": {
"#/*": "./*.js"
}

View File

@ -91,6 +91,8 @@ import Summaries from '#/components/scenes/summaries.vue';
import Revisions from '#/components/edit/revisions.vue';
import ApiKeys from '#/components/user/api-keys.vue';
import mockupRelease from '#/assets/mockup-release.ts';
const pageContext = inject('pageContext');
const section = pageContext.routeParams.section;
@ -99,45 +101,6 @@ const domain = pageContext.routeParams.domain;
const user = pageContext.user;
const profile = ref(pageContext.pageProps.profile);
const now = new Date();
const mockupRelease = {
id: 0,
title: 'Nut For Human Consumption',
slug: 'nut-for-human-consumption',
link: 'https://traxxx.me/scene/0/nut-for-human-consumption',
url: 'https://example.com/video/12345/nut-for-human-consumption',
date: now,
effectiveDate: now,
createdAt: new Date(now.getFullYear(), 0, 1),
actors: [
{
name: 'Chanel Chakra',
gender: 'female',
},
{
name: 'Mo The Fucker',
gender: 'male',
},
],
tags: [
{ name: 'anal' },
{ name: 'facefucking' },
{ name: 'deepthroat' },
{ name: 'blowjob' },
{ name: 'facial' },
],
movies: [{
title: `Best Of Traxxx ${String(now.getFullYear()).slice(2)}`,
}],
channel: {
name: 'Traxxxed',
},
network: {
name: 'Traxxx',
},
};
function scrollHorizontal(event) {
event.currentTarget.scrollLeft += event.deltaY; // eslint-disable-line no-param-reassign
}

View File

@ -1,5 +1,6 @@
import { format } from 'date-fns';
import { parse } from 'yaml';
import formatTemplate from 'template-format';
import slugify from '#/utils/slugify.js';
import ellipsis from '#/utils/ellipsis.js';
@ -13,6 +14,10 @@ const genderMap = {
};
const propProcessors = {
...Object.fromEntries(Object.entries({
// aliases
shoot: 'shootId',
}).map(([key, alias]) => [key, (sceneInfo) => sceneInfo[alias]])),
link: (sceneInfo, _options, env) => `${env.origin}/scene/${sceneInfo.id}/${sceneInfo.slug}`,
channel: (sceneInfo) => sceneInfo.channel?.name || sceneInfo.network?.name,
network: (sceneInfo) => sceneInfo.network?.name || sceneInfo.channel?.name,
@ -21,7 +26,19 @@ const propProcessors = {
return sceneInfo.actors
.filter((actor) => genders.includes(actor.gender))
.map((actor) => actor.name);
.map((actor) => {
if (options.format) {
return formatTemplate(options.format, Object.fromEntries(Object.entries({
...actor,
age: actor.ageThen,
ageNow: actor.age,
g: actor.gender?.charAt(0),
G: actor.gender?.charAt(0).toUpperCase(),
}).map(([key, value]) => [key, value ?? '']))); // don't render `null`
}
return actor.name;
});
},
tags: (sceneInfo, options) => sceneInfo.tags
?.filter((tag) => {