diff --git a/assets/components/actors/actors.vue b/assets/components/actors/actors.vue
index c54c9545..8ee63a0a 100644
--- a/assets/components/actors/actors.vue
+++ b/assets/components/actors/actors.vue
@@ -11,21 +11,21 @@
-
+
@@ -225,12 +262,14 @@ import dayjs from 'dayjs';
import Actor from './tile.vue';
import Gender from './gender.vue';
import Checkbox from '../form/checkbox.vue';
+import Countries from './countries.vue';
import RangeFilter from './filter-range.vue';
import SearchBar from '../search/bar.vue';
import Pagination from '../pagination/pagination.vue';
const toggleValues = [true, null, false];
const boobSizes = 'ABCDEFGHIJKZ'.split('');
+const topCountries = ['AU', 'BR', 'DE', 'RU', 'GB', 'US'];
function updateFilters() {
this.$router.push({
@@ -238,13 +277,13 @@ function updateFilters() {
params: {
pageNumber: 1,
gender: this.gender,
- letter: this.letter,
},
query: {
nb: this.naturalBoobs !== 1 ? this.naturalBoobs : undefined,
bs: this.boobSizeRequired ? this.boobSize.join(',') : undefined,
h: this.heightRequired ? this.height.join(',') : undefined,
w: this.weightRequired ? this.weight.join(',') : undefined,
+ c: this.country ? this.country : undefined,
age: this.ageRequired ? this.age.join(',') : undefined,
dob: this.dobRequired ? this.dob : undefined,
query: this.$route.query.query,
@@ -263,7 +302,7 @@ function updateValue(prop, value, load = true) {
async function fetchActors(scroll) {
const curatedGender = this.gender.replace('trans', 'transsexual');
- const { actors, totalCount } = await this.$store.dispatch('fetchActors', {
+ const { actors, countries, totalCount } = await this.$store.dispatch('fetchActors', {
limit: this.limit,
pageNumber: Number(this.$route.params.pageNumber) || 1,
query: this.$route.query.query,
@@ -271,22 +310,32 @@ async function fetchActors(scroll) {
age: this.ageRequired && this.age,
dob: this.dobRequired && this.dob,
boobSize: this.boobSizeRequired && this.boobSize,
+ country: this.country,
naturalBoobs: toggleValues[this.naturalBoobs] ?? null,
height: this.heightRequired && this.height,
weight: this.weightRequired && this.weight,
});
+ const countriesByAlpha2 = countries.reduce((acc, country) => ({ ...acc, [country.alpha2]: country }), {});
+
this.actors = actors;
this.totalCount = totalCount;
+ this.countries = countries;
+ this.topCountries = [...(this.country && !topCountries.includes(this.country) ? [this.country] : []), ...topCountries].map(alpha2 => countriesByAlpha2[alpha2]);
+
if (scroll) {
this.$refs.content.scrollTop = 0;
// this.$refs.filter?.scrollIntoView();
}
}
-function letter() {
- return this.$route.params.letter || 'all';
+function filteredCountries() {
+ const countryQueryExpression = new RegExp(this.countryQuery, 'i');
+
+ return this.countryQuery?.length > 0
+ ? this.countries.filter(country => countryQueryExpression.test(country.name) || countryQueryExpression.test(country.alpha2))
+ : this.countries;
}
function gender() {
@@ -295,8 +344,7 @@ function gender() {
async function route(to, from) {
const scroll = to.params.pageNumber !== from.params.pageNumber
- || to.params.gender !== from.params.gender
- || to.params.letter !== from.params.letter;
+ || to.params.gender !== from.params.gender;
await this.fetchActors(scroll);
}
@@ -311,6 +359,7 @@ export default {
components: {
Actor,
Checkbox,
+ Countries,
Gender,
RangeFilter,
SearchBar,
@@ -319,6 +368,9 @@ export default {
data() {
return {
actors: [],
+ countries: [],
+ topCountries: [],
+ countryQuery: null,
pageTitle: null,
totalCount: 0,
limit: 50,
@@ -329,6 +381,7 @@ export default {
boobSizes,
boobSize: this.$route.query.bs?.split(',') || ['A', 'Z'],
boobSizeRequired: !!this.$route.query.bs,
+ country: this.$route.query.c || null,
naturalBoobs: Number(this.$route.query.nb) || 1,
height: this.$route.query.h?.split(',').map(Number) || [50, 220],
heightRequired: !!this.$route.query.h,
@@ -337,8 +390,8 @@ export default {
};
},
computed: {
- letter,
gender,
+ filteredCountries,
},
watch: {
$route: route,
@@ -386,11 +439,13 @@ export default {
.actors {
display: flex;
flex-direction: column;
+ flex-grow: 1;
}
.tiles {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(11rem, 1fr));
+ grid-template-rows: min-content;
grid-gap: .5rem;
padding: 1rem;
flex-grow: 1;
@@ -426,12 +481,10 @@ export default {
padding: 0 .5rem 0 0;
}
-.letter,
.gender {
display: inline-block;
}
-.letter-link,
.gender-link {
width: 2.5rem;
height: 2.5rem;
@@ -481,7 +534,8 @@ export default {
color: var(--shadow);
font-weight: bold;
- .icon {
+ .icon,
+ .flag {
fill: var(--shadow);
width: 1rem;
height: 1rem;
@@ -664,7 +718,7 @@ export default {
}
}
-@media(max-width: $breakpoint-kilo) {
+@media(max-width: $breakpoint-mega) {
.filters {
flex-direction: column-reverse;
}
@@ -676,15 +730,33 @@ export default {
}
}
-@media(max-width: $breakpoint) {
+@media(max-width: $breakpoint-kilo) {
+ .filters {
+ margin: 1rem 0 0 0;
+ }
+
.filters-row {
flex-direction: column;
+
+ .filter {
+ padding: 0 1rem 1rem 1rem;
+ }
}
+ .filters-attributes {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: center;
+ }
+
.genders {
padding: 0;
margin: 0 0 1.5rem 0;
}
+
+ .tiles {
+ padding: .5rem 1rem 1rem 1rem;
+ }
}
@media(max-width: $breakpoint-micro) {
@@ -692,10 +764,4 @@ export default {
grid-template-columns: repeat(auto-fill, minmax(8rem, 1fr));
}
}
-
-@media(max-width: $breakpoint-mini) {
- .filter .icon {
- display: none;
- }
-}
diff --git a/assets/components/actors/countries.vue b/assets/components/actors/countries.vue
new file mode 100644
index 00000000..ce851aab
--- /dev/null
+++ b/assets/components/actors/countries.vue
@@ -0,0 +1,88 @@
+
+
+ -
+
+
+ {{ country.alias || country.name }}
+
+
+
+
+
+
+
+
+
diff --git a/assets/components/tooltip/tooltip.vue b/assets/components/tooltip/tooltip.vue
index 2da062cd..5a897fd4 100644
--- a/assets/components/tooltip/tooltip.vue
+++ b/assets/components/tooltip/tooltip.vue
@@ -16,16 +16,19 @@
:style="{ transform: `translate3d(${tooltipX}px, ${tooltipY}px, 0)` }"
@click.stop
>
-
@@ -155,6 +158,8 @@ export default {
.tooltip-inner {
position: relative;
+ overflow-y: auto;
+ background: var(--background);
box-shadow: 0 0 .5rem var(--darken);
}
diff --git a/assets/js/actors/actions.js b/assets/js/actors/actions.js
index f17ef5b7..8baf5c6f 100644
--- a/assets/js/actors/actions.js
+++ b/assets/js/actors/actions.js
@@ -292,6 +292,7 @@ function initActorActions(store, router) {
query,
gender,
age,
+ country,
dob,
naturalBoobs,
boobSize,
@@ -325,12 +326,13 @@ function initActorActions(store, router) {
` : '';
const dobFilter = dob ? `dateOfBirth: { equalTo: "${dob}" }` : '';
+ const countryFilter = country ? `countryByBirthCountryAlpha2: { alpha2: { equalTo: "${country}" } }` : '';
const heightFilter = height ? `height: { greaterThanOrEqualTo: ${height[0]}, lessThanOrEqualTo: ${height[1]} }` : '';
const weightFilter = weight ? `weight: { greaterThanOrEqualTo: ${weight[0]}, lessThanOrEqualTo: ${weight[1]} }` : '';
const cupFilter = boobSize ? `cup: { greaterThanOrEqualTo: "${boobSize[0]}", lessThanOrEqualTo: "${boobSize[1]}" }` : '';
- const { connection: { actors, totalCount } } = await graphql(`
+ const { connection: { actors, totalCount }, countries } = await graphql(`
query Actors(
$query: String
$limit: Int,
@@ -355,6 +357,7 @@ function initActorActions(store, router) {
${heightFilter}
${weightFilter}
${cupFilter}
+ ${countryFilter}
naturalBoobs: {
equalTo: $naturalBoobs
}
@@ -407,6 +410,11 @@ function initActorActions(store, router) {
${actorStashesFields}
}
}
+ countries {
+ alpha2
+ name
+ alias
+ }
}
`, {
query,
@@ -420,6 +428,7 @@ function initActorActions(store, router) {
return {
actors: actors.map(actor => curateActor(actor)),
totalCount,
+ countries,
};
}
diff --git a/public/img/flags/aq.svg b/public/img/flags/aq.svg
new file mode 100644
index 00000000..d3be43b8
--- /dev/null
+++ b/public/img/flags/aq.svg
@@ -0,0 +1,6 @@
+
diff --git a/public/img/flags/bv.svg b/public/img/flags/bv.svg
new file mode 100644
index 00000000..cffdc328
--- /dev/null
+++ b/public/img/flags/bv.svg
@@ -0,0 +1,13 @@
+
diff --git a/public/img/flags/gf.svg b/public/img/flags/gf.svg
new file mode 100644
index 00000000..d3131e9f
--- /dev/null
+++ b/public/img/flags/gf.svg
@@ -0,0 +1,5 @@
+
diff --git a/public/img/flags/gp.svg b/public/img/flags/gp.svg
new file mode 100644
index 00000000..24a82602
--- /dev/null
+++ b/public/img/flags/gp.svg
@@ -0,0 +1,7 @@
+
diff --git a/public/img/flags/gs.svg b/public/img/flags/gs.svg
new file mode 100644
index 00000000..b9ade229
--- /dev/null
+++ b/public/img/flags/gs.svg
@@ -0,0 +1,201 @@
+
diff --git a/public/img/flags/gy.svg b/public/img/flags/gy.svg
new file mode 100644
index 00000000..e957f3ef
--- /dev/null
+++ b/public/img/flags/gy.svg
@@ -0,0 +1,9 @@
+
diff --git a/public/img/flags/hm.svg b/public/img/flags/hm.svg
new file mode 100644
index 00000000..a9dda074
--- /dev/null
+++ b/public/img/flags/hm.svg
@@ -0,0 +1,9 @@
+
diff --git a/public/img/flags/ki.svg b/public/img/flags/ki.svg
new file mode 100644
index 00000000..c4a40297
--- /dev/null
+++ b/public/img/flags/ki.svg
@@ -0,0 +1,36 @@
+
diff --git a/public/img/flags/mf.svg b/public/img/flags/mf.svg
new file mode 100644
index 00000000..bf46785c
--- /dev/null
+++ b/public/img/flags/mf.svg
@@ -0,0 +1,7 @@
+
diff --git a/public/img/flags/nc.svg b/public/img/flags/nc.svg
new file mode 100644
index 00000000..53622be4
--- /dev/null
+++ b/public/img/flags/nc.svg
@@ -0,0 +1,7 @@
+
diff --git a/public/img/flags/pm.svg b/public/img/flags/pm.svg
new file mode 100644
index 00000000..07ea24cc
--- /dev/null
+++ b/public/img/flags/pm.svg
@@ -0,0 +1,7 @@
+
diff --git a/public/img/flags/re.svg b/public/img/flags/re.svg
new file mode 100644
index 00000000..827103b1
--- /dev/null
+++ b/public/img/flags/re.svg
@@ -0,0 +1,7 @@
+
diff --git a/public/img/flags/sh.svg b/public/img/flags/sh.svg
new file mode 100644
index 00000000..7b083216
--- /dev/null
+++ b/public/img/flags/sh.svg
@@ -0,0 +1,74 @@
+
diff --git a/public/img/flags/sj.svg b/public/img/flags/sj.svg
new file mode 100644
index 00000000..8e5d104a
--- /dev/null
+++ b/public/img/flags/sj.svg
@@ -0,0 +1,7 @@
+
diff --git a/public/img/flags/sz.svg b/public/img/flags/sz.svg
new file mode 100644
index 00000000..7587ad10
--- /dev/null
+++ b/public/img/flags/sz.svg
@@ -0,0 +1,45 @@
+
diff --git a/public/img/flags/tf.svg b/public/img/flags/tf.svg
new file mode 100644
index 00000000..3913728c
--- /dev/null
+++ b/public/img/flags/tf.svg
@@ -0,0 +1,15 @@
+
diff --git a/public/img/flags/um.svg b/public/img/flags/um.svg
new file mode 100644
index 00000000..4f74e791
--- /dev/null
+++ b/public/img/flags/um.svg
@@ -0,0 +1,15 @@
+
diff --git a/public/img/flags/wf.svg b/public/img/flags/wf.svg
new file mode 100644
index 00000000..9d43586b
--- /dev/null
+++ b/public/img/flags/wf.svg
@@ -0,0 +1,7 @@
+
diff --git a/public/img/flags/yt.svg b/public/img/flags/yt.svg
new file mode 100644
index 00000000..f198fff4
--- /dev/null
+++ b/public/img/flags/yt.svg
@@ -0,0 +1,7 @@
+