Added rudimentary timeline to display tag chapters.
This commit is contained in:
parent
1fb7d384fb
commit
398161b03b
|
@ -1,5 +1,26 @@
|
||||||
<template>
|
<template>
|
||||||
<ul class="chapters nolist">
|
<div
|
||||||
|
v-if="timeline"
|
||||||
|
class="timeline"
|
||||||
|
>
|
||||||
|
<ul class="timeline-items nolist">
|
||||||
|
<li
|
||||||
|
v-for="chapter in timeline"
|
||||||
|
:key="`chapter-${chapter.id}`"
|
||||||
|
:style="{ left: `${(chapter.time / duration) * 100}%` }"
|
||||||
|
:title="formatDuration(chapter.time)"
|
||||||
|
class="timeline-item"
|
||||||
|
><router-link
|
||||||
|
:to="`/tag/${chapter.tags[0].slug}`"
|
||||||
|
class="link"
|
||||||
|
>{{ chapter.tags[0]?.name || ' ' }}</router-link></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<ul
|
||||||
|
v-else
|
||||||
|
class="chapters nolist"
|
||||||
|
>
|
||||||
<li
|
<li
|
||||||
v-for="chapter in chapters"
|
v-for="chapter in chapters"
|
||||||
:key="`chapter-${chapter.id}`"
|
:key="`chapter-${chapter.id}`"
|
||||||
|
@ -55,6 +76,14 @@
|
||||||
<script>
|
<script>
|
||||||
import Tags from './tags.vue';
|
import Tags from './tags.vue';
|
||||||
|
|
||||||
|
function timeline() {
|
||||||
|
if (this.chapters.every(chapter => chapter.time)) {
|
||||||
|
return this.chapters.filter(chapter => chapter.tags?.length > 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
Tags,
|
Tags,
|
||||||
|
@ -65,6 +94,16 @@ export default {
|
||||||
default: () => [],
|
default: () => [],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
data() {
|
||||||
|
const lastChapter = this.chapters[this.chapters.length - 1];
|
||||||
|
|
||||||
|
return {
|
||||||
|
duration: lastChapter.time + lastChapter.duration,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
timeline,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -153,6 +192,41 @@ export default {
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.timeline-items {
|
||||||
|
position: relative;
|
||||||
|
height: 5rem;
|
||||||
|
border-bottom: solid 1px var(--shadow-weak);
|
||||||
|
}
|
||||||
|
|
||||||
|
.timeline-item {
|
||||||
|
position: absolute;
|
||||||
|
bottom: -.25rem;
|
||||||
|
padding: .1rem .5rem;
|
||||||
|
border-radius: .6rem;
|
||||||
|
color: var(--primary);
|
||||||
|
background: var(--background);
|
||||||
|
transform: rotate(-60deg);
|
||||||
|
transform-origin: 0 50%;
|
||||||
|
box-shadow: 0 0 3px var(--shadow-weak);
|
||||||
|
font-size: .8rem;
|
||||||
|
font-weight: bold;
|
||||||
|
|
||||||
|
.link {
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:before {
|
||||||
|
content: '';
|
||||||
|
display: inline-block;
|
||||||
|
width: 1rem;
|
||||||
|
height: 2px;
|
||||||
|
position: absolute;
|
||||||
|
left: calc(-1rem + 1px);
|
||||||
|
margin: .3rem .5rem 0 0;
|
||||||
|
background: var(--primary);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@media(max-width: $breakpoint-micro) {
|
@media(max-width: $breakpoint-micro) {
|
||||||
.chapters {
|
.chapters {
|
||||||
grid-template-columns: repeat(auto-fill, minmax(12rem, 1fr));
|
grid-template-columns: repeat(auto-fill, minmax(12rem, 1fr));
|
||||||
|
|
|
@ -169,6 +169,10 @@ const tags = [
|
||||||
group: 'oral',
|
group: 'oral',
|
||||||
priority: 6,
|
priority: 6,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: 'ass worship',
|
||||||
|
slug: 'ass-worship',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: 'ball licking',
|
name: 'ball licking',
|
||||||
slug: 'ball-licking',
|
slug: 'ball-licking',
|
||||||
|
@ -494,6 +498,10 @@ const tags = [
|
||||||
name: 'gag',
|
name: 'gag',
|
||||||
slug: 'gag',
|
slug: 'gag',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: 'gagging',
|
||||||
|
slug: 'gagging',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: 'gangbang',
|
name: 'gangbang',
|
||||||
slug: 'gangbang',
|
slug: 'gangbang',
|
||||||
|
@ -785,6 +793,10 @@ const tags = [
|
||||||
slug: 'schoolgirl',
|
slug: 'schoolgirl',
|
||||||
group: 'roleplay',
|
group: 'roleplay',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: 'sex',
|
||||||
|
slug: 'sex',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: 'shaved',
|
name: 'shaved',
|
||||||
slug: 'shaved',
|
slug: 'shaved',
|
||||||
|
@ -1670,6 +1682,10 @@ const aliases = [
|
||||||
name: 'prolapsing',
|
name: 'prolapsing',
|
||||||
for: 'anal-prolapse',
|
for: 'anal-prolapse',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: 'pussy fingering',
|
||||||
|
for: 'fingering',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: 'raven',
|
name: 'raven',
|
||||||
for: 'black-hair',
|
for: 'black-hair',
|
||||||
|
@ -1777,6 +1793,11 @@ const aliases = [
|
||||||
for: 'mfm',
|
for: 'mfm',
|
||||||
secondary: true,
|
secondary: true,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: 'spoon',
|
||||||
|
for: 'spooning',
|
||||||
|
secondary: true,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: 'sex toy',
|
name: 'sex toy',
|
||||||
for: 'toys',
|
for: 'toys',
|
||||||
|
|
Loading…
Reference in New Issue