Compare commits
72 Commits
5ff83a9497
...
old
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4839a3b94c | ||
|
|
d8b641e461 | ||
|
|
7b3bdadd44 | ||
|
|
5deba6b90f | ||
|
|
a5afffc968 | ||
|
|
a239a5c593 | ||
|
|
e56e7333e3 | ||
|
|
d55e3c37cd | ||
|
|
97b78ea016 | ||
|
|
3e290b74dc | ||
|
|
65141207ae | ||
|
|
17dfeac1af | ||
|
|
4a9c428d69 | ||
|
|
333f252099 | ||
|
|
38232f258a | ||
|
|
582269cfaa | ||
|
|
0b646429fd | ||
|
|
fecef6c1cf | ||
|
|
73e5404c44 | ||
|
|
690d2bb3ed | ||
|
|
1dd935e1e9 | ||
|
|
8386230f33 | ||
|
|
5a68b06137 | ||
|
|
5918364cf5 | ||
|
|
df4d860d35 | ||
|
|
d9f0db6e3c | ||
|
|
7372b560b2 | ||
|
|
9d638c685c | ||
|
|
5da1acc38d | ||
|
|
c7c62e220d | ||
|
|
9edd652a2c | ||
|
|
cde760c1ea | ||
|
|
19c7f958e1 | ||
|
|
c7710afdbf | ||
|
|
ba18a3dadb | ||
|
|
496c29e569 | ||
|
|
98a72a4929 | ||
|
|
c4f0b48932 | ||
|
|
93abbab873 | ||
|
|
f7bbab08bd | ||
|
|
1e4ddf2bbf | ||
|
|
9b7879bff7 | ||
|
|
03d96d4dec | ||
|
|
1dfa034332 | ||
|
|
196a1d33e3 | ||
|
|
3d349c413f | ||
|
|
bd5babd37e | ||
|
|
fffe9080f3 | ||
|
|
5630b16e99 | ||
|
|
4bcf7ef45b | ||
|
|
9abc1d48ac | ||
|
|
ceaf5a3217 | ||
|
|
36d84fb98b | ||
|
|
3d80e9d77b | ||
|
|
1dc38ffacc | ||
|
|
ee210b5c68 | ||
|
|
3aae3cd3a1 | ||
|
|
f1a7f2f905 | ||
|
|
0b7e0319f1 | ||
|
|
10b8abf706 | ||
|
|
b163223ff1 | ||
|
|
b9f3eb85f9 | ||
|
|
285a65f018 | ||
|
|
815d56d334 | ||
|
|
27a9a233e2 | ||
|
|
22864105ac | ||
|
|
7cf47cbf8d | ||
|
|
502c588958 | ||
|
|
81792a7c2f | ||
|
|
784d326584 | ||
|
|
83dc7aa578 | ||
|
|
5a3b27fbf7 |
@@ -6,7 +6,7 @@
|
|||||||
<div class="actor-header">
|
<div class="actor-header">
|
||||||
<h2 class="header-name">
|
<h2 class="header-name">
|
||||||
<span v-if="actor.entity">{{ actor.name }} ({{ actor.entity.name }})</span>
|
<span v-if="actor.entity">{{ actor.name }} ({{ actor.entity.name }})</span>
|
||||||
<span v-else="">{{ actor.name }}</span>
|
<span v-else>{{ actor.name }}</span>
|
||||||
|
|
||||||
<Gender
|
<Gender
|
||||||
:gender="actor.gender"
|
:gender="actor.gender"
|
||||||
|
|||||||
@@ -46,7 +46,7 @@
|
|||||||
/>
|
/>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<template v-slot:tooltip>
|
<template #tooltip>
|
||||||
<Search
|
<Search
|
||||||
content="actors"
|
content="actors"
|
||||||
@select="actor => addActor(actor)"
|
@select="actor => addActor(actor)"
|
||||||
@@ -88,7 +88,7 @@
|
|||||||
/>
|
/>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<template v-slot:tooltip>
|
<template #tooltip>
|
||||||
<Search
|
<Search
|
||||||
content="tags"
|
content="tags"
|
||||||
:defaults="['anal', 'blowbang', 'mfm', 'dp', 'gangbang', 'airtight']"
|
:defaults="['anal', 'blowbang', 'mfm', 'dp', 'gangbang', 'airtight']"
|
||||||
@@ -126,7 +126,7 @@
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<template v-slot:tooltip>
|
<template #tooltip>
|
||||||
<Search
|
<Search
|
||||||
label="Search channels"
|
label="Search channels"
|
||||||
content="entities"
|
content="entities"
|
||||||
@@ -181,7 +181,7 @@
|
|||||||
/>
|
/>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<template v-slot:tooltip>
|
<template #tooltip>
|
||||||
<Search
|
<Search
|
||||||
content="stashes"
|
content="stashes"
|
||||||
@select="stash => addStash(stash)"
|
@select="stash => addStash(stash)"
|
||||||
@@ -194,6 +194,7 @@
|
|||||||
|
|
||||||
<div class="dialog-actions right">
|
<div class="dialog-actions right">
|
||||||
<button
|
<button
|
||||||
|
:disabled="actors.length === 0 && tags.length === 0 && !entity"
|
||||||
type="submit"
|
type="submit"
|
||||||
class="button button-primary"
|
class="button button-primary"
|
||||||
>Add alert</button>
|
>Add alert</button>
|
||||||
@@ -210,19 +211,19 @@ import Search from './search.vue';
|
|||||||
|
|
||||||
async function addAlert() {
|
async function addAlert() {
|
||||||
await this.$store.dispatch('addAlert', {
|
await this.$store.dispatch('addAlert', {
|
||||||
actors: this.actors.map(actor => actor.id),
|
actors: this.actors.map((actor) => actor.id),
|
||||||
tags: this.tags.map(tag => tag.id),
|
tags: this.tags.map((tag) => tag.id),
|
||||||
entity: this.entity?.id,
|
entity: this.entity?.id,
|
||||||
notify: this.notify,
|
notify: this.notify,
|
||||||
email: this.email,
|
email: this.email,
|
||||||
stashes: this.stashes.map(stash => stash.id),
|
stashes: this.stashes.map((stash) => stash.id),
|
||||||
});
|
});
|
||||||
|
|
||||||
this.$emit('close', true);
|
this.$emit('close', true);
|
||||||
}
|
}
|
||||||
|
|
||||||
function addActor(actor) {
|
function addActor(actor) {
|
||||||
if (!this.actors.some(selectedActor => selectedActor.id === actor.id)) {
|
if (!this.actors.some((selectedActor) => selectedActor.id === actor.id)) {
|
||||||
this.actors = this.actors.concat(actor);
|
this.actors = this.actors.concat(actor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -235,7 +236,7 @@ function addEntity(entity) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function addTag(tag) {
|
function addTag(tag) {
|
||||||
if (!this.tags.some(selectedTag => selectedTag.id === tag.id)) {
|
if (!this.tags.some((selectedTag) => selectedTag.id === tag.id)) {
|
||||||
this.tags = this.tags.concat(tag);
|
this.tags = this.tags.concat(tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -243,7 +244,7 @@ function addTag(tag) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function removeActor(actor) {
|
function removeActor(actor) {
|
||||||
this.actors = this.actors.filter(listedActor => listedActor.id !== actor.id);
|
this.actors = this.actors.filter((listedActor) => listedActor.id !== actor.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
function removeEntity() {
|
function removeEntity() {
|
||||||
@@ -251,11 +252,11 @@ function removeEntity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function removeTag(tag) {
|
function removeTag(tag) {
|
||||||
this.tags = this.tags.filter(listedTag => listedTag.id !== tag.id);
|
this.tags = this.tags.filter((listedTag) => listedTag.id !== tag.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
function addStash(stash) {
|
function addStash(stash) {
|
||||||
if (!this.stashes.some(selectedStash => selectedStash.id === stash.id)) {
|
if (!this.stashes.some((selectedStash) => selectedStash.id === stash.id)) {
|
||||||
this.stashes = this.stashes.concat(stash);
|
this.stashes = this.stashes.concat(stash);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -263,7 +264,7 @@ function addStash(stash) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function removeStash(stash) {
|
function removeStash(stash) {
|
||||||
this.stashes = this.stashes.filter(listedStash => listedStash.id !== stash.id);
|
this.stashes = this.stashes.filter((listedStash) => listedStash.id !== stash.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
@@ -273,6 +274,7 @@ export default {
|
|||||||
Entity,
|
Entity,
|
||||||
Search,
|
Search,
|
||||||
},
|
},
|
||||||
|
emits: ['close'],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
actors: [],
|
actors: [],
|
||||||
@@ -284,7 +286,6 @@ export default {
|
|||||||
availableStashes: this.$store.state.auth.user.stashes,
|
availableStashes: this.$store.state.auth.user.stashes,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
emits: ['close'],
|
|
||||||
methods: {
|
methods: {
|
||||||
addActor,
|
addActor,
|
||||||
addAlert,
|
addAlert,
|
||||||
|
|||||||
54
assets/components/container/container.vue
Normal file → Executable file
@@ -8,35 +8,40 @@
|
|||||||
/>
|
/>
|
||||||
|
|
||||||
<transition name="slide">
|
<transition name="slide">
|
||||||
<Sidebar
|
<Sidebar v-if="showSidebar" />
|
||||||
v-if="showSidebar"
|
|
||||||
@toggle-sidebar="(state) => toggleSidebar(state)"
|
|
||||||
@show-filters="(state) => toggleFilters(state)"
|
|
||||||
/>
|
|
||||||
</transition>
|
</transition>
|
||||||
|
|
||||||
<Header
|
<Header />
|
||||||
@toggle-sidebar="(state) => toggleSidebar(state)"
|
|
||||||
@show-filters="(state) => toggleFilters(state)"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<p
|
<p
|
||||||
v-if="config.showDisclaimer"
|
v-if="config.showDisclaimer"
|
||||||
class="disclaimer"
|
class="disclaimer"
|
||||||
>{{ config.disclaimer }}</p>
|
v-html="config.disclaimer"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<p
|
||||||
|
v-if="config.showAnnouncement"
|
||||||
|
class="announcement"
|
||||||
|
v-html="config.announcement"
|
||||||
|
/>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
ref="content"
|
ref="content"
|
||||||
class="content"
|
class="content"
|
||||||
@scroll="scroll"
|
@scroll="scroll"
|
||||||
>
|
>
|
||||||
<router-view @scroll="scrollToTop" />
|
<RouterView @scroll="scrollToTop" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<Filters
|
<Filters
|
||||||
v-if="showFilters"
|
v-if="showFilters"
|
||||||
@close="toggleFilters(false)"
|
@close="toggleFilters(false)"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<Settings
|
||||||
|
v-if="showSettings"
|
||||||
|
@close="toggleSettings(false)"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -45,6 +50,7 @@ import Warning from './warning.vue';
|
|||||||
import Header from '../header/header.vue';
|
import Header from '../header/header.vue';
|
||||||
import Sidebar from '../sidebar/sidebar.vue';
|
import Sidebar from '../sidebar/sidebar.vue';
|
||||||
import Filters from '../filters/filters.vue';
|
import Filters from '../filters/filters.vue';
|
||||||
|
import Settings from '../settings/settings.vue';
|
||||||
|
|
||||||
function toggleSidebar(state) {
|
function toggleSidebar(state) {
|
||||||
this.showSidebar = typeof state === 'boolean' ? state : !this.showSidebar;
|
this.showSidebar = typeof state === 'boolean' ? state : !this.showSidebar;
|
||||||
@@ -55,6 +61,11 @@ function toggleFilters(state) {
|
|||||||
this.showSidebar = false;
|
this.showSidebar = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function toggleSettings(state) {
|
||||||
|
this.showSettings = state;
|
||||||
|
this.showSidebar = false;
|
||||||
|
}
|
||||||
|
|
||||||
async function setConsent(consent, includeQueer) {
|
async function setConsent(consent, includeQueer) {
|
||||||
if (consent) {
|
if (consent) {
|
||||||
this.showWarning = false;
|
this.showWarning = false;
|
||||||
@@ -62,7 +73,7 @@ async function setConsent(consent, includeQueer) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (includeQueer) {
|
if (includeQueer) {
|
||||||
this.$store.dispatch('setTagFilter', this.$store.state.ui.tagFilter.filter(tag => !['gay', 'bisexual', 'transsexual'].includes(tag)));
|
this.$store.dispatch('setTagFilter', this.$store.state.ui.tagFilter.filter((tag) => !['gay', 'bisexual', 'transsexual'].includes(tag)));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -88,6 +99,9 @@ function scrollToTop() {
|
|||||||
function mounted() {
|
function mounted() {
|
||||||
document.addEventListener('click', this.blur);
|
document.addEventListener('click', this.blur);
|
||||||
window.addEventListener('resize', this.resize);
|
window.addEventListener('resize', this.resize);
|
||||||
|
|
||||||
|
this.events.on('toggleSettings', this.toggleSettings);
|
||||||
|
this.events.on('toggleSidebar', this.toggleSidebar);
|
||||||
}
|
}
|
||||||
|
|
||||||
function beforeUnmount() {
|
function beforeUnmount() {
|
||||||
@@ -101,12 +115,15 @@ export default {
|
|||||||
Sidebar,
|
Sidebar,
|
||||||
Warning,
|
Warning,
|
||||||
Filters,
|
Filters,
|
||||||
|
Settings,
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
showSidebar: false,
|
showSidebar: false,
|
||||||
showWarning: localStorage.getItem('consent') !== window.env.sessionId,
|
showWarning: localStorage.getItem('consent') !== window.env.sessionId,
|
||||||
showFilters: false,
|
showFilters: false,
|
||||||
|
showSettings: false,
|
||||||
|
selected: null,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
mounted,
|
mounted,
|
||||||
@@ -114,6 +131,7 @@ export default {
|
|||||||
methods: {
|
methods: {
|
||||||
toggleSidebar,
|
toggleSidebar,
|
||||||
toggleFilters,
|
toggleFilters,
|
||||||
|
toggleSettings,
|
||||||
setConsent,
|
setConsent,
|
||||||
blur,
|
blur,
|
||||||
resize,
|
resize,
|
||||||
@@ -183,13 +201,21 @@ export default {
|
|||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.disclaimer {
|
.disclaimer,
|
||||||
|
.announcement {
|
||||||
padding: .5rem 1rem;
|
padding: .5rem 1rem;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
color: var(--text-light);
|
color: var(--text-light);
|
||||||
background: var(--warn);
|
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
box-shadow: inset 0 0 3px var(--darken-weak);
|
box-shadow: inset 0 0 3px var(--darken-weak);
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.disclaimer {
|
||||||
|
background: var(--warn);
|
||||||
|
}
|
||||||
|
|
||||||
|
.announcement {
|
||||||
|
background: var(--notice);
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -18,19 +18,16 @@
|
|||||||
<div class="filters">
|
<div class="filters">
|
||||||
<ActorFilter
|
<ActorFilter
|
||||||
class="filters-filter"
|
class="filters-filter"
|
||||||
:filter="filter"
|
|
||||||
:available-actors="availableActors"
|
:available-actors="availableActors"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<ChannelFilter
|
<ChannelFilter
|
||||||
class="filters-filter"
|
class="filters-filter"
|
||||||
:filter="filter"
|
|
||||||
:available-channels="availableChannels"
|
:available-channels="availableChannels"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<TagFilter
|
<TagFilter
|
||||||
class="filters-filter"
|
class="filters-filter"
|
||||||
:filter="filter"
|
|
||||||
:available-tags="availableTags"
|
:available-tags="availableTags"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@@ -44,10 +41,6 @@ import ActorFilter from './actor-filter.vue';
|
|||||||
import ChannelFilter from './channel-filter.vue';
|
import ChannelFilter from './channel-filter.vue';
|
||||||
import TagFilter from './tag-filter.vue';
|
import TagFilter from './tag-filter.vue';
|
||||||
|
|
||||||
function filter(state) {
|
|
||||||
return state.ui.filter;
|
|
||||||
}
|
|
||||||
|
|
||||||
function range() {
|
function range() {
|
||||||
return this.$route.params.range;
|
return this.$route.params.range;
|
||||||
}
|
}
|
||||||
@@ -114,7 +107,6 @@ export default {
|
|||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
...mapState({
|
...mapState({
|
||||||
filter,
|
|
||||||
range,
|
range,
|
||||||
batch,
|
batch,
|
||||||
}),
|
}),
|
||||||
@@ -129,6 +121,43 @@ export default {
|
|||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
@import 'breakpoints';
|
@import 'breakpoints';
|
||||||
|
|
||||||
|
.filter {
|
||||||
|
color: var(--shadow);
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.filter-applied {
|
||||||
|
flex-grow: 1;
|
||||||
|
padding: .75rem .5rem;
|
||||||
|
font-size: 1rem;
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
text-align: right;
|
||||||
|
|
||||||
|
&.empty {
|
||||||
|
color: var(--shadow);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
fill: var(--shadow);
|
||||||
|
margin: -.1rem 0 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
.applied {
|
||||||
|
color: var(--shadow-strong);
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
fill: var(--shadow-strong);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.filter-mode {
|
.filter-mode {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
color: var(--shadow);
|
color: var(--shadow);
|
||||||
@@ -274,43 +303,6 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
::v-deep(.filter) {
|
|
||||||
color: var(--shadow);
|
|
||||||
display: inline-flex;
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
.filter-applied {
|
|
||||||
flex-grow: 1;
|
|
||||||
padding: .75rem .5rem;
|
|
||||||
font-size: 1rem;
|
|
||||||
white-space: nowrap;
|
|
||||||
overflow: hidden;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
text-align: right;
|
|
||||||
|
|
||||||
&.empty {
|
|
||||||
color: var(--shadow);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.icon {
|
|
||||||
fill: var(--shadow);
|
|
||||||
margin: -.1rem 0 0 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
cursor: pointer;
|
|
||||||
|
|
||||||
.applied {
|
|
||||||
color: var(--shadow-strong);
|
|
||||||
}
|
|
||||||
|
|
||||||
.icon {
|
|
||||||
fill: var(--shadow-strong);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.filters {
|
.filters {
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
>Tags</div>
|
>Tags</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<template v-slot:tooltip>
|
<template #tooltip>
|
||||||
<div
|
<div
|
||||||
class="filter-options"
|
class="filter-options"
|
||||||
@click.stop
|
@click.stop
|
||||||
@@ -70,7 +70,7 @@
|
|||||||
<script>
|
<script>
|
||||||
function getNewRange(tag) {
|
function getNewRange(tag) {
|
||||||
if (this.selectedTags.includes(tag)) {
|
if (this.selectedTags.includes(tag)) {
|
||||||
return { tags: this.selectedTags.filter(selectedTag => selectedTag !== tag).join(',') || undefined };
|
return { tags: this.selectedTags.filter((selectedTag) => selectedTag !== tag).join(',') || undefined };
|
||||||
}
|
}
|
||||||
|
|
||||||
return { tags: this.selectedTags.concat(tag).join(',') };
|
return { tags: this.selectedTags.concat(tag).join(',') };
|
||||||
@@ -82,10 +82,6 @@ function selectedTags() {
|
|||||||
|
|
||||||
export default {
|
export default {
|
||||||
props: {
|
props: {
|
||||||
filter: {
|
|
||||||
type: Array,
|
|
||||||
default: () => [],
|
|
||||||
},
|
|
||||||
compact: {
|
compact: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false,
|
default: false,
|
||||||
|
|||||||
@@ -14,6 +14,12 @@
|
|||||||
loading="lazy"
|
loading="lazy"
|
||||||
>
|
>
|
||||||
|
|
||||||
|
<div
|
||||||
|
v-else
|
||||||
|
:title="movie.title"
|
||||||
|
class="unavailable"
|
||||||
|
><Icon icon="blocked" /></div>
|
||||||
|
|
||||||
<Icon
|
<Icon
|
||||||
v-show="(!stash || stash.primary) && favorited"
|
v-show="(!stash || stash.primary) && favorited"
|
||||||
icon="heart7"
|
icon="heart7"
|
||||||
@@ -161,7 +167,6 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.movie {
|
.movie {
|
||||||
height: 16rem;
|
|
||||||
display: flex;
|
display: flex;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -171,18 +176,30 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.cover {
|
.cover {
|
||||||
height: 100%;
|
height: 16rem;
|
||||||
|
width: 11.25rem;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
flex-shrink: 0;
|
||||||
position: relative;
|
position: relative;
|
||||||
box-shadow: 0 0 3px var(--darken-weak);
|
box-shadow: 0 0 3px var(--darken-weak);
|
||||||
|
background-color: var(--shadow-hint);
|
||||||
|
|
||||||
img {
|
img {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
max-width: 12rem;
|
width: 100%;
|
||||||
background-position: center;
|
background-position: center;
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
object-fit: cover;
|
object-fit: cover;
|
||||||
object-position: center;
|
object-position: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.unavailable .icon {
|
||||||
|
width: 2rem;
|
||||||
|
height: 2rem;
|
||||||
|
fill: var(--shadow-hint);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.info {
|
.info {
|
||||||
@@ -254,10 +271,10 @@ export default {
|
|||||||
.stash {
|
.stash {
|
||||||
width: 1.5rem;
|
width: 1.5rem;
|
||||||
height: 1.5rem;
|
height: 1.5rem;
|
||||||
padding: .25rem .5rem .5rem .25rem;
|
padding: .25rem .5rem .5rem .5rem;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
right: 0;
|
left: 0;
|
||||||
fill: var(--lighten-weak);
|
fill: var(--lighten-weak);
|
||||||
filter: drop-shadow(0 0 2px var(--darken));
|
filter: drop-shadow(0 0 2px var(--darken));
|
||||||
|
|
||||||
@@ -273,8 +290,9 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@media(max-width: $breakpoint-kilo) {
|
@media(max-width: $breakpoint-kilo) {
|
||||||
.movie {
|
.cover {
|
||||||
height: 12rem;
|
height: 12rem;
|
||||||
|
width: 8.25rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ensure no half actor names show */
|
/* ensure no half actor names show */
|
||||||
|
|||||||
@@ -3,6 +3,12 @@
|
|||||||
<div class="content-inner">
|
<div class="content-inner">
|
||||||
<SearchBar :placeholder="`Search ${totalCount} movies`" />
|
<SearchBar :placeholder="`Search ${totalCount} movies`" />
|
||||||
|
|
||||||
|
<TagFilter
|
||||||
|
class="filters-filter"
|
||||||
|
:filter="filter"
|
||||||
|
:available-tags="availableTags"
|
||||||
|
/>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
ref="tiles"
|
ref="tiles"
|
||||||
class="tiles"
|
class="tiles"
|
||||||
@@ -30,6 +36,7 @@
|
|||||||
import MovieTile from './movie-tile.vue';
|
import MovieTile from './movie-tile.vue';
|
||||||
import SearchBar from '../search/bar.vue';
|
import SearchBar from '../search/bar.vue';
|
||||||
import Pagination from '../pagination/pagination.vue';
|
import Pagination from '../pagination/pagination.vue';
|
||||||
|
import TagFilter from '../filters/tag-filter.vue';
|
||||||
|
|
||||||
async function fetchMovies() {
|
async function fetchMovies() {
|
||||||
if (this.$route.query.query) {
|
if (this.$route.query.query) {
|
||||||
@@ -73,6 +80,7 @@ export default {
|
|||||||
MovieTile,
|
MovieTile,
|
||||||
SearchBar,
|
SearchBar,
|
||||||
Pagination,
|
Pagination,
|
||||||
|
TagFilter,
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -45,6 +45,8 @@ const tagSlugsByCategory = {
|
|||||||
'teen',
|
'teen',
|
||||||
'milf',
|
'milf',
|
||||||
'blowjob',
|
'blowjob',
|
||||||
|
'gay',
|
||||||
|
'transsexual',
|
||||||
'dp',
|
'dp',
|
||||||
'gangbang',
|
'gangbang',
|
||||||
'facial',
|
'facial',
|
||||||
@@ -64,6 +66,11 @@ const tagSlugsByCategory = {
|
|||||||
'tattoos',
|
'tattoos',
|
||||||
'piercings',
|
'piercings',
|
||||||
],
|
],
|
||||||
|
sexuality: [
|
||||||
|
'gay',
|
||||||
|
'bisexual',
|
||||||
|
'transsexual',
|
||||||
|
],
|
||||||
oral: [
|
oral: [
|
||||||
'blowjob',
|
'blowjob',
|
||||||
'pussy-eating',
|
'pussy-eating',
|
||||||
@@ -162,10 +169,18 @@ async function fetchTags() {
|
|||||||
|
|
||||||
const tagsBySlug = tags.reduce((acc, tag) => ({ ...acc, [tag.slug]: tag }), {});
|
const tagsBySlug = tags.reduce((acc, tag) => ({ ...acc, [tag.slug]: tag }), {});
|
||||||
|
|
||||||
this.categories = Object.entries(tagSlugsByCategory).reduce((acc, [category, tagSlugs]) => ({
|
this.categories = Object.entries(tagSlugsByCategory).reduce((acc, [category, tagSlugs]) => {
|
||||||
...acc,
|
const categoryTags = tagSlugs.map((tagSlug) => tagsBySlug[tagSlug]).filter(Boolean);
|
||||||
[category]: tagSlugs.map(tagSlug => tagsBySlug[tagSlug]),
|
|
||||||
}), {});
|
if (categoryTags.length === 0) {
|
||||||
|
return acc;
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
...acc,
|
||||||
|
[category]: categoryTags,
|
||||||
|
};
|
||||||
|
}, {});
|
||||||
}
|
}
|
||||||
|
|
||||||
async function searchTags() {
|
async function searchTags() {
|
||||||
@@ -202,6 +217,7 @@ export default {
|
|||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
$route: fetchTags,
|
$route: fetchTags,
|
||||||
|
'$store.state.ui.tagFilter': fetchTags,
|
||||||
},
|
},
|
||||||
mounted,
|
mounted,
|
||||||
methods: {
|
methods: {
|
||||||
|
|||||||
@@ -44,6 +44,11 @@
|
|||||||
&:hover {
|
&:hover {
|
||||||
background: var(--primary-strong);
|
background: var(--primary-strong);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&:disabled {
|
||||||
|
background: var(--shadow-weak);
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.button-secondary {
|
.button-secondary {
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ function initEntitiesActions(store, router) {
|
|||||||
or: [
|
or: [
|
||||||
{
|
{
|
||||||
date: {
|
date: {
|
||||||
isNull: ${entityType === 'channel'}
|
isNull: ${entityType !== 'network'}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
@@ -96,7 +96,7 @@ function initEntitiesActions(store, router) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
effectiveDate: {
|
date: {
|
||||||
lessThan: $before,
|
lessThan: $before,
|
||||||
greaterThan: $after
|
greaterThan: $after
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -125,7 +125,7 @@ const movieFields = `
|
|||||||
type
|
type
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
covers: moviesCovers {
|
covers: moviesCovers(orderBy: MEDIA_BY_MEDIA_ID__INDEX_ASC) {
|
||||||
media {
|
media {
|
||||||
id
|
id
|
||||||
path
|
path
|
||||||
|
|||||||
@@ -7,22 +7,22 @@ const dateRanges = {
|
|||||||
latest: () => ({
|
latest: () => ({
|
||||||
after: '1900-01-01',
|
after: '1900-01-01',
|
||||||
before: dayjs.utc().toDate(),
|
before: dayjs.utc().toDate(),
|
||||||
orderBy: ['EFFECTIVE_DATE_DESC'],
|
orderBy: ['DATE_DESC'],
|
||||||
}),
|
}),
|
||||||
upcoming: () => ({
|
upcoming: () => ({
|
||||||
after: dayjs.utc().toDate(),
|
after: dayjs.utc().toDate(),
|
||||||
before: '2100-01-01',
|
before: '2100-01-01',
|
||||||
orderBy: ['EFFECTIVE_DATE_DESC'],
|
orderBy: ['DATE_DESC'],
|
||||||
}),
|
}),
|
||||||
new: () => ({
|
new: () => ({
|
||||||
after: '1900-01-01 00:00:00',
|
after: '1900-01-01 00:00:00',
|
||||||
before: '2100-01-01',
|
before: '2100-01-01',
|
||||||
orderBy: ['CREATED_AT_DESC', 'EFFECTIVE_DATE_ASC'],
|
orderBy: ['CREATED_AT_DESC', 'DATE_ASC'],
|
||||||
}),
|
}),
|
||||||
all: () => ({
|
all: () => ({
|
||||||
after: '1900-01-01',
|
after: '1900-01-01',
|
||||||
before: '2100-01-01',
|
before: '2100-01-01',
|
||||||
orderBy: ['EFFECTIVE_DATE_DESC'],
|
orderBy: ['DATE_DESC'],
|
||||||
}),
|
}),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -110,6 +110,8 @@ function initReleasesActions(store, router) {
|
|||||||
$query: String!
|
$query: String!
|
||||||
$limit:Int = 20
|
$limit:Int = 20
|
||||||
$offset:Int = 0
|
$offset:Int = 0
|
||||||
|
$hasAuth: Boolean!
|
||||||
|
$userId: Int
|
||||||
) {
|
) {
|
||||||
connection: searchMoviesConnection(
|
connection: searchMoviesConnection(
|
||||||
query: $query
|
query: $query
|
||||||
@@ -126,6 +128,8 @@ function initReleasesActions(store, router) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
`, {
|
`, {
|
||||||
|
hasAuth: !!store.state.auth.user,
|
||||||
|
userId: store.state.auth.user?.id,
|
||||||
query,
|
query,
|
||||||
limit,
|
limit,
|
||||||
offset: Math.max(0, (pageNumber - 1)) * limit,
|
offset: Math.max(0, (pageNumber - 1)) * limit,
|
||||||
|
|||||||
@@ -210,9 +210,15 @@ function initTagsActions(store, _router) {
|
|||||||
query Tags(
|
query Tags(
|
||||||
$slugs: [String!] = [],
|
$slugs: [String!] = [],
|
||||||
$limit: Int = 100
|
$limit: Int = 100
|
||||||
|
$exclude: [String!]
|
||||||
) {
|
) {
|
||||||
tags(
|
tags(
|
||||||
filter: { slug: { in: $slugs } },
|
filter: {
|
||||||
|
slug: {
|
||||||
|
in: $slugs
|
||||||
|
notIn: $exclude
|
||||||
|
}
|
||||||
|
},
|
||||||
first: $limit
|
first: $limit
|
||||||
) {
|
) {
|
||||||
id
|
id
|
||||||
@@ -257,6 +263,7 @@ function initTagsActions(store, _router) {
|
|||||||
`, {
|
`, {
|
||||||
slugs,
|
slugs,
|
||||||
limit,
|
limit,
|
||||||
|
exclude: store.state.ui.tagFilter,
|
||||||
});
|
});
|
||||||
|
|
||||||
return tags.map((tag) => curateTag(tag, store.state.ui.sfw));
|
return tags.map((tag) => curateTag(tag, store.state.ui.sfw));
|
||||||
|
|||||||
@@ -66,10 +66,7 @@ module.exports = {
|
|||||||
// pornpros
|
// pornpros
|
||||||
'milfhumiliation',
|
'milfhumiliation',
|
||||||
'humiliated',
|
'humiliated',
|
||||||
'flexiblepositions',
|
|
||||||
'publicviolations',
|
|
||||||
'amateurviolations',
|
'amateurviolations',
|
||||||
'squirtdisgrace',
|
|
||||||
'cumdisgrace',
|
'cumdisgrace',
|
||||||
'webcamhackers',
|
'webcamhackers',
|
||||||
'collegeteens',
|
'collegeteens',
|
||||||
@@ -301,10 +298,6 @@ module.exports = {
|
|||||||
interval: 1000,
|
interval: 1000,
|
||||||
concurrency: 1,
|
concurrency: 1,
|
||||||
},
|
},
|
||||||
'www.realitykings.com': {
|
|
||||||
interval: 1000,
|
|
||||||
concurrency: 1,
|
|
||||||
},
|
|
||||||
'westcoastproductions.com': {
|
'westcoastproductions.com': {
|
||||||
interval: 100,
|
interval: 100,
|
||||||
concurrency: 1,
|
concurrency: 1,
|
||||||
@@ -323,6 +316,8 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
media: {
|
media: {
|
||||||
path: './media',
|
path: './media',
|
||||||
|
maxSize: 1000,
|
||||||
|
quality: 80,
|
||||||
thumbnailSize: 320, // width for 16:9 will be exactly 576px
|
thumbnailSize: 320, // width for 16:9 will be exactly 576px
|
||||||
thumbnailQuality: 100,
|
thumbnailQuality: 100,
|
||||||
lazySize: 90,
|
lazySize: 90,
|
||||||
|
|||||||
@@ -13,7 +13,12 @@ exports.up = async (knex) => knex.raw(`
|
|||||||
)
|
)
|
||||||
|
|
||||||
SELECT releases FROM releases
|
SELECT releases FROM releases
|
||||||
INNER JOIN children ON children.id = releases.entity_id;
|
INNER JOIN children ON children.id = releases.entity_id
|
||||||
|
|
||||||
|
UNION
|
||||||
|
|
||||||
|
SELECT releases FROM releases
|
||||||
|
INNER JOIN children ON children.id = releases.studio_id;
|
||||||
$$ LANGUAGE SQL STABLE;
|
$$ LANGUAGE SQL STABLE;
|
||||||
|
|
||||||
COMMENT ON FUNCTION entities_scenes IS E'@sortable';
|
COMMENT ON FUNCTION entities_scenes IS E'@sortable';
|
||||||
|
|||||||
8
migrations/20220209010315_movies_tags.js
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
exports.up = async (knex) => knex.raw(`
|
||||||
|
CREATE VIEW movies_tagged AS
|
||||||
|
SELECT * FROM movies;
|
||||||
|
`);
|
||||||
|
|
||||||
|
exports.down = async (knex) => knex.raw(`
|
||||||
|
DROP VIEW IF EXISTS movies_tagged;
|
||||||
|
`);
|
||||||
39
package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "traxxx",
|
"name": "traxxx",
|
||||||
"version": "1.205.11",
|
"version": "1.209.4",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "traxxx",
|
"name": "traxxx",
|
||||||
"version": "1.205.11",
|
"version": "1.209.4",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@casl/ability": "^5.2.2",
|
"@casl/ability": "^5.2.2",
|
||||||
@@ -57,6 +57,7 @@
|
|||||||
"mitt": "^3.0.0",
|
"mitt": "^3.0.0",
|
||||||
"moment": "^2.24.0",
|
"moment": "^2.24.0",
|
||||||
"nanoid": "^3.1.30",
|
"nanoid": "^3.1.30",
|
||||||
|
"node-fetch": "^2.6.7",
|
||||||
"object-merge-advanced": "^12.1.0",
|
"object-merge-advanced": "^12.1.0",
|
||||||
"object.omit": "^3.0.0",
|
"object.omit": "^3.0.0",
|
||||||
"opn": "^6.0.0",
|
"opn": "^6.0.0",
|
||||||
@@ -72,6 +73,7 @@
|
|||||||
"tippy.js": "^6.3.1",
|
"tippy.js": "^6.3.1",
|
||||||
"tough-cookie": "^4.0.0",
|
"tough-cookie": "^4.0.0",
|
||||||
"tunnel": "0.0.6",
|
"tunnel": "0.0.6",
|
||||||
|
"undici": "^4.13.0",
|
||||||
"url-pattern": "^1.0.3",
|
"url-pattern": "^1.0.3",
|
||||||
"v-tooltip": "^2.0.3",
|
"v-tooltip": "^2.0.3",
|
||||||
"video.js": "^7.11.4",
|
"video.js": "^7.11.4",
|
||||||
@@ -11611,14 +11613,22 @@
|
|||||||
"integrity": "sha512-eazsqzwG2lskuzBqCGPi7Ac2UgOoMz8JVOXVhTvvPDYhthvNpefx8jWD8Np7Gv+2Sz0FlPWZk0nJV0z598Wn8Q=="
|
"integrity": "sha512-eazsqzwG2lskuzBqCGPi7Ac2UgOoMz8JVOXVhTvvPDYhthvNpefx8jWD8Np7Gv+2Sz0FlPWZk0nJV0z598Wn8Q=="
|
||||||
},
|
},
|
||||||
"node_modules/node-fetch": {
|
"node_modules/node-fetch": {
|
||||||
"version": "2.6.5",
|
"version": "2.6.7",
|
||||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz",
|
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
|
||||||
"integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==",
|
"integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"whatwg-url": "^5.0.0"
|
"whatwg-url": "^5.0.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "4.x || >=6.0.0"
|
"node": "4.x || >=6.0.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"encoding": "^0.1.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"encoding": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/node-fetch/node_modules/tr46": {
|
"node_modules/node-fetch/node_modules/tr46": {
|
||||||
@@ -16346,6 +16356,14 @@
|
|||||||
"node": ">=0.10.0"
|
"node": ">=0.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/undici": {
|
||||||
|
"version": "4.13.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/undici/-/undici-4.13.0.tgz",
|
||||||
|
"integrity": "sha512-8lk8S/f2V0VUNGf2scU2b+KI2JSzEQLdCyRNRF3XmHu+5jectlSDaPSBCXAHFaUlt1rzngzOBVDgJS9/Gue/KA==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12.18"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/unicode-canonical-property-names-ecmascript": {
|
"node_modules/unicode-canonical-property-names-ecmascript": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
|
||||||
@@ -26407,9 +26425,9 @@
|
|||||||
"integrity": "sha512-eazsqzwG2lskuzBqCGPi7Ac2UgOoMz8JVOXVhTvvPDYhthvNpefx8jWD8Np7Gv+2Sz0FlPWZk0nJV0z598Wn8Q=="
|
"integrity": "sha512-eazsqzwG2lskuzBqCGPi7Ac2UgOoMz8JVOXVhTvvPDYhthvNpefx8jWD8Np7Gv+2Sz0FlPWZk0nJV0z598Wn8Q=="
|
||||||
},
|
},
|
||||||
"node-fetch": {
|
"node-fetch": {
|
||||||
"version": "2.6.5",
|
"version": "2.6.7",
|
||||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz",
|
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
|
||||||
"integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==",
|
"integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"whatwg-url": "^5.0.0"
|
"whatwg-url": "^5.0.0"
|
||||||
},
|
},
|
||||||
@@ -30068,6 +30086,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
|
||||||
"integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo="
|
"integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo="
|
||||||
},
|
},
|
||||||
|
"undici": {
|
||||||
|
"version": "4.13.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/undici/-/undici-4.13.0.tgz",
|
||||||
|
"integrity": "sha512-8lk8S/f2V0VUNGf2scU2b+KI2JSzEQLdCyRNRF3XmHu+5jectlSDaPSBCXAHFaUlt1rzngzOBVDgJS9/Gue/KA=="
|
||||||
|
},
|
||||||
"unicode-canonical-property-names-ecmascript": {
|
"unicode-canonical-property-names-ecmascript": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "traxxx",
|
"name": "traxxx",
|
||||||
"version": "1.205.11",
|
"version": "1.209.4",
|
||||||
"description": "All the latest porn releases in one place",
|
"description": "All the latest porn releases in one place",
|
||||||
"main": "src/app.js",
|
"main": "src/app.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
@@ -116,6 +116,7 @@
|
|||||||
"mitt": "^3.0.0",
|
"mitt": "^3.0.0",
|
||||||
"moment": "^2.24.0",
|
"moment": "^2.24.0",
|
||||||
"nanoid": "^3.1.30",
|
"nanoid": "^3.1.30",
|
||||||
|
"node-fetch": "^2.6.7",
|
||||||
"object-merge-advanced": "^12.1.0",
|
"object-merge-advanced": "^12.1.0",
|
||||||
"object.omit": "^3.0.0",
|
"object.omit": "^3.0.0",
|
||||||
"opn": "^6.0.0",
|
"opn": "^6.0.0",
|
||||||
@@ -131,6 +132,7 @@
|
|||||||
"tippy.js": "^6.3.1",
|
"tippy.js": "^6.3.1",
|
||||||
"tough-cookie": "^4.0.0",
|
"tough-cookie": "^4.0.0",
|
||||||
"tunnel": "0.0.6",
|
"tunnel": "0.0.6",
|
||||||
|
"undici": "^4.13.0",
|
||||||
"url-pattern": "^1.0.3",
|
"url-pattern": "^1.0.3",
|
||||||
"v-tooltip": "^2.0.3",
|
"v-tooltip": "^2.0.3",
|
||||||
"video.js": "^7.11.4",
|
"video.js": "^7.11.4",
|
||||||
|
|||||||
BIN
public/img/logos/analvids/analvids.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
BIN
public/img/logos/analvids/lazy/analvids.png
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
BIN
public/img/logos/analvids/lazy/favicon_dark.png
Normal file
|
After Width: | Height: | Size: 7.2 KiB |
BIN
public/img/logos/analvids/lazy/favicon_light.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
BIN
public/img/logos/analvids/lazy/network.png
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
BIN
public/img/logos/analvids/network.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
public/img/logos/analvids/thumbs/analvids.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
BIN
public/img/logos/analvids/thumbs/favicon_dark.png
Normal file
|
After Width: | Height: | Size: 7.2 KiB |
BIN
public/img/logos/analvids/thumbs/favicon_light.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
BIN
public/img/logos/analvids/thumbs/network.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
public/img/logos/bjraw/bjraw.png
Normal file
|
After Width: | Height: | Size: 53 KiB |
BIN
public/img/logos/bjraw/favicon.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
public/img/logos/bjraw/favicon_dark.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
public/img/logos/bjraw/favicon_light.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
public/img/logos/bjraw/lazy/bjraw.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
public/img/logos/bjraw/lazy/favicon.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
public/img/logos/bjraw/lazy/favicon_dark.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
public/img/logos/bjraw/lazy/favicon_light.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
public/img/logos/bjraw/lazy/network.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
public/img/logos/bjraw/misc/bj-raw_dark.png
Normal file
|
After Width: | Height: | Size: 49 KiB |
BIN
public/img/logos/bjraw/network.png
Normal file
|
After Width: | Height: | Size: 53 KiB |
BIN
public/img/logos/bjraw/thumbs/bjraw.png
Normal file
|
After Width: | Height: | Size: 9.6 KiB |
BIN
public/img/logos/bjraw/thumbs/favicon.png
Normal file
|
After Width: | Height: | Size: 7.8 KiB |
BIN
public/img/logos/bjraw/thumbs/favicon_dark.png
Normal file
|
After Width: | Height: | Size: 7.8 KiB |
BIN
public/img/logos/bjraw/thumbs/favicon_light.png
Normal file
|
After Width: | Height: | Size: 7.8 KiB |
BIN
public/img/logos/bjraw/thumbs/network.png
Normal file
|
After Width: | Height: | Size: 9.6 KiB |
BIN
public/img/logos/gotfilled/favicon.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
public/img/logos/gotfilled/favicon_dark.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
public/img/logos/gotfilled/favicon_light.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
public/img/logos/gotfilled/gotfilled.png
Normal file
|
After Width: | Height: | Size: 84 KiB |
BIN
public/img/logos/gotfilled/lazy/favicon-dark.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
public/img/logos/gotfilled/lazy/favicon-light.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
public/img/logos/gotfilled/lazy/favicon.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
public/img/logos/gotfilled/lazy/gotfilled.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
public/img/logos/gotfilled/lazy/network.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
public/img/logos/gotfilled/misc/got-filled_dark.png
Normal file
|
After Width: | Height: | Size: 78 KiB |
BIN
public/img/logos/gotfilled/network.png
Normal file
|
After Width: | Height: | Size: 84 KiB |
BIN
public/img/logos/gotfilled/thumbs/favicon-dark.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/img/logos/gotfilled/thumbs/favicon-light.png
Normal file
|
After Width: | Height: | Size: 9.0 KiB |
BIN
public/img/logos/gotfilled/thumbs/favicon.png
Normal file
|
After Width: | Height: | Size: 9.0 KiB |
BIN
public/img/logos/gotfilled/thumbs/gotfilled.png
Normal file
|
After Width: | Height: | Size: 8.9 KiB |
BIN
public/img/logos/gotfilled/thumbs/network.png
Normal file
|
After Width: | Height: | Size: 8.9 KiB |
BIN
public/img/logos/inserted/favicon.png
Normal file
|
After Width: | Height: | Size: 215 KiB |
BIN
public/img/logos/inserted/favicon_dark.png
Normal file
|
After Width: | Height: | Size: 215 KiB |
BIN
public/img/logos/inserted/favicon_light.png
Normal file
|
After Width: | Height: | Size: 215 KiB |
BIN
public/img/logos/inserted/inserted.png
Normal file
|
After Width: | Height: | Size: 377 KiB |
BIN
public/img/logos/inserted/lazy/favicon.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
BIN
public/img/logos/inserted/lazy/favicon_dark.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
BIN
public/img/logos/inserted/lazy/favicon_light.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
BIN
public/img/logos/inserted/lazy/inserted.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
public/img/logos/inserted/lazy/network.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
public/img/logos/inserted/network.png
Normal file
|
After Width: | Height: | Size: 377 KiB |
BIN
public/img/logos/inserted/thumbs/favicon.png
Normal file
|
After Width: | Height: | Size: 118 KiB |
BIN
public/img/logos/inserted/thumbs/favicon_dark.png
Normal file
|
After Width: | Height: | Size: 118 KiB |
BIN
public/img/logos/inserted/thumbs/favicon_light.png
Normal file
|
After Width: | Height: | Size: 118 KiB |
BIN
public/img/logos/inserted/thumbs/inserted.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
public/img/logos/inserted/thumbs/network.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 11 KiB |
BIN
public/img/logos/mofos/bustedbabysitters.png
Normal file
|
After Width: | Height: | Size: 64 KiB |
BIN
public/img/logos/mofos/canshetakeit.png
Normal file
|
After Width: | Height: | Size: 75 KiB |
BIN
public/img/logos/mofos/dronehunter.png
Normal file
|
After Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 25 KiB |
BIN
public/img/logos/mofos/ingangwebang.png
Normal file
|
After Width: | Height: | Size: 37 KiB |
BIN
public/img/logos/mofos/lazy/bustedbabysitters.png
Normal file
|
After Width: | Height: | Size: 4.8 KiB |
BIN
public/img/logos/mofos/lazy/canshetakeit.png
Normal file
|
After Width: | Height: | Size: 4.0 KiB |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.3 KiB |
BIN
public/img/logos/mofos/lazy/dronehunter.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
BIN
public/img/logos/mofos/lazy/favicon_dark.png
Normal file
|
After Width: | Height: | Size: 6.0 KiB |