forked from DebaucheryLibrarian/traxxx
Switched to tabs. Adding missing actor entries when scraping actors, with batch ID.
This commit is contained in:
@@ -1,59 +1,61 @@
|
||||
import { graphql, get } from '../api';
|
||||
import {
|
||||
releasePosterFragment,
|
||||
releaseActorsFragment,
|
||||
releaseTagsFragment,
|
||||
releasePosterFragment,
|
||||
releaseActorsFragment,
|
||||
releaseTagsFragment,
|
||||
} from '../fragments';
|
||||
import { curateRelease } from '../curate';
|
||||
import getDateRange from '../get-date-range';
|
||||
|
||||
function curateActor(actor) {
|
||||
if (!actor) {
|
||||
return null;
|
||||
}
|
||||
if (!actor) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const curatedActor = {
|
||||
...actor,
|
||||
height: actor.heightMetric && {
|
||||
metric: actor.heightMetric,
|
||||
imperial: actor.heightImperial,
|
||||
},
|
||||
weight: actor.weightMetric && {
|
||||
metric: actor.weightMetric,
|
||||
imperial: actor.weightImperial,
|
||||
},
|
||||
origin: actor.birthCountry && {
|
||||
city: actor.birthCity,
|
||||
state: actor.birthState,
|
||||
country: actor.birthCountry,
|
||||
},
|
||||
residence: actor.residenceCountry && {
|
||||
city: actor.residenceCity,
|
||||
state: actor.residenceState,
|
||||
country: actor.residenceCountry,
|
||||
},
|
||||
};
|
||||
const curatedActor = {
|
||||
...actor,
|
||||
height: actor.heightMetric && {
|
||||
metric: actor.heightMetric,
|
||||
imperial: actor.heightImperial,
|
||||
},
|
||||
weight: actor.weightMetric && {
|
||||
metric: actor.weightMetric,
|
||||
imperial: actor.weightImperial,
|
||||
},
|
||||
origin: actor.birthCountry && {
|
||||
city: actor.birthCity,
|
||||
state: actor.birthState,
|
||||
country: actor.birthCountry,
|
||||
},
|
||||
residence: actor.residenceCountry && {
|
||||
city: actor.residenceCity,
|
||||
state: actor.residenceState,
|
||||
country: actor.residenceCountry,
|
||||
},
|
||||
scrapedAt: new Date(actor.createdAt),
|
||||
updatedAt: new Date(actor.updatedAt),
|
||||
};
|
||||
|
||||
if (actor.avatar) {
|
||||
curatedActor.avatar = actor.avatar.media;
|
||||
}
|
||||
if (actor.avatar) {
|
||||
curatedActor.avatar = actor.avatar.media;
|
||||
}
|
||||
|
||||
if (actor.releases) {
|
||||
curatedActor.releases = actor.releases.map(release => curateRelease(release.release));
|
||||
}
|
||||
if (actor.releases) {
|
||||
curatedActor.releases = actor.releases.map(release => curateRelease(release.release));
|
||||
}
|
||||
|
||||
if (actor.photos) {
|
||||
curatedActor.photos = actor.photos.map(photo => photo.media);
|
||||
}
|
||||
if (actor.photos) {
|
||||
curatedActor.photos = actor.photos.map(photo => photo.media);
|
||||
}
|
||||
|
||||
return curatedActor;
|
||||
return curatedActor;
|
||||
}
|
||||
|
||||
function initActorActions(store, _router) {
|
||||
async function fetchActorBySlug({ _commit }, { actorSlug, limit = 100, range = 'latest' }) {
|
||||
const { before, after, orderBy } = getDateRange(range);
|
||||
async function fetchActorBySlug({ _commit }, { actorSlug, limit = 100, range = 'latest' }) {
|
||||
const { before, after, orderBy } = getDateRange(range);
|
||||
|
||||
const { actors: [actor] } = await graphql(`
|
||||
const { actors: [actor] } = await graphql(`
|
||||
query Actor(
|
||||
$actorSlug: String!
|
||||
$limit:Int = 1000,
|
||||
@@ -90,6 +92,8 @@ function initActorActions(store, _router) {
|
||||
tattoos
|
||||
piercings
|
||||
description
|
||||
createdAt
|
||||
updatedAt
|
||||
network {
|
||||
id
|
||||
name
|
||||
@@ -184,27 +188,27 @@ function initActorActions(store, _router) {
|
||||
}
|
||||
}
|
||||
`, {
|
||||
actorSlug,
|
||||
limit,
|
||||
after,
|
||||
before,
|
||||
orderBy: orderBy === 'DATE_DESC' ? 'RELEASE_BY_RELEASE_ID__DATE_DESC' : 'RELEASE_BY_RELEASE_ID__DATE_ASC',
|
||||
exclude: store.state.ui.filter,
|
||||
});
|
||||
actorSlug,
|
||||
limit,
|
||||
after,
|
||||
before,
|
||||
orderBy: orderBy === 'DATE_DESC' ? 'RELEASE_BY_RELEASE_ID__DATE_DESC' : 'RELEASE_BY_RELEASE_ID__DATE_ASC',
|
||||
exclude: store.state.ui.filter,
|
||||
});
|
||||
|
||||
return curateActor(actor);
|
||||
}
|
||||
return curateActor(actor);
|
||||
}
|
||||
|
||||
async function fetchActors({ _commit }, {
|
||||
limit = 100,
|
||||
letter,
|
||||
gender,
|
||||
}) {
|
||||
const genderFilter = gender === null
|
||||
? 'isNull: true'
|
||||
: `equalTo: "${gender}"`;
|
||||
async function fetchActors({ _commit }, {
|
||||
limit = 100,
|
||||
letter,
|
||||
gender,
|
||||
}) {
|
||||
const genderFilter = gender === null
|
||||
? 'isNull: true'
|
||||
: `equalTo: "${gender}"`;
|
||||
|
||||
const { actors } = await graphql(`
|
||||
const { actors } = await graphql(`
|
||||
query Actors(
|
||||
$limit: Int,
|
||||
$letter: String! = "",
|
||||
@@ -249,28 +253,28 @@ function initActorActions(store, _router) {
|
||||
}
|
||||
}
|
||||
`, {
|
||||
limit,
|
||||
letter,
|
||||
});
|
||||
limit,
|
||||
letter,
|
||||
});
|
||||
|
||||
return actors.map(actor => curateActor(actor));
|
||||
}
|
||||
return actors.map(actor => curateActor(actor));
|
||||
}
|
||||
|
||||
async function fetchActorReleases({ _commit }, actorId) {
|
||||
const releases = await get(`/actors/${actorId}/releases`, {
|
||||
filter: store.state.ui.filter,
|
||||
after: store.getters.after,
|
||||
before: store.getters.before,
|
||||
});
|
||||
async function fetchActorReleases({ _commit }, actorId) {
|
||||
const releases = await get(`/actors/${actorId}/releases`, {
|
||||
filter: store.state.ui.filter,
|
||||
after: store.getters.after,
|
||||
before: store.getters.before,
|
||||
});
|
||||
|
||||
return releases;
|
||||
}
|
||||
return releases;
|
||||
}
|
||||
|
||||
return {
|
||||
fetchActorBySlug,
|
||||
fetchActors,
|
||||
fetchActorReleases,
|
||||
};
|
||||
return {
|
||||
fetchActorBySlug,
|
||||
fetchActors,
|
||||
fetchActorReleases,
|
||||
};
|
||||
}
|
||||
|
||||
export default initActorActions;
|
||||
|
||||
@@ -3,11 +3,11 @@ import mutations from './mutations';
|
||||
import actions from './actions';
|
||||
|
||||
function initActorsStore(store, router) {
|
||||
return {
|
||||
state,
|
||||
mutations,
|
||||
actions: actions(store, router),
|
||||
};
|
||||
return {
|
||||
state,
|
||||
mutations,
|
||||
actions: actions(store, router),
|
||||
};
|
||||
}
|
||||
|
||||
export default initActorsStore;
|
||||
|
||||
@@ -1,71 +1,71 @@
|
||||
import config from 'config';
|
||||
|
||||
async function get(endpoint, query = {}) {
|
||||
const curatedQuery = Object.entries(query).reduce((acc, [key, value]) => (value ? { ...acc, [key]: value } : acc), {}); // remove empty values
|
||||
const q = new URLSearchParams(curatedQuery).toString();
|
||||
const curatedQuery = Object.entries(query).reduce((acc, [key, value]) => (value ? { ...acc, [key]: value } : acc), {}); // remove empty values
|
||||
const q = new URLSearchParams(curatedQuery).toString();
|
||||
|
||||
const res = await fetch(`${config.api.url}${endpoint}?${q}`, {
|
||||
method: 'GET',
|
||||
mode: 'cors',
|
||||
credentials: 'same-origin',
|
||||
});
|
||||
const res = await fetch(`${config.api.url}${endpoint}?${q}`, {
|
||||
method: 'GET',
|
||||
mode: 'cors',
|
||||
credentials: 'same-origin',
|
||||
});
|
||||
|
||||
if (res.ok) {
|
||||
return res.json();
|
||||
}
|
||||
if (res.ok) {
|
||||
return res.json();
|
||||
}
|
||||
|
||||
const errorMsg = await res.text();
|
||||
const errorMsg = await res.text();
|
||||
|
||||
throw new Error(errorMsg);
|
||||
throw new Error(errorMsg);
|
||||
}
|
||||
|
||||
async function post(endpoint, data) {
|
||||
const res = await fetch(`${config.api.url}${endpoint}`, {
|
||||
method: 'POST',
|
||||
mode: 'cors',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
credentials: 'same-origin',
|
||||
body: JSON.stringify(data),
|
||||
});
|
||||
const res = await fetch(`${config.api.url}${endpoint}`, {
|
||||
method: 'POST',
|
||||
mode: 'cors',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
credentials: 'same-origin',
|
||||
body: JSON.stringify(data),
|
||||
});
|
||||
|
||||
if (res.ok) {
|
||||
return res.json();
|
||||
}
|
||||
if (res.ok) {
|
||||
return res.json();
|
||||
}
|
||||
|
||||
const errorMsg = await res.text();
|
||||
const errorMsg = await res.text();
|
||||
|
||||
throw new Error(errorMsg);
|
||||
throw new Error(errorMsg);
|
||||
}
|
||||
|
||||
async function graphql(query, variables = null) {
|
||||
const res = await fetch('/graphql', {
|
||||
method: 'POST',
|
||||
mode: 'cors',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
credentials: 'same-origin',
|
||||
body: JSON.stringify({
|
||||
query,
|
||||
variables,
|
||||
}),
|
||||
});
|
||||
const res = await fetch('/graphql', {
|
||||
method: 'POST',
|
||||
mode: 'cors',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
credentials: 'same-origin',
|
||||
body: JSON.stringify({
|
||||
query,
|
||||
variables,
|
||||
}),
|
||||
});
|
||||
|
||||
if (res.ok) {
|
||||
const { data } = await res.json();
|
||||
if (res.ok) {
|
||||
const { data } = await res.json();
|
||||
|
||||
return data;
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
const errorMsg = await res.text();
|
||||
const errorMsg = await res.text();
|
||||
|
||||
throw new Error(errorMsg);
|
||||
throw new Error(errorMsg);
|
||||
}
|
||||
|
||||
export {
|
||||
get,
|
||||
post,
|
||||
graphql,
|
||||
get,
|
||||
post,
|
||||
graphql,
|
||||
};
|
||||
|
||||
@@ -3,11 +3,11 @@ import mutations from './mutations';
|
||||
import actions from './actions';
|
||||
|
||||
function initAuthStore(store, router) {
|
||||
return {
|
||||
state,
|
||||
mutations,
|
||||
actions: actions(store, router),
|
||||
};
|
||||
return {
|
||||
state,
|
||||
mutations,
|
||||
actions: actions(store, router),
|
||||
};
|
||||
}
|
||||
|
||||
export default initAuthStore;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
export default {
|
||||
authenticated: false,
|
||||
user: null,
|
||||
authenticated: false,
|
||||
user: null,
|
||||
};
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
export default {
|
||||
api: {
|
||||
url: `${window.location.origin}/api`,
|
||||
},
|
||||
filename: {
|
||||
pattern: '{site.name} - {title} ({actors.$n.name}, {date} {shootId})',
|
||||
separator: ', ',
|
||||
date: 'DD-MM-YYYY',
|
||||
},
|
||||
api: {
|
||||
url: `${window.location.origin}/api`,
|
||||
},
|
||||
filename: {
|
||||
pattern: '{site.name} - {title} ({actors.$n.name}, {date} {shootId})',
|
||||
separator: ', ',
|
||||
date: 'DD-MM-YYYY',
|
||||
},
|
||||
};
|
||||
|
||||
@@ -1,94 +1,94 @@
|
||||
import dayjs from 'dayjs';
|
||||
|
||||
function curateActor(actor, release) {
|
||||
const curatedActor = {
|
||||
...actor,
|
||||
origin: actor.originCountry && {
|
||||
country: actor.originCountry,
|
||||
},
|
||||
};
|
||||
const curatedActor = {
|
||||
...actor,
|
||||
origin: actor.originCountry && {
|
||||
country: actor.originCountry,
|
||||
},
|
||||
};
|
||||
|
||||
if (actor.avatar) curatedActor.avatar = actor.avatar.media;
|
||||
if (actor.avatar) curatedActor.avatar = actor.avatar.media;
|
||||
|
||||
if (release && release.date && curatedActor.birthdate) {
|
||||
curatedActor.ageThen = dayjs(release.date).diff(actor.birthdate, 'year');
|
||||
}
|
||||
if (release && release.date && curatedActor.birthdate) {
|
||||
curatedActor.ageThen = dayjs(release.date).diff(actor.birthdate, 'year');
|
||||
}
|
||||
|
||||
return curatedActor;
|
||||
return curatedActor;
|
||||
}
|
||||
|
||||
function curateRelease(release) {
|
||||
const curatedRelease = {
|
||||
...release,
|
||||
actors: [],
|
||||
poster: release.poster && release.poster.media,
|
||||
tags: release.tags ? release.tags.map(({ tag }) => tag) : [],
|
||||
};
|
||||
const curatedRelease = {
|
||||
...release,
|
||||
actors: [],
|
||||
poster: release.poster && release.poster.media,
|
||||
tags: release.tags ? release.tags.map(({ tag }) => tag) : [],
|
||||
};
|
||||
|
||||
if (release.site) curatedRelease.network = release.site.network;
|
||||
if (release.scenes) curatedRelease.scenes = release.scenes.map(({ scene }) => curateRelease(scene));
|
||||
if (release.movies) curatedRelease.movies = release.movies.map(({ movie }) => curateRelease(movie));
|
||||
if (release.photos) curatedRelease.photos = release.photos.map(({ media }) => media);
|
||||
if (release.covers) curatedRelease.covers = release.covers.map(({ media }) => media);
|
||||
if (release.trailer) curatedRelease.trailer = release.trailer.media;
|
||||
if (release.teaser) curatedRelease.teaser = release.teaser.media;
|
||||
if (release.actors) curatedRelease.actors = release.actors.map(({ actor }) => curateActor(actor, curatedRelease));
|
||||
if (release.movieTags && release.movieTags.length > 0) curatedRelease.tags = release.movieTags.map(({ tag }) => tag);
|
||||
if (release.movieActors && release.movieActors.length > 0) curatedRelease.actors = release.movieActors.map(({ actor }) => curateActor(actor, curatedRelease));
|
||||
if (release.site) curatedRelease.network = release.site.network;
|
||||
if (release.scenes) curatedRelease.scenes = release.scenes.map(({ scene }) => curateRelease(scene));
|
||||
if (release.movies) curatedRelease.movies = release.movies.map(({ movie }) => curateRelease(movie));
|
||||
if (release.photos) curatedRelease.photos = release.photos.map(({ media }) => media);
|
||||
if (release.covers) curatedRelease.covers = release.covers.map(({ media }) => media);
|
||||
if (release.trailer) curatedRelease.trailer = release.trailer.media;
|
||||
if (release.teaser) curatedRelease.teaser = release.teaser.media;
|
||||
if (release.actors) curatedRelease.actors = release.actors.map(({ actor }) => curateActor(actor, curatedRelease));
|
||||
if (release.movieTags && release.movieTags.length > 0) curatedRelease.tags = release.movieTags.map(({ tag }) => tag);
|
||||
if (release.movieActors && release.movieActors.length > 0) curatedRelease.actors = release.movieActors.map(({ actor }) => curateActor(actor, curatedRelease));
|
||||
|
||||
return curatedRelease;
|
||||
return curatedRelease;
|
||||
}
|
||||
|
||||
function curateSite(site, network) {
|
||||
const curatedSite = {
|
||||
id: site.id,
|
||||
name: site.name,
|
||||
slug: site.slug,
|
||||
url: site.url,
|
||||
independent: site.independent,
|
||||
};
|
||||
const curatedSite = {
|
||||
id: site.id,
|
||||
name: site.name,
|
||||
slug: site.slug,
|
||||
url: site.url,
|
||||
independent: site.independent,
|
||||
};
|
||||
|
||||
if (site.releases) curatedSite.releases = site.releases.map(release => curateRelease(release));
|
||||
if (site.network || network) curatedSite.network = site.network || network;
|
||||
if (site.tags) curatedSite.tags = site.tags.map(({ tag }) => tag);
|
||||
if (site.releases) curatedSite.releases = site.releases.map(release => curateRelease(release));
|
||||
if (site.network || network) curatedSite.network = site.network || network;
|
||||
if (site.tags) curatedSite.tags = site.tags.map(({ tag }) => tag);
|
||||
|
||||
return curatedSite;
|
||||
return curatedSite;
|
||||
}
|
||||
|
||||
function curateNetwork(network, releases) {
|
||||
const curatedNetwork = {
|
||||
id: network.id,
|
||||
name: network.name,
|
||||
slug: network.slug,
|
||||
url: network.url,
|
||||
networks: [],
|
||||
};
|
||||
const curatedNetwork = {
|
||||
id: network.id,
|
||||
name: network.name,
|
||||
slug: network.slug,
|
||||
url: network.url,
|
||||
networks: [],
|
||||
};
|
||||
|
||||
if (network.parent) curatedNetwork.parent = curateNetwork(network.parent);
|
||||
if (network.sites) curatedNetwork.sites = network.sites.map(site => curateSite(site, curatedNetwork));
|
||||
if (network.networks) curatedNetwork.networks = network.networks.map(subNetwork => curateNetwork(subNetwork));
|
||||
if (network.studios) curatedNetwork.studios = network.studios;
|
||||
if (releases) curatedNetwork.releases = releases.map(release => curateRelease(release));
|
||||
if (network.parent) curatedNetwork.parent = curateNetwork(network.parent);
|
||||
if (network.sites) curatedNetwork.sites = network.sites.map(site => curateSite(site, curatedNetwork));
|
||||
if (network.networks) curatedNetwork.networks = network.networks.map(subNetwork => curateNetwork(subNetwork));
|
||||
if (network.studios) curatedNetwork.studios = network.studios;
|
||||
if (releases) curatedNetwork.releases = releases.map(release => curateRelease(release));
|
||||
|
||||
return curatedNetwork;
|
||||
return curatedNetwork;
|
||||
}
|
||||
|
||||
function curateTag(tag) {
|
||||
const curatedTag = {
|
||||
...tag,
|
||||
};
|
||||
const curatedTag = {
|
||||
...tag,
|
||||
};
|
||||
|
||||
if (tag.releases) curatedTag.releases = tag.releases.map(({ release }) => curateRelease(release));
|
||||
if (tag.photos) curatedTag.photos = tag.photos.map(({ media }) => media);
|
||||
if (tag.poster) curatedTag.poster = tag.poster.media;
|
||||
if (tag.releases) curatedTag.releases = tag.releases.map(({ release }) => curateRelease(release));
|
||||
if (tag.photos) curatedTag.photos = tag.photos.map(({ media }) => media);
|
||||
if (tag.poster) curatedTag.poster = tag.poster.media;
|
||||
|
||||
return curatedTag;
|
||||
return curatedTag;
|
||||
}
|
||||
|
||||
export {
|
||||
curateActor,
|
||||
curateRelease,
|
||||
curateSite,
|
||||
curateNetwork,
|
||||
curateTag,
|
||||
curateActor,
|
||||
curateRelease,
|
||||
curateSite,
|
||||
curateNetwork,
|
||||
curateTag,
|
||||
};
|
||||
|
||||
@@ -278,14 +278,14 @@ const releaseFragment = `
|
||||
`;
|
||||
|
||||
export {
|
||||
releaseActorsFragment,
|
||||
releaseFields,
|
||||
releaseTagsFragment,
|
||||
releasePosterFragment,
|
||||
releasePhotosFragment,
|
||||
releaseTrailerFragment,
|
||||
releasesFragment,
|
||||
releaseFragment,
|
||||
siteFragment,
|
||||
sitesFragment,
|
||||
releaseActorsFragment,
|
||||
releaseFields,
|
||||
releaseTagsFragment,
|
||||
releasePosterFragment,
|
||||
releasePhotosFragment,
|
||||
releaseTrailerFragment,
|
||||
releasesFragment,
|
||||
releaseFragment,
|
||||
siteFragment,
|
||||
sitesFragment,
|
||||
};
|
||||
|
||||
@@ -1,30 +1,30 @@
|
||||
import dayjs from 'dayjs';
|
||||
|
||||
const dateRanges = {
|
||||
latest: () => ({
|
||||
after: '1900-01-01',
|
||||
before: dayjs(new Date()).add(1, 'day').format('YYYY-MM-DD'),
|
||||
orderBy: 'DATE_DESC',
|
||||
}),
|
||||
upcoming: () => ({
|
||||
after: dayjs(new Date()).format('YYYY-MM-DD'),
|
||||
before: '2100-01-01',
|
||||
orderBy: 'DATE_ASC',
|
||||
}),
|
||||
new: () => ({
|
||||
after: '1900-01-01',
|
||||
before: '2100-01-01',
|
||||
orderBy: 'CREATED_AT_DESC',
|
||||
}),
|
||||
all: () => ({
|
||||
after: '1900-01-01',
|
||||
before: '2100-01-01',
|
||||
orderBy: 'DATE_DESC',
|
||||
}),
|
||||
latest: () => ({
|
||||
after: '1900-01-01',
|
||||
before: dayjs(new Date()).add(1, 'day').format('YYYY-MM-DD'),
|
||||
orderBy: 'DATE_DESC',
|
||||
}),
|
||||
upcoming: () => ({
|
||||
after: dayjs(new Date()).format('YYYY-MM-DD'),
|
||||
before: '2100-01-01',
|
||||
orderBy: 'DATE_ASC',
|
||||
}),
|
||||
new: () => ({
|
||||
after: '1900-01-01',
|
||||
before: '2100-01-01',
|
||||
orderBy: 'CREATED_AT_DESC',
|
||||
}),
|
||||
all: () => ({
|
||||
after: '1900-01-01',
|
||||
before: '2100-01-01',
|
||||
orderBy: 'DATE_DESC',
|
||||
}),
|
||||
};
|
||||
|
||||
function getDateRange(range) {
|
||||
return dateRanges[range]();
|
||||
return dateRanges[range]();
|
||||
}
|
||||
|
||||
export default getDateRange;
|
||||
|
||||
@@ -14,48 +14,48 @@ import Container from '../components/container/container.vue';
|
||||
import Icon from '../components/icon/icon.vue';
|
||||
|
||||
function init() {
|
||||
const store = initStore(router);
|
||||
const store = initStore(router);
|
||||
|
||||
initUiObservers(store, router);
|
||||
initUiObservers(store, router);
|
||||
|
||||
if (window.env.sfw) {
|
||||
store.dispatch('setSfw', true);
|
||||
}
|
||||
if (window.env.sfw) {
|
||||
store.dispatch('setSfw', true);
|
||||
}
|
||||
|
||||
Vue.mixin({
|
||||
components: {
|
||||
Icon,
|
||||
},
|
||||
watch: {
|
||||
pageTitle(title) {
|
||||
if (title) {
|
||||
document.title = `traxxx - ${title}`;
|
||||
return;
|
||||
}
|
||||
Vue.mixin({
|
||||
components: {
|
||||
Icon,
|
||||
},
|
||||
watch: {
|
||||
pageTitle(title) {
|
||||
if (title) {
|
||||
document.title = `traxxx - ${title}`;
|
||||
return;
|
||||
}
|
||||
|
||||
document.title = 'traxxx';
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
formatDate: (date, format) => dayjs(date).format(format),
|
||||
isAfter: (dateA, dateB) => dayjs(dateA).isAfter(dateB),
|
||||
isBefore: (dateA, dateB) => dayjs(dateA).isBefore(dateB),
|
||||
},
|
||||
});
|
||||
document.title = 'traxxx';
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
formatDate: (date, format) => dayjs(date).format(format),
|
||||
isAfter: (dateA, dateB) => dayjs(dateA).isAfter(dateB),
|
||||
isBefore: (dateA, dateB) => dayjs(dateA).isBefore(dateB),
|
||||
},
|
||||
});
|
||||
|
||||
Vue.use(VTooltip);
|
||||
Vue.use(VueLazyLoad, {
|
||||
throttleWait: 0,
|
||||
});
|
||||
Vue.use(VTooltip);
|
||||
Vue.use(VueLazyLoad, {
|
||||
throttleWait: 0,
|
||||
});
|
||||
|
||||
new Vue({ // eslint-disable-line no-new
|
||||
el: '#container',
|
||||
store,
|
||||
router,
|
||||
render(createElement) {
|
||||
return createElement(Container);
|
||||
},
|
||||
});
|
||||
new Vue({ // eslint-disable-line no-new
|
||||
el: '#container',
|
||||
store,
|
||||
router,
|
||||
render(createElement) {
|
||||
return createElement(Container);
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
init();
|
||||
|
||||
@@ -4,10 +4,10 @@ import { curateNetwork } from '../curate';
|
||||
import getDateRange from '../get-date-range';
|
||||
|
||||
function initNetworksActions(store, _router) {
|
||||
async function fetchNetworkBySlug({ _commit }, { networkSlug, limit = 100, range = 'latest' }) {
|
||||
const { before, after, orderBy } = getDateRange(range);
|
||||
async function fetchNetworkBySlug({ _commit }, { networkSlug, limit = 100, range = 'latest' }) {
|
||||
const { before, after, orderBy } = getDateRange(range);
|
||||
|
||||
const { network, releases } = await graphql(`
|
||||
const { network, releases } = await graphql(`
|
||||
query Network(
|
||||
$networkSlug: String!
|
||||
$limit:Int = 1000,
|
||||
@@ -107,21 +107,21 @@ function initNetworksActions(store, _router) {
|
||||
}
|
||||
}
|
||||
`, {
|
||||
networkSlug,
|
||||
limit,
|
||||
after,
|
||||
before,
|
||||
orderBy,
|
||||
afterTime: store.getters.after,
|
||||
beforeTime: store.getters.before,
|
||||
exclude: store.state.ui.filter,
|
||||
});
|
||||
networkSlug,
|
||||
limit,
|
||||
after,
|
||||
before,
|
||||
orderBy,
|
||||
afterTime: store.getters.after,
|
||||
beforeTime: store.getters.before,
|
||||
exclude: store.state.ui.filter,
|
||||
});
|
||||
|
||||
return curateNetwork(network, releases);
|
||||
}
|
||||
return curateNetwork(network, releases);
|
||||
}
|
||||
|
||||
async function fetchNetworks({ _commit }) {
|
||||
const { networks } = await graphql(`
|
||||
async function fetchNetworks({ _commit }) {
|
||||
const { networks } = await graphql(`
|
||||
query Networks {
|
||||
networks(orderBy: NAME_ASC) {
|
||||
id
|
||||
@@ -133,13 +133,13 @@ function initNetworksActions(store, _router) {
|
||||
}
|
||||
`);
|
||||
|
||||
return networks.map(network => curateNetwork(network));
|
||||
}
|
||||
return networks.map(network => curateNetwork(network));
|
||||
}
|
||||
|
||||
return {
|
||||
fetchNetworkBySlug,
|
||||
fetchNetworks,
|
||||
};
|
||||
return {
|
||||
fetchNetworkBySlug,
|
||||
fetchNetworks,
|
||||
};
|
||||
}
|
||||
|
||||
export default initNetworksActions;
|
||||
|
||||
@@ -3,11 +3,11 @@ import mutations from './mutations';
|
||||
import actions from './actions';
|
||||
|
||||
function initNetworksStore(store, router) {
|
||||
return {
|
||||
state,
|
||||
mutations,
|
||||
actions: actions(store, router),
|
||||
};
|
||||
return {
|
||||
state,
|
||||
mutations,
|
||||
actions: actions(store, router),
|
||||
};
|
||||
}
|
||||
|
||||
export default initNetworksStore;
|
||||
|
||||
@@ -4,10 +4,10 @@ import { curateRelease } from '../curate';
|
||||
import getDateRange from '../get-date-range';
|
||||
|
||||
function initReleasesActions(store, _router) {
|
||||
async function fetchReleases({ _commit }, { limit = 100, range = 'latest' }) {
|
||||
const { before, after, orderBy } = getDateRange(range);
|
||||
async function fetchReleases({ _commit }, { limit = 100, range = 'latest' }) {
|
||||
const { before, after, orderBy } = getDateRange(range);
|
||||
|
||||
const { releases } = await graphql(`
|
||||
const { releases } = await graphql(`
|
||||
query Releases(
|
||||
$limit:Int = 1000,
|
||||
$after:Date = "1900-01-01",
|
||||
@@ -18,18 +18,18 @@ function initReleasesActions(store, _router) {
|
||||
${releasesFragment}
|
||||
}
|
||||
`, {
|
||||
limit,
|
||||
after,
|
||||
before,
|
||||
orderBy,
|
||||
exclude: store.state.ui.filter,
|
||||
});
|
||||
limit,
|
||||
after,
|
||||
before,
|
||||
orderBy,
|
||||
exclude: store.state.ui.filter,
|
||||
});
|
||||
|
||||
return releases.map(release => curateRelease(release));
|
||||
}
|
||||
return releases.map(release => curateRelease(release));
|
||||
}
|
||||
|
||||
async function searchReleases({ _commit }, { query, limit = 20 }) {
|
||||
const res = await graphql(`
|
||||
async function searchReleases({ _commit }, { query, limit = 20 }) {
|
||||
const res = await graphql(`
|
||||
query SearchReleases(
|
||||
$query: String!
|
||||
$limit: Int = 20
|
||||
@@ -88,34 +88,34 @@ function initReleasesActions(store, _router) {
|
||||
}
|
||||
}
|
||||
`, {
|
||||
query,
|
||||
limit,
|
||||
});
|
||||
query,
|
||||
limit,
|
||||
});
|
||||
|
||||
if (!res) return [];
|
||||
if (!res) return [];
|
||||
|
||||
return res.releases.map(release => curateRelease(release));
|
||||
}
|
||||
return res.releases.map(release => curateRelease(release));
|
||||
}
|
||||
|
||||
async function fetchReleaseById({ _commit }, releaseId) {
|
||||
// const release = await get(`/releases/${releaseId}`);
|
||||
async function fetchReleaseById({ _commit }, releaseId) {
|
||||
// const release = await get(`/releases/${releaseId}`);
|
||||
|
||||
const { release } = await graphql(`
|
||||
const { release } = await graphql(`
|
||||
query Release($releaseId:Int!) {
|
||||
${releaseFragment}
|
||||
}
|
||||
`, {
|
||||
releaseId: Number(releaseId),
|
||||
});
|
||||
releaseId: Number(releaseId),
|
||||
});
|
||||
|
||||
return curateRelease(release);
|
||||
}
|
||||
return curateRelease(release);
|
||||
}
|
||||
|
||||
return {
|
||||
fetchReleases,
|
||||
fetchReleaseById,
|
||||
searchReleases,
|
||||
};
|
||||
return {
|
||||
fetchReleases,
|
||||
fetchReleaseById,
|
||||
searchReleases,
|
||||
};
|
||||
}
|
||||
|
||||
export default initReleasesActions;
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
import Vue from 'vue';
|
||||
|
||||
function setCache(state, { target, releases }) {
|
||||
Vue.set(state.cache, target, releases);
|
||||
Vue.set(state.cache, target, releases);
|
||||
}
|
||||
|
||||
function deleteCache(state, target) {
|
||||
Vue.delete(state.cache, target);
|
||||
Vue.delete(state.cache, target);
|
||||
}
|
||||
|
||||
export default {
|
||||
setCache,
|
||||
deleteCache,
|
||||
setCache,
|
||||
deleteCache,
|
||||
};
|
||||
|
||||
@@ -3,11 +3,11 @@ import mutations from './mutations';
|
||||
import actions from './actions';
|
||||
|
||||
function initReleasesStore(store, router) {
|
||||
return {
|
||||
state,
|
||||
mutations,
|
||||
actions: actions(store, router),
|
||||
};
|
||||
return {
|
||||
state,
|
||||
mutations,
|
||||
actions: actions(store, router),
|
||||
};
|
||||
}
|
||||
|
||||
export default initReleasesStore;
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
export default {
|
||||
cache: {},
|
||||
cache: {},
|
||||
};
|
||||
|
||||
@@ -16,139 +16,139 @@ import NotFound from '../components/errors/404.vue';
|
||||
Vue.use(VueRouter);
|
||||
|
||||
const routes = [
|
||||
{
|
||||
path: '/',
|
||||
redirect: {
|
||||
name: 'latest',
|
||||
},
|
||||
},
|
||||
{
|
||||
path: '/home',
|
||||
redirect: {
|
||||
name: 'latest',
|
||||
},
|
||||
},
|
||||
{
|
||||
path: '/latest',
|
||||
component: Home,
|
||||
name: 'latest',
|
||||
},
|
||||
{
|
||||
path: '/upcoming',
|
||||
component: Home,
|
||||
name: 'upcoming',
|
||||
},
|
||||
{
|
||||
path: '/new',
|
||||
component: Home,
|
||||
name: 'new',
|
||||
},
|
||||
{
|
||||
path: '/scene/:releaseId/:releaseSlug?',
|
||||
component: Release,
|
||||
name: 'scene',
|
||||
},
|
||||
{
|
||||
path: '/movie/:releaseId/:releaseSlug?',
|
||||
component: Release,
|
||||
name: 'movie',
|
||||
},
|
||||
{
|
||||
path: '/actor/:actorSlug',
|
||||
name: 'actor',
|
||||
redirect: from => ({
|
||||
name: 'actorRange',
|
||||
params: {
|
||||
...from.params,
|
||||
range: 'latest',
|
||||
},
|
||||
}),
|
||||
},
|
||||
{
|
||||
path: '/actor/:actorSlug/:range',
|
||||
component: Actor,
|
||||
name: 'actorRange',
|
||||
},
|
||||
{
|
||||
path: '/site/:siteSlug',
|
||||
component: Site,
|
||||
name: 'site',
|
||||
redirect: from => ({
|
||||
name: 'siteRange',
|
||||
params: {
|
||||
...from.params,
|
||||
range: 'latest',
|
||||
},
|
||||
}),
|
||||
},
|
||||
{
|
||||
path: '/site/:siteSlug/:range',
|
||||
component: Site,
|
||||
name: 'siteRange',
|
||||
},
|
||||
{
|
||||
path: '/network/:networkSlug',
|
||||
component: Network,
|
||||
name: 'network',
|
||||
redirect: from => ({
|
||||
name: 'networkRange',
|
||||
params: {
|
||||
...from.params,
|
||||
range: 'latest',
|
||||
},
|
||||
}),
|
||||
},
|
||||
{
|
||||
path: '/network/:networkSlug/:range',
|
||||
component: Network,
|
||||
name: 'networkRange',
|
||||
},
|
||||
{
|
||||
path: '/tag/:tagSlug',
|
||||
component: Tag,
|
||||
name: 'tag',
|
||||
redirect: from => ({
|
||||
name: 'tagRange',
|
||||
params: {
|
||||
...from.params,
|
||||
range: 'latest',
|
||||
},
|
||||
}),
|
||||
},
|
||||
{
|
||||
path: '/tag/:tagSlug/:range',
|
||||
component: Tag,
|
||||
name: 'tagRange',
|
||||
},
|
||||
{
|
||||
path: '/actors/:gender?/:letter?',
|
||||
component: Actors,
|
||||
name: 'actors',
|
||||
},
|
||||
{
|
||||
path: '/networks',
|
||||
component: Networks,
|
||||
name: 'networks',
|
||||
},
|
||||
{
|
||||
path: '/tags',
|
||||
component: Tags,
|
||||
name: 'tags',
|
||||
},
|
||||
{
|
||||
path: '/search',
|
||||
component: Search,
|
||||
name: 'search',
|
||||
},
|
||||
{
|
||||
path: '*',
|
||||
component: NotFound,
|
||||
},
|
||||
{
|
||||
path: '/',
|
||||
redirect: {
|
||||
name: 'latest',
|
||||
},
|
||||
},
|
||||
{
|
||||
path: '/home',
|
||||
redirect: {
|
||||
name: 'latest',
|
||||
},
|
||||
},
|
||||
{
|
||||
path: '/latest',
|
||||
component: Home,
|
||||
name: 'latest',
|
||||
},
|
||||
{
|
||||
path: '/upcoming',
|
||||
component: Home,
|
||||
name: 'upcoming',
|
||||
},
|
||||
{
|
||||
path: '/new',
|
||||
component: Home,
|
||||
name: 'new',
|
||||
},
|
||||
{
|
||||
path: '/scene/:releaseId/:releaseSlug?',
|
||||
component: Release,
|
||||
name: 'scene',
|
||||
},
|
||||
{
|
||||
path: '/movie/:releaseId/:releaseSlug?',
|
||||
component: Release,
|
||||
name: 'movie',
|
||||
},
|
||||
{
|
||||
path: '/actor/:actorSlug',
|
||||
name: 'actor',
|
||||
redirect: from => ({
|
||||
name: 'actorRange',
|
||||
params: {
|
||||
...from.params,
|
||||
range: 'latest',
|
||||
},
|
||||
}),
|
||||
},
|
||||
{
|
||||
path: '/actor/:actorSlug/:range',
|
||||
component: Actor,
|
||||
name: 'actorRange',
|
||||
},
|
||||
{
|
||||
path: '/site/:siteSlug',
|
||||
component: Site,
|
||||
name: 'site',
|
||||
redirect: from => ({
|
||||
name: 'siteRange',
|
||||
params: {
|
||||
...from.params,
|
||||
range: 'latest',
|
||||
},
|
||||
}),
|
||||
},
|
||||
{
|
||||
path: '/site/:siteSlug/:range',
|
||||
component: Site,
|
||||
name: 'siteRange',
|
||||
},
|
||||
{
|
||||
path: '/network/:networkSlug',
|
||||
component: Network,
|
||||
name: 'network',
|
||||
redirect: from => ({
|
||||
name: 'networkRange',
|
||||
params: {
|
||||
...from.params,
|
||||
range: 'latest',
|
||||
},
|
||||
}),
|
||||
},
|
||||
{
|
||||
path: '/network/:networkSlug/:range',
|
||||
component: Network,
|
||||
name: 'networkRange',
|
||||
},
|
||||
{
|
||||
path: '/tag/:tagSlug',
|
||||
component: Tag,
|
||||
name: 'tag',
|
||||
redirect: from => ({
|
||||
name: 'tagRange',
|
||||
params: {
|
||||
...from.params,
|
||||
range: 'latest',
|
||||
},
|
||||
}),
|
||||
},
|
||||
{
|
||||
path: '/tag/:tagSlug/:range',
|
||||
component: Tag,
|
||||
name: 'tagRange',
|
||||
},
|
||||
{
|
||||
path: '/actors/:gender?/:letter?',
|
||||
component: Actors,
|
||||
name: 'actors',
|
||||
},
|
||||
{
|
||||
path: '/networks',
|
||||
component: Networks,
|
||||
name: 'networks',
|
||||
},
|
||||
{
|
||||
path: '/tags',
|
||||
component: Tags,
|
||||
name: 'tags',
|
||||
},
|
||||
{
|
||||
path: '/search',
|
||||
component: Search,
|
||||
name: 'search',
|
||||
},
|
||||
{
|
||||
path: '*',
|
||||
component: NotFound,
|
||||
},
|
||||
];
|
||||
|
||||
const router = new VueRouter({
|
||||
mode: 'history',
|
||||
routes,
|
||||
mode: 'history',
|
||||
routes,
|
||||
});
|
||||
|
||||
export default router;
|
||||
|
||||
@@ -4,10 +4,10 @@ import { curateSite } from '../curate';
|
||||
import getDateRange from '../get-date-range';
|
||||
|
||||
function initSitesActions(store, _router) {
|
||||
async function fetchSiteBySlug({ _commit }, { siteSlug, limit = 100, range = 'latest' }) {
|
||||
const { before, after, orderBy } = getDateRange(range);
|
||||
async function fetchSiteBySlug({ _commit }, { siteSlug, limit = 100, range = 'latest' }) {
|
||||
const { before, after, orderBy } = getDateRange(range);
|
||||
|
||||
const { site } = await graphql(`
|
||||
const { site } = await graphql(`
|
||||
query Site(
|
||||
$siteSlug: String!,
|
||||
$limit:Int = 100,
|
||||
@@ -37,20 +37,20 @@ function initSitesActions(store, _router) {
|
||||
}
|
||||
}
|
||||
`, {
|
||||
siteSlug,
|
||||
limit,
|
||||
after,
|
||||
before,
|
||||
orderBy,
|
||||
isNew: store.getters.isNew,
|
||||
exclude: store.state.ui.filter,
|
||||
});
|
||||
siteSlug,
|
||||
limit,
|
||||
after,
|
||||
before,
|
||||
orderBy,
|
||||
isNew: store.getters.isNew,
|
||||
exclude: store.state.ui.filter,
|
||||
});
|
||||
|
||||
return curateSite(site);
|
||||
}
|
||||
return curateSite(site);
|
||||
}
|
||||
|
||||
async function fetchSites({ _commit }, { limit = 100 }) {
|
||||
const { sites } = await graphql(`
|
||||
async function fetchSites({ _commit }, { limit = 100 }) {
|
||||
const { sites } = await graphql(`
|
||||
query Sites(
|
||||
$actorSlug: String!
|
||||
$limit:Int = 100,
|
||||
@@ -64,16 +64,16 @@ function initSitesActions(store, _router) {
|
||||
}
|
||||
}
|
||||
`, {
|
||||
limit,
|
||||
after: store.getters.after,
|
||||
before: store.getters.before,
|
||||
});
|
||||
limit,
|
||||
after: store.getters.after,
|
||||
before: store.getters.before,
|
||||
});
|
||||
|
||||
return sites;
|
||||
}
|
||||
return sites;
|
||||
}
|
||||
|
||||
async function searchSites({ _commit }, { query, limit = 20 }) {
|
||||
const { sites } = await graphql(`
|
||||
async function searchSites({ _commit }, { query, limit = 20 }) {
|
||||
const { sites } = await graphql(`
|
||||
query SearchSites(
|
||||
$query: String!
|
||||
$limit:Int = 20,
|
||||
@@ -93,18 +93,18 @@ function initSitesActions(store, _router) {
|
||||
}
|
||||
}
|
||||
`, {
|
||||
query,
|
||||
limit,
|
||||
});
|
||||
query,
|
||||
limit,
|
||||
});
|
||||
|
||||
return sites;
|
||||
}
|
||||
return sites;
|
||||
}
|
||||
|
||||
return {
|
||||
fetchSiteBySlug,
|
||||
fetchSites,
|
||||
searchSites,
|
||||
};
|
||||
return {
|
||||
fetchSiteBySlug,
|
||||
fetchSites,
|
||||
searchSites,
|
||||
};
|
||||
}
|
||||
|
||||
export default initSitesActions;
|
||||
|
||||
@@ -3,11 +3,11 @@ import mutations from './mutations';
|
||||
import actions from './actions';
|
||||
|
||||
function initSitesStore(store, router) {
|
||||
return {
|
||||
state,
|
||||
mutations,
|
||||
actions: actions(store, router),
|
||||
};
|
||||
return {
|
||||
state,
|
||||
mutations,
|
||||
actions: actions(store, router),
|
||||
};
|
||||
}
|
||||
|
||||
export default initSitesStore;
|
||||
|
||||
@@ -10,19 +10,19 @@ import initActorsStore from './actors/actors';
|
||||
import initTagsStore from './tags/tags';
|
||||
|
||||
function initStore(router) {
|
||||
Vue.use(Vuex);
|
||||
Vue.use(Vuex);
|
||||
|
||||
const store = new Vuex.Store();
|
||||
const store = new Vuex.Store();
|
||||
|
||||
store.registerModule('ui', initUiStore(store, router));
|
||||
store.registerModule('auth', initAuthStore(store, router));
|
||||
store.registerModule('releases', initReleasesStore(store, router));
|
||||
store.registerModule('actors', initActorsStore(store, router));
|
||||
store.registerModule('sites', initSitesStore(store, router));
|
||||
store.registerModule('networks', initNetworksStore(store, router));
|
||||
store.registerModule('tags', initTagsStore(store, router));
|
||||
store.registerModule('ui', initUiStore(store, router));
|
||||
store.registerModule('auth', initAuthStore(store, router));
|
||||
store.registerModule('releases', initReleasesStore(store, router));
|
||||
store.registerModule('actors', initActorsStore(store, router));
|
||||
store.registerModule('sites', initSitesStore(store, router));
|
||||
store.registerModule('networks', initNetworksStore(store, router));
|
||||
store.registerModule('tags', initTagsStore(store, router));
|
||||
|
||||
return store;
|
||||
return store;
|
||||
}
|
||||
|
||||
export default initStore;
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
import { graphql, get } from '../api';
|
||||
import {
|
||||
releaseFields,
|
||||
releaseFields,
|
||||
} from '../fragments';
|
||||
import { curateTag } from '../curate';
|
||||
import getDateRange from '../get-date-range';
|
||||
|
||||
function initTagsActions(store, _router) {
|
||||
async function fetchTagBySlug({ _commit }, { tagSlug, limit = 100, range = 'latest' }) {
|
||||
const { before, after, orderBy } = getDateRange(range);
|
||||
async function fetchTagBySlug({ _commit }, { tagSlug, limit = 100, range = 'latest' }) {
|
||||
const { before, after, orderBy } = getDateRange(range);
|
||||
|
||||
const { tagBySlug } = await graphql(`
|
||||
const { tagBySlug } = await graphql(`
|
||||
query Tag(
|
||||
$tagSlug:String!
|
||||
$limit:Int = 1000,
|
||||
@@ -85,24 +85,24 @@ function initTagsActions(store, _router) {
|
||||
}
|
||||
}
|
||||
`, {
|
||||
tagSlug,
|
||||
limit,
|
||||
after,
|
||||
before,
|
||||
orderBy: orderBy === 'DATE_DESC' ? 'RELEASE_BY_RELEASE_ID__DATE_DESC' : 'RELEASE_BY_RELEASE_ID__DATE_ASC',
|
||||
exclude: store.state.ui.filter,
|
||||
});
|
||||
tagSlug,
|
||||
limit,
|
||||
after,
|
||||
before,
|
||||
orderBy: orderBy === 'DATE_DESC' ? 'RELEASE_BY_RELEASE_ID__DATE_DESC' : 'RELEASE_BY_RELEASE_ID__DATE_ASC',
|
||||
exclude: store.state.ui.filter,
|
||||
});
|
||||
|
||||
return curateTag(tagBySlug, store);
|
||||
}
|
||||
return curateTag(tagBySlug, store);
|
||||
}
|
||||
|
||||
async function fetchTags({ _commit }, {
|
||||
limit = 100,
|
||||
slugs = [],
|
||||
_group,
|
||||
_priority,
|
||||
}) {
|
||||
const { tags } = await graphql(`
|
||||
async function fetchTags({ _commit }, {
|
||||
limit = 100,
|
||||
slugs = [],
|
||||
_group,
|
||||
_priority,
|
||||
}) {
|
||||
const { tags } = await graphql(`
|
||||
query Tags(
|
||||
$slugs: [String!] = [],
|
||||
$limit: Int = 100
|
||||
@@ -133,28 +133,28 @@ function initTagsActions(store, _router) {
|
||||
}
|
||||
}
|
||||
`, {
|
||||
slugs,
|
||||
limit,
|
||||
});
|
||||
slugs,
|
||||
limit,
|
||||
});
|
||||
|
||||
return tags.map(tag => curateTag(tag, store.state.ui.sfw));
|
||||
}
|
||||
return tags.map(tag => curateTag(tag, store.state.ui.sfw));
|
||||
}
|
||||
|
||||
async function fetchTagReleases({ _commit }, tagId) {
|
||||
const releases = await get(`/tags/${tagId}/releases`, {
|
||||
filter: store.state.ui.filter,
|
||||
after: store.getters.after,
|
||||
before: store.getters.before,
|
||||
});
|
||||
async function fetchTagReleases({ _commit }, tagId) {
|
||||
const releases = await get(`/tags/${tagId}/releases`, {
|
||||
filter: store.state.ui.filter,
|
||||
after: store.getters.after,
|
||||
before: store.getters.before,
|
||||
});
|
||||
|
||||
return releases;
|
||||
}
|
||||
return releases;
|
||||
}
|
||||
|
||||
return {
|
||||
fetchTagBySlug,
|
||||
fetchTags,
|
||||
fetchTagReleases,
|
||||
};
|
||||
return {
|
||||
fetchTagBySlug,
|
||||
fetchTags,
|
||||
fetchTagReleases,
|
||||
};
|
||||
}
|
||||
|
||||
export default initTagsActions;
|
||||
|
||||
@@ -3,11 +3,11 @@ import mutations from './mutations';
|
||||
import actions from './actions';
|
||||
|
||||
function initTagsStore(store, router) {
|
||||
return {
|
||||
state,
|
||||
mutations,
|
||||
actions: actions(store, router),
|
||||
};
|
||||
return {
|
||||
state,
|
||||
mutations,
|
||||
actions: actions(store, router),
|
||||
};
|
||||
}
|
||||
|
||||
export default initTagsStore;
|
||||
|
||||
@@ -1,35 +1,35 @@
|
||||
function initUiActions(_store, _router) {
|
||||
function setFilter({ commit }, filter) {
|
||||
commit('setFilter', filter);
|
||||
localStorage.setItem('filter', filter);
|
||||
}
|
||||
function setFilter({ commit }, filter) {
|
||||
commit('setFilter', filter);
|
||||
localStorage.setItem('filter', filter);
|
||||
}
|
||||
|
||||
function setRange({ commit }, range) {
|
||||
commit('setRange', range);
|
||||
}
|
||||
function setRange({ commit }, range) {
|
||||
commit('setRange', range);
|
||||
}
|
||||
|
||||
function setBatch({ commit }, batch) {
|
||||
commit('setBatch', batch);
|
||||
localStorage.setItem('batch', batch);
|
||||
}
|
||||
function setBatch({ commit }, batch) {
|
||||
commit('setBatch', batch);
|
||||
localStorage.setItem('batch', batch);
|
||||
}
|
||||
|
||||
function setTheme({ commit }, theme) {
|
||||
commit('setTheme', theme);
|
||||
localStorage.setItem('theme', theme);
|
||||
}
|
||||
function setTheme({ commit }, theme) {
|
||||
commit('setTheme', theme);
|
||||
localStorage.setItem('theme', theme);
|
||||
}
|
||||
|
||||
async function setSfw({ commit }, sfw) {
|
||||
commit('setSfw', sfw);
|
||||
localStorage.setItem('sfw', sfw);
|
||||
}
|
||||
async function setSfw({ commit }, sfw) {
|
||||
commit('setSfw', sfw);
|
||||
localStorage.setItem('sfw', sfw);
|
||||
}
|
||||
|
||||
return {
|
||||
setFilter,
|
||||
setRange,
|
||||
setBatch,
|
||||
setSfw,
|
||||
setTheme,
|
||||
};
|
||||
return {
|
||||
setFilter,
|
||||
setRange,
|
||||
setBatch,
|
||||
setSfw,
|
||||
setTheme,
|
||||
};
|
||||
}
|
||||
|
||||
export default initUiActions;
|
||||
|
||||
@@ -1,47 +1,47 @@
|
||||
import dayjs from 'dayjs';
|
||||
|
||||
const dateRanges = {
|
||||
latest: () => ({
|
||||
after: '1900-01-01',
|
||||
before: dayjs(new Date()).add(1, 'day').format('YYYY-MM-DD'),
|
||||
orderBy: 'DATE_DESC',
|
||||
}),
|
||||
upcoming: () => ({
|
||||
after: dayjs(new Date()).format('YYYY-MM-DD'),
|
||||
before: '2100-01-01',
|
||||
orderBy: 'DATE_ASC',
|
||||
}),
|
||||
new: () => ({
|
||||
after: '1900-01-01',
|
||||
before: '2100-01-01',
|
||||
orderBy: 'CREATED_AT_DESC',
|
||||
}),
|
||||
all: () => ({
|
||||
after: '1900-01-01',
|
||||
before: '2100-01-01',
|
||||
orderBy: 'DATE_DESC',
|
||||
}),
|
||||
latest: () => ({
|
||||
after: '1900-01-01',
|
||||
before: dayjs(new Date()).add(1, 'day').format('YYYY-MM-DD'),
|
||||
orderBy: 'DATE_DESC',
|
||||
}),
|
||||
upcoming: () => ({
|
||||
after: dayjs(new Date()).format('YYYY-MM-DD'),
|
||||
before: '2100-01-01',
|
||||
orderBy: 'DATE_ASC',
|
||||
}),
|
||||
new: () => ({
|
||||
after: '1900-01-01',
|
||||
before: '2100-01-01',
|
||||
orderBy: 'CREATED_AT_DESC',
|
||||
}),
|
||||
all: () => ({
|
||||
after: '1900-01-01',
|
||||
before: '2100-01-01',
|
||||
orderBy: 'DATE_DESC',
|
||||
}),
|
||||
};
|
||||
|
||||
function rangeDates(state) {
|
||||
return dateRanges[state.range]();
|
||||
return dateRanges[state.range]();
|
||||
}
|
||||
|
||||
function before(state) {
|
||||
return dateRanges[state.range]().before;
|
||||
return dateRanges[state.range]().before;
|
||||
}
|
||||
|
||||
function after(state) {
|
||||
return dateRanges[state.range]().after;
|
||||
return dateRanges[state.range]().after;
|
||||
}
|
||||
|
||||
function orderBy(state) {
|
||||
return dateRanges[state.range]().orderBy;
|
||||
return dateRanges[state.range]().orderBy;
|
||||
}
|
||||
|
||||
export default {
|
||||
rangeDates,
|
||||
before,
|
||||
after,
|
||||
orderBy,
|
||||
rangeDates,
|
||||
before,
|
||||
after,
|
||||
orderBy,
|
||||
};
|
||||
|
||||
@@ -1,27 +1,27 @@
|
||||
function setFilter(state, filter) {
|
||||
state.filter = filter;
|
||||
state.filter = filter;
|
||||
}
|
||||
|
||||
function setRange(state, range) {
|
||||
state.range = range;
|
||||
state.range = range;
|
||||
}
|
||||
|
||||
function setBatch(state, batch) {
|
||||
state.batch = batch;
|
||||
state.batch = batch;
|
||||
}
|
||||
|
||||
function setSfw(state, sfw) {
|
||||
state.sfw = sfw;
|
||||
state.sfw = sfw;
|
||||
}
|
||||
|
||||
function setTheme(state, theme) {
|
||||
state.theme = theme;
|
||||
state.theme = theme;
|
||||
}
|
||||
|
||||
export default {
|
||||
setFilter,
|
||||
setRange,
|
||||
setBatch,
|
||||
setSfw,
|
||||
setTheme,
|
||||
setFilter,
|
||||
setRange,
|
||||
setBatch,
|
||||
setSfw,
|
||||
setTheme,
|
||||
};
|
||||
|
||||
@@ -1,25 +1,25 @@
|
||||
function initUiObservers(store, _router) {
|
||||
document.addEventListener('keypress', (event) => {
|
||||
if (event.target.tagName === 'INPUT') {
|
||||
return;
|
||||
}
|
||||
document.addEventListener('keypress', (event) => {
|
||||
if (event.target.tagName === 'INPUT') {
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.key === 's') {
|
||||
store.dispatch('setSfw', true);
|
||||
}
|
||||
if (event.key === 's') {
|
||||
store.dispatch('setSfw', true);
|
||||
}
|
||||
|
||||
if (event.key === 'n') {
|
||||
store.dispatch('setSfw', false);
|
||||
}
|
||||
if (event.key === 'n') {
|
||||
store.dispatch('setSfw', false);
|
||||
}
|
||||
|
||||
if (event.key === 'd') {
|
||||
store.dispatch('setTheme', 'dark');
|
||||
}
|
||||
if (event.key === 'd') {
|
||||
store.dispatch('setTheme', 'dark');
|
||||
}
|
||||
|
||||
if (event.key === 'l') {
|
||||
store.dispatch('setTheme', 'light');
|
||||
}
|
||||
});
|
||||
if (event.key === 'l') {
|
||||
store.dispatch('setTheme', 'light');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
export default initUiObservers;
|
||||
|
||||
@@ -4,9 +4,9 @@ const storedSfw = localStorage.getItem('sfw');
|
||||
const storedTheme = localStorage.getItem('theme');
|
||||
|
||||
export default {
|
||||
filter: storedFilter ? storedFilter.split(',') : ['gay', 'transsexual'],
|
||||
range: 'latest',
|
||||
batch: storedBatch || 'all',
|
||||
sfw: storedSfw === 'true' || false,
|
||||
theme: storedTheme || 'light',
|
||||
filter: storedFilter ? storedFilter.split(',') : ['gay', 'transsexual'],
|
||||
range: 'latest',
|
||||
batch: storedBatch || 'all',
|
||||
sfw: storedSfw === 'true' || false,
|
||||
theme: storedTheme || 'light',
|
||||
};
|
||||
|
||||
@@ -4,12 +4,12 @@ import getters from './getters';
|
||||
import actions from './actions';
|
||||
|
||||
function initUiStore(store, router) {
|
||||
return {
|
||||
state,
|
||||
mutations,
|
||||
getters,
|
||||
actions: actions(store, router),
|
||||
};
|
||||
return {
|
||||
state,
|
||||
mutations,
|
||||
getters,
|
||||
actions: actions(store, router),
|
||||
};
|
||||
}
|
||||
|
||||
export default initUiStore;
|
||||
|
||||
Reference in New Issue
Block a user