Added lazy loading to tag photos. Changed tag thumb location.

This commit is contained in:
ThePendulum 2020-04-08 14:50:43 +02:00
parent 24b297011e
commit cb68319ac0
1451 changed files with 324 additions and 414 deletions

404
README.md
View File

@ -6,16 +6,19 @@ Use [nvm](https://github.com/creationix/nvm) to install a recent version of Node
`npm install`
### Set up database
Install PostgreSQL, make sure password authentication is enabled (scram-sha-256) and create a database with a privileged user.
For optimal search engine performance, copy `traxxx.stop` to your PostgresQL text search directory, usually `/usr/share/postgresql/tsearch_data/ or `/usr/local/share/postgresql/tsearch_data/`.
`npm run migrate`
`npm run seed`
`npm start`
For optimal search engine performance, copy `traxxx.stop` to your PostgresQL text search directory, usually `/usr/share/postgresql/tsearch_data/ or `/usr/local/share/postgresql/tsearch_data/`.
### Configuration
Do not modify `config/default.js`, but instead create a copy at `config/local.js` containing the properties you wish to change.
Do not modify `config/default.js`, but instead create a copy at `config/local.js` containing the properties you wish to change. If you have set `NODE_ENV`, copy `assets/js/config/default.js` to `assets/js/config/[environment].js`.
### Options
`npm start -- --option value`
@ -35,336 +38,67 @@ Running `npm start` without any arguments will run the web server.
* `--debug`: Show full error stack trace.
## Supported networks & sites
285 sites on 15 networks, continuously expanding!
* **21Sextury**
* Anal Teen Angels
* Asshole Fever
* Butt Plays
* Club Sandy
* DP Fanatics
* Deepthroat Frenzy
* Footsie Babes
* Gapeland
* Lez Cuties
* Pix and Video
* **Bang Bros**
* Ass Parade
* AvaSpice
* Back Room Facials
* Backroom MILF
* Ball Honeys
* Bang Bus
* Bang Casting
* Bang POV
* Bang Tryouts
* BangBros 18
* BangBros Angels
* BangBros Remastered
* Bangbros Clips
* Big Mouthfuls
* Big Tit Cream Pie
* Big Tits, Round Asses
* BlowJob Fridays
* Blowjob Ninjas
* Boob Squad
* Brown Bunnies
* Can He Score?
* Casting
* Chongas
* Colombia Fuck Fest
* Dirty World Tour
* Dorm Invasion
* Facial Fest
* Fuck Team Five
* Glory Hole Loads
* Latina Rampage
* Living With Anna
* MILF Lessons
* Magical Feet
* Milf Soup
* MomIsHorny
* Monsters of Cock
* Mr CamelToe
* Mr. Anal
* My Dirty Maid
* My Life In Brazil
* Newbie Black
* Party of 3
* Pawg
* Penny Show
* Porn Star Spa
* Power Munch
* Public Bang
* Slutty White Girls
* Stepmom Videos
* Street Ranger
* Tugjobs
* Working Latinas
* **Blowpass**
* 1000 Facials
* Immoral Live
* Mommy Blows Best
* Only Teen Blowjobs
* Throated
* **Brazzers**
* Asses In Public
* Baby Got Boobs
* Big Butts Like It Big
* Big Tits In Sports
* Big Tits In Uniform
* Big Tits at School
* Big Tits at Work
* Big Wet Butts
* Brazzers Exxtra
* Brazzers Live
* Brazzers Vault
* Brazzers en Español
* Busty & Real
* Bustyz
* Butts & Blacks
* CFNM
* Day With A Pornstar
* Dirty Masseur
* Doctor Adventures
* Hot And Mean
* Hot Chicks Big Asses
* JugFuckers
* Milfs Like it Big
* Mommy Got Boobs
* Moms in Control
* Pornstars Like it Big
* Racks & Blacks
* Real Wife Stories
* SexPro Adventures
* Shes Gonna Squirt
* Teens Like It Big
* Teens Like It Black
* ZZ Series
* **DDF Network**
* 1By-Day
* DDF Busty
* DDF Network VR
* Euro Girls on Girls
* Euro Teen Erotica
* Hands on Hardcore
* Hot Legs and Feet
* House of Taboo
* Only Blowjob
* **Dogfart Network**
* Barb Cummings
* Black Meat White Feet
* Blacks On Blondes
* Blacks On Boys
* Blacks On Cougars
* Candy Monroe
* Cuckold Sessions
* Cumbang
* Dogfart Behind The Scenes
* Glory Hole
* Gloryholes And Handjobs
* Gloryholy Initiations
* Interracial Blowbang
* Interracial Pickups
* Katie Thomas
* Ruth Blackwell
* Spring Thomas
* The Minion
* Watching My Daughter Go Black
* Watching My Mom Go Black
* We Fuck Black Girls
* Wife Writing
* Zebra Girls
* **Evil Angel**
* **Jules Jordan**
* **Kink**
* 30 Minutes of Torment
* Bound Gangbangs
* Bound Gods
* Bound in Public
* Brutal Sessions
* Butt Machine Boys
* Device Bondage
* Devine Bitches
* Electrosluts
* Everything Butt
* Families Tied
* Foot Worship
* Fucked and Bound
* Fucking Machines
* Hardcore Gangbang
* Hogtied
* Kink University
* Men In Pain
* Men on Edge
* Naked Kombat
* Public Disgrace
* Sadistic Rope
* Sex and Submission
* The Training of O
* The Upper Floor
* TS Pussy Hunters
* TS Seduction
* Ultimate Surrender
* Water Bondage
* Whipped Ass
* Wired Pussy
* **LegalPorno**
* **Mike Adriano**
* All Anal
* True Anal
* Nympho
* Swallowed
* **MOFOS**
* Blogs
* Don't Break Me
* Ebony Sex Tapes
* Girls Gone Pink
* I Know That Girl
* Latina Sex Tapes
* Lets Try Anal
* MOFOS Lab
* Mofos B Sides
* Pervs On Patrol
* Public Pickups
* Real Slut Party
* Share My BF
* She's A Freak
* Stranded Teens
* **Naughty America**\*
* 2 Chicks Same Time
* American Daydreams
* Anal College
* Asian 1 On 1
* Ass Masterpiece
* Big Cock Bully
* Diary of a Milf
* Diary of a Nanny
* Dirty Wives Club
* Fast Times
* Housewife 1 on 1
* I Have a Wife
* LA Sluts
* Latin Adultery
* Latina Step Mom
* Lesbian Girl on Girl
* Live Gym Cam
* Live Naughty Milf
* Live Naughty Nurse
* Live Naughty Secretary
* Live Naughty Student
* Live Naughty Teacher
* Live Party Girl
* Milf Sugar Babes Classic
* My Dad's Hot Girlfriend
* My Daughter's Hot Friend
* My First Sex Teacher
* My Friend's Hot Girl
* My Friend's Hot Mom
* My Girl Loves Anal
* My Girlfriend's Busty Friend
* My Naughty Latin Maid
* My Naughty Massage
* My Sister's Hot Friend
* My Wife Is My Pornstar
* My Wife's Hot Friend
* Naughty America
* Naughty Athletics
* Naughty Bookworms
* Naughty Country Girls
* Naughty Flipside
* Naughty Office
* Naughty Rich Girls
Naughty Weddings
* Neighbor Affair
* Open Family
* Perfect Fucking Strangers Classic
* Seduced By A Cougar
* Sleazy Stepdad
* Slut Step Mom
* Slut Step Sister
* Socal Coeds
* Teens Love Cream
* The Passenger
* Tonight's Girlfriend
* Watch Your Mom
* Watch Your Wife
* Wives on Vacation
* **Perv City**
* Anal Overdose
* Banging Beauties
* Chocolate BJs
* Oral Overdose
* Up Her Asshole
* **Private**
* Anal Introductions
* Blacks on Sluts
* I Confess Files
* Mission: Ass Possible
* Private Fetish
* Private MILFs
* Private Stars
* Russian Fake Agent
* Russian Teen Ass
* Sex on the Beach
* Tight and Teen
* **Reality Kings**\*
* 40 Inch Plus\*
* 8th Street Latinas
* Bad Tow Truck\*
* Big Naturals
* Big Tits Boss\*
* Bikini Crashers\*
* CFNM Secret\*
* Captain Stabbin\*
* Cum Fiesta
* Cum Girls\*
* Dangerous Dongs\*
* Euro Sex Parties\*
* Extreme Asses\*
* Extreme Naturals\*
* First Time Auditions\*
* Flower Tucci\*
* Girls of Naked\*
* HD Love\*
* Happy Tugs
* Hot Bush\*
* In the VIP\*
* Mike in Brazil\*
* Mike's Apartment\*
* Milf Hunter
* Milf Next Door\*
* Moms Bang Teens
* Moms Lick Teens
* Money Talks
* Monster Curves\*
* No Faces\*
* Pure 18\*
* RK Prime\*
* Real Orgasms\*
* Round and Brown
* Saturday Night Latinas\*
* See My Wife\*
* Sneaky Sex
* Street BlowJobs\*
* Team Squirt\*
* Teens Love Huge Cocks
* Top Shelf Pussy\*
* Tranny Surprise
* VIP Crew\*
* We Live Together
* Wives in Pantyhose\*
* **Vixen**
* Blacked
* Blacked Raw
* Tushy
* Tushy Raw
* Vixen
* **XEmpire**
* DarkX
* EroticaX
* HardX
* LesbianX
768 sites on 62 networks, continuously expanding!
## Notes
* **Naughty America**: Scene titles are not shown in NA's 'latest' overviews. They are derived from a hyperlink and will be stripped of any punctuation and capitalization. Individual scenes fetched by URL with `--scene` are not affected.
* **Reality Kings**: Only RK sites without a `*` can be fetched individually by URL using `--scene`, as most RK sites do not show comprehensive details on their scene pages.
* 21Naturals
* 21Sextreme
* 21Sextury
* Adult Time
* Amateur Allure
* Assylum
* Aziani
* Babes
* BAM Visions
* Bang!
* Bang Bros
* Blowpass
* Brazzers
* Burning Angel
* Cherry Pimps
* DDF Network
* Digital Playground
* Dogfart Network
* Evil Angel
* Fake Hub
* Fame Digital
* Fantasy Massage
* Full Porn Network
* Gamma Entertainment
* Girlsway
* Hush
* Hush Pass
* Hussie Pass
* Insex
* Interracial Pass
* JayRock Productions
* Jesse Loads Monster Facials
* Jules Jordan
* Kelly Madison Media
* Kink
* LegalPorno
* Men
* Metro HD
* Mike Adriano
* Mile High Media
* Mind Geek
* MOFOS
* Naughty America
* New Sensations
* Nubiles
* Perfect Gonzo
* Perv City
* Pimp.XXX
* Porn Pros
* Private
* Pure Taboo
* Reality Kings
* SCORE
* Sexy Hub
* Team Skeet
* Twistys
* Vivid
* Vixen
* VogoV
* Whale Member
* Wicked
* XEmpire

View File

@ -6,11 +6,16 @@
>
<h3 class="heading">{{ category }}</h3>
<div class="tiles">
<div
:key="sfw"
v-lazy-container
class="tiles"
>
<Tag
v-for="tag in tags"
:key="`tag-${tag.id}`"
:tag="tag"
:lazy="true"
/>
</div>
</div>
@ -20,6 +25,10 @@
<script>
import Tag from '../tile/tag.vue';
function sfw() {
return this.$store.state.ui.sfw;
}
async function mounted() {
const tagSlugsByCategory = {
popular: [
@ -29,21 +38,14 @@ async function mounted() {
'mfm',
'interracial',
'blowjob',
'facial',
'creampie',
'teen',
'milf',
'orgy',
'gangbang',
'double-penetration',
'airtight',
],
extreme: [
'double-anal',
'double-vaginal',
'da-tp',
'dv-tp',
'triple-anal',
'facial',
'creampie',
'teen',
'milf',
],
oral: [
'deepthroat',
@ -54,13 +56,6 @@ async function mounted() {
'ass-eating',
'ass-to-mouth',
],
cumshot: [
'facial',
'bukkake',
'creampie',
'anal-creampie',
'cum-in-mouth',
],
appearance: [
'asian',
'ebony',
@ -70,6 +65,20 @@ async function mounted() {
'brunette',
'redhead',
],
cumshot: [
'facial',
'bukkake',
'creampie',
'anal-creampie',
'cum-in-mouth',
],
extreme: [
'double-anal',
'double-vaginal',
'da-tp',
'dv-tp',
'triple-anal',
],
roleplay: [
'family',
'schoolgirl',
@ -105,6 +114,9 @@ export default {
pageTitle: null,
};
},
computed: {
sfw,
},
mounted,
};
</script>
@ -118,7 +130,7 @@ export default {
.tiles {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(20rem, .25fr));
grid-template-columns: repeat(auto-fit, minmax(23rem, .33fr));
grid-gap: 1rem;
margin: 0 0 1.5rem 0;
}
@ -130,7 +142,7 @@ export default {
@media(max-width: $breakpoint3) {
.tiles {
grid-template-columns: repeat(auto-fit, minmax(20rem, .5fr));
grid-template-columns: repeat(auto-fit, minmax(21rem, .5fr));
}
}

View File

@ -6,13 +6,41 @@
>
<span class="title">{{ tag.name }}</span>
<img
v-if="tag.poster"
:src="sfw ? `/img/${tag.poster.sfw.thumbnail}` : `/img/${tag.poster.thumbnail}`"
:title="sfw ? tag.poster.sfw.comment : tag.poster.comment"
:alt="tag.name"
class="poster"
>
<template v-if="tag.poster">
<img
v-if="!lazy && !sfw"
:src="`/img/${tag.poster.thumbnail}`"
:title="tag.poster.comment"
:alt="tag.name"
class="poster"
>
<img
v-if="!lazy && sfw"
:src="`/img/${tag.poster.sfw.thumbnail}`"
:title="tag.poster.sfw.comment"
:alt="tag.name"
class="poster"
>
<img
v-if="lazy && !sfw"
:data-src="`/img/${tag.poster.thumbnail}`"
:data-loading="`/img/${tag.poster.lazy}`"
:title="tag.poster.comment"
:alt="tag.name"
class="poster"
>
<img
v-if="lazy && sfw"
:data-src="`/img/${tag.poster.sfw.thumbnail}`"
:data-loading="`/img/${tag.poster.sfw.lazy}`"
:title="tag.poster.sfw.comment"
:alt="tag.name"
class="poster"
>
</template>
</router-link>
</template>
@ -27,6 +55,10 @@ export default {
type: Object,
default: null,
},
lazy: {
type: Boolean,
default: false,
},
},
computed: {
sfw,
@ -52,7 +84,7 @@ export default {
.poster {
width: 100%;
height: 16rem;
height: 17rem;
object-fit: cover;
object-position: 50% 100%;
}

View File

@ -1,6 +1,7 @@
import Vue from 'vue';
import dayjs from 'dayjs';
import VTooltip from 'v-tooltip';
import VueLazyLoad from 'vue-lazyload';
import dayjs from 'dayjs';
import router from './router';
import initStore from './store';
@ -43,6 +44,9 @@ function init() {
});
Vue.use(VTooltip);
Vue.use(VueLazyLoad, {
throttleWait: 0,
});
new Vue({ // eslint-disable-line no-new
el: '#container',

View File

@ -43,11 +43,13 @@ function initTagsActions(store, _router) {
media {
id
thumbnail
lazy
path
comment
sfw: sfwMedia {
id
thumbnail
lazy
path
comment
}
@ -123,9 +125,11 @@ function initTagsActions(store, _router) {
media {
thumbnail
comment
lazy
sfw: sfwMedia {
thumbnail
comment
lazy
}
}
}

View File

@ -23,6 +23,7 @@ exports.up = knex => Promise.resolve()
table.string('path');
table.string('thumbnail');
table.string('lazy');
table.integer('index');
table.string('mime');

105
package-lock.json generated
View File

@ -1066,6 +1066,11 @@
"tar": "^4.4.6"
}
},
"@tokenizer/token": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.1.1.tgz",
"integrity": "sha512-XO6INPbZCxdprl+9qa/AAbFFOMzzwqYxpjPgLICrMD6C2FCw6qfJOPcBk6JqqPLSaZ/Qx87qn4rpPmPMwaAK6w=="
},
"@types/accepts": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz",
@ -1107,6 +1112,11 @@
"@types/node": "*"
}
},
"@types/debug": {
"version": "4.1.5",
"resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.5.tgz",
"integrity": "sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ=="
},
"@types/express": {
"version": "4.17.2",
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.2.tgz",
@ -4449,6 +4459,17 @@
"moment": "^2.11.2"
}
},
"file-type": {
"version": "14.1.4",
"resolved": "https://registry.npmjs.org/file-type/-/file-type-14.1.4.tgz",
"integrity": "sha512-1n6FczX8n73Y/cLjTiMboeTGHfm/i2AWk2oQE7m9a/G5YTCZHCEHEGr32thhLm3iQNUYzTKVQUcYcNHtOLwqgQ==",
"requires": {
"readable-web-to-node-stream": "^2.0.0",
"strtok3": "^6.0.0",
"token-types": "^2.0.0",
"typedarray-to-buffer": "^3.1.5"
}
},
"file-uri-to-path": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
@ -5821,8 +5842,7 @@
"ieee754": {
"version": "1.1.13",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
"integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==",
"dev": true
"integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
},
"iferr": {
"version": "0.1.5",
@ -7358,14 +7378,6 @@
"resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.1.tgz",
"integrity": "sha512-boQj1WFgQH3v4clhu3mTNfP+vOBxorDlE8EKiMjUlLG3C4qAESnn9AxIOkFgTR2c9LtzNjPrjS60cT27ZKBhaA=="
},
"native-node-utils": {
"version": "0.2.7",
"resolved": "https://registry.npmjs.org/native-node-utils/-/native-node-utils-0.2.7.tgz",
"integrity": "sha512-61v0G3uVxWlXHppSZGwZi+ZEIgGUKI8QvEkEJLb1GVePI7P8SBe+G747z+QMXSt4TxfgbVZP0DyobbRKYVIjdw==",
"requires": {
"nan": "^2.13.2"
}
},
"natural-compare": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
@ -7892,26 +7904,6 @@
"mimic-fn": "^1.0.0"
}
},
"opencv-build": {
"version": "0.1.9",
"resolved": "https://registry.npmjs.org/opencv-build/-/opencv-build-0.1.9.tgz",
"integrity": "sha512-tgT/bnJAcYROen9yaPynfK98IMl62mPSgMLmTx41911m5bczlq21xtE5r+UWLB/xEo/0hKk6tl5zHyxV/JS5Rg==",
"requires": {
"npmlog": "^4.1.2"
}
},
"opencv4nodejs": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/opencv4nodejs/-/opencv4nodejs-5.5.0.tgz",
"integrity": "sha512-coQ/XuQnWh5ew7LhUYbAMXTHo3wEya/4nlDi99l+w/kk1uHw8nWy2OptVI74IxIlYQKKqNy4pv2DdMY0vheA/g==",
"requires": {
"@types/node": ">6",
"nan": "^2.14.0",
"native-node-utils": "^0.2.7",
"npmlog": "^4.1.2",
"opencv-build": "^0.1.9"
}
},
"opn": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz",
@ -8180,6 +8172,11 @@
"sha.js": "^2.4.8"
}
},
"peek-readable": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-3.1.0.tgz",
"integrity": "sha512-KGuODSTV6hcgdZvDrIDBUkN0utcAVj1LL7FfGbM0viKTtCHmtZcuEJ+lGqsp0fTFkGqesdtemV2yUSMeyy3ddA=="
},
"performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
@ -8957,6 +8954,11 @@
"util-deprecate": "~1.0.1"
}
},
"readable-web-to-node-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-2.0.0.tgz",
"integrity": "sha512-+oZJurc4hXpaaqsN68GoZGQAQIA3qr09Or4fqEsargABnbe5Aau8hFn6ISVleT3cpY/0n/8drn7huyyEvTbghA=="
},
"readdirp": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
@ -10502,6 +10504,27 @@
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
"integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
},
"strtok3": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.0.0.tgz",
"integrity": "sha512-ZXlmE22LZnIBvEU3n/kZGdh770fYFie65u5+2hLK9s74DoFtpkQIdBZVeYEzlolpGa+52G5IkzjUWn+iXynOEQ==",
"requires": {
"@tokenizer/token": "^0.1.1",
"@types/debug": "^4.1.5",
"debug": "^4.1.1",
"peek-readable": "^3.1.0"
},
"dependencies": {
"debug": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
"requires": {
"ms": "^2.1.1"
}
}
}
},
"style-loader": {
"version": "0.23.1",
"resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz",
@ -10859,6 +10882,15 @@
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
"integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
},
"token-types": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/token-types/-/token-types-2.0.0.tgz",
"integrity": "sha512-WWvu8sGK8/ZmGusekZJJ5NM6rRVTTDO7/bahz4NGiSDb/XsmdYBn6a1N/bymUHuWYTWeuLUg98wUzvE4jPdCZw==",
"requires": {
"@tokenizer/token": "^0.1.0",
"ieee754": "^1.1.13"
}
},
"tough-cookie": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz",
@ -11095,6 +11127,14 @@
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
"integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
},
"typedarray-to-buffer": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
"integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
"requires": {
"is-typedarray": "^1.0.0"
}
},
"umzug": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/umzug/-/umzug-2.2.0.tgz",
@ -11411,6 +11451,11 @@
"integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==",
"dev": true
},
"vue-lazyload": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/vue-lazyload/-/vue-lazyload-1.3.3.tgz",
"integrity": "sha512-uHnq0FTEeNmqnbBC2aRKlmtd9LofMZ6Q3mWvgfLa+i9vhxU8fDK+nGs9c1iVT85axSua/AUnMttIq3xPaU9G3A=="
},
"vue-loader": {
"version": "15.9.0",
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.0.tgz",

View File

@ -86,6 +86,7 @@
"express-promise-router": "^3.0.3",
"express-react-views": "^0.11.0",
"face-api.js": "^0.21.0",
"file-type": "^14.1.4",
"fs-extra": "^7.0.1",
"graphile-utils": "^4.5.6",
"iconv-lite": "^0.5.1",
@ -96,7 +97,6 @@
"mime": "^2.4.4",
"moment": "^2.24.0",
"nanoid": "^2.1.11",
"opencv4nodejs": "^5.5.0",
"opn": "^5.5.0",
"pg": "^7.18.1",
"postgraphile": "^4.5.5",
@ -115,6 +115,7 @@
"url-pattern": "^1.0.3",
"v-tooltip": "^2.0.3",
"vue": "^2.6.11",
"vue-lazyload": "^1.3.3",
"vue-router": "^3.1.6",
"vuex": "^3.1.2",
"winston": "^3.2.1",

View File

@ -0,0 +1,47 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1256.3 150.7" style="enable-background:new 0 0 1256.3 150.7;" xml:space="preserve">
<style type="text/css">
.st0{fill:#ED1C24;}
.st1{fill:#333333;}
.st2{fill:#333333;stroke:#000000;stroke-miterlimit:10;}
.st3{fill:#FFFFFF;}
</style>
<path class="st0" d="M118.6,23.1l-1.8,20.4c-5-1.9-10.7-2.8-17.3-2.8H66l-6.1,24.9h30.5c5.2,0,11-0.9,17.3-2.8L101.9,86
c-5.4-1.9-10.7-2.8-15.9-2.8H55.3l-7.1,28.6h33.5c6.4,0,12.7-0.9,18.8-2.8L92,129.4H0c3.2-4.1,5.8-10,7.6-17.6l17.8-71
c1.9-7.5,2.3-13.4,1.2-17.6L118.6,23.1L118.6,23.1z"/>
<path class="st0" d="M280,23.1c-5.1,4.5-9.9,10.4-14.4,17.6l-56.3,88.6H164L153.4,35c-0.7-5.4-2.1-9.4-4.3-12h50.5
c-0.6,1.2-1.3,3.2-2.3,5.8c-0.8,3.2-0.9,7.1-0.3,11.8l7.5,66.1l42-66.1c4.2-6.6,6.3-12.5,6.3-17.6H280V23.1z"/>
<path class="st0" d="M360.2,23.1c-3.3,4.3-5.9,10.2-7.8,17.6l-17.8,71c-1.8,7.3-2.1,13.2-1,17.6h-47.1c3.2-4.1,5.8-10,7.6-17.6
l17.8-71c1.9-7.5,2.3-13.4,1.2-17.6H360.2z"/>
<path class="st0" d="M483.7,109l-8.5,20.4h-92c3.2-4.1,5.8-10,7.6-17.6l17.8-71c1.9-7.5,2.3-13.4,1.2-17.6h47.1
c-3.3,4.3-5.9,10.2-7.8,17.6l-17.8,71h33.5C471.4,111.8,477.6,110.8,483.7,109z"/>
<path class="st1" d="M650.2,129.5h-53.3c2.3-2.9,3.7-5.3,4.2-7.3c0.7-2.5,0.6-6-0.2-10.3l-1.8-11h-46.6l-11.3,15.3
c-1.2,1.6-2.1,3.5-2.7,6c-0.6,2.2-0.4,4.6,0.5,7.3h-30.2c5.5-5,10.8-10.8,15.8-17.6l60.3-82.7l-3.2-6h48l14.6,89.1
C645.4,119.7,647.4,125.4,650.2,129.5z M596.4,83.3l-6.1-35.9l-25.2,35.9H596.4z"/>
<path class="st1" d="M834.7,23.2c-3.3,4.3-5.9,10.2-7.8,17.6l-22.1,88.6h-52.5l-21.9-88h-0.3l-17.6,70.4c-1.8,7.3-2.1,13.2-1,17.6
h-24.2c3.2-4.1,5.8-10,7.6-17.6l17.8-71c1.9-7.5,2.3-13.4,1.2-17.6h56.3l21.4,86.7h0.5l17.3-69.1c1.9-7.5,2.3-13.4,1.2-17.6
C810.6,23.2,834.7,23.2,834.7,23.2z"/>
<path class="st1" d="M987.9,65.7c-4.4,4.8-7.4,9.9-8.8,15.4l-7.8,30.7c-1.1,4.2-1.7,7.6-1.7,10.1s0.6,5,1.7,7.5h-35.7l1-9.6h-0.3
c-1.9,3.5-3.8,5.9-5.8,7.1c-2.5,1.7-6.3,2.5-11.3,2.5h-36.5c-13.6,0-20.4-6.1-20.4-18.3c0-3.3,0.5-7,1.5-11.1l11.8-47.5
c4.9-19.6,16.1-29.4,33.7-29.4h78.4l-2,20.4c-4.1-1.9-9.1-2.8-15.1-2.8h-43.5c-5.3,0-8.5,2.2-9.6,6.6l-14.4,57.8
c-0.2,0.9-0.3,1.7-0.3,2.3c0,2.9,2.2,4.3,6.6,4.3h13.8c5.2,0,8.4-2.2,9.5-6.6l5.5-21.9h-15.1c-1.4,0-3.9,0.7-7.3,2l5-19.6h67.1V65.7
z"/>
<path class="st2" d="M1133.5,23.2l-1.8,20.4c-5-1.9-10.7-2.8-17.3-2.8h-33.5l-6.2,24.9h30.5c5.2,0,11-0.9,17.3-2.8l-5.8,23.2
c-5.4-1.9-10.7-2.8-15.9-2.8h-30.5l-7.1,28.6h33.5c6.4,0,12.7-0.9,18.8-2.8l-8.5,20.4h-92c3.2-4.1,5.8-10,7.6-17.6l17.8-71
c1.9-7.5,2.3-13.4,1.2-17.6L1133.5,23.2L1133.5,23.2z"/>
<path class="st1" d="M1256.3,109l-8.5,20.4h-92c3.2-4.1,5.8-10,7.6-17.6l17.8-71c1.9-7.5,2.3-13.4,1.2-17.6h47.1
c-3.3,4.3-5.9,10.2-7.8,17.6l-17.8,71h33.5C1243.9,111.9,1250.2,110.9,1256.3,109z"/>
<path class="st3" d="M706.1,119.5l-57.6-3.6c2.7-2.9,4.4-5.5,5-7.6c0.9-2.7,1.1-6.4,0.5-11.1l-1.2-12L602.4,82l-13.2,15.7
c-1.4,1.6-2.5,3.7-3.3,6.3c-0.8,2.4-0.7,5,0,7.9l-32.6-2.1c6.3-5,12.4-11,18.2-17.9l70.7-85.2l-3-6.7L691,3.3l9.7,97.3
C701.7,108.6,703.4,114.9,706.1,119.5z M651.2,66L647,26.8l-29.7,37L651.2,66z"/>
<path class="st3" d="M912.7,17.3c-3.9,4.4-7.1,10.6-9.6,18.5l-29.9,94.3l-56.7-3.6L798.8,30h-0.4l-23.7,74.7
c-2.4,7.8-3.2,14.1-2.3,18.9l-26.2-1.7c3.7-4.2,6.9-10.4,9.4-18.5l24-75.5c2.5-8,3.4-14.3,2.5-18.9l60.8,3.8l17.2,95.1h0.5L884,34.5
c2.5-8,3.4-14.3,2.5-18.9L912.7,17.3z"/>
<path class="st3" d="M1069.7,142.4l-57.6-3.6c2.7-2.9,4.4-5.5,5-7.6c0.9-2.7,1.1-6.4,0.5-11.1l-1.2-12l-50.4-3.2l-13.2,15.8
c-1.4,1.6-2.5,3.7-3.3,6.3c-0.8,2.4-0.7,5,0,7.9l-32.6-2.1c6.3-5,12.4-11,18.2-17.9l70.7-85.2l-3-6.7l51.8,3.3l9.7,97.3
C1065.2,131.5,1067,137.8,1069.7,142.4z M1014.7,88.9l-4.2-39.2l-29.7,37L1014.7,88.9z"/>
<path class="st3" d="M1210,129.2l-10.5,21.5l-99.3-6.3c3.7-4.2,6.9-10.4,9.4-18.5l24-75.5c2.5-8,3.4-14.3,2.5-18.9l50.9,3.2
c-3.9,4.4-7.1,10.6-9.6,18.5l-24,75.5l36.2,2.3C1196.4,131.4,1203.3,130.8,1210,129.2z"/>
</svg>

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 92 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 98 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 KiB

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 89 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 89 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 KiB

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 102 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 91 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Some files were not shown because too many files have changed in this diff Show More