Compare commits
282 Commits
011482ac9d
...
experiment
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
33a327a04b | ||
|
|
a46061e247 | ||
|
|
94e07ff23d | ||
|
|
4811befcf6 | ||
|
|
c455f02c66 | ||
|
|
efc5620a28 | ||
|
|
61123fdb6a | ||
|
|
3ec6911d46 | ||
|
|
2021093645 | ||
|
|
1c72dc202f | ||
|
|
1ef946fa77 | ||
|
|
3b6bbc39ff | ||
|
|
481c9feada | ||
|
|
953b3e9568 | ||
|
|
bdd2e68f49 | ||
|
|
e4cc349302 | ||
|
|
6547b93e55 | ||
|
|
bb9649d23b | ||
|
|
9e2eaef9d1 | ||
|
|
1c3ee75d3b | ||
|
|
15c9af8057 | ||
|
|
295573c1ef | ||
|
|
e93e8ace5c | ||
|
|
43af7ba777 | ||
|
|
0dad5b0d68 | ||
|
|
ae9b793318 | ||
|
|
fd8170f223 | ||
|
|
661b8b716b | ||
|
|
5ff076cac3 | ||
|
|
41c100ac4e | ||
|
|
c6e977f842 | ||
|
|
50b7f521b5 | ||
|
|
f0d0ee3acc | ||
|
|
7b3bdadd44 | ||
|
|
5deba6b90f | ||
|
|
a5afffc968 | ||
|
|
a239a5c593 | ||
|
|
e56e7333e3 | ||
|
|
d55e3c37cd | ||
|
|
97b78ea016 | ||
|
|
3e290b74dc | ||
|
|
65141207ae | ||
|
|
17dfeac1af | ||
|
|
4a9c428d69 | ||
|
|
333f252099 | ||
|
|
38232f258a | ||
|
|
582269cfaa | ||
|
|
0b646429fd | ||
|
|
fecef6c1cf | ||
|
|
73e5404c44 | ||
|
|
690d2bb3ed | ||
|
|
1dd935e1e9 | ||
|
|
8386230f33 | ||
|
|
5a68b06137 | ||
|
|
5918364cf5 | ||
|
|
df4d860d35 | ||
|
|
d9f0db6e3c | ||
|
|
7372b560b2 | ||
|
|
9d638c685c | ||
|
|
5da1acc38d | ||
|
|
c7c62e220d | ||
|
|
9edd652a2c | ||
|
|
cde760c1ea | ||
|
|
19c7f958e1 | ||
|
|
c7710afdbf | ||
|
|
ba18a3dadb | ||
|
|
496c29e569 | ||
|
|
98a72a4929 | ||
|
|
c4f0b48932 | ||
|
|
93abbab873 | ||
|
|
f7bbab08bd | ||
|
|
1e4ddf2bbf | ||
|
|
9b7879bff7 | ||
|
|
03d96d4dec | ||
|
|
1dfa034332 | ||
|
|
196a1d33e3 | ||
|
|
3d349c413f | ||
|
|
bd5babd37e | ||
|
|
fffe9080f3 | ||
|
|
5630b16e99 | ||
|
|
4bcf7ef45b | ||
|
|
9abc1d48ac | ||
|
|
ceaf5a3217 | ||
|
|
36d84fb98b | ||
|
|
3d80e9d77b | ||
|
|
1dc38ffacc | ||
|
|
ee210b5c68 | ||
|
|
3aae3cd3a1 | ||
|
|
f1a7f2f905 | ||
|
|
0b7e0319f1 | ||
|
|
10b8abf706 | ||
|
|
b163223ff1 | ||
|
|
b9f3eb85f9 | ||
|
|
285a65f018 | ||
|
|
815d56d334 | ||
|
|
27a9a233e2 | ||
|
|
22864105ac | ||
|
|
7cf47cbf8d | ||
|
|
502c588958 | ||
|
|
81792a7c2f | ||
|
|
784d326584 | ||
|
|
83dc7aa578 | ||
|
|
5a3b27fbf7 | ||
|
|
5ff83a9497 | ||
|
|
07cb39c756 | ||
|
|
fffd54995d | ||
|
|
5302176f0b | ||
|
|
efd7cf8acc | ||
|
|
52218c30f8 | ||
|
|
04c176fa8b | ||
|
|
af320684b4 | ||
|
|
b2ba14ce45 | ||
|
|
d776cc2f71 | ||
|
|
b4bed2f623 | ||
|
|
5c5a11fdca | ||
|
|
a22c62d893 | ||
|
|
90bc2f3724 | ||
|
|
8cdc794a3a | ||
|
|
250618df8b | ||
|
|
b62ae00c54 | ||
|
|
67d0a9e0e0 | ||
| b4425bc3bb | |||
| d77c145de3 | |||
|
|
6753f923d9 | ||
|
|
452f725332 | ||
|
|
7c1f45bcfb | ||
|
|
11ea54f6e8 | ||
|
|
5b623ee46f | ||
|
|
7ceec1c739 | ||
|
|
fc318536aa | ||
|
|
cd8f690ac6 | ||
|
|
240a8e86fd | ||
|
|
c557f0f1f0 | ||
|
|
86f56695e2 | ||
|
|
20da2d1cf6 | ||
|
|
372db86927 | ||
|
|
4c503a3177 | ||
|
|
57d46f5842 | ||
|
|
7f11d0ca91 | ||
|
|
bbd788699e | ||
|
|
e24add98ea | ||
|
|
506971b44b | ||
|
|
43a0bc8a2c | ||
|
|
baebdbc0bb | ||
|
|
1c24cae3b1 | ||
|
|
b9146aee5f | ||
|
|
09bfcb01f5 | ||
|
|
5d80b6dc21 | ||
|
|
140a38c349 | ||
|
|
6760c11881 | ||
|
|
2dcdbf9c37 | ||
|
|
3b958a02ef | ||
|
|
605242b399 | ||
|
|
299f257a01 | ||
|
|
0ad64ef5f4 | ||
|
|
3bfe1e8fdb | ||
|
|
7d992f4129 | ||
|
|
280032937f | ||
|
|
d93670842b | ||
|
|
dc187a9a3a | ||
|
|
5f89c6e14c | ||
|
|
9f10420eb9 | ||
|
|
9568370132 | ||
|
|
1c0c30be11 | ||
|
|
cdb7dcd6e9 | ||
|
|
8e4be06675 | ||
|
|
de7a8c756a | ||
|
|
65e2b72c6a | ||
|
|
523c36ecd4 | ||
|
|
5b5688438c | ||
|
|
4ca07631c7 | ||
|
|
ec4e7bc12a | ||
|
|
26d15c0a6f | ||
|
|
a484396db4 | ||
|
|
681db02784 | ||
|
|
e88554666c | ||
|
|
9f37ec4cff | ||
|
|
abd063a578 | ||
|
|
883e57ce1f | ||
|
|
ad04502a8c | ||
|
|
f65ed16842 | ||
|
|
1918dd4ad5 | ||
|
|
3983d3464f | ||
|
|
61daf5f037 | ||
|
|
eafa144104 | ||
|
|
60c151ff6a | ||
|
|
c97d18fcf9 | ||
|
|
e41f9fa937 | ||
|
|
56a7fb0ad9 | ||
|
|
e29cbc9fea | ||
|
|
08f725a0b6 | ||
|
|
b93a5715cb | ||
|
|
2018d5c298 | ||
|
|
87094a9498 | ||
|
|
53a1c697d0 | ||
|
|
f04eb72891 | ||
|
|
dfeb0c08cf | ||
|
|
9d7183ac69 | ||
|
|
2539e88f47 | ||
|
|
20d0d860d3 | ||
|
|
6b4aa64d74 | ||
|
|
c7b9ec7a4b | ||
|
|
e81864ebde | ||
|
|
0305a22a24 | ||
|
|
a406eb584d | ||
|
|
2be3ea9bbb | ||
|
|
0a8a7ff9a5 | ||
|
|
98c103c625 | ||
|
|
e0908a5f5e | ||
|
|
f0b7678444 | ||
|
|
64e9efe095 | ||
|
|
ab29ab053e | ||
|
|
a5081bc7c9 | ||
|
|
da9c628f9b | ||
|
|
26539b74a5 | ||
|
|
ccb99e278c | ||
|
|
a867817dc1 | ||
|
|
d1e05915b5 | ||
|
|
b764fdec85 | ||
|
|
8322d43b09 | ||
|
|
29b8c5e38e | ||
|
|
83dd233991 | ||
|
|
0864154a0e | ||
|
|
53357d4bd2 | ||
|
|
69bf98edf1 | ||
|
|
a22c4d5679 | ||
|
|
e5ad1648eb | ||
|
|
100a35b4e8 | ||
|
|
6c5d4389fe | ||
|
|
92f9ff4104 | ||
|
|
0e4fd12d70 | ||
|
|
9040285ce5 | ||
|
|
972b15e72d | ||
|
|
c1aea78496 | ||
|
|
49f891ba44 | ||
|
|
239057f1b6 | ||
|
|
167df35d37 | ||
|
|
b1b2ad2111 | ||
|
|
f1ff662be2 | ||
|
|
2418fec9c9 | ||
|
|
aaaa0a6afb | ||
|
|
afe22003e1 | ||
|
|
b6ad2903f3 | ||
|
|
6c298cd639 | ||
|
|
dbff3e9539 | ||
|
|
fcc6b33d07 | ||
|
|
0224c26ca0 | ||
|
|
294f15e694 | ||
|
|
522584711b | ||
|
|
ae40f33283 | ||
|
|
172e01c80e | ||
|
|
901acf1390 | ||
|
|
a316da3083 | ||
|
|
0b46e27497 | ||
|
|
b164c5dad7 | ||
|
|
2d6b285817 | ||
|
|
65c79567d2 | ||
|
|
d3633f31ac | ||
|
|
73a9a11aa6 | ||
|
|
c21bd8b01e | ||
|
|
14f4d24872 | ||
|
|
731abc79ee | ||
|
|
d542889827 | ||
|
|
8c5ef21459 | ||
|
|
7bfca9596d | ||
|
|
7bd858f96b | ||
|
|
b8657cb6e6 | ||
|
|
69a7e8f13d | ||
|
|
23537e0243 | ||
|
|
546f778b1b | ||
|
|
245f69a122 | ||
|
|
c6f3f7a239 | ||
|
|
f0a6e80e5a | ||
|
|
0cbb985945 | ||
|
|
bb384029ac | ||
|
|
85c6b581cb | ||
|
|
dd18644796 | ||
|
|
1628e41d09 | ||
|
|
a77d8f4cea | ||
|
|
0a4152b4b7 | ||
|
|
3fc4dc15df | ||
|
|
4ee0dcef9b |
@@ -2,7 +2,7 @@
|
|||||||
"root": true,
|
"root": true,
|
||||||
"extends": ["airbnb-base", "plugin:vue/recommended"],
|
"extends": ["airbnb-base", "plugin:vue/recommended"],
|
||||||
"parserOptions": {
|
"parserOptions": {
|
||||||
"parser": "babel-eslint",
|
"parser": "@babel/eslint-parser",
|
||||||
"ecmaVersion": 2019,
|
"ecmaVersion": 2019,
|
||||||
"sourceType": "module"
|
"sourceType": "module"
|
||||||
},
|
},
|
||||||
@@ -17,10 +17,11 @@
|
|||||||
"vue/html-indent": ["error", "tab"],
|
"vue/html-indent": ["error", "tab"],
|
||||||
"vue/multiline-html-element-content-newline": 0,
|
"vue/multiline-html-element-content-newline": 0,
|
||||||
"vue/singleline-html-element-content-newline": 0,
|
"vue/singleline-html-element-content-newline": 0,
|
||||||
|
"vue/multi-word-component-names": 0,
|
||||||
"no-param-reassign": ["error", {
|
"no-param-reassign": ["error", {
|
||||||
"props": true,
|
"props": true,
|
||||||
"ignorePropertyModificationsFor": ["state", "acc"]
|
"ignorePropertyModificationsFor": ["state", "acc"]
|
||||||
}],
|
}]
|
||||||
},
|
},
|
||||||
"globals": {
|
"globals": {
|
||||||
"CONFIG": true
|
"CONFIG": true
|
||||||
|
|||||||
3
.gitignore
vendored
@@ -2,9 +2,12 @@ node_modules/
|
|||||||
dist/
|
dist/
|
||||||
log/
|
log/
|
||||||
media/
|
media/
|
||||||
|
html/
|
||||||
public/js/*
|
public/js/*
|
||||||
public/css/*
|
public/css/*
|
||||||
config/*
|
config/*
|
||||||
!config/default.js
|
!config/default.js
|
||||||
assets/js/config/
|
assets/js/config/
|
||||||
!assets/js/config/default.js
|
!assets/js/config/default.js
|
||||||
|
*.heapprofile
|
||||||
|
*.heapsnapshot
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<div class="actor-header">
|
<div class="actor-header">
|
||||||
<h2 class="header-name">
|
<h2 class="header-name">
|
||||||
<span v-if="actor.entity">{{ actor.name }} ({{ actor.entity.name }})</span>
|
<span v-if="actor.entity">{{ actor.name }} ({{ actor.entity.name }})</span>
|
||||||
<span v-else="">{{ actor.name }}</span>
|
<span v-else>{{ actor.name }}</span>
|
||||||
|
|
||||||
<Gender
|
<Gender
|
||||||
:gender="actor.gender"
|
:gender="actor.gender"
|
||||||
@@ -361,7 +361,10 @@
|
|||||||
:available-actors="actor.actors"
|
:available-actors="actor.actors"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<Releases :releases="releases" />
|
<Releases
|
||||||
|
:releases="releases"
|
||||||
|
:done="done"
|
||||||
|
/>
|
||||||
|
|
||||||
<Pagination
|
<Pagination
|
||||||
:items-total="totalCount"
|
:items-total="totalCount"
|
||||||
@@ -389,6 +392,8 @@ import Social from './social.vue';
|
|||||||
import StashButton from '../stashes/button.vue';
|
import StashButton from '../stashes/button.vue';
|
||||||
|
|
||||||
async function fetchActor(scroll = true) {
|
async function fetchActor(scroll = true) {
|
||||||
|
this.done = false;
|
||||||
|
|
||||||
const { actor, releases, totalCount } = await this.$store.dispatch('fetchActorById', {
|
const { actor, releases, totalCount } = await this.$store.dispatch('fetchActorById', {
|
||||||
actorId: Number(this.$route.params.actorId),
|
actorId: Number(this.$route.params.actorId),
|
||||||
limit: this.limit,
|
limit: this.limit,
|
||||||
@@ -400,6 +405,7 @@ async function fetchActor(scroll = true) {
|
|||||||
this.releases = releases;
|
this.releases = releases;
|
||||||
this.totalCount = totalCount;
|
this.totalCount = totalCount;
|
||||||
this.stashedBy = actor.stashes;
|
this.stashedBy = actor.stashes;
|
||||||
|
this.done = true;
|
||||||
|
|
||||||
if (this.$refs.filter && scroll) {
|
if (this.$refs.filter && scroll) {
|
||||||
this.$refs.filter.$el.scrollIntoView();
|
this.$refs.filter.$el.scrollIntoView();
|
||||||
@@ -463,6 +469,7 @@ export default {
|
|||||||
return {
|
return {
|
||||||
actor: null,
|
actor: null,
|
||||||
releases: null,
|
releases: null,
|
||||||
|
done: false,
|
||||||
totalCount: 0,
|
totalCount: 0,
|
||||||
limit: 20,
|
limit: 20,
|
||||||
pageTitle: null,
|
pageTitle: null,
|
||||||
|
|||||||
@@ -11,21 +11,21 @@
|
|||||||
<ul class="genders nolist">
|
<ul class="genders nolist">
|
||||||
<li class="gender">
|
<li class="gender">
|
||||||
<router-link
|
<router-link
|
||||||
:to="{ name: 'actors', params: { gender: 'all', letter, pageNumber: 1 }, query: $route.query }"
|
:to="{ name: 'actors', params: { gender: 'all', pageNumber: 1 }, query: $route.query }"
|
||||||
:class="{ selected: gender === 'all' }"
|
:class="{ selected: gender === 'all' }"
|
||||||
class="gender-link all"
|
class="gender-link all"
|
||||||
>all</router-link>
|
>all</router-link>
|
||||||
</li>
|
</li>
|
||||||
<li class="gender">
|
<li class="gender">
|
||||||
<router-link
|
<router-link
|
||||||
:to="{ name: 'actors', params: { gender: 'female', letter, pageNumber: 1 }, query: $route.query }"
|
:to="{ name: 'actors', params: { gender: 'female', pageNumber: 1 }, query: $route.query }"
|
||||||
:class="{ selected: gender === 'female' }"
|
:class="{ selected: gender === 'female' }"
|
||||||
class="gender-link female"
|
class="gender-link female"
|
||||||
><Gender gender="female" /></router-link>
|
><Gender gender="female" /></router-link>
|
||||||
</li>
|
</li>
|
||||||
<li class="gender">
|
<li class="gender">
|
||||||
<router-link
|
<router-link
|
||||||
:to="{ name: 'actors', params: { gender: 'male', letter, pageNumber: 1 }, query: $route.query }"
|
:to="{ name: 'actors', params: { gender: 'male', pageNumber: 1 }, query: $route.query }"
|
||||||
:class="{ selected: gender === 'male' }"
|
:class="{ selected: gender === 'male' }"
|
||||||
class="gender-link male"
|
class="gender-link male"
|
||||||
replace
|
replace
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
</li>
|
</li>
|
||||||
<li class="gender">
|
<li class="gender">
|
||||||
<router-link
|
<router-link
|
||||||
:to="{ name: 'actors', params: { gender: 'trans', letter, pageNumber: 1 }, query: $route.query }"
|
:to="{ name: 'actors', params: { gender: 'trans', pageNumber: 1 }, query: $route.query }"
|
||||||
:class="{ selected: gender === 'trans' }"
|
:class="{ selected: gender === 'trans' }"
|
||||||
class="gender-link transsexual"
|
class="gender-link transsexual"
|
||||||
replace
|
replace
|
||||||
@@ -41,7 +41,7 @@
|
|||||||
</li>
|
</li>
|
||||||
<li class="gender">
|
<li class="gender">
|
||||||
<router-link
|
<router-link
|
||||||
:to="{ name: 'actors', params: { gender: 'other', letter, pageNumber: 1 }, query: $route.query }"
|
:to="{ name: 'actors', params: { gender: 'other', pageNumber: 1 }, query: $route.query }"
|
||||||
:class="{ selected: gender === 'other' }"
|
:class="{ selected: gender === 'other' }"
|
||||||
class="gender-link other"
|
class="gender-link other"
|
||||||
replace
|
replace
|
||||||
@@ -49,7 +49,7 @@
|
|||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<ul class="nolist">
|
<ul class="filters-attributes nolist">
|
||||||
<li>
|
<li>
|
||||||
<Tooltip class="filter boobs">
|
<Tooltip class="filter boobs">
|
||||||
<span
|
<span
|
||||||
@@ -194,13 +194,53 @@
|
|||||||
</template>
|
</template>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<Tooltip class="filter">
|
||||||
|
<span
|
||||||
|
:class="{ enabled: country }"
|
||||||
|
class="filter-trigger"
|
||||||
|
><img
|
||||||
|
v-if="$route.query.c"
|
||||||
|
:src="`/img/flags/${$route.query.c.toLowerCase()}.svg`"
|
||||||
|
class="flag"
|
||||||
|
><Icon
|
||||||
|
v-else
|
||||||
|
icon="earth2"
|
||||||
|
/>Country</span>
|
||||||
|
|
||||||
|
<template v-slot:tooltip>
|
||||||
|
<input
|
||||||
|
v-model="countryQuery"
|
||||||
|
placeholder="Search"
|
||||||
|
class="input"
|
||||||
|
>
|
||||||
|
|
||||||
|
<Countries
|
||||||
|
v-if="!countryQuery"
|
||||||
|
:countries="topCountries"
|
||||||
|
:selected-country="country"
|
||||||
|
:update-value="updateValue"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<Countries
|
||||||
|
:countries="filteredCountries"
|
||||||
|
:selected-country="country"
|
||||||
|
:update-value="updateValue"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</Tooltip>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<SearchBar :placeholder="`Search ${totalCount} actors`" />
|
<SearchBar :placeholder="`Search ${totalCount} actors`" />
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<div class="tiles">
|
<div
|
||||||
|
ref="tiles"
|
||||||
|
class="tiles"
|
||||||
|
>
|
||||||
<Actor
|
<Actor
|
||||||
v-for="actor in actors"
|
v-for="actor in actors"
|
||||||
:key="`actor-${actor.id}`"
|
:key="`actor-${actor.id}`"
|
||||||
@@ -225,12 +265,14 @@ import dayjs from 'dayjs';
|
|||||||
import Actor from './tile.vue';
|
import Actor from './tile.vue';
|
||||||
import Gender from './gender.vue';
|
import Gender from './gender.vue';
|
||||||
import Checkbox from '../form/checkbox.vue';
|
import Checkbox from '../form/checkbox.vue';
|
||||||
|
import Countries from './countries.vue';
|
||||||
import RangeFilter from './filter-range.vue';
|
import RangeFilter from './filter-range.vue';
|
||||||
import SearchBar from '../search/bar.vue';
|
import SearchBar from '../search/bar.vue';
|
||||||
import Pagination from '../pagination/pagination.vue';
|
import Pagination from '../pagination/pagination.vue';
|
||||||
|
|
||||||
const toggleValues = [true, null, false];
|
const toggleValues = [true, null, false];
|
||||||
const boobSizes = 'ABCDEFGHIJKZ'.split('');
|
const boobSizes = 'ABCDEFGHIJKZ'.split('');
|
||||||
|
const topCountries = ['AU', 'BR', 'CZ', 'DE', 'JP', 'RU', 'GB', 'US'];
|
||||||
|
|
||||||
function updateFilters() {
|
function updateFilters() {
|
||||||
this.$router.push({
|
this.$router.push({
|
||||||
@@ -238,13 +280,13 @@ function updateFilters() {
|
|||||||
params: {
|
params: {
|
||||||
pageNumber: 1,
|
pageNumber: 1,
|
||||||
gender: this.gender,
|
gender: this.gender,
|
||||||
letter: this.letter,
|
|
||||||
},
|
},
|
||||||
query: {
|
query: {
|
||||||
nb: this.naturalBoobs !== 1 ? this.naturalBoobs : undefined,
|
nb: this.naturalBoobs !== 1 ? this.naturalBoobs : undefined,
|
||||||
bs: this.boobSizeRequired ? this.boobSize.join(',') : undefined,
|
bs: this.boobSizeRequired ? this.boobSize.join(',') : undefined,
|
||||||
h: this.heightRequired ? this.height.join(',') : undefined,
|
h: this.heightRequired ? this.height.join(',') : undefined,
|
||||||
w: this.weightRequired ? this.weight.join(',') : undefined,
|
w: this.weightRequired ? this.weight.join(',') : undefined,
|
||||||
|
c: this.country ? this.country : undefined,
|
||||||
age: this.ageRequired ? this.age.join(',') : undefined,
|
age: this.ageRequired ? this.age.join(',') : undefined,
|
||||||
dob: this.dobRequired ? this.dob : undefined,
|
dob: this.dobRequired ? this.dob : undefined,
|
||||||
query: this.$route.query.query,
|
query: this.$route.query.query,
|
||||||
@@ -263,7 +305,7 @@ function updateValue(prop, value, load = true) {
|
|||||||
async function fetchActors(scroll) {
|
async function fetchActors(scroll) {
|
||||||
const curatedGender = this.gender.replace('trans', 'transsexual');
|
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,
|
limit: this.limit,
|
||||||
pageNumber: Number(this.$route.params.pageNumber) || 1,
|
pageNumber: Number(this.$route.params.pageNumber) || 1,
|
||||||
query: this.$route.query.query,
|
query: this.$route.query.query,
|
||||||
@@ -271,22 +313,31 @@ async function fetchActors(scroll) {
|
|||||||
age: this.ageRequired && this.age,
|
age: this.ageRequired && this.age,
|
||||||
dob: this.dobRequired && this.dob,
|
dob: this.dobRequired && this.dob,
|
||||||
boobSize: this.boobSizeRequired && this.boobSize,
|
boobSize: this.boobSizeRequired && this.boobSize,
|
||||||
|
country: this.country,
|
||||||
naturalBoobs: toggleValues[this.naturalBoobs] ?? null,
|
naturalBoobs: toggleValues[this.naturalBoobs] ?? null,
|
||||||
height: this.heightRequired && this.height,
|
height: this.heightRequired && this.height,
|
||||||
weight: this.weightRequired && this.weight,
|
weight: this.weightRequired && this.weight,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const countriesByAlpha2 = countries.reduce((acc, country) => ({ ...acc, [country.alpha2]: country }), {});
|
||||||
|
|
||||||
this.actors = actors;
|
this.actors = actors;
|
||||||
this.totalCount = totalCount;
|
this.totalCount = totalCount;
|
||||||
|
|
||||||
|
this.countries = countries;
|
||||||
|
this.topCountries = [...(this.country && !topCountries.includes(this.country) ? [this.country] : []), ...topCountries].map(alpha2 => countriesByAlpha2[alpha2]);
|
||||||
|
|
||||||
if (scroll) {
|
if (scroll) {
|
||||||
this.$refs.content.scrollTop = 0;
|
this.$refs.tiles?.scrollIntoView();
|
||||||
// this.$refs.filter?.scrollIntoView();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function letter() {
|
function filteredCountries() {
|
||||||
return this.$route.params.letter || 'all';
|
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() {
|
function gender() {
|
||||||
@@ -295,8 +346,7 @@ function gender() {
|
|||||||
|
|
||||||
async function route(to, from) {
|
async function route(to, from) {
|
||||||
const scroll = to.params.pageNumber !== from.params.pageNumber
|
const scroll = to.params.pageNumber !== from.params.pageNumber
|
||||||
|| to.params.gender !== from.params.gender
|
|| to.params.gender !== from.params.gender;
|
||||||
|| to.params.letter !== from.params.letter;
|
|
||||||
|
|
||||||
await this.fetchActors(scroll);
|
await this.fetchActors(scroll);
|
||||||
}
|
}
|
||||||
@@ -311,6 +361,7 @@ export default {
|
|||||||
components: {
|
components: {
|
||||||
Actor,
|
Actor,
|
||||||
Checkbox,
|
Checkbox,
|
||||||
|
Countries,
|
||||||
Gender,
|
Gender,
|
||||||
RangeFilter,
|
RangeFilter,
|
||||||
SearchBar,
|
SearchBar,
|
||||||
@@ -319,6 +370,9 @@ export default {
|
|||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
actors: [],
|
actors: [],
|
||||||
|
countries: [],
|
||||||
|
topCountries: [],
|
||||||
|
countryQuery: null,
|
||||||
pageTitle: null,
|
pageTitle: null,
|
||||||
totalCount: 0,
|
totalCount: 0,
|
||||||
limit: 50,
|
limit: 50,
|
||||||
@@ -329,6 +383,7 @@ export default {
|
|||||||
boobSizes,
|
boobSizes,
|
||||||
boobSize: this.$route.query.bs?.split(',') || ['A', 'Z'],
|
boobSize: this.$route.query.bs?.split(',') || ['A', 'Z'],
|
||||||
boobSizeRequired: !!this.$route.query.bs,
|
boobSizeRequired: !!this.$route.query.bs,
|
||||||
|
country: this.$route.query.c || null,
|
||||||
naturalBoobs: Number(this.$route.query.nb) || 1,
|
naturalBoobs: Number(this.$route.query.nb) || 1,
|
||||||
height: this.$route.query.h?.split(',').map(Number) || [50, 220],
|
height: this.$route.query.h?.split(',').map(Number) || [50, 220],
|
||||||
heightRequired: !!this.$route.query.h,
|
heightRequired: !!this.$route.query.h,
|
||||||
@@ -337,8 +392,8 @@ export default {
|
|||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
letter,
|
|
||||||
gender,
|
gender,
|
||||||
|
filteredCountries,
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
$route: route,
|
$route: route,
|
||||||
@@ -386,11 +441,14 @@ export default {
|
|||||||
.actors {
|
.actors {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
flex-grow: 1;
|
||||||
|
overflow-y: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tiles {
|
.tiles {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(auto-fill, minmax(11rem, 1fr));
|
grid-template-columns: repeat(auto-fill, minmax(11rem, 1fr));
|
||||||
|
grid-template-rows: min-content;
|
||||||
grid-gap: .5rem;
|
grid-gap: .5rem;
|
||||||
padding: 1rem;
|
padding: 1rem;
|
||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
@@ -426,12 +484,10 @@ export default {
|
|||||||
padding: 0 .5rem 0 0;
|
padding: 0 .5rem 0 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.letter,
|
|
||||||
.gender {
|
.gender {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.letter-link,
|
|
||||||
.gender-link {
|
.gender-link {
|
||||||
width: 2.5rem;
|
width: 2.5rem;
|
||||||
height: 2.5rem;
|
height: 2.5rem;
|
||||||
@@ -481,7 +537,8 @@ export default {
|
|||||||
color: var(--shadow);
|
color: var(--shadow);
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
|
||||||
.icon {
|
.icon,
|
||||||
|
.flag {
|
||||||
fill: var(--shadow);
|
fill: var(--shadow);
|
||||||
width: 1rem;
|
width: 1rem;
|
||||||
height: 1rem;
|
height: 1rem;
|
||||||
@@ -664,7 +721,7 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media(max-width: $breakpoint-kilo) {
|
@media(max-width: $breakpoint-mega) {
|
||||||
.filters {
|
.filters {
|
||||||
flex-direction: column-reverse;
|
flex-direction: column-reverse;
|
||||||
}
|
}
|
||||||
@@ -676,15 +733,33 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media(max-width: $breakpoint) {
|
@media(max-width: $breakpoint-kilo) {
|
||||||
|
.filters {
|
||||||
|
margin: 1rem 0 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
.filters-row {
|
.filters-row {
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
|
||||||
|
.filter {
|
||||||
|
padding: 0 1rem 1rem 1rem;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.filters-attributes {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
.genders {
|
.genders {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
margin: 0 0 1.5rem 0;
|
margin: 0 0 1.5rem 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.tiles {
|
||||||
|
padding: .5rem 1rem 1rem 1rem;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media(max-width: $breakpoint-micro) {
|
@media(max-width: $breakpoint-micro) {
|
||||||
@@ -692,10 +767,4 @@ export default {
|
|||||||
grid-template-columns: repeat(auto-fill, minmax(8rem, 1fr));
|
grid-template-columns: repeat(auto-fill, minmax(8rem, 1fr));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media(max-width: $breakpoint-mini) {
|
|
||||||
.filter .icon {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
88
assets/components/actors/countries.vue
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
<template>
|
||||||
|
<ul class="countries nolist">
|
||||||
|
<li
|
||||||
|
v-for="country in countries"
|
||||||
|
:key="country.alpha2"
|
||||||
|
:title="country.name"
|
||||||
|
:class="{ selected: selectedCountry === country.alpha2 }"
|
||||||
|
class="country"
|
||||||
|
@click="updateValue('country', country.alpha2, true)"
|
||||||
|
>
|
||||||
|
<img
|
||||||
|
:src="`/img/flags/${country.alpha2.toLowerCase()}.svg`"
|
||||||
|
class="flag"
|
||||||
|
>
|
||||||
|
|
||||||
|
<span class="country-name">{{ country.alias || country.name }}</span>
|
||||||
|
|
||||||
|
<Icon
|
||||||
|
v-if="selectedCountry === country.alpha2"
|
||||||
|
icon="cross2"
|
||||||
|
@click.native.stop="updateValue('country', null, true)"
|
||||||
|
/>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
props: {
|
||||||
|
countries: {
|
||||||
|
type: Array,
|
||||||
|
default: () => [],
|
||||||
|
},
|
||||||
|
selectedCountry: {
|
||||||
|
type: String,
|
||||||
|
default: null,
|
||||||
|
},
|
||||||
|
updateValue: {
|
||||||
|
type: Function,
|
||||||
|
default: null,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.countries:not(:last-child) {
|
||||||
|
border-bottom: solid 1px var(--shadow-hint);
|
||||||
|
}
|
||||||
|
|
||||||
|
.country {
|
||||||
|
width: 15rem;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
.flag {
|
||||||
|
width: 1.25rem;
|
||||||
|
padding: .25rem .5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
padding: .25rem .5rem;;
|
||||||
|
fill: var(--shadow);
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
fill: var(--shadow-strong);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: var(--shadow-hint);
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.selected {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.country-name {
|
||||||
|
flex-grow: 1;
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
padding: .25rem .5rem;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
v-if="actor"
|
v-if="actor"
|
||||||
class="actor"
|
class="actor"
|
||||||
>
|
>
|
||||||
<router-link
|
<RouterLink
|
||||||
:to="{ name: 'actor', params: { actorId: actor.id, actorSlug: actor.slug } }"
|
:to="{ name: 'actor', params: { actorId: actor.id, actorSlug: actor.slug } }"
|
||||||
class="link"
|
class="link"
|
||||||
>
|
>
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
class="name"
|
class="name"
|
||||||
>{{ actor.name }}</span>
|
>{{ actor.name }}</span>
|
||||||
|
|
||||||
<router-link
|
<RouterLink
|
||||||
v-if="actor.entity"
|
v-if="actor.entity"
|
||||||
v-tooltip="actor.entity.name"
|
v-tooltip="actor.entity.name"
|
||||||
:to="{ name: actor.entity.type, params: { entitySlug: actor.entity.slug, range: 'new', pageNumber: 1 } }"
|
:to="{ name: actor.entity.type, params: { entitySlug: actor.entity.slug, range: 'new', pageNumber: 1 } }"
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
:src="`/img/logos/${actor.entity.slug}/favicon_dark.png`"
|
:src="`/img/logos/${actor.entity.slug}/favicon_dark.png`"
|
||||||
class="favicon-icon"
|
class="favicon-icon"
|
||||||
>
|
>
|
||||||
</router-link>
|
</RouterLink>
|
||||||
|
|
||||||
<Icon
|
<Icon
|
||||||
v-if="alias"
|
v-if="alias"
|
||||||
@@ -60,19 +60,26 @@
|
|||||||
></span>
|
></span>
|
||||||
|
|
||||||
<Icon
|
<Icon
|
||||||
v-show="favorited"
|
v-show="(!stash || stash.primary) && favorited"
|
||||||
icon="heart7"
|
icon="heart7"
|
||||||
class="stash stashed"
|
class="stash stashed"
|
||||||
@click.prevent.native="unstashActor"
|
@click.prevent.native="unstashActor"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<Icon
|
<Icon
|
||||||
v-show="favorited === false"
|
v-show="(!stash || stash.primary) && favorited === false"
|
||||||
icon="heart8"
|
icon="heart8"
|
||||||
class="stash unstashed"
|
class="stash unstashed"
|
||||||
@click.prevent.native="stashActor"
|
@click.prevent.native="stashActor"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<Icon
|
||||||
|
v-show="stash && !stash.primary"
|
||||||
|
icon="cross2"
|
||||||
|
class="stash unstash"
|
||||||
|
@click.prevent.native="unstashActor"
|
||||||
|
/>
|
||||||
|
|
||||||
<span
|
<span
|
||||||
class="details"
|
class="details"
|
||||||
>
|
>
|
||||||
@@ -122,7 +129,7 @@
|
|||||||
/>
|
/>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</router-link>
|
</RouterLink>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -145,12 +152,14 @@ async function stashActor() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function unstashActor() {
|
async function unstashActor() {
|
||||||
this.favorited = false;
|
if (!this.stash || this.stash.primary) {
|
||||||
|
this.favorited = false;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await this.$store.dispatch('unstashActor', {
|
await this.$store.dispatch('unstashActor', {
|
||||||
actorId: this.actor.id,
|
actorId: this.actor.id,
|
||||||
stashId: this.$store.getters.favorites.id,
|
stashId: this.stash?.id || this.$store.getters.favorites.id,
|
||||||
});
|
});
|
||||||
|
|
||||||
this.$emit('stash', false);
|
this.$emit('stash', false);
|
||||||
@@ -176,6 +185,10 @@ export default {
|
|||||||
type: Object,
|
type: Object,
|
||||||
default: null,
|
default: null,
|
||||||
},
|
},
|
||||||
|
stash: {
|
||||||
|
type: Object,
|
||||||
|
default: null,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
emits: ['stash'],
|
emits: ['stash'],
|
||||||
data() {
|
data() {
|
||||||
@@ -201,7 +214,7 @@ export default {
|
|||||||
display: inline-block;
|
display: inline-block;
|
||||||
position: relative;
|
position: relative;
|
||||||
box-shadow: 0 0 3px var(--darken-weak);
|
box-shadow: 0 0 3px var(--darken-weak);
|
||||||
background: var(--background);
|
background: var(--info);
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|
||||||
&::before {
|
&::before {
|
||||||
@@ -209,6 +222,11 @@ export default {
|
|||||||
display: inline-block;
|
display: inline-block;
|
||||||
padding-bottom: 150%;
|
padding-bottom: 150%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&:hover .unstashed,
|
||||||
|
&:hover .unstash {
|
||||||
|
fill: var(--lighten);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.link {
|
.link {
|
||||||
@@ -219,12 +237,8 @@ export default {
|
|||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
color: var(--text);
|
color: var(--text-light);
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
|
|
||||||
&:hover {
|
|
||||||
color: var(--primary);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.handle {
|
.handle {
|
||||||
@@ -235,7 +249,8 @@ export default {
|
|||||||
box-shadow: 0 0 3px var(--shadow);
|
box-shadow: 0 0 3px var(--shadow);
|
||||||
|
|
||||||
.name {
|
.name {
|
||||||
padding: .5rem;
|
padding: .25rem .5rem;
|
||||||
|
font-size: .9rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.alias {
|
.alias {
|
||||||
@@ -298,8 +313,8 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.stash {
|
.stash {
|
||||||
width: 1.25rem;
|
width: 1.5rem;
|
||||||
height: 1.25rem;
|
height: 1.5rem;
|
||||||
padding: .25rem .25rem .5rem .5rem;
|
padding: .25rem .25rem .5rem .5rem;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
@@ -307,10 +322,15 @@ export default {
|
|||||||
fill: var(--lighten-weak);
|
fill: var(--lighten-weak);
|
||||||
filter: drop-shadow(0 0 2px var(--darken));
|
filter: drop-shadow(0 0 2px var(--darken));
|
||||||
|
|
||||||
&:hover,
|
&:hover.unstashed,
|
||||||
&.stashed {
|
&.stashed {
|
||||||
fill: var(--primary);
|
fill: var(--primary);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&:hover.unstash {
|
||||||
|
fill: var(--text-light);
|
||||||
|
filter: drop-shadow(0 0 2px var(--darken-weak));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.details {
|
.details {
|
||||||
|
|||||||
@@ -46,7 +46,7 @@
|
|||||||
/>
|
/>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<template v-slot:tooltip>
|
<template #tooltip>
|
||||||
<Search
|
<Search
|
||||||
content="actors"
|
content="actors"
|
||||||
@select="actor => addActor(actor)"
|
@select="actor => addActor(actor)"
|
||||||
@@ -88,7 +88,7 @@
|
|||||||
/>
|
/>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<template v-slot:tooltip>
|
<template #tooltip>
|
||||||
<Search
|
<Search
|
||||||
content="tags"
|
content="tags"
|
||||||
:defaults="['anal', 'blowbang', 'mfm', 'dp', 'gangbang', 'airtight']"
|
:defaults="['anal', 'blowbang', 'mfm', 'dp', 'gangbang', 'airtight']"
|
||||||
@@ -126,7 +126,7 @@
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<template v-slot:tooltip>
|
<template #tooltip>
|
||||||
<Search
|
<Search
|
||||||
label="Search channels"
|
label="Search channels"
|
||||||
content="entities"
|
content="entities"
|
||||||
@@ -181,7 +181,7 @@
|
|||||||
/>
|
/>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<template v-slot:tooltip>
|
<template #tooltip>
|
||||||
<Search
|
<Search
|
||||||
content="stashes"
|
content="stashes"
|
||||||
@select="stash => addStash(stash)"
|
@select="stash => addStash(stash)"
|
||||||
@@ -194,6 +194,7 @@
|
|||||||
|
|
||||||
<div class="dialog-actions right">
|
<div class="dialog-actions right">
|
||||||
<button
|
<button
|
||||||
|
:disabled="actors.length === 0 && tags.length === 0 && !entity"
|
||||||
type="submit"
|
type="submit"
|
||||||
class="button button-primary"
|
class="button button-primary"
|
||||||
>Add alert</button>
|
>Add alert</button>
|
||||||
@@ -210,19 +211,19 @@ import Search from './search.vue';
|
|||||||
|
|
||||||
async function addAlert() {
|
async function addAlert() {
|
||||||
await this.$store.dispatch('addAlert', {
|
await this.$store.dispatch('addAlert', {
|
||||||
actors: this.actors.map(actor => actor.id),
|
actors: this.actors.map((actor) => actor.id),
|
||||||
tags: this.tags.map(tag => tag.id),
|
tags: this.tags.map((tag) => tag.id),
|
||||||
entity: this.entity?.id,
|
entity: this.entity?.id,
|
||||||
notify: this.notify,
|
notify: this.notify,
|
||||||
email: this.email,
|
email: this.email,
|
||||||
stashes: this.stashes.map(stash => stash.id),
|
stashes: this.stashes.map((stash) => stash.id),
|
||||||
});
|
});
|
||||||
|
|
||||||
this.$emit('close', true);
|
this.$emit('close', true);
|
||||||
}
|
}
|
||||||
|
|
||||||
function addActor(actor) {
|
function addActor(actor) {
|
||||||
if (!this.actors.some(selectedActor => selectedActor.id === actor.id)) {
|
if (!this.actors.some((selectedActor) => selectedActor.id === actor.id)) {
|
||||||
this.actors = this.actors.concat(actor);
|
this.actors = this.actors.concat(actor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -235,7 +236,7 @@ function addEntity(entity) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function addTag(tag) {
|
function addTag(tag) {
|
||||||
if (!this.tags.some(selectedTag => selectedTag.id === tag.id)) {
|
if (!this.tags.some((selectedTag) => selectedTag.id === tag.id)) {
|
||||||
this.tags = this.tags.concat(tag);
|
this.tags = this.tags.concat(tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -243,7 +244,7 @@ function addTag(tag) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function removeActor(actor) {
|
function removeActor(actor) {
|
||||||
this.actors = this.actors.filter(listedActor => listedActor.id !== actor.id);
|
this.actors = this.actors.filter((listedActor) => listedActor.id !== actor.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
function removeEntity() {
|
function removeEntity() {
|
||||||
@@ -251,11 +252,11 @@ function removeEntity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function removeTag(tag) {
|
function removeTag(tag) {
|
||||||
this.tags = this.tags.filter(listedTag => listedTag.id !== tag.id);
|
this.tags = this.tags.filter((listedTag) => listedTag.id !== tag.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
function addStash(stash) {
|
function addStash(stash) {
|
||||||
if (!this.stashes.some(selectedStash => selectedStash.id === stash.id)) {
|
if (!this.stashes.some((selectedStash) => selectedStash.id === stash.id)) {
|
||||||
this.stashes = this.stashes.concat(stash);
|
this.stashes = this.stashes.concat(stash);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -263,7 +264,7 @@ function addStash(stash) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function removeStash(stash) {
|
function removeStash(stash) {
|
||||||
this.stashes = this.stashes.filter(listedStash => listedStash.id !== stash.id);
|
this.stashes = this.stashes.filter((listedStash) => listedStash.id !== stash.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
@@ -273,6 +274,7 @@ export default {
|
|||||||
Entity,
|
Entity,
|
||||||
Search,
|
Search,
|
||||||
},
|
},
|
||||||
|
emits: ['close'],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
actors: [],
|
actors: [],
|
||||||
@@ -284,7 +286,6 @@ export default {
|
|||||||
availableStashes: this.$store.state.auth.user.stashes,
|
availableStashes: this.$store.state.auth.user.stashes,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
emits: ['close'],
|
|
||||||
methods: {
|
methods: {
|
||||||
addActor,
|
addActor,
|
||||||
addAlert,
|
addAlert,
|
||||||
|
|||||||
@@ -43,11 +43,12 @@
|
|||||||
<script>
|
<script>
|
||||||
async function search() {
|
async function search() {
|
||||||
if (this.content === 'actors') {
|
if (this.content === 'actors') {
|
||||||
this.results = await this.$store.dispatch('searchActors', {
|
const { actors } = await this.$store.dispatch('fetchActors', {
|
||||||
query: this.query,
|
query: this.query,
|
||||||
minLength: 1,
|
|
||||||
limit: 10,
|
limit: 10,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this.results = actors;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.content === 'entities') {
|
if (this.content === 'entities') {
|
||||||
|
|||||||
@@ -35,11 +35,11 @@
|
|||||||
class="button button-primary"
|
class="button button-primary"
|
||||||
>Log in</button>
|
>Log in</button>
|
||||||
|
|
||||||
<router-link
|
<RouterLink
|
||||||
v-if="$store.state.auth.signup"
|
v-if="$store.state.auth.signup"
|
||||||
:to="{ name: 'signup', query: { ref: $route.query.ref } }"
|
:to="{ name: 'signup', query: { ref: $route.query.ref } }"
|
||||||
class="link link-external signup"
|
class="link link-external signup"
|
||||||
>Sign up</router-link>
|
>Sign up</RouterLink>
|
||||||
</template>
|
</template>
|
||||||
</form>
|
</form>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -43,11 +43,11 @@
|
|||||||
class="button button-primary"
|
class="button button-primary"
|
||||||
>Sign up</button>
|
>Sign up</button>
|
||||||
|
|
||||||
<router-link
|
<RouterLink
|
||||||
v-if="$store.state.auth.login"
|
v-if="$store.state.auth.login"
|
||||||
:to="{ name: 'login', query: { ref: $route.query.ref } }"
|
:to="{ name: 'login', query: { ref: $route.query.ref } }"
|
||||||
class="link link-external login"
|
class="link link-external login"
|
||||||
>Log in</router-link>
|
>Log in</RouterLink>
|
||||||
</template>
|
</template>
|
||||||
</form>
|
</form>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ async function setConsent(consent, includeQueer) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (includeQueer) {
|
if (includeQueer) {
|
||||||
this.$store.dispatch('setTagFilter', this.$store.state.ui.tagFilter.filter(tag => !['gay', 'bisexual', 'transsexual'].includes(tag)));
|
this.$store.dispatch('setTagFilter', this.$store.state.ui.tagFilter.filter((tag) => !['gay', 'bisexual', 'transsexual'].includes(tag)));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -116,6 +116,7 @@ export default {
|
|||||||
::v-deep(.dialog-body) {
|
::v-deep(.dialog-body) {
|
||||||
padding: 1rem;
|
padding: 1rem;
|
||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
|
overflow-y: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
::v-deep(.dialog-section:not(:last-child)) {
|
::v-deep(.dialog-section:not(:last-child)) {
|
||||||
|
|||||||
@@ -51,7 +51,7 @@
|
|||||||
>{{ tag.name }}</li>
|
>{{ tag.name }}</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<router-link
|
<RouterLink
|
||||||
v-if="entity.parent"
|
v-if="entity.parent"
|
||||||
:to="`/${entity.parent.type}/${entity.parent.slug}`"
|
:to="`/${entity.parent.type}/${entity.parent.slug}`"
|
||||||
class="link link-parent"
|
class="link link-parent"
|
||||||
@@ -74,7 +74,7 @@
|
|||||||
>{{ entity.parent.name }}</h3>
|
>{{ entity.parent.name }}</h3>
|
||||||
|
|
||||||
<Icon icon="device_hub" />
|
<Icon icon="device_hub" />
|
||||||
</router-link>
|
</RouterLink>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
@@ -108,10 +108,14 @@
|
|||||||
:fetch-releases="fetchEntity"
|
:fetch-releases="fetchEntity"
|
||||||
:items-total="totalCount"
|
:items-total="totalCount"
|
||||||
:items-per-page="limit"
|
:items-per-page="limit"
|
||||||
|
:available-tags="entity.tags"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<div class="releases">
|
<div class="releases">
|
||||||
<Releases :releases="entity.releases" />
|
<Releases
|
||||||
|
:releases="entity.releases"
|
||||||
|
:done="done"
|
||||||
|
/>
|
||||||
|
|
||||||
<Pagination
|
<Pagination
|
||||||
:items-total="totalCount"
|
:items-total="totalCount"
|
||||||
@@ -134,6 +138,7 @@ import Scroll from '../scroll/scroll.vue';
|
|||||||
import Campaign from '../campaigns/campaign.vue';
|
import Campaign from '../campaigns/campaign.vue';
|
||||||
|
|
||||||
async function fetchEntity(scroll = true) {
|
async function fetchEntity(scroll = true) {
|
||||||
|
this.done = false;
|
||||||
this.entityUrl = null;
|
this.entityUrl = null;
|
||||||
|
|
||||||
const { entity, totalCount } = await this.$store.dispatch('fetchEntityBySlugAndType', {
|
const { entity, totalCount } = await this.$store.dispatch('fetchEntityBySlugAndType', {
|
||||||
@@ -149,8 +154,8 @@ async function fetchEntity(scroll = true) {
|
|||||||
|
|
||||||
this.pageTitle = entity.name;
|
this.pageTitle = entity.name;
|
||||||
|
|
||||||
const campaign = entity.campaigns.find(campaignX => !campaignX.banner)
|
const campaign = entity.campaigns.find((campaignX) => !campaignX.banner)
|
||||||
|| entity.parent?.campaigns.find(campaignX => !campaignX.banner);
|
|| entity.parent?.campaigns.find((campaignX) => !campaignX.banner);
|
||||||
|
|
||||||
const affiliateParams = new URLSearchParams({
|
const affiliateParams = new URLSearchParams({
|
||||||
...(entity.url && Object.fromEntries(new URL(entity.url).searchParams)), // preserve any query in entity URL, e.g. ?siteId=5
|
...(entity.url && Object.fromEntries(new URL(entity.url).searchParams)), // preserve any query in entity URL, e.g. ?siteId=5
|
||||||
@@ -158,6 +163,7 @@ async function fetchEntity(scroll = true) {
|
|||||||
}).toString();
|
}).toString();
|
||||||
|
|
||||||
this.entityUrl = campaign?.url || campaign?.affiliate?.url || `${entity.url}${campaign?.affiliate?.parameters ? `?${affiliateParams}` : ''}`;
|
this.entityUrl = campaign?.url || campaign?.affiliate?.url || `${entity.url}${campaign?.affiliate?.parameters ? `?${affiliateParams}` : ''}`;
|
||||||
|
this.done = true;
|
||||||
|
|
||||||
if (scroll && this.$refs.filter?.$el) {
|
if (scroll && this.$refs.filter?.$el) {
|
||||||
this.$refs.filter.$el.scrollIntoView();
|
this.$refs.filter.$el.scrollIntoView();
|
||||||
@@ -189,6 +195,7 @@ export default {
|
|||||||
entity: null,
|
entity: null,
|
||||||
pageTitle: null,
|
pageTitle: null,
|
||||||
totalCount: null,
|
totalCount: null,
|
||||||
|
done: false,
|
||||||
limit: Number(this.$route.query.limit) || 20,
|
limit: Number(this.$route.query.limit) || 20,
|
||||||
expanded: false,
|
expanded: false,
|
||||||
entityUrl: null,
|
entityUrl: null,
|
||||||
|
|||||||
@@ -4,39 +4,49 @@
|
|||||||
:title="entity.name"
|
:title="entity.name"
|
||||||
class="tile"
|
class="tile"
|
||||||
>
|
>
|
||||||
<template v-if="entity.hasLogo">
|
<div class="tile-logo">
|
||||||
<img
|
<template v-if="entity.hasLogo">
|
||||||
v-if="entity.type === 'network' || entity.independent"
|
<img
|
||||||
:src="`/img/logos/${entity.slug}/thumbs/network.png`"
|
v-if="entity.type === 'network' || entity.independent"
|
||||||
:alt="entity.name"
|
:src="`/img/logos/${entity.slug}/thumbs/network.png`"
|
||||||
loading="lazy"
|
:alt="entity.name"
|
||||||
class="logo"
|
loading="lazy"
|
||||||
@load="$emit('load', $event)"
|
class="logo"
|
||||||
>
|
@load="$emit('load', $event)"
|
||||||
|
>
|
||||||
|
|
||||||
<img
|
<img
|
||||||
v-else-if="entity.parent"
|
v-else-if="entity.parent"
|
||||||
:src="`/img/logos/${entity.parent.slug}/thumbs/${entity.slug}.png`"
|
:src="`/img/logos/${entity.parent.slug}/thumbs/${entity.slug}.png`"
|
||||||
:alt="entity.name"
|
:alt="entity.name"
|
||||||
loading="lazy"
|
loading="lazy"
|
||||||
class="logo"
|
class="logo"
|
||||||
@load="$emit('load', $event)"
|
@load="$emit('load', $event)"
|
||||||
>
|
>
|
||||||
|
|
||||||
<img
|
<img
|
||||||
|
v-else
|
||||||
|
:src="`/img/logos/${entity.slug}/thumbs/${entity.slug}.png`"
|
||||||
|
:alt="entity.name"
|
||||||
|
loading="lazy"
|
||||||
|
class="logo"
|
||||||
|
@load="$emit('load', $event)"
|
||||||
|
>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<span
|
||||||
v-else
|
v-else
|
||||||
:src="`/img/logos/${entity.slug}/thumbs/${entity.slug}.png`"
|
class="name"
|
||||||
:alt="entity.name"
|
>{{ entity.name }}</span>
|
||||||
loading="lazy"
|
</div>
|
||||||
class="logo"
|
|
||||||
@load="$emit('load', $event)"
|
|
||||||
>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<span
|
<span
|
||||||
v-else
|
v-if="entity.childrenTotal > 0 || typeof entity.sceneTotal !== 'undefined'"
|
||||||
class="name"
|
class="count"
|
||||||
>{{ entity.name }}</span>
|
>
|
||||||
|
<span v-if="typeof entity.sceneTotal !== 'undefined'">{{ entity.sceneTotal }} scenes</span>
|
||||||
|
<span v-if="entity.type === 'network'">{{ entity.childrenTotal }} channels</span>
|
||||||
|
</span>
|
||||||
</router-link>
|
</router-link>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -59,15 +69,28 @@ export default {
|
|||||||
height: 100%;
|
height: 100%;
|
||||||
background: var(--tile);
|
background: var(--tile);
|
||||||
display: flex;
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
padding: .5rem 1rem;
|
|
||||||
border-radius: .25rem;
|
border-radius: .25rem;
|
||||||
|
position: relative;
|
||||||
box-shadow: 0 0 3px rgba(0, 0, 0, .25);
|
box-shadow: 0 0 3px rgba(0, 0, 0, .25);
|
||||||
text-align: center;
|
text-align: center;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
&:hover .count {
|
||||||
|
bottom: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.tile-logo {
|
||||||
|
display: flex;
|
||||||
|
flex-grow: 1;
|
||||||
|
padding: .5rem 1rem;
|
||||||
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.logo {
|
.logo {
|
||||||
@@ -75,11 +98,30 @@ export default {
|
|||||||
max-height: 100%;
|
max-height: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
align-self: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.name {
|
.name {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
color: var(--text-light);
|
color: var(--text-light);
|
||||||
font-size: 1.25rem;
|
font-size: 1.25rem;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.count {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
width: 100%;
|
||||||
|
position: absolute;
|
||||||
|
bottom: -1.75rem;
|
||||||
|
box-sizing: border-box;
|
||||||
|
padding: .25rem .5rem;
|
||||||
|
background: var(--darken-strong);
|
||||||
|
box-shadow: 0 0 3px var(--darken);
|
||||||
|
color: var(--text-light);
|
||||||
|
text-align: center;
|
||||||
|
text-shadow: 1px 1px var(--darken);
|
||||||
|
transition: bottom .1s ease;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,41 +1,33 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="filter-bar noselect">
|
<div class="filter-bar noselect">
|
||||||
<div class="sort">
|
<div class="sort">
|
||||||
<router-link
|
<RouterLink
|
||||||
:to="{ params: { range: 'latest', pageNumber: 1 }, query: $route.query }"
|
v-for="section in ranges"
|
||||||
:class="{ active: $route.name === 'latest' || range === 'latest' }"
|
:key="section"
|
||||||
|
:to="{ params: { range: section, pageNumber: 1 }, query: $route.query }"
|
||||||
|
:class="{ active: $route.name === section || range === section }"
|
||||||
class="range range-button"
|
class="range range-button"
|
||||||
>Latest</router-link>
|
>{{ section }}</RouterLink>
|
||||||
|
|
||||||
<router-link
|
|
||||||
:to="{ params: { range: 'upcoming', pageNumber: 1 }, query: $route.query }"
|
|
||||||
:class="{ active: $route.name === 'upcoming' || range === 'upcoming' }"
|
|
||||||
class="range-button"
|
|
||||||
>Upcoming</router-link>
|
|
||||||
|
|
||||||
<router-link
|
|
||||||
:to="{ params: { range: 'new', pageNumber: 1 }, query: $route.query }"
|
|
||||||
:class="{ active: $route.name === 'new' || range === 'new' }"
|
|
||||||
class="range-button"
|
|
||||||
>New</router-link>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<span
|
||||||
|
v-if="itemsTotal && showTotal"
|
||||||
|
class="total"
|
||||||
|
>{{ itemsTotal }} <template v-if="itemsTotal === 1">scene</template><template v-else>scenes</template></span>
|
||||||
|
|
||||||
<div class="filters">
|
<div class="filters">
|
||||||
<ActorFilter
|
<ActorFilter
|
||||||
class="filters-filter"
|
class="filters-filter"
|
||||||
:filter="filter"
|
|
||||||
:available-actors="availableActors"
|
:available-actors="availableActors"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<ChannelFilter
|
<ChannelFilter
|
||||||
class="filters-filter"
|
class="filters-filter"
|
||||||
:filter="filter"
|
|
||||||
:available-channels="availableChannels"
|
:available-channels="availableChannels"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<TagFilter
|
<TagFilter
|
||||||
class="filters-filter"
|
class="filters-filter"
|
||||||
:filter="filter"
|
|
||||||
:available-tags="availableTags"
|
:available-tags="availableTags"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@@ -49,10 +41,6 @@ import ActorFilter from './actor-filter.vue';
|
|||||||
import ChannelFilter from './channel-filter.vue';
|
import ChannelFilter from './channel-filter.vue';
|
||||||
import TagFilter from './tag-filter.vue';
|
import TagFilter from './tag-filter.vue';
|
||||||
|
|
||||||
function filter(state) {
|
|
||||||
return state.ui.filter;
|
|
||||||
}
|
|
||||||
|
|
||||||
function range() {
|
function range() {
|
||||||
return this.$route.params.range;
|
return this.$route.params.range;
|
||||||
}
|
}
|
||||||
@@ -88,6 +76,10 @@ export default {
|
|||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false,
|
default: false,
|
||||||
},
|
},
|
||||||
|
showTotal: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true,
|
||||||
|
},
|
||||||
itemsTotal: {
|
itemsTotal: {
|
||||||
type: Number,
|
type: Number,
|
||||||
default: 0,
|
default: 0,
|
||||||
@@ -96,6 +88,10 @@ export default {
|
|||||||
type: Number,
|
type: Number,
|
||||||
default: 10,
|
default: 10,
|
||||||
},
|
},
|
||||||
|
ranges: {
|
||||||
|
type: Array,
|
||||||
|
default: () => ['latest', 'upcoming', 'new'],
|
||||||
|
},
|
||||||
availableTags: {
|
availableTags: {
|
||||||
type: Array,
|
type: Array,
|
||||||
default: () => [],
|
default: () => [],
|
||||||
@@ -111,7 +107,6 @@ export default {
|
|||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
...mapState({
|
...mapState({
|
||||||
filter,
|
|
||||||
range,
|
range,
|
||||||
batch,
|
batch,
|
||||||
}),
|
}),
|
||||||
@@ -126,6 +121,43 @@ export default {
|
|||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
@import 'breakpoints';
|
@import 'breakpoints';
|
||||||
|
|
||||||
|
.filter {
|
||||||
|
color: var(--shadow);
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.filter-applied {
|
||||||
|
flex-grow: 1;
|
||||||
|
padding: .75rem .5rem;
|
||||||
|
font-size: 1rem;
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
text-align: right;
|
||||||
|
|
||||||
|
&.empty {
|
||||||
|
color: var(--shadow);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
fill: var(--shadow);
|
||||||
|
margin: -.1rem 0 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
.applied {
|
||||||
|
color: var(--shadow-strong);
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
fill: var(--shadow-strong);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.filter-mode {
|
.filter-mode {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
color: var(--shadow);
|
color: var(--shadow);
|
||||||
@@ -246,6 +278,10 @@ export default {
|
|||||||
.filters-filter:last-child .filter {
|
.filters-filter:last-child .filter {
|
||||||
padding: .5rem 0 .5rem .5rem;
|
padding: .5rem 0 .5rem .5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.total {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
@@ -267,43 +303,6 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
::v-deep(.filter) {
|
|
||||||
color: var(--shadow);
|
|
||||||
display: inline-flex;
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
.filter-applied {
|
|
||||||
flex-grow: 1;
|
|
||||||
padding: .75rem .5rem;
|
|
||||||
font-size: 1rem;
|
|
||||||
white-space: nowrap;
|
|
||||||
overflow: hidden;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
text-align: right;
|
|
||||||
|
|
||||||
&.empty {
|
|
||||||
color: var(--shadow);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.icon {
|
|
||||||
fill: var(--shadow);
|
|
||||||
margin: -.1rem 0 0 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
cursor: pointer;
|
|
||||||
|
|
||||||
.applied {
|
|
||||||
color: var(--shadow-strong);
|
|
||||||
}
|
|
||||||
|
|
||||||
.icon {
|
|
||||||
fill: var(--shadow-strong);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.filters {
|
.filters {
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
@@ -324,6 +323,7 @@ export default {
|
|||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
border: solid 1px transparent;
|
border: solid 1px transparent;
|
||||||
border-bottom: none;
|
border-bottom: none;
|
||||||
|
text-transform: capitalize;
|
||||||
|
|
||||||
&:hover:not(.active) {
|
&:hover:not(.active) {
|
||||||
color: var(--shadow-strong);
|
color: var(--shadow-strong);
|
||||||
@@ -356,4 +356,11 @@ export default {
|
|||||||
margin: 0 1rem 0 0;
|
margin: 0 1rem 0 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.total {
|
||||||
|
flex-shrink: 0;
|
||||||
|
padding: 0 1rem;
|
||||||
|
color: var(--shadow);
|
||||||
|
font-size: .8rem;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
>Tags</div>
|
>Tags</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<template v-slot:tooltip>
|
<template #tooltip>
|
||||||
<div
|
<div
|
||||||
class="filter-options"
|
class="filter-options"
|
||||||
@click.stop
|
@click.stop
|
||||||
@@ -70,7 +70,7 @@
|
|||||||
<script>
|
<script>
|
||||||
function getNewRange(tag) {
|
function getNewRange(tag) {
|
||||||
if (this.selectedTags.includes(tag)) {
|
if (this.selectedTags.includes(tag)) {
|
||||||
return { tags: this.selectedTags.filter(selectedTag => selectedTag !== tag).join(',') || undefined };
|
return { tags: this.selectedTags.filter((selectedTag) => selectedTag !== tag).join(',') || undefined };
|
||||||
}
|
}
|
||||||
|
|
||||||
return { tags: this.selectedTags.concat(tag).join(',') };
|
return { tags: this.selectedTags.concat(tag).join(',') };
|
||||||
@@ -82,10 +82,6 @@ function selectedTags() {
|
|||||||
|
|
||||||
export default {
|
export default {
|
||||||
props: {
|
props: {
|
||||||
filter: {
|
|
||||||
type: Array,
|
|
||||||
default: () => [],
|
|
||||||
},
|
|
||||||
compact: {
|
compact: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false,
|
default: false,
|
||||||
|
|||||||
@@ -1,28 +1,26 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="menu">
|
<div class="menu">
|
||||||
<ul class="menu-items noselect">
|
<ul class="menu-items noselect">
|
||||||
<router-link
|
<RouterLink
|
||||||
v-if="login && me"
|
v-if="login && me"
|
||||||
:to="{ name: 'user', params: { username: me.username } }"
|
:to="{ name: 'user', params: { username: me.username } }"
|
||||||
class="menu-username"
|
class="menu-username"
|
||||||
>{{ me.username }}</router-link>
|
>{{ me.username }}</RouterLink>
|
||||||
|
|
||||||
<router-link
|
<RouterLink
|
||||||
|
v-if="me && favorites"
|
||||||
|
:to="{ name: 'stash', params: { stashId: favorites.id, range: 'scenes', pageNumber: 1 } }"
|
||||||
|
class="menu-item"
|
||||||
|
><Icon icon="heart7" />Favorites</RouterLink>
|
||||||
|
|
||||||
|
<RouterLink
|
||||||
v-else-if="login"
|
v-else-if="login"
|
||||||
:to="{ name: 'login', query: { ref: $route.path } }"
|
:to="{ name: 'login', query: { ref: $route.path } }"
|
||||||
class="menu-item"
|
class="menu-item"
|
||||||
@click.stop
|
@click.stop
|
||||||
>
|
>
|
||||||
<Icon icon="enter2" />Log in
|
<Icon icon="enter2" />Log in
|
||||||
</router-link>
|
</RouterLink>
|
||||||
|
|
||||||
<li
|
|
||||||
v-if="login && me"
|
|
||||||
class="menu-item"
|
|
||||||
@click.stop="$store.dispatch('logout')"
|
|
||||||
>
|
|
||||||
<Icon icon="exit2" />Log out
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li
|
<li
|
||||||
v-show="!sfw"
|
v-show="!sfw"
|
||||||
@@ -74,6 +72,14 @@
|
|||||||
>
|
>
|
||||||
<Icon icon="filter" />Filters
|
<Icon icon="filter" />Filters
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
|
<li
|
||||||
|
v-if="login && me"
|
||||||
|
class="menu-item"
|
||||||
|
@click.stop="$store.dispatch('logout')"
|
||||||
|
>
|
||||||
|
<Icon icon="exit2" />Log out
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -97,6 +103,10 @@ function signup(state) {
|
|||||||
return state.auth.signup;
|
return state.auth.signup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function favorites() {
|
||||||
|
return this.me?.stashes.find(stash => stash.primary);
|
||||||
|
}
|
||||||
|
|
||||||
function me(state) {
|
function me(state) {
|
||||||
return state.auth.user;
|
return state.auth.user;
|
||||||
}
|
}
|
||||||
@@ -118,6 +128,7 @@ export default {
|
|||||||
theme,
|
theme,
|
||||||
me,
|
me,
|
||||||
}),
|
}),
|
||||||
|
favorites,
|
||||||
},
|
},
|
||||||
emits: ['showFilters'],
|
emits: ['showFilters'],
|
||||||
methods: {
|
methods: {
|
||||||
|
|||||||
@@ -8,9 +8,13 @@
|
|||||||
:items-total="totalCount"
|
:items-total="totalCount"
|
||||||
:items-per-page="limit"
|
:items-per-page="limit"
|
||||||
:content="$refs.content"
|
:content="$refs.content"
|
||||||
|
:show-total="false"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<Releases :releases="releases" />
|
<Releases
|
||||||
|
:releases="releases"
|
||||||
|
:done="done"
|
||||||
|
/>
|
||||||
|
|
||||||
<Pagination
|
<Pagination
|
||||||
v-if="totalCount > 0"
|
v-if="totalCount > 0"
|
||||||
@@ -30,6 +34,8 @@ import Releases from '../releases/releases.vue';
|
|||||||
import Pagination from '../pagination/pagination.vue';
|
import Pagination from '../pagination/pagination.vue';
|
||||||
|
|
||||||
async function fetchReleases(scroll = true) {
|
async function fetchReleases(scroll = true) {
|
||||||
|
this.done = false;
|
||||||
|
|
||||||
const { releases, totalCount } = await this.$store.dispatch('fetchReleases', {
|
const { releases, totalCount } = await this.$store.dispatch('fetchReleases', {
|
||||||
limit: this.limit,
|
limit: this.limit,
|
||||||
range: this.$route.params.range,
|
range: this.$route.params.range,
|
||||||
@@ -38,6 +44,7 @@ async function fetchReleases(scroll = true) {
|
|||||||
|
|
||||||
this.totalCount = totalCount;
|
this.totalCount = totalCount;
|
||||||
this.releases = releases;
|
this.releases = releases;
|
||||||
|
this.done = true;
|
||||||
|
|
||||||
if (scroll) {
|
if (scroll) {
|
||||||
this.$refs.filter?.$el.scrollIntoView();
|
this.$refs.filter?.$el.scrollIntoView();
|
||||||
@@ -64,6 +71,7 @@ export default {
|
|||||||
limit: 30,
|
limit: 30,
|
||||||
totalCount: 0,
|
totalCount: 0,
|
||||||
from: null,
|
from: null,
|
||||||
|
done: false,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ export default {
|
|||||||
};
|
};
|
||||||
},
|
},
|
||||||
beforeMount() {
|
beforeMount() {
|
||||||
this.svg = require(`../../img/icons/${this.icon}.svg`).default;
|
this.svg = require(`../../img/icons/${this.icon}.svg`).default; // eslint-disable-line global-require, import/no-dynamic-require
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
90
assets/components/loading/ellipsis.vue
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
<template>
|
||||||
|
<div class="load-container">
|
||||||
|
<div class="load-ellipsis">
|
||||||
|
<div />
|
||||||
|
<div />
|
||||||
|
<div />
|
||||||
|
<div />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.load-container {
|
||||||
|
display: inline-flex;
|
||||||
|
position: relative;
|
||||||
|
padding: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.load-ellipsis {
|
||||||
|
display: inline-block;
|
||||||
|
position: relative;
|
||||||
|
width: 5rem;
|
||||||
|
height: .75rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.load-ellipsis div {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
width: .75rem;
|
||||||
|
height: .75rem;
|
||||||
|
border-radius: 50%;
|
||||||
|
background: var(--primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.load-ellipsis div:nth-child(1) {
|
||||||
|
left: .5rem;
|
||||||
|
animation: load-ellipsis1 0.5s infinite linear;
|
||||||
|
}
|
||||||
|
|
||||||
|
.load-ellipsis div:nth-child(2) {
|
||||||
|
left: .5rem;
|
||||||
|
animation: load-ellipsis2 0.5s infinite linear;
|
||||||
|
}
|
||||||
|
|
||||||
|
.load-ellipsis div:nth-child(3) {
|
||||||
|
left: 2rem;
|
||||||
|
animation: load-ellipsis3 0.5s infinite linear;
|
||||||
|
}
|
||||||
|
|
||||||
|
.load-ellipsis div:nth-child(4) {
|
||||||
|
left: 3.5rem;
|
||||||
|
animation: load-ellipsis4 0.5s infinite linear;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes load-ellipsis1 {
|
||||||
|
0% {
|
||||||
|
transform: scale(0);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
transform: scale(0.5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes load-ellipsis2 {
|
||||||
|
0% {
|
||||||
|
transform: translate(0, 0) scale(0.5);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
transform: translate(1.5rem, 0) scale(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes load-ellipsis3 {
|
||||||
|
0% {
|
||||||
|
transform: translate(0, 0) scale(1);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
transform: translate(1.5rem, 0) scale(0.5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes load-ellipsis4 {
|
||||||
|
0% {
|
||||||
|
transform: scale(0.5);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
transform: scale(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -1,23 +1,41 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="networks">
|
<div class="networks">
|
||||||
<div class="content-inner">
|
<div class="content-inner">
|
||||||
<SearchBar :placeholder="`Search ${channelCount} channels in ${entities.length} networks`" />
|
<SearchBar
|
||||||
|
:placeholder="`Search ${channelCount} channels in ${entities.length} networks`"
|
||||||
|
:eager="true"
|
||||||
|
/>
|
||||||
|
|
||||||
<span
|
<span
|
||||||
v-if="done && entities.length === 0"
|
v-if="done && entities.length === 0"
|
||||||
class="empty"
|
class="empty"
|
||||||
>No results for "{{ $route.query.query }}"</span>
|
>No results for "{{ $route.query.query }}"</span>
|
||||||
|
|
||||||
<div
|
<template v-else>
|
||||||
v-else
|
<h2 class="heading">Popular</h2>
|
||||||
class="entity-tiles"
|
|
||||||
>
|
<div
|
||||||
<Entity
|
class="entity-tiles"
|
||||||
v-for="entity in entities"
|
>
|
||||||
:key="`entity-tile-${entity.slug}`"
|
<Entity
|
||||||
:entity="entity"
|
v-for="entity in popularEntities"
|
||||||
/>
|
:key="entity.parent ? `entity-tile-${entity.parent.slug}-${entity.slug}` : `entity-tile-${entity.slug}`"
|
||||||
</div>
|
:entity="entity"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h2 class="heading">All networks</h2>
|
||||||
|
|
||||||
|
<div
|
||||||
|
class="entity-tiles"
|
||||||
|
>
|
||||||
|
<Entity
|
||||||
|
v-for="entity in entities"
|
||||||
|
:key="entity.parent ? `entity-tile-${entity.parent.slug}-${entity.slug}` : `entity-tile-${entity.slug}`"
|
||||||
|
:entity="entity"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<Footer />
|
<Footer />
|
||||||
@@ -55,6 +73,45 @@ async function searchEntities() {
|
|||||||
this.done = true;
|
this.done = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function popularEntities() {
|
||||||
|
const entitiesBySlug = Object.fromEntries(this.entities.map((entity) => [entity.slug, entity]));
|
||||||
|
|
||||||
|
return [
|
||||||
|
'21sextury',
|
||||||
|
'amateurallure',
|
||||||
|
'analvids',
|
||||||
|
'bamvisions',
|
||||||
|
'bang',
|
||||||
|
'bangbros',
|
||||||
|
'blowpass',
|
||||||
|
'brazzers',
|
||||||
|
'burningangel',
|
||||||
|
'digitalplayground',
|
||||||
|
'dogfartnetwork',
|
||||||
|
'dorcel',
|
||||||
|
'elegantangel',
|
||||||
|
'evilangel',
|
||||||
|
'fakehub',
|
||||||
|
'girlsway',
|
||||||
|
'hookuphotshot',
|
||||||
|
'hussiepass',
|
||||||
|
'insex',
|
||||||
|
'julesjordan',
|
||||||
|
'kellymadison',
|
||||||
|
'kink',
|
||||||
|
'mofos',
|
||||||
|
'naughtyamerica',
|
||||||
|
'newsensations',
|
||||||
|
'pervcity',
|
||||||
|
'pornpros',
|
||||||
|
'private',
|
||||||
|
'realitykings',
|
||||||
|
'twistys',
|
||||||
|
'vixen',
|
||||||
|
'xempire',
|
||||||
|
].map((slug) => entitiesBySlug[slug]).filter(Boolean);
|
||||||
|
}
|
||||||
|
|
||||||
async function mounted() {
|
async function mounted() {
|
||||||
this.pageTitle = 'Channels';
|
this.pageTitle = 'Channels';
|
||||||
|
|
||||||
@@ -79,6 +136,7 @@ export default {
|
|||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
channelCount,
|
channelCount,
|
||||||
|
popularEntities,
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
$route: fetchEntities,
|
$route: fetchEntities,
|
||||||
@@ -127,6 +185,10 @@ export default {
|
|||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.heading {
|
||||||
|
margin: 1rem 0 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
@media(max-width: $breakpoint2) {
|
@media(max-width: $breakpoint2) {
|
||||||
.entity-tiles {
|
.entity-tiles {
|
||||||
grid-gap: .5rem;
|
grid-gap: .5rem;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<div class="media-container">
|
<div class="media-container">
|
||||||
<div
|
<div
|
||||||
class="media"
|
class="media"
|
||||||
:class="{ center: release.photos.length < 2, preview: !me }"
|
:class="{ center: (release.photos?.length || 0) + (release.scenesPhotos?.length || 0) < 2, preview: !me }"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
v-if="release.trailer || release.teaser"
|
v-if="release.trailer || release.teaser"
|
||||||
@@ -38,15 +38,30 @@
|
|||||||
class="item trailer"
|
class="item trailer"
|
||||||
>
|
>
|
||||||
|
|
||||||
<a
|
<span
|
||||||
v-if="release.poster"
|
v-if="release.poster || release.teaser"
|
||||||
v-tooltip="'View poster'"
|
class="poster-links"
|
||||||
:href="getPath(release.poster)"
|
>
|
||||||
:class="{ playing }"
|
<a
|
||||||
target="_blank"
|
v-if="release.teaser"
|
||||||
rel="noopener noreferrer"
|
v-tooltip="'View teaser'"
|
||||||
class="poster-link"
|
:href="getPath(release.teaser)"
|
||||||
><Icon icon="image" /></a>
|
:class="{ playing }"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
class="poster-link"
|
||||||
|
><Icon icon="film4" /></a>
|
||||||
|
|
||||||
|
<a
|
||||||
|
v-if="release.poster"
|
||||||
|
v-tooltip="'View poster'"
|
||||||
|
:href="getPath(release.poster)"
|
||||||
|
:class="{ playing }"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
class="poster-link"
|
||||||
|
><Icon icon="image" /></a>
|
||||||
|
</span>
|
||||||
|
|
||||||
<span
|
<span
|
||||||
v-if="sfw && !playing"
|
v-if="sfw && !playing"
|
||||||
@@ -56,24 +71,28 @@
|
|||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<template v-if="release.covers && release.covers.length > 0">
|
<template v-if="release.covers?.length > 0">
|
||||||
<a
|
<div
|
||||||
v-for="cover in release.covers"
|
v-for="cover in release.covers"
|
||||||
:key="`cover-${cover.id}`"
|
:key="`cover-${cover.id}`"
|
||||||
:href="getPath(cover)"
|
class="item-container"
|
||||||
target="_blank"
|
|
||||||
rel="noopener noreferrer"
|
|
||||||
>
|
>
|
||||||
<img
|
<a
|
||||||
:src="getPath(cover, 'thumbnail')"
|
:href="getPath(cover)"
|
||||||
:style="{ 'background-image': getBgPath(cover, 'lazy') }"
|
target="_blank"
|
||||||
:width="cover.thumbnailWidth"
|
rel="noopener noreferrer"
|
||||||
:height="cover.thumbnailHeight"
|
|
||||||
class="item cover"
|
|
||||||
loading="lazy"
|
|
||||||
@load="$emit('load', $event)"
|
|
||||||
>
|
>
|
||||||
</a>
|
<img
|
||||||
|
:src="getPath(cover, 'thumbnail')"
|
||||||
|
:style="{ 'background-image': getBgPath(cover, 'lazy') }"
|
||||||
|
:width="cover.thumbnailWidth"
|
||||||
|
:height="cover.thumbnailHeight"
|
||||||
|
class="item cover"
|
||||||
|
loading="lazy"
|
||||||
|
@load="$emit('load', $event)"
|
||||||
|
>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
@@ -149,8 +168,8 @@ function poster() {
|
|||||||
function photos() {
|
function photos() {
|
||||||
const clips = this.release.clips || [];
|
const clips = this.release.clips || [];
|
||||||
const clipPostersById = clips.reduce((acc, clip) => ({ ...acc, [clip.poster.id]: clip.poster }), {});
|
const clipPostersById = clips.reduce((acc, clip) => ({ ...acc, [clip.poster.id]: clip.poster }), {});
|
||||||
const uniqueClipPosters = Array.from(new Set(clips.map(clip => clip.poster.id) || [])).map(posterId => clipPostersById[posterId]);
|
const uniqueClipPosters = Array.from(new Set(clips.map((clip) => clip.poster.id) || [])).map((posterId) => clipPostersById[posterId]);
|
||||||
const photosWithClipPosters = (this.release.photos || []).concat(uniqueClipPosters);
|
const photosWithClipPosters = (this.release.photos || []).concat(this.release.scenesPhotos || []).concat(uniqueClipPosters);
|
||||||
|
|
||||||
if (this.release.trailer || (this.release.teaser && this.release.teaser.mime !== 'image/gif')) {
|
if (this.release.trailer || (this.release.teaser && this.release.teaser.mime !== 'image/gif')) {
|
||||||
// poster will be on trailer video
|
// poster will be on trailer video
|
||||||
@@ -217,11 +236,16 @@ export default {
|
|||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.poster-link {
|
.poster-links {
|
||||||
|
display: flex;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: .5rem;
|
top: 0;
|
||||||
right: .5rem;
|
right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.poster-link {
|
||||||
transition: opacity .1s ease;
|
transition: opacity .1s ease;
|
||||||
|
padding: .5rem;
|
||||||
|
|
||||||
.icon {
|
.icon {
|
||||||
width: 1.5rem;
|
width: 1.5rem;
|
||||||
@@ -234,6 +258,14 @@ export default {
|
|||||||
opacity: 0;
|
opacity: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&:first-child {
|
||||||
|
padding-left: .75rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
padding-right: .75rem;
|
||||||
|
}
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<Details :release="movie" />
|
<Details :release="movie" />
|
||||||
|
|
||||||
<div class="movie">
|
<div class="movie">
|
||||||
<router-link
|
<RouterLink
|
||||||
:to="{ name: 'movie', params: { releaseId: movie.id, releaseSlug: movie.slug } }"
|
:to="{ name: 'movie', params: { releaseId: movie.id, releaseSlug: movie.slug } }"
|
||||||
class="cover"
|
class="cover"
|
||||||
>
|
>
|
||||||
@@ -13,15 +13,42 @@
|
|||||||
:style="{ 'background-image': getBgPath(movie.covers[0], 'lazy') }"
|
:style="{ 'background-image': getBgPath(movie.covers[0], 'lazy') }"
|
||||||
loading="lazy"
|
loading="lazy"
|
||||||
>
|
>
|
||||||
</router-link>
|
|
||||||
|
<div
|
||||||
|
v-else
|
||||||
|
:title="movie.title"
|
||||||
|
class="unavailable"
|
||||||
|
><Icon icon="blocked" /></div>
|
||||||
|
|
||||||
|
<Icon
|
||||||
|
v-show="(!stash || stash.primary) && favorited"
|
||||||
|
icon="heart7"
|
||||||
|
class="stash stashed"
|
||||||
|
@click.prevent.native="unstashMovie"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<Icon
|
||||||
|
v-show="(!stash || stash.primary) && favorited === false"
|
||||||
|
icon="heart8"
|
||||||
|
class="stash unstashed"
|
||||||
|
@click.prevent.native="stashMovie"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<Icon
|
||||||
|
v-show="stash && !stash.primary"
|
||||||
|
icon="cross2"
|
||||||
|
class="stash unstash"
|
||||||
|
@click.prevent.native="unstashMovie"
|
||||||
|
/>
|
||||||
|
</RouterLink>
|
||||||
|
|
||||||
<div class="info">
|
<div class="info">
|
||||||
<router-link
|
<RouterLink
|
||||||
:to="{ name: 'movie', params: { releaseId: movie.id, releaseSlug: movie.slug } }"
|
:to="{ name: 'movie', params: { releaseId: movie.id, releaseSlug: movie.slug } }"
|
||||||
class="title-link"
|
class="title-link"
|
||||||
>
|
>
|
||||||
<h3 class="title">{{ movie.title }}</h3>
|
<h3 class="title">{{ movie.title }}</h3>
|
||||||
</router-link>
|
</RouterLink>
|
||||||
|
|
||||||
<ul
|
<ul
|
||||||
class="actors nolist"
|
class="actors nolist"
|
||||||
@@ -31,10 +58,10 @@
|
|||||||
v-for="actor in movie.actors"
|
v-for="actor in movie.actors"
|
||||||
:key="`tag-${movie.id}-${actor.id}`"
|
:key="`tag-${movie.id}-${actor.id}`"
|
||||||
class="actor"
|
class="actor"
|
||||||
><router-link
|
><RouterLink
|
||||||
:to="`/actor/${actor.id}/${actor.slug}`"
|
:to="`/actor/${actor.id}/${actor.slug}`"
|
||||||
class="actor-link"
|
class="actor-link"
|
||||||
>{{ actor.name }}</router-link></li>
|
>{{ actor.name }}</RouterLink></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<ul
|
<ul
|
||||||
@@ -45,10 +72,10 @@
|
|||||||
v-for="tag in movie.tags"
|
v-for="tag in movie.tags"
|
||||||
:key="`tag-${movie.id}-${tag.id}`"
|
:key="`tag-${movie.id}-${tag.id}`"
|
||||||
class="tag"
|
class="tag"
|
||||||
><router-link
|
><RouterLink
|
||||||
:to="`/tag/${tag.slug}`"
|
:to="`/tag/${tag.slug}`"
|
||||||
class="tag-link"
|
class="tag-link"
|
||||||
>{{ tag.name }}</router-link></li>
|
>{{ tag.name }}</RouterLink></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -58,6 +85,38 @@
|
|||||||
<script>
|
<script>
|
||||||
import Details from './tile-details.vue';
|
import Details from './tile-details.vue';
|
||||||
|
|
||||||
|
async function stashMovie() {
|
||||||
|
this.favorited = true;
|
||||||
|
|
||||||
|
try {
|
||||||
|
await this.$store.dispatch('stashMovie', {
|
||||||
|
movieId: this.movie.id,
|
||||||
|
stashId: this.$store.getters.favorites.id,
|
||||||
|
});
|
||||||
|
|
||||||
|
this.$emit('stash', true);
|
||||||
|
} catch (error) {
|
||||||
|
this.favorited = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function unstashMovie() {
|
||||||
|
if (!this.stash || this.stash.primary) {
|
||||||
|
this.favorited = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
await this.$store.dispatch('unstashMovie', {
|
||||||
|
movieId: this.movie.id,
|
||||||
|
stashId: this.stash?.id || this.$store.getters.favorites.id,
|
||||||
|
});
|
||||||
|
|
||||||
|
this.$emit('stash', false);
|
||||||
|
} catch (error) {
|
||||||
|
this.favorited = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function sfw() {
|
function sfw() {
|
||||||
return this.$store.state.ui.sfw;
|
return this.$store.state.ui.sfw;
|
||||||
}
|
}
|
||||||
@@ -71,10 +130,23 @@ export default {
|
|||||||
type: Object,
|
type: Object,
|
||||||
default: null,
|
default: null,
|
||||||
},
|
},
|
||||||
|
stash: {
|
||||||
|
type: Object,
|
||||||
|
default: null,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
favorited: this.movie.isFavorited,
|
||||||
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
sfw,
|
sfw,
|
||||||
},
|
},
|
||||||
|
methods: {
|
||||||
|
stashMovie,
|
||||||
|
unstashMovie,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@@ -87,10 +159,14 @@ export default {
|
|||||||
background: var(--background);
|
background: var(--background);
|
||||||
box-shadow: 0 0 3px var(--darken-weak);
|
box-shadow: 0 0 3px var(--darken-weak);
|
||||||
font-size: 0;
|
font-size: 0;
|
||||||
|
|
||||||
|
&:hover .unstashed,
|
||||||
|
&:hover .unstash {
|
||||||
|
fill: var(--lighten);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.movie {
|
.movie {
|
||||||
height: 16rem;
|
|
||||||
display: flex;
|
display: flex;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -100,17 +176,30 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.cover {
|
.cover {
|
||||||
height: 100%;
|
height: 16rem;
|
||||||
|
width: 11.25rem;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
flex-shrink: 0;
|
||||||
|
position: relative;
|
||||||
box-shadow: 0 0 3px var(--darken-weak);
|
box-shadow: 0 0 3px var(--darken-weak);
|
||||||
|
background-color: var(--shadow-hint);
|
||||||
|
|
||||||
img {
|
img {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
max-width: 12rem;
|
width: 100%;
|
||||||
background-position: center;
|
background-position: center;
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
object-fit: cover;
|
object-fit: cover;
|
||||||
object-position: center;
|
object-position: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.unavailable .icon {
|
||||||
|
width: 2rem;
|
||||||
|
height: 2rem;
|
||||||
|
fill: var(--shadow-hint);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.info {
|
.info {
|
||||||
@@ -179,9 +268,31 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.stash {
|
||||||
|
width: 1.5rem;
|
||||||
|
height: 1.5rem;
|
||||||
|
padding: .25rem .5rem .5rem .5rem;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
fill: var(--lighten-weak);
|
||||||
|
filter: drop-shadow(0 0 2px var(--darken));
|
||||||
|
|
||||||
|
&:hover.unstashed,
|
||||||
|
&.stashed {
|
||||||
|
fill: var(--primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover.unstash {
|
||||||
|
fill: var(--text-light);
|
||||||
|
filter: drop-shadow(0 0 2px var(--darken-weak));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@media(max-width: $breakpoint-kilo) {
|
@media(max-width: $breakpoint-kilo) {
|
||||||
.movie {
|
.cover {
|
||||||
height: 12rem;
|
height: 12rem;
|
||||||
|
width: 8.25rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ensure no half actor names show */
|
/* ensure no half actor names show */
|
||||||
|
|||||||
@@ -3,7 +3,10 @@
|
|||||||
<div class="content-inner">
|
<div class="content-inner">
|
||||||
<SearchBar :placeholder="`Search ${totalCount} movies`" />
|
<SearchBar :placeholder="`Search ${totalCount} movies`" />
|
||||||
|
|
||||||
<div class="tiles">
|
<div
|
||||||
|
ref="tiles"
|
||||||
|
class="tiles"
|
||||||
|
>
|
||||||
<MovieTile
|
<MovieTile
|
||||||
v-for="movie in movies"
|
v-for="movie in movies"
|
||||||
:key="`movie-${movie.id}`"
|
:key="`movie-${movie.id}`"
|
||||||
@@ -42,6 +45,8 @@ async function fetchMovies() {
|
|||||||
|
|
||||||
this.movies = movies;
|
this.movies = movies;
|
||||||
this.totalCount = totalCount;
|
this.totalCount = totalCount;
|
||||||
|
|
||||||
|
this.$refs.tiles.scrollIntoView();
|
||||||
}
|
}
|
||||||
|
|
||||||
async function searchMovies() {
|
async function searchMovies() {
|
||||||
@@ -53,6 +58,8 @@ async function searchMovies() {
|
|||||||
|
|
||||||
this.movies = movies;
|
this.movies = movies;
|
||||||
this.totalCount = totalCount;
|
this.totalCount = totalCount;
|
||||||
|
|
||||||
|
this.$refs.tiles.scrollIntoView();
|
||||||
}
|
}
|
||||||
|
|
||||||
async function mounted() {
|
async function mounted() {
|
||||||
@@ -71,7 +78,7 @@ export default {
|
|||||||
return {
|
return {
|
||||||
movies: [],
|
movies: [],
|
||||||
totalCount: 0,
|
totalCount: 0,
|
||||||
limit: 30,
|
limit: 20,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
@@ -99,14 +106,14 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.search {
|
.search {
|
||||||
margin: 1rem 0;
|
margin: 1rem 0 0 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tiles {
|
.tiles {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(auto-fill, minmax(25rem, 1fr));
|
grid-template-columns: repeat(auto-fill, minmax(25rem, 1fr));
|
||||||
grid-gap: 1rem;
|
grid-gap: 1rem;
|
||||||
margin: 0 0 1rem 0;
|
padding: 1rem 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media(max-width: $breakpoint-kilo) {
|
@media(max-width: $breakpoint-kilo) {
|
||||||
|
|||||||
@@ -21,14 +21,14 @@
|
|||||||
<Details :release="release" />
|
<Details :release="release" />
|
||||||
|
|
||||||
<button
|
<button
|
||||||
v-if="release.photos.length > 0"
|
v-if="release.photos?.length > 0 || release.scenesPhotos?.length > 0"
|
||||||
class="album-toggle"
|
class="album-toggle"
|
||||||
@click="$router.push({ hash: '#album' })"
|
@click="$router.push({ hash: '#album' })"
|
||||||
><Icon icon="grid3" />View album</button>
|
><Icon icon="grid3" />View album</button>
|
||||||
|
|
||||||
<Album
|
<Album
|
||||||
v-if="showAlbum"
|
v-if="showAlbum"
|
||||||
:items="[release.poster, ...release.photos]"
|
:items="[release.poster, ...(release.photos || []), ...(release.scenesPhotos || [])]"
|
||||||
:title="release.title"
|
:title="release.title"
|
||||||
:path="config.media.mediaPath"
|
:path="config.media.mediaPath"
|
||||||
@close="$router.replace({ hash: undefined })"
|
@close="$router.replace({ hash: undefined })"
|
||||||
@@ -39,7 +39,10 @@
|
|||||||
<h2
|
<h2
|
||||||
v-if="release.title"
|
v-if="release.title"
|
||||||
class="title"
|
class="title"
|
||||||
>{{ release.title }}</h2>
|
>
|
||||||
|
{{ release.title }}
|
||||||
|
<template v-if="release.movies?.[0]?.title && /^scene \d+$/i.test(release.title)"><span class="title-composed"> from </span>{{ release.movies[0].title }}</template>
|
||||||
|
</h2>
|
||||||
|
|
||||||
<h2
|
<h2
|
||||||
v-else-if="release.actors.length > 0"
|
v-else-if="release.actors.length > 0"
|
||||||
@@ -76,22 +79,23 @@
|
|||||||
/>
|
/>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
v-if="release.movies && release.movies.length > 0"
|
v-if="release.movies?.length > 0 || release.series?.length > 0"
|
||||||
class="row"
|
class="row"
|
||||||
>
|
>
|
||||||
<span class="row-label">Part of</span>
|
<span class="row-label">Part of</span>
|
||||||
|
|
||||||
<div class="movies">
|
<div class="movies">
|
||||||
<router-link
|
<router-link
|
||||||
v-for="movie in release.movies"
|
v-for="movie in [...release.movies, ...release.series]"
|
||||||
:key="`movie-${movie.id}`"
|
:key="`movie-${movie.id}`"
|
||||||
:to="{ name: 'movie', params: { releaseId: movie.id, releaseSlug: movie.slug } }"
|
:to="{ name: movie.type || 'movie', params: { releaseId: movie.id, releaseSlug: movie.slug } }"
|
||||||
class="movie"
|
class="movie"
|
||||||
>
|
>
|
||||||
<span class="movie-title">{{ movie.title }}</span>
|
<span class="movie-title">{{ movie.title }}</span>
|
||||||
|
|
||||||
<img
|
<img
|
||||||
v-if="movie.covers.length > 0"
|
v-if="movie.covers.length > 0 || movie.poster"
|
||||||
:src="getPath(movie.covers[0], 'thumbnail')"
|
:src="getPath(movie.covers[0] || movie.poster, 'thumbnail')"
|
||||||
class="movie-cover"
|
class="movie-cover"
|
||||||
>
|
>
|
||||||
</router-link>
|
</router-link>
|
||||||
@@ -240,6 +244,10 @@ async function fetchRelease(scroll = true) {
|
|||||||
this.release = await this.$store.dispatch('fetchMovieById', this.$route.params.releaseId);
|
this.release = await this.$store.dispatch('fetchMovieById', this.$route.params.releaseId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.$route.name === 'serie') {
|
||||||
|
this.release = await this.$store.dispatch('fetchSerieById', this.$route.params.releaseId);
|
||||||
|
}
|
||||||
|
|
||||||
if (scroll && this.$refs.content) {
|
if (scroll && this.$refs.content) {
|
||||||
this.$refs.content.scrollTop = 0;
|
this.$refs.content.scrollTop = 0;
|
||||||
}
|
}
|
||||||
@@ -275,11 +283,11 @@ function bannerBackground() {
|
|||||||
function pageTitle() {
|
function pageTitle() {
|
||||||
return this.release
|
return this.release
|
||||||
&& (this.release.title
|
&& (this.release.title
|
||||||
|| (this.release.actors.length > 0 ? `${this.release.actors.map(actor => actor.name).join(', ')} for ${this.release.entity.name}` : null));
|
|| (this.release.actors.length > 0 ? `${this.release.actors.map((actor) => actor.name).join(', ')} for ${this.release.entity.name}` : null));
|
||||||
}
|
}
|
||||||
|
|
||||||
function showAlbum() {
|
function showAlbum() {
|
||||||
return this.release.photos?.length > 0 && this.$route.hash === '#album';
|
return (this.release.photos?.length > 0 || this.release.scenesPhotos?.length > 0) && this.$route.hash === '#album';
|
||||||
}
|
}
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
|||||||
@@ -5,8 +5,10 @@
|
|||||||
class="heading"
|
class="heading"
|
||||||
><span class="range">{{ range }}</span> releases for '{{ context }}'</h3>
|
><span class="range">{{ range }}</span> releases for '{{ context }}'</h3>
|
||||||
|
|
||||||
|
<Ellipsis v-if="!done" />
|
||||||
|
|
||||||
<ul
|
<ul
|
||||||
v-if="releases.length > 0"
|
v-else-if="releases.length > 0"
|
||||||
:key="sfw"
|
:key="sfw"
|
||||||
class="nolist tiles"
|
class="nolist tiles"
|
||||||
>
|
>
|
||||||
@@ -18,13 +20,14 @@
|
|||||||
:release="release"
|
:release="release"
|
||||||
:referer="referer"
|
:referer="referer"
|
||||||
:index="index"
|
:index="index"
|
||||||
|
:stash="stash"
|
||||||
@stash="isStashed => $emit('stash', isStashed)"
|
@stash="isStashed => $emit('stash', isStashed)"
|
||||||
/>
|
/>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<span
|
<span
|
||||||
v-if="releases.length === 0 && range !== 'all'"
|
v-else-if="releases.length === 0 && range !== 'all'"
|
||||||
class="empty"
|
class="empty"
|
||||||
>No {{ range }} releases</span>
|
>No {{ range }} releases</span>
|
||||||
|
|
||||||
@@ -36,6 +39,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import Ellipsis from '../loading/ellipsis.vue';
|
||||||
import SceneTile from './scene-tile.vue';
|
import SceneTile from './scene-tile.vue';
|
||||||
|
|
||||||
function range() {
|
function range() {
|
||||||
@@ -48,6 +52,7 @@ function sfw() {
|
|||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
|
Ellipsis,
|
||||||
SceneTile,
|
SceneTile,
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
@@ -59,10 +64,18 @@ export default {
|
|||||||
type: String,
|
type: String,
|
||||||
default: null,
|
default: null,
|
||||||
},
|
},
|
||||||
|
done: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true,
|
||||||
|
},
|
||||||
referer: {
|
referer: {
|
||||||
type: String,
|
type: String,
|
||||||
default: null,
|
default: null,
|
||||||
},
|
},
|
||||||
|
stash: {
|
||||||
|
type: Object,
|
||||||
|
default: null,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
emits: ['stash'],
|
emits: ['stash'],
|
||||||
computed: {
|
computed: {
|
||||||
@@ -113,10 +126,29 @@ export default {
|
|||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@media(max-width: $breakpoint-mega) {
|
||||||
|
.tiles {
|
||||||
|
grid-template-columns: repeat(auto-fill, minmax(19rem, 1fr));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@media(max-width: $breakpoint-kilo) {
|
@media(max-width: $breakpoint-kilo) {
|
||||||
.tiles {
|
.tiles {
|
||||||
|
grid-template-columns: repeat(auto-fill, minmax(18.5rem, 1fr));
|
||||||
grid-gap: .5rem;
|
grid-gap: .5rem;
|
||||||
padding: .5rem;
|
padding: .5rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@media(max-width: $breakpoint) {
|
||||||
|
.tiles {
|
||||||
|
grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media(max-width: $breakpoint-micro) {
|
||||||
|
.tiles {
|
||||||
|
grid-template-columns: repeat(auto-fill, minmax(17rem, 1fr));
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -46,18 +46,25 @@
|
|||||||
><Icon icon="blocked" />No thumbnail available</div>
|
><Icon icon="blocked" />No thumbnail available</div>
|
||||||
|
|
||||||
<Icon
|
<Icon
|
||||||
v-show="favorited"
|
v-show="(!stash || stash.primary) && favorited"
|
||||||
icon="heart7"
|
icon="heart7"
|
||||||
class="stash stashed"
|
class="stash stashed"
|
||||||
@click.prevent.native="unstashScene"
|
@click.prevent.native="unstashScene"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<Icon
|
<Icon
|
||||||
v-show="favorited === false"
|
v-show="(!stash || stash.primary) && favorited === false"
|
||||||
icon="heart8"
|
icon="heart8"
|
||||||
class="stash unstashed"
|
class="stash unstashed"
|
||||||
@click.prevent.native="stashScene"
|
@click.prevent.native="stashScene"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<Icon
|
||||||
|
v-show="stash && !stash.primary"
|
||||||
|
icon="cross2"
|
||||||
|
class="stash unstash"
|
||||||
|
@click.prevent.native="unstashScene"
|
||||||
|
/>
|
||||||
</a>
|
</a>
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
@@ -78,7 +85,9 @@
|
|||||||
v-tooltip.bottom="release.title"
|
v-tooltip.bottom="release.title"
|
||||||
:title="release.title"
|
:title="release.title"
|
||||||
class="title"
|
class="title"
|
||||||
>{{ release.title }}</h3>
|
>
|
||||||
|
{{ release.title }}<template v-if="release.movies?.[0]?.title && /^scene \d+$/i.test(release.title)"><span class="title-composed"> from </span>{{ release.movies[0].title }}</template>
|
||||||
|
</h3>
|
||||||
|
|
||||||
<h3
|
<h3
|
||||||
v-else-if="release.actors.length > 0"
|
v-else-if="release.actors.length > 0"
|
||||||
@@ -104,21 +113,22 @@
|
|||||||
:key="actor.id"
|
:key="actor.id"
|
||||||
class="actor"
|
class="actor"
|
||||||
>
|
>
|
||||||
<router-link
|
<RouterLink
|
||||||
:to="{ name: 'actor', params: { actorId: actor.id, actorSlug: actor.slug } }"
|
:to="{ name: 'actor', params: { actorId: actor.id, actorSlug: actor.slug } }"
|
||||||
|
:class="{ [actor.gender]: !!actor.gender }"
|
||||||
class="actor-link"
|
class="actor-link"
|
||||||
>{{ actor.name }}</router-link>
|
>{{ actor.name }}</RouterLink>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
<div class="labels">
|
<div class="labels">
|
||||||
<router-link
|
<RouterLink
|
||||||
v-if="release.shootId && release.studio"
|
v-if="release.shootId && release.studio"
|
||||||
:to="`/studio/${release.studio.slug}`"
|
:to="`/studio/${release.studio.slug}`"
|
||||||
:title="release.studio && release.studio.name"
|
:title="release.studio && release.studio.name"
|
||||||
class="shoot nolink"
|
class="shoot nolink"
|
||||||
>{{ release.shootId }}</router-link>
|
>{{ release.shootId }}</RouterLink>
|
||||||
|
|
||||||
<span
|
<span
|
||||||
v-else-if="release.shootId"
|
v-else-if="release.shootId"
|
||||||
@@ -136,10 +146,10 @@
|
|||||||
:key="`tag-${tag.slug}`"
|
:key="`tag-${tag.slug}`"
|
||||||
class="tag"
|
class="tag"
|
||||||
>
|
>
|
||||||
<router-link
|
<RouterLink
|
||||||
:to="`/tag/${tag.slug}`"
|
:to="`/tag/${tag.slug}`"
|
||||||
class="tag-link"
|
class="tag-link"
|
||||||
>{{ tag.name }}</router-link>
|
>{{ tag.name }}</RouterLink>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@@ -167,12 +177,14 @@ async function stashScene() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function unstashScene() {
|
async function unstashScene() {
|
||||||
this.favorited = false;
|
if (!this.stash || this.stash.primary) {
|
||||||
|
this.favorited = false;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await this.$store.dispatch('unstashScene', {
|
await this.$store.dispatch('unstashScene', {
|
||||||
sceneId: this.release.id,
|
sceneId: this.release.id,
|
||||||
stashId: this.$store.getters.favorites.id,
|
stashId: this.stash?.id || this.$store.getters.favorites.id,
|
||||||
});
|
});
|
||||||
|
|
||||||
this.$emit('stash', false);
|
this.$emit('stash', false);
|
||||||
@@ -190,6 +202,10 @@ export default {
|
|||||||
type: Object,
|
type: Object,
|
||||||
default: null,
|
default: null,
|
||||||
},
|
},
|
||||||
|
stash: {
|
||||||
|
type: Object,
|
||||||
|
default: null,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
emits: ['stash'],
|
emits: ['stash'],
|
||||||
data() {
|
data() {
|
||||||
@@ -218,23 +234,27 @@ export default {
|
|||||||
box-shadow: 0 0 3px var(--darken-weak);
|
box-shadow: 0 0 3px var(--darken-weak);
|
||||||
|
|
||||||
&.new .poster::after {
|
&.new .poster::after {
|
||||||
content: '★';
|
content: 'new';
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
display: flex;
|
||||||
left: 0;
|
align-items: center;
|
||||||
width: 1rem;
|
justify-content: center;
|
||||||
height: 1rem;
|
bottom: 0;
|
||||||
|
right: .5rem;
|
||||||
|
width: 2rem;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
margin: .25rem;
|
padding: .1rem 0 .05rem 0;
|
||||||
border-radius: 0 0 .5rem 0;
|
border-radius: .25rem .25rem 0 0;
|
||||||
color: var(--primary);
|
background: var(--info);
|
||||||
font-size: 1rem;
|
color: var(--text-light);
|
||||||
|
font-size: .7rem;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
text-shadow: 0 0 2px var(--darken-weak);
|
box-shadow: 0 0 3px var(--shadow);
|
||||||
}
|
}
|
||||||
|
|
||||||
&:hover .unstashed {
|
&:hover .unstashed,
|
||||||
|
&:hover .unstash {
|
||||||
fill: var(--lighten);
|
fill: var(--lighten);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -279,8 +299,8 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.stash {
|
.stash {
|
||||||
width: 1.25rem;
|
width: 1.5rem;
|
||||||
height: 1.25rem;
|
height: 1.5rem;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
@@ -293,20 +313,26 @@ export default {
|
|||||||
fill: var(--primary);
|
fill: var(--primary);
|
||||||
filter: drop-shadow(0 0 2px var(--darken-weak));
|
filter: drop-shadow(0 0 2px var(--darken-weak));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&:hover.unstash {
|
||||||
|
fill: var(--text-light);
|
||||||
|
filter: drop-shadow(0 0 2px var(--darken-weak));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.row {
|
.row {
|
||||||
|
max-width: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
padding: 0 .5rem;
|
padding: 0 .5rem;
|
||||||
margin: 0 0 .1rem 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.info {
|
.info {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
align-items: flex-start;
|
||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
@@ -318,7 +344,7 @@ export default {
|
|||||||
.title {
|
.title {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
color: var(--text);
|
color: var(--text);
|
||||||
font-size: 1rem;
|
font-size: .9rem;
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
@@ -344,8 +370,9 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.actor-link {
|
.actor-link {
|
||||||
color: var(--link);
|
color: var(--text);
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
|
font-size: .9rem;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
color: var(--primary);
|
color: var(--primary);
|
||||||
@@ -353,7 +380,7 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.labels {
|
.labels {
|
||||||
padding: 0 .5rem 1.5rem .5rem;
|
padding: 0 .5rem 1.25rem .5rem;
|
||||||
max-height: .5rem;
|
max-height: .5rem;
|
||||||
overflow-y: hidden;
|
overflow-y: hidden;
|
||||||
font-size: 0;
|
font-size: 0;
|
||||||
@@ -384,11 +411,11 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.tag-link {
|
.tag-link {
|
||||||
background: var(--background);
|
background: var(--shadow-touch);
|
||||||
color: var(--shadow);
|
color: var(--shadow);
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
padding: .25rem .5rem;
|
padding: .25rem .5rem;
|
||||||
border: solid 1px var(--shadow-hint);
|
margin: 0 1px 0 0;
|
||||||
font-size: .75rem;
|
font-size: .75rem;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
@@ -400,14 +427,20 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.details-wide {
|
.details-wide {
|
||||||
margin: 0 0 .5rem 0;
|
margin: 0 0 .4rem 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.details-compact {
|
.details-compact {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media(max-width: $breakpoint-kilo) {
|
@media(max-width: $breakpoint) {
|
||||||
|
.thumbnail {
|
||||||
|
height: 11rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media(max-width: $breakpoint-micro) {
|
||||||
.tile-body {
|
.tile-body {
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
}
|
}
|
||||||
@@ -453,14 +486,15 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.tile.new .poster::after {
|
.tile.new .poster::after {
|
||||||
bottom: 0;
|
top: 0;
|
||||||
top: auto;
|
right: .25rem;
|
||||||
margin: .1rem .25rem;
|
bottom: auto;
|
||||||
|
border-radius: 0 0 .25rem .25rem;
|
||||||
|
padding: .05rem 0 .1rem 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.stash {
|
.stash {
|
||||||
left: 0;
|
left: 0;
|
||||||
right: auto;
|
|
||||||
padding: .25rem .5rem .5rem .25rem;
|
padding: .25rem .5rem .5rem .25rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,10 +57,7 @@
|
|||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
class="date"
|
class="date"
|
||||||
><Icon
|
>{{ formatDate(release.date, 'MMMM D, YYYY', release.datePrecision) }}</a>
|
||||||
v-if="release.url"
|
|
||||||
icon="share2"
|
|
||||||
/>{{ formatDate(release.date, 'MMMM D, YYYY', release.datePrecision) }}</a>
|
|
||||||
|
|
||||||
<a
|
<a
|
||||||
v-else
|
v-else
|
||||||
@@ -91,27 +88,17 @@ export default {
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
|
z-index: 1;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
background: var(--profile);
|
background: var(--info);
|
||||||
font-size: 0;
|
font-size: 0;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
|
||||||
.favicon {
|
.favicon {
|
||||||
width: 2rem;
|
width: 2rem;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
padding: .5rem;
|
padding: .4rem .5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
&.new .date::before {
|
|
||||||
content: '';
|
|
||||||
width: .5rem;
|
|
||||||
height: .5rem;
|
|
||||||
border-radius: 50%;
|
|
||||||
margin: 0 .25rem 0 0;
|
|
||||||
background: var(--primary);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.site,
|
.site,
|
||||||
@@ -120,7 +107,7 @@ export default {
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
position: relative;
|
position: relative;
|
||||||
font-size: .8rem;
|
font-size: .8rem;
|
||||||
padding: .5rem;
|
padding: .4rem .5rem;
|
||||||
color: var(--text-light);
|
color: var(--text-light);
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
<template>
|
<template>
|
||||||
<form
|
<form
|
||||||
class="search"
|
class="search"
|
||||||
@submit.prevent="search"
|
@submit.prevent="() => search()"
|
||||||
>
|
>
|
||||||
<input
|
<input
|
||||||
v-model="query"
|
v-model="query"
|
||||||
:placeholder="placeholder || 'Search'"
|
:placeholder="placeholder || 'Search'"
|
||||||
class="query"
|
class="query"
|
||||||
@input="search"
|
@input="() => search(true)"
|
||||||
>
|
>
|
||||||
|
|
||||||
<button
|
<button
|
||||||
@@ -18,8 +18,13 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
function search() {
|
function search(typing) {
|
||||||
this.$router.replace({ query: { query: this.query || undefined } });
|
if (!typing || this.eager) {
|
||||||
|
this.$router.replace({
|
||||||
|
query: { query: this.query || undefined },
|
||||||
|
params: { ...this.$route.params, pageNumber: 1 },
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function resetQuery() {
|
function resetQuery() {
|
||||||
@@ -32,6 +37,10 @@ export default {
|
|||||||
type: String,
|
type: String,
|
||||||
default: null,
|
default: null,
|
||||||
},
|
},
|
||||||
|
eager: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -10,11 +10,11 @@
|
|||||||
>{{ stash.name }}</h2>
|
>{{ stash.name }}</h2>
|
||||||
|
|
||||||
<span class="header-section">
|
<span class="header-section">
|
||||||
<router-link
|
<RouterLink
|
||||||
v-if="stash.user"
|
v-if="stash.user"
|
||||||
:to="{ name: 'user', params: { username: stash.user.username } }"
|
:to="{ name: 'user', params: { username: stash.user.username } }"
|
||||||
class="header-item stash-username nolink"
|
class="header-item stash-username nolink"
|
||||||
><Icon icon="user3" /><span class="username-name">{{ stash.user.username }}</span></router-link>
|
><Icon icon="user3" /><span class="username-name">{{ stash.user.username }}</span></RouterLink>
|
||||||
|
|
||||||
<label
|
<label
|
||||||
v-if="isMine"
|
v-if="isMine"
|
||||||
@@ -55,22 +55,50 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="content-inner">
|
<div class="content-inner">
|
||||||
|
<FilterBar :ranges="['scenes', 'actors', 'movies']" />
|
||||||
|
|
||||||
<Releases
|
<Releases
|
||||||
v-if="stash.scenes?.length > 0"
|
v-if="$route.params.range === 'scenes' && stash.scenes?.length > 0"
|
||||||
:releases="stash.scenes.map(item => item.scene)"
|
:releases="stash.scenes.map(item => item.scene)"
|
||||||
|
:stash="stash"
|
||||||
class="stash-section stash-scenes"
|
class="stash-section stash-scenes"
|
||||||
@stash="fetchStash"
|
@stash="fetchStash"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<ul
|
<ul
|
||||||
v-if="stash.actors?.length > 0"
|
v-if="$route.params.range === 'actors'"
|
||||||
class="stash-section stash-actors nolist"
|
class="stash-section stash-actors nolist"
|
||||||
>
|
>
|
||||||
<li
|
<li
|
||||||
v-for="item in stash.actors"
|
v-for="item in stash.actors"
|
||||||
:key="item.id"
|
:key="item.id"
|
||||||
><Actor :actor="item.actor" /></li>
|
><Actor
|
||||||
|
:actor="item.actor"
|
||||||
|
:stash="stash"
|
||||||
|
@stash="fetchStash"
|
||||||
|
/></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
<div
|
||||||
|
v-if="$route.params.range === 'movies'"
|
||||||
|
class="stash-movies"
|
||||||
|
>
|
||||||
|
<Movie
|
||||||
|
v-for="item in stash.movies"
|
||||||
|
:key="`movie-${item.id}`"
|
||||||
|
:movie="item.movie"
|
||||||
|
:stash="stash"
|
||||||
|
@stash="fetchStash"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<Pagination
|
||||||
|
:items-total="totalCount"
|
||||||
|
:items-per-page="limit"
|
||||||
|
class="pagination-bottom"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<Footer />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -78,12 +106,35 @@
|
|||||||
<script>
|
<script>
|
||||||
import Actor from '../actors/tile.vue';
|
import Actor from '../actors/tile.vue';
|
||||||
import Releases from '../releases/releases.vue';
|
import Releases from '../releases/releases.vue';
|
||||||
|
import Movie from '../releases/movie-tile.vue';
|
||||||
import RemoveStash from './remove.vue';
|
import RemoveStash from './remove.vue';
|
||||||
import Toggle from '../form/toggle.vue';
|
import Toggle from '../form/toggle.vue';
|
||||||
|
import FilterBar from '../filters/filter-bar.vue';
|
||||||
|
import Pagination from '../pagination/pagination.vue';
|
||||||
|
|
||||||
async function fetchStash() {
|
async function fetchStash() {
|
||||||
this.stash = await this.$store.dispatch('fetchStash', this.$route.params.stashId);
|
this.stash = await this.$store.dispatch('fetchStash', {
|
||||||
|
stashId: this.$route.params.stashId,
|
||||||
|
section: this.$route.params.range,
|
||||||
|
pageNumber: this.$route.params.pageNumber || 1,
|
||||||
|
limit: this.limit,
|
||||||
|
});
|
||||||
|
|
||||||
this.isMine = this.stash.user?.id === this.$store.state.auth.user?.id;
|
this.isMine = this.stash.user?.id === this.$store.state.auth.user?.id;
|
||||||
|
|
||||||
|
if (this.$route.params.range === 'scenes') {
|
||||||
|
this.totalCount = this.stash.sceneTotal;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.$route.params.range === 'actors') {
|
||||||
|
this.totalCount = this.stash.actorTotal;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.$route.params.range === 'movies') {
|
||||||
|
this.totalCount = this.stash.movieTotal;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.pageTitle = this.stash.name;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function publishStash(isPublic) {
|
async function publishStash(isPublic) {
|
||||||
@@ -109,23 +160,32 @@ async function removeStash(removed) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function mounted() {
|
async function mounted() {
|
||||||
this.fetchStash();
|
await this.fetchStash();
|
||||||
}
|
}
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
Actor,
|
Actor,
|
||||||
|
Movie,
|
||||||
Releases,
|
Releases,
|
||||||
RemoveStash,
|
RemoveStash,
|
||||||
|
Pagination,
|
||||||
|
FilterBar,
|
||||||
Toggle,
|
Toggle,
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
stash: null,
|
stash: null,
|
||||||
|
limit: Number(this.$route.query.limit) || 20,
|
||||||
|
pageTitle: null,
|
||||||
showRemoveStash: false,
|
showRemoveStash: false,
|
||||||
isMine: false,
|
isMine: false,
|
||||||
|
totalCount: 0,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
watch: {
|
||||||
|
$route: fetchStash,
|
||||||
|
},
|
||||||
mounted,
|
mounted,
|
||||||
methods: {
|
methods: {
|
||||||
fetchStash,
|
fetchStash,
|
||||||
@@ -199,24 +259,29 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.stash-section:not(:last-child) {
|
|
||||||
border-bottom: solid 1px var(--shadow-hint);
|
|
||||||
}
|
|
||||||
|
|
||||||
.stash-actors {
|
.stash-actors {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-gap: .5rem;
|
grid-gap: .5rem;
|
||||||
grid-template-columns: repeat(auto-fill, minmax(10rem, 1fr));
|
grid-template-columns: repeat(auto-fill, minmax(10rem, 1fr));
|
||||||
|
grid-template-rows: min-content;
|
||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
padding: 1rem;
|
padding: 1rem;
|
||||||
|
border-top: solid 1px var(--shadow-hint);
|
||||||
}
|
}
|
||||||
|
|
||||||
.stash-scenes {
|
.stash-movies {
|
||||||
flex-grow: 0;
|
display: grid;
|
||||||
|
flex-grow: 1;
|
||||||
|
grid-template-columns: repeat(auto-fill, minmax(25rem, 1fr));
|
||||||
|
grid-template-rows: min-content;
|
||||||
|
grid-gap: 1rem;
|
||||||
|
padding: 1rem;
|
||||||
|
border-top: solid 1px var(--shadow-hint);
|
||||||
|
}
|
||||||
|
|
||||||
.tiles {
|
.stash-scenes .tiles {
|
||||||
grid-template-columns: repeat(auto-fill, minmax(22rem, 1fr));
|
grid-template-columns: repeat(auto-fill, minmax(22rem, 1fr));
|
||||||
}
|
grid-template-rows: min-content;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media(max-width: $breakpoint-small) {
|
@media(max-width: $breakpoint-small) {
|
||||||
|
|||||||
@@ -64,7 +64,10 @@
|
|||||||
:fetch-releases="fetchReleases"
|
:fetch-releases="fetchReleases"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<Releases :releases="releases" />
|
<Releases
|
||||||
|
:releases="releases"
|
||||||
|
:done="done"
|
||||||
|
/>
|
||||||
|
|
||||||
<Pagination
|
<Pagination
|
||||||
:items-total="totalCount"
|
:items-total="totalCount"
|
||||||
@@ -93,6 +96,8 @@ import Campaign from '../campaigns/campaign.vue';
|
|||||||
const converter = new Converter();
|
const converter = new Converter();
|
||||||
|
|
||||||
async function fetchReleases(scroll = true) {
|
async function fetchReleases(scroll = true) {
|
||||||
|
this.done = false;
|
||||||
|
|
||||||
const { tag, releases, totalCount } = await this.$store.dispatch('fetchTagBySlug', {
|
const { tag, releases, totalCount } = await this.$store.dispatch('fetchTagBySlug', {
|
||||||
tagSlug: this.$route.params.tagSlug,
|
tagSlug: this.$route.params.tagSlug,
|
||||||
pageNumber: Number(this.$route.params.pageNumber),
|
pageNumber: Number(this.$route.params.pageNumber),
|
||||||
@@ -107,6 +112,8 @@ async function fetchReleases(scroll = true) {
|
|||||||
this.hasMedia = this.tag.poster || this.tag.photos.length > 0;
|
this.hasMedia = this.tag.poster || this.tag.photos.length > 0;
|
||||||
this.description = this.tag.description && converter.makeHtml(escapeHtml(this.tag.description));
|
this.description = this.tag.description && converter.makeHtml(escapeHtml(this.tag.description));
|
||||||
|
|
||||||
|
this.done = true;
|
||||||
|
|
||||||
if (this.hasMedia) {
|
if (this.hasMedia) {
|
||||||
this.showBannerCampaign = true;
|
this.showBannerCampaign = true;
|
||||||
}
|
}
|
||||||
@@ -146,6 +153,7 @@ export default {
|
|||||||
tag: null,
|
tag: null,
|
||||||
description: null,
|
description: null,
|
||||||
releases: null,
|
releases: null,
|
||||||
|
done: false,
|
||||||
totalCount: 0,
|
totalCount: 0,
|
||||||
limit: 20,
|
limit: 20,
|
||||||
pageTitle: null,
|
pageTitle: null,
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="tags">
|
<div class="tags">
|
||||||
<div class="content-inner">
|
<div class="content-inner">
|
||||||
<SearchBar :placeholder="'Search tags'" />
|
<SearchBar
|
||||||
|
:placeholder="'Search tags'"
|
||||||
|
class="search"
|
||||||
|
/>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
v-for="(tags, category) in categories"
|
v-for="(tags, category) in categories"
|
||||||
@@ -42,6 +45,8 @@ const tagSlugsByCategory = {
|
|||||||
'teen',
|
'teen',
|
||||||
'milf',
|
'milf',
|
||||||
'blowjob',
|
'blowjob',
|
||||||
|
'gay',
|
||||||
|
'transsexual',
|
||||||
'dp',
|
'dp',
|
||||||
'gangbang',
|
'gangbang',
|
||||||
'facial',
|
'facial',
|
||||||
@@ -61,14 +66,18 @@ const tagSlugsByCategory = {
|
|||||||
'tattoos',
|
'tattoos',
|
||||||
'piercings',
|
'piercings',
|
||||||
],
|
],
|
||||||
|
sexuality: [
|
||||||
|
'gay',
|
||||||
|
'bisexual',
|
||||||
|
'transsexual',
|
||||||
|
],
|
||||||
oral: [
|
oral: [
|
||||||
'blowjob',
|
'blowjob',
|
||||||
'pussy-eating',
|
'pussy-eating',
|
||||||
'ass-eating',
|
'ass-eating',
|
||||||
'69',
|
|
||||||
'double-blowjob',
|
|
||||||
'deepthroat',
|
'deepthroat',
|
||||||
'facefucking',
|
'facefucking',
|
||||||
|
'69',
|
||||||
'atm',
|
'atm',
|
||||||
],
|
],
|
||||||
manual: [
|
manual: [
|
||||||
@@ -78,7 +87,6 @@ const tagSlugsByCategory = {
|
|||||||
'titty-fucking',
|
'titty-fucking',
|
||||||
'fisting',
|
'fisting',
|
||||||
'anal-fisting',
|
'anal-fisting',
|
||||||
'fisting-dp',
|
|
||||||
],
|
],
|
||||||
group: [
|
group: [
|
||||||
'mfm',
|
'mfm',
|
||||||
@@ -89,7 +97,6 @@ const tagSlugsByCategory = {
|
|||||||
],
|
],
|
||||||
cumshot: [
|
cumshot: [
|
||||||
'facial',
|
'facial',
|
||||||
'bukkake',
|
|
||||||
'creampie',
|
'creampie',
|
||||||
'cum-in-mouth',
|
'cum-in-mouth',
|
||||||
'cum-on-boobs',
|
'cum-on-boobs',
|
||||||
@@ -97,8 +104,34 @@ const tagSlugsByCategory = {
|
|||||||
'cum-on-pussy',
|
'cum-on-pussy',
|
||||||
'anal-creampie',
|
'anal-creampie',
|
||||||
'oral-creampie',
|
'oral-creampie',
|
||||||
|
'bukkake',
|
||||||
'fake-cum',
|
'fake-cum',
|
||||||
],
|
],
|
||||||
|
roleplay: [
|
||||||
|
'family',
|
||||||
|
'parody',
|
||||||
|
'schoolgirl',
|
||||||
|
'nurse',
|
||||||
|
'maid',
|
||||||
|
'nun',
|
||||||
|
],
|
||||||
|
extreme: [
|
||||||
|
'dp',
|
||||||
|
'airtight',
|
||||||
|
'dap',
|
||||||
|
'dvp',
|
||||||
|
'triple-penetration',
|
||||||
|
'tap',
|
||||||
|
'tvp',
|
||||||
|
],
|
||||||
|
fetish: [
|
||||||
|
'bdsm',
|
||||||
|
'femdom',
|
||||||
|
'bondage',
|
||||||
|
'free-use',
|
||||||
|
'latex',
|
||||||
|
'blindfold',
|
||||||
|
],
|
||||||
toys: [
|
toys: [
|
||||||
'toys',
|
'toys',
|
||||||
'toy-anal',
|
'toy-anal',
|
||||||
@@ -109,31 +142,6 @@ const tagSlugsByCategory = {
|
|||||||
'double-dildo-anal',
|
'double-dildo-anal',
|
||||||
'double-dildo-dp',
|
'double-dildo-dp',
|
||||||
],
|
],
|
||||||
roleplay: [
|
|
||||||
'family',
|
|
||||||
'parody',
|
|
||||||
'schoolgirl',
|
|
||||||
'nurse',
|
|
||||||
'maid',
|
|
||||||
'nun',
|
|
||||||
],
|
|
||||||
fetish: [
|
|
||||||
'bdsm',
|
|
||||||
'femdom',
|
|
||||||
'bondage',
|
|
||||||
'latex',
|
|
||||||
'blindfold',
|
|
||||||
],
|
|
||||||
extreme: [
|
|
||||||
'dp',
|
|
||||||
'airtight',
|
|
||||||
'dap',
|
|
||||||
'dvp',
|
|
||||||
'da-tp',
|
|
||||||
'dv-tp',
|
|
||||||
'tap',
|
|
||||||
'tvp',
|
|
||||||
],
|
|
||||||
misc: [
|
misc: [
|
||||||
'gaping',
|
'gaping',
|
||||||
'squirting',
|
'squirting',
|
||||||
@@ -159,10 +167,18 @@ async function fetchTags() {
|
|||||||
|
|
||||||
const tagsBySlug = tags.reduce((acc, tag) => ({ ...acc, [tag.slug]: tag }), {});
|
const tagsBySlug = tags.reduce((acc, tag) => ({ ...acc, [tag.slug]: tag }), {});
|
||||||
|
|
||||||
this.categories = Object.entries(tagSlugsByCategory).reduce((acc, [category, tagSlugs]) => ({
|
this.categories = Object.entries(tagSlugsByCategory).reduce((acc, [category, tagSlugs]) => {
|
||||||
...acc,
|
const categoryTags = tagSlugs.map((tagSlug) => tagsBySlug[tagSlug]).filter(Boolean);
|
||||||
[category]: tagSlugs.map(tagSlug => tagsBySlug[tagSlug]),
|
|
||||||
}), {});
|
if (categoryTags.length === 0) {
|
||||||
|
return acc;
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
...acc,
|
||||||
|
[category]: categoryTags,
|
||||||
|
};
|
||||||
|
}, {});
|
||||||
}
|
}
|
||||||
|
|
||||||
async function searchTags() {
|
async function searchTags() {
|
||||||
@@ -199,6 +215,7 @@ export default {
|
|||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
$route: fetchTags,
|
$route: fetchTags,
|
||||||
|
'$store.state.ui.tagFilter': fetchTags,
|
||||||
},
|
},
|
||||||
mounted,
|
mounted,
|
||||||
methods: {
|
methods: {
|
||||||
@@ -209,7 +226,7 @@ export default {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
@import 'theme';
|
@import 'breakpoints';
|
||||||
|
|
||||||
.tags {
|
.tags {
|
||||||
display: flex;
|
display: flex;
|
||||||
@@ -225,35 +242,97 @@ export default {
|
|||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(auto-fill, minmax(20rem, .33fr));
|
grid-template-columns: repeat(auto-fill, minmax(20rem, .33fr));
|
||||||
grid-gap: 1rem;
|
grid-gap: 1rem;
|
||||||
margin: 0 0 1.5rem 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.heading {
|
.heading {
|
||||||
text-transform: capitalize;
|
text-transform: capitalize;
|
||||||
padding: 0 0 0 .5rem;
|
padding: 0 0 0 .5rem;
|
||||||
margin: 1.75rem 0 1rem 0;
|
margin: 1.25rem 0 1rem 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.category:first-child .heading {
|
.category:first-child .heading {
|
||||||
margin: .5rem 0 1rem 0;
|
margin: .5rem 0 1rem 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media(max-width: $breakpoint3) {
|
.search {
|
||||||
|
margin: 0 0 .25rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media(max-width: $breakpoint-mega) {
|
||||||
.tiles {
|
.tiles {
|
||||||
grid-template-columns: repeat(auto-fill, minmax(18rem, .5fr));
|
grid-template-columns: repeat(auto-fill, minmax(17.75rem, .5fr));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
::v-deep(.poster),
|
||||||
|
::v-deep(.blank) {
|
||||||
|
height: 12rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media(max-width: $breakpoint-kilo) {
|
||||||
|
.tiles {
|
||||||
|
grid-template-columns: repeat(auto-fill, minmax(18rem, 1fr));
|
||||||
|
grid-gap: .5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep(.poster),
|
||||||
|
::v-deep(.blank) {
|
||||||
|
height: 14rem;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media(max-width: $breakpoint) {
|
@media(max-width: $breakpoint) {
|
||||||
.tiles {
|
.tiles {
|
||||||
grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr));
|
grid-template-columns: repeat(auto-fill, minmax(14.5rem, 1fr));
|
||||||
grid-gap: .5rem;
|
grid-gap: .5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
::v-deep(.poster),
|
||||||
|
::v-deep(.blank) {
|
||||||
|
height: 11rem;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media(max-width: $breakpoint0) {
|
@media(max-width: $breakpoint-small) {
|
||||||
|
::v-deep(.poster),
|
||||||
|
::v-deep(.blank) {
|
||||||
|
height: 10rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media(max-width: $breakpoint-micro) {
|
||||||
.tiles {
|
.tiles {
|
||||||
grid-template-columns: repeat(auto-fill, minmax(12rem, 1fr));
|
grid-template-columns: repeat(auto-fill, minmax(11rem, 1fr));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
::v-deep(.poster),
|
||||||
|
::v-deep(.blank) {
|
||||||
|
height: 7.5rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media(max-width: $breakpoint-mini) {
|
||||||
|
.tiles {
|
||||||
|
grid-template-columns: repeat(auto-fill, minmax(11.5rem, 1fr));
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep(.poster),
|
||||||
|
::v-deep(.blank) {
|
||||||
|
height: 12rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media(max-width: $breakpoint-nano) {
|
||||||
|
::v-deep(.poster),
|
||||||
|
::v-deep(.blank) {
|
||||||
|
height: 10rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media(max-width: $breakpoint-pico) {
|
||||||
|
::v-deep(.poster),
|
||||||
|
::v-deep(.blank) {
|
||||||
|
height: 8rem;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -16,16 +16,19 @@
|
|||||||
:style="{ transform: `translate3d(${tooltipX}px, ${tooltipY}px, 0)` }"
|
:style="{ transform: `translate3d(${tooltipX}px, ${tooltipY}px, 0)` }"
|
||||||
@click.stop
|
@click.stop
|
||||||
>
|
>
|
||||||
<div class="tooltip-inner">
|
<div
|
||||||
|
class="tooltip-inner"
|
||||||
|
:style="{ 'max-height': `calc(100vh - ${tooltipY}px - 1rem)` }"
|
||||||
|
>
|
||||||
<div class="tooltip">
|
<div class="tooltip">
|
||||||
<slot name="tooltip" />
|
<slot name="tooltip" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div
|
|
||||||
class="tooltip-arrow"
|
|
||||||
:style="{ transform: `translate3d(${arrowOffset}px, 0, 0)` }"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div
|
||||||
|
class="tooltip-arrow"
|
||||||
|
:style="{ transform: `translate3d(${arrowOffset}px, 0, 0)` }"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</teleport>
|
</teleport>
|
||||||
</div>
|
</div>
|
||||||
@@ -155,6 +158,8 @@ export default {
|
|||||||
|
|
||||||
.tooltip-inner {
|
.tooltip-inner {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
overflow-y: auto;
|
||||||
|
background: var(--background);
|
||||||
box-shadow: 0 0 .5rem var(--darken);
|
box-shadow: 0 0 .5rem var(--darken);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<div class="stash">
|
<div class="stash">
|
||||||
<div class="stash-section stash-header">
|
<div class="stash-section stash-header">
|
||||||
<router-link
|
<router-link
|
||||||
:to="{ name: 'stash', params: { stashId: stash.id, stashSlug: stash.slug } }"
|
:to="{ name: 'stash', params: { stashId: stash.id, stashSlug: stash.slug, range: 'scenes', pageNumber: 1 } }"
|
||||||
class="stash-link nolink"
|
class="stash-link nolink"
|
||||||
>
|
>
|
||||||
<h4 class="stash-name">{{ stash.name }}</h4>
|
<h4 class="stash-name">{{ stash.name }}</h4>
|
||||||
|
|||||||
@@ -44,6 +44,11 @@
|
|||||||
&:hover {
|
&:hover {
|
||||||
background: var(--primary-strong);
|
background: var(--primary-strong);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&:disabled {
|
||||||
|
background: var(--shadow-weak);
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.button-secondary {
|
.button-secondary {
|
||||||
|
|||||||
@@ -5,10 +5,17 @@ $breakpoint3: 1200px;
|
|||||||
$breakpoint4: 1500px;
|
$breakpoint4: 1500px;
|
||||||
|
|
||||||
:root {
|
:root {
|
||||||
|
--primary: #f65596;
|
||||||
|
--primary-strong: #f90071;
|
||||||
|
--primary-faded: #ffcce4;
|
||||||
|
|
||||||
|
/*
|
||||||
|
--primary: #f04288;
|
||||||
|
|
||||||
--primary: #ff6c88;
|
--primary: #ff6c88;
|
||||||
--primary-strong: #ff4166;
|
--primary-strong: #ff4166;
|
||||||
--primary-faded: #ffdfee;
|
--primary-faded: #ffdfee;
|
||||||
/*
|
|
||||||
--primary: #f28;
|
--primary: #f28;
|
||||||
--primary-strong: #f90071;
|
--primary-strong: #f90071;
|
||||||
--primary-faded: #ffcce4;
|
--primary-faded: #ffcce4;
|
||||||
@@ -39,6 +46,8 @@ $breakpoint4: 1500px;
|
|||||||
--logo-shadow: drop-shadow(1px 0 0 $shadow-weak) drop-shadow(-1px 0 0 $shadow-weak) drop-shadow(0 1px 0 $shadow-weak) drop-shadow(0 -1px 0 $shadow-weak);
|
--logo-shadow: drop-shadow(1px 0 0 $shadow-weak) drop-shadow(-1px 0 0 $shadow-weak) drop-shadow(0 1px 0 $shadow-weak) drop-shadow(0 -1px 0 $shadow-weak);
|
||||||
--logo-highlight: drop-shadow(0 0 1px $highlight);
|
--logo-highlight: drop-shadow(0 0 1px $highlight);
|
||||||
|
|
||||||
|
--info: #321b24;
|
||||||
|
|
||||||
--male: #0af;
|
--male: #0af;
|
||||||
--female: #f0a;
|
--female: #f0a;
|
||||||
|
|
||||||
|
|||||||
5
assets/img/icons/film4.svg
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<!-- Generated by IcoMoon.io -->
|
||||||
|
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||||
|
<title>film4</title>
|
||||||
|
<path d="M0 2v12h16v-12h-16zM3 13h-2v-2h2v2zM3 9h-2v-2h2v2zM3 5h-2v-2h2v2zM12 13h-8v-10h8v10zM15 13h-2v-2h2v2zM15 9h-2v-2h2v2zM15 5h-2v-2h2v2zM6 5v6l4-3z"></path>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 322 B |
5
assets/img/icons/presentation.svg
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<!-- Generated by IcoMoon.io -->
|
||||||
|
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||||
|
<title>presentation</title>
|
||||||
|
<path d="M14.25 0h-13.5c-0.412 0-0.75 0.338-0.75 0.75v11.5c0 0.412 0.338 0.75 0.75 0.75h4.455l-2.040 2.040c-0.22 0.22-0.22 0.576 0 0.795 0.11 0.11 0.254 0.165 0.398 0.165s0.288-0.055 0.398-0.165l2.835-2.835h0.205v2.5c0 0.276 0.224 0.5 0.5 0.5s0.5-0.224 0.5-0.5v-2.5h0.205l2.835 2.835c0.11 0.11 0.254 0.165 0.398 0.165s0.288-0.055 0.398-0.165c0.22-0.22 0.22-0.576 0-0.795l-2.040-2.040h4.455c0.412 0 0.75-0.338 0.75-0.75v-11.5c0-0.412-0.338-0.75-0.75-0.75zM6 3l4 2.5-4 2.5v-5zM12.5 11h-10c-0.276 0-0.5-0.224-0.5-0.5s0.224-0.5 0.5-0.5h10c0.276 0 0.5 0.224 0.5 0.5s-0.224 0.5-0.5 0.5z"></path>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 756 B |
@@ -281,7 +281,7 @@ function initActorActions(store, router) {
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
actor: curateActor(actor, null, curateRelease),
|
actor: curateActor(actor, null, curateRelease),
|
||||||
releases: actor.scenesConnection.releases.map(release => curateRelease(release)),
|
releases: actor.scenesConnection.releases.map((release) => curateRelease(release)),
|
||||||
totalCount: actor.scenesConnection.totalCount,
|
totalCount: actor.scenesConnection.totalCount,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -292,6 +292,7 @@ function initActorActions(store, router) {
|
|||||||
query,
|
query,
|
||||||
gender,
|
gender,
|
||||||
age,
|
age,
|
||||||
|
country,
|
||||||
dob,
|
dob,
|
||||||
naturalBoobs,
|
naturalBoobs,
|
||||||
boobSize,
|
boobSize,
|
||||||
@@ -302,7 +303,8 @@ function initActorActions(store, router) {
|
|||||||
|
|
||||||
const genderFilter = (gender === null && 'gender: { isNull: true }')
|
const genderFilter = (gender === null && 'gender: { isNull: true }')
|
||||||
|| (gender === 'all' && ' ')
|
|| (gender === 'all' && ' ')
|
||||||
|| `gender: { equalTo: "${gender}" }`;
|
|| (gender && `gender: { equalTo: "${gender}" }`)
|
||||||
|
|| '';
|
||||||
|
|
||||||
const ageFilter = age ? `
|
const ageFilter = age ? `
|
||||||
or: [
|
or: [
|
||||||
@@ -325,12 +327,13 @@ function initActorActions(store, router) {
|
|||||||
` : '';
|
` : '';
|
||||||
|
|
||||||
const dobFilter = dob ? `dateOfBirth: { equalTo: "${dob}" }` : '';
|
const dobFilter = dob ? `dateOfBirth: { equalTo: "${dob}" }` : '';
|
||||||
|
const countryFilter = country ? `countryByBirthCountryAlpha2: { alpha2: { equalTo: "${country}" } }` : '';
|
||||||
|
|
||||||
const heightFilter = height ? `height: { greaterThanOrEqualTo: ${height[0]}, lessThanOrEqualTo: ${height[1]} }` : '';
|
const heightFilter = height ? `height: { greaterThanOrEqualTo: ${height[0]}, lessThanOrEqualTo: ${height[1]} }` : '';
|
||||||
const weightFilter = weight ? `weight: { greaterThanOrEqualTo: ${weight[0]}, lessThanOrEqualTo: ${weight[1]} }` : '';
|
const weightFilter = weight ? `weight: { greaterThanOrEqualTo: ${weight[0]}, lessThanOrEqualTo: ${weight[1]} }` : '';
|
||||||
const cupFilter = boobSize ? `cup: { greaterThanOrEqualTo: "${boobSize[0]}", lessThanOrEqualTo: "${boobSize[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 Actors(
|
||||||
$query: String
|
$query: String
|
||||||
$limit: Int,
|
$limit: Int,
|
||||||
@@ -355,6 +358,7 @@ function initActorActions(store, router) {
|
|||||||
${heightFilter}
|
${heightFilter}
|
||||||
${weightFilter}
|
${weightFilter}
|
||||||
${cupFilter}
|
${cupFilter}
|
||||||
|
${countryFilter}
|
||||||
naturalBoobs: {
|
naturalBoobs: {
|
||||||
equalTo: $naturalBoobs
|
equalTo: $naturalBoobs
|
||||||
}
|
}
|
||||||
@@ -407,19 +411,27 @@ function initActorActions(store, router) {
|
|||||||
${actorStashesFields}
|
${actorStashesFields}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
countries(
|
||||||
|
orderBy: NAME_ASC,
|
||||||
|
) {
|
||||||
|
alpha2
|
||||||
|
name
|
||||||
|
alias
|
||||||
|
}
|
||||||
}
|
}
|
||||||
`, {
|
`, {
|
||||||
query,
|
query,
|
||||||
offset: Math.max(0, (pageNumber - 1)) * limit,
|
offset: Math.max(0, (pageNumber - 1)) * limit,
|
||||||
limit,
|
limit,
|
||||||
naturalBoobs,
|
naturalBoobs: naturalBoobs || null,
|
||||||
hasAuth: !!store.state.auth.user,
|
hasAuth: !!store.state.auth.user,
|
||||||
userId: store.state.auth.user?.id,
|
userId: store.state.auth.user?.id,
|
||||||
});
|
});
|
||||||
|
|
||||||
return {
|
return {
|
||||||
actors: actors.map(actor => curateActor(actor)),
|
actors: actors.map((actor) => curateActor(actor)),
|
||||||
totalCount,
|
totalCount,
|
||||||
|
countries,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
function favoritesStash(state) {
|
function favoritesStash(state) {
|
||||||
return state.user.stashes.find(stash => stash.slug === 'favorites');
|
return state.user.stashes.find((stash) => stash.slug === 'favorites');
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
|||||||
@@ -31,8 +31,8 @@ function curateActor(actor, release) {
|
|||||||
|
|
||||||
if (actor.profiles) {
|
if (actor.profiles) {
|
||||||
const photos = actor.profiles
|
const photos = actor.profiles
|
||||||
.map(profile => ({ entity: profile.entity, ...profile.avatar }))
|
.map((profile) => ({ entity: profile.entity, ...profile.avatar }))
|
||||||
.filter(avatar => avatar.id && (!curatedActor.avatar || avatar.hash !== curatedActor.avatar.hash));
|
.filter((avatar) => avatar.id && (!curatedActor.avatar || avatar.hash !== curatedActor.avatar.hash));
|
||||||
|
|
||||||
const descriptions = actor.profiles.reduce((acc, profile) => ({
|
const descriptions = actor.profiles.reduce((acc, profile) => ({
|
||||||
...acc,
|
...acc,
|
||||||
@@ -57,34 +57,38 @@ function curateActor(actor, release) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (actor.stashes) {
|
if (actor.stashes) {
|
||||||
curatedActor.stashes = actor.stashes.filter(Boolean).map(stash => curateStash(stash.stash || stash)); // eslint-disable-line no-use-before-define
|
curatedActor.stashes = actor.stashes.filter(Boolean).map((stash) => curateStash(stash.stash || stash)); // eslint-disable-line no-use-before-define
|
||||||
}
|
}
|
||||||
|
|
||||||
curatedActor.stashes = actor.stashes?.map(stash => stash.stash || stash) || [];
|
curatedActor.stashes = actor.stashes?.map((stash) => stash.stash || stash) || [];
|
||||||
|
|
||||||
return curatedActor;
|
return curatedActor;
|
||||||
}
|
}
|
||||||
|
|
||||||
function curateRelease(release) {
|
function curateRelease(release, type = 'scene') {
|
||||||
const curatedRelease = {
|
const curatedRelease = {
|
||||||
...release,
|
...release,
|
||||||
|
type: release.type || type,
|
||||||
actors: [],
|
actors: [],
|
||||||
poster: release.poster && release.poster.media,
|
poster: release.poster && release.poster.media,
|
||||||
tags: release.tags ? release.tags.map(tag => tag.tag || tag) : [],
|
tags: release.tags ? release.tags.map((tag) => tag.tag || tag) : [],
|
||||||
};
|
};
|
||||||
|
|
||||||
if (release.scenes) curatedRelease.scenes = release.scenes.filter(Boolean).map(({ scene }) => curateRelease(scene));
|
curatedRelease.scenes = release.scenes?.filter(Boolean).map(({ scene }) => curateRelease(scene, 'scene')) || [];
|
||||||
if (release.movies) curatedRelease.movies = release.movies.filter(Boolean).map(({ movie }) => curateRelease(movie));
|
curatedRelease.movies = release.movies?.filter(Boolean).map(({ movie }) => curateRelease(movie, 'movie')) || [];
|
||||||
if (release.chapters) curatedRelease.chapters = release.chapters.filter(Boolean).map(chapter => curateRelease(chapter));
|
curatedRelease.series = release.series?.filter(Boolean).map(({ serie }) => curateRelease(serie, 'serie')) || [];
|
||||||
if (release.photos) curatedRelease.photos = release.photos.filter(Boolean).map(photo => photo.media || photo);
|
curatedRelease.chapters = release.chapters?.filter(Boolean).map((chapter) => curateRelease(chapter)) || [];
|
||||||
if (release.covers) curatedRelease.covers = release.covers.filter(Boolean).map(({ media }) => media);
|
curatedRelease.photos = release.photos?.filter(Boolean).map((photo) => photo.media || photo) || [];
|
||||||
|
curatedRelease.scenesPhotos = release.scenesPhotos?.filter(Boolean).map((photo) => photo.media || photo) || [];
|
||||||
|
curatedRelease.covers = release.covers?.filter(Boolean).map(({ media }) => media) || [];
|
||||||
|
|
||||||
if (release.trailer) curatedRelease.trailer = release.trailer.media;
|
if (release.trailer) curatedRelease.trailer = release.trailer.media;
|
||||||
if (release.teaser) curatedRelease.teaser = release.teaser.media;
|
if (release.teaser) curatedRelease.teaser = release.teaser.media;
|
||||||
if (release.actors) curatedRelease.actors = release.actors.filter(Boolean).map(actor => curateActor(actor.actor || actor, curatedRelease));
|
if (release.actors) curatedRelease.actors = release.actors.filter(Boolean).map((actor) => curateActor(actor.actor || actor, curatedRelease));
|
||||||
if (release.directors) curatedRelease.directors = release.directors.filter(Boolean).map(director => curateActor(director.director || director, curatedRelease));
|
if (release.directors) curatedRelease.directors = release.directors.filter(Boolean).map((director) => curateActor(director.director || director, curatedRelease));
|
||||||
if (release.movieTags && release.movieTags.length > 0) curatedRelease.tags = release.movieTags.filter(Boolean).map(({ tag }) => tag);
|
if (release.movieTags && release.movieTags.length > 0) curatedRelease.tags = release.movieTags.filter(Boolean).map(({ tag }) => tag);
|
||||||
if (release.movieActors && release.movieActors.length > 0) curatedRelease.actors = release.movieActors.filter(Boolean).map(({ actor }) => curateActor(actor, curatedRelease));
|
if (release.movieActors && release.movieActors.length > 0) curatedRelease.actors = release.movieActors.filter(Boolean).map(({ actor }) => curateActor(actor, curatedRelease));
|
||||||
if (release.stashes) curatedRelease.stashes = release.stashes.filter(Boolean).map(stash => curateStash(stash.stash || stash)); // eslint-disable-line no-use-before-define
|
if (release.stashes) curatedRelease.stashes = release.stashes.filter(Boolean).map((stash) => curateStash(stash.stash || stash)); // eslint-disable-line no-use-before-define
|
||||||
|
|
||||||
if (release.productionLocation) {
|
if (release.productionLocation) {
|
||||||
curatedRelease.productionLocation = {
|
curatedRelease.productionLocation = {
|
||||||
@@ -105,17 +109,20 @@ function curateEntity(entity, parent, releases) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
if (entity.tags) curatedEntity.tags = entity.tags.map(({ tag }) => tag);
|
if (entity.tags) curatedEntity.tags = entity.tags.map(({ tag }) => tag);
|
||||||
|
if (entity.sceneTags) curatedEntity.sceneTags = entity.sceneTags;
|
||||||
|
|
||||||
if (entity.children) {
|
if (entity.children) {
|
||||||
if (entity.children.nodes) {
|
if (entity.children.nodes) {
|
||||||
curatedEntity.children = entity.children.nodes.map(childEntity => curateEntity(childEntity, curatedEntity));
|
curatedEntity.children = entity.children.nodes.map((childEntity) => curateEntity(childEntity, curatedEntity));
|
||||||
}
|
}
|
||||||
|
|
||||||
curatedEntity.childrenTotal = entity.children.totalCount;
|
curatedEntity.childrenTotal = entity.children.totalCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entity.parent || parent) curatedEntity.parent = curateEntity(entity.parent || parent);
|
if (entity.parent || parent) curatedEntity.parent = curateEntity(entity.parent || parent);
|
||||||
if (releases) curatedEntity.releases = releases.map(release => curateRelease(release));
|
if (releases) curatedEntity.releases = releases.map((release) => curateRelease(release));
|
||||||
|
|
||||||
|
curatedEntity.sceneTotal = entity.sceneTotal;
|
||||||
|
|
||||||
return curatedEntity;
|
return curatedEntity;
|
||||||
}
|
}
|
||||||
@@ -136,20 +143,30 @@ function curateTag(tag) {
|
|||||||
function curateStash(stash) {
|
function curateStash(stash) {
|
||||||
const curatedStash = stash;
|
const curatedStash = stash;
|
||||||
|
|
||||||
if (stash.scenes) {
|
if (stash.scenes || stash.scenesConnection?.scenes) {
|
||||||
curatedStash.scenes = stash.scenes.map(item => ({
|
curatedStash.sceneTotal = stash.scenesConnection?.totalCount || null;
|
||||||
|
curatedStash.scenes = (stash.scenesConnection?.scenes || stash.scenes).map((item) => ({
|
||||||
...item,
|
...item,
|
||||||
scene: curateRelease(item.scene),
|
scene: curateRelease(item.scene),
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (stash.actors) {
|
if (stash.actors || stash.actorsConnection?.actors) {
|
||||||
curatedStash.actors = stash.actors.map(item => ({
|
curatedStash.actorTotal = stash.actorsConnection?.totalCount || null;
|
||||||
|
curatedStash.actors = (stash.actorsConnection?.actors || stash.actors).map((item) => ({
|
||||||
...item,
|
...item,
|
||||||
actor: curateActor(item.actor),
|
actor: curateActor(item.actor),
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (stash.movies || stash.moviesConnection?.movies) {
|
||||||
|
curatedStash.movieTotal = stash.moviesConnection?.totalCount || null;
|
||||||
|
curatedStash.movies = (stash.moviesConnection?.movies || stash.movies).map((item) => ({
|
||||||
|
...item,
|
||||||
|
movie: curateRelease(item.movie),
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
return curatedStash;
|
return curatedStash;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -161,11 +178,11 @@ function curateAlert(alert) {
|
|||||||
const curatedAlert = alert;
|
const curatedAlert = alert;
|
||||||
|
|
||||||
if (alert.actors) {
|
if (alert.actors) {
|
||||||
curatedAlert.actors = alert.actors.map(actor => curateActor(actor.actor || actor));
|
curatedAlert.actors = alert.actors.map((actor) => curateActor(actor.actor || actor));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (alert.tags) {
|
if (alert.tags) {
|
||||||
curatedAlert.tags = alert.tags.map(tag => curateTag(tag.tag || tag));
|
curatedAlert.tags = alert.tags.map((tag) => curateTag(tag.tag || tag));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (alert.entity) {
|
if (alert.entity) {
|
||||||
@@ -173,7 +190,7 @@ function curateAlert(alert) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (alert.stashes) {
|
if (alert.stashes) {
|
||||||
curatedAlert.stashes = alert.stashes.map(stash => curateStash(stash.stash || stash));
|
curatedAlert.stashes = alert.stashes.map((stash) => curateStash(stash.stash || stash));
|
||||||
}
|
}
|
||||||
|
|
||||||
return curatedAlert;
|
return curatedAlert;
|
||||||
@@ -187,11 +204,11 @@ function curateUser(user) {
|
|||||||
const curatedUser = user;
|
const curatedUser = user;
|
||||||
|
|
||||||
if (user.stashes) {
|
if (user.stashes) {
|
||||||
curatedUser.stashes = user.stashes.map(stash => curateStash(stash.stash || stash));
|
curatedUser.stashes = user.stashes.map((stash) => curateStash(stash.stash || stash));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (user.alerts) {
|
if (user.alerts) {
|
||||||
curatedUser.alerts = user.alerts.map(alert => curateAlert(alert.alert || alert));
|
curatedUser.alerts = user.alerts.map((alert) => curateAlert(alert.alert || alert));
|
||||||
}
|
}
|
||||||
|
|
||||||
return curatedUser;
|
return curatedUser;
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ function initEntitiesActions(store, router) {
|
|||||||
}) {
|
}) {
|
||||||
const { before, after, orderBy } = getDateRange(range);
|
const { before, after, orderBy } = getDateRange(range);
|
||||||
|
|
||||||
const { entity, connection: { releases, totalCount } } = await graphql(`
|
const { entity } = await graphql(`
|
||||||
query Entity(
|
query Entity(
|
||||||
$entitySlug: String!
|
$entitySlug: String!
|
||||||
$entityType: String! = "channel"
|
$entityType: String! = "channel"
|
||||||
@@ -22,8 +22,6 @@ function initEntitiesActions(store, router) {
|
|||||||
$offset: Int = 0,
|
$offset: Int = 0,
|
||||||
$after: Datetime = "1900-01-01",
|
$after: Datetime = "1900-01-01",
|
||||||
$before: Datetime = "2100-01-01",
|
$before: Datetime = "2100-01-01",
|
||||||
$afterTime: Datetime = "1900-01-01",
|
|
||||||
$beforeTime: Datetime = "2100-01-01",
|
|
||||||
$orderBy: [ReleasesOrderBy!]
|
$orderBy: [ReleasesOrderBy!]
|
||||||
$exclude: [String!]
|
$exclude: [String!]
|
||||||
$hasAuth: Boolean!
|
$hasAuth: Boolean!
|
||||||
@@ -43,6 +41,11 @@ function initEntitiesActions(store, router) {
|
|||||||
slug
|
slug
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
sceneTags {
|
||||||
|
id
|
||||||
|
name
|
||||||
|
slug
|
||||||
|
}
|
||||||
children: childEntitiesConnection(
|
children: childEntitiesConnection(
|
||||||
orderBy: [PRIORITY_DESC, NAME_ASC],
|
orderBy: [PRIORITY_DESC, NAME_ASC],
|
||||||
filter: {
|
filter: {
|
||||||
@@ -64,6 +67,10 @@ function initEntitiesActions(store, router) {
|
|||||||
independent
|
independent
|
||||||
hasLogo
|
hasLogo
|
||||||
${campaignsFragment}
|
${campaignsFragment}
|
||||||
|
sceneTotal
|
||||||
|
children: childEntitiesConnection {
|
||||||
|
totalCount
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
${campaignsFragment}
|
${campaignsFragment}
|
||||||
@@ -77,82 +84,44 @@ function initEntitiesActions(store, router) {
|
|||||||
hasLogo
|
hasLogo
|
||||||
${campaignsFragment}
|
${campaignsFragment}
|
||||||
}
|
}
|
||||||
}
|
connection: scenesConnection(
|
||||||
connection: releasesConnection(
|
first: $limit
|
||||||
first: $limit
|
offset: $offset
|
||||||
offset: $offset
|
orderBy: $orderBy
|
||||||
orderBy: $orderBy
|
filter: {
|
||||||
filter: {
|
or: [
|
||||||
and: [
|
{
|
||||||
{
|
date: {
|
||||||
entity: {
|
isNull: ${entityType !== 'network'}
|
||||||
or: [
|
|
||||||
{
|
|
||||||
slug: { equalTo: $entitySlug }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
parent: {
|
|
||||||
slug: { equalTo: $entitySlug }
|
|
||||||
type: { equalTo: $entityType }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
parent: {
|
|
||||||
parent: {
|
|
||||||
slug: { equalTo: $entitySlug }
|
|
||||||
type: { equalTo: $entityType }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{
|
|
||||||
parent: {
|
|
||||||
parent: {
|
|
||||||
parent: {
|
|
||||||
slug: { equalTo: $entitySlug }
|
|
||||||
type: { equalTo: $entityType }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{
|
|
||||||
or: [
|
|
||||||
{
|
|
||||||
date: {
|
|
||||||
lessThan: $before,
|
|
||||||
greaterThan: $after
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
date: {
|
|
||||||
isNull: true
|
|
||||||
},
|
|
||||||
createdAt: {
|
|
||||||
lessThan: $beforeTime,
|
|
||||||
greaterThan: $afterTime,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
]
|
}
|
||||||
|
{
|
||||||
|
date: {
|
||||||
|
isNull: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
effectiveDate: {
|
||||||
|
lessThan: $before,
|
||||||
|
greaterThan: $after
|
||||||
}
|
}
|
||||||
]
|
releasesTagsConnection: {
|
||||||
releasesTagsConnection: {
|
none: {
|
||||||
none: {
|
tag: {
|
||||||
tag: {
|
slug: {
|
||||||
slug: {
|
in: $exclude
|
||||||
in: $exclude
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
) {
|
||||||
|
releases: nodes {
|
||||||
|
${releaseFields}
|
||||||
|
}
|
||||||
|
totalCount
|
||||||
}
|
}
|
||||||
) {
|
}
|
||||||
releases: nodes {
|
|
||||||
${releaseFields}
|
|
||||||
}
|
|
||||||
totalCount
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
`, {
|
`, {
|
||||||
entitySlug,
|
entitySlug,
|
||||||
@@ -162,8 +131,6 @@ function initEntitiesActions(store, router) {
|
|||||||
after,
|
after,
|
||||||
before,
|
before,
|
||||||
orderBy,
|
orderBy,
|
||||||
afterTime: store.getters.after,
|
|
||||||
beforeTime: store.getters.before,
|
|
||||||
exclude: store.state.ui.tagFilter,
|
exclude: store.state.ui.tagFilter,
|
||||||
hasAuth: !!store.state.auth.user,
|
hasAuth: !!store.state.auth.user,
|
||||||
userId: store.state.auth.user?.id,
|
userId: store.state.auth.user?.id,
|
||||||
@@ -175,8 +142,8 @@ function initEntitiesActions(store, router) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
entity: curateEntity(entity, null, releases),
|
entity: curateEntity(entity, null, entity.connection.releases),
|
||||||
totalCount,
|
totalCount: entity.connection.totalCount,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -240,17 +207,17 @@ function initEntitiesActions(store, router) {
|
|||||||
entitySlugs,
|
entitySlugs,
|
||||||
});
|
});
|
||||||
|
|
||||||
return entities.map(entity => curateEntity(entity));
|
return entities.map((entity) => curateEntity(entity));
|
||||||
}
|
}
|
||||||
|
|
||||||
async function searchEntities({ _commit }, { query, limit = 20 }) {
|
async function searchEntities({ _commit }, { query, limit = 20 }) {
|
||||||
const { entities } = await graphql(`
|
const { entities } = await graphql(`
|
||||||
query SearchEntities(
|
query SearchEntities(
|
||||||
$query: String!
|
$query: String!
|
||||||
$limit:Int = 20,
|
$limit: Int = 20,
|
||||||
) {
|
) {
|
||||||
entities: searchEntities(
|
entities: searchEntities(
|
||||||
search: $query,
|
search: $query
|
||||||
first: $limit
|
first: $limit
|
||||||
) {
|
) {
|
||||||
id
|
id
|
||||||
@@ -274,7 +241,7 @@ function initEntitiesActions(store, router) {
|
|||||||
limit,
|
limit,
|
||||||
});
|
});
|
||||||
|
|
||||||
return entities.map(entity => curateEntity(entity));
|
return entities.map((entity) => curateEntity(entity));
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ export function formatDuration(duration, forceHours) {
|
|||||||
const minutes = Math.floor((duration % 3600) / 60);
|
const minutes = Math.floor((duration % 3600) / 60);
|
||||||
const seconds = Math.floor(duration % 60);
|
const seconds = Math.floor(duration % 60);
|
||||||
|
|
||||||
const [formattedHours, formattedMinutes, formattedSeconds] = [hours, minutes, seconds].map(segment => segment.toString().padStart(2, '0'));
|
const [formattedHours, formattedMinutes, formattedSeconds] = [hours, minutes, seconds].map((segment) => segment.toString().padStart(2, '0'));
|
||||||
|
|
||||||
if (duration >= 3600 || forceHours) {
|
if (duration >= 3600 || forceHours) {
|
||||||
return `${formattedHours}:${formattedMinutes}:${formattedSeconds}`;
|
return `${formattedHours}:${formattedMinutes}:${formattedSeconds}`;
|
||||||
|
|||||||
@@ -125,7 +125,7 @@ const movieFields = `
|
|||||||
type
|
type
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
covers: moviesCovers {
|
covers: moviesCovers(orderBy: MEDIA_BY_MEDIA_ID__INDEX_ASC) {
|
||||||
media {
|
media {
|
||||||
id
|
id
|
||||||
path
|
path
|
||||||
@@ -145,6 +145,24 @@ const movieFields = `
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
isFavorited
|
||||||
|
isStashed(includeFavorites: false)
|
||||||
|
stashes: stashesMovies(
|
||||||
|
filter: {
|
||||||
|
stash: {
|
||||||
|
userId: {
|
||||||
|
equalTo: $userId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
) @include(if: $hasAuth) {
|
||||||
|
stash {
|
||||||
|
id
|
||||||
|
name
|
||||||
|
slug
|
||||||
|
primary
|
||||||
|
}
|
||||||
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
const campaignsFragment = `
|
const campaignsFragment = `
|
||||||
@@ -226,7 +244,12 @@ const releaseDirectorFragment = `
|
|||||||
`;
|
`;
|
||||||
|
|
||||||
const releaseTagsFragment = `
|
const releaseTagsFragment = `
|
||||||
tags: releasesTags(orderBy: TAG_BY_TAG_ID__PRIORITY_DESC) {
|
tags: releasesTags(
|
||||||
|
orderBy: TAG_BY_TAG_ID__PRIORITY_DESC
|
||||||
|
filter: {
|
||||||
|
tagId: { isNull: false }
|
||||||
|
}
|
||||||
|
) {
|
||||||
tag {
|
tag {
|
||||||
name
|
name
|
||||||
priority
|
priority
|
||||||
@@ -237,7 +260,7 @@ const releaseTagsFragment = `
|
|||||||
`;
|
`;
|
||||||
|
|
||||||
const releasePosterFragment = `
|
const releasePosterFragment = `
|
||||||
poster: releasesPosterByReleaseId {
|
poster: releasesPoster {
|
||||||
media {
|
media {
|
||||||
id
|
id
|
||||||
index
|
index
|
||||||
@@ -312,7 +335,7 @@ const releasePhotosFragment = `
|
|||||||
`;
|
`;
|
||||||
|
|
||||||
const releaseTrailerFragment = `
|
const releaseTrailerFragment = `
|
||||||
trailer: releasesTrailerByReleaseId {
|
trailer: releasesTrailer {
|
||||||
media {
|
media {
|
||||||
id
|
id
|
||||||
index
|
index
|
||||||
@@ -326,7 +349,7 @@ const releaseTrailerFragment = `
|
|||||||
`;
|
`;
|
||||||
|
|
||||||
const releaseTeaserFragment = `
|
const releaseTeaserFragment = `
|
||||||
teaser: releasesTeaserByReleaseId {
|
teaser: releasesTeaser {
|
||||||
media {
|
media {
|
||||||
id
|
id
|
||||||
index
|
index
|
||||||
@@ -362,6 +385,13 @@ const releaseFields = `
|
|||||||
slug
|
slug
|
||||||
url
|
url
|
||||||
}
|
}
|
||||||
|
movies: moviesScenesBySceneId {
|
||||||
|
movie {
|
||||||
|
id
|
||||||
|
title
|
||||||
|
slug
|
||||||
|
}
|
||||||
|
}
|
||||||
isNew
|
isNew
|
||||||
isFavorited
|
isFavorited
|
||||||
isStashed(includeFavorites: false)
|
isStashed(includeFavorites: false)
|
||||||
@@ -412,6 +442,29 @@ const releasesFragment = `
|
|||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
const mediaFields = `
|
||||||
|
id
|
||||||
|
index
|
||||||
|
path
|
||||||
|
thumbnail
|
||||||
|
lazy
|
||||||
|
isS3
|
||||||
|
comment
|
||||||
|
sfw: sfwMedia {
|
||||||
|
id
|
||||||
|
thumbnail
|
||||||
|
lazy
|
||||||
|
path
|
||||||
|
comment
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
|
const mediaFragment = `
|
||||||
|
media {
|
||||||
|
${mediaFields}
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
const releaseFragment = `
|
const releaseFragment = `
|
||||||
release(id: $releaseId) {
|
release(id: $releaseId) {
|
||||||
id
|
id
|
||||||
@@ -457,7 +510,7 @@ const releaseFragment = `
|
|||||||
slug
|
slug
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
poster: chaptersPosterByChapterId {
|
poster: chaptersPoster {
|
||||||
media {
|
media {
|
||||||
id
|
id
|
||||||
index
|
index
|
||||||
@@ -486,7 +539,7 @@ const releaseFragment = `
|
|||||||
id
|
id
|
||||||
title
|
title
|
||||||
slug
|
slug
|
||||||
covers: moviesCovers {
|
covers: moviesCovers(orderBy: MEDIA_BY_MEDIA_ID__INDEX_ASC) {
|
||||||
media {
|
media {
|
||||||
id
|
id
|
||||||
index
|
index
|
||||||
@@ -506,6 +559,19 @@ const releaseFragment = `
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
series: seriesScenesBySceneId {
|
||||||
|
serie {
|
||||||
|
id
|
||||||
|
title
|
||||||
|
slug
|
||||||
|
covers: seriesCoversBySerieId(orderBy: MEDIA_BY_MEDIA_ID__INDEX_ASC) {
|
||||||
|
${mediaFragment}
|
||||||
|
}
|
||||||
|
poster: seriesPosterBySerieId {
|
||||||
|
${mediaFragment}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
isFavorited
|
isFavorited
|
||||||
isStashed(includeFavorites: false)
|
isStashed(includeFavorites: false)
|
||||||
stashes: stashesScenesBySceneId(
|
stashes: stashesScenesBySceneId(
|
||||||
@@ -594,6 +660,8 @@ export {
|
|||||||
actorFields,
|
actorFields,
|
||||||
actorStashesFields,
|
actorStashesFields,
|
||||||
campaignsFragment,
|
campaignsFragment,
|
||||||
|
mediaFields,
|
||||||
|
mediaFragment,
|
||||||
movieFields,
|
movieFields,
|
||||||
releaseActorsFragment,
|
releaseActorsFragment,
|
||||||
releaseFields,
|
releaseFields,
|
||||||
|
|||||||
@@ -3,30 +3,6 @@ import dayjs from 'dayjs';
|
|||||||
|
|
||||||
dayjs.extend(utc);
|
dayjs.extend(utc);
|
||||||
|
|
||||||
const dateRanges = {
|
|
||||||
latest: () => ({
|
|
||||||
after: '1900-01-01',
|
|
||||||
before: dayjs.utc().toDate(),
|
|
||||||
orderBy: ['DATE_DESC', 'CREATED_AT_DESC'],
|
|
||||||
}),
|
|
||||||
upcoming: () => ({
|
|
||||||
after: dayjs.utc().toDate(),
|
|
||||||
before: '2100-01-01',
|
|
||||||
orderBy: ['DATE_ASC', 'CREATED_AT_ASC'],
|
|
||||||
}),
|
|
||||||
new: () => ({
|
|
||||||
after: '1900-01-01 00:00:00',
|
|
||||||
before: '2100-01-01',
|
|
||||||
orderBy: ['CREATED_AT_DESC', 'DATE_ASC'],
|
|
||||||
}),
|
|
||||||
all: () => ({
|
|
||||||
after: '1900-01-01',
|
|
||||||
before: '2100-01-01',
|
|
||||||
orderBy: ['DATE_DESC', 'CREATED_AT_DESC'],
|
|
||||||
}),
|
|
||||||
};
|
|
||||||
|
|
||||||
/* requires PostgreSQL 12.x> not available in production yet
|
|
||||||
const dateRanges = {
|
const dateRanges = {
|
||||||
latest: () => ({
|
latest: () => ({
|
||||||
after: '1900-01-01',
|
after: '1900-01-01',
|
||||||
@@ -49,7 +25,6 @@ const dateRanges = {
|
|||||||
orderBy: ['EFFECTIVE_DATE_DESC'],
|
orderBy: ['EFFECTIVE_DATE_DESC'],
|
||||||
}),
|
}),
|
||||||
};
|
};
|
||||||
*/
|
|
||||||
|
|
||||||
function getDateRange(range) {
|
function getDateRange(range) {
|
||||||
return (dateRanges[range] || dateRanges.all)();
|
return (dateRanges[range] || dateRanges.all)();
|
||||||
|
|||||||
@@ -109,6 +109,10 @@ async function init() {
|
|||||||
document.title = 'traxxx';
|
document.title = 'traxxx';
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
beforeCreate() {
|
||||||
|
this.uid = uid;
|
||||||
|
uid += 1;
|
||||||
|
},
|
||||||
methods: {
|
methods: {
|
||||||
formatDate,
|
formatDate,
|
||||||
formatDuration,
|
formatDuration,
|
||||||
@@ -117,10 +121,6 @@ async function init() {
|
|||||||
getPath,
|
getPath,
|
||||||
getBgPath: (media, type) => `url(${getPath(media, type)})`,
|
getBgPath: (media, type) => `url(${getPath(media, type)})`,
|
||||||
},
|
},
|
||||||
beforeCreate() {
|
|
||||||
this.uid = uid;
|
|
||||||
uid += 1;
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
|
|
||||||
app.directive('tooltip', {
|
app.directive('tooltip', {
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ import {
|
|||||||
releaseFragment,
|
releaseFragment,
|
||||||
releaseFields,
|
releaseFields,
|
||||||
movieFields,
|
movieFields,
|
||||||
|
mediaFragment,
|
||||||
|
mediaFields,
|
||||||
} from '../fragments';
|
} from '../fragments';
|
||||||
import { curateRelease } from '../curate';
|
import { curateRelease } from '../curate';
|
||||||
import getDateRange from '../get-date-range';
|
import getDateRange from '../get-date-range';
|
||||||
@@ -37,7 +39,7 @@ function initReleasesActions(store, router) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
return {
|
return {
|
||||||
releases: releases.map(release => curateRelease(release)),
|
releases: releases.map((release) => curateRelease(release)),
|
||||||
totalCount,
|
totalCount,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -72,6 +74,8 @@ function initReleasesActions(store, router) {
|
|||||||
query Movies(
|
query Movies(
|
||||||
$limit:Int = 1000,
|
$limit:Int = 1000,
|
||||||
$offset:Int = 0,
|
$offset:Int = 0,
|
||||||
|
$hasAuth: Boolean!
|
||||||
|
$userId: Int
|
||||||
) {
|
) {
|
||||||
connection: moviesConnection(
|
connection: moviesConnection(
|
||||||
first: $limit
|
first: $limit
|
||||||
@@ -90,12 +94,14 @@ function initReleasesActions(store, router) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
`, {
|
`, {
|
||||||
|
hasAuth: !!store.state.auth.user,
|
||||||
|
userId: store.state.auth.user?.id,
|
||||||
limit,
|
limit,
|
||||||
offset: Math.max(0, (pageNumber - 1)) * limit,
|
offset: Math.max(0, (pageNumber - 1)) * limit,
|
||||||
});
|
});
|
||||||
|
|
||||||
return {
|
return {
|
||||||
movies: movies.map(release => curateRelease(release)),
|
movies: movies.map((release) => curateRelease(release)),
|
||||||
totalCount,
|
totalCount,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -106,6 +112,8 @@ function initReleasesActions(store, router) {
|
|||||||
$query: String!
|
$query: String!
|
||||||
$limit:Int = 20
|
$limit:Int = 20
|
||||||
$offset:Int = 0
|
$offset:Int = 0
|
||||||
|
$hasAuth: Boolean!
|
||||||
|
$userId: Int
|
||||||
) {
|
) {
|
||||||
connection: searchMoviesConnection(
|
connection: searchMoviesConnection(
|
||||||
query: $query
|
query: $query
|
||||||
@@ -122,6 +130,8 @@ function initReleasesActions(store, router) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
`, {
|
`, {
|
||||||
|
hasAuth: !!store.state.auth.user,
|
||||||
|
userId: store.state.auth.user?.id,
|
||||||
query,
|
query,
|
||||||
limit,
|
limit,
|
||||||
offset: Math.max(0, (pageNumber - 1)) * limit,
|
offset: Math.max(0, (pageNumber - 1)) * limit,
|
||||||
@@ -133,16 +143,16 @@ function initReleasesActions(store, router) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
async function fetchMovieById({ _commit }, movieId) {
|
async function fetchCollectionById({ _commit }, movieId, type = 'movie') {
|
||||||
// const release = await get(`/releases/${releaseId}`);
|
// const release = await get(`/releases/${releaseId}`);
|
||||||
|
|
||||||
const { movie } = await graphql(`
|
const result = await graphql(`
|
||||||
query Movie(
|
query Movie(
|
||||||
$movieId: Int!
|
$movieId: Int!
|
||||||
$hasAuth: Boolean!
|
$hasAuth: Boolean!
|
||||||
$userId: Int
|
$userId: Int
|
||||||
) {
|
) {
|
||||||
movie(id: $movieId) {
|
${type}(id: $movieId) {
|
||||||
id
|
id
|
||||||
title
|
title
|
||||||
description
|
description
|
||||||
@@ -174,7 +184,7 @@ function initReleasesActions(store, router) {
|
|||||||
isS3
|
isS3
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
poster: moviesPosterByMovieId {
|
poster: ${type === 'series' ? 'seriesPosterBySerieId' : 'moviesPoster'} {
|
||||||
media {
|
media {
|
||||||
id
|
id
|
||||||
path
|
path
|
||||||
@@ -187,7 +197,7 @@ function initReleasesActions(store, router) {
|
|||||||
isS3
|
isS3
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
covers: moviesCovers {
|
covers: ${type === 'series' ? 'seriesCoversBySerieId' : 'moviesCovers'}(orderBy: MEDIA_BY_MEDIA_ID__INDEX_ASC) {
|
||||||
media {
|
media {
|
||||||
id
|
id
|
||||||
path
|
path
|
||||||
@@ -200,14 +210,14 @@ function initReleasesActions(store, router) {
|
|||||||
isS3
|
isS3
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
trailer: moviesTrailerByMovieId {
|
trailer: ${type === 'series' ? 'seriesTrailerBySerieId' : 'moviesTrailer'} {
|
||||||
media {
|
media {
|
||||||
id
|
id
|
||||||
path
|
path
|
||||||
isS3
|
isS3
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
scenes: moviesScenes {
|
scenes: ${type === 'series' ? 'seriesScenesBySerieId' : 'moviesScenes'} {
|
||||||
scene {
|
scene {
|
||||||
${releaseFields}
|
${releaseFields}
|
||||||
}
|
}
|
||||||
@@ -217,25 +227,11 @@ function initReleasesActions(store, router) {
|
|||||||
slug
|
slug
|
||||||
name
|
name
|
||||||
}
|
}
|
||||||
photos {
|
photos: ${type === 'series' ? 'seriesPhotosBySerieId' : 'moviesPhotos'} {
|
||||||
id
|
${mediaFragment}
|
||||||
index
|
}
|
||||||
path
|
scenesPhotos {
|
||||||
thumbnail
|
${mediaFields}
|
||||||
lazy
|
|
||||||
width
|
|
||||||
height
|
|
||||||
thumbnailWidth
|
|
||||||
thumbnailHeight
|
|
||||||
isS3
|
|
||||||
comment
|
|
||||||
sfw: sfwMedia {
|
|
||||||
id
|
|
||||||
thumbnail
|
|
||||||
lazy
|
|
||||||
path
|
|
||||||
comment
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
entity {
|
entity {
|
||||||
id
|
id
|
||||||
@@ -251,7 +247,7 @@ function initReleasesActions(store, router) {
|
|||||||
hasLogo
|
hasLogo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stashes: stashesMovies(
|
stashes: ${type === 'series' ? 'stashesSeriesBySerieId' : 'stashesMovies'}(
|
||||||
filter: {
|
filter: {
|
||||||
stash: {
|
stash: {
|
||||||
userId: {
|
userId: {
|
||||||
@@ -275,12 +271,20 @@ function initReleasesActions(store, router) {
|
|||||||
userId: store.state.auth.user?.id,
|
userId: store.state.auth.user?.id,
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!movie) {
|
if (!result[type]) {
|
||||||
router.replace('/not-found');
|
router.replace('/not-found');
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return curateRelease(movie);
|
return curateRelease(result[type]);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function fetchMovieById(context, movieId) {
|
||||||
|
return fetchCollectionById(context, movieId, 'movie');
|
||||||
|
}
|
||||||
|
|
||||||
|
async function fetchSerieById(context, serieId) {
|
||||||
|
return fetchCollectionById(context, serieId, 'series');
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@@ -288,6 +292,7 @@ function initReleasesActions(store, router) {
|
|||||||
fetchReleaseById,
|
fetchReleaseById,
|
||||||
fetchMovies,
|
fetchMovies,
|
||||||
fetchMovieById,
|
fetchMovieById,
|
||||||
|
fetchSerieById,
|
||||||
searchMovies,
|
searchMovies,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -71,10 +71,15 @@ const routes = [
|
|||||||
component: Release,
|
component: Release,
|
||||||
name: 'movie',
|
name: 'movie',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: '/serie/:releaseId/:releaseSlug?',
|
||||||
|
component: Release,
|
||||||
|
name: 'serie',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: '/actor/:actorId/:actorSlug',
|
path: '/actor/:actorId/:actorSlug',
|
||||||
name: 'actor',
|
name: 'actor',
|
||||||
redirect: from => ({
|
redirect: (from) => ({
|
||||||
name: 'actorRange',
|
name: 'actorRange',
|
||||||
params: {
|
params: {
|
||||||
...from.params,
|
...from.params,
|
||||||
@@ -91,7 +96,7 @@ const routes = [
|
|||||||
{
|
{
|
||||||
path: '/director/:actorId/:actorSlug',
|
path: '/director/:actorId/:actorSlug',
|
||||||
name: 'director',
|
name: 'director',
|
||||||
redirect: from => ({
|
redirect: (from) => ({
|
||||||
name: 'directorRange',
|
name: 'directorRange',
|
||||||
params: {
|
params: {
|
||||||
...from.params,
|
...from.params,
|
||||||
@@ -107,7 +112,7 @@ const routes = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/channel/:entitySlug',
|
path: '/channel/:entitySlug',
|
||||||
redirect: from => ({
|
redirect: (from) => ({
|
||||||
name: 'channel',
|
name: 'channel',
|
||||||
params: {
|
params: {
|
||||||
...from.params,
|
...from.params,
|
||||||
@@ -123,7 +128,7 @@ const routes = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/network/:entitySlug',
|
path: '/network/:entitySlug',
|
||||||
redirect: from => ({
|
redirect: (from) => ({
|
||||||
name: 'network',
|
name: 'network',
|
||||||
params: {
|
params: {
|
||||||
...from.params,
|
...from.params,
|
||||||
@@ -139,7 +144,7 @@ const routes = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/studio/:entitySlug',
|
path: '/studio/:entitySlug',
|
||||||
redirect: from => ({
|
redirect: (from) => ({
|
||||||
name: 'studio',
|
name: 'studio',
|
||||||
params: {
|
params: {
|
||||||
...from.params,
|
...from.params,
|
||||||
@@ -155,7 +160,7 @@ const routes = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/tag/:tagSlug',
|
path: '/tag/:tagSlug',
|
||||||
redirect: from => ({
|
redirect: (from) => ({
|
||||||
name: 'tag',
|
name: 'tag',
|
||||||
params: {
|
params: {
|
||||||
...from.params,
|
...from.params,
|
||||||
@@ -171,7 +176,7 @@ const routes = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/actors',
|
path: '/actors',
|
||||||
redirect: from => ({
|
redirect: (from) => ({
|
||||||
name: 'actors',
|
name: 'actors',
|
||||||
params: {
|
params: {
|
||||||
...from.params,
|
...from.params,
|
||||||
@@ -228,7 +233,18 @@ const routes = [
|
|||||||
name: 'notifications',
|
name: 'notifications',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/stash/:stashId/:stashSlug?',
|
path: '/stash/:stashId/:stashSlug',
|
||||||
|
redirect: (from) => ({
|
||||||
|
name: 'stash',
|
||||||
|
params: {
|
||||||
|
...from.params,
|
||||||
|
range: 'scenes',
|
||||||
|
pageNumber: 1,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/stash/:stashId/:stashSlug?/:range/:pageNumber',
|
||||||
component: Stash,
|
component: Stash,
|
||||||
name: 'stash',
|
name: 'stash',
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -5,14 +5,24 @@ import {
|
|||||||
patch,
|
patch,
|
||||||
} from '../api';
|
} from '../api';
|
||||||
|
|
||||||
import { releaseFields, actorStashesFields } from '../fragments';
|
import { releaseFields, actorStashesFields, movieFields } from '../fragments';
|
||||||
import { curateStash } from '../curate';
|
import { curateStash } from '../curate';
|
||||||
|
|
||||||
function initStashesActions(store, _router) {
|
function initStashesActions(store, _router) {
|
||||||
async function fetchStash(context, stashId) {
|
async function fetchStash(context, {
|
||||||
|
stashId,
|
||||||
|
section = 'scenes',
|
||||||
|
pageNumber = 1,
|
||||||
|
limit = 20,
|
||||||
|
}) {
|
||||||
const { stash } = await graphql(`
|
const { stash } = await graphql(`
|
||||||
query Stash(
|
query Stash(
|
||||||
$stashId: Int!
|
$stashId: Int!
|
||||||
|
$includeScenes: Boolean!
|
||||||
|
$includeActors: Boolean!
|
||||||
|
$includeMovies: Boolean!
|
||||||
|
$limit:Int = 10,
|
||||||
|
$offset:Int = 0,
|
||||||
$hasAuth: Boolean!
|
$hasAuth: Boolean!
|
||||||
$userId: Int
|
$userId: Int
|
||||||
) {
|
) {
|
||||||
@@ -26,45 +36,77 @@ function initStashesActions(store, _router) {
|
|||||||
id
|
id
|
||||||
username
|
username
|
||||||
}
|
}
|
||||||
actors: stashesActors {
|
actorsConnection: stashesActorsConnection(
|
||||||
comment
|
orderBy: CREATED_AT_DESC
|
||||||
actor {
|
first: $limit
|
||||||
id
|
offset: $offset
|
||||||
name
|
) @include(if: $includeActors) {
|
||||||
slug
|
totalCount
|
||||||
gender
|
actors: nodes {
|
||||||
age
|
comment
|
||||||
ageFromBirth
|
actor {
|
||||||
dateOfBirth
|
|
||||||
birthCity
|
|
||||||
birthState
|
|
||||||
birthCountry: countryByBirthCountryAlpha2 {
|
|
||||||
alpha2
|
|
||||||
name
|
|
||||||
alias
|
|
||||||
}
|
|
||||||
avatar: avatarMedia {
|
|
||||||
id
|
id
|
||||||
path
|
name
|
||||||
thumbnail
|
slug
|
||||||
lazy
|
gender
|
||||||
isS3
|
age
|
||||||
width
|
ageFromBirth
|
||||||
height
|
dateOfBirth
|
||||||
|
birthCity
|
||||||
|
birthState
|
||||||
|
birthCountry: countryByBirthCountryAlpha2 {
|
||||||
|
alpha2
|
||||||
|
name
|
||||||
|
alias
|
||||||
|
}
|
||||||
|
avatar: avatarMedia {
|
||||||
|
id
|
||||||
|
path
|
||||||
|
thumbnail
|
||||||
|
lazy
|
||||||
|
isS3
|
||||||
|
width
|
||||||
|
height
|
||||||
|
}
|
||||||
|
${actorStashesFields}
|
||||||
}
|
}
|
||||||
${actorStashesFields}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
scenes: stashesScenes {
|
scenesConnection: stashesScenesConnection(
|
||||||
comment
|
orderBy: [CREATED_AT_DESC, RELEASE_BY_SCENE_ID__DATE_DESC]
|
||||||
scene {
|
first: $limit
|
||||||
${releaseFields}
|
offset: $offset
|
||||||
|
) @include(if: $includeScenes) {
|
||||||
|
totalCount
|
||||||
|
scenes: nodes {
|
||||||
|
comment
|
||||||
|
scene {
|
||||||
|
${releaseFields}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
moviesConnection: stashesMoviesConnection(
|
||||||
|
orderBy: [CREATED_AT_DESC, MOVIE_BY_MOVIE_ID__DATE_DESC]
|
||||||
|
first: $limit
|
||||||
|
offset: $offset
|
||||||
|
) @include(if: $includeMovies) {
|
||||||
|
totalCount
|
||||||
|
movies: nodes {
|
||||||
|
comment
|
||||||
|
movie {
|
||||||
|
${movieFields}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
`, {
|
`, {
|
||||||
stashId: Number(stashId),
|
stashId: Number(stashId),
|
||||||
|
includeScenes: section === 'scenes',
|
||||||
|
includeActors: section === 'actors',
|
||||||
|
includeMovies: section === 'movies',
|
||||||
|
offset: Math.max(0, (pageNumber - 1)) * limit,
|
||||||
|
limit: Number(limit),
|
||||||
hasAuth: !!store.state.auth.user,
|
hasAuth: !!store.state.auth.user,
|
||||||
userId: store.state.auth.user?.id,
|
userId: store.state.auth.user?.id,
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ function initTagsActions(store, _router) {
|
|||||||
name
|
name
|
||||||
slug
|
slug
|
||||||
}
|
}
|
||||||
poster: tagsPosterByTagId {
|
poster: tagsPoster {
|
||||||
media {
|
media {
|
||||||
id
|
id
|
||||||
thumbnail
|
thumbnail
|
||||||
@@ -188,14 +188,14 @@ function initTagsActions(store, _router) {
|
|||||||
before,
|
before,
|
||||||
orderBy,
|
orderBy,
|
||||||
offset: Math.max(0, (pageNumber - 1)) * limit,
|
offset: Math.max(0, (pageNumber - 1)) * limit,
|
||||||
exclude: store.state.ui.tagFilter.filter(tagFilter => tagFilter !== tagSlug),
|
exclude: store.state.ui.tagFilter.filter((tagFilter) => tagFilter !== tagSlug),
|
||||||
hasAuth: !!store.state.auth.user,
|
hasAuth: !!store.state.auth.user,
|
||||||
userId: store.state.auth.user?.id,
|
userId: store.state.auth.user?.id,
|
||||||
});
|
});
|
||||||
|
|
||||||
return {
|
return {
|
||||||
tag: curateTag(tagBySlug, null, curateRelease),
|
tag: curateTag(tagBySlug, null, curateRelease),
|
||||||
releases: tagBySlug.scenesConnection.releases.map(release => curateRelease(release)),
|
releases: tagBySlug.scenesConnection.releases.map((release) => curateRelease(release)),
|
||||||
totalCount: tagBySlug.scenesConnection.totalCount,
|
totalCount: tagBySlug.scenesConnection.totalCount,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -210,15 +210,21 @@ function initTagsActions(store, _router) {
|
|||||||
query Tags(
|
query Tags(
|
||||||
$slugs: [String!] = [],
|
$slugs: [String!] = [],
|
||||||
$limit: Int = 100
|
$limit: Int = 100
|
||||||
|
$exclude: [String!]
|
||||||
) {
|
) {
|
||||||
tags(
|
tags(
|
||||||
filter: { slug: { in: $slugs } },
|
filter: {
|
||||||
|
slug: {
|
||||||
|
in: $slugs
|
||||||
|
notIn: $exclude
|
||||||
|
}
|
||||||
|
},
|
||||||
first: $limit
|
first: $limit
|
||||||
) {
|
) {
|
||||||
id
|
id
|
||||||
name
|
name
|
||||||
slug
|
slug
|
||||||
poster: tagsPosterByTagId {
|
poster: tagsPoster {
|
||||||
media {
|
media {
|
||||||
thumbnail
|
thumbnail
|
||||||
comment
|
comment
|
||||||
@@ -257,9 +263,10 @@ function initTagsActions(store, _router) {
|
|||||||
`, {
|
`, {
|
||||||
slugs,
|
slugs,
|
||||||
limit,
|
limit,
|
||||||
|
exclude: store.state.ui.tagFilter,
|
||||||
});
|
});
|
||||||
|
|
||||||
return tags.map(tag => curateTag(tag, store.state.ui.sfw));
|
return tags.map((tag) => curateTag(tag, store.state.ui.sfw));
|
||||||
}
|
}
|
||||||
|
|
||||||
async function searchTags({ _commit }, {
|
async function searchTags({ _commit }, {
|
||||||
@@ -283,7 +290,7 @@ function initTagsActions(store, _router) {
|
|||||||
id
|
id
|
||||||
name
|
name
|
||||||
slug
|
slug
|
||||||
poster: tagsPosterByTagId {
|
poster: tagsPoster {
|
||||||
media {
|
media {
|
||||||
thumbnail
|
thumbnail
|
||||||
comment
|
comment
|
||||||
@@ -325,7 +332,7 @@ function initTagsActions(store, _router) {
|
|||||||
minLength,
|
minLength,
|
||||||
});
|
});
|
||||||
|
|
||||||
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) {
|
async function fetchTagReleases({ _commit }, tagId) {
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ function initUiActions(store, _router) {
|
|||||||
slug
|
slug
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
entity: alertsEntityByAlertId {
|
entity: alertsEntity {
|
||||||
entity {
|
entity {
|
||||||
id
|
id
|
||||||
name
|
name
|
||||||
@@ -103,7 +103,7 @@ function initUiActions(store, _router) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
const curatedNotifications = notifications.nodes.map(notification => curateNotification(notification));
|
const curatedNotifications = notifications.nodes.map((notification) => curateNotification(notification));
|
||||||
|
|
||||||
return {
|
return {
|
||||||
notifications: curatedNotifications,
|
notifications: curatedNotifications,
|
||||||
@@ -148,7 +148,7 @@ function initUiActions(store, _router) {
|
|||||||
rank
|
rank
|
||||||
}
|
}
|
||||||
actors: searchActors(
|
actors: searchActors(
|
||||||
search: $query,
|
query: $query,
|
||||||
first: $limit
|
first: $limit
|
||||||
) {
|
) {
|
||||||
id
|
id
|
||||||
@@ -222,8 +222,8 @@ function initUiActions(store, _router) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
return {
|
return {
|
||||||
releases: res?.results.map(result => curateRelease(result.release)) || [],
|
releases: res?.results.map((result) => curateRelease(result.release)) || [],
|
||||||
actors: res?.actors.map(actor => curateActor(actor)) || [],
|
actors: res?.actors.map((actor) => curateActor(actor)) || [],
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ async function initUiObservers(store, _router) {
|
|||||||
|
|
||||||
body.classList.add(store.state.ui.theme);
|
body.classList.add(store.state.ui.theme);
|
||||||
|
|
||||||
store.watch(state => state.ui.theme, (newTheme, oldTheme) => {
|
store.watch((state) => state.ui.theme, (newTheme, oldTheme) => {
|
||||||
body.classList.add(newTheme);
|
body.classList.add(newTheme);
|
||||||
body.classList.remove(oldTheme);
|
body.classList.remove(oldTheme);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -57,7 +57,10 @@ function initUsersActions(store, _router) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
scenes: stashesScenes(first: 20) {
|
scenes: stashesScenes(
|
||||||
|
first: 20
|
||||||
|
orderBy: CREATED_AT_DESC
|
||||||
|
) {
|
||||||
comment
|
comment
|
||||||
scene {
|
scene {
|
||||||
${releaseFields}
|
${releaseFields}
|
||||||
@@ -87,7 +90,7 @@ function initUsersActions(store, _router) {
|
|||||||
${actorFields}
|
${actorFields}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
entity: alertsEntityByAlertId {
|
entity: alertsEntity {
|
||||||
entity {
|
entity {
|
||||||
id
|
id
|
||||||
name
|
name
|
||||||
|
|||||||
@@ -66,10 +66,7 @@ module.exports = {
|
|||||||
// pornpros
|
// pornpros
|
||||||
'milfhumiliation',
|
'milfhumiliation',
|
||||||
'humiliated',
|
'humiliated',
|
||||||
'flexiblepositions',
|
|
||||||
'publicviolations',
|
|
||||||
'amateurviolations',
|
'amateurviolations',
|
||||||
'squirtdisgrace',
|
|
||||||
'cumdisgrace',
|
'cumdisgrace',
|
||||||
'webcamhackers',
|
'webcamhackers',
|
||||||
'collegeteens',
|
'collegeteens',
|
||||||
@@ -79,6 +76,11 @@ module.exports = {
|
|||||||
'pornmegaload',
|
'pornmegaload',
|
||||||
'scorelandtv',
|
'scorelandtv',
|
||||||
'scoretv',
|
'scoretv',
|
||||||
|
// spizoo
|
||||||
|
'intimatelesbians',
|
||||||
|
'porngoespro',
|
||||||
|
'pornstartease',
|
||||||
|
'thestripperexperience',
|
||||||
// teenscoreclub
|
// teenscoreclub
|
||||||
'maiko',
|
'maiko',
|
||||||
'ncuksinners',
|
'ncuksinners',
|
||||||
@@ -91,6 +93,9 @@ module.exports = {
|
|||||||
networks: [
|
networks: [
|
||||||
// dummy network for testing
|
// dummy network for testing
|
||||||
'traxxx',
|
'traxxx',
|
||||||
|
// porn doe
|
||||||
|
'forbondage',
|
||||||
|
'score',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
profiles: [
|
profiles: [
|
||||||
@@ -142,6 +147,11 @@ module.exports = {
|
|||||||
'hotcrazymess',
|
'hotcrazymess',
|
||||||
'thatsitcomshow',
|
'thatsitcomshow',
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
// Adult DVD Empire
|
||||||
|
'elegantangel',
|
||||||
|
'westcoastproductions',
|
||||||
|
],
|
||||||
'21sextury',
|
'21sextury',
|
||||||
'julesjordan',
|
'julesjordan',
|
||||||
'dorcelclub',
|
'dorcelclub',
|
||||||
@@ -239,6 +249,7 @@ module.exports = {
|
|||||||
'www.tushy.com',
|
'www.tushy.com',
|
||||||
'www.tushyraw.com',
|
'www.tushyraw.com',
|
||||||
'www.deeper.com',
|
'www.deeper.com',
|
||||||
|
'www.slayed.com',
|
||||||
'sthw-trailer-vixen.ssl-cdn.com',
|
'sthw-trailer-vixen.ssl-cdn.com',
|
||||||
'sthw-trailer-tushy.ssl-cdn.com',
|
'sthw-trailer-tushy.ssl-cdn.com',
|
||||||
'sthw-trailer-tushyraw.ssl-cdn.com',
|
'sthw-trailer-tushyraw.ssl-cdn.com',
|
||||||
@@ -251,6 +262,30 @@ module.exports = {
|
|||||||
'streamhw-trailer-blacked.ssl-cdn.com',
|
'streamhw-trailer-blacked.ssl-cdn.com',
|
||||||
'streamhw-trailer-blackedraw.ssl-cdn.com',
|
'streamhw-trailer-blackedraw.ssl-cdn.com',
|
||||||
'streamhw-trailer-deeper.ssl-cdn.com',
|
'streamhw-trailer-deeper.ssl-cdn.com',
|
||||||
|
'cdn.vixen.com',
|
||||||
|
'cdn.tushy.com',
|
||||||
|
'cdn.blacked.com',
|
||||||
|
'cdn.deeper.com',
|
||||||
|
'cdn.blackedraw.com',
|
||||||
|
'cdn.tushyraw.com',
|
||||||
|
'cdn.slayed.com',
|
||||||
|
'www.vogov.com',
|
||||||
|
'www.vogov.com',
|
||||||
|
'www.nubiles.net',
|
||||||
|
'www.brattysis.com',
|
||||||
|
'www.deeplush.com',
|
||||||
|
'www.detentiongirls.com',
|
||||||
|
'www.daddyslilangel.com',
|
||||||
|
'www.myfamilypies.com',
|
||||||
|
'www.bountyhunterporn.com',
|
||||||
|
'www.anilos.com',
|
||||||
|
'www.thatsitcomshow.com',
|
||||||
|
'www.nubileset.com',
|
||||||
|
'www.nubilesunscripted.com',
|
||||||
|
'www.nubilefilms.com',
|
||||||
|
'www.badteenspunished.com',
|
||||||
|
'www.cumlouder.com',
|
||||||
|
'im0.imgcm.com',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
limits: {
|
limits: {
|
||||||
@@ -263,15 +298,26 @@ module.exports = {
|
|||||||
interval: 1000,
|
interval: 1000,
|
||||||
concurrency: 1,
|
concurrency: 1,
|
||||||
},
|
},
|
||||||
'www.realitykings.com': {
|
'westcoastproductions.com': {
|
||||||
interval: 1000,
|
interval: 100,
|
||||||
|
concurrency: 1,
|
||||||
|
},
|
||||||
|
'images.mylfcdn.net': {
|
||||||
|
interval: 50,
|
||||||
concurrency: 1,
|
concurrency: 1,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
fetchAfter: [1, 'week'],
|
fetchAfter: [1, 'week'],
|
||||||
missingDateLimit: 3,
|
missingDateLimit: 3,
|
||||||
|
memorySampling: {
|
||||||
|
enabled: false,
|
||||||
|
sampleDuration: 300000, // 5 minutes
|
||||||
|
snapshotIntervals: [],
|
||||||
|
},
|
||||||
media: {
|
media: {
|
||||||
path: './media',
|
path: './media',
|
||||||
|
maxSize: 1000,
|
||||||
|
quality: 80,
|
||||||
thumbnailSize: 320, // width for 16:9 will be exactly 576px
|
thumbnailSize: 320, // width for 16:9 will be exactly 576px
|
||||||
thumbnailQuality: 100,
|
thumbnailQuality: 100,
|
||||||
lazySize: 90,
|
lazySize: 90,
|
||||||
|
|||||||
36768
docs/names.md
Normal file
@@ -1,6 +1,6 @@
|
|||||||
const config = require('config');
|
const config = require('config');
|
||||||
|
|
||||||
exports.up = knex => Promise.resolve()
|
exports.up = (knex) => Promise.resolve()
|
||||||
.then(() => knex.schema.createTable('countries', (table) => {
|
.then(() => knex.schema.createTable('countries', (table) => {
|
||||||
table.text('alpha2', 2)
|
table.text('alpha2', 2)
|
||||||
.unique()
|
.unique()
|
||||||
@@ -792,7 +792,6 @@ exports.up = knex => Promise.resolve()
|
|||||||
}))
|
}))
|
||||||
.then(() => knex.schema.createTable('releases_tags', (table) => {
|
.then(() => knex.schema.createTable('releases_tags', (table) => {
|
||||||
table.integer('tag_id', 12)
|
table.integer('tag_id', 12)
|
||||||
.notNullable()
|
|
||||||
.references('id')
|
.references('id')
|
||||||
.inTable('tags');
|
.inTable('tags');
|
||||||
|
|
||||||
@@ -802,6 +801,8 @@ exports.up = knex => Promise.resolve()
|
|||||||
.inTable('releases')
|
.inTable('releases')
|
||||||
.onDelete('cascade');
|
.onDelete('cascade');
|
||||||
|
|
||||||
|
table.text('original_tag');
|
||||||
|
|
||||||
table.unique(['tag_id', 'release_id']);
|
table.unique(['tag_id', 'release_id']);
|
||||||
}))
|
}))
|
||||||
.then(() => knex.schema.createTable('releases_search', (table) => {
|
.then(() => knex.schema.createTable('releases_search', (table) => {
|
||||||
@@ -985,7 +986,6 @@ exports.up = knex => Promise.resolve()
|
|||||||
}))
|
}))
|
||||||
.then(() => knex.schema.createTable('chapters_tags', (table) => {
|
.then(() => knex.schema.createTable('chapters_tags', (table) => {
|
||||||
table.integer('tag_id', 12)
|
table.integer('tag_id', 12)
|
||||||
.notNullable()
|
|
||||||
.references('id')
|
.references('id')
|
||||||
.inTable('tags')
|
.inTable('tags')
|
||||||
.onDelete('cascade');
|
.onDelete('cascade');
|
||||||
@@ -996,6 +996,8 @@ exports.up = knex => Promise.resolve()
|
|||||||
.inTable('chapters')
|
.inTable('chapters')
|
||||||
.onDelete('cascade');
|
.onDelete('cascade');
|
||||||
|
|
||||||
|
table.text('original_tag');
|
||||||
|
|
||||||
table.unique(['tag_id', 'chapter_id']);
|
table.unique(['tag_id', 'chapter_id']);
|
||||||
}))
|
}))
|
||||||
.then(() => knex.schema.createTable('users_roles', (table) => {
|
.then(() => knex.schema.createTable('users_roles', (table) => {
|
||||||
@@ -1450,6 +1452,7 @@ exports.up = knex => Promise.resolve()
|
|||||||
array_to_string(alias, '') ILIKE ('%' || TRIM(search) || '%') OR
|
array_to_string(alias, '') ILIKE ('%' || TRIM(search) || '%') OR
|
||||||
replace(array_to_string(alias, ''), ' ', '') ILIKE ('%' || TRIM(search) || '%') OR
|
replace(array_to_string(alias, ''), ' ', '') ILIKE ('%' || TRIM(search) || '%') OR
|
||||||
url ILIKE ('%' || search || '%')
|
url ILIKE ('%' || search || '%')
|
||||||
|
ORDER BY similarity(entities.name, search) DESC, name ASC
|
||||||
$$ LANGUAGE SQL STABLE;
|
$$ LANGUAGE SQL STABLE;
|
||||||
|
|
||||||
CREATE FUNCTION search_actors(query text, min_length smallint DEFAULT 2) RETURNS SETOF actors AS $$
|
CREATE FUNCTION search_actors(query text, min_length smallint DEFAULT 2) RETURNS SETOF actors AS $$
|
||||||
@@ -1748,6 +1751,7 @@ exports.up = knex => Promise.resolve()
|
|||||||
COMMENT ON FUNCTION tags_scenes IS E'@sortable';
|
COMMENT ON FUNCTION tags_scenes IS E'@sortable';
|
||||||
|
|
||||||
COMMENT ON FUNCTION search_releases IS E'@sortable';
|
COMMENT ON FUNCTION search_releases IS E'@sortable';
|
||||||
|
COMMENT ON FUNCTION search_entities IS E'@sortable';
|
||||||
COMMENT ON FUNCTION search_actors IS E'@sortable';
|
COMMENT ON FUNCTION search_actors IS E'@sortable';
|
||||||
COMMENT ON FUNCTION search_movies IS E'@sortable';
|
COMMENT ON FUNCTION search_movies IS E'@sortable';
|
||||||
COMMENT ON FUNCTION search_tags IS E'@sortable';
|
COMMENT ON FUNCTION search_tags IS E'@sortable';
|
||||||
|
|||||||
29
migrations/20211030162955_entity_scenes.js
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
exports.up = async (knex) => knex.raw(`
|
||||||
|
CREATE FUNCTION entities_scenes(entity entities) RETURNS SETOF releases AS $$
|
||||||
|
WITH RECURSIVE children AS (
|
||||||
|
SELECT entities.id
|
||||||
|
FROM entities
|
||||||
|
WHERE entities.id = entity.id
|
||||||
|
|
||||||
|
UNION ALL
|
||||||
|
|
||||||
|
SELECT entities.id
|
||||||
|
FROM entities
|
||||||
|
INNER JOIN children ON children.id = entities.parent_id
|
||||||
|
)
|
||||||
|
|
||||||
|
SELECT releases FROM releases
|
||||||
|
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';
|
||||||
|
`);
|
||||||
|
|
||||||
|
exports.down = async (knex) => knex.raw(`
|
||||||
|
DROP FUNCTION IF EXISTS entities_scenes;
|
||||||
|
`);
|
||||||
15
migrations/20220123234131_scene_indexes.js
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
exports.up = async (knex) => Promise.resolve()
|
||||||
|
.then(() => knex.schema.alterTable('releases_tags', (table) => {
|
||||||
|
table.index('release_id');
|
||||||
|
}))
|
||||||
|
.then(() => knex.schema.alterTable('movies_scenes', (table) => {
|
||||||
|
table.index('scene_id');
|
||||||
|
}));
|
||||||
|
|
||||||
|
exports.down = async (knex) => Promise.resolve()
|
||||||
|
.then(() => knex.schema.alterTable('releases_tags', (table) => {
|
||||||
|
table.dropIndex('release_id');
|
||||||
|
}))
|
||||||
|
.then(() => knex.schema.alterTable('movies_scenes', (table) => {
|
||||||
|
table.dropIndex('scene_id');
|
||||||
|
}));
|
||||||
11
migrations/20220126132955_scene_counts.js
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
exports.up = async (knex) => knex.raw(`
|
||||||
|
CREATE OR REPLACE FUNCTION entities_scene_total(entity entities) RETURNS bigint AS $$
|
||||||
|
SELECT COUNT(id)
|
||||||
|
FROM releases
|
||||||
|
WHERE releases.entity_id = entity.id;
|
||||||
|
$$ LANGUAGE SQL STABLE;
|
||||||
|
`);
|
||||||
|
|
||||||
|
exports.down = async (knex) => knex.raw(`
|
||||||
|
DROP FUNCTION IF EXISTS entities_scene_total;
|
||||||
|
`);
|
||||||
23
migrations/20220227215315_entity_filters.js
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
exports.up = async (knex) => knex.raw(`
|
||||||
|
CREATE FUNCTION entities_scene_tags(entity entities, selectable_tags text[]) RETURNS SETOF tags AS $$
|
||||||
|
SELECT tags.*
|
||||||
|
FROM releases
|
||||||
|
LEFT JOIN
|
||||||
|
releases_tags ON releases_tags.release_id = releases.id
|
||||||
|
LEFT JOIN
|
||||||
|
tags ON tags.id = releases_tags.tag_id
|
||||||
|
WHERE
|
||||||
|
releases.entity_id = entity.id
|
||||||
|
AND
|
||||||
|
CASE WHEN array_length(selectable_tags, 1) IS NOT NULL
|
||||||
|
THEN tags.slug = ANY(selectable_tags)
|
||||||
|
ELSE true
|
||||||
|
END
|
||||||
|
GROUP BY tags.id
|
||||||
|
ORDER BY tags.name;
|
||||||
|
$$ LANGUAGE SQL STABLE;
|
||||||
|
`);
|
||||||
|
|
||||||
|
exports.down = async (knex) => knex.raw(`
|
||||||
|
DROP FUNCTION IF EXISTS entities_scene_tags;
|
||||||
|
`);
|
||||||
215
migrations/20220304233846_series.js
Normal file
@@ -0,0 +1,215 @@
|
|||||||
|
const config = require('config');
|
||||||
|
|
||||||
|
exports.up = async (knex) => Promise.resolve()
|
||||||
|
.then(() => knex.schema.createTable('series', (table) => {
|
||||||
|
table.increments('id', 16);
|
||||||
|
|
||||||
|
table.integer('entity_id', 12)
|
||||||
|
.references('id')
|
||||||
|
.inTable('entities')
|
||||||
|
.notNullable();
|
||||||
|
|
||||||
|
table.integer('studio_id', 12)
|
||||||
|
.references('id')
|
||||||
|
.inTable('entities');
|
||||||
|
|
||||||
|
table.text('entry_id');
|
||||||
|
table.unique(['entity_id', 'entry_id']);
|
||||||
|
|
||||||
|
table.text('url', 1000);
|
||||||
|
table.text('title');
|
||||||
|
table.text('slug');
|
||||||
|
|
||||||
|
table.timestamp('date');
|
||||||
|
table.index('date');
|
||||||
|
|
||||||
|
table.enum('date_precision', ['year', 'month', 'week', 'day', 'hour', 'minute', 'second'])
|
||||||
|
.defaultTo('day');
|
||||||
|
|
||||||
|
table.text('description');
|
||||||
|
|
||||||
|
table.boolean('deep');
|
||||||
|
table.text('deep_url', 1000);
|
||||||
|
|
||||||
|
table.text('comment');
|
||||||
|
|
||||||
|
table.integer('created_batch_id', 12)
|
||||||
|
.references('id')
|
||||||
|
.inTable('batches')
|
||||||
|
.onDelete('cascade');
|
||||||
|
|
||||||
|
table.integer('updated_batch_id', 12)
|
||||||
|
.references('id')
|
||||||
|
.inTable('batches')
|
||||||
|
.onDelete('cascade');
|
||||||
|
|
||||||
|
table.datetime('created_at')
|
||||||
|
.defaultTo(knex.fn.now());
|
||||||
|
}))
|
||||||
|
.then(() => knex.schema.createTable('series_scenes', (table) => {
|
||||||
|
table.integer('serie_id', 16)
|
||||||
|
.notNullable()
|
||||||
|
.references('id')
|
||||||
|
.inTable('series')
|
||||||
|
.onDelete('cascade');
|
||||||
|
|
||||||
|
table.integer('scene_id', 16)
|
||||||
|
.notNullable()
|
||||||
|
.references('id')
|
||||||
|
.inTable('releases')
|
||||||
|
.onDelete('cascade');
|
||||||
|
|
||||||
|
table.unique(['serie_id', 'scene_id']);
|
||||||
|
|
||||||
|
table.datetime('created_at')
|
||||||
|
.defaultTo(knex.fn.now());
|
||||||
|
}))
|
||||||
|
.then(() => knex.schema.createTable('series_trailers', (table) => {
|
||||||
|
table.integer('serie_id', 16)
|
||||||
|
.unique()
|
||||||
|
.notNullable()
|
||||||
|
.references('id')
|
||||||
|
.inTable('series')
|
||||||
|
.onDelete('cascade');
|
||||||
|
|
||||||
|
table.text('media_id', 21)
|
||||||
|
.notNullable()
|
||||||
|
.references('id')
|
||||||
|
.inTable('media');
|
||||||
|
}))
|
||||||
|
.then(() => knex.schema.createTable('series_posters', (table) => {
|
||||||
|
table.integer('serie_id', 16)
|
||||||
|
.notNullable()
|
||||||
|
.references('id')
|
||||||
|
.inTable('series')
|
||||||
|
.onDelete('cascade');
|
||||||
|
|
||||||
|
table.text('media_id', 21)
|
||||||
|
.notNullable()
|
||||||
|
.references('id')
|
||||||
|
.inTable('media')
|
||||||
|
.onDelete('cascade');
|
||||||
|
|
||||||
|
table.unique('serie_id');
|
||||||
|
}))
|
||||||
|
.then(() => knex.schema.createTable('series_covers', (table) => {
|
||||||
|
table.integer('serie_id', 16)
|
||||||
|
.notNullable()
|
||||||
|
.references('id')
|
||||||
|
.inTable('series')
|
||||||
|
.onDelete('cascade');
|
||||||
|
|
||||||
|
table.text('media_id', 21)
|
||||||
|
.notNullable()
|
||||||
|
.references('id')
|
||||||
|
.inTable('media');
|
||||||
|
|
||||||
|
table.unique(['serie_id', 'media_id']);
|
||||||
|
}))
|
||||||
|
.then(() => knex.schema.createTable('series_search', (table) => {
|
||||||
|
table.integer('serie_id', 16)
|
||||||
|
.references('id')
|
||||||
|
.inTable('series')
|
||||||
|
.onDelete('cascade');
|
||||||
|
}))
|
||||||
|
.then(() => knex.schema.createTable('stashes_series', (table) => {
|
||||||
|
table.integer('stash_id')
|
||||||
|
.notNullable()
|
||||||
|
.references('id')
|
||||||
|
.inTable('stashes')
|
||||||
|
.onDelete('cascade');
|
||||||
|
|
||||||
|
table.integer('serie_id')
|
||||||
|
.notNullable()
|
||||||
|
.references('id')
|
||||||
|
.inTable('series')
|
||||||
|
.onDelete('cascade');
|
||||||
|
|
||||||
|
table.unique(['stash_id', 'serie_id']);
|
||||||
|
|
||||||
|
table.string('comment');
|
||||||
|
|
||||||
|
table.datetime('created_at')
|
||||||
|
.notNullable()
|
||||||
|
.defaultTo(knex.fn.now());
|
||||||
|
}))
|
||||||
|
.then(() => knex.raw(`
|
||||||
|
ALTER TABLE series_search ADD COLUMN document tsvector;
|
||||||
|
|
||||||
|
CREATE UNIQUE INDEX series_search_unique ON series_search (serie_id);
|
||||||
|
CREATE INDEX series_search_index ON series_search USING GIN (document);
|
||||||
|
|
||||||
|
CREATE FUNCTION series_actors(serie series) RETURNS SETOF actors AS $$
|
||||||
|
SELECT actors.*
|
||||||
|
FROM series_scenes
|
||||||
|
LEFT JOIN
|
||||||
|
releases ON releases.id = series_scenes.scene_id
|
||||||
|
LEFT JOIN
|
||||||
|
releases_actors ON releases_actors.release_id = releases.id
|
||||||
|
LEFT JOIN
|
||||||
|
actors ON actors.id = releases_actors.actor_id
|
||||||
|
WHERE series_scenes.serie_id = serie.id
|
||||||
|
AND actors.id IS NOT NULL
|
||||||
|
GROUP BY actors.id
|
||||||
|
ORDER BY actors.name, actors.gender
|
||||||
|
$$ LANGUAGE SQL STABLE;
|
||||||
|
|
||||||
|
CREATE FUNCTION series_tags(serie series) RETURNS SETOF tags AS $$
|
||||||
|
SELECT tags.*
|
||||||
|
FROM series_scenes
|
||||||
|
LEFT JOIN
|
||||||
|
releases ON releases.id = series_scenes.scene_id
|
||||||
|
LEFT JOIN
|
||||||
|
releases_tags ON releases_tags.release_id = releases.id
|
||||||
|
LEFT JOIN
|
||||||
|
tags ON tags.id = releases_tags.tag_id
|
||||||
|
WHERE series_scenes.serie_id = serie.id
|
||||||
|
AND tags.id IS NOT NULL
|
||||||
|
GROUP BY tags.id
|
||||||
|
ORDER BY tags.priority DESC
|
||||||
|
$$ LANGUAGE SQL STABLE;
|
||||||
|
|
||||||
|
CREATE FUNCTION series_photos(serie series) RETURNS SETOF media AS $$
|
||||||
|
SELECT media.*
|
||||||
|
FROM series_scenes
|
||||||
|
LEFT JOIN
|
||||||
|
releases ON releases.id = series_scenes.scene_id
|
||||||
|
INNER JOIN
|
||||||
|
releases_photos ON releases_photos.release_id = releases.id
|
||||||
|
LEFT JOIN
|
||||||
|
media ON media.id = releases_photos.media_id
|
||||||
|
WHERE series_scenes.serie_id = serie.id
|
||||||
|
GROUP BY media.id
|
||||||
|
ORDER BY media.index ASC
|
||||||
|
$$ LANGUAGE SQL STABLE;
|
||||||
|
|
||||||
|
GRANT ALL ON ALL TABLES IN SCHEMA public TO :visitor;
|
||||||
|
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO :visitor;
|
||||||
|
|
||||||
|
ALTER TABLE stashes_series ENABLE ROW LEVEL SECURITY;
|
||||||
|
|
||||||
|
CREATE POLICY stashes_policy ON stashes_series
|
||||||
|
USING (EXISTS (
|
||||||
|
SELECT *
|
||||||
|
FROM stashes
|
||||||
|
WHERE stashes.id = stashes_series.stash_id
|
||||||
|
AND (stashes.user_id = current_user_id() OR stashes.public)
|
||||||
|
));
|
||||||
|
`, {
|
||||||
|
visitor: knex.raw(config.database.query.user),
|
||||||
|
}));
|
||||||
|
|
||||||
|
exports.down = async (knex) => Promise.resolve()
|
||||||
|
.then(() => knex.raw(`
|
||||||
|
DROP FUNCTION IF EXISTS series_actors;
|
||||||
|
DROP FUNCTION IF EXISTS series_tags;
|
||||||
|
DROP FUNCTION IF EXISTS series_photos;
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS stashes_series CASCADE;
|
||||||
|
DROP TABLE IF EXISTS series_scenes CASCADE;
|
||||||
|
DROP TABLE IF EXISTS series_trailers CASCADE;
|
||||||
|
DROP TABLE IF EXISTS series_posters CASCADE;
|
||||||
|
DROP TABLE IF EXISTS series_covers CASCADE;
|
||||||
|
DROP TABLE IF EXISTS series_search CASCADE;
|
||||||
|
DROP TABLE IF EXISTS series CASCADE;
|
||||||
|
`));
|
||||||
49
migrations/20220327230125_movie_photos.js
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
const config = require('config');
|
||||||
|
|
||||||
|
exports.up = async (knex) => Promise.resolve()
|
||||||
|
.then(() => knex.raw(`
|
||||||
|
ALTER FUNCTION movies_photos(movie movies) RENAME TO movies_scenes_photos;
|
||||||
|
ALTER FUNCTION series_photos(serie series) RENAME TO series_scenes_photos;
|
||||||
|
`))
|
||||||
|
.then(() => knex.schema.createTable('movies_photos', (table) => {
|
||||||
|
table.integer('movie_id', 16)
|
||||||
|
.notNullable()
|
||||||
|
.references('id')
|
||||||
|
.inTable('movies')
|
||||||
|
.onDelete('cascade');
|
||||||
|
|
||||||
|
table.text('media_id', 21)
|
||||||
|
.notNullable()
|
||||||
|
.references('id')
|
||||||
|
.inTable('media');
|
||||||
|
|
||||||
|
table.unique(['movie_id', 'media_id']);
|
||||||
|
}))
|
||||||
|
.then(() => knex.schema.createTable('series_photos', (table) => {
|
||||||
|
table.integer('serie_id', 16)
|
||||||
|
.notNullable()
|
||||||
|
.references('id')
|
||||||
|
.inTable('series')
|
||||||
|
.onDelete('cascade');
|
||||||
|
|
||||||
|
table.text('media_id', 21)
|
||||||
|
.notNullable()
|
||||||
|
.references('id')
|
||||||
|
.inTable('media');
|
||||||
|
|
||||||
|
table.unique(['serie_id', 'media_id']);
|
||||||
|
}))
|
||||||
|
.then(() => knex.raw(`
|
||||||
|
GRANT ALL ON ALL TABLES IN SCHEMA public TO :visitor;
|
||||||
|
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO :visitor;
|
||||||
|
`, {
|
||||||
|
visitor: knex.raw(config.database.query.user),
|
||||||
|
}));
|
||||||
|
|
||||||
|
exports.down = async (knex) => knex.raw(`
|
||||||
|
DROP TABLE IF EXISTS movies_photos CASCADE;
|
||||||
|
DROP TABLE IF EXISTS series_photos CASCADE;
|
||||||
|
|
||||||
|
ALTER FUNCTION movies_scenes_photos(movie movies) RENAME TO movies_photos;
|
||||||
|
ALTER FUNCTION series_scenes_photos(serie series) RENAME TO series_photos;
|
||||||
|
`);
|
||||||
27544
package-lock.json
generated
87
package.json
@@ -1,13 +1,13 @@
|
|||||||
{
|
{
|
||||||
"name": "traxxx",
|
"name": "traxxx",
|
||||||
"version": "1.198.3",
|
"version": "1.212.9",
|
||||||
"description": "All the latest porn releases in one place",
|
"description": "All the latest porn releases in one place",
|
||||||
"main": "src/app.js",
|
"main": "src/app.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "node -r source-map-support/register src/init.js",
|
"start": "node -r source-map-support/register src/init.js",
|
||||||
"webpack": "webpack --env=production --mode=production",
|
"webpack": "webpack --env=production --mode=production",
|
||||||
"webpack-dev": "webpack --env=development --mode=development",
|
"webpack-dev": "webpack --env=development --mode=development",
|
||||||
"webpack-watch": "webpack --progress --colors --watch --env=development --mode=development",
|
"webpack-watch": "webpack --progress --color --watch --env=development --mode=development",
|
||||||
"babel": "babel src --source-maps -d dist",
|
"babel": "babel src --source-maps -d dist",
|
||||||
"babel-watch": "babel src -w --source-maps -d dist",
|
"babel-watch": "babel src -w --source-maps -d dist",
|
||||||
"build": "babel src --source-maps -d dist && webpack --env=production --mode=production",
|
"build": "babel src --source-maps -d dist && webpack --env=production --mode=production",
|
||||||
@@ -40,38 +40,37 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/cli": "^7.12.10",
|
"@babel/cli": "^7.12.10",
|
||||||
"@babel/core": "^7.8.4",
|
"@babel/core": "^7.8.4",
|
||||||
|
"@babel/eslint-parser": "^7.16.0",
|
||||||
"@babel/plugin-proposal-optional-chaining": "^7.8.3",
|
"@babel/plugin-proposal-optional-chaining": "^7.8.3",
|
||||||
"@babel/preset-env": "^7.8.4",
|
"@babel/preset-env": "^7.8.4",
|
||||||
"@babel/register": "^7.8.3",
|
"@babel/register": "^7.8.3",
|
||||||
"@vue/compiler-sfc": "^3.0.4",
|
"autoprefixer": "^10.4.0",
|
||||||
"autoprefixer": "^9.7.4",
|
|
||||||
"babel-eslint": "^10.1.0",
|
|
||||||
"babel-loader": "^8.0.6",
|
"babel-loader": "^8.0.6",
|
||||||
"babel-preset-airbnb": "^3.3.2",
|
"babel-preset-airbnb": "^5.0.0",
|
||||||
"css-loader": "^5.0.1",
|
"css-loader": "^6.5.0",
|
||||||
"eslint": "^7.20.0",
|
"eslint": "^8.1.0",
|
||||||
"eslint-config-airbnb": "^17.1.1",
|
"eslint-config-airbnb": "^18.2.1",
|
||||||
"eslint-config-airbnb-base": "^13.2.0",
|
"eslint-config-airbnb-base": "^14.2.1",
|
||||||
"eslint-plugin-import": "^2.20.1",
|
"eslint-plugin-import": "^2.20.1",
|
||||||
"eslint-plugin-jsx-a11y": "^6.2.3",
|
"eslint-plugin-jsx-a11y": "^6.2.3",
|
||||||
"eslint-plugin-react": "^7.18.3",
|
"eslint-plugin-react": "^7.18.3",
|
||||||
"eslint-plugin-vue": "^6.2.1",
|
"eslint-plugin-vue": "^8.0.3",
|
||||||
"eslint-watch": "^4.0.2",
|
"eslint-watch": "^7.0.0",
|
||||||
"eslint-webpack-plugin": "^2.5.2",
|
"eslint-webpack-plugin": "^3.1.0",
|
||||||
"mini-css-extract-plugin": "^1.3.3",
|
"mini-css-extract-plugin": "^2.4.3",
|
||||||
"node-sass": "^5.0.0",
|
"node-sass": "^6.0.1",
|
||||||
"postcss-loader": "^3.0.0",
|
"postcss-loader": "^6.2.0",
|
||||||
"raw-loader": "^4.0.2",
|
"raw-loader": "^4.0.2",
|
||||||
"sass-loader": "^11.0.1",
|
"sass-loader": "^12.3.0",
|
||||||
"style-loader": "^0.23.1",
|
"style-loader": "^3.3.1",
|
||||||
"vue-loader": "^16.1.2",
|
"vue-loader": "^16.8.2",
|
||||||
"webpack": "^5.11.0",
|
"webpack": "^5.11.0",
|
||||||
"webpack-cli": "^3.3.11"
|
"webpack-cli": "^4.9.1"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@casl/ability": "^5.2.2",
|
"@casl/ability": "^5.2.2",
|
||||||
"@graphile-contrib/pg-order-by-related": "^1.0.0-beta.6",
|
"@graphile-contrib/pg-order-by-related": "^1.0.0-beta.6",
|
||||||
"@graphile-contrib/pg-simplify-inflector": "^5.0.0-beta.1",
|
"@graphile-contrib/pg-simplify-inflector": "^6.1.0",
|
||||||
"acorn": "^8.0.4",
|
"acorn": "^8.0.4",
|
||||||
"array-equal": "^1.0.0",
|
"array-equal": "^1.0.0",
|
||||||
"aws-sdk": "^2.847.0",
|
"aws-sdk": "^2.847.0",
|
||||||
@@ -88,62 +87,62 @@
|
|||||||
"cloudscraper": "^4.6.0",
|
"cloudscraper": "^4.6.0",
|
||||||
"config": "^3.2.5",
|
"config": "^3.2.5",
|
||||||
"connect-session-knex": "^2.0.0",
|
"connect-session-knex": "^2.0.0",
|
||||||
"convert": "^1.6.2",
|
"convert": "^4.2.4",
|
||||||
"cookie": "^0.4.0",
|
"cookie": "^0.4.0",
|
||||||
"csv-stringify": "^5.3.6",
|
"csv-stringify": "^5.3.6",
|
||||||
"dayjs": "^1.8.21",
|
"dayjs": "^1.8.21",
|
||||||
"dompurify": "^2.0.11",
|
"dompurify": "^2.0.11",
|
||||||
"ejs": "^3.0.1",
|
"ejs": "^3.0.1",
|
||||||
"express": "^4.17.1",
|
"express": "^4.17.1",
|
||||||
"express-promise-router": "^3.0.3",
|
"express-promise-router": "^4.1.0",
|
||||||
"express-react-views": "^0.11.0",
|
"express-react-views": "^0.11.0",
|
||||||
"express-session": "^1.17.1",
|
"express-session": "^1.17.1",
|
||||||
"face-api.js": "^0.22.2",
|
"face-api.js": "^0.22.2",
|
||||||
"faker": "^5.1.0",
|
"faker": "^5.1.0",
|
||||||
"file-type": "^14.1.4",
|
"file-type": "^16.5.3",
|
||||||
"fluent-ffmpeg": "^2.1.2",
|
"fluent-ffmpeg": "^2.1.2",
|
||||||
"fs-extra": "^7.0.1",
|
"fs-extra": "^10.0.0",
|
||||||
"graphile-utils": "^4.5.6",
|
"graphile-utils": "^4.12.2",
|
||||||
"graphql": "^14.6.0",
|
"graphql": "^15.4.0",
|
||||||
"html-entities": "^2.3.2",
|
"html-entities": "^2.3.2",
|
||||||
"iconv-lite": "^0.5.1",
|
"iconv-lite": "^0.6.3",
|
||||||
"inquirer": "^7.3.3",
|
"inquirer": "^8.2.0",
|
||||||
"jsdom": "^16.3.0",
|
"inspector-api": "^1.4.2",
|
||||||
"knex": "^0.21.13",
|
"jsdom": "^18.0.0",
|
||||||
|
"knex": "^0.95.12",
|
||||||
"knex-migrate": "^1.7.4",
|
"knex-migrate": "^1.7.4",
|
||||||
"longjohn": "^0.2.12",
|
"longjohn": "^0.2.12",
|
||||||
"mime": "^2.4.4",
|
"mime": "^2.4.4",
|
||||||
"mitt": "^2.1.0",
|
"mitt": "^3.0.0",
|
||||||
"moment": "^2.24.0",
|
"moment": "^2.24.0",
|
||||||
"nanoid": "^2.1.11",
|
"nanoid": "^3.1.30",
|
||||||
|
"node-fetch": "^2.6.7",
|
||||||
"object-merge-advanced": "^12.1.0",
|
"object-merge-advanced": "^12.1.0",
|
||||||
"object.omit": "^3.0.0",
|
"object.omit": "^3.0.0",
|
||||||
"opn": "^5.5.0",
|
"opn": "^6.0.0",
|
||||||
"pg": "^8.5.1",
|
"pg": "^8.5.1",
|
||||||
"postgraphile": "^4.10.0",
|
"postgraphile": "^4.10.0",
|
||||||
"postgraphile-plugin-connection-filter": "^1.1.3",
|
"postgraphile-plugin-connection-filter": "^2.2.2",
|
||||||
"promise-task-queue": "^1.2.0",
|
"promise-task-queue": "^1.2.0",
|
||||||
"prop-types": "^15.7.2",
|
"prop-types": "^15.7.2",
|
||||||
"react": "^16.13.0",
|
"sharp": "^0.29.2",
|
||||||
"react-dom": "^16.13.0",
|
|
||||||
"sharp": "^0.27.2",
|
|
||||||
"showdown": "^1.9.1",
|
"showdown": "^1.9.1",
|
||||||
"source-map-support": "^0.5.16",
|
"source-map-support": "^0.5.16",
|
||||||
"template-format": "^1.2.5",
|
"template-format": "^1.2.5",
|
||||||
"tippy.js": "^6.3.1",
|
"tippy.js": "^6.3.1",
|
||||||
"tough-cookie": "^3.0.1",
|
"tough-cookie": "^4.0.0",
|
||||||
"tty-table": "^2.8.12",
|
|
||||||
"tunnel": "0.0.6",
|
"tunnel": "0.0.6",
|
||||||
|
"undici": "^4.13.0",
|
||||||
"url-pattern": "^1.0.3",
|
"url-pattern": "^1.0.3",
|
||||||
"v-tooltip": "^2.0.3",
|
"v-tooltip": "^2.0.3",
|
||||||
"video.js": "^7.11.4",
|
"video.js": "^7.11.4",
|
||||||
"videojs-vr": "^1.7.1",
|
"videojs-vr": "^1.7.1",
|
||||||
"vue": "^3.0.4",
|
"vue": "^3.2.20",
|
||||||
"vue-router": "^4.0.1",
|
"vue-router": "^4.0.12",
|
||||||
"vuex": "^4.0.0-rc.2",
|
"vuex": "^4.0.2",
|
||||||
"why-is-node-running": "^2.2.0",
|
"why-is-node-running": "^2.2.0",
|
||||||
"winston": "^3.2.1",
|
"winston": "^3.2.1",
|
||||||
"winston-daily-rotate-file": "^4.4.2",
|
"winston-daily-rotate-file": "^4.4.2",
|
||||||
"yargs": "^13.3.0"
|
"yargs": "^17.2.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
public/img/banners/teenmegaworld/analangels/analangels_300_250_animated.gif
Executable file
|
After Width: | Height: | Size: 69 KiB |
BIN
public/img/banners/teenmegaworld/analangels/analangels_468_80_animated.gif
Executable file
|
After Width: | Height: | Size: 26 KiB |
BIN
public/img/banners/teenmegaworld/analbeauty/analbeauty_300_250_animated.gif
Executable file
|
After Width: | Height: | Size: 72 KiB |
BIN
public/img/banners/teenmegaworld/analbeauty/analbeauty_300_250_tail_animated.gif
Executable file
|
After Width: | Height: | Size: 78 KiB |
BIN
public/img/banners/teenmegaworld/analbeauty/analbeauty_468_80_animated.gif
Executable file
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 72 KiB |
|
After Width: | Height: | Size: 80 KiB |
BIN
public/img/banners/teenmegaworld/beautyangels/beautyangels_468_80_animated.gif
Executable file
|
After Width: | Height: | Size: 27 KiB |
BIN
public/img/banners/teenmegaworld/teenmegaworld_300_250_animated.gif
Executable file
|
After Width: | Height: | Size: 74 KiB |
BIN
public/img/banners/teenmegaworld/tmwvrnet/tmwvrnet_468_80_animated.gif
Executable file
|
After Width: | Height: | Size: 676 KiB |
6
public/img/flags/aq.svg
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icon-css-aq" viewBox="0 0 640 480">
|
||||||
|
<path fill="#3a7dce" fill-rule="evenodd" d="M0 0h640v480H0z"/>
|
||||||
|
<path fill="#fff" d="M184.8 225.3c-2.9-5.9-2.9-5.9-2.9-11.8-1.4 0-1.7.3-2.5 0-.8-.2-1.2 5.5-3.9 4.4-.4-.6 2-4.7-.6-6.4-.8-.5.2-3.9-.2-5.4 0 0-3.3 1.8-5.7-4.4-1.3-1.6-3 1.5-3 1.5s.8 1.9-.5 2.3c-1.9-1.4-3.2-.6-5.6-2.5-2.3-2 .5-4.1-4-5.7 3-7.4 3-6 10.2-8.9-4.4-3-4.4-3-7.3-7.4-4.3-1.4-5.7-3-10-5.9-5.8-7.3-8.7-22.1-8.7-32.4 3.6-3.5 8.6 11.8 15.9 16.2l10 4.4c5.8 3 7.3 6 11.6 8.9l13 4.4c5.8 4.4 8.7 10.3 13 11.8 4.7 0 5.6-2.7 7.1-3 8.5-.4 12.8-1.5 14.5-4 1.7-2.2 5.8 1.1 17.4-3.3l-1.5-6s3.1-2.5 7.3-1.4c-.2-2.7-.4-9.9 3.7-13.1-2.5-2.7-.9-4.6-.9-4.6s2.3-2.3 2.6-3.5c-1.2-6.5 1-6.6 1.6-8.5s-2-1.2-1.3-3.9c.7-2.6 4.9-3.2 5.5-5.4.5-2.2-1.2-3.3-1.1-3.8.9-2 .1-7 0-8.9 7.7-2 10.3-8.5 13-5.9 1.4-8.8 2.8-11.8 11.5-11.8 1.2-2.7-3.1-5-1.4-5.9 2.9-.3 5-.2 8.5 4.3 1 1.4 1.2-2 2.3-2.4 1-.4 3.7-.4 4-2.2.5-1.8 1-4.1 2.5-7 1.2-2.5 2.2.9 3.2 5.6a157 157 0 0 1 25.7 3.2c4.3 1.1 7.2-1.2 11.3-1.6 3.1 3.1 6 .8 7.6 7.5 2.3 3.6 6 .3 6.9 1.3 4.8 13.6 21.4 4.5 22.7 4.7 2 0 4.7 6 6.3 6 2.8-.5 2-2.4 4.4-1.7-.7 5.2 4.6 11 4.6 14.9 0 0 1.3.6 2.5-.5s2.3-4 3.3-4l6.5 1.2c7.8 2.8 11.8 3.4 14.8 4.8 1.5 2.6 2.8 4 5.7 3.5 2.4 1.6.6 3.8 2 3.9 3-1.5 3.9-3.1 6.8-1.6a17.6 17.6 0 0 1 7.2 7.4c0 1.4-1.5 7.3 0 16.2.7 3 1 5.3 4.1 10.3-.8 5.3 4 14 4 16.2 0 3-2.4 4.5-3.8 7.5 5.8 4.4 0 11.8-2.9 16.2 21.7 4.4 11.6 13.3 28.9 8.8-4.3 10.4-2.8 9.5 1.5 19.9-8.6 5.9-.2 7.7-6 15-.3.5 3.5 6.5 8.8 6.5-1.4 11.8-5.8 7.4-4.3 25-11.4-.2-6.8 13.3-14.4 11.9.4 8.4 4.3 9.2 2.8 17.7-5.7 1.5-5.7 1.5-8.6 5.9l-4.4-1.5c-1.4 7.4-4.3 8.9 0 16.3H439c-.1 2.5 2.5 3.2 3 5.9-.3 1-8.3 5.7-14.5 5.9-1.6 3.6 4.3 7.5 4 9.3-6.8 1.4-9.8 9.9-9.8 9.9s3.5 1.4 2.9 3c-1.9-1.5-2.9-1.6-5.8-1.6-1.4.4-5 0-8.3 5.8-3.7 1.2-5.5.8-8.3 4.6-1.2-3.7-3 0-5.2 1.4s-5.1 4.9-5.5 4.7c0-1 1.3-4.7 1.3-4.7l-7.2 1.5-.9.1c-.5 0-.4-4.3-1.8-4.1-1.3.1-5.2 5.5-6.6 5.6-1.3.2-1.7-1.7-2.9-1.5-1.1.2-3.4 5.6-4.2 5.8-.8.1-4-3.4-6.8-2.9-14.2 5.1-16.4-10-18.7-1.5-3-1.6-2.4-.7-5.4.1-2 .5-2.1-2.6-3.9-2.5-3.4 0-3.2 3.4-5.1 2.4-1.5-7-10.8-5.7-11.7-8.6-.7-3.1 4-3 5.6-5.2 1.1-3-1.3-4.1 3.5-7 6.2-4.3 2.6-6 3.7-9.2 2-4.6 2-5.8.4-9.9 0 0-4.9-13.2-5.8-13.2-3-.9-3 4.9-7.2 6.4-8.6 3-24-7.5-26.6-7.5-2.4 0-13.7 2.8-13.3-3-1.6 5.6-7.8 1.3-8.2 1.3-5.8 0-3.6 4.6-7.5 4.4-1.7-.6-19.5-1.6-19.5-1.6v3l-11.6-6-10-3c-8.7-2.9-4.4-10.3-18.8-5.8v-9H195c3-17.6 0-8.8-1.4-25l-5.8 1.5c-5.7-8 8-6.5-4.3-11.8 0 0 .2-8.8-2.9-6-.6.4 1.5 4.5 1.5 4.5-11.6-1.5-14.5-4.4-14.5-16.2 0 0 9.5 1.3 8.7 0a73 73 0 0 1-2.8-17.6c-.2-2 8.8-6.8 7-11.5 1.2-.4 4.4-.5 4.4-.5"/>
|
||||||
|
<path fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.1" d="M574.6 284.3a3 3 0 0 0 0 2.8c1-1.3.2-1.9 0-2.8z"/>
|
||||||
|
<path fill="none" stroke="#fff" stroke-linejoin="round" stroke-width="2" d="M203.3 167.8s-2.4-.3-1.9 1.8c.8-1.7 1.8-1.7 1.9-1.8zm.5-5c-1.3 0-3-.2-2.4 2 .8-1.7 2.4-1.9 2.4-2zm9.1 28.3s2.1-.1 1.6 2c-.8-1.6-1.5-1.9-1.6-2z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.9 KiB |
13
public/img/flags/bv.svg
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icon-css-bv" viewBox="0 0 640 480">
|
||||||
|
<defs>
|
||||||
|
<clipPath id="a">
|
||||||
|
<path fill-opacity=".7" d="M0 0h640v480H0z"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
<g fill-rule="evenodd" stroke-width="1pt" clip-path="url(#a)">
|
||||||
|
<path fill="#fff" d="M-28 0h699.7v512H-28z"/>
|
||||||
|
<path fill="#d72828" d="M-53-77.8h218.7v276.2H-53zM289.4-.6h381v199h-381zM-27.6 320h190.4v190.3H-27.6zm319.6 2.1h378.3v188.2H292z"/>
|
||||||
|
<path fill="#003897" d="M196.7-25.4H261v535.7h-64.5z"/>
|
||||||
|
<path fill="#003897" d="M-27.6 224.8h698v63.5h-698z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 579 B |
5
public/img/flags/gf.svg
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icon-css-gf" viewBox="0 0 640 480">
|
||||||
|
<path fill="#078930" d="M0 0h640v480z"/>
|
||||||
|
<path fill="#fcdd09" d="M0 0l640 480H0z"/>
|
||||||
|
<path fill="#da121a" d="M252.4 218h135.2l-109.4 79.5L320 169l41.8 128.6z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 258 B |
7
public/img/flags/gp.svg
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icon-css-gp" viewBox="0 0 640 480">
|
||||||
|
<g fill-rule="evenodd" stroke-width="1pt">
|
||||||
|
<path fill="#fff" d="M0 0h640v480H0z"/>
|
||||||
|
<path fill="#00267f" d="M0 0h213.3v480H0z"/>
|
||||||
|
<path fill="#f31830" d="M426.7 0H640v480H426.7z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 292 B |
201
public/img/flags/gs.svg
Normal file
@@ -0,0 +1,201 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="flag-icon-css-gs" viewBox="0 0 640 480">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="b">
|
||||||
|
<stop offset="0" stop-color="#d5dfff"/>
|
||||||
|
<stop offset="1" stop-color="#fff"/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="a">
|
||||||
|
<stop offset="0" stop-color="#474747"/>
|
||||||
|
<stop offset="1" stop-color="#f50"/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="c" x1="109.3" x2="110.9" y1="218.5" y2="173.4" gradientTransform="matrix(1.5 0 0 .65 40.5 0)" gradientUnits="userSpaceOnUse" xlink:href="#a"/>
|
||||||
|
<linearGradient id="d" x1="125.9" x2="126" y1="316.4" y2="337.2" gradientTransform="matrix(1.23 0 0 .8 40.5 0)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" stop-color="#b50000"/>
|
||||||
|
<stop offset="1" stop-color="#ffc500"/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="e" x1="407.9" x2="456.4" y1="149.4" y2="147.3" gradientTransform="matrix(.56 0 0 1.76 40.5 0)" gradientUnits="userSpaceOnUse" xlink:href="#b"/>
|
||||||
|
<linearGradient id="f" x1="215.8" x2="229" y1="103" y2="103" gradientTransform="matrix(.74 0 0 1.33 40.5 0)" gradientUnits="userSpaceOnUse" xlink:href="#a"/>
|
||||||
|
<linearGradient id="g" x1="117.6" x2="78.2" y1="1040.4" y2="1003.7" gradientTransform="matrix(2.56 0 0 .38 40.5 0)" gradientUnits="userSpaceOnUse" xlink:href="#b"/>
|
||||||
|
<linearGradient id="h" x1="264.7" x2="255" y1="246" y2="226.4" gradientTransform="matrix(.9 0 0 1.1 40.5 0)" gradientUnits="userSpaceOnUse" xlink:href="#b"/>
|
||||||
|
</defs>
|
||||||
|
<path fill="#006" d="M0 0h640v480H0z"/>
|
||||||
|
<g stroke-width="1pt">
|
||||||
|
<path fill="#fff" d="M0 0v33l403.2 261.7H454v-33L50.7 0H0zm454 0v33L50.7 294.6H0v-33L403.2 0H454z"/>
|
||||||
|
<path fill="#fff" d="M189.2 0v294.7h75.6V0h-75.6zM0 98.2v98.3h454V98.1H0z"/>
|
||||||
|
<path fill="#c00" d="M0 117.9v59h454v-59H0zM204.3 0v294.7h45.4V0h-45.4zM0 294.7l151.3-98.2h33.9L33.8 294.6H0zM0 0l151.3 98.2h-33.8L0 22V0zm268.8 98.2L420.1 0H454L302.6 98.2h-33.8zM454 294.7l-151.3-98.2h33.8L454 272.6v22z"/>
|
||||||
|
</g>
|
||||||
|
<path fill="#6a4c2d" fill-rule="evenodd" stroke="#000" stroke-width="1.1" d="M463.8 350s-3 7.5-4.6 7.5c-1.6 0-7.6-3.2-7.6-3.2s-4.3 7-6.6 7.4c-2.2.4-8.2-1-8.2-1s-5.8 0-6-.9c-.2-.8.3-2.4.3-2.4s-8.3 6.5-10.1 6.1c-1.9-.4-8-8.2-8-8.2l-1 4.1-11.8-.4-10.3-6.6s-5.7 9.5-6 9.3c-.1-.2-10 2.2-10 2.2l-.6-1.8-6.6-4s5.1-7.1 5.1-7.3c0-.2-2.4-1-2.4-1l-3.7 3-7.6 5-7.7-3.5 3.3-6.2.4-4.5 6-9 73-71 36 66.4-5.3 20z"/>
|
||||||
|
<path fill="#fff" fill-rule="evenodd" stroke="#000" stroke-width="1.1" d="M515.6 354.3l19-.7-8-4 72.3-2.8-10.2-3.9-9-12.2-37.6-2.9s-2.8-2.1-7.4-1c-.2-3-3.7-6.8-3.7-6.8l-23-1.7-14.5 9.8 9.7 25 12.4 1.1z"/>
|
||||||
|
<path fill="url(#c)" fill-rule="evenodd" stroke="#000" stroke-width="1pt" d="M121.3 150.8l2.2-7.6s4-6.6 4-9.4c0-3 2.8-6.4 2.8-6.4s9-2.6 10.8 2.9c9.6-14.5 20.8-.7 20.8-.7l3.1-3.6 6.4-7.8s9 8.4 9 9.9 1.6.4 1.6.4l9.8-.8s4.7 3.7 3.7 10.6c3.4 2 6.6 14 6.6 14l-80.8-1.5z" transform="matrix(.86 0 0 .86 337.3 11.7)"/>
|
||||||
|
<path fill="#656263" fill-rule="evenodd" stroke="#000" stroke-width="1.1" d="M515.5 218.7c1.4-.9 6-2.3 5.5-9-.6-6.7-6.4-7.5-9.6-7.3-3.3.3-6.2 3-6.2 3l-10.7-6.8s5.4-33.8 11-35.9c5.5-3.9 6.4-5.5 6.4-6.4s-2-3.2-2-3.2L475 149l-33 3.9s-2.6 3.9-2.2 5.5.4 3.2 6.3 7.8c6.6 5 11 33.9 11 33.9s-9.2 4.6-9.8 4c-.5-.6-3.3-1.1-4.7-.9-1.5.2-6.3 2.7-6.3 9 0 6.4 4.8 10 4.8 10s31.6-3.6 36.3 5.1c4.5-10.5 34.5-6.8 38.1-8.6z"/>
|
||||||
|
<path fill-rule="evenodd" stroke="#000" stroke-linejoin="round" stroke-width="1.1" d="M549.5 183.6s.4-3.7 3-5.4c2.6-1.8 20-2.6 24.3 0s5.7 15.5 5.7 15.5 2.6 4.6 2.8 7.9l.5 5.6s14 18.1 14.2 34.6c1.6 11.1 1.2 41-3.2 52.4-.1 14.1-6 23.4-6 23.4s1.3 2.4 1.2 5c-.2 2.7-1.6 5.1-1.6 5.1l20.4 10.1-7.5-2.8 7.5 6.3-8.5-4 5 5-12.4-5.5s5.8 5.4 5.4 5.2l-9.2-4.3 5.4 5.6c-.2-.3-8-3.5-8-3.5l.3 3s-6.3-.4-6.3-5.1a23 23 0 0 1-5.2-4.2l-14.5-2.5-16.4-49 3.8-83 1-4.2-1.7-11.2z"/>
|
||||||
|
<path fill="#fb0" fill-rule="evenodd" stroke="#000" stroke-width="1.1" d="M538.5 448.8s-8.4-17.8-12.6-18c-3.8-7.2 13.2-66.2 46-69.5 18 1.4 1.4 20.7-10.4 14.8 1.5 5.2 7.4 12.6 7.4 12.6s-23.5 10.1-30.4 60zm-112.7 2.5s7-20.1 11.2-20.4c4.2-.2-11.2-67-44.8-67.6-18.1 1.5-1.5 21 10.4 15-1.4 5.2-7.4 12.6-7.4 12.6s23.6 10.2 30.6 60.4z"/>
|
||||||
|
<path fill="#00713d" fill-rule="evenodd" stroke="#000" stroke-width="1.1" d="M456.6 325.5c-.1-.1-8.4 2.6-3 11.6.4-3.5 4-5.6 4-5.6s-5.6 6.7.4 12.4c.7-5.3 4.1-7 4.1-7s-4.2 12.3.1 14.8c.5-4.9 3.7-7 3.7-7s-3.8 11-.4 13.5c.4-4.2 3.2-6 3.2-6s-1.7 11.4 2.7 12.2c.1-4 3.4-8 3.4-8s-1.5 9.4 5.5 9.8c0-3.5 1.3-7.6 1.3-7.6s3.2 10 7.8 8.3v-8.4s2.9 9.5 8.4 7.7c-.8-2.7.3-5.8.3-5.8s3 5.9 8.2 4c.9-1.8-.2-5.3-.2-5.3s7.6 8 10 3.2c2.3-4.8-6.2-6.4-6.2-6.4h5.8s-1.9-4.9-9.6-6c2.6-1.1 5.4-.3 5.4-.3s-1.6-6-9.6-6.7c3.1-1 6.5-.3 6.5-.3s-1-5.7-9.8-7.4c1.4-1.5 5.1-1 5.1-1s-3.5-5.4-7.4-5.1-39.8-3.6-39.7-3.6z"/>
|
||||||
|
<path fill="none" stroke="#3ec26d" stroke-linecap="round" stroke-width="1.1" d="M491.9 354.7s3.1 1.6 3 3m-1.1-5.5s4 2.9 4 5m-.5-6.4s3.2 2 3.4 5.2m2-4s1.6 3.6 1 4.2m2.3-2.3c.2 2.8-.3 3-.3 3m-39.6-20.4s3.8 2.5 3.5 5.9m-3.7-3s1.7 1.8 1.3 2.9m3.3-5.7s2.6 3.5 1.7 6m2.6-3.7s1.2 2.2.1 3.4m2-2.4s1.3 2.2.1 3m-1.7 4.2s3.6.8 4 3.5m-1.9-5.9s3.7.3 4.1 4.2m.9-5.6s2.5 4.3 2 5.7m2.7-5.3s1 4.2.3 5.5m2.8-3.8v4.7m-4.7-11.2s2.4.9 2.2 3.1m0-5.2s3 1.7 2.7 5m.8-6.4s2.6 3 1.6 6.5m2.9-5.8s-1 3.8-.6 5.4m3.3-2.8s-1.6 1.3-.7 3m-14 11.8s.6 3 0 3.4m-3.7-5s1.9 3.2 1.2 4.8m-5.2-5s2.1 2.4 2 4.3m-5.2-3.8s2 1.8 1.8 2.9m-3.5-.1s1.9 2 1.8 2.3"/>
|
||||||
|
<path fill="#fff" fill-rule="evenodd" stroke="#000" stroke-width="1.1" d="M430.9 222.2l26.7-.5s17.7 0 19.6 5.8c3.4-7.7 18.6-7.2 18.6-7.2l27.7-1 .5 67a71.5 71.5 0 0 1-44.9 52 68.6 68.6 0 0 1-45.3-52.6l-3-63.5z"/>
|
||||||
|
<path fill="#006b00" fill-rule="evenodd" stroke="#000" stroke-width="1.1" d="M440.4 222l39 103.8 35.2-106.1c-11 .7-34.4-1.7-37.3 8.3-4.5-9-29.1-5.4-36.9-6z"/>
|
||||||
|
<path fill="#ffc900" fill-rule="evenodd" stroke="#006b00" stroke-linecap="round" stroke-width=".6" d="M467 278.2c1.4.8 1.4-28.2 3.4-29.1l1.5-6c-1.7-3-9.3-2.8-12-.3a74.5 74.5 0 0 0 1.8 5.4c3.8 6.2 3 30.6 5.2 30z"/>
|
||||||
|
<path fill="#cdad56" fill-rule="evenodd" stroke="#000" stroke-linejoin="round" stroke-width="1.1" d="M456.5 54.3s2.8-3.1 2.9-3.9c.1-.7 12.5-1.2 19.9-15 4.1-7.2 0-3 0-3L479 29s5.1-4.9 3.3-7.5c-1.9-2.6-1.3 3.4-4.3 3.3-3-.2-1.4-6.5-1.4-6.5s-.2-.8-1-1.2c-1.3.2-1 2.4-2 2.7-1.2.2-2.2-5.3-2.2-5.3s-1.9-2.5-3.5 5.4c.9 8.4 6.2 6.7 6.2 12.2 0 5.5-4.7 9.8-6 10-1.5 0-1-4.7-1-4.7s-.7-2.3-1.2-2.3 2.7-.5 2.2-6.7c-1-7.5-2 1.7-4 1.4s-.5-7 .3-7.7-.9-3.8-5.3 4.2c-.4 3.8-.9-1-1.7-.8-1.5 3.1-1.3 5.4.9 8.3 3 2.8 5 5.7 5 7.2-.2 1.5-1.8 4.9-4 4.9s0-4.1 0-5.5c-.2-1.4-4-6.4-4-6.4s-2.6-4.2-2.3-4.4c.3 0-.3-.7-1.5 3.7s-2.8-3-2.8-3-1.7 5.5 2 8.7c-2.8-.4-3 .8-3 .8 0 1.5 3.8 2.1 4.3 4.7s-4 4.2-4 4.2 1.9 2.6 7.1-2.5c.1 3.2-2 5.5-2 5.5 1.8.8 3.1.7 3.4 2.7z"/>
|
||||||
|
<path fill="#cdad56" fill-rule="evenodd" stroke="#000" stroke-linejoin="round" stroke-width=".9" d="M439.3 54.3s-2.3-3.5-2.4-4.1c-.1-.7-11.5.8-17-13-3.4-6.7 0-2.8 0-2.8l.3-3.2s-3.7-4.6-2.1-7c1.6-2.3 1 3.1 3 3.1 2.5 0 1.1-5.9 1.1-5.9s.2-.7 1-1c1 .1 1.5 3.5 2.4 3.8 1 .2 3-4 3.6-5 .9 0 .8-3.5 2.2 3.7-.7 7.6-7 6.1-7 11.2 0 5 4 8.8 5.2 9 1.1 0 .7-4.3.7-4.3s.6-2 1-2c.5 0-3.6.8-3.2-5 1-5.2 3 .4 4.8 0 1.7-.3-.2-5.5.3-6.4 0-.8 2.6-4.2 3.5 3.4.4 3.6 2.3-3 3-2.8 1.3 2.9-.5 6.7-2.3 9.3-2.7 2.6-4 5.5-3.8 6.8.1 1.4.7 3 2.6 3 2 0 .7-2.3.8-3.5.1-1.3 3.3-5.3 3.3-5.3.6-1 .1-3 .8-3.8 1 0 1.4-1.4 2.5 2.6 1 4 2.3-2.6 2.3-2.6s1.5 4.9-1.7 7.8c2.5-.3 2.7.7 2.7.7 0 1.4-1.2 2-1.6 4.3a4 4 0 0 0 1.3 3.8s-1.6 2.4-6.1-2.3a7.8 7.8 0 0 0 1.7 5c-1.5.7-2.7.7-2.9 2.5z"/>
|
||||||
|
<path fill="#ffc900" fill-rule="evenodd" d="M508 237.4c-2.3-2-2.5-.2-3.7-.7-.5-.2-1-.8-1.5-1.2-.4-.5-.9-.7-1.5-.9l-.6 1.9c-.2.6.6 1.7.6 2.6-.2 1.4-.8 2.5-2.5 3 .5-1 .8-1 .6-2.2 0-.6-1.7-1.7-1.5-2.3.3-.9.8-2 .4-2.9-.7.5-1.6.3-2.4.6-.6.2-.6 1.4-1.4 1.8-1 .4-2.8.2-4.4-.7 1-.7 1.8-.2 2.7-1 .5-.3.5-1.9 1-2.3s1.6-.7 2.1-1c-.4-.6-.4-1.4-.8-1.9s-2.4-.4-2.8-.9c-.9-1-.7-2.3-1.6-3.3 2.2.9 2 2 2.5 1.9a4 4 0 0 1 2.7-.4c.5.2 1.6 1.6 2.2 1.9l.7-2c.2-.7-1-1.8-.7-2.4.4-1.3 1.4-2.4 1.9-3.6l.5 3.4c0 .6 1.2 1 1.3 1.5 0 .6-.6 2-.5 2.6l2.2-.1c.7-.2 1-1.7 1.7-1.8a8.4 8.4 0 0 1 3.6 0c-1 1-1.7 1-2.3 1.7-.5.4.1 1.6-1.3 2.5-.5.3-1.9 0-2.4.3l1.3 1.5s2.4.7 2.9 1.2c.9 1 1.3 2.2 1 3.3zm-59.8 1c2.3-2 2.6-.2 3.7-.7.6-.2 1-.7 1.5-1.2.4-.4 1-.6 1.5-.9l.6 2s-.6 1.6-.5 2.5c.1 1.4.7 2.6 2.4 3-.4-1-.7-1-.6-2.2 0-.6 1.8-1.7 1.6-2.2-.3-1-.9-2-.5-3 .8.6 1.7.3 2.4.6.6.3.6 1.4 1.5 1.8.9.4 2.8.2 4.3-.7-1-.7-1.7-.2-2.7-1-.5-.3-.5-1.9-1-2.2-.4-.4-1.6-.8-2-1.2.4-.5.3-1.2.8-1.7s2.3-.4 2.8-1c.9-1 .7-2.2 1.6-3.2-2.3.8-2 1.9-2.5 1.8-1.1-.5-2.2-.6-2.7-.4-.6.3-1.7 1.7-2.2 1.9l-.8-2c-.2-.7 1-1.8.8-2.4-.4-1.2-1.5-2.4-2-3.6 0 1.2-.3 2.2-.4 3.4-.1.6-1.3 1-1.4 1.5 0 .6.7 2 .6 2.7-.7-.2-1.6 0-2.3-.2-.6-.1-1-1.6-1.7-1.8a8.3 8.3 0 0 0-3.5.1c1 .9 1.7.8 2.3 1.7.5.3-.2 1.5 1.2 2.4.5.3 2 0 2.4.3l-1.3 1.5c-.4.5-2.4.7-2.8 1.2-1 1-1.4 2.2-1.1 3.3z"/>
|
||||||
|
<path fill="#ffc900" fill-rule="evenodd" stroke="#006b00" stroke-linecap="round" stroke-linejoin="round" stroke-width=".6" d="M506 244.1c-2.1 1.7-15.8 5.1-15.9 17-.1 11.8 2.4 14.5-.1 14.8-5 0-5.7-13.2-5.5-19 .1-5.9.3-5 .3-5s3.3 1 3 3.8c-.2 2.8 3.4-7 2.2-9.8 2.2 2.3 5.2 1.4 5.2 1.2 0-.1-1.7-2-2.4-3.3-.7-1.3 2.5.8 2.5.8s.1-2.3-2.7-2.1c-3.6 0 .6-1.2.6-1.2s2.1 2 3.5-.2a12 12 0 0 0-3.8-2.5s-2-3.8-4.6-4.5c-3.1-.8-2.7 1.3-6.2 1-.7 1.4-.7 1.5.7 2-2.4 1.6-1.1 5-1.1 5s3.8-1.7 3.6 1c-.1 2.7-2.2 2.2-3.6.6-1.3-.8-1.7.7-1.7.7l2 2.1s-3.9-.1-4.8 2.4c2-.1 3.2.5 3.2.5s-4.3 2-4.8 3c-.4 1-.5-1.2-.7-1.2l-4.2-1.5-1.4 6.5s2.8 2.8 4.4 1.9c1.5-1 4.3-3.6 6-2.9-5 3.8-9.8 9.2-12.5 10-.7-.7-3.1-3-4-1.9-1 1.2-.4 2.7.9 2.6 1.3-.2-4 1.2-3 3.4 1.2 2.3 1 2.1 2 1.5 1-.6-.8-.7 2.8-1.8 3.7-1 3.5-2 3.5-2s-.7 1.6-2.6 2c-2 .5-3.5.5-3.1 1 .4.7 1.2 1.7 1 2.3-.3.6 4-3.1 5.2-.1 3-.2 4.9-3.8 3.5-5.9.1 2.3 1.5 3 .7 4s6.6-3.4 3-6c1 2.2 1 4 1 4s1.8-.2 2.2-.8c.4-.6-.9 1.7-.3 2.1.6.5 3.2 3 2 4.8-.6-1-.7-2.7-1.6-2.5-.8.1-4.3 2.7-6.5 2.8s2.6 7.8 2.6 7.8-3.3-.4-3.7-.1c-.4.3-2.5-2.7-3-1-.6 2.3.8 1.4.8 1.4s-1.9-.9-2.8.2c-1 1-2 2-1.3 2.5s3.8.5 4.2.3-3.5.3-3.8.8c-.3.4-.8 2 0 2.7s3-.3 3.1-.8c.2-.4.3 1.7.3 1.7s3.6.3 3.6-3.5.3 2.7.3 2.7 3.7.6 3.8-3.1.4 2.5.4 2.5 2.4-.7 2.4-1.3c0-.6-.1 7.5-1.8 9.7-2.7-1.8-4.4 1.2-4.4 1.2s.2 4.3-.1 5.4c-.3 1 1.8-.6 2-1 .1-.5 2.6-1.7 2.8-2l.8-1.8s-.5 2.1-1.5 2.4-2 1.3-1.6 2.2c.5 1 2 1.5 2.6 2.4.5 1 2.5-5.2 2.5-5.2l.1 1.3s2.6-.6 2.9-1.8c.2-1.2-2.7-2.2-.3-4.2 2.4-1.9 0 1.8 0 1.8s.8 2.9 1.4 2.9 2-5.4.5-6.7c-1.4-1.4 2.1 1.6 2.1 1.6s2-5.5-.1-6.3l-3.1-1s1.1-1.5.6-1.7 3 3.3 3.5 2.4 1.4-3.6-2.7-5c-4-1.6-.1-5.8-.1-5.8s2.5 3 4.3 1.4c1.9-1.7-.1-1.7-.1-1.7s5.2-3.3 5.3-5l-2.6.2s3-2 2.2-5a3.5 3.5 0 0 1-2.7 1.6s2.6-2.6 2.1-5c-1.5 1.2-1.4 2.1-2.3 1.8s-2.7-9.7 1.2-10.3c4-.6 1.8 4.6 2 4.6.1 0 5.9-2.4 0-6.3 1.4-.4 4.4 2.3 4.4 2.3s-1.3-6.6-7.6-2.6c1.5-1.6 2.5-2.7 3.7-2.4 1.3.3 5.8-.1 5.8-1.5-1.1-.9-3.5.5-4.8 0-1.2-.4 9-1.2 8.2-6.3z"/>
|
||||||
|
<path fill="none" stroke="#006b00" stroke-linecap="round" stroke-width="1.3" d="M481.3 118.5s12.3-6.4 18.4 1.6m4.9 12.2c-.3 0-4.3 4-5.2 4m13.4 8.9s11.4.9 18.7-10.4" transform="matrix(.46 0 0 .5 240.3 190.1)"/>
|
||||||
|
<path fill="none" stroke="#006b00" stroke-linecap="round" stroke-width="1.3" d="M525 141.8s1 6.1 2.8 6.1-3 1.6-4.9.3c2.2 2.8 3.4 7.7 0 9.5" transform="matrix(.46 0 0 .5 240.3 190.1)"/>
|
||||||
|
<path fill="#e80000" fill-rule="evenodd" stroke="#006b00" stroke-linecap="round" stroke-width="1.3" d="M519.3 219s-4 4.3-9 4.6" transform="matrix(.46 0 0 .5 240.3 190.1)"/>
|
||||||
|
<path fill="none" stroke="#006b00" stroke-linecap="round" stroke-width="1.3" d="M523.9 199.4s-2.5-12.3-1-15.3c1-4 5-5.5 8-10.7m-8.3 17s-3 7.4-16.5 5m20.2-23.3s1 9.8-11.3 6.1m-3.7-50.2s-4.9 4.3-3 10.1" transform="matrix(.46 0 0 .5 240.3 190.1)"/>
|
||||||
|
<path fill="#006b00" fill-rule="evenodd" d="M483.7 247.6s3-1.2 3.6-1.8a9 9 0 0 0 1.8-2.7c.3-.9-2-2.3-.9-4.2.7-.9 1.7-1 3.4 0s-1.5-3.3-3.2-3.5-2.8 1.3-3.3 1c-.4-.3.2 1.2-.5 1.2s1.4 1.2 1.2 1.9c-.1.8 2.3 3.3 2.1 3.9 0 .6-3.5 4-4.2 4.2z"/>
|
||||||
|
<path fill="#ffc900" fill-rule="evenodd" stroke="#ffc900" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.3" d="M534.3 97.1c2.8-.6 3.2 0 2.7 2.5a7 7 0 0 1-2.7-2.5z" transform="matrix(.46 0 0 .5 240.3 190.1)"/>
|
||||||
|
<path fill="#e80000" fill-rule="evenodd" stroke="#006b00" stroke-linejoin="round" stroke-width="1.3" d="M514.7 233.5s-1 6.4 1.5 7c-.1-2.5.5-4.2 1.2-4.9-.6-.2-2.6-2-2.7-2zm-5.7-7.9c-2.3-.3-6.2 1.6-5 4 1.8-1.7 3.6 0 4.9-1.6.4-.4.3-1.8.1-2.4zm0-4.5s-3.6-.6-4.1 1.9c2.5-.3 3.2-.6 4 0 .3-.6 0-1.8.1-2z" transform="matrix(.46 0 0 .5 240.3 190.1)"/>
|
||||||
|
<path fill="#e80000" fill-rule="evenodd" stroke="#006b00" stroke-linejoin="round" stroke-width="1pt" d="M493.5 185s2.2.8 2.9 3c1.7-1 2.5-5.8-2.9-3zm-5.4 5.4c.1 0 4.6-2.8 5-.2-.9 1-1.3 1.6-2 1.8-.6 0-1.8-1.8-3-1.6zm-.4 8.8s2.9-2.5 4-.8c1 1.6-1 1.5-1 1.5s-1-.4-3-.7zm-4-49.2s-3.6-1.4-5 1c2.3.4 3.1 1.2 4.2 2-.3-1-.8-2.6.8-3zm-6.9 18.5s.2-4.2 2.1-5.9c1.2.7 1.5 1.7 2.2 2.9-1.5.3-3.4.4-4.3 3zm9.5-3s-4 1.9-2.6 3.8c1.2-1.3 2.7-1 2.7-1l-.1-2.8z" transform="matrix(.46 0 0 .5 240.3 190.1)"/>
|
||||||
|
<path fill="#ffc900" fill-rule="evenodd" stroke="#006b00" stroke-linejoin="round" stroke-width="1pt" d="M480.6 125.6c-1.4 1.6 1.8 5 5 4.5 1-3.7-4.1-5.7-5-4.5z" transform="matrix(.46 0 0 .5 240.3 190.1)"/>
|
||||||
|
<path fill="none" d="M461.2 248.1c-.3.9 1 2 1.7 1.8.3-1-1.4-2.5-1.7-1.8z"/>
|
||||||
|
<path fill="#e80000" fill-rule="evenodd" stroke="#006b00" stroke-linejoin="round" stroke-width="1pt" d="M484.3 122.8s.6 2.9 3.4 2.1c-.4-2.3-2.4-4-2.4-4-.1.7.4 1.7-1 1.9zm1.9 8.5s1.5 1.7 4.6-1.8c-1.4.4-3.8-.8-3.8-.8s0 2.4-.8 2.6z" transform="matrix(.46 0 0 .5 240.3 190.1)"/>
|
||||||
|
<path fill="#ffc900" fill-rule="evenodd" stroke="#006b00" stroke-linejoin="round" stroke-width="1pt" d="M480.5 118.9c-1.4 1.5.5 3.7 3.8 3.2.9-3.7-3-4.4-3.8-3.2z" transform="matrix(.46 0 0 .5 240.3 190.1)"/>
|
||||||
|
<path fill="url(#d)" fill-rule="evenodd" d="M144.6 266.6s7-2 10.8 1 3.7.3 3.7.3 5.5 2 7 1.6-1 .1 1-1.2c2.2-1.2-4.2.3-4.8-2.4-1-1.7.1-3.9-2.2-3.2-1.5-2 1-3.4.5-5.6-1.6 1.2-2.5-.4-3.8 2.5-3-.6-.4-4.8-3.7-5.2 0 3-2.4 3.2-2.6 4.9-1.4 1-7.7 4.7-5.9 7.3z" transform="matrix(.86 0 0 .86 337.3 11.7)"/>
|
||||||
|
<path fill="#c01500" fill-rule="evenodd" stroke="#000" stroke-width="1.1" d="M392 437.9c4-1 25.2 4.7 33.4 13.5-1.7-15.7-6-27.7-6-27.7s-12.8-3.6-14.5-1.9a96.3 96.3 0 0 0-13 16.1zm-6.5-72.3c-1.5.2-3 1.2-4.5 3.7-1.7 4.2-3 14.9-5.4 17.4-2.5 2.5-4.8 2.7-4.8 5 0 2.2.3 7.4 7 9.4 6.7.3 17.4-10.7 17.4-10.7s5.5-6 7.7-12.4c-13 4.5-22.1-7.5-17.4-12.4zm187 69.8c-4-1-25.4 4.7-33.6 13.4a133 133 0 0 1 6-27.5c1.6-.4 12.5-3.6 14.2-1.9 2.5 2.7 10.7 10.7 13.4 16zm6-72c1.5.3 2 2.3 3.2 4.7 1.7 4.2 3.5 10.4 6 12.8 2.5 2.5 4.7 6.2 4.7 8.4s-.5 5.2-7.2 7.2c-6.7.3-16.3-8.3-16.3-8.3s-5.4-6-7.7-12.4c12.9 4.5 21.2-7 17.3-12.3z"/>
|
||||||
|
<path fill="#fb0" fill-rule="evenodd" stroke="#000" stroke-width="1.1" d="M378 424.2s13.5 9.2 13.7 13.5c36-53.5 128-70.1 180.5-3.8 7-9.2 14.2-12.1 14.2-12.1-55.2-72.2-165.1-63.2-208.4 2.4z"/>
|
||||||
|
<g fill="#1e5aa6" fill-rule="evenodd" stroke="#000" stroke-width="1.1">
|
||||||
|
<path d="M515 219.9l5.2-.2-9.4 12 11.3 13-22.2 28 21 25.2a70 70 0 0 1-8.6 15.4l-12-13.3 21.8-27.2-18-20.3L515 220zm-75.2 2.3l-5.6.2 10.5 11.4-11.2 13.9 23.2 25.1-19.2 25.7a75.8 75.8 0 0 0 9.2 16.5l11.4-14.4-23.4-26 17.1-21.8-12-30.6z"/>
|
||||||
|
<path d="M465.9 289.8l-8.3 11L487 335a74 74 0 0 0 13.8-9.2L485.5 308l6.3-18.4 9 10.4-28.2 36a62 62 0 0 1-14.7-9.1l15-18.9-7-18.2zm-9.2-17.1l5.4 6.8-3.5-9.2-1.9 2.4zm38.6 6l4.3-5.8-1.6-2.2-2.7 8z"/>
|
||||||
|
</g>
|
||||||
|
<text x="-328.3" y="362.4" font-family="Timmons" font-size="14" font-weight="bold" transform="rotate(-49.4 182.5 -362) scale(.86)">
|
||||||
|
<tspan x="-328.3" y="362.4">L</tspan>
|
||||||
|
</text>
|
||||||
|
<text x="-292.3" y="384.3" font-family="Timmons" font-size="14" font-weight="bold" transform="matrix(.6 -.6 .6 .6 337.3 11.7)">
|
||||||
|
<tspan x="-292.3" y="384.3">E</tspan>
|
||||||
|
</text>
|
||||||
|
<text x="-239.8" y="451.7" font-family="Timmons" font-size="14" font-weight="bold" transform="matrix(.66 -.47 .5 .65 337.3 11.7)">
|
||||||
|
<tspan x="-239.8" y="451.7">O</tspan>
|
||||||
|
</text>
|
||||||
|
<text x="-188.5" y="430" font-family="Timmons" font-size="14" font-weight="bold" transform="matrix(.7 -.48 .48 .7 337.3 11.7)">
|
||||||
|
<tspan x="-188.5" y="430">T</tspan>
|
||||||
|
</text>
|
||||||
|
<text x="-115.4" y="451.5" font-family="Timmons" font-size="14" font-weight="bold" transform="matrix(.78 -.37 .37 .78 337.3 11.7)">
|
||||||
|
<tspan x="-115.4" y="451.5">E</tspan>
|
||||||
|
</text>
|
||||||
|
<text x="-94.1" y="453.1" font-family="Timmons" font-size="14" font-weight="bold" transform="matrix(.8 -.35 .35 .8 337.3 11.7)">
|
||||||
|
<tspan x="-94.1" y="453.1">R</tspan>
|
||||||
|
</text>
|
||||||
|
<text x="-68.4" y="455" font-family="Timmons" font-size="14" font-weight="bold" transform="matrix(.8 -.32 .32 .8 337.3 11.7)">
|
||||||
|
<tspan x="-68.4" y="455">R</tspan>
|
||||||
|
</text>
|
||||||
|
<text x="112" y="445.7" font-family="Timmons" font-size="14" font-weight="bold" transform="matrix(.86 -.07 .07 .86 337.3 11.7)">
|
||||||
|
<tspan x="112" y="445.7">R</tspan>
|
||||||
|
</text>
|
||||||
|
<text x="180.2" y="430.8" font-family="Timmons" font-size="14" font-weight="bold" transform="matrix(.86 0 0 .86 337.3 11.7)">
|
||||||
|
<tspan x="180.2" y="430.8">R</tspan>
|
||||||
|
</text>
|
||||||
|
<text x="414.8" y="275.2" font-family="Timmons" font-size="14" font-weight="bold" transform="matrix(.75 .43 -.43 .75 337.3 11.7)">
|
||||||
|
<tspan x="414.8" y="275.2">R</tspan>
|
||||||
|
</text>
|
||||||
|
<text x="483.9" y="193.1" font-family="Timmons" font-size="14" font-weight="bold" transform="rotate(39.9 153.2 471.7) scale(.86)">
|
||||||
|
<tspan x="483.9" y="193.1">E</tspan>
|
||||||
|
</text>
|
||||||
|
<text x="309.1" y="414" font-family="Timmons" font-size="14" font-weight="bold" transform="matrix(.83 .16 -.13 .82 337.3 11.7)">
|
||||||
|
<tspan x="309.1" y="414">O</tspan>
|
||||||
|
</text>
|
||||||
|
<text x="105.1" y="459.3" font-family="Timmons" font-size="14" font-weight="bold" transform="matrix(.78 -.1 .12 .84 337.3 11.7)">
|
||||||
|
<tspan x="105.1" y="459.3">O</tspan>
|
||||||
|
</text>
|
||||||
|
<text x="-45.7" y="455.8" font-family="Timmons" font-size="14" font-weight="bold" transform="matrix(.8 -.3 .3 .8 337.3 11.7)">
|
||||||
|
<tspan x="-45.7" y="455.8">A</tspan>
|
||||||
|
</text>
|
||||||
|
<text x="518.4" y="144.7" font-family="Timmons" font-size="14" font-weight="bold" transform="matrix(.6 .6 -.6 .6 337.3 11.7)">
|
||||||
|
<tspan x="518.4" y="144.7">A</tspan>
|
||||||
|
</text>
|
||||||
|
<text x="271.2" y="388.3" font-family="Timmons" font-size="14" font-weight="bold" transform="matrix(.84 .17 -.17 .84 337.3 11.7)">
|
||||||
|
<tspan x="271.2" y="388.3">A</tspan>
|
||||||
|
</text>
|
||||||
|
<text x="40.3" y="455.2" font-family="Timmons" font-size="14" font-weight="bold" transform="matrix(.85 -.16 .16 .85 337.3 11.7)">
|
||||||
|
<tspan x="40.3" y="455.2">M</tspan>
|
||||||
|
</text>
|
||||||
|
<text x="94.4" y="448.1" font-family="Timmons" font-size="14" font-weight="bold" transform="matrix(.86 -.1 .1 .86 337.3 11.7)">
|
||||||
|
<tspan x="94.4" y="448.1">P</tspan>
|
||||||
|
</text>
|
||||||
|
<text x="155.1" y="437.6" font-family="Timmons" font-size="14" font-weight="bold" transform="matrix(.86 0 0 .86 337.3 11.7)">
|
||||||
|
<tspan x="155.1" y="437.6">P</tspan>
|
||||||
|
</text>
|
||||||
|
<text x="405.1" y="276.7" font-family="Timmons" font-size="14" font-weight="bold" transform="rotate(29.3 146.8 652.1) scale(.86)">
|
||||||
|
<tspan x="405.1" y="276.7">P</tspan>
|
||||||
|
</text>
|
||||||
|
<text x="232.1" y="409.8" font-family="Timmons" font-size="14" font-weight="bold" transform="matrix(.85 .1 -.1 .85 337.3 11.7)">
|
||||||
|
<tspan x="232.1" y="409.8">I</tspan>
|
||||||
|
</text>
|
||||||
|
<text x="530.4" y="132.1" font-family="Timmons" font-size="14" font-weight="bold" transform="rotate(46.4 155 399.3) scale(.87)">
|
||||||
|
<tspan x="530.4" y="132.1">T</tspan>
|
||||||
|
</text>
|
||||||
|
<text x="464.2" y="218.5" font-family="Timmons" font-size="14" font-weight="bold" transform="rotate(36.4 149 515.6) scale(.87)">
|
||||||
|
<tspan x="464.2" y="218.5">T</tspan>
|
||||||
|
</text>
|
||||||
|
<text x="313.7" y="362" font-family="Timmons" font-size="14" font-weight="bold" transform="matrix(.83 .24 -.24 .83 337.3 11.7)">
|
||||||
|
<tspan x="313.7" y="362">M</tspan>
|
||||||
|
</text>
|
||||||
|
<text x="513.7" y="123.3" font-family="Timmons" font-size="14" font-weight="bold" transform="matrix(.58 .64 -.64 .58 337.3 11.7)">
|
||||||
|
<tspan x="513.7" y="123.3">G</tspan>
|
||||||
|
</text>
|
||||||
|
<path fill="none" stroke="#fff700" stroke-linecap="round" stroke-width="1.1" d="M557.4 184.5s5.2-4.4 8.9-4.6m-8.2 4c.1-.1 31-4.5 32-5.4m-31.9 5.6l34.6-3m-34.7 3.2s36.7-1.8 39 0m-39.1-.2s36 .3 36.6 1.1m-36.5-1l34.6 2.8m-35-2.6c.2 0 35.3 3 38.7 7.5m1.9 6.3c-.2-.1-12-14.2-40.7-14m.2.3s19.8 1.4 26.1 8.3m-25.8-8.5s12.9-2.5 26.3 13.7"/>
|
||||||
|
<path fill="url(#e)" fill-rule="evenodd" stroke="#000" stroke-width="1pt" d="M247.4 217.7s20.7.9 20.7 2.9-15.4 5.9-15.6 14.4c-.2 8.5 11.8 9.2 12.6 20 .8 10.7-9.4 12.3-11.4 15.2-2 1.4-6.9 16.6-6.3 25.5.6 9 3.3 39.2 8 45.3 3.6 2.9 9 12 15 9.2 5.9-2.9 1.8-13.2 1.2-16s2.4-7.6 2.4-11.8c0-4.3-2.2-7.8-2-8.8.2-1 16.4 3.9 15.4 20-1 16-7.5 11-7.5 11s2 19.8-3 22.4c-9.2 5-15.9-1-15.9-1l.9 4-7-3.6s-9-12.8-11-18.5-4.4-31-3.6-36.5c.8-5.5 1.4-37.6 1-39.2s-2-28.5-1-32.5 7.3-22 7.1-22z" transform="matrix(.86 0 0 .86 337.3 11.7)"/>
|
||||||
|
<path fill="#ff7000" fill-rule="evenodd" stroke="#000" stroke-width="1.1" d="M530.8 194.4s12.4-12 19.6-10.6c3.7 0 .2 2.6.2 2.6s6.3.5 7.1 3.3c.2 1.2-3 1.6-3 1.6s2.7.5 2.8 2.8-26.5.5-26.7.3z"/>
|
||||||
|
<path fill="none" stroke="#000" stroke-width="1.1" d="M531.5 193.9s13.3-1.8 18.9-7.4m-5.4 3.7s9.8-.3 9.8 1"/>
|
||||||
|
<path fill="#fff" fill-rule="evenodd" stroke="#000" stroke-linejoin="round" stroke-width="1.1" d="M579.7 333.1s8.4-1.9 10.7-4.9c1.4-1 8.7 11-10.7 5z"/>
|
||||||
|
<path fill="none" stroke="#fff" stroke-linecap="round" stroke-width="1.1" d="M577.5 263.8s1 6.4-2 10.8c-1.5 1.7-6.3 4.7-6.3 6.8 0 2.1 1.8 4.9 1.4 7.3s-3 5-2.7 7c0 2.1 3 13.3 2.6 13.5m-8.4-66.4s-6.6 2.3-8 9"/>
|
||||||
|
<path fill="#c75b00" fill-rule="evenodd" stroke="#000" stroke-width="1.1" d="M559.3 190.2s2.3 6.3 9.6.4c-4.7-6.5-9.6-.2-9.6-.4z"/>
|
||||||
|
<path fill-rule="evenodd" d="M564.9 190c0 .4-.4.7-.8.7s-.8-.3-.8-.6.3-.6.8-.6.8.2.8.6z"/>
|
||||||
|
<path fill="#fff" fill-rule="evenodd" stroke="#000" stroke-width="1.1" d="M499.3 175.6s14 15 23 15c1.6 4.4-4.2 8.5-6.5 10.4-4.5-1.4-8.7.3-19.3-12.8.6-8.3 3-12.2 2.8-12.6zm18.8-35c1.8-5.6 5.4-10 8.5-10.5-.8-4.2 6.6-23 28-30.3 1.3 9.7-9.1 19.2-9.1 19.2s31.6-5.4 38-13.4c-.7 3.6-7.1 26-40.8 25.8 12.8 12.1-4.1 21.8-11.3 18.9 13.2-10.2-3.8-16.2-13.3-9.7z"/>
|
||||||
|
<path fill="#cccccd" fill-rule="evenodd" stroke="#ccc" stroke-width="1.1" d="M529 132.8c6.3-4.1 8.6-4.1 13.8-3.3l-3.7.6s-.4.5 2 2.7c-2.7-.7-5-2.2-12.2 0z"/>
|
||||||
|
<path fill="none" stroke="#000" stroke-width="1.1" d="M526.5 130.1s12.6-6.7 19.6-11.3"/>
|
||||||
|
<path fill="#00f" fill-rule="evenodd" stroke="#000" stroke-width="1.1" d="M515.7 201s17.3 4.8 19.3-20.1c-3.8-10.8-9-34-1-40.8-7.4-5-15.4.2-15.4.2-.5 1.1-7 10.5 1.8 26.8-21-5.5-12.4 14.3-12.4 14.3.8-3.1 12-6 14.7 9.8 1.1 4-7.5 10-7 9.8z"/>
|
||||||
|
<path fill="#00f" fill-rule="evenodd" stroke="#000" stroke-width="1.1" d="M535.1 181s18.4-9.8 17.9-32.9c-15.6.4-21.1 20.5-21.1 20.5l3.3 12.4z"/>
|
||||||
|
<path fill="#fff" fill-rule="evenodd" stroke="#000" stroke-width="1.1" d="M453 179.9s-13.6 11.8-21.3 8c-5.7 3.4-12.4-2.6-12.4-2.6s7.8 29 36 8c-.5-6.4-2-13-2.3-13.4z"/>
|
||||||
|
<path fill="#00f" fill-rule="evenodd" stroke="#000" stroke-width="1.1" d="M431.5 187.4c1.2-6 6-9 9.7-3.3 5 1 10.2-19.8-7.9-16.3 5.1-27.2-10.1-37.3-10.1-37.3s-5.4 30-3 35.6c2.5 5.6-3.5-10.3-23-14.7-.3 22.8 21.7 33.4 21.7 33.4s6.3 5.7 12.6 2.6z"/>
|
||||||
|
<path fill="none" stroke="#000" stroke-width="1.1" d="M433.3 167.6s-8.5 7.2-6.5 17m-6.4-18s-2 7 2.3 17m-3.6 2.4s4-6.4 12.4 1.8"/>
|
||||||
|
<path fill="#fff" fill-rule="evenodd" stroke="#000" stroke-width="1.1" d="M420.7 141.8c0-.2-12.9 0-5.2 13-5.7 1.8-18.5-6.5-9.7-17.6-29-.7-40.7-14.6-40.7-27.4 8.5 8.9 28.8 5.3 36 10.7-8.8-8.2-7-19.5-7-19.5s24.7 7.4 29.1 29.3c-1.5 4.2-2.1 11.8-2.5 11.4z"/>
|
||||||
|
<path fill="none" stroke="#000" stroke-width="1.1" d="M400.9 119.9c4.7 4.9 17 6.3 23.2 11.7"/>
|
||||||
|
<path fill="#cccccd" fill-rule="evenodd" stroke="#ccc" stroke-width=".8" d="M406.5 134.2s10.2-1.3 13 2.3c-3.9 0-5.2-1-11 1.2 1.7-.9 1.2-2.3 2.1-2.3s-3.7-1.2-4.1-1.2z"/>
|
||||||
|
<path fill="#923f00" fill-rule="evenodd" stroke="#000" stroke-width="1.1" d="M457 54.8s5.6-4.9 11.7-.4c-2.7 8.1-12.6 5-12.6 5s.3 4.1-.7 6c2 1.6 3.6 6.5 3.6 6.5s10.2-2.5 12.3 2c3.9-.6 6.7 0 6.7 0s7.9-2 10.7-2c2.7 0 11.6 2.3 12.4 3.9.8 1.6 3.8 12.6 5.7 12.4 2-.1-4.7 2.7-6.5-.1-1.8-2.8-1.3 3.6-1.3 3.6s5.5 5.9 6.2 7.2c.6 1.3-3.4 12-.3 19.3-2.8.2-3 3-3 3-.1 3.3-4.2 4.2-4.2 4.2l-1-4.4-2.8 1.6 1.1-3.4s3.8-9.2 4.1-12.1c.4-3-3.4-8.2-6.3-8.2s-5.1 9.3-5.1 9.3-1.5 7-1 7.7l-2-2.3s-1.3 4.3-2.3 5.6c-1 1.3-3 1.8-3 1.8s-1.5-4.3-1-6c.4-1.6 8-8 7.3-12.5-.6-4.6 0-3.5-.2-3.6-.1-.2-3.9-3.5-4-5.3-.2-1.8-5 2.3-11.2 1-1.9 3.3-2 11.6-2 11.6s-.8 10 .6 11.2c1.3 1.1-3.3 3.6-3.3 3.6l-3.3 4.4-1.1-2.6-2.3 1.6 1.3-3.3c0-2.4 3.2-9.2 3.2-15s.4-11.8.4-11.8-6-.3-6 5.9c.3 6.2-1.4 6.5-1 8.3.3 1.8 2 6.9 1.4 8.4-.5 1.4-2.4 2-2.4 2l-.5.8s-6 2.7-6 3.9c.2 1.1 0-3.3 0-3.3l-.4-4.7s3.6-2.3 3.6-8c0-5.8-.8-6.6-.7-8 .2-1.2 1-6 .9-6.5-.2-.4-3.5 1.4-4.5 1.4s1.8-3.5 2.2-6c.3-2.4-3.3 2.4-6.3-.4 1.4-3 3.5-4 3.8-6.2s-2.3 2-4.6.3c.2-2.2 2.5-4.1 2.5-4.1s-1.9-.2-2.6 0c-1.5-.5 1.6-2.8 1.8-6 .1-3.3-1.8-4.6-1.8-4.8 0-.2-3.3-3-3.8-4.1-.5-1.1-.5-2.5-.5-2.5s-5.4 4-11.8-4.4c5.9-5 12.1-1.3 12.1-1.3s1.7-4.6 9.2-4.2c7.5.3 9 4.5 8.7 4z"/>
|
||||||
|
<path fill="#00f" fill-rule="evenodd" stroke="#000" stroke-width="1.1" d="M498.3 139.5s13.8.4 14 7.8c.1 7.3-4.2 5.4-4.4 5.4l-10-1.2.3-12z"/>
|
||||||
|
<path fill="#fffeff" fill-rule="evenodd" stroke="#000" stroke-width="1.1" d="M484.9 137.5s17.2-.2 16.2 7.3-5.3 6-5.3 6l-8.3-.7-2.6-12.6z"/>
|
||||||
|
<path fill="#00f" fill-rule="evenodd" stroke="#000" stroke-width="1.1" d="M475.2 136.6l10 .9s6 .8 5.7 6.5c-.3 5.7-6.1 5.9-6.1 5.9l-9.7-.6.1-12.7z"/>
|
||||||
|
<path fill="#fff" fill-rule="evenodd" stroke="#000" stroke-width="1.1" d="M451.9 139.5c-.1 0-13.9.4-14 7.8-.2 7.3 4.2 5.4 4.3 5.4l10.1-1.2-.4-12z"/>
|
||||||
|
<path fill="#00f" fill-rule="evenodd" stroke="#000" stroke-width="1.1" d="M465.3 137.5s-17.2-.2-16.3 7.3c1 7.5 5.4 6 5.4 6l8.3-.7 2.6-12.6z"/>
|
||||||
|
<path fill="#fff" fill-rule="evenodd" stroke="#000" stroke-width="1.1" d="M475 136.6l-10 .9s-6 .8-5.7 6.5c.2 5.7 6.1 5.9 6.1 5.9l9.7-.6-.2-12.7z"/>
|
||||||
|
<path fill="#5e0043" fill-rule="evenodd" stroke="#000" stroke-width="1.1" d="M501.6 219.4s7.1-10.6 10.2-9.4c2.6.9.6 9-.7 9.8l-9.5-.4zm-49 1.9c-2.3-3.2-5.6-11.8-8.6-9.4-2.6.8-.6 9 .6 9.8l8-.4z"/>
|
||||||
|
<path fill="none" stroke="#000" stroke-width="1.1" d="M457.3 200.4s14 8.6 18.5 8.8c4.6.3 19-11.1 19-11.1"/>
|
||||||
|
<path fill="#5e0043" fill-rule="evenodd" stroke="#000" stroke-width="1.1" d="M458.6 166.8l2.7-3.4 13.4 6.8 13.6-6 2.7 2.8-15.2 10.7-17.2-11z"/>
|
||||||
|
<path fill="#474747" fill-rule="evenodd" stroke="#474747" stroke-linejoin="round" stroke-width="1.1" d="M448 166.6c1 1.3 9.7 11.9 11.3 20.6 1.6 8.7-.9-12-.9-12s10.7 5.3 11 8.6c.4 3.4 5.2-.2 5.4-.8l-31-20.1 4.2 3.7zm52.9-.6s-11.3 14.8-10 31c-2.3-7.8-.4-20.6-.4-20.6l-2.4 1.6s-2.6 11-5.8 12.6c-.6-1.3-.5-1.8-.5-1.8s-3.4 4.5-4.1 5c-.7.4.2 15 .2 15s1.2 10.6 2.5 10.5a45 45 0 0 0-3.4 1.9l-1.4-28.3 3.2-3.2s4.3-5.1 4.6-10.1c-1.9 1.5-4 2-4 2s-.5 7.1-2.1 8.1c-1.7 1-1.8 2.9-1.8 2.9l-.4-9.3L501 166z"/>
|
||||||
|
<path fill="none" stroke="#000" stroke-linecap="round" stroke-width="1.1" d="M475.1 183.1l2.2 44.6"/>
|
||||||
|
<path fill="none" stroke="#000" stroke-width="1.1" d="M447.7 204.4s5.1 3 7 12.2c16.7-1.2 22 4.7 22 4.7s13.7-6.6 20-5.4c2.3-4.7 8.7-10.7 8.7-10.7"/>
|
||||||
|
<path fill="#b4b6b9" fill-rule="evenodd" stroke="#000" stroke-width="1.1" d="M440.7 160.7l34.4 22.6 31-21s6.5-3.5 6-6-2.8-1.6-4-1.2c-1 .5-32.4 22.7-32.4 22.7l-33.4-21s-2.4-.9-2.9.7 1 2.4 1.3 3.2z"/>
|
||||||
|
<path fill="#474747" fill-rule="evenodd" stroke="#474747" stroke-linejoin="round" stroke-width="1.1" d="M502.3 154.9s-8.8-3.8-8.8-.5c0 3.2.2 3.5 1.6 5.6 1.4 2.1-1 3.4-1 3.4l-.9-2.3c-.5-1.4-5.2-2.4-5.6-4-.4-1.7 1-4.4-1.9-4.7a5.2 5.2 0 0 0-6.1 4.4 67.5 67.5 0 0 1-4.2 10.8l.5-17.2c6.2.4 17.7 1.8 26.6 2.8-2.7-.4 1 .2.9 1-.3.8-1.2 1-1.1.7zm-31.2-4.4c-1.6 0-9.5 1-11.5 2.1-2 1.2 3.3 3 2.6 4.6-.7 1.6-.7 4.7-3.2 4-2.5-.6-11-4.7-11.2-6.2-.2-1.4-2-1.5-2-1.5s24.1-3.2 25.3-3z"/>
|
||||||
|
<path fill="none" stroke="#000" stroke-width="1.1" d="M474.9 148.6v21.1m-16.3-46l-9.8 16.1"/>
|
||||||
|
<path fill="url(#f)" fill-rule="evenodd" stroke="#000" stroke-width="1pt" d="M161.8 129.7s4.9 6.7 4.3 8.6a25 25 0 0 1 4.3 7.8" transform="matrix(.86 0 0 .86 337.3 11.7)"/>
|
||||||
|
<path fill="none" stroke="#000" stroke-width="1.1" d="M492.7 122.3s-9.1 12.8-8.8 13.8"/>
|
||||||
|
<path fill-rule="evenodd" d="M446.2 61.4c-.2.7-1.4 1-2.6.7s-2-1.3-1.8-2c.2-.8 1.3-1 2.6-.7s2 1.3 1.8 2zm3.7-.2c.2.7 1.4 1 2.6.6s2-1.3 1.8-2c-.2-.7-1.4-1-2.6-.6s-2 1.3-1.8 2z"/>
|
||||||
|
<path fill="#ff7000" fill-rule="evenodd" stroke="#000" stroke-linejoin="round" stroke-width="1.1" d="M556.1 326.6s-3.3.6-3.2 1-9.8.5-10 .2c-.2-.3-1.5 1.7-1.5 1.7l1.6-1s2.4 2.6 3.1 2.4c.8-.2-.3 1 0 1.1.1.2.9-.4.9-.4l16.3-.3-7.2-4.7zm6.1 5.1l-13.3.4s-3.4 3-3.6 3.7 2.2 1 2.2 1l.7 2.5 1.7-.6s11.4 1.7 21.8-.6c5.3-1.9 6.2-4.1 2.5-5.5-3.7-1.3-11.9-.9-12-1z"/>
|
||||||
|
<path fill="url(#g)" fill-rule="evenodd" stroke="#000" stroke-width="1pt" d="M208.4 404l28-1.3-5.3-4.4 75.7-3-2.6-6-84.7 3.3 10.2 4.8-23 .6.8 2.4-6-.2s6.6 2.6 6.9 3.7z" transform="matrix(.86 0 0 .86 337.3 11.7)"/>
|
||||||
|
<path fill="url(#h)" fill-rule="evenodd" stroke="#000" stroke-width="1pt" d="M239.7 249.4c-2.2-1-12-2.4-22.8 4.7l.4 25s16-8.6 23.8-6.6c-.5-7.8-.5-17.8-1.4-23z" transform="matrix(.86 0 0 .86 337.3 11.7)"/>
|
||||||
|
<path fill="none" stroke="#000" stroke-width="1.1" d="M410.4 291.8L353.7 348m82-56l-46 60.7m44-76.5l-61.5 74.5m-1.8-1l6-7m69-29l-23.9 32.8m-1 4.3l.6 12.6m35.2-38.2L431 356.9m20.7-2.5l10.3-16.8m-6.3-3.3l-12.4 14M452 321l-8.5 10.3m-2.4-25.3s-25.7 37.6-25.3 40.7m22.6-45.6c-.6.4-22.2 29-22.2 29m-1.2 9l-4 4.8m-4.9 7.2l-6 7.8"/>
|
||||||
|
<path fill="#8a9396" fill-rule="evenodd" stroke="#2b2b2b" stroke-width="1.1" d="M407.6 205.2s-1.7 5.5 0 8.2 12.7 24.9 12.7 24.9 7.5-9.2 10.2-9.5c2.7-.2 1.5 23.9 1.5 23.9s-4.5 4.2-7.2 4c-2.7-.3 6.7 9.4 6.5 17.6s-12.5 49-17 49.7c-4.4.8 2-7.4 1.8-9.7-.3-2.2-1.5-.7-2.5-3.2s1.5-6.2 1-8.7-2.8-2-3-3.7 1.5-2.3 1.2-4.2c-.2-2-3-1.5-2.7-3.3s.5-1 .3-4.2c-.3-3.2-.8 2.2-3.5 2.5-2.8.2-5 6.4-5 6.4s-5.5 7.7-11 4.3c3.3 7 .8 10-.4 10.2s1 5.4-2 5.7 2.2 11.7-1.3 12.7c3.8 1.7.8 4 .8 4s-8.6.7-6.7 11.9c-25.4-9-37.8-24.4-37.6-40 .3-15.7 5.3-29.9 17.4-35 3.5-13 9.5-27 9.5-27s-1-5.7-.3-9.4c.8-3.7 4.3-7.4 4.3-7.4s-.5-9-.3-13.5c.3-4.4 2-6.4 2.2-9 .3-2.4-.7-15 1.8-17.3 2.5-2.3 7.2-2 9.7-3.5 2.5-1.5 5.7-4.2 9-4s6 2.5 6 2.5 12 0 12.8 4.7c.8 4.8-2.5 6.5-2.5 6.5s1.8 6.7-5.7 13z"/>
|
||||||
|
<path fill="#cecfcf" fill-rule="evenodd" stroke="#2b2b2b" stroke-width="1.1" d="M396.9 188.1c.4.7-.5 2-2 2.8s-3 .8-3.4.1c-.4-.7.5-2 2-2.8s3-.8 3.4-.1z"/>
|
||||||
|
<path fill-rule="evenodd" d="M394.8 189.3c0 .5-.4.9-1 .9-.4 0-.9-.4-.9-.8 0-.5.5-.9 1-.9s.9.4.9.9z"/>
|
||||||
|
<path fill="none" stroke="#2b2b2b" stroke-width=".5" d="M413 197.5s3 13.4-.7 22.8m1.5-28.7s6 7.8 5.2 17.4m-4.6-19.1c.2 0 5 4.1 4.8 7m-3.6-8.8s3.2 2.3 4 4.6"/>
|
||||||
|
<path fill="none" stroke="#000" stroke-width="1.1" d="M414 186.8s-11.5 18.8-10 30.6"/>
|
||||||
|
<path fill="none" stroke="#2b2b2b" stroke-width=".5" d="M414.8 186.2s-15.4 9.2-18.2 39"/>
|
||||||
|
<path fill="none" stroke="#000" stroke-width="1.1" d="M413.1 191.8l-6 4.5"/>
|
||||||
|
<path fill="none" stroke="#2b2b2b" stroke-width=".5" d="M390.9 226.9s8.5-35.5 23.7-40.7"/>
|
||||||
|
<path fill="#2b2b2b" fill-rule="evenodd" stroke="#2b2b2b" stroke-width="1.1" d="M420.5 238.9s8.2-10.3 10-9.9c2 .4 1.4 23.8 1.4 23.8s-6 4.5-7.4 4.3c-1.3-.2 6.8 11 6.6 15.2l-.3 4.2s0-2.5-2-6.5c-1.8-4-.7-8.5-13-18.6-3-6.2 6 3.8 8 2.3 1.8-1.5-3.5-14.6-3.3-14.8z"/>
|
||||||
|
<path fill="none" stroke="#2b2b2b" stroke-width="1.1" d="M406 181s-3.5 1-4 2.4c-.4 1.4-2.4 2.8-3.5 2.4a18.9 18.9 0 0 1-3.1-2.2"/>
|
||||||
|
<path fill="#2b2b2b" fill-rule="evenodd" stroke="#2b2b2b" stroke-linejoin="round" stroke-width="1.1" d="M386.5 193.1s-5.2 5.2-2.7 5.8c2.5.6 5.2-4 5.2-4s0 7.9 2.1 6.6l8.6-5.7s2.2-.2 2.7 0c.5.1 6 4.8 9.5 3-2 5.4-4.4 6-4.4 6s-3.7 4.9-8.6 3.8c-4.8-1.1-6-3.2-6-3.2s-4.1.3-5.3-1.5c-1.3-1.9-1.8-3-1.8-3s-2.3 2.4-3 1.3c-.6-1.1 0-7.5 3.7-9z"/>
|
||||||
|
<path fill="none" stroke="#2b2b2b" stroke-width="1.1" d="M415.7 186s-9.6-2.9-12.8 1.8c-3.3 4.7-2.5 7.3-.8 7.8"/>
|
||||||
|
<path fill-rule="evenodd" d="M417.1 185.7c0 1-.8 2-1.8 2s-1.8-1-1.8-2 .8-2 1.8-2 1.8.8 1.8 2z"/>
|
||||||
|
<path fill="#2b2b2b" fill-rule="evenodd" stroke="#2b2b2b" stroke-width="1.1" d="M389.4 210s3.9 6 8.5 7.6-3.2 3-7.8 0c-3.4-4.6-2.5-8-2.5-8s1-.8 1.8.4zm33.3 35.2s-11-15.1-14.1-16c-3.1-.8 2.4-1.5 5.7 1.8 3.4 3.2-.9-5.3-.9-5.3l9.3 19.5z"/>
|
||||||
|
<path fill="#2b2b2b" fill-rule="evenodd" stroke="#2b2b2b" stroke-linejoin="round" stroke-width="1.1" d="M388.4 332.8c4.2-1 22.4 10.5 26.5 13.4 4 3 12.7 1 12.7 1s-4 2.5-6.5 3 7.4.7 7.4.7-23.3 6.4-47-6.1c-2.2-9.7 5-11.9 6.9-12z"/>
|
||||||
|
<path fill="#2b2b2b" fill-rule="evenodd" stroke="#2b2b2b" stroke-width="1.1" d="M415 249s-3-.6-4.6-2.4c-1.6-1.8-3.8-6.2-6.1-8.1s-14-8.2-18.1-7.8c-4.2.5-5.5-.4-6-1-.5-.5-2.2.3-2 2.5.4 2.1-3.1 6.9-1.9 9.1a63.5 63.5 0 0 0 8.5 11.7c1.2.3.4 5.3.4 5.3s5.3 5.4 6.7 5.7c1.3.3 2.7 1.2 2.5 2.5-.1 1.3-5.8 8.2-5.8 8.2s-6.1 3.2-6.2 5c0 1.8 1.5 5.6 6.3 6.8a45 45 0 0 0 18.6-1c.7-1 1.8-7.8 1.3-8.4-.4-.7-3.7-2.7-5.3-2.4-1.6.3-3.1 1.6-3 1.9.2.3-2.3 1.6-2.3.4s4.8-6.6 5.3-6.2c.5.5 7.3 1.2 8.6 4.6s1.3 5.9 4.9 5.5c3.5-.3 8.5-3.6 9-10.5.4-6.9-4-11.5-5.2-12.2-1-.6-4.8-2.9-5.1-4-.3-1-1-4.4-.5-5.2z"/>
|
||||||
|
<path fill="#2b2b2b" fill-rule="evenodd" stroke="#2b2b2b" stroke-width="1.1" d="M350.4 279.3s11.6-3 14.6-3c3 .1 14.3 5.4 17.5 8.6 3.3 3.2 10 10.8 14.5 10.2 4.4-.7 5.6-1.6 5.6-1.6l-1.7 3.3s-3.6 1-5.4.5a19 19 0 0 1-8.8-5c-3.5-3.4-14.3-12.7-23.5-12-9.2.6-14.5 9.7-14.5 9.7s0-4.4.5-5.4c.3-1-2 2-2 2l3.2-7.3z"/>
|
||||||
|
<path fill="#2b2b2b" fill-rule="evenodd" stroke="#2b2b2b" stroke-width="1.1" d="M393 288.3c.1 0 3 .8 7.8.8s7.3-2.1 7.3-2.1l-.3-1.9.7-2.6s3.7 3.7 3.6 4.5c0 .7-1.5 1-1.5 1l-.5-1.8-1.3 1.6s-7 5.5-10.7 4.7c-3.8-.8-7.4-3.3-6.4-3.9s1.5-.4 1.4-.4zm-16.8 9.7s-4.2 0-6 .9c-2 .9-2.6 2-3.9 1.8-1.2-.1-2.2-1.8-1.8-2.4.5-1 3-2.4 7.7-2s4 1.7 4 1.7zm14.6 11.4c0-.2-.3-6.1-2.6-8.5a7 7 0 0 0-6.4-2.1c-1.3.3 4.7 2.9 5.3 4.6.6 1.7 2.5 6.5 2 7.7-.5 1.2-1.5-3.3-5.2-4.6s-8.7-.6-7.6 1 5.1.2 7.2 3.7 3.7 7.2 3.7 7.2l.6-2.5 2-.5.1-4.9 1-1.1z"/>
|
||||||
|
<path fill="#2b2b2b" fill-rule="evenodd" stroke="#2b2b2b" stroke-linejoin="round" stroke-width="1.1" d="M387.8 328.5l-3.8-7.6s-1.2-4.9-4.4-6.2c-3.2-1.4-7.5-1.1-7.5.5-.1 1.7 6.8 3.7 7.3 4.6.5 1 .2 2.4-.4 2.5-.6 0-3.6-1.1-5.2-.7-1.6.3-2.5 2.4-4.8 1.8-2.3-.6-4.2-8-3.4-8.8 1-.7-1.7 1.4-2.2-.6-.5-2 .8-8-.1-8.7s-5.3-3.4-5.3-4c-.1-.4.2-29.6 24.6-5.4-10.5-12.4-14.6-11-16.5-11.2-1.4 0-10.9.9-13.3 13-2.4 12-5.2 4.5-5.2 4.5s-.5 5.2 2 6.7-1.2 5.9-1.2 5.9-4.6-11.2-3.9-16c-.9 3.9-.8 13.5 5 24a78 78 0 0 0 29.9 21.1c8.9-13.6 8.4-15.2 8.4-15.4z"/>
|
||||||
|
<path fill="#8a9396" fill-rule="evenodd" stroke="#2b2b2b" stroke-linejoin="round" stroke-width="1.1" d="M371.9 328.6s4.9.6 6.2 3.1a24 24 0 0 1 2 6.4c.8-1.6 1.2-3 2.8-4.2s2.8-1.4 2.8-2.2c-.1-1-5.3-6.4-7.9-6.7-2.6-.3-7.1 2.8-7.1 2.8s-.9 1.2 1.2.8z"/>
|
||||||
|
<path fill="none" stroke="#8a9396" stroke-linecap="round" stroke-width="1.1" d="M383.1 341.4s12.8 5.9 33.8 6.2"/>
|
||||||
|
<path fill="none" stroke="#2b2b2b" stroke-linecap="round" stroke-width="1.1" d="M425.8 282.1s-1.1 10.7-9.4 32"/>
|
||||||
|
<path fill="none" stroke="#2b2b2b" stroke-width="1.1" d="M424.1 288.7s-2.5 7.7-9.3 13.5"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 34 KiB |
9
public/img/flags/gy.svg
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icon-css-gy" viewBox="0 0 640 480">
|
||||||
|
<g fill-rule="evenodd">
|
||||||
|
<path fill="#399408" d="M2.4 0H640v480H2.4z"/>
|
||||||
|
<path fill="#fff" d="M.2 0c-.9 0 619.6 241.5 619.6 241.5L0 479.8.2 0z"/>
|
||||||
|
<path fill="#ffde08" d="M.3 20.2c3.4 0 559 217.9 555.9 220L1.9 463.2.3 20.3z"/>
|
||||||
|
<path d="M1.9.8c1.8 0 290.9 240.9 290.9 240.9L1.8 477V.8z"/>
|
||||||
|
<path fill="#de2110" d="M.3 33.9c1.6-15 260.9 208.4 260.9 208.4L.2 451.7V33.9z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 488 B |
9
public/img/flags/hm.svg
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icon-css-hm" viewBox="0 0 640 480">
|
||||||
|
<g stroke-width="1pt">
|
||||||
|
<path fill="#006" d="M0 0h640v480H0z"/>
|
||||||
|
<path fill="#fff" d="M0 0v30.6l372.6 243h46.9V243L46.9 0H0zm419.5 0v30.6l-372.6 243H0V243L372.6 0h46.9z"/>
|
||||||
|
<path fill="#fff" d="M174.8 0v273.6h69.9V0h-70zM0 91.2v91.2h419.5V91.2H0z"/>
|
||||||
|
<path fill="#c00" d="M0 109.4v54.8h419.5v-54.8H0zM188.8 0v273.6h42V0h-42zM0 273.6l139.8-91.2h31.3L31.3 273.6H0zM0 0l139.8 91.2h-31.2L0 20.4V0zm248.4 91.2L388.2 0h31.3L279.6 91.2h-31.2zm171 182.4l-139.7-91.2h31.2l108.6 70.8v20.4z"/>
|
||||||
|
<path fill="#fff" fill-rule="evenodd" d="M125.5 416.5L98 414l23.8-14-15.3-23 25.8 9.7 8.4-26.3 8.5 26.3L175 377l-15.3 23 23.7 14-27.5 2.5 3.8 27.3-19-20-19 20m370.5 1.9l-19.4-1.7 16.7-10-10.7-16 18.1 6.8 6-18.5 6 18.5 18-6.9-10.7 16.2L533 444l-19.3 1.7 2.7 19.2-13.4-14-13.4 14m2.7-307l-19.4-1.7 16.7-9.9-10.7-16.2 18.1 7 6-18.6 6 18.5 18-6.9-10.7 16.2 16.7 10-19.3 1.6 2.7 19.2-13.4-14-13.4 14m-105.2 97.7l-19.4-1.7 16.7-9.9-10.8-16.1 18.2 6.8 6-18.5 5.9 18.5 18.2-6.8-10.8 16.1 16.7 10-19.3 1.6 2.6 19.3L395 280l-13.4 14M588 246l-19.4-1.6 16.8-10-10.8-16.1 18.2 6.9 5.9-18.5 6 18.5 18-7-10.6 16.2 16.7 10-19.4 1.6 2.7 19.3-13.4-14.1-13.4 14M563 305.7l-9.5 8 3 12-10.6-6.5-10.5 6.6 3-12-9.6-8.1 12.4-1 4.7-11.4 4.7 11.5"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.3 KiB |
36
public/img/flags/ki.svg
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icon-css-ki" viewBox="0 0 640 480">
|
||||||
|
<defs>
|
||||||
|
<clipPath id="a">
|
||||||
|
<path fill-opacity=".7" d="M-86.3 0h682.6v512H-86.3z"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
<g clip-path="url(#a)" transform="translate(81) scale(.9375)">
|
||||||
|
<path fill="#e73e2d" fill-rule="evenodd" d="M-164.3 0h835.8v306.5h-835.8z"/>
|
||||||
|
<path fill="#fec74a" fill-rule="evenodd" stroke="#d8aa3f" stroke-width="1.7" d="M204.3 282.1c-19.4-15.2-55.6-10-61.6-51.3 27.7 21.5 22.7-1.2 64 19.3l-2.4 32z"/>
|
||||||
|
<path fill="#fec74a" fill-rule="evenodd" stroke="#d8aa3f" stroke-width="1.7" d="M209.5 263.4c-13.9-20.4-50-26.6-43-67.7 19.9 28.9 22 5.7 55.2 37.9l-12.2 29.8z"/>
|
||||||
|
<path fill="#fec74a" fill-rule="evenodd" stroke="#d8aa3f" stroke-width="1.7" d="M215.8 250c-5-24.1-36-43.6-13.8-79 7.2 34.4 18 13.8 36.4 56.2L215.8 250z"/>
|
||||||
|
<path fill="#fec74a" fill-rule="evenodd" stroke="#d8aa3f" stroke-width="1.7" d="M230.3 237.6c2.7-24.5-20.8-52.6 11.1-79.4-3.6 34.9 13 18.7 17.5 64.6l-28.6 14.8z"/>
|
||||||
|
<path fill="#fec74a" fill-rule="evenodd" stroke="#d8aa3f" stroke-width="1.7" d="M243.3 227.7c12.4-21.3 2.5-56.5 42.6-67.9-17.6 30.3 4.2 22.3-10.5 66l-32.1 1.9z"/>
|
||||||
|
<path fill="#fec74a" fill-rule="evenodd" stroke="#d8aa3f" stroke-width="1.7" d="M262 230.3c18.6-16.2 20.4-52.8 62-50.9-26.3 23.2-3 22.5-31 59.4l-31-8.5z"/>
|
||||||
|
<path fill="#fec74a" fill-rule="evenodd" stroke="#d8aa3f" stroke-width="1.7" d="M278.6 239.9c22.5-10.1 34.9-44.5 74.1-30.5-32 14.5-9.5 20.7-47 47.7l-27.1-17.2z"/>
|
||||||
|
<path fill="#fec74a" fill-rule="evenodd" stroke="#d8aa3f" stroke-width="1.7" d="M292.5 255c24.4-3.4 46-33 79.7-8.4-34.7 4.9-15 17.1-58.5 32.5l-21.2-24.2z"/>
|
||||||
|
<path fill="#fec74a" fill-rule="evenodd" stroke="#d8aa3f" stroke-width="1.7" d="M379.5 259.6l-112.1 2.5 4.7 30.2 107.4-32.7z"/>
|
||||||
|
<path fill="#fec74a" fill-rule="evenodd" stroke="#d8aa3f" stroke-width="1.7" d="M363 218.4l-103.8 39.9 17.3 33.3 86.5-73.2z"/>
|
||||||
|
<path fill="#fec74a" fill-rule="evenodd" stroke="#d8aa3f" stroke-width="1.7" d="M280.6 280.7l53.7-97.6-82.4 76.7 28.7 20.9z"/>
|
||||||
|
<path fill="#fec74a" fill-rule="evenodd" stroke="#d8aa3f" stroke-width="1.7" d="M279.5 272.6l17.2-109.4-53.8 97.2 36.6 12.2z"/>
|
||||||
|
<path fill="#fec74a" fill-rule="evenodd" stroke="#d8aa3f" stroke-width="1.7" d="M273 263.7l-18-110.2-20 110.7 38-.5z"/>
|
||||||
|
<path fill="#fec74a" fill-rule="evenodd" stroke="#d8aa3f" stroke-width="1.7" d="M263.7 254.3l-52.3-92 20 111.8 32.3-19.8z"/>
|
||||||
|
<path fill="#fec74a" fill-rule="evenodd" stroke="#d8aa3f" stroke-width="1.7" d="M255.6 253.6l-81.1-68.5 57.6 98 23.5-29.5z"/>
|
||||||
|
<path fill="#fec74a" fill-rule="evenodd" stroke="#d8aa3f" stroke-width="1.7" d="M146 218.9l87 71.9 13.4-37.6L146 218.9z"/>
|
||||||
|
<path fill="#fec74a" fill-rule="evenodd" stroke="#d8aa3f" stroke-width="1.7" d="M232.1 260.9l-102.3-1.5 101.9 34 .4-32.5z"/>
|
||||||
|
<path fill="#fec74a" fill-rule="evenodd" stroke="#d8aa3f" stroke-width="1.7" d="M315.1 279.2a61.4 61.4 0 1 1-122.7 0 61.4 61.4 0 0 1 122.7 0z"/>
|
||||||
|
<path fill="#005989" fill-rule="evenodd" d="M-165.1 303.4h839.9V512h-840z"/>
|
||||||
|
<path fill="#fff" fill-rule="evenodd" d="M-165.6 454c15.6 7.2 38 25.3 62 25.3 40-.3 41-27.4 81.6-26.1 40.7 1 33.3 29.6 88.2 29.5 45.4-.2 60-34.7 99.2-30.6 29-1.5 40.8 32.7 85.3 33.2 46.2 1 63.1-37.3 92-34.1 31 0 41 30.8 84.3 31 55.2.3 64.9-32 99.3-30 24.6-.5 44 23.7 80 24.3 28.6.5 52.7-21.2 69-29l.7-36.8c-17 6.3-42.4 27.1-67.7 27.3-36.6 1.4-59.1-24-84.5-23.7-30.4.3-42.5 31.3-94 31.3-47.2 0-58-31.3-88.4-31.3-29.7.2-38.8 34-90.3 33.4-42-.5-58.3-32.3-88-32-31.5 0-64 30.9-99 29.4-48-2-58.5-29.4-90-29.4-23.5 0-49 25.6-77.3 26-28.2.5-59.9-25.5-62.8-26l.4 38.3zm0-73c15.6 7.3 38 25.4 62 25.4 40-.3 41-27.4 81.6-26.2 40.7 1 33.3 29.7 88.2 29.5 45.4 0 60-34.6 99.2-30.5 29-1.5 40.8 32.7 85.3 33.1 46.2 1 63.1-37.2 92-34 31 0 41 30.8 84.3 31 55.2.3 64.9-32 99.3-30 24.6-.5 44 23.7 80 24.3 28.6.5 52.7-21.2 69-29l.7-36.8c-17 6.3-42.4 27-67.7 27.3-36.6 1.3-59.1-24-84.5-23.7-30.4.3-42.5 31.3-94 31.3-47.2 0-58-31.3-88.4-31.3-29.7.2-38.8 34-90.3 33.4-42-.5-58.3-32.3-88-32-31.5 0-64 30.8-99 29.3-48-2-58.5-29.4-90-29.4-23.5 0-49 25.7-77.3 26.1-28.2.4-59.9-25.5-62.8-26l.4 38.3z"/>
|
||||||
|
<path fill="#fff" fill-rule="evenodd" d="M-165.6 309c15.6 7.2 38 25.2 61.9 25.2 40-.2 41-27.4 81.6-26.1 40.6 1 33.2 29.6 88.1 29.5 45.3-.1 60-34.7 99-30.5 29-1.5 40.8 32.7 85.3 33.1 46.1 1 63-37.3 92-34.1 30.8 0 41 30.8 84.2 31 55 .3 64.7-32 99.2-30 24.5-.5 43.9 23.7 79.8 24.3 28.7.5 52.7-21.2 69-29l.7-36.8c-17 6.4-42.3 27.1-67.7 27.3-36.4 1.4-59-23.9-84.4-23.7-30.3.3-42.4 31.3-94 31.3-47 0-57.8-31.3-88.2-31.3-29.7.3-38.8 34-90.1 33.4-42-.5-58.3-32.2-88-32-31.5 0-64 30.9-98.8 29.4-48.1-2-58.5-29.4-90-29.4-23.5 0-48.9 25.6-77.2 26-28.2.5-59.8-25.4-62.8-26l.4 38.3z"/>
|
||||||
|
<path fill="#ffc84b" fill-rule="evenodd" stroke="#d8aa3f" stroke-width="1.8" d="M136.8 76c61-4.2 50-9.4 74.5-13.4 31 4.3 34.5 23 51.8 34.5 0 0-6.5 22-27.7 18.9-2.9-8.8 10.2-11.6-27.5-34.6-22-1.3-61.3 3.9-71-5.4zm189.3 33.9l-44 1.8v10.9c29.7 1 35-3 44-12.7z"/>
|
||||||
|
<path fill="#ffc84b" fill-rule="evenodd" stroke="#d8aa3f" stroke-linejoin="round" stroke-width="1.7" d="M174.8 108c7.7-3.9 11.5-2.3 18.2-2.5 4.5 8.3 8.8 9 18.8 10a49.5 49.5 0 0 0 39.9 21.8c29.9-.8 39.4-21.7 59.5-24h21.2c-3.5-6-6.3-9.5-14-9.9-15.8-.8-36.2-.4-54 3.6l-25.1 6.3c-7.4-3.6-25.3-22.4-36.8-22-6.7 1.8-6.7 4.1-10 6.7-6.5 2.8-13 1.4-17.7 10z"/>
|
||||||
|
<path fill="#ffc84b" fill-rule="evenodd" stroke="#d8aa3f" stroke-width="1.7" d="M205.1 99a3.2 3.2 0 1 1-6.3 0 3.2 3.2 0 0 1 6.3 0z"/>
|
||||||
|
<path fill="#ffc84b" fill-rule="evenodd" stroke="#d8aa3f" stroke-width="1.8" d="M225.6 107.8c44.9-54.1 84.1-47.5 135.3-51.2 1.7 6.3 1 15.7-23.3 24-33.4 5-93.1 40.2-93.4 40.2-11.1-.6-18.9-12.2-18.6-13z"/>
|
||||||
|
<path fill="none" stroke="#d9a43e" stroke-linecap="round" stroke-width="1.8" d="M317.9 72.5L351 74m-36.7 4l24.1 2"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 5.7 KiB |
7
public/img/flags/mf.svg
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icon-css-mf" viewBox="0 0 640 480">
|
||||||
|
<g fill-rule="evenodd" stroke-width="1pt">
|
||||||
|
<path fill="#fff" d="M0 0h640v480H0z"/>
|
||||||
|
<path fill="#00267f" d="M0 0h213.3v480H0z"/>
|
||||||
|
<path fill="#f31830" d="M426.7 0H640v480H426.7z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 292 B |
7
public/img/flags/nc.svg
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icon-css-nc" viewBox="0 0 640 480">
|
||||||
|
<g fill-rule="evenodd" stroke-width="1pt">
|
||||||
|
<path fill="#fff" d="M0 0h640v480H0z"/>
|
||||||
|
<path fill="#00267f" d="M0 0h213.3v480H0z"/>
|
||||||
|
<path fill="#f31830" d="M426.7 0H640v480H426.7z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 292 B |
7
public/img/flags/pm.svg
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icon-css-pm" viewBox="0 0 640 480">
|
||||||
|
<g fill-rule="evenodd" stroke-width="1pt">
|
||||||
|
<path fill="#fff" d="M0 0h640v480H0z"/>
|
||||||
|
<path fill="#00267f" d="M0 0h213.3v480H0z"/>
|
||||||
|
<path fill="#f31830" d="M426.7 0H640v480H426.7z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 292 B |
7
public/img/flags/re.svg
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icon-css-re" viewBox="0 0 640 480">
|
||||||
|
<g fill-rule="evenodd" stroke-width="1pt">
|
||||||
|
<path fill="#fff" d="M0 0h640v480H0z"/>
|
||||||
|
<path fill="#00267f" d="M0 0h213.3v480H0z"/>
|
||||||
|
<path fill="#f31830" d="M426.7 0H640v480H426.7z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 292 B |
74
public/img/flags/sh.svg
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icon-css-sh" viewBox="0 0 640 480">
|
||||||
|
<path fill="#006" d="M640 480V0H0v480h640z"/>
|
||||||
|
<path fill="#fff" d="M0 73.3h76L0 26.8V0h43.5l106.4 64.8V0h59.9v64.8L316 0h44v26.8l-76.4 46.5H360v73.4h-76.4l76.4 46.6V220h-44l-106.4-64.7V220H150v-64.7L43.4 220H0v-26.7l76-46.6H0V73.3z"/>
|
||||||
|
<path fill="#ce1126" d="M331.7 0L211.5 73.4h28.8L360 0h-28.3zM360 220l-119.8-73.3H269l90.9 55.9V220zM120.4 73.4L0 0v17.5l91.4 55.9h29zm-.3 73.3L0 220h28.7L149 146.7h-29z"/>
|
||||||
|
<path fill="#ce1126" d="M0 88.6h162.6V0h35.2v88.6H360v43H197.8V220h-35.2v-88.5H0v-43z"/>
|
||||||
|
<path fill="#8fc5ff" stroke="#fff" stroke-width="1.1" d="M399.7 640.8c0 16.3-2.6 33.9-23.8 42.3-21.1-8.4-23.7-26-23.8-42.3h47.6z" transform="matrix(4.4862 0 0 4.4867 -1190.9 -2609)"/>
|
||||||
|
<path fill="#366cc9" stroke="#000" stroke-width="1.1" d="M375.9 683a34.3 34.3 0 0 0 18.8-16h-2c-.6-.1-20.3-2-22.7-3-2-.7-9.8.7-13.4 2a34 34 0 0 0 19.3 17z" transform="matrix(4.4862 0 0 4.4867 -1190.9 -2609)"/>
|
||||||
|
<path fill="#5d3100" stroke="#000" stroke-width=".1" d="M361.1 673h1.2c.3 0 .3 0 .4-.3s.4-.2.6-.1.6 0 .8-.2c.2-.2.2-.2.4 0s.3.1.5 0c.1 0 .5-.2.6-.5s.4-.4.5-.2.3.2.5.2.2.1.2.4c0 .2 0 .3.5-.1.4.4.5.2.5-.2s0-2-.2-2.1-.3-.8-.4-1.3c0-1 0-1-1-1.5 0-.3-.2-.4-1-.4.1-.1 0-.4-.2-.5s-.2-.2 0-.6c.2 0 .6 0 .7-.3.2-.2.8-.2 1.2 0s.8.2 1.5 0l1.2-.6c.5-.3.6-.4.6-.8 0-1-.3-2-.5-2.5-.3-.5-.3-1-.7-1.9-.4-.8-.4-1-.8-1.5-.2-.2-.3-.3-.3-.6a1.5 1.5 0 0 0-.5-1c-.8-.7-1-3-1.4-4.7-.2-1 0-3.3-.4-3.7-.7-.5-1-.4-1.5-.6-.4-.5-.5-1.4-.9-2.3-.5.1-.8.6-1.1.8s-.4.2-.4.7c0 .4-.3 1-.7 1.8s-1.3.5-2 1.6c-1.4-1.7-1.4-2.2-1.5-2.7 0-.5-.3-.6-1.1-1.3v-1.5c-.7-.5-1.1-.4-1.4 0-.3.3-.5.8-1 1-.2.4-1 1.2-1.6 2.3.6 9 2.6 18 8.7 25.2z" transform="matrix(4.4862 0 0 4.4867 -1190.9 -2609)"/>
|
||||||
|
<path fill="#ff0" stroke="#fff" stroke-width="1.1" d="M399.7 640.8c0-6.2-.3-12.2-.2-17.4a63.6 63.6 0 0 0-23.6-4.3c-5.3 0-15.7.8-23.6 4.3.2 5.2-.2 11.2-.2 17.4h47.6z" transform="matrix(4.4862 0 0 4.4867 -1190.9 -2609)"/>
|
||||||
|
<path fill="#cf6200" d="M394.6 297.9c1.2 1.9 3.3 5 3.5 6.8.8-1.7 1.5-2.4 1.6-3.5s1.5-3 1-4.2-.8-2 .4-1.2c1.3.9 1 2.3.8 4.4-.8 5.7-3.1 6.8-3.5 10.7 3.4 8 .9 11 4.6 19 .6.3 2.1-.3 2.6-.2 2-1.4 3.5-1 6.3-.3 2.8.5 4.3 2.5 4.3 4.3s0 2.2.6 3.2 1.7 2.7 1.5 3.9c-.3 1.2.2 1.9.6 2.4s-.2 2-.5 2.7-.2 1.9 1.2 3.6c1.4 1.8 4.6 9.1 4.6 13.4 0 4.4.3 6.4 2 7.2 1.8.8 2.3 1.5 2.1 3.3s.8 11.6 1 13.1.9 1.2 1.6 2c.7.8 1.1 1.7 3.5 1.7s4.6-.3 6 0c2.2 2.9 3.5 6.8 4 9.3s.4 5.8 1.2 5.8 1.6 0 1.4-3-.5-3.4-1.5-5c-1.1-1.5-1.7-2.2-1.1-3.1s.7-2.4.5-3.6-.6-3 1.4-.6l3.1 3.7c.6.7.8 2.4.7 3.8-.1 1.4.1 2 1 1.2.8-.7 1.8.5 1.3 2s.2 2.5 1.6 3 2 .8 2.3 1.8 1.5 1.5 1.5-.6c0-2-.8-6.5-1.4-7.9-.6-1.4-1-4.4-1.2-6.2s-.4-2.2-1.2-2.5-1.6-1-1.7-1.8-.8-1.1-1.3-1.1-1-.4-1.3-1-.6-.6-1.2-.7-1.5.3-1.8-.6-.7-2.3-1.3-3-1-1-1.1-3.7c0-2.6-.1-3-1-3.9s-2.2-3.4-2.8-4.4c-.5-1-1.1-2.1-1.1.1s0 3.4 1.4 4.2c1.4.8 1.7.8 1.1 2s0 2 .3 2.8.7 1.6 0 2.4c-.7.8-1.4.6-1.3-.7a7.3 7.3 0 0 0-1-3.8c-.5-1-1-1.8-1.7-1.2s-1.3-.1-.8-.6.3-.8 0-1.1-.5-.7.1-1.4.6-1 .2-2.7c-.3-1.6-2.9-9.8-4-11.7s-1-3.2.4-1.4 2.8 3.5 3 5c0 1.6.4 2.5.9 3s.8.4 1-.9 1.2-.8-.4-3.2c-1.7-2.5-4.7-6.6-5.9-14s-1.6-12.1-2.8-14.1c-1.1-2-1.5-2.5-1.6-4.3s0-3.8-.8-5.2c-.8-1.4-1.4-1.6-1.5.5-.1 2 0 6.8.7 7.6s.2 2.9 0 4-1.9 2.4 2 4.7c1.5 1 1.2 2.2 1 3-.2.9-.5.8-1.3-.5s-1.6-2.4-2.4-3-1-1.2-.8-2.9.4-2.8 0-3.3c-.5-.6-.7-.2-1 .8-.2.9-.4 3.5-1 4.2s-.6.2-1-1.3.2-3.9 1-6.5 1.3-5.5.6-9c-.7-3.5-.4-4.6-3-7.5-2.7-2.9-5.8-5.7-7-9.3-1.3-3.6-1.6-6.8-3-8.4a19.4 19.4 0 0 0-4.6-4.3v-5.4c0-1.3-.6-2-2.1-1.8s-2.5 1.5-3.4 3.2c-1 1.8-1.6 1-3 4s-3 4.5-3 7.8z"/>
|
||||||
|
<path fill="#cf6200" d="M403 332c1 .7 1.9 1 3.3.3s3-2.7 5-.7c1.8 2 2.8 5.3 2.8 7.8 0 2.6 0 7.4 3 10 2.9 2.7 4.4 5.5 4.5 9a61 61 0 0 0 1.7 10.3c.4 1.4 1.2 3 2.1 4s1.7 3.6 1.8 6.4c.1 2.8-.4 4.7 0 6.1s0 2.6-1 2-1.3-1.1-2-2.3-1.2-1-.6.8 2.3 3.4 3.8 3.4 2 .2 3 1.2c.9.9 1 1.4 2.6 1.4s1.9 0 3.4.4 1.5.3 2.3 0 1.7.5 2.2 2 2 5.7 2 6.9 0 2.3.8 3.5.6 2.3-.3 1.6-1-.5-1.6-.3-1.2-.3-2.1-.9c-1-.5-.4-.4-1.3-1.8s-1.5-1.9-1.5-.8-.2 2.3-.9 1.7-1-.6-1.6 0-.8 1-1.5-.1-1.5-1.2-2.2-1.4-.7-.2-1-1.3c-.4-1-1.5-1.3-2.4-1.3s-1.4-.4-1.5-1.1c-.1-.7-.7-1.2-1.2-1.5s-.2-1.2-.3-2-.8-.5-1.3-.7-.8-.1-.8-1.3-.5-1.5-.8-2.3c-.4-.9 0-1.7.2-2.6.2-1 .1-1.5-.6-2.3-.7-.8-.1-1.7-2-3.3s-2.8-.2-3.4-4c-.5-4-1.7-11.9-2.8-13.1s-1.7-2.3-2.8-2.6-1.7-.1-1.8-2.3c-.1-2.2-.8-5-2.2-6.4l-2.7-2.5c-.7-.5-1-1.6 0-3.6s.6-4.7.5-6c-.2-1.2-.5-2.9-.3-4.3s.1-3.1-.2-4-.8-1.2-.2-2zm28.1-33a25.4 25.4 0 0 1-5.4 5.2c-2.2 1.6-5 2.8-3.4 5.4 1.5 2.7 2.8 3 3 5 .4 2 .9 3.8 2.4 4.2 1.6.5 2.2.2 2.2 3.4s0 4.6 1.4 5.8 1.2 2.5 1.8 5.4c.7 3 .7 9.4 2.5 13.7s6.1 12.6 5.6 14.3-1 3 .8 5c1.9 2 3.1 5 3.3 6.7.1 1.7.4 2.3 2.3 1.7a6.8 6.8 0 0 0 3.4-2c.6-.8 1.9-.6 3.6.3 1.7 1 4.4 1.8 6 1 1.5-1 2.2-2.4 3.6-2.4 2.2-1.6 3-4.8 3.5-5.8.4-.9.1-.9-.8-1.8s-.5-2.5-.6-4c-.2-1.6-.8-4-2.7-7.4-1.8-3.4-3-7.6-4.2-8.7-1.2-1-1.8-3.7-2-5-.1-1.2-1.5-2.3-2.5-3.2-1-1-1.8-2.4-3-7.8-1-5.4-1.8-9.3-1.8-10.3s-.2-1-1.1-1.4-1.4-1.8-1-2.6c.2-.8-.4-1.6-.7-2.5s0-2.6.6-3.6.5-3.5-.1-5.7-1.3-4-3.8-4.4c-2.4-.3-3-1-3.8-3-1-2-2-5.5-2.2-6.3-.3-.8-.8-1-2.7.6-1.8 1.6-2.5 2-2.5 5 0 1.9.4 2.5 1 3.6.6 1 .8 1.4 1.2 4.3s3.1 7.6-.3 10.3c-3.4 2.6-3 3.3-2.8 5.1.2 1.9-1 3.1-1.5.5-.7-2.7 0-4.2 1.8-5.5 1.9-1.2 3.6-2.8 2.4-4.5-1.3-1.7-1.8-5.7-2-7.6s-.4-2.5-1.5-1z"/>
|
||||||
|
<path fill="#00b800" d="M403.4 338.5c0 1.3.2 2.7.3 3.8.1 1.3.5 4-.5 6-.9 2-.7 3 0 3.6h.1c2-.6 2.2-2.7 1.7-3.7a3.7 3.7 0 0 1 .2-3.5c.6-1.1.6-1.7.1-2.5-.6-.8-.6-.8 0-3 .6-1.9-.8-1.9-1.9-.7zm20 30.2c-.4-1.4-1.7-6.8-1.8-10.3-.1-3.5-1.7-6.3-4.6-9-2.2-2-2.7-5.4-2.9-8-1.7-1-2.4-.6-2.2 1.4.1 2 2.2 3 2 6.1-.4 3-.4 2.3 1 3.7s2 3 1.3 3.5c-.8.6-.8 1.7.2 2.1 1.1.4 1.2 1.6 1 2.7-.1 1 1 1.3 1.5 2 .7.8.7 2.7.1 3.8-.6 1-.7 2.8.4 1.9 1-1 1.6-.1 2.4 1.4.7 1.2 1.4.8 2.2.5a9.8 9.8 0 0 1-.7-1.8zm15 27.1c-.6 1.4-1.4 1-2.1.3s-1.5-.7-1.2-2 .2-1.5-.7-2.2l-.3-.3h-1c-1.7 0-1.8-.4-2.8-1.4a7.8 7.8 0 0 0-.6-.5v.9c0 1.3 0 1-1.2 1.4s-1-1.3-1.3-2.3a3.9 3.9 0 0 0-.2-.7c-1.4-.2-3-1.7-3.4-3.3-.6-1.8 0-2 .7-.8s.8 1.5 1.8 2.2 1.4-.5 1-1.9a6 6 0 0 1 0-1.5c-.3-.5-.6-.8-1-1-2-.9-1.4-1-1.3-2.6.2-1.5-.2-1.5-1.4-.7-1.1.8-1.2-.1-1.2-2.5s-1.6-2.3-1.9-.7c-.4 1.7-1 .6-1.6-1.7s-1.7-3-1.8-.7c0 1.9-.6 2.3-1.8 1.3l.5 3.6c.6 3.8 1.5 2.4 3.4 4s1.3 2.5 2 3.3c.7.9.8 1.4.6 2.4-.3.9-.6 1.7-.3 2.5.4.9.9 1.2.9 2.4s.3 1 .8 1.3l1 .1.8-1.2c1.4-1.4 3.5.1 4.2 1.9s1.5 2.2 2.6.8.7-1.2 1.9.1 1.6 1 1.6 1 1.2-.4 2 .3 1.3.6 2.8-1.6c1.5-2.3-.7-1.6-1.4-.2zm4.2-64c.5-3.4.2-6.8 1.6-8 1.4-1.3 3-3.8 3 1.5-.2 5.3-.4 5-1.5 6.2-1 1.3-2 1.6-1 3.6 1.2 2 1.3 2.2 1.2 5.3-.2 3.1-.2 4.4 1 6 1.3 1.5 1.6 1.6 2 3.3.2 1.7 1.3 4 2.7 5.3s3 4.8 3.1 7.3c.2 2.5 2.4 3.1 4.4 4.9 2 1.7-.5 2.9-2 2.1-1.6-.7-1 0-1.9 1.1-1 1.1-1.2 1.3-2-.6s-3.4-3.1-4.7-3.6-2.3-2.5-3.4-4.5a6 6 0 0 0-4.5-3.1c.5 1.3.7 2.3.6 2.8-.5 1.7-1 3 .8 5 1.9 2 3.1 5 3.3 6.7.1 1.7.4 2.3 2.3 1.7a8.3 8.3 0 0 0 3.4-2c.6-.8 1.9-.7 3.6.3 1.7.9 4.3 1.8 5.9.9 1.5-1 2.3-2.3 3.7-2.3 2.2-1.6 3-4.9 3.4-5.8.5-1 .2-1-.7-1.9s-.5-2.5-.7-4c-.1-1.6-.7-3.9-2.6-7.3s-3-7.6-4.2-8.7c-1.2-1.1-1.9-3.7-2-5-.2-1.2-1.6-2.3-2.5-3.3-1-.9-1.9-2.3-3-7.7-.8-4.3-1.5-7.6-1.7-9.3-1.1 1.8-1.9 2.3-2.3 1-.5-1.4-1-2.1-1.7-1.2-.6 1-.8-.8-.8-1.6s-.1-.9-1-.9 0-1.2-.4-3.6c-.3-2.3-.8-2.6-1 .2-.4 2.8-2 4.5-1.3 5.1.6.6.3 1.9-.3 3.7-.6 1.9-.3 3 .1 4.2s-.3 3.6-.6 5.6c-.3 2 1.3 4 1.7.7zM414.2 304c-1.1.1-2 1.1-1.3 4.7.5 2.2-1.2 1.7-1.8.6-.6-1.1-1.1-3.4-2.4-5.4-1.2-2-.6 1.3-.7 3.2-.2 1.9 1 1.9 2.1 3.4 1.1 1.6.2 2.2-1 2.2s-.7 2.5-.4 4.2-.3 2-1.2.6c-1-1.4-.3-3.5-.2-6.2.2-2.6.4-2-1.4-2.6-1.7-.7-1.4-1-.7-2.5.6-1.6 1.2-2.4.4-3.1-.7-.8-.6-1.3.7-1.4 1.2-.2.7-1.1 1.8-1.4 1.1-.3 1.6.1 1.7-1.9.2-1.7.7-2.7 2-2.2.8 2.6 1.7 6.6 2.4 7.8zm15.7 18.4c0 3.2 0 4.5 1.4 5.7s1.2 2.5 1.8 5.4c.7 3 .7 9.4 2.5 13.7l2.1 4.7a8.8 8.8 0 0 0 2.3-3c.4-1-1-3.2-2-5-1.1-2 .1-2.6 1.2-5 1.1-2.2-.1-2.4-1.9-3-1.7-.6-1.7-2.2-2.6-4.7s-.8-3.6-.2-5 .2-2.5-1-2.8c-1.3-.3-1-1.2-.5-2.8.5-1.5.8-1.8-1.1-1.4-1.4.4-1.8.7-2.2 1.2l.2 2z"/>
|
||||||
|
<path fill="#5d3100" d="M447.8 328.8c-.2 1.8-.2 2.8-.7 3.4-.4.6-.1 1.5.4 2.5s.7 2.1.3 3.9.3 3 1.2 3.5 1.4 0 1.1 2.2a6.7 6.7 0 0 0 2 5.5c1.1.9 1.9 2.4 1.7 3.4-.1.9.8 1.8 1.9 2.3 1.1.5 1 .6 1 1.2s.4.7 1.6 1 2.2 1 3.6 2.8 3.4 2.6 3.1.8 0-3.2-1.8-4c-1.9-1-3.3-5.5-4-8.6-.9-3.2-3.3-7.3-4.7-8.1-.2-2.2.1-3.3-1.3-4.4a4.5 4.5 0 0 1-1.9-3.6c0-1-.7-2.4-1.4-2.8-.6-.3-.9-1-.9-2s-1-.8-1.2 1z"/>
|
||||||
|
<path fill="#00d860" d="M439.5 412.2a45 45 0 0 0 11.2-3.2c1.9 1.3 5.1 3 6.5 3-2.6.6-4.4.3-5-.2.3.8 1.2 2.1 1.8 2.2-2.6 0-5.5-.7-6.4-1.6-2.3 1-6 1.2-8-.2zm5 3.5c1 .3 6 1 6.6 1-1.6 1.5-.2 2.8 2.5 2.6-1.3.2-2.8.7-1.8.9a28 28 0 0 0 10.2-2c-2.2 2.8-13 5.5-17.5-2.5zm4.5 7c1.3-.6 4.6-.4 6.2.3-1.7.7-5.2.7-6.2-.2z"/>
|
||||||
|
<path d="M454 422.7c2.4-.4 9.1 1.2 11.5-.3-.8 2.2-5 2.5-6.5 2-1.5-.4-2.9-1-3.9-1 .6-.3-.3-.3-1.1-.7z"/>
|
||||||
|
<path fill="#00d860" d="M456.4 426a35 35 0 0 0 10.3-1.3c2 .7 6.2 1.8 7.2 1.7-2 1.2-5.8.5-7 0a12.5 12.5 0 0 1-10.5-.4z"/>
|
||||||
|
<path fill="#00d860" d="M459.5 427c2.6.6 4.8.2 7.4-.6.8.3 2.6.7 4.4.7 1.2.6 2.7 1.5 4.3 1.7a19 19 0 0 1-8.6-.7 22 22 0 0 0-9.1 1.7c0-.8.5-2 1.6-2.7z"/>
|
||||||
|
<path d="M456.4 414c2 .6 9.4.3 13-1.5 1.6-.7 2.5.5.8 1-6 2.2-10.9 3-14.3 1.1-1.4-.7-1.6-1.4.5-.7z"/>
|
||||||
|
<path fill="#00d860" d="M492.2 404c-9 4.2-14.9 5.5-27.4 1.6-1.1-.3-2 0-.7.8 1.3.9 8.2 2.7 9.8 2.9s1 .8 0 1.1-1.2 1 .1.5 8.9-.7 12 .9c1.3.7 1.6.5 1.5 0s.6-.9 1.6-1 1.6-.4.8-.7-.9-.5-.3-.8.7-.6-.2-.8-1.5-.4-.7-.8c.9-.4 2-.7 3-.8.2-.6-.2-2.3.5-2.9z"/>
|
||||||
|
<path d="M477.3 405c5.1.4 14.6-2 19.6-6.8 1.7 1 4.2 2.2 5.5 2.4s2.4 1.4.4 1.4-4.7-.8-6-1.4a33.8 33.8 0 0 1-19.4 5c-1.4 0-1.7-.6-.1-.5z"/>
|
||||||
|
<path fill="#00d860" d="M462.1 377c1.8 1.3 4.9 3.3 8.9 3a19.5 19.5 0 0 0 6.5 3.3c-2.7 1-5.6 2-6.4 2.9-1.2-1.2-2.8-1-3.2-1.6-1.2 1-1 1.5-.2 2s6.6 1.4 8 1 2 .8.7 1.3c-3.1 1-9.2 0-11.3-3.4-2.2-3.3-4-4.6-9.7-1.5-.6-1.7-.6-2-1.7-2s-3.2-1.5-1.6-1.5 6.2-.6 10-3.4z"/>
|
||||||
|
<path fill="#00d860" d="M463.5 384.6c-1 .2-3.7 1.7-4.7 1.8-1 .2-2.7 1.6-1 1.6 1.9 0 4.2-2 5.5-2s1.4-1.7.2-1.4zm5.7 5.9c-.7.1-3.7.8-4.5.8s-1.7.1-1.6.7.3 1-1 .8-2.2.4-2.5.7-.5.7.7.8 1.9.3 3.3-.4 2.7-1.6 4.2-1.7c1.5 0 3-2 1.4-1.7z"/>
|
||||||
|
<path d="M465 394c1.3 1 7.6 3 9.8 2.9s1.9.9.2 1.3a14 14 0 0 1-11-3.2c-1.4-1.1 0-1.6.9-1z"/>
|
||||||
|
<path fill="#00d860" d="M494.8 397.2c-4.8 1.5-9.7 1-11.7.4s-3.8-.6-2.4.7c1.3 1.3 5.6 2.1 8 1.5-8.6 2-10.9 1.8-13 1.5-2.2-.4-6.2-.3-8-.2-1.2.2-3 0-3.8-.5s-1-1.3 1.3-1c2.3.1 2.6-.3.6-.6s-4.7.5-2 2.2 8.5-.1 12.3 1a21.4 21.4 0 0 0 19.1-4.3c.4-.3 1-1.2-.4-.7zm-23.7-7.1c.2.6.2 1.2 0 1.6s-.1 1 .6.4 1.2-1.3 2-.9 2.7.4 3.6.2c.8 0 1.1-.3-.2-.8-1.2-.5-2.5-.7-3.2-.6s-1.6-.1-2.2-.4-.7 0-.6.5z"/>
|
||||||
|
<path fill="#00d860" d="M483.6 392.3c-1 0-2.8-.6-3.7-1s-2.3-.4-1.3 1 5.3 2 6.8 1.4 1-1.4 2.4-.4c1.5.9 3.1 1.5 4.2 1.5s1.5 0 .3-.7-1.8-.8-2-1.4-.2-1 1-.6 2.3 1 3.2.5 2.5-1.5 4-1.5l.3-.9c-2.1-.1-3.5.5-4 .7s-1.7.4-2.8.2-2.5-.3-2.9-.6-.3-.5.6-.7 1.2-.8 0-.6-4.8.2-6.6-.4c-1.8-.6-2.6-.7-3.3-.4-.8.3-.7 1.1.4 1.2s3.7.3 4.5 1.1.8.9-.2.5-2.8-.2-1 1.1z"/>
|
||||||
|
<path fill="#00d860" d="M498.8 390.2l-.4.9c2.2 0 7.4.5 9.1 1.5 1.7-1.3 1.4-1.7 2.5-1.4s2.7.6 3.3.3 1.1-.3 1.8-.2 2.2-.2 3.1-.7 2.7-1.2 3.7-1.2 2.3-.3.4-.6-4.8.3-5.8.7c-1 .3-4 .6-5.7.6s-4.1.8-6.1.3-4.8-.2-6-.2z"/>
|
||||||
|
<path d="M525.8 389.2c-3.5 2.6-7.7 3.1-12.7 3.5-1.5.1-1 .5.2.6 5.3.6 11.3-1.4 13.3-3.5.6-.6.5-1.6-.8-.6z"/>
|
||||||
|
<path fill="#00d860" d="M502 395.2a54 54 0 0 1 8.4 2c1.3-.2 1.7-.5 1.4-1s-.4-1 2-.8h8.6c.9-.3 2.7-1.7 3.5-1.7-2.1 0-10.9.5-12 .4s-1.7 0-2.4.4-1 .6-2 .2-2.4-.8-3.3-.2c-.8.5-2.7 0-4.2.7z"/>
|
||||||
|
<path fill="#00d860" d="M522.4 395.4c.8-.3 2.6-1.7 3.5-1.8 1.5-.1 3.2.5 4 .7s1.7-.1 1.2-.7-.1-1.8 2.3-1.5c2.4.3 3.6.7 6 .5s3.3 1.5 7.7-.3c-.3 1.8.5 1.9 1.3 1.6s1.8-.3 3.2.8 9.9 1.1 11.9.8c2-.4 3 .7 1.5 1.2-1.5.4-1.9 1.1-1.5 1.6.3.5.7 1-1.2.8-1.9-.2-2.2.4-3.1 1s-1.2 1-3.8.5c-2.5-.4-3-.1-4.4.1s-1.8.3-3.2-.2-4.4-1-6.3-.3-3.2 1.1-4.9.7-1.7-.3-.7-1.3 1.3-1 3.3-1.2c2-.2 3.5-.8 2.1-1.6s-1.8-.7-3.7.2-2.8 1.5-5 .4c-2-1.2-3-1-4.5-.6s-3.7-.5-5.7-1.4zm7 3.5c-2.7.4-3.4-1.3-6.2-1-.9.2-2.5 1.3-.3 1.1 2.1-.1 4.5 1 6.6.9s1.2-1.1 0-1zm-3 2c1.3-.5 4.2.5 5.5.3s2.4.5 1 1-4.3-.8-5.7-.4-2.8-.2-.9-.9zm-28 7.6c2 0 9-.3 11.7-6 .2-.5.4-.7 1.2-.1s4.1 2.5 10.1 3c1.7.1 3.5 1 .1.8s-8.7-1.2-10.5-2.3c-3 4.8-8.5 5.3-12.5 5.2-2.5 0-1.9-.7 0-.6z"/>
|
||||||
|
<path fill="#00d860" d="M513.5 400.5c-1 1.3-4.2 3.5-5.6 3.7-1.5 0-5.9-.3-7-.7s-2.4-.3-.9.8 5.5 1.8 7 1.5c1.7-.4 3.5-.9 4.7-.1s3.5 2.2 4.8 1.9c1.4-.3 4.1-.3 5 .1.9.4 2.4 1.7.1 1s-4.1-.2-5.2-.6c1.2 1.6 3.8 4.2 6 4.2.6 0 1 1-.1 1.5 1 .5 3.6 1 5-.3-.4.5-.2.8.4 1s1.3.7.2.9-3.4.4-4.1 0c2.2 1.5 8.1 3.9 14.1 2.7 1.2-.2 1.8-.7 0-.6-4 0-4.2 0-4.9-.4-.7-.4-.5-.8.6-1.1 1-.3 3.9-.8 5-.8s2.4-.4 0-.4-5.3 0-6.5-.4-2-1-.8-1.8 2.5-.6 3-1.3c-3.8 0-8.5-2.1-5.9-4 .6-.4.4-.5-.5-.6s-4-1-5.2-1.6-.4-1.3.6-1.5c-2.3.4-6.8-.8-9.8-3zm34.1 0c-2 1.5-6 2.2-7.7 2.2s-2 .6-.6.7 2.8.4 3.4.2 1-.2 1.8.2c.9.4 2.7.6 4.4.1s4.3-.8 5.4-.7 2.3.1.1-.5-5.8-.2-6.7 0-3.3 0-2-.3 2.4-1 3-1.6l-1-.3zm-1 4.5a13.5 13.5 0 0 1-7.1 2.7c2.4.9 4.4 3.4 6 3.3-.8.5-1.7 1.2-2.7 1.3 1.6.4 4.1 0 6.2-1.2 3.5 1 8 .3 9.6-1-2.3 0-5-.8-6.3-1.9 1.1 0 2.2-.6 2.7-1.3-2.6.5-7-.8-8.4-2z"/>
|
||||||
|
<path fill="#00d860" d="M542.8 412.3c1-.1 2-.8 2.7-1.3a22 22 0 0 1-12.8-2.9c-2.5-2.2-2.5-.5-.8 1s4.9 4 11 3.2zm6.2 5.3c-1 .6-6 1-7.7.6s-2.3-.2-2 .5.7 1.2-.7 1-3.7.2-4.7.5-2.2 1.2-.1.9 4-.8 5.6-.4 7.1.5 8.2 0 .4-.4-.1-.4-.8-.3 0-.7 1.3-1.3 1.5-2zm-48.5-6.7c-2.1.9-9.1 2.8-11 2.9-2.3 1-4.2 1.6-5.3 1.6.8.7 4 1.4 5.2 1-.7.8-2.3 1.6-2.9 2 1.9-.3 4 .2 5 .3a14 14 0 0 1-7.6 1.6c.6.8 1.4 1.6 2.5 1.6a13 13 0 0 1-6.3.2c.6 1.1 1.1 1.8 2 2-1.9.2-4.2.5-6.2-.6 1.5 2 4.9 2.6 9.9 2 5-.5 9.2-2.7 10.4-3.7-2.1.3-5 .4-6.3.1a37 37 0 0 0 9.9-4.3 5.6 5.6 0 0 1-3.2-1 31 31 0 0 0 9.1-1 6.7 6.7 0 0 1-4-2.6 39.2 39.2 0 0 0 19.5.6c1-.3 1-1.5-.8-1.3-3.2.2-9.5-.7-11.2-1.5a11.6 11.6 0 0 0 4.7 2c-3 .9-7.2 1.5-13.4-2z"/>
|
||||||
|
<path fill="#00d860" d="M486.5 418.4c.6-.4 2.2-1.2 2.9-2-1.3.4-4.4-.3-5.2-1 1.1 0 3-.5 5.3-1.6-4.2-.1-7-.1-8.6-1s-4.3-.5-5.4-.3-.7 2 3.8 1.5a15.4 15.4 0 0 1-8.8 1.3c.5 1.5.8 3 .4 3.9 2.4 1.4 8.8 3.1 12 2.9-2.8-1-4.3-2.2-2-2.5s3.6-.7 5.6-1.2z"/>
|
||||||
|
<path d="M479.3 426c5.5-.5 13-.6 19-5.7 1.5-1.2 2.5-.8 1 .5a33 33 0 0 1-18.4 6.8c-3 0-4.4-1.4-1.6-1.7z"/>
|
||||||
|
<path fill="#00d860" d="M521 416.7c-1.3.5-5.2 1.2-6.4 1-1.2-.2-2.9-.2-3.8.3s-1 1 .3 1l3.7.3a6.2 6.2 0 0 0-2 1.7c2-.4 5.4.4 6.4 1a3 3 0 0 1-2.3-.5c3.1 3.4 12.5 3.4 14 2.8-.7.5-1.4 1-2 1.2 2.6.5 5.6.4 8.6-1.3-1 .1-4-.1-4.8-.2a5.6 5.6 0 0 1 2.3-1.3c-1.2-.3-4.8-.2-5.7.3a4 4 0 0 1 1.7-1.9c-4.6 0-10.2 0-12.2-1.1 3.2.3 6.8-1.6 8.3-1.6-2.5 0-5.3-.6-6-1.7zm-11.6 2.5c-2.3.5-5.7 1.5-6.7 2s-1.9.8.1.8a125.5 125.5 0 0 1 .7-.2c-.8 0-1.7 0-.2-.5s3.5-1.5 6-2zm-4.6 5.5c.8 0 4.3 0 5.7-1.2 1.5 1 4.3 2.6 6 2.6 1.9 0 1.7.5.1.7a12 12 0 0 1-6.2-2c-2.1.8-3.8.2-5.7-.1zm-27 15.7c3.6 1.4 8.3 2.4 11.8 1.3 2 1.7 6.1 1.8 8.3 1.4 2.2-.5 4.2-.7 6.7 0 2.4.9 7.4 1 8.8 2.1-1.3 0-4 0-4.7.2-.6.2-.3.6 1 1.2-4-.2-10.9 1.5-13 3.3a7.3 7.3 0 0 1 6.8-4.3c-2-.7-8.8-.8-11 .6a6.7 6.7 0 0 1-1.4-2.4c-3.6 2-10.6-.9-13.4-3.4zm-9.3-6.6a16 16 0 0 0 8.5-3.2c.8.7 4 1.4 7.4.3-.7.5-.8 1.5-.5 2a26.2 26.2 0 0 0-8 2c-1.5.7-5.8 1.3-7.2.5-1.4-.7-1.4-1.4-.2-1.6z"/>
|
||||||
|
<path fill="#00d860" d="M483.9 433a26.2 26.2 0 0 0-8 2l.5 2a51 51 0 0 1 17.5-1.8c-1.8.1-5.1 2-7 2.1 4.6-.3 9 .6 10.2 1 1.1.2 1.4 1 .5 2s-1.3.8.6 1c1.8 0 5.7-.3 7.4-2-.7-.7-2.5-.4-3-1a8 8 0 0 0 3.1-1.9 29 29 0 0 1-5.3-.3c-1-.3-1.8-.6-.5-1.3a7.6 7.6 0 0 0 2.2-1.7c-2.2.6-5.8 1.2-8.8-1.2 1.1.3 3.8.1 4.7-.3a6 6 0 0 0-2.6-.9c2.4-1.2 7-2.2 13 .1 2.8-.2 6 0 8.2.5 1-1 2.9-3.2 4-3.7-7 .5-19.3-.7-19-4.4-2.3 3-7.4 4.6-9.6 4.1-.2 1 .7 2.4 1.5 3-2.3.5-6.3.9-8.2.5 1.1 1 3 2 4.2 1.9-2.4 0-3.7.5-5.6.3z"/>
|
||||||
|
<path fill="#00d860" d="M498.1 441.2c2 0 5.8-.2 7.5-1.9-.7-.7-2.5-.4-3-1a8 8 0 0 0 3.1-1.9c5-.4 9.3-.2 11.4-.8 2.1-.6 7.5-.3 8.5-.6-4.7.8-5.6 1.2-5.8 2s1.5 1.3 2.6 1.3c-2 0-4.7 2.1-5 3-2.8-1.6-4 .3-4.4 1-1.1-.5-5-.4-7 1.3-2.5-.8-4.2-1.2-6.8-.8 1.6-.3 1.3-1.4-1-1.6zm22.4-13.7c1.6 0 5 .2 6.3 0a7.5 7.5 0 0 0-2.1 1.5c4-.5 9.4-.8 11-.5-2-.3-4 1-5 1.6s-.4 1 1 1.2 3.1 1.2.7.9-7.3-.4-8.5-.2-1.8-.4 0-.7 2.8-.8 3.6-1.2c-1.4.3-4.1.3-5 0s-1.3-.6-.3-.9.3-.5-.7-.4-3.5 1.1-5 2.5c1.6-1.6 3-3 4-3.7z"/>
|
||||||
|
<path d="M502.8 430.2a10 10 0 0 0 7.8 3.5c.7 0 2.2 1 .3 1.1-4.9.2-7.3-1-9.5-4.1-.4-.7.4-1.6 1.4-.5zm29.2-40.8c2.6 1.2 7.7 2.3 11.8 2.1.7 0 2 .7.3.9a21 21 0 0 1-12.4-2.3c-1-.6-.7-1.2.3-.7z"/>
|
||||||
|
<path fill="#00d860" d="M534.6 389.4c4-.1 7 0 8.1 1 2.3-.6 6.4-1 7.3-.8s2-.3-.2-.8-7.1-.7-8.7-.4c-1.6.3-6.5.5-8 .3.6 0 1 .2 1.5.7zm15.4 1.5c1.8-1 7.2 0 8.8-.7-1.1 1.4 3.8 1.5 8 .4-1.6 1-5.1 1.2-6.6 1.9s-2.4.1-3.5-.4-4.2-1.6-6.7-1.2z"/>
|
||||||
|
<path fill="#00d860" d="M566.8 390.6c-4.2 1-9.1 1-8-.4-1.6.7-7-.3-8.8.7 2-1.1 3.4-.2 4.8-2.6.9.2 2.9.3 3.6-.6 1.2.3 3.4.8 4 1.4.6.7 1.6-.2.8-1.1 2-.7.7.8 5.2-.3 1-.3 3.2-.7 4-.7a27.6 27.6 0 0 1-5.6 3.6z"/>
|
||||||
|
<path fill="#ff0" stroke="#000" stroke-width=".1" d="M373.4 664.2l-.2-22.2c0-1-.5-.8-.5 0v22l.7.2zm7.2-23.4l.8 23.4-.1.2h-.5l-.5-23.6h.3zm6.8 19.8l-.4-19c0-.6-.5-.5-.5.1l.4 18.9h.5z" transform="matrix(4.4862 0 0 4.4867 -1190.9 -2609)"/>
|
||||||
|
<path fill="#fff" stroke="#000" stroke-width=".1" d="M376.6 644.7l-7-.1c-.3 1.4 1.4 1.3 2 1 .8.5 1.4.5 1.8 0 .6.5 1.4.4 1.7 0 .8.7 1.7 0 1.5-1zm.5 3.4h-7c-1.3 1.2.3 1.8 1.7 1 .2.4 1 .6 1.6.3.6.4 1.4.1 1.8-.3.7.3 1.6.4 2-1zm-.2 4.5h-6.8c-.1 1.1 1.3 1 1.8.7.5.8 1.7.6 2.1.1.7.5 1.3.4 1.6 0 .7.6 1.4-.2 1.3-.8zm.4 4.4l-7.7-.1c-.4 1.3.8 1.5 1.3 1.2.2.7 1.2.5 1.5 0 .4.3.9.1 1.1-.2.1.7 1 .8 1.7.2 1.4 1 2.7-.2 2-1.1zm6.7-1.8h-6.3c.3 1.2.9 1.5 1.9.8.8.8 2 .5 2.3.1 1.4 1.1 2.1-.2 2.1-1zm-.6-4.4l-6.2-.2c.1 1.6 1.6 1.5 2.4.9.5.7 1.5.5 2 0 .7.8 2 .3 1.8-.7zm.8-4.9h-6.6c0 1.1 1.5 1.7 2.6.7.3 1.3 1.5.9 2 .4.8 1 2.5-.2 2-1zm-.4-3.3l-6 .1c0 1 1.4 1.4 1.9.6.3.5 1.3.4 1.6 0 .4.7 1 .2 1.2 0 .7.5 1.4.2 1.3-.7zm6.9 2.2l-7.2-.1c0 .7.7 1 1.2.7 0 .8 1 1 1.7.4.4.7 1.7.8 2.2 0 1 .9 2.2.2 2-1zm-.1 5.9h-7c0 1 1.1 1.3 1.8.8.1.8 1 .9 1.5.4.7.7 1.7.8 2.3 0 .8.3 1.5-.4 1.4-1.2zm-.4 5.3h-5.6c0 1 1.2 1 1.7.5.6.7 1.4.7 1.9.2.7.6 1.9.4 2-.7z" transform="matrix(4.4862 0 0 4.4867 -1190.9 -2609)"/>
|
||||||
|
<path stroke="#000" stroke-width=".1" d="M381.3 664.4c-3 0-6.1 0-8.2-.2s-2.7-.6-4.2-1.5l-5.6-3.4c-.5-.2-1 .1-.3.5l5.6 3.7c1.5 1 2.5 1.9 3.4 3 1.2 1.3 2 1.3 2.6 1.1s1.4-.5 2.3-.3c.8.2 2 .3 2.6.2.5.5 1.8.4 2.5.2s1.2-.2 1.7-.1h1.7c.5 0 1.8-.3 2.7-.2 1 .2 1.9 0 2.5 0a5 5 0 0 1 2-.1c.6-.4.8-.9 1-1.4.6-.1.8-.2.9-.5l.6-1.6h.2v-.6l-.4-.6.2-1 .5-.2-.2-1-8.8.2a2 2 0 0 0-.6 1.1l-2.6.4c-.3.1-.6.1-.9.5l-1.2 1.8z" transform="matrix(4.4862 0 0 4.4867 -1190.9 -2609)"/>
|
||||||
|
<path stroke="#000" stroke-width=".1" d="M391.8 660.5l1.3-4.9c.2-.5-.3-.6-.5 0l-1.3 4.9h.5z" transform="matrix(4.4862 0 0 4.4867 -1190.9 -2609)"/>
|
||||||
|
<path fill="#fff" stroke="#000" stroke-width=".1" d="M396.9 655c-1.1.5-1.7.8-2.2.6-.5-.2-1.1-.3-1.5-.1a.5.5 0 0 1 0 .1 493.3 493.3 0 0 1-1.1 3.8c.8.3 2.2.3 2.5 0 .4-.4 1.3-.3 1.8-.3.3-.4.4-.9.3-1.1s0-.7 0-1 .4-1.4.2-2z" transform="matrix(4.4862 0 0 4.4867 -1190.9 -2609)"/>
|
||||||
|
<path fill="none" stroke="#000" stroke-width=".1" d="M371.7 645.6a53.2 53.2 0 0 1-8 14m2 1.2a54.5 54.5 0 0 0 11.4-12.6m-7 4.3c-.3 2.7-1.1 7.5-1.5 10m2.6-4c-1 1-2.3 2.6-3.4 3.5m12.7-8.9c-.8.8-1.7 1.8-2.6 2m3.1-1.8a7 7 0 0 0 2.7 1.9m-3.2-6.2a8.5 8.5 0 0 1-3 1.7m3.4-1.6c.6.6 1.3 1.3 2.2 1.7m-5.4-4.9a7 7 0 0 0 2.7-1.5m.3 0c.7.7 2 1.4 2.7 1.6m-5.5-3.3a4 4 0 0 0 2.4-1.4m.3-.2c.7.6 2 1.4 2.7 1.5m3.2.8c-.4.5-1.5 1.3-2.2 1.3m2.7-1.3c.3.5 1.1 1.3 1.6 1.3m-4.8 6a7.2 7.2 0 0 0 2.8-1.9m.5.1a5.6 5.6 0 0 0 1.9 1.8m-4.1 5.2c.4 0 1.5-.6 1.8-1.3m.6-.3a7 7 0 0 0 2 1.7m-18.7.9c1.3-.4 3.8-2 5.1-3.5m-2.4 1.9c1 .7 2.3 1.5 3.2 1.7m-6.2-4.5a8 8 0 0 0 2.4-1.5m.5-.1c.3.4 2.4 1.7 3.3 1.7m-3.8-5.9a9.8 9.8 0 0 1-2.5 1.4m3-1.4c.7.5 2.2 1.4 3.1 1.4m-3.6-5.4c-.6.6-1.6 1.6-2.4 1.9m2.9-1.8c.4.7 1.6 1.7 2.4 1.8m8 2.6c1.9 3.3 5.3 7.4 8.7 9.6m-14.1-13.3c2.8 4 8.2 12.7 13.4 15.9m1-3.4a18.4 18.4 0 0 1-4.9 4.6m4.5-3.5c-1.7-2.8-2.6-6.3-4-11m-14 12.4l2 6m-2.4-6.1l1.9 6m-2.4-6.3l1.8 6.2m-2-6.1l1.4 6.1m0-.2h1.7m-.2-.6h-1.6m1.4-.5h-1.6m1.4-.5H374m1.3-.6H374m-.1-.5h1.3m-1.4-.4h1.3m-1.4-.5h1.2m-1.3-.4h1.1m-1.2-.5h1m-1.1-.4h1m-1.1-.3h1m-1-.4h.9m-2.6 0l-1.2 5m1.5-5l-1 5.2m1.3-5.4l-.8 5.5m1.2-5.6l-.6 5.8m.7-.4h-2m2-.5h-2.3m2.3-.6h-2.1m2-.5h-1.9m2-.5h-1.9m1.9-.6H371m1.7-.5H371m1.6-.5h-1.5m1.5-.5h-1.3m1.3-.5h-1.2m1.2-.3h-1.1m1 5.5v-5.9m6.5-2l-4 8.1m4.3-8.2l-3.4 8.3m3.6-8.4l-2.7 8.4m3-8.2l-2.2 8.2m.1-.3h-2.5m2.7-.8h-2.4m2.5-.6h-2m2.4-.6h-2m2.1-.6h-1.9m2.1-.6h-1.8m2-.7h-1.6m1.7-.5h-1.5m1.7-.6h-1.4m1.5-.4H378m1.4-.4H378m1.3-.4h-1m1-.3h-.9m1-.4h-.8m1-.4h-.8m.8-.3h-.7m3.4-.1l1.7 5.6m-1.4-5.5l2.1 5.4m-1.8-5.4l2.5 5.3m.6-.5l-2.8-4.9m2.8 5h-2m1.8-.8h-2m1.7-.6h-1.9m1.5-.7h-1.7m1.3-.6h-1.5m1.1-.7H383m1-.7h-1.2m.8-.6h-1m3.2.1L384 662m2.3-5.4l-1.6 5.3m.7-.1l1.2-5m.3.2l-1 4.7m-1.7-.3h1.7m-1.5-.6h1.7m-1.5-.7h1.6m-1.3-.6h1.5m-1.3-.7h1.4m-1.2-.6h1.3m-1-.7h1.2m-1-.6h1m.9.1l.8 3.6m-.5-3.8l1.1 3.7m-.7-3.7l1.2 3.7m-.7-3.5l1.3 3.5m-.1-.3h-1.7m1.5-.5h-1.6m1.4-.5h-1.5m1.3-.6H388m1.2-.5h-1.4m1.2-.5h-1.3m1.1-.5h-1.2" transform="matrix(4.4862 0 0 4.4867 -1190.9 -2609)"/>
|
||||||
|
<path fill="#00b800" d="M479.6 380.3c3.6-2.3 9.8-1.9 13 .5 3.7-2.1 10.5-1.5 13.6 1.3 4.8-3.3 8.9-3.8 13.5-.6a12 12 0 0 1 13.6.2c4.2-2 8.8-3.6 12.9.7a10.7 10.7 0 0 0-13 .8c-4-4-11.1-2.5-13.5.3a8.8 8.8 0 0 0-13.3.2c-4.2-3.5-10.4-3.6-13.8-1a15 15 0 0 0-13-2.4z"/>
|
||||||
|
<path fill="#cf6200" d="M543.3 375.3c-18.5 3.2-59 1-67.8-1.3-3-.7-2.2-1.8.4-1.2 10.2 2.3 32 2.3 44 1.7 2.3-3 6-8.3 7.1-9.8s1.6-1.6 4-2l10-1.7v1.4c-.2.3-.5.7-.8.8 0 2.4.5 8.2 1 10.3l1.3-.3c.8-.2 1.6 1.9.8 2.1z"/>
|
||||||
|
<path fill="#cf6200" d="M573.7 376.2h2.5c.7 0 1.8-.6 2.2-1.7l2.5-7.3-1.9-2.8 1-6.1 2.4-1c.1-.4-.1-1.9-.6-2.3l-36.2 1.2c-1.1 0-1.6 0-2 1.4a27 27 0 0 0 9.2 26.6c.6.5 1.4 0 .4-.8a29.8 29.8 0 0 1-5-6.5l6-.1c.4 2 1.9 6 2.2 6.8s1 .8.6-.3c-.8-2.4-1.2-5.2-1.5-6.6h6l.5 6c0 .8.7.8.7-.1v-6l5.5-.2-.5 6c-.1 1 .4 1.4.6 0l.8-6 3.8-.2c-.1 1.3-1.3 5-1.6 6s.2 1 .6.1a35 35 0 0 0 1.8-6z"/>
|
||||||
|
<path d="M547.2 375.3c-.6-1.3-2.6-5.9-2.8-9.2l8-.1c.3 2.5 1 7.9 1.5 9.1l-6.7.2zm6.6-9.4c.2 2 1.2 8.5 1.4 9.2l6.4-.1-.4-9.3-7.4.2zm-9-8.1a38 38 0 0 0-.3 6.8l7.7-.2-.6-6.8-6.8.2zm8.3-.2c0 1.6.4 5.6.5 6.8l7.6-.2-.4-6.9-7.7.3zm9.2-.3l.3 6.9c1.8 0 5.4 0 6.5-.2.1-1.5.3-5.9.2-7l-7 .3zm8.3-.3l-.2 7 7.1-.3c.3-1.5 1-5.4 1-7l-7.9.3zm7.2 8.3l-7.5.2-.7 9.2 7.2-.2a61.6 61.6 0 0 0 2.6-7c-.5-1-1-1.4-1.6-2.2zm-15.2.4l.2 9.2 5.5-.2.7-9.2-6.4.2zm-31-1.8l-3 .5a224.8 224.8 0 0 1-7.2 10.1l10.6-.3-.3-10.3zm1.4-.3l.4 10.5 6.4-.5-1-11-5.8 1z"/>
|
||||||
|
<path stroke="#000" stroke-width=".1" d="M377.3 657h-7.7v-.2l7.7.1zm6-6.2c.1 0 .1 0 0 0l-6-.1c-.1 0-.1 0 0 0h6zm-6.4 1.7c.1 0 .1.1 0 .1h-6.8c-.1 0 0-.1 0-.1h6.8zm.2-4.4c.1 0 .1.1 0 .1H370c-.1 0-.1-.1 0-.1h7.1zm-.5-3.5c.1 0 .1.1 0 .1h-6.9c-.1 0 0-.2 0-.2l7 .1z" transform="matrix(4.4862 0 0 4.4867 -1190.9 -2609)"/>
|
||||||
|
<path fill="#fff" stroke="#000" stroke-width=".1" d="M383.8 642.6l-6 .1 6-.1z" transform="matrix(4.4862 0 0 4.4867 -1190.9 -2609)"/>
|
||||||
|
<path stroke="#000" stroke-width=".1" d="M384.1 646c.1 0 .1 0 0 0h-6.5c-.1 0-.1 0 0 0h6.5zm6.5 4.6v.1h-7c-.2 0-.2 0 0 0h7zm0-5.9c.2 0 .2.1 0 .1h-7.1c-.1 0-.1-.1 0-.1h7.2zm-6.6 10.4c.1 0 .1.1 0 .1h-6.4v-.1h6.4zm6.2.9c.1 0 .1 0 0 0h-5.6 5.6z" transform="matrix(4.4862 0 0 4.4867 -1190.9 -2609)"/>
|
||||||
|
<path fill="#ef072d" stroke="#000" stroke-width=".1" d="M395.3 657a3 3 0 0 0 0-1.4 1.1 1.1 0 0 1-.6 0 3 3 0 0 0-.3-.2c0 .4-.2 1.5-.4 1.9-.3 0-1 0-1.3-.2l-.3 1a3.5 3.5 0 0 0 1.5 0c0 .6-.1 1.1-.4 1.5.5 0 1 0 1.1-.3.3-.4.3-1 .4-1.3l.5-.1.5-.2.7-.1v-.6l.2-.4-1.6.5z" transform="matrix(4.4862 0 0 4.4867 -1190.9 -2609)"/>
|
||||||
|
<path stroke="#000" stroke-width=".1" d="M370.5 623.2c-.8 0-2.6 0-3 .2-.3.2-.4.3.2.4s1.7.5 2.3.8c.6.4 1 1 1 2a6 6 0 0 0 3 6.3c.1.1.2.2.1.6l-.3 1.1c0 .2-.1.4.2.3a20 20 0 0 1-1 1.6c-1.6-.2-3 0-3 1.8 0 .2 0 .4.2 0 .3-.4.6-.8 1.3-1-.4.7-.6 1.3-.5 1.7 0 .3.2.5.4 0 .1-.4.5-.8.8-1.1.2-.1.2-.1.1.2s.1.9.3 1.1c.2.2.3.1.2-.2 0-.4 0-1.1.5-1.3.6-.4 1.2-.2 1.4.2.3.5.5 0 .2-.4s-.6-.9-1-.9l1-1.7c0-.2.2-.3.4-.2 0 .1.2.1.3-.2l.7-1.4.6-.2 1 1.5v.6c0 .4-.4 1.3-.5 1.6-1.2 0-1.8 0-2.2.7-.2.3.1.4.4.3a2 2 0 0 1 1-.3c.2 0 .3.2 0 .3-.7.3-1.2.8-1.2 1.5 0 .2.2.3.3 0 .3-.5.8-.9 1.3-1 0 .5.1 1.3.5 1.5.3.2.3 0 .2-.3-.2-.5 0-1 .3-1.3.5-.6 1.7.2 2 .4.2.2.4.3.2-.3-.1-.7-1.1-1-2-1.2l1.2-4.2c.5.3 1-.5 1.8-.2 1.4.6 3.5 1.9 3.8 2.2.4.3.5.2.7 0 .2-.1.5 0 .8 0 .2.1.4.2.1-.4a7.2 7.2 0 0 0-2.4-2.6c.8 0 1.8 0 1.8-.2s-1.2-.6-1.7-.6a3.3 3.3 0 0 0 1.6-.8c.2-.2 0-.3-.8-.3-2.1 0-3.2 0-4.3-.6-1.8-1-2.9-2.2-3.8-2.6-.4-.3-.7-.9-1-1.4-.5-1.5-.5-2.3-1.8-2.8s-3 .1-3.7.8z" transform="matrix(4.4862 0 0 4.4867 -1190.9 -2609)"/>
|
||||||
|
<path fill="#fff" stroke="#000" stroke-width=".1" d="M370.6 623.6h-1.7s-.2 0 0 0l1.5.4c.3 0 .2.3 0 .2s-.4 0-.2.2c1 .7 1.2 1 1 3.7l.5.4c.2 0 .1.2 0 .1s-.5 0-.2.2.5.2.2.2-.6.2 0 .1c.5 0 .8.2 0 .3-.6 0-.4.2 0 .2.7 0 .5.2.3.2s-.3.2.2.2h.7c.1 0 .2 0 0 .1-.2 0-.2.2.1.2s.5 0 .2.1c-.1 0-.3.1 0 .2.7 0 .8.2.6.3s-.3.1 0 .1.6.1.3.2c-.2 0-.3.2 0 .2s.5.2.3.3-.3.2 0 .2.4.1.2.2c-.2.2-.3.2-.5 0 0-.2-.2-.2-.2 0l-.2-.3c-.1-.3-.3-.3-.3 0s-.2.1-.4 0a3.3 3.3 0 0 0 4 .8c.1 0 .2 0 .3.3l.6 1.1c.1.2.3 0 .3-.2l.6-1.7c0-.3.4-.5.3.3.3-.2 1.5-.3 2.5 0a12.2 12.2 0 0 1 2.7 1.5.6.6 0 0 0 .5.1c.3 0 .4 0-.1-.5s-.3-.7 0-.5c.3.2.5.1.2-.2l-1-.9c-.1 0-.1-.2-.6-.2h-1.5c-.2 0-.4 0 .2.2.6.2 1.7 1 2 1.2s.4.6-.1.2-2.4-1.5-3.6-2c-2.7.3-4.9.6-6.5-1.1-.8-.9-.8-2.8.5-3.6-.2-.2-.2-.4-.1-.4v-.6c-.2-.1-.4-.3-.4-.5-.3 0-.5-.5-1-.3s-.6 0-.8-.1c-.1-.2-.2-.2-.5-.2s-.5 0-.5-.2.2-.2.6 0c.7.3 1.3.5 1.8-.2.4-.6-.2-1.1-1-1.3-.9-.2-1.5.5-1.9.8z" transform="matrix(4.4862 0 0 4.4867 -1190.9 -2609)"/>
|
||||||
|
<path fill="#fff" stroke="#000" stroke-width=".1" d="M375 623.3a2.8 2.8 0 0 0-1-.6c-.3 0-.3.2-.2.3v.6c.2.1.3.3 0 .3-.2.2 0 .9.3.7h.2s0 .3.2.3 0 .2 0 .3h.2c.2 0 .1.4-.1.5.3 0 .4 0 .4.2.1.2.4.3.4.6s0 .3-.4.2-.4 0-.5.2-.2.3 0 .3.4.1.1.2-.6 0-.7.3c0 .3 0 .4.2.3l.7-.4.5.1c.2.1 0 .5-.2.3s-.4 0-.5.1l-.5.2c-.2 0-.4 0-.3.5 0 1.4 1.1 2.4 3.1 2.4h3.3c-.6-.4-1-.6-1.3-.6h-.3c.1-.1 0-.3-.1-.3s-.3-.2-.5 0l-1 .5c-.2 0-.5 0-.2-.2l.9-.4c.2 0 .1-.2.1-.2s0-.3.3-.2c.6.4 1.5.9 1.8.9s.4-.2.2-.3-.3-.3-.3-.4.1-.2.5 0c.4.3 1 .5 1.3.6s.5.1 0-.2l-2.3-1.7c-.3-.3-.3 0-.2.2s-.3.3-.5.1-.3-.3 0-.4.2-.2-.1-.5c-.4-.3-.5-.3-.4 0 .1.3.1.5-.2.4s-.6-.3-.3-.4c.2-.2.5-.3 0-.6s-.2 0-.3.2-.4.2-.5 0-.3-.3-.2-.4.1-.2.3 0 .4 0 .1-.3-.4-.2-.3 0-.2.4-.6 0c-.2-.1-.2-.3 0-.4.2 0 .2-.1 0-.3-.7-1.2-.4-2.1-1.2-3z" transform="matrix(4.4862 0 0 4.4867 -1190.9 -2609)"/>
|
||||||
|
<path fill="#cf6200" d="M491.6 188.4c-.3.5-.4.4-1 .8-.6.5-.8 1.8.4 1.7.8-.2 1.3-.6 1.6-1a10 10 0 0 0-1-1.5zm-3.6-2.9c-.9.9-1 1.3-.6 1.3.6 0 .3 0 0 .7-.5.6.7.9 1.2.4s.5-.6.8 0c.1.5 1 0 1.4-.4-.8-.8-1.9-1.5-2.8-2zm-1.6 5c-1.2.6-.8 3.7 1 2.8.6-.3 1-.1 1 .3-.1.3-.1.5 0 .8a5.4 5.4 0 0 0 2-1.4c1-1.3 0-1.2-1.6-1.2s-2-.3-.5-1.2c1.4-.9.4-1.4-1.5-1.2.3.4.2.8-.4 1.1zm6.7 6.9c-.9-1-.3-1.4.6-1.9a1.2 1.2 0 0 0 .5-.4l-.8-3c-.4.2-1 1.3-1.2 1.8-.2.8-.4 1.2-1.2 1-.7-.2-1.4.6-1.5 1.4h.5c.3.1.4.6.3 1 2.1 0 2.5 1.4 2.9 2.4.4 1.1.8 1 1.1.3.3-.6-.4-1.7-1.2-2.6z"/>
|
||||||
|
<path fill="#ff0" d="M493.7 209.6c-.4.9-.4.8-1.7.8-1.2.1-2.8.3-3.5 1-.3.4-2.5.6-2.5 1.5 0 1 0 1.7 1 1.8.9 0 1 .2.7.9-.4.7-.6 1.8 1 2 1.6 0 2.8-.4 3.2.5.4 1 0 2.4.3 3s1.4.9 3.1 1.4c1.2.3 5.5.6 6.8.4 1.3-.2.8-1-.5-1-1.3-.2-2.3-.4-2.6-1.3-.3-1-.6-1.5.2-2.3.7-.9 1.4-1.5 1-2.9-.4-1.3-1.1-2.9-2.7-3.3-1.5-.5-1-2.6-2.6-2.8-.6 0-1 0-1.2.3z"/>
|
||||||
|
<path fill="#cf6200" d="M486.1 222.2c1.4.2 2.5.6 1.4.9-1 .3-1.7.9-.3 1 1.4.1 2.6.7 1.5 1s-1.2 1 .1 1 1.9.6 1 1.2c-1 .5-1.6.8-2.2-.1-.6-1-1-1.2-1.1-.5-.2.7-.6.2-1-.8s-1.4-1.4-1.1-.6-.8 1-1.8.6c1 1 2 2 3.3 2.7 1.4-.5 3 0 3.5 0 .6 0 2.4.5 3.4 1s1.7-.4 1.3-1.5c-.5-1-.5-.7-1 0-.6.5-.7-.3-.6-1.5 0-1-.7-.8-.9-.2s-.8-.4-.5-1 0-.9-.5-.7-.6 0-.7-1.2-.6-1-.7-.5-.7-.2-1.4-1.1c-.6-.8-1.3-.3-2.5.1l.8.2z"/>
|
||||||
|
<path fill="#ff0" d="M500.3 229.5c-6.4 2.5-11 1.4-14.4-.9 1.4-.5 3 0 3.6 0 .5 0 2.4.5 3.3 1s1.7-.4 1.3-1.5c.8 1.1 1.5 1.9 2.5 1.8 1 0 2.8-.2 3.7-.4zM486.7 200c-.4-1.3-.8-1.6-1.5-1.5-.7 0-1-.1-1.8-.4-.7-.3-1.7 0-1.9 1.5s-1 2-2.2 3c-1.1.8-1.8 1.5-1.8 2.9s-.3 1.7-1.1 2.8l-1.3 1.5 1.4.8c.9.4.6 1-.2.8s-1.7.2-.3.5 2 1 .7 1c-1.4-.2-3 1-.3.7 2.6-.3 3.6 1 .6 1-3.1 0-2 1-.3 1 2.9 0 2 .9 1.2.9-.7 0-1 1 .9.8l.7-1.1c.3-1 .6-3.7 1.7-4.4 1-.8 1.6-2 1.6-2.7s1.7-4.2 2.7-5 1.6-2.7 1.2-4z"/>
|
||||||
|
<path fill="#cf6200" d="M484.4 200.2c-1-.8-2.1-.3-2.1 1s-.8 1.8-1.7 2.3a4 4 0 0 0-2 2.7c0 1.1.2 1.8-.5 2.7-.8.8-.9 1.5-.4 2 .6.5.6.5.8 1.2.3.7 1.6 0 1.6-.8s.3-.8 1.1-1.3c.9-.4 2.3-2.7 2-3.3-.3-.6-1.1-1.2 0-2 1-.9 2-1 2-1.8 0-.9.3-1.2.6-1.5.3-.3-.7-.8-1.4-1.2z"/>
|
||||||
|
<path d="M484.4 199c-.7-.2-1.1 1.3-.1 1.5s1.1-1 .1-1.4zm-.1 2c-.8.1-1.7 1.1-.4 1s1.8-1.1.3-1zm-1.6 1.9c-.8.4-.6 1.5.6.7s1.4-1.7-.6-.7zm-1.2 1.6c-.8.4-.7 1.5.5.7 1.2-.7 1.5-1.7-.5-.7z"/>
|
||||||
|
<path d="M479.9 205.3c-.8.4-.3 1.4.8.7s1.1-1.7-.8-.7zm1 1c-.9.4-.4 1.4.8.7s1.1-1.7-.9-.7z"/>
|
||||||
|
<path d="M479.4 206.7c-.7.4-.2 1.4 1 .7s1-1.7-1-.7zm1 1.1c-.9.4-.4 1.4.8.7 1.2-.8 1.1-1.7-.9-.7z"/>
|
||||||
|
<path d="M479 208.5c-.8.4-.3 1.4.9.7s1-1.7-.9-.7z"/>
|
||||||
|
<path d="M479 209.5c-.7.4-.2 1.5 1 .7s1-1.7-1-.7z"/>
|
||||||
|
<path fill="#cf6200" d="M478.5 219.3c-.8.1-1.4 1.3-.4 1.5s1.3.3 1.3 1 .3 2 1.4 2c1 .1 2-1.1 1-1.5-.9-.4-1.7-.7-1.8-1.6 0-.8-1-1.4-1.5-1.4z"/>
|
||||||
|
<path fill="#ff0" d="M507 212.6l.6.6c.8.6 2.2 0 2-.5s-1-2.3 1-.9l10.6 7.4c2.2 1.6.8 1.8-.2 1.3s-4-1.7-5.7-2.7c-1.7-1-2-.6-2.2-.3-.2.3 0 1 .6 1.6-1 .1-2.7 0-3.2-1.2-.6-1.3-2-3-3-4.2-.4-.5-.5-.8-.4-1z"/>
|
||||||
|
<path fill="#00d860" d="M564.9 403.6c-1.4 1-3.4 2.8-2.1 5.2l.5-.2a142.4 142.4 0 0 0 14.7-21.7l.1-.7a20.5 20.5 0 0 1-5.2 3.1c.7 1.9-2.6 4.3-4.3 5 .7 1.2.5 3-1 3.3.3 1-.9 1-2.3 1.6s-2 1-2.5 1.8c.7-.5 1.8-.8 2.3-.6s.7 1-.3 1.3-1.7.8-2.1 1.2c1.5-.5 3.7-.3 2.2.7z"/>
|
||||||
|
<path stroke="#000" stroke-width=".1" d="M376 628.4c-.4-.3-.5-.1-.4 0s0 .4-.3.5h-1c-.2 0-.5.4 0 .3l1.6-.3c.2 0 .4-.2 0-.5zm.7.6c-.3-.3-.4-.2-.3 0s-.1.3-.3.3l-1.4.4c-.4 0-.4.3.1.3s1.5-.5 1.6-.5.2-.3.3-.2.3 0 0-.3zm.3.8l-1 .5c-.3 0-.5.3 0 .3s1-.5 1.2-.6l.4-.2s.4-.1 0-.4-.8 0-.6.1 0 .3 0 .3z" transform="matrix(4.4862 0 0 4.4867 -1190.9 -2609)"/>
|
||||||
|
<path d="M482 187.5c-2.8-1.9-6 2-2.9 4.2 2.8 1.9 5.7-2.4 3-4.2z"/>
|
||||||
|
<path fill="#fff" d="M478.5 189.2h.8c-.1 1 .8 2.3 2 2-1 .8-3-.2-2.8-2zm11 42.5c.9.3 3.9.6 5 .6l-1.4 2.5c-.3.8-.4.9-.5-.3 0-1.2-.7-2-1.3-.7l-1.2 2.2c-.3.5-.8.7-.6-.6s.1-2.6 0-3.7z"/>
|
||||||
|
<path fill="none" stroke="#000" stroke-width=".3" d="M399.7 640.8c0 16.3-2.6 33.9-23.8 42.3-21.1-8.4-23.7-26-23.8-42.3h47.6zm0 0c0-6.2-.3-12.2-.2-17.4a63.6 63.6 0 0 0-23.6-4.3c-5.3 0-15.7.8-23.6 4.3.2 5.2-.2 11.2-.2 17.4h47.6z" transform="matrix(4.4862 0 0 4.4867 -1190.9 -2609)"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 29 KiB |
7
public/img/flags/sj.svg
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icon-css-sj" viewBox="0 0 640 480">
|
||||||
|
<path fill="#ef2b2d" d="M0 0h640v480H0z"/>
|
||||||
|
<path fill="#fff" d="M180 0h120v480H180z"/>
|
||||||
|
<path fill="#fff" d="M0 180h640v120H0z"/>
|
||||||
|
<path fill="#002868" d="M210 0h60v480h-60z"/>
|
||||||
|
<path fill="#002868" d="M0 210h640v60H0z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 321 B |
45
public/img/flags/sz.svg
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icon-css-sz" viewBox="0 0 640 480">
|
||||||
|
<defs>
|
||||||
|
<clipPath id="a">
|
||||||
|
<path fill-opacity=".7" d="M-85.3 0h682.6v512H-85.3z"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
<g clip-path="url(#a)" transform="translate(80) scale(.9375)">
|
||||||
|
<path fill="#3e5eb9" fill-rule="evenodd" d="M-128 0h768v512h-768z"/>
|
||||||
|
<path fill="#ffd900" fill-rule="evenodd" d="M-128 91.4h768v329.2h-768z"/>
|
||||||
|
<path fill="#b10c0c" fill-rule="evenodd" d="M-128 128h768v256h-768z"/>
|
||||||
|
<rect width="621.7" height="11" x="-51.4" y="250.5" fill="#ffd900" fill-rule="evenodd" stroke="#000" stroke-width="1.5" rx="5.8" ry="5.8"/>
|
||||||
|
<g stroke="#000" transform="translate(-757 -25.6) scale(1.0321)">
|
||||||
|
<path fill="#fff" fill-rule="evenodd" stroke-width="4.2" d="M-106.3 265.8l-88.6 35.4 88.6 35.4 88.6-35.4-88.6-35.4z" transform="matrix(.34 0 0 .3 1256.8 136.4)"/>
|
||||||
|
<rect width="442.9" height="7.1" x="761.8" y="223.2" fill="#ffd900" fill-rule="evenodd" stroke-width="1.3" rx="4.1" ry="3.8"/>
|
||||||
|
<path fill="none" stroke-width="2.7" d="M1224.4 280c-3.5 0-7-3.6-7-7.2s3.5-7 7-7" transform="matrix(-.50001 0 0 .5 1806.3 90.3)"/>
|
||||||
|
<path fill="none" stroke-width="2.7" d="M1224.4 280c-3.5 0-7-3.6-7-7.2s3.5-7 7-7" transform="matrix(-.50001 0 0 .5 1802.8 90.3)"/>
|
||||||
|
<path fill="none" stroke-width="2.7" d="M1224.4 280c-3.5 0-7-3.6-7-7.2s3.5-7 7-7" transform="matrix(-.50001 0 0 .5 1799.2 90.4)"/>
|
||||||
|
</g>
|
||||||
|
<g stroke="#000" transform="translate(-786.3 -3.7) scale(1.0321)">
|
||||||
|
<path fill="#fff" fill-rule="evenodd" stroke-width="4.2" d="M-106.3 265.8l-88.6 35.4 88.6 35.4 88.6-35.4-88.6-35.4z" transform="matrix(.34 0 0 .3 1256.8 136.4)"/>
|
||||||
|
<rect width="442.9" height="7.1" x="761.8" y="223.2" fill="#ffd900" fill-rule="evenodd" stroke-width="1.3" rx="4.1" ry="3.8"/>
|
||||||
|
<path fill="none" stroke-width="2.7" d="M1224.4 280c-3.5 0-7-3.6-7-7.2s3.5-7 7-7" transform="matrix(-.50001 0 0 .5 1806.3 90.3)"/>
|
||||||
|
<path fill="none" stroke-width="2.7" d="M1224.4 280c-3.5 0-7-3.6-7-7.2s3.5-7 7-7" transform="matrix(-.50001 0 0 .5 1802.8 90.3)"/>
|
||||||
|
<path fill="none" stroke-width="2.7" d="M1224.4 280c-3.5 0-7-3.6-7-7.2s3.5-7 7-7" transform="matrix(-.50001 0 0 .5 1799.2 90.4)"/>
|
||||||
|
</g>
|
||||||
|
<g fill-rule="evenodd">
|
||||||
|
<path fill="#3d5da7" stroke="#000" stroke-width="1.4" d="M338-.4c-5.5 12.4 4.3-4.1 28.4 16.7 4.4 3.8 8.3 14 8.3 21.1-1.1-1-2-3-3.2-4.5-1.8 2.3 1.7 12.6 2.2 17.5-3.8-2.7-3.4-4-4.7-7.4.3 4-.6 15.2.9 19.4-3-1-2.8-4.1-4.3-4.8 1 4.9-1 10.1-.4 15.6-1.8-2.2-3.6-4-4.4-4.9-.1 2.6-3.3 9.4-3.4 11.9-1.5-1.2-1.9-3-2.1-4.2-1.8 3-8.3 14-8.7 17.2-5-5.7-17.8-19.5-19.5-26.9-1.5 4.2-3.6 5.6-7.8 8.7-1.7-11.7-8-24.8-4.6-34.8a84.4 84.4 0 0 0-6.6 5.9A67.9 67.9 0 0 1 338-.4z" transform="matrix(.9944 0 0 .77118 190.4 252)"/>
|
||||||
|
<path fill="#a70000" d="M505.9 299.2c2.3-4.6 4.4-6 5.9-9 2.6-5.2 3-9.4 5.3-8.8 2.3.6 2.3 2.8-.7 7.9-3 5-4.4 6.2-10.5 9.9zm15.5 11c-.3-3.6.8-5 .6-7.3-.3-4-2-6.7.1-6.9 2.1-.2 3.1 1.2 3.1 5.2s-.6 5-3.8 9zm11.8 6.8c-.9-5-.2-7-.8-10.2-1-5.6-3-9.2-1-9.7 1.9-.5 3 1.3 3.8 6.9.7 5.6.3 7.2-2 13zm12.3-34.3c-2.9-2.1-4.6-2.3-6.4-3.7-3.3-2.5-5-5.1-6-3.8-1 1.3-.3 2.7 3.1 5 3.5 2.3 4.6 2.5 9.3 2.5zm-2 16.3c-1.5-3.2-3.1-4-4.1-6-1.8-3.6-1.8-6.7-3.6-5.9-2 .8-2 2.4 0 5.9 2 3.4 3 4 7.7 6z"/>
|
||||||
|
</g>
|
||||||
|
<g fill-rule="evenodd">
|
||||||
|
<path fill="#3d5da7" stroke="#000" stroke-width="1.4" d="M329.6 20.7c-.3-2.7.3-3-1.3-5 2.2 1 2.3 3.7 5 1.8 1-.6 1.4-.6.2-3.5 2.8 0 12 3.5 13.4 3.6 3.9.2 10.9-4.4 15.7 1.2 4.7 5.1 3.1 10.4 3.1 17.5-1.8-1-1-1.4-3-4 1.6 6.2 0 17.4 0 24-.8-1.6-.7-1-1.4-2.6-2 6-4.4 7.3-4.4 14.3-.7-2.7 0-2.2-.8-3.6-2 4.5-15 8.4-10 13-4.4-2.8-6.4-2.5-8.5-5.1-.9.6-1.6 1.8-2.4 3.4-8-4-5-12.5-11.3-18.2-1 2.4-.6 2-1.8 5.9-1.2-5.4-1.6-8.9-3-12.8-1.2 2.2-1 1.3-3.3 4.7-1-6.6-2.4-8.2-1.8-12.5-2.4 1.8-.8 1-3.2 3.3 2.2-17 11.9-29.4 18.8-25.4z" transform="matrix(1.1372 0 0 1.0495 -399.4 239.2)"/>
|
||||||
|
<path fill="#a70000" d="M-35.7 289.8c2.3-5.7 4.4-7.5 6-11.2 2.6-6.4 3-11.6 5.2-10.8 2.3.8 2.2 3.4-.8 9.8a25 25 0 0 1-10.4 12.2zm8.8 14.3c1-5.1 2.4-7 3-10.3 1-5.8.5-10.1 2.6-9.9 2 .3 2.5 2.4 1.1 8.2-1.4 5.8-2.3 7.1-6.7 12zm10.5 9.9c.3-5 1.5-6.9 1.6-10 .3-5.7-.7-9.7 1.2-9.7 2 0 2.7 2 2.1 7.6-.6 5.6-1.3 7-4.9 12zm22.7-32.4c-4.4-4.3-7-5.1-9.8-8-4.9-4.8-7.3-9.4-9-7.7-1.8 1.6-.7 4 4.5 8.7 5.2 4.6 7 5.2 14.3 7zm-2.7 16.6C.8 294-1.2 292.8-3 290c-3.2-4.9-4.3-9.1-6-8-2 1-1.5 3.2 2 8 3.4 4.7 4.8 5.5 10.7 8.2z"/>
|
||||||
|
</g>
|
||||||
|
<g fill-rule="evenodd">
|
||||||
|
<path fill="#fff" stroke="#000" stroke-width="2.1" d="M637.8 230.3c-53.1 59-124 177.2-265.8 177.2-124 0-212.6-118.1-265.7-177.2C159.4 171.3 248 53.2 372 53.2c141.8 0 212.6 118 265.8 177.1z" transform="matrix(.68807 0 0 .61926 0 113.4)"/>
|
||||||
|
<path d="M243.2 184.4c9.8 11 1.6 15.4 12 16.1 10.8.8 4.6 11.6 13.8 12 6.4.2-.7 25.7 5.5 34.2 6.3 8.7 11.5 2.5 11.6 8.9.1 6.5-17 5.9-17.3 26-.5 11.7-14.5 12.5-15.2 20-.8 7 27.5 11 27.2 17.3-.4 6.3-30.7 5.3-32 12.4-.6 6.5 41.6 11.8 45 30.4-6.3 2-24.3 4-37.8 4-85.3 0-146.3-73.1-182.9-109.7 36.6-36.6 97.6-109.7 182.9-109.7 0 0-25.3 23.1-12.8 38.2z"/>
|
||||||
|
<path fill="#fff" stroke-width="1pt" d="M141.4 217h8.9v29.2h-8.9zm0 48.8h8.9V295h-8.9zm17.7-48.8h8.9v29.2h-8.9zm0 48.8h8.9V295h-8.9zM177 217h8.8v29.2H177zm0 48.8h8.8V295H177zm17.7-48.8h8.9v29.2h-8.9zm0 48.8h8.9V295h-8.9zm17.7-48.8h8.9v29.2h-8.9zm0 48.8h8.9V295h-8.9zm17.8-48.8h8.8v29.2h-8.8zm0 48.8h8.8V295h-8.8z"/>
|
||||||
|
<path stroke-width="1pt" d="M275.5 217h8.9v29.2h-8.9zm0 48.8h8.9V295h-8.9zm17.7-48.8h8.9v29.2h-8.9zm0 48.8h8.9V295h-8.9zM311 217h8.8v29.2H311zm0 48.8h8.8V295H311zm17.7-48.8h8.9v29.2h-9zm0 48.8h8.9V295h-9zm17.7-48.8h8.9v29.2h-8.9zm0 48.8h8.9V295h-8.9zm17.8-48.8h8.8v29.2h-8.8zm0 48.8h8.8V295h-8.8z"/>
|
||||||
|
</g>
|
||||||
|
<g fill-rule="evenodd">
|
||||||
|
<path fill="#3d5da7" stroke="#000" stroke-width="1.4" d="M338-.4c-5.5 12.4 9.8-4.1 33.8 16.7a51.2 51.2 0 0 1 10.9 26.2c-5.1-1.2-14.2-7-14.2-7s10.6 12.2 10.6 26.4c-3.7-2.7-5.6-2.3-6.8-5.6 0 4.5 3.3 7.5 3.3 14.6a49.8 49.8 0 0 0-7.3-5.7c3.5 7.1-6.5 20.9-1.5 25.5-8.7-1.5-17.7-8-21.2-15-1.9 1.4-2 3.7-2.2 6.2.3.2-13.3-11.7-12-16.3-1.9 3-2.1 4.6-2.5 8a44 44 0 0 1-11.3-18.8l-4.6 6.7c-1.6-11.7-1.6-11.3 1.7-21.3a84.4 84.4 0 0 0-6.6 5.9A67.8 67.8 0 0 1 338-.4z" transform="matrix(.9094 0 0 .78749 -110.6 166.1)"/>
|
||||||
|
<path fill="#a70000" d="M184.4 213.6c.8-6.7 2.5-9.3 3-13.6 1-7.7-.1-13.2 2.6-13.1 2.7.1 3.5 3 2.2 10.6-1.4 7.6-2.5 9.5-7.8 16.1zm14.1 12.4c-.5-5.7.5-8.1.2-11.8-.6-6.4-2.6-10.8-.3-11.2 2.4-.4 3.6 1.7 3.8 8.3.3 6.5-.3 8.2-3.7 14.7zm22.1 10c-2.4-4.8-4.5-6.3-6-9.5-2.8-5.6-3.3-10.1-5.4-9.3-2.2.8-2 3.2 1 8.7 3 5.4 4.5 6.5 10.4 10.2zm7.6-44c-6-3.3-9.2-3.3-13.2-5.4-6.9-3.6-11-7.7-12.4-5.5-1.4 2.3.5 4.5 7.7 7.8 7.1 3.3 9.3 3.5 18 3zm2.3 18.4c-4.5-3.7-7.1-4.3-10-6.7-5-4.1-7.6-8.2-9.3-6.6-1.6 1.7-.5 3.9 4.8 7.8 5.3 4 7.1 4.5 14.5 5.5z"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 6.6 KiB |
15
public/img/flags/tf.svg
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="flag-icon-css-tf" viewBox="0 0 640 480">
|
||||||
|
<defs>
|
||||||
|
<path id="a" fill="#fff" d="M0-21l12.3 38L-20-6.5h40L-12.3 17z"/>
|
||||||
|
</defs>
|
||||||
|
<path fill="#002395" d="M0 0h640v480H0z"/>
|
||||||
|
<path fill="#fff" d="M0 0h292.8v196.8H0z"/>
|
||||||
|
<path fill="#002395" d="M0 0h96v192H0z"/>
|
||||||
|
<path fill="#ed2939" d="M192 0h96v192h-96z"/>
|
||||||
|
<path fill="#fff" d="M426 219.6l15.4 24.6h44V330l-33-51.6-44.4 70.8h21.6l22.8-40.8 46.8 84 46.8-84 22.8 40.8h21.6L546 278.4 513 330v-47.4h19.8l14.7-23.4H513v-15h44l15.4-24.6H426zm51.6 105h-48v16.8h48zm91.2 0h-48v16.8h48z"/>
|
||||||
|
<use width="100%" height="100%" x="416" y="362" transform="scale(1.2)" xlink:href="#a"/>
|
||||||
|
<use width="100%" height="100%" x="371" y="328" transform="scale(1.2)" xlink:href="#a"/>
|
||||||
|
<use width="100%" height="100%" x="461" y="328" transform="scale(1.2)" xlink:href="#a"/>
|
||||||
|
<use width="100%" height="100%" x="333" y="227" transform="scale(1.2)" xlink:href="#a"/>
|
||||||
|
<use width="100%" height="100%" x="499" y="227" transform="scale(1.2)" xlink:href="#a"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
15
public/img/flags/um.svg
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icon-css-um" viewBox="0 0 640 480">
|
||||||
|
<defs>
|
||||||
|
<clipPath id="a">
|
||||||
|
<path fill-opacity=".7" d="M0 0h682.7v512H0z"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
<g fill-rule="evenodd" clip-path="url(#a)" transform="scale(.9375)">
|
||||||
|
<g stroke-width="1pt">
|
||||||
|
<path fill="#bd3d44" d="M0 0h972.8v39.4H0zm0 78.8h972.8v39.4H0zm0 78.7h972.8V197H0zm0 78.8h972.8v39.4H0zm0 78.8h972.8v39.4H0zm0 78.7h972.8v39.4H0zm0 78.8h972.8V512H0z"/>
|
||||||
|
<path fill="#fff" d="M0 39.4h972.8v39.4H0zm0 78.8h972.8v39.3H0zm0 78.7h972.8v39.4H0zm0 78.8h972.8v39.4H0zm0 78.8h972.8v39.4H0zm0 78.7h972.8v39.4H0z"/>
|
||||||
|
</g>
|
||||||
|
<path fill="#192f5d" d="M0 0h389.1v275.7H0z"/>
|
||||||
|
<path fill="#fff" d="M32.4 11.8L36 22.7h11.4l-9.2 6.7 3.5 11-9.3-6.8-9.2 6.7 3.5-10.9-9.3-6.7H29zm64.9 0l3.5 10.9h11.5l-9.3 6.7 3.5 11-9.2-6.8-9.3 6.7 3.5-10.9-9.2-6.7h11.4zm64.8 0l3.6 10.9H177l-9.2 6.7 3.5 11-9.3-6.8-9.2 6.7 3.5-10.9-9.3-6.7h11.5zm64.9 0l3.5 10.9H242l-9.3 6.7 3.6 11-9.3-6.8-9.3 6.7 3.6-10.9-9.3-6.7h11.4zm64.8 0l3.6 10.9h11.4l-9.2 6.7 3.5 11-9.3-6.8-9.2 6.7 3.5-10.9-9.2-6.7h11.4zm64.9 0l3.5 10.9h11.5l-9.3 6.7 3.6 11-9.3-6.8-9.3 6.7 3.6-10.9-9.3-6.7h11.5zM64.9 39.4l3.5 10.9h11.5L70.6 57 74 67.9l-9-6.7-9.3 6.7L59 57l-9-6.7h11.4zm64.8 0l3.6 10.9h11.4l-9.3 6.7 3.6 10.9-9.3-6.7-9.3 6.7L124 57l-9.3-6.7h11.5zm64.9 0l3.5 10.9h11.5l-9.3 6.7 3.5 10.9-9.2-6.7-9.3 6.7 3.5-10.9-9.2-6.7H191zm64.8 0l3.6 10.9h11.4l-9.3 6.7 3.6 10.9-9.3-6.7-9.2 6.7 3.5-10.9-9.3-6.7H256zm64.9 0l3.5 10.9h11.5L330 57l3.5 10.9-9.2-6.7-9.3 6.7 3.5-10.9-9.2-6.7h11.4zM32.4 66.9L36 78h11.4l-9.2 6.7 3.5 10.9-9.3-6.8-9.2 6.8 3.5-11-9.3-6.7H29zm64.9 0l3.5 11h11.5l-9.3 6.7 3.5 10.9-9.2-6.8-9.3 6.8 3.5-11-9.2-6.7h11.4zm64.8 0l3.6 11H177l-9.2 6.7 3.5 10.9-9.3-6.8-9.2 6.8 3.5-11-9.3-6.7h11.5zm64.9 0l3.5 11H242l-9.3 6.7 3.6 10.9-9.3-6.8-9.3 6.8 3.6-11-9.3-6.7h11.4zm64.8 0l3.6 11h11.4l-9.2 6.7 3.5 10.9-9.3-6.8-9.2 6.8 3.5-11-9.2-6.7h11.4zm64.9 0l3.5 11h11.5l-9.3 6.7 3.6 10.9-9.3-6.8-9.3 6.8 3.6-11-9.3-6.7h11.5zM64.9 94.5l3.5 10.9h11.5l-9.3 6.7 3.5 11-9.2-6.8-9.3 6.7 3.5-10.9-9.2-6.7h11.4zm64.8 0l3.6 10.9h11.4l-9.3 6.7 3.6 11-9.3-6.8-9.3 6.7 3.6-10.9-9.3-6.7h11.5zm64.9 0l3.5 10.9h11.5l-9.3 6.7 3.5 11-9.2-6.8-9.3 6.7 3.5-10.9-9.2-6.7H191zm64.8 0l3.6 10.9h11.4l-9.2 6.7 3.5 11-9.3-6.8-9.2 6.7 3.5-10.9-9.3-6.7H256zm64.9 0l3.5 10.9h11.5l-9.3 6.7 3.5 11-9.2-6.8-9.3 6.7 3.5-10.9-9.2-6.7h11.4zM32.4 122.1L36 133h11.4l-9.2 6.7 3.5 11-9.3-6.8-9.2 6.7 3.5-10.9-9.3-6.7H29zm64.9 0l3.5 10.9h11.5l-9.3 6.7 3.5 10.9-9.2-6.7-9.3 6.7 3.5-10.9-9.2-6.7h11.4zm64.8 0l3.6 10.9H177l-9.2 6.7 3.5 11-9.3-6.8-9.2 6.7 3.5-10.9-9.3-6.7h11.5zm64.9 0l3.5 10.9H242l-9.3 6.7 3.6 11-9.3-6.8-9.3 6.7 3.6-10.9-9.3-6.7h11.4zm64.8 0l3.6 10.9h11.4l-9.2 6.7 3.5 11-9.3-6.8-9.2 6.7 3.5-10.9-9.2-6.7h11.4zm64.9 0l3.5 10.9h11.5l-9.3 6.7 3.6 11-9.3-6.8-9.3 6.7 3.6-10.9-9.3-6.7h11.5zM64.9 149.7l3.5 10.9h11.5l-9.3 6.7 3.5 10.9-9.2-6.8-9.3 6.8 3.5-11-9.2-6.7h11.4zm64.8 0l3.6 10.9h11.4l-9.3 6.7 3.6 10.9-9.3-6.8-9.3 6.8 3.6-11-9.3-6.7h11.5zm64.9 0l3.5 10.9h11.5l-9.3 6.7 3.5 10.9-9.2-6.8-9.3 6.8 3.5-11-9.2-6.7H191zm64.8 0l3.6 10.9h11.4l-9.2 6.7 3.5 10.9-9.3-6.8-9.2 6.8 3.5-11-9.3-6.7H256zm64.9 0l3.5 10.9h11.5l-9.3 6.7 3.5 10.9-9.2-6.8-9.3 6.8 3.5-11-9.2-6.7h11.4zM32.4 177.2l3.6 11h11.4l-9.2 6.7 3.5 10.8-9.3-6.7-9.2 6.7 3.5-10.9-9.3-6.7H29zm64.9 0l3.5 11h11.5l-9.3 6.7 3.6 10.8-9.3-6.7-9.3 6.7 3.6-10.9-9.3-6.7h11.4zm64.8 0l3.6 11H177l-9.2 6.7 3.5 10.8-9.3-6.7-9.2 6.7 3.5-10.9-9.3-6.7h11.5zm64.9 0l3.5 11H242l-9.3 6.7 3.6 10.8-9.3-6.7-9.3 6.7 3.6-10.9-9.3-6.7h11.4zm64.8 0l3.6 11h11.4l-9.2 6.7 3.5 10.8-9.3-6.7-9.2 6.7 3.5-10.9-9.2-6.7h11.4zm64.9 0l3.5 11h11.5l-9.3 6.7 3.6 10.8-9.3-6.7-9.3 6.7 3.6-10.9-9.3-6.7h11.5zM64.9 204.8l3.5 10.9h11.5l-9.3 6.7 3.5 11-9.2-6.8-9.3 6.7 3.5-10.9-9.2-6.7h11.4zm64.8 0l3.6 10.9h11.4l-9.3 6.7 3.6 11-9.3-6.8-9.3 6.7 3.6-10.9-9.3-6.7h11.5zm64.9 0l3.5 10.9h11.5l-9.3 6.7 3.5 11-9.2-6.8-9.3 6.7 3.5-10.9-9.2-6.7H191zm64.8 0l3.6 10.9h11.4l-9.2 6.7 3.5 11-9.3-6.8-9.2 6.7 3.5-10.9-9.3-6.7H256zm64.9 0l3.5 10.9h11.5l-9.3 6.7 3.5 11-9.2-6.8-9.3 6.7 3.5-10.9-9.2-6.7h11.4zM32.4 232.4l3.6 10.9h11.4l-9.2 6.7 3.5 10.9-9.3-6.7-9.2 6.7 3.5-11-9.3-6.7H29zm64.9 0l3.5 10.9h11.5L103 250l3.6 10.9-9.3-6.7-9.3 6.7 3.6-11-9.3-6.7h11.4zm64.8 0l3.6 10.9H177l-9 6.7 3.5 10.9-9.3-6.7-9.2 6.7 3.5-11-9.3-6.7h11.5zm64.9 0l3.5 10.9H242l-9.3 6.7 3.6 10.9-9.3-6.7-9.3 6.7 3.6-11-9.3-6.7h11.4zm64.8 0l3.6 10.9h11.4l-9.2 6.7 3.5 10.9-9.3-6.7-9.2 6.7 3.5-11-9.2-6.7h11.4zm64.9 0l3.5 10.9h11.5l-9.3 6.7 3.6 10.9-9.3-6.7-9.3 6.7 3.6-11-9.3-6.7h11.5z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 4.4 KiB |
7
public/img/flags/wf.svg
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icon-css-wf" viewBox="0 0 640 480">
|
||||||
|
<g fill-rule="evenodd" stroke-width="1pt">
|
||||||
|
<path fill="#fff" d="M0 0h640v480H0z"/>
|
||||||
|
<path fill="#00267f" d="M0 0h213.3v480H0z"/>
|
||||||
|
<path fill="#f31830" d="M426.7 0H640v480H426.7z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 292 B |
7
public/img/flags/yt.svg
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icon-css-yt" viewBox="0 0 640 480">
|
||||||
|
<g fill-rule="evenodd" stroke-width="1pt">
|
||||||
|
<path fill="#fff" d="M0 0h640v480H0z"/>
|
||||||
|
<path fill="#00267f" d="M0 0h213.3v480H0z"/>
|
||||||
|
<path fill="#f31830" d="M426.7 0H640v480H426.7z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 292 B |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
BIN
public/img/logos/adulttime/lazy/favicon_dark.png
Normal file
|
After Width: | Height: | Size: 5.9 KiB |
BIN
public/img/logos/adulttime/lazy/favicon_light.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |