diff --git a/assets/markdown.yaml b/assets/markdown.yaml new file mode 100644 index 0000000..6a0b0db --- /dev/null +++ b/assets/markdown.yaml @@ -0,0 +1,4 @@ +- wrap: ['[Scene details](', ')'] + items: + - link +- text: 'on [traxxx](https://traxxx.me/).' diff --git a/components/scenes/summaries.vue b/components/scenes/summaries.vue index 77478dd..eef1582 100644 --- a/components/scenes/summaries.vue +++ b/components/scenes/summaries.vue @@ -126,7 +126,7 @@ const changed = ref(false); const templateName = ref(initialTemplate?.name || `custom_${Date.now()}`); function getSummary() { - return processSummaryTemplate(template.value, props.release); + return processSummaryTemplate(template.value, props.release, pageContext.env); } const summary = ref(getSummary()); diff --git a/config/default.cjs b/config/default.cjs index f914796..2fae5d9 100755 --- a/config/default.cjs +++ b/config/default.cjs @@ -1,5 +1,6 @@ module.exports = { title: 'traxxx', + origin: 'http://localhost:5100', // only used for absolute links database: { owner: { host: '127.0.0.1', diff --git a/pages/scene/+Page.vue b/pages/scene/+Page.vue index 65fcff1..63d59b0 100644 --- a/pages/scene/+Page.vue +++ b/pages/scene/+Page.vue @@ -431,7 +431,7 @@ function selectTemplate(templateId, allowFallback = true) { const template = targetTemplate || templates[0]; - summary.value = processSummaryTemplate(template.template, scene); + summary.value = processSummaryTemplate(template.template, scene, env); selectedTemplate.value = template.id; cookies.set('selectedTemplate', String(templateId)); diff --git a/pages/users/@username/+Page.vue b/pages/users/@username/+Page.vue index 5ca3de9..d75118c 100644 --- a/pages/users/@username/+Page.vue +++ b/pages/users/@username/+Page.vue @@ -104,7 +104,9 @@ const now = new Date(); const mockupRelease = { id: 0, title: 'Nut For Human Consumption', - url: 'https://traxxx.me/scene/0/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), diff --git a/src/web/main.js b/src/web/main.js index 007aa35..3757e4d 100644 --- a/src/web/main.js +++ b/src/web/main.js @@ -39,6 +39,7 @@ export default async function mainHandler(req, res, next) { allowSignup: config.auth.signup, maxMatches: config.database.manticore.maxMatches, maxAggregateSize: config.database.manticore.maxAggregateSize, + origin: config.origin, media: config.media, psa: config.psa, links: config.links, diff --git a/utils/process-summary-template.js b/utils/process-summary-template.js index a8cc541..ac60ee2 100644 --- a/utils/process-summary-template.js +++ b/utils/process-summary-template.js @@ -13,6 +13,7 @@ const genderMap = { }; const propProcessors = { + 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, actors: (sceneInfo, options) => { @@ -66,7 +67,7 @@ function curateValue(value, item) { .join(item.delimit || ', '); } -function traverseTemplate(chain, release, { delimit = ' ' } = {}) { +function traverseTemplate(chain, release, env, { delimit = ' ' } = {}) { const results = chain.reduce((result, item) => { const keys = typeof item === 'string' ? item : item.key; @@ -84,14 +85,14 @@ function traverseTemplate(chain, release, { delimit = ' ' } = {}) { if (keys) { const value = keys.split('|').reduce((acc, key) => acc - || propProcessors[key]?.(release, typeof item === 'string' ? { key } : item) + || propProcessors[key]?.(release, typeof item === 'string' ? { key } : item, env) || release[key], null); return result.concat(curateValue(value, item)); } if (item.items) { - const group = traverseTemplate(item.items, release, { + const group = traverseTemplate(item.items, release, env, { delimit: item.delimit, }); @@ -109,8 +110,8 @@ function traverseTemplate(chain, release, { delimit = ' ' } = {}) { return ''; } -export default function processSummaryTemplate(template, release) { +export default function processSummaryTemplate(template, release, env) { const chain = parse(template); - return traverseTemplate(chain, release); + return traverseTemplate(chain, release, env); }