diff --git a/assets/components/actors/actor.vue b/assets/components/actors/actor.vue index d8122dc9..20cf3f45 100644 --- a/assets/components/actors/actor.vue +++ b/assets/components/actors/actor.vue @@ -288,8 +288,19 @@ :actor="actor" /> - - + + + + + @@ -297,16 +308,23 @@ @@ -82,7 +106,7 @@ export default { width: 1rem; height: 1rem; padding: .5rem; - fill: var(--darken-weak); + fill: var(--darken-hint); &:hover { cursor: pointer; @@ -90,15 +114,10 @@ export default { } .include:hover, - .include.active { + &.selected .include { fill: var(--success); } - .exclude:hover, - .exclude.active { - fill: var(--alert); - } - .name { flex-grow: 1; padding: .5rem; diff --git a/assets/components/home/home.vue b/assets/components/home/home.vue index 27a21f6b..83e5672b 100644 --- a/assets/components/home/home.vue +++ b/assets/components/home/home.vue @@ -28,8 +28,8 @@ import Pagination from '../pagination/pagination.vue'; async function fetchReleases() { const { releases, totalCount } = await this.$store.dispatch('fetchReleases', { limit: this.limit, + range: this.$route.params.range, pageNumber: Number(this.$route.params.pageNumber) || 1, - range: this.$route.name, }); this.totalCount = totalCount; diff --git a/assets/components/networks/network.vue b/assets/components/networks/network.vue index 406d1f93..521a3ac2 100644 --- a/assets/components/networks/network.vue +++ b/assets/components/networks/network.vue @@ -212,10 +212,12 @@ export default { .content-inner { padding: 0; + overflow-y: auto; } .releases { padding: 1rem 1rem 1rem .5rem; + border-top: solid 1px var(--crease); } .sidebar { diff --git a/assets/components/sites/site.vue b/assets/components/sites/site.vue index dfedbb81..ea5ce76c 100644 --- a/assets/components/sites/site.vue +++ b/assets/components/sites/site.vue @@ -41,7 +41,11 @@ - +
@@ -54,12 +58,16 @@ import FilterBar from '../header/filter-bar.vue'; import Releases from '../releases/releases.vue'; async function fetchSite() { - this.site = await this.$store.dispatch('fetchSiteBySlug', { + const { site, releases, totalCount } = await this.$store.dispatch('fetchSiteBySlug', { siteSlug: this.$route.params.siteSlug, range: this.$route.params.range, + pageNumber: Number(this.$route.params.pageNumber) || 1, + limit: this.limit, }); - this.releases = this.site.releases; + this.site = site; + this.releases = releases; + this.totalCount = totalCount; } async function route() { @@ -81,6 +89,8 @@ export default { return { site: null, releases: null, + totalCount: 0, + limit: 10, pageTitle: null, }; }, diff --git a/assets/js/actors/actions.js b/assets/js/actors/actions.js index bfca52ae..5faa1c05 100644 --- a/assets/js/actors/actions.js +++ b/assets/js/actors/actions.js @@ -1,5 +1,6 @@ import { graphql, get } from '../api'; import { + releaseFields, releasePosterFragment, releaseActorsFragment, releaseTagsFragment, @@ -8,13 +9,19 @@ import { curateActor, curateRelease } from '../curate'; import getDateRange from '../get-date-range'; function initActorActions(store, _router) { - async function fetchActorById({ _commit }, { actorId, limit = 100, range = 'latest' }) { + async function fetchActorById({ _commit }, { + actorId, + limit = 10, + pageNumber = 1, + range = 'latest', + }) { const { before, after, orderBy } = getDateRange(range); - const { actor } = await graphql(` + const { actor, connection: { releases, totalCount } } = await graphql(` query Actor( $actorId: Int! - $limit:Int = 1000, + $limit:Int = 10, + $offset:Int = 0, $after:Date = "1900-01-01", $before:Date = "2100-01-01", $orderBy:[ReleasesActorsOrderBy!] @@ -123,7 +130,7 @@ function initActorActions(store, _router) { name slug } - releases: releasesActors( + releasesConnection: releasesActorsConnection( filter: { release: { date: { @@ -140,45 +147,80 @@ function initActorActions(store, _router) { } } } - }, - first: $limit, + } + first: $limit + offset: $offset orderBy: $orderBy ) { - release { - id - url - title - date - slug - ${releaseActorsFragment} - ${releaseTagsFragment} - ${releasePosterFragment} - site { - id - name - slug - url - network { - id - name - slug - url - } - } - } + releases: nodes { + release { + id + url + title + date + slug + ${releaseActorsFragment} + ${releaseTagsFragment} + ${releasePosterFragment} + site { + id + name + slug + url + network { + id + name + slug + url + } + } + } + } } } + connection: releasesActorsConnection( + first: $limit + offset: $offset + orderBy: $orderBy + filter: { + actorId: { + equalTo: $actorId + } + or: [ + { + release: { + date: { + lessThan: $before, + greaterThan: $after + } + } + }, + ] + } + ) { + releases: nodes { + release { + ${releaseFields} + } + } + totalCount + } } `, { actorId, limit, + offset: Math.max(0, (pageNumber - 1)) * 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, null, curateRelease); + return { + actor: curateActor(actor, null, curateRelease), + releases: releases.map(release => curateRelease(release.release)), + totalCount, + }; } async function fetchActors({ _commit }, { diff --git a/assets/js/curate.js b/assets/js/curate.js index ab440d21..bb6c5d05 100644 --- a/assets/js/curate.js +++ b/assets/js/curate.js @@ -1,6 +1,6 @@ import dayjs from 'dayjs'; -function curateActor(actor, release, curateActorRelease) { +function curateActor(actor, release) { if (!actor) { return null; } @@ -53,10 +53,6 @@ function curateActor(actor, release, curateActorRelease) { curatedActor.ageThen = dayjs(release.date).diff(actor.birthdate, 'year'); } - if (actor.releases) { - curatedActor.releases = actor.releases.map(actorRelease => curateActorRelease(actorRelease.release)); - } - if (actor.aliasFor) { curatedActor.aliasFor = curateActor(curatedActor.aliasFor); } diff --git a/assets/js/get-date-range.js b/assets/js/get-date-range.js index 4eb86ba8..caf43c66 100644 --- a/assets/js/get-date-range.js +++ b/assets/js/get-date-range.js @@ -24,7 +24,7 @@ const dateRanges = { }; function getDateRange(range) { - return dateRanges[range](); + return (dateRanges[range] || dateRanges.all)(); } export default getDateRange; diff --git a/assets/js/router.js b/assets/js/router.js index b53a6cbf..a36de6af 100644 --- a/assets/js/router.js +++ b/assets/js/router.js @@ -19,35 +19,17 @@ const routes = [ { path: '/', redirect: { - name: 'latest', + name: 'home', params: { + range: 'latest', pageNumber: 1, }, }, }, { - path: '/home', - redirect: { - name: 'latest', - params: { - pageNumber: 1, - }, - }, - }, - { - path: '/latest/:pageNumber?', + path: '/:range/:pageNumber?', component: Home, - name: 'latest', - }, - { - path: '/upcoming/:pageNumber?', - component: Home, - name: 'upcoming', - }, - { - path: '/new/:pageNumber?', - component: Home, - name: 'new', + name: 'home', }, { path: '/scene/:releaseId/:releaseSlug?', @@ -67,11 +49,12 @@ const routes = [ params: { ...from.params, range: 'latest', + pageNumber: 1, }, }), }, { - path: '/actor/:actorId/:actorSlug?/:range', + path: '/actor/:actorId/:actorSlug/:range/:pageNumber?', component: Actor, name: 'actorRange', }, @@ -84,11 +67,12 @@ const routes = [ params: { ...from.params, range: 'latest', + pageNumber: 1, }, }), }, { - path: '/site/:siteSlug/:range', + path: '/site/:siteSlug/:range/:pageNumber?', component: Site, name: 'siteRange', }, diff --git a/assets/js/sites/actions.js b/assets/js/sites/actions.js index 88686da9..5cfc6a59 100644 --- a/assets/js/sites/actions.js +++ b/assets/js/sites/actions.js @@ -1,6 +1,6 @@ import { graphql } from '../api'; import { releaseFields } from '../fragments'; -import { curateSite } from '../curate'; +import { curateSite, curateRelease } from '../curate'; import getDateRange from '../get-date-range'; function initSitesActions(store, _router) { @@ -12,7 +12,7 @@ function initSitesActions(store, _router) { }) { const { before, after, orderBy } = getDateRange(range); - const { site } = await graphql(` + const { site, connection: { releases, totalCount } } = await graphql(` query Site( $siteSlug: String!, $limit:Int = 100, @@ -39,7 +39,7 @@ function initSitesActions(store, _router) { slug url } - releases( + releasesConnection( filter: { date: { lessThan: $before, @@ -59,9 +59,42 @@ function initSitesActions(store, _router) { offset: $offset orderBy: $orderBy ) { - ${releaseFields} + releases: nodes { + ${releaseFields} + } + totalCount } } + connection: releasesConnection( + first: $limit + offset: $offset + orderBy: $orderBy + filter: { + site: { + slug: { + equalTo: $siteSlug + } + } + date: { + lessThan: $before, + greaterThan: $after + } + releasesTagsConnection: { + none: { + tag: { + slug: { + in: $exclude + } + } + } + } + } + ) { + releases: nodes { + ${releaseFields} + } + totalCount + } } `, { siteSlug, @@ -74,7 +107,11 @@ function initSitesActions(store, _router) { exclude: store.state.ui.filter, }); - return curateSite(site); + return { + site: curateSite(site), + releases: releases.map(release => curateRelease(release)), + totalCount, + }; } async function fetchSites({ _commit }, { limit = 100 }) { diff --git a/public/img/logos/newsensations/misc/the-lesbian-experience.png b/public/img/logos/newsensations/misc/the-lesbian-experience.png new file mode 100644 index 00000000..915bf00a Binary files /dev/null and b/public/img/logos/newsensations/misc/the-lesbian-experience.png differ diff --git a/public/img/logos/newsensations/misc/the-lesbian-experience_original.png b/public/img/logos/newsensations/misc/the-lesbian-experience_original.png new file mode 100644 index 00000000..abdc85aa Binary files /dev/null and b/public/img/logos/newsensations/misc/the-lesbian-experience_original.png differ diff --git a/public/img/logos/newsensations/thelesbianexperience.png b/public/img/logos/newsensations/thelesbianexperience.png index abdc85aa..dbf7c74a 100644 Binary files a/public/img/logos/newsensations/thelesbianexperience.png and b/public/img/logos/newsensations/thelesbianexperience.png differ diff --git a/public/img/tags/atm/5.jpeg b/public/img/tags/atm/5.jpeg new file mode 100644 index 00000000..8c58d655 Binary files /dev/null and b/public/img/tags/atm/5.jpeg differ diff --git a/src/utils/slugify.js b/src/utils/slugify.js index 38c4678f..b6072368 100644 --- a/src/utils/slugify.js +++ b/src/utils/slugify.js @@ -5,29 +5,35 @@ const substitutes = { á: 'a', ä: 'a', å: 'a', + ã: 'a', æ: 'ae', ç: 'c', è: 'e', é: 'e', ë: 'e', + ẽ: 'e', ì: 'i', í: 'i', ï: 'i', + ĩ: 'i', ǹ: 'n', ń: 'n', ñ: 'n', ò: 'o', ó: 'o', ö: 'o', + õ: 'o', ø: 'o', œ: 'oe', ß: 'ss', ù: 'u', ú: 'u', ü: 'u', + ũ: 'u', ỳ: 'y', ý: 'y', ÿ: 'y', + ỹ: 'y', }; function slugify(string, delimiter = '-', {