Compare commits
58 Commits
0b7e0319f1
...
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 |
@@ -6,7 +6,7 @@
|
||||
<div class="actor-header">
|
||||
<h2 class="header-name">
|
||||
<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="actor.gender"
|
||||
|
||||
54
assets/components/container/container.vue
Normal file → Executable file
@@ -8,35 +8,40 @@
|
||||
/>
|
||||
|
||||
<transition name="slide">
|
||||
<Sidebar
|
||||
v-if="showSidebar"
|
||||
@toggle-sidebar="(state) => toggleSidebar(state)"
|
||||
@show-filters="(state) => toggleFilters(state)"
|
||||
/>
|
||||
<Sidebar v-if="showSidebar" />
|
||||
</transition>
|
||||
|
||||
<Header
|
||||
@toggle-sidebar="(state) => toggleSidebar(state)"
|
||||
@show-filters="(state) => toggleFilters(state)"
|
||||
/>
|
||||
<Header />
|
||||
|
||||
<p
|
||||
v-if="config.showDisclaimer"
|
||||
class="disclaimer"
|
||||
>{{ config.disclaimer }}</p>
|
||||
v-html="config.disclaimer"
|
||||
/>
|
||||
|
||||
<p
|
||||
v-if="config.showAnnouncement"
|
||||
class="announcement"
|
||||
v-html="config.announcement"
|
||||
/>
|
||||
|
||||
<div
|
||||
ref="content"
|
||||
class="content"
|
||||
@scroll="scroll"
|
||||
>
|
||||
<router-view @scroll="scrollToTop" />
|
||||
<RouterView @scroll="scrollToTop" />
|
||||
</div>
|
||||
|
||||
<Filters
|
||||
v-if="showFilters"
|
||||
@close="toggleFilters(false)"
|
||||
/>
|
||||
|
||||
<Settings
|
||||
v-if="showSettings"
|
||||
@close="toggleSettings(false)"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -45,6 +50,7 @@ import Warning from './warning.vue';
|
||||
import Header from '../header/header.vue';
|
||||
import Sidebar from '../sidebar/sidebar.vue';
|
||||
import Filters from '../filters/filters.vue';
|
||||
import Settings from '../settings/settings.vue';
|
||||
|
||||
function toggleSidebar(state) {
|
||||
this.showSidebar = typeof state === 'boolean' ? state : !this.showSidebar;
|
||||
@@ -55,6 +61,11 @@ function toggleFilters(state) {
|
||||
this.showSidebar = false;
|
||||
}
|
||||
|
||||
function toggleSettings(state) {
|
||||
this.showSettings = state;
|
||||
this.showSidebar = false;
|
||||
}
|
||||
|
||||
async function setConsent(consent, includeQueer) {
|
||||
if (consent) {
|
||||
this.showWarning = false;
|
||||
@@ -62,7 +73,7 @@ async function setConsent(consent, 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;
|
||||
}
|
||||
|
||||
@@ -88,6 +99,9 @@ function scrollToTop() {
|
||||
function mounted() {
|
||||
document.addEventListener('click', this.blur);
|
||||
window.addEventListener('resize', this.resize);
|
||||
|
||||
this.events.on('toggleSettings', this.toggleSettings);
|
||||
this.events.on('toggleSidebar', this.toggleSidebar);
|
||||
}
|
||||
|
||||
function beforeUnmount() {
|
||||
@@ -101,12 +115,15 @@ export default {
|
||||
Sidebar,
|
||||
Warning,
|
||||
Filters,
|
||||
Settings,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
showSidebar: false,
|
||||
showWarning: localStorage.getItem('consent') !== window.env.sessionId,
|
||||
showFilters: false,
|
||||
showSettings: false,
|
||||
selected: null,
|
||||
};
|
||||
},
|
||||
mounted,
|
||||
@@ -114,6 +131,7 @@ export default {
|
||||
methods: {
|
||||
toggleSidebar,
|
||||
toggleFilters,
|
||||
toggleSettings,
|
||||
setConsent,
|
||||
blur,
|
||||
resize,
|
||||
@@ -183,13 +201,21 @@ export default {
|
||||
</style>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.disclaimer {
|
||||
.disclaimer,
|
||||
.announcement {
|
||||
padding: .5rem 1rem;
|
||||
margin: 0;
|
||||
color: var(--text-light);
|
||||
background: var(--warn);
|
||||
font-weight: bold;
|
||||
box-shadow: inset 0 0 3px var(--darken-weak);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.disclaimer {
|
||||
background: var(--warn);
|
||||
}
|
||||
|
||||
.announcement {
|
||||
background: var(--notice);
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -18,19 +18,16 @@
|
||||
<div class="filters">
|
||||
<ActorFilter
|
||||
class="filters-filter"
|
||||
:filter="filter"
|
||||
:available-actors="availableActors"
|
||||
/>
|
||||
|
||||
<ChannelFilter
|
||||
class="filters-filter"
|
||||
:filter="filter"
|
||||
:available-channels="availableChannels"
|
||||
/>
|
||||
|
||||
<TagFilter
|
||||
class="filters-filter"
|
||||
:filter="filter"
|
||||
:available-tags="availableTags"
|
||||
/>
|
||||
</div>
|
||||
@@ -44,10 +41,6 @@ import ActorFilter from './actor-filter.vue';
|
||||
import ChannelFilter from './channel-filter.vue';
|
||||
import TagFilter from './tag-filter.vue';
|
||||
|
||||
function filter(state) {
|
||||
return state.ui.filter;
|
||||
}
|
||||
|
||||
function range() {
|
||||
return this.$route.params.range;
|
||||
}
|
||||
@@ -114,7 +107,6 @@ export default {
|
||||
},
|
||||
computed: {
|
||||
...mapState({
|
||||
filter,
|
||||
range,
|
||||
batch,
|
||||
}),
|
||||
@@ -129,6 +121,43 @@ export default {
|
||||
<style lang="scss">
|
||||
@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 {
|
||||
width: 100%;
|
||||
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 {
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
>Tags</div>
|
||||
</div>
|
||||
|
||||
<template v-slot:tooltip>
|
||||
<template #tooltip>
|
||||
<div
|
||||
class="filter-options"
|
||||
@click.stop
|
||||
@@ -70,7 +70,7 @@
|
||||
<script>
|
||||
function getNewRange(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(',') };
|
||||
@@ -82,10 +82,6 @@ function selectedTags() {
|
||||
|
||||
export default {
|
||||
props: {
|
||||
filter: {
|
||||
type: Array,
|
||||
default: () => [],
|
||||
},
|
||||
compact: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
|
||||
@@ -14,6 +14,12 @@
|
||||
loading="lazy"
|
||||
>
|
||||
|
||||
<div
|
||||
v-else
|
||||
:title="movie.title"
|
||||
class="unavailable"
|
||||
><Icon icon="blocked" /></div>
|
||||
|
||||
<Icon
|
||||
v-show="(!stash || stash.primary) && favorited"
|
||||
icon="heart7"
|
||||
@@ -161,7 +167,6 @@ export default {
|
||||
}
|
||||
|
||||
.movie {
|
||||
height: 16rem;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
@@ -171,18 +176,30 @@ export default {
|
||||
}
|
||||
|
||||
.cover {
|
||||
height: 100%;
|
||||
height: 16rem;
|
||||
width: 11.25rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
flex-shrink: 0;
|
||||
position: relative;
|
||||
box-shadow: 0 0 3px var(--darken-weak);
|
||||
background-color: var(--shadow-hint);
|
||||
|
||||
img {
|
||||
height: 100%;
|
||||
max-width: 12rem;
|
||||
width: 100%;
|
||||
background-position: center;
|
||||
background-size: cover;
|
||||
object-fit: cover;
|
||||
object-position: center;
|
||||
}
|
||||
|
||||
.unavailable .icon {
|
||||
width: 2rem;
|
||||
height: 2rem;
|
||||
fill: var(--shadow-hint);
|
||||
}
|
||||
}
|
||||
|
||||
.info {
|
||||
@@ -254,10 +271,10 @@ export default {
|
||||
.stash {
|
||||
width: 1.5rem;
|
||||
height: 1.5rem;
|
||||
padding: .25rem .5rem .5rem .25rem;
|
||||
padding: .25rem .5rem .5rem .5rem;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
left: 0;
|
||||
fill: var(--lighten-weak);
|
||||
filter: drop-shadow(0 0 2px var(--darken));
|
||||
|
||||
@@ -273,8 +290,9 @@ export default {
|
||||
}
|
||||
|
||||
@media(max-width: $breakpoint-kilo) {
|
||||
.movie {
|
||||
.cover {
|
||||
height: 12rem;
|
||||
width: 8.25rem;
|
||||
}
|
||||
|
||||
/* ensure no half actor names show */
|
||||
|
||||
@@ -3,6 +3,12 @@
|
||||
<div class="content-inner">
|
||||
<SearchBar :placeholder="`Search ${totalCount} movies`" />
|
||||
|
||||
<TagFilter
|
||||
class="filters-filter"
|
||||
:filter="filter"
|
||||
:available-tags="availableTags"
|
||||
/>
|
||||
|
||||
<div
|
||||
ref="tiles"
|
||||
class="tiles"
|
||||
@@ -30,6 +36,7 @@
|
||||
import MovieTile from './movie-tile.vue';
|
||||
import SearchBar from '../search/bar.vue';
|
||||
import Pagination from '../pagination/pagination.vue';
|
||||
import TagFilter from '../filters/tag-filter.vue';
|
||||
|
||||
async function fetchMovies() {
|
||||
if (this.$route.query.query) {
|
||||
@@ -73,6 +80,7 @@ export default {
|
||||
MovieTile,
|
||||
SearchBar,
|
||||
Pagination,
|
||||
TagFilter,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
||||
@@ -45,6 +45,8 @@ const tagSlugsByCategory = {
|
||||
'teen',
|
||||
'milf',
|
||||
'blowjob',
|
||||
'gay',
|
||||
'transsexual',
|
||||
'dp',
|
||||
'gangbang',
|
||||
'facial',
|
||||
@@ -64,6 +66,11 @@ const tagSlugsByCategory = {
|
||||
'tattoos',
|
||||
'piercings',
|
||||
],
|
||||
sexuality: [
|
||||
'gay',
|
||||
'bisexual',
|
||||
'transsexual',
|
||||
],
|
||||
oral: [
|
||||
'blowjob',
|
||||
'pussy-eating',
|
||||
@@ -162,10 +169,18 @@ async function fetchTags() {
|
||||
|
||||
const tagsBySlug = tags.reduce((acc, tag) => ({ ...acc, [tag.slug]: tag }), {});
|
||||
|
||||
this.categories = Object.entries(tagSlugsByCategory).reduce((acc, [category, tagSlugs]) => ({
|
||||
...acc,
|
||||
[category]: tagSlugs.map(tagSlug => tagsBySlug[tagSlug]),
|
||||
}), {});
|
||||
this.categories = Object.entries(tagSlugsByCategory).reduce((acc, [category, tagSlugs]) => {
|
||||
const categoryTags = tagSlugs.map((tagSlug) => tagsBySlug[tagSlug]).filter(Boolean);
|
||||
|
||||
if (categoryTags.length === 0) {
|
||||
return acc;
|
||||
}
|
||||
|
||||
return {
|
||||
...acc,
|
||||
[category]: categoryTags,
|
||||
};
|
||||
}, {});
|
||||
}
|
||||
|
||||
async function searchTags() {
|
||||
@@ -202,6 +217,7 @@ export default {
|
||||
},
|
||||
watch: {
|
||||
$route: fetchTags,
|
||||
'$store.state.ui.tagFilter': fetchTags,
|
||||
},
|
||||
mounted,
|
||||
methods: {
|
||||
|
||||
@@ -87,7 +87,7 @@ function initEntitiesActions(store, router) {
|
||||
or: [
|
||||
{
|
||||
date: {
|
||||
isNull: ${entityType === 'channel'}
|
||||
isNull: ${entityType !== 'network'}
|
||||
}
|
||||
}
|
||||
{
|
||||
@@ -96,7 +96,7 @@ function initEntitiesActions(store, router) {
|
||||
}
|
||||
}
|
||||
]
|
||||
effectiveDate: {
|
||||
date: {
|
||||
lessThan: $before,
|
||||
greaterThan: $after
|
||||
}
|
||||
|
||||
@@ -7,22 +7,22 @@ const dateRanges = {
|
||||
latest: () => ({
|
||||
after: '1900-01-01',
|
||||
before: dayjs.utc().toDate(),
|
||||
orderBy: ['EFFECTIVE_DATE_DESC'],
|
||||
orderBy: ['DATE_DESC'],
|
||||
}),
|
||||
upcoming: () => ({
|
||||
after: dayjs.utc().toDate(),
|
||||
before: '2100-01-01',
|
||||
orderBy: ['EFFECTIVE_DATE_DESC'],
|
||||
orderBy: ['DATE_DESC'],
|
||||
}),
|
||||
new: () => ({
|
||||
after: '1900-01-01 00:00:00',
|
||||
before: '2100-01-01',
|
||||
orderBy: ['CREATED_AT_DESC', 'EFFECTIVE_DATE_ASC'],
|
||||
orderBy: ['CREATED_AT_DESC', 'DATE_ASC'],
|
||||
}),
|
||||
all: () => ({
|
||||
after: '1900-01-01',
|
||||
before: '2100-01-01',
|
||||
orderBy: ['EFFECTIVE_DATE_DESC'],
|
||||
orderBy: ['DATE_DESC'],
|
||||
}),
|
||||
};
|
||||
|
||||
|
||||
@@ -110,6 +110,8 @@ function initReleasesActions(store, router) {
|
||||
$query: String!
|
||||
$limit:Int = 20
|
||||
$offset:Int = 0
|
||||
$hasAuth: Boolean!
|
||||
$userId: Int
|
||||
) {
|
||||
connection: searchMoviesConnection(
|
||||
query: $query
|
||||
@@ -126,6 +128,8 @@ function initReleasesActions(store, router) {
|
||||
}
|
||||
}
|
||||
`, {
|
||||
hasAuth: !!store.state.auth.user,
|
||||
userId: store.state.auth.user?.id,
|
||||
query,
|
||||
limit,
|
||||
offset: Math.max(0, (pageNumber - 1)) * limit,
|
||||
|
||||
@@ -210,9 +210,15 @@ function initTagsActions(store, _router) {
|
||||
query Tags(
|
||||
$slugs: [String!] = [],
|
||||
$limit: Int = 100
|
||||
$exclude: [String!]
|
||||
) {
|
||||
tags(
|
||||
filter: { slug: { in: $slugs } },
|
||||
filter: {
|
||||
slug: {
|
||||
in: $slugs
|
||||
notIn: $exclude
|
||||
}
|
||||
},
|
||||
first: $limit
|
||||
) {
|
||||
id
|
||||
@@ -257,6 +263,7 @@ function initTagsActions(store, _router) {
|
||||
`, {
|
||||
slugs,
|
||||
limit,
|
||||
exclude: store.state.ui.tagFilter,
|
||||
});
|
||||
|
||||
return tags.map((tag) => curateTag(tag, store.state.ui.sfw));
|
||||
|
||||
@@ -66,10 +66,7 @@ module.exports = {
|
||||
// pornpros
|
||||
'milfhumiliation',
|
||||
'humiliated',
|
||||
'flexiblepositions',
|
||||
'publicviolations',
|
||||
'amateurviolations',
|
||||
'squirtdisgrace',
|
||||
'cumdisgrace',
|
||||
'webcamhackers',
|
||||
'collegeteens',
|
||||
@@ -301,10 +298,6 @@ module.exports = {
|
||||
interval: 1000,
|
||||
concurrency: 1,
|
||||
},
|
||||
'www.realitykings.com': {
|
||||
interval: 1000,
|
||||
concurrency: 1,
|
||||
},
|
||||
'westcoastproductions.com': {
|
||||
interval: 100,
|
||||
concurrency: 1,
|
||||
@@ -323,6 +316,8 @@ module.exports = {
|
||||
},
|
||||
media: {
|
||||
path: './media',
|
||||
maxSize: 1000,
|
||||
quality: 80,
|
||||
thumbnailSize: 320, // width for 16:9 will be exactly 576px
|
||||
thumbnailQuality: 100,
|
||||
lazySize: 90,
|
||||
|
||||
@@ -13,7 +13,12 @@ exports.up = async (knex) => knex.raw(`
|
||||
)
|
||||
|
||||
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;
|
||||
|
||||
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",
|
||||
"version": "1.205.18",
|
||||
"version": "1.209.4",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "traxxx",
|
||||
"version": "1.205.18",
|
||||
"version": "1.209.4",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@casl/ability": "^5.2.2",
|
||||
@@ -57,6 +57,7 @@
|
||||
"mitt": "^3.0.0",
|
||||
"moment": "^2.24.0",
|
||||
"nanoid": "^3.1.30",
|
||||
"node-fetch": "^2.6.7",
|
||||
"object-merge-advanced": "^12.1.0",
|
||||
"object.omit": "^3.0.0",
|
||||
"opn": "^6.0.0",
|
||||
@@ -72,6 +73,7 @@
|
||||
"tippy.js": "^6.3.1",
|
||||
"tough-cookie": "^4.0.0",
|
||||
"tunnel": "0.0.6",
|
||||
"undici": "^4.13.0",
|
||||
"url-pattern": "^1.0.3",
|
||||
"v-tooltip": "^2.0.3",
|
||||
"video.js": "^7.11.4",
|
||||
@@ -11611,14 +11613,22 @@
|
||||
"integrity": "sha512-eazsqzwG2lskuzBqCGPi7Ac2UgOoMz8JVOXVhTvvPDYhthvNpefx8jWD8Np7Gv+2Sz0FlPWZk0nJV0z598Wn8Q=="
|
||||
},
|
||||
"node_modules/node-fetch": {
|
||||
"version": "2.6.5",
|
||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz",
|
||||
"integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==",
|
||||
"version": "2.6.7",
|
||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
|
||||
"integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
|
||||
"dependencies": {
|
||||
"whatwg-url": "^5.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "4.x || >=6.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"encoding": "^0.1.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"encoding": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/node-fetch/node_modules/tr46": {
|
||||
@@ -16346,6 +16356,14 @@
|
||||
"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": {
|
||||
"version": "2.0.0",
|
||||
"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=="
|
||||
},
|
||||
"node-fetch": {
|
||||
"version": "2.6.5",
|
||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz",
|
||||
"integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==",
|
||||
"version": "2.6.7",
|
||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
|
||||
"integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
|
||||
"requires": {
|
||||
"whatwg-url": "^5.0.0"
|
||||
},
|
||||
@@ -30068,6 +30086,11 @@
|
||||
"resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
|
||||
"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": {
|
||||
"version": "2.0.0",
|
||||
"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",
|
||||
"version": "1.205.18",
|
||||
"version": "1.209.4",
|
||||
"description": "All the latest porn releases in one place",
|
||||
"main": "src/app.js",
|
||||
"scripts": {
|
||||
@@ -116,6 +116,7 @@
|
||||
"mitt": "^3.0.0",
|
||||
"moment": "^2.24.0",
|
||||
"nanoid": "^3.1.30",
|
||||
"node-fetch": "^2.6.7",
|
||||
"object-merge-advanced": "^12.1.0",
|
||||
"object.omit": "^3.0.0",
|
||||
"opn": "^6.0.0",
|
||||
@@ -131,6 +132,7 @@
|
||||
"tippy.js": "^6.3.1",
|
||||
"tough-cookie": "^4.0.0",
|
||||
"tunnel": "0.0.6",
|
||||
"undici": "^4.13.0",
|
||||
"url-pattern": "^1.0.3",
|
||||
"v-tooltip": "^2.0.3",
|
||||
"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 |
BIN
public/img/logos/mofos/lazy/favicon_light.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 5.3 KiB |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.3 KiB |