Added Black for Wife to JayRock. Switched parameters field to JSON type.

This commit is contained in:
ThePendulum 2020-02-09 19:41:39 +01:00
parent f7f4da24ec
commit 0f513266a0
18 changed files with 173 additions and 58 deletions

View File

@ -85,7 +85,7 @@ export default {
actors: [], actors: [],
pageTitle: null, pageTitle: null,
letters: ['all'].concat(Array.from({ length: 26 }, (value, index) => String.fromCharCode(index + 97).toUpperCase())), letters: ['all'].concat(Array.from({ length: 26 }, (value, index) => String.fromCharCode(index + 97).toUpperCase())),
letter: this.$route.params.letter, letter: this.$route.params.letter || 'all',
gender: this.$route.params.gender || 'female', gender: this.$route.params.gender || 'female',
}; };
}, },

View File

@ -51,18 +51,7 @@ const routes = [
name: 'tag', name: 'tag',
}, },
{ {
path: '/actors', path: '/actors/:gender?/:letter?',
component: Actors,
redirect: {
name: 'actors',
params: {
gender: 'female',
letter: 'all',
},
},
},
{
path: '/actors/:gender/:letter',
component: Actors, component: Actors,
name: 'actors', name: 'actors',
}, },

View File

@ -105,7 +105,7 @@ exports.up = knex => Promise.resolve()
table.string('name'); table.string('name');
table.string('url'); table.string('url');
table.text('description'); table.text('description');
table.text('parameters'); table.json('parameters');
table.string('slug', 32) table.string('slug', 32)
.unique(); .unique();
@ -140,7 +140,7 @@ exports.up = knex => Promise.resolve()
table.string('name'); table.string('name');
table.string('url'); table.string('url');
table.text('description'); table.text('description');
table.text('parameters'); table.json('parameters');
table.integer('priority', 3) table.integer('priority', 3)
.defaultTo(0); .defaultTo(0);

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

View File

@ -0,0 +1,108 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, 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 6448.7 1109.2" style="enable-background:new 0 0 6448.7 1109.2;" xml:space="preserve">
<style type="text/css">
.st0{fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;}
.st1{fill-rule:evenodd;clip-rule:evenodd;fill:#A9A9A9;}
.st2{fill-rule:evenodd;clip-rule:evenodd;fill:#B10015;}
</style>
<path id="black" class="st0" d="M490.8,568.5c-5-47.3-28.1-81.8-72.1-101.1c-13.1-5.7-27-9.7-40.4-14.4c1.1-0.3,2.8-0.9,4.6-1.4
c34-9.5,58.8-29.8,72.6-62.5c9.3-22,11.1-45.2,9.5-68.9c-3.9-57.2-31.6-98.4-83.3-123c-30.5-14.5-63.2-19.6-96.6-19.8
c-93.1-0.3-186.2-0.2-279.3-0.3c-1.6,0.1-3.3,0.3-4.9,0.5v575.5h7.6c79.8,0,159.6,0,239.4-0.1c22.1,0,44.2-0.2,66.3-1.5
c29.8-1.8,59-7.4,86.8-19c41-17.1,70.7-45.2,83.8-88.6C492.2,619.4,493.5,594.1,490.8,568.5z M201.2,314c13.6,0.8,27.5,0,40.8,2.3
c31.4,5.5,36.7,31.1,30.7,51.5c-4.8,16.4-17.8,23.7-33.6,25.6c-14,1.7-28.3,1.4-43.2,2.1c-0.2-2.9-0.4-4.6-0.4-6.2
c0-23.2,0.1-46.4-0.1-69.6C195.4,315.2,196.7,313.7,201.2,314z M293.2,578.8c-3.7,11.9-11.9,19.6-22.9,24.8c-12.7,6-26.3,7.2-40,7.4
c-10.1,0.2-20.2,0-30.3,0.1c-2.9,0-4.5-0.6-4.5-4c0.1-28.6,0.1-57.3,0.1-85.9c0.1-0.8,0.3-1.7,0.6-2.5c22.1,0.8,44.1-2.2,65.5,4.1
C288.5,530.7,301.1,553.3,293.2,578.8L293.2,578.8z M1608.3,747c-66-188-131.9-376.1-197.8-564.1c-1.5-4.3-3.4-5.7-7.9-5.7
c-73.3,0.1-146.5,0.1-219.7,0c-4.2,0-6.2,1.1-7.6,5.3c-67.2,188.2-134.5,376.4-201.8,564.5c-0.7,1.9-1.2,3.8-1.9,6h222.6
c5.4-22.3,10.9-44.2,16.1-66.2c1-4.4,2.7-5.9,7.4-5.9c48.3,0.2,96.7,0.1,145,0.1h6c6.2,24.1,12.3,47.9,18.5,72h223.2
C1609.6,750.8,1608.9,748.9,1608.3,747z M1246.7,543.8c3.4-12.7,6.9-24.9,10-37.2c8.8-35.9,17.8-71.8,25.8-108
c3.1-13.8,3.5-28.2,5.3-42.3c0.1-0.6,0.3-1.1,0.6-1.7c0.4-0.9,1.1-1.8,1.5-2.7l0,0c0.3,0.5,0.6,1,1,1.4c0.1,0.2,0.2,0.3,0.3,0.5
c0.2,0.3,0.4,0.6,0.6,1c0.1,0.3,0.2,0.6,0.3,1c3.1,50.6,17.3,99,30.2,147.6c3.5,13.3,7.2,26.6,10.9,40.4H1246.7L1246.7,543.8z
M2095.6,177.2h6.3c63.3,0,126.6,0.1,190-0.1c5.7,0,7.2,1.5,7.2,7.2c-0.2,76.4-0.2,152.8-0.1,229.2v6.4c0.4,0.1,0.9,0.2,1.3,0.2
c1.2-2.2,2.5-4.4,3.7-6.6c41.4-77.1,82.8-154.3,124.2-231.4c1.9-3.6,4.1-5,8.2-5c74.4,0.1,148.7,0.1,223.1,0.1h6.2
c-1.5,2.7-2.4,4.5-3.5,6.3c-55.8,90.7-111.6,181.4-167.4,272c-2.6,4.2-2.4,6.8,0.3,10.8c63.6,93.2,127.1,186.5,190.6,279.9
c1.3,2,2.6,4,4.4,6.7c-2.9,0.1-4.8,0.3-6.8,0.3c-79.4,0-158.9,0.1-238.3,0.1c-4.6,0-6.9-1.6-9.1-5.4
c-43.9-75.8-87.9-151.5-132-227.1c-1.2-2.3-2.8-4.2-4.8-5.8V753h-203.4V177.2z M2032,404.8c-9.2-7.4-17.3-14.4-25.8-20.7
c-29.6-21.7-62.5-33.1-99.6-32.3c-61.4,1.5-105.4,44.8-107.6,106.1c-0.7,19.6,0.7,39,8.4,57.3c15.3,36.1,42.9,56.2,81.5,61.4
c41.6,5.6,78.7-7.5,113.5-29c11.3-7,22.1-14.6,33.6-22.3c0.1,1.5,0.3,2.9,0.3,4.3c-1.7,54.3-3.4,108.6-5.1,162.8
c-0.5,14.8-1,29.6-1.4,44.4c-0.1,2.9-0.7,4.7-3.8,5.8c-85.2,32.9-171.6,38-256.2,2.1c-98.7-41.9-161-116.3-178.5-223.9
c-11.6-71-3.1-139.9,32-203.6c43.5-78.8,110.5-127.2,198.3-146.1c70-15.1,138.4-9.3,204.7,18.7c4.2,1.8,5.8,3.8,5.8,8.5
c-0.2,66.7-0.2,133.3-0.1,200L2032,404.8L2032,404.8z M517.2,177.6h207.4v388.8h201.9v186.5H517.2V177.6L517.2,177.6z"/>
<path id="for" class="st1" d="M3452.4,411.7c-63-45.2-133.8-52-206.9-31.6c-88.6,24.7-147.3,104.5-145.4,188
c0,7.1-0.8,14.4,0.1,21.4c8,59.6,36.9,106.9,87.1,139.6c65.9,43,137.8,48.9,210.7,23.5c77.2-26.9,125-82.7,134.3-164.6
C3540.8,514.9,3512.3,454.6,3452.4,411.7z M3359.1,586.1c-5.6,21.8-23.6,34.8-45.9,33.5c-20.9-1.1-38.1-17.2-40.4-39.1
c-1.1-9.9-0.7-20,1.3-29.8c5.4-23.7,23.7-35.8,48.4-33.6c20.3,1.7,36.9,20,38.3,42.2c0.2,2.9,0,5.8,0,8.7l0.9,0.1
C3360.9,574.1,3360.6,580.2,3359.1,586.1L3359.1,586.1z M2837.4,751.3V529.4c0-12.3,0-12.3-12.6-12.3c-9.8,0-19.6-0.2-29.4,0.1
c-5,0.1-7.1-1.4-7.1-6.7c0.2-40.5,0.2-81.1,0-121.6c0-5.2,1.9-7,7-6.9c11.4,0.2,22.8-0.2,34.2,0.1c6.2,0.2,8-2.2,8.1-8.4
c0.1-20.6-0.3-41.4,1.6-61.9c5.9-66.1,44.3-115.6,114.9-128c39.4-6.9,78.6-3.6,117.6,3.3c5.9,1,6,4.8,6,9.3c0,35.5,0,71,0,106.5
c0,5.6-0.2,11.1,0,16.7c0.2,5.3-2.1,7.1-7.2,6.5c-6.3-0.9-12.6-1.4-19-1.6c-20.2-0.1-30.5,8.7-33.3,28.6c-1,6.8-0.8,13.7-1.4,20.6
c-0.5,6.1,1.8,8.6,8.1,8.4c14.8-0.3,29.7,0.1,44.5-0.2c6.3-0.1,8.3,2.2,8.3,8.3c-0.2,39.8-0.2,79.5,0,119.3c0,5.9-1.9,7.9-7.9,7.8
c-14.3-0.3-28.6,0.4-42.9-0.3c-8.3-0.4-10.3,2.6-10.3,10.5c0.2,70.8,0.1,141.5,0.1,212.3c0,2.4-0.1,4.8,0,7.2
c0.2,4.1-1.6,5.5-5.7,5.5c-57-0.1-114-0.2-171-0.2C2839.1,752,2838.2,751.7,2837.4,751.3L2837.4,751.3z M3877.2,548.1
c-10.3-4-19.2-7.8-28.4-10.9c-17.5-5.8-35-4.7-52.2,1.1c-25,8.4-41.6,30.9-41.9,57.9c-0.5,48.5-0.3,97-0.4,145.4v10h-179.9
c-0.1-3-0.4-5.9-0.4-8.7c0-117.1-0.1-234.2-0.2-351.3c0-7.6,1.9-9.9,9.7-9.8c51.7,0.3,103.4,0.3,155,0c7.7,0,10.1,2.1,9.7,9.8
c-0.6,13.2-0.2,26.4-0.2,42.3c3.8-4.3,6.2-6.7,8.4-9.4c20-24.4,43.9-43.2,75.1-50.3c12.3-2.8,25.1-2.8,37.7-4.3
c6.6-0.8,7.9,2.2,7.9,8.2c-0.2,38.9-0.1,77.9-0.1,116.8L3877.2,548.1L3877.2,548.1z"/>
<path id="wife" class="st2" d="M6450.5,534c-4.5-7.5-9.6-8.2-15.8-1.7c-5.9,6.3-11.4,12.9-17,19.5
c-50.7,58.8-101.8,117.4-158.9,170.2c-36.5,33.7-75.4,63.9-120.1,86.3c-22.6,11.3-46.2,19.4-71.7,20.8c-18.5,1-27.8-6.8-30.9-25.1
c-2.8-16.9,0.3-33.4,4.5-49.6c5-19,10.9-37.7,16.5-56.8c4,1.3,6.4,2.1,8.9,2.8c47.2,12.8,92.5,10.9,133.8-18.5
c11.4-8.1,22.9-16.1,33.4-25.2c32.9-28.4,59.6-61.6,76.5-102c5.4-12.8,8.9-26.1,6.3-40c-10.5-55.5-40.1-97.5-90.3-123.8
c-29.6-15.6-60.1-15.9-90.4-0.4c-20.9,10.7-39.4,24.8-57.3,39.9c-37.8,31.7-62.6,74-93.7,111.3c-24,28.8-45.7,59.6-70.1,88
c-32.6,37.8-69.1,71.6-111.9,97.9c-11.8,7.2-24.2,13.4-37,20.4c-0.3-1.2-0.4-2.5-0.5-3.8c0.2-1.5,0.5-3,0.9-4.5
c15.6-54.1,19.1-109.2,13-165c-2.6-23.6-8.9-46-27.9-62.3c-4.2-3.6-4.8-6.5-2.9-11.5c18.4-49.7,36.7-99.3,54.5-149.2
c22.5-62.7,44.4-125.6,66.8-188.4c5.7-16,2.5-29.8-8.7-42.2c-26.2-29.1-58.1-49.4-95-62.2c-5.3-1.8-10.8-2.7-16.4-2.9
c-12.6-0.4-18,4.9-19,17.4c-0.5,5.6-1.1,11.1-1.8,16.6c-6.2,46-16.9,90.9-29.4,135.5c-28.2,100.1-63.7,197.7-100.7,294.8
c-3.9,10.3-7.8,21.2-14.3,29.9c-42.9,58.4-85.9,116.9-130.2,174.3c-24.5,31.7-51,62-82.2,87.5c-7.5,6-15.7,11-24.5,14.8
c-9.4,4.2-15.6-1-14.2-11.3c0.9-6.8,2.5-13.4,4.9-19.8c24.8-67,50.3-133.7,74.7-200.8c14.7-40.4,28.2-81.3,42-122.1
c4.5-13.1,1.1-25-7.5-35.5c-15.5-18.9-34.1-34.2-56.8-43.5c-8.7-3.6-18.5-5.1-27.9-6c-9.3-0.8-14.3,4.6-16,13.7
c-1.3,7.2-2.6,14.5-5.2,21.3c-10.5,27.1-21.2,54.1-32.3,81c-30.8,74.3-62.1,148.4-92.5,222.8c-9.9,24.3-19.3,49-21.4,75.6
c-1.5,18.7,3.3,34.8,17.9,47.8c17,15.2,37.4,22.8,58.8,28.9c39.8,11.4,75.8,5.3,107.5-22c14.4-12.4,29.3-24.3,43-37.5
c38.5-37.1,71-79.4,103-122.1c1.9-2.6,4-5.1,6-7.7c0.1,2.7-0.4,5.3-1.6,7.7c-27.7,70.6-55.4,141.3-83.1,212
c-10.2,26.1-17.1,52.6-16.4,81.2c1.5,56.3,33.3,98.2,87.8,112.6c10.2,2.7,20.8,4.2,31.2,6.2h24.4c19-5.7,33.5-17.9,45.1-33.3
c12.4-16.4,24.9-32.8,35.2-50.5c39-66.6,67.3-137.9,90.4-211.3c1.9-5.9,4.6-9.1,10.7-11c28.7-8.5,54.8-22.4,78.9-40.3
c32.8-24.4,63-52.2,90-82.9c1.6-1.9,3.4-3.6,5.4-5.7c-4.1,20.4-7.7,40-12,59.5c-5.1,23.3-0.3,44.1,13.5,63.2
c22.9,31.7,51.2,57.1,86.7,73.5c13.5,6.3,27.9,10.7,42.6,12.9c30.8,4.3,59.1-5.8,86.3-19.3c47.3-23.5,87.8-56.5,126.3-92.1
c65.9-60.9,123.2-129.3,176.3-201.3C6456.5,560,6457.2,545.6,6450.5,534z M6096.4,611.5c22.8-43,45.8-85.9,77.4-123.3
c8.4-10,18.3-19,28.3-27.4c6.9-5.7,15.8-10,24.5-4.6c8.6,5.3,6.4,14.7,4.9,22.9c-4.1,21.9-14.9,40.8-28.2,58.2
c-23.8,31.3-51.6,57.9-89.2,72.1c-5.8,2.2-11.9,3.7-18.5,5.7C6096,612.9,6096,612.1,6096.4,611.5L6096.4,611.5z M5663.3,860.8
c-16,47.7-33.7,94.8-57,139.5c-7,13.4-15.2,26.2-23.7,38.8c-3.6,5.4-8.7,12.3-16.4,9.8c-7.6-2.5-6.3-10.9-6.7-17.2
c-0.3-4.8,0.3-9.6,1.9-14.2c25.4-73.7,51-147.3,76.7-220.9c0.1-0.4,0.3-0.7,0.6-1c13.4,6.3,26.1,12.4,39.8,18.8
C5673.6,829.3,5668.6,845.1,5663.3,860.8z M5709.1,655c-0.4,30.7-3.7,61-11.5,90.8c-0.9,3.4-1.8,6.7-2.8,10.3
c-11.8-3.4-22.6-7.6-30.6-16.7c-1.6-1.9-3-5.7-2.2-7.8c12.2-33.8,24.7-67.4,37.2-101.1c0.4-0.8,1-1.6,1.6-2.3
C5708.6,635.8,5709.2,645.5,5709.1,655L5709.1,655z M4683.6,736.6c-3.1,4.8-4.9,7.7-6.8,10.7c-25.5,40.1-53.4,78.2-87.4,111.9
c-28,27.8-59.6,35.4-96.8,24.5c-62.6-18.3-105.1-57.1-123.6-120.4c-7-24-4.9-47.8,4.7-70.6c20.4-48.5,41-96.9,62.5-144.9
c37.3-83.6,75-167.1,103.1-254.4c12.7-39.2,24.2-78.8,29.3-119.9c2.7-22.3,6.1-44.7,0.9-67.3c-7.3-31.4-31-49.5-63.3-48.6
c-42.1,1.3-81.6,13.1-119.2,31c-112.2,53.4-201.9,132.3-266.7,238.5c-22,36.1-38.9,74.9-43.8,117.4c-2.2,18.7-1.8,38-0.4,56.8
c0.7,9.1,6.2,18,9.9,26.8c1.4,3.2,4.9,5.7,5.6,8.9c1.1,4.9,2.1,10.8,0.3,15c-1,2.3-8.6,4-12,2.7c-10.7-4.2-22.2-8.2-30.9-15.4
c-35.8-29.8-56.2-68.8-66.6-113.9C3969,366.4,3990,317,4024,271c56.6-76.6,128.4-135.7,211.4-181.5c56.9-31.4,117.1-54.4,181-66.5
c58.5-11,117.3-14.6,175.5,2.4c46.3,13.5,85.3,38.1,110.2,80.6c21.6,36.7,30,76.4,15.1,117.5c-18,49.8-36.8,99.3-57.7,147.9
c-38.5,89.6-79.7,178.1-118.1,267.7c-17,39.7-30,81.2-44.3,122c-2.8,8-3.6,16.9-4,25.4c-0.9,19.2,10.9,29.7,30,28
c16.2-1.4,29.3-9.4,41.2-19.5c27.8-23.8,49.9-52.5,70.7-82.4c48.3-69.5,87.7-144.1,125.8-219.3c22.7-44.9,43.8-90.7,64.2-136.7
c6.1-13.8,8.5-29.6,10.5-44.8c2.7-19.8,3.8-39.8,5-59.8c0.8-14.4,6.8-22,21.1-22.7c39.7-1.8,73.2,13.2,101.7,40
c12.7,12,11.1,27.6,7,42.1c-11,38.7-21.5,77.7-35.3,115.4c-27.7,76.2-58.4,151.3-86,227.4c-15.6,43-27.9,87.3-41.2,131.1
c-2.5,8.1-2.9,17-3.4,25.6c-1.1,17.6,7.1,26.6,24.5,27.6c14.5,0.9,27.4-3.8,39.7-10.9c24.3-14.1,43.4-34.2,61.5-55.1
c42.7-49.3,77.2-104.3,108.8-161c95.2-170.7,174.8-349.6,237.7-534.7c4.2-12.3,6.1-25.5,8.6-38.3c1.4-7.1,4.9-10.4,12.1-8.9
c3.7,0.8,7.3,2.1,10.5,4.1c34.8,21.1,59.1,50.8,70.2,90.1c5.6,19.9,0.6,39.8-4.2,59.3c-14.4,58.3-37.4,113.5-62.8,167.7
c-54.8,116.8-120,227.3-200.8,328.2c-49.4,61.7-104.3,117.8-170.3,162.1c-32.3,21.7-66.9,37.8-105.7,44.7
c-54.1,9.6-94.8-8.3-123.5-55.3c-15.1-24.6-23.1-51.6-25.9-80.2C4684.6,746.7,4684.2,742.8,4683.6,736.6z M5562.2,199.9
c-1.9,8.6-3.2,17.4-5.7,25.8c-8.1,27.3-22.7,52.3-42.7,72.7c-39.2,40.7-86,32-120.8,8.7c-5.4-3.8-10.3-8.2-14.6-13.2
c-11.5-12.6-14.6-27.3-10.1-43.8c9.9-35.9,32.3-62.7,61.4-84.4c18.2-13.6,37.6-25.1,61-26.8c16-1.2,31.3,1.4,45.1,10.2
C5554.4,160.8,5561.1,178.6,5562.2,199.9z"/>
<path id="lines" class="st0" d="M0,806.2c3.6,0.1,7.1,0.2,10.7,0.2c483.4,0,3783.6,0,4267-0.2c8,0,11,2.4,13.5,9.9
c15.9,47.3,44.1,85.8,83.7,116.1c1.9,1.5,3.8,3,7.5,5.9h-11.8c-514.1,0-3845,0-4359.1,0c-3.8,0-7.6,0.4-11.4,0.6L0,806.2L0,806.2z
M0-0.8c3.6,0,7.1,0.1,10.7,0.1c478.9,0,3782.4,0,4261.3,0h8.9c0.1,0.4,0.2,0.8,0.3,1.2c-1.7,0.8-3.4,1.7-5.1,2.4
c-74,29.8-142.8,71.3-203.7,122.9c-3.4,2.8-7.7,4.3-12.1,4.5c-409.8,0.2-3644.3,0.2-4054.1,0.2c-2,0-4.1-0.2-6.1-0.3L0-0.8L0-0.8z
M6461-0.2v130.7h-9.3c-166.3,0-332.6,0-498.8,0.1c-6.4,0-9.7-1.5-12.3-7.8c-10.6-25.5-29-45.1-49.9-62.4
c-33-27.2-69.2-48.6-112.8-60.7L6461-0.2L6461-0.2z M5225.9,0c-5.2,12.9-13.2,25.9-15.5,39.9c-4.9,29.6-16.3,56.9-25.6,85
c-1.4,4.3-3.5,5.8-8.1,5.8c-126.9-0.1-253.9-0.2-380.9-0.3c-2.5,0-6.5-2.1-7.3-4.1c-19.9-53.6-54.6-94.9-103.1-125
c-0.4-0.4-0.7-0.8-1-1.2L5225.9,0L5225.9,0z M5720.1,0c-0.5,0.4-1,0.7-1.6,0.9c-41.7,13.9-62.3,43.6-66,86.5
c-1.1,12.3-3.3,24.6-4.9,36.9c-0.6,4.4-2.3,7.1-7.3,6.2c-0.3,0-0.5,0-0.8,0c-18.2,1.9-35.3,0.7-46.4-16.9
c-43-35.2-91.4-41.8-143.9-27c-2.2,0.6-4.3,1.4-6.5,2.1c-0.5,0-0.9,0-1.4,0c-17.3-34-40.2-64-71.8-88.7L5720.1,0L5720.1,0z
M6206.9,936.4c0.7-0.3,1.4-0.6,2-0.9c56.2-33.5,104.7-76.5,150.6-122.7c4.4-4.4,8.6-6.6,15.1-6.5c25.9,0.4,51.8,0.2,77.6,0.2h8.7
v131.1h-253.3C6207.4,937.1,6207.2,936.7,6206.9,936.4L6206.9,936.4z M5176.9,937.6h-212.8c26.1-19.7,53.6-38.9,79.2-60.3
c25.7-21.6,49.5-45.4,74.8-68.9C5113.1,861.6,5131.4,904.9,5176.9,937.6L5176.9,937.6z M5945.2,937.7h-156.3
c2.6-7.2,5.1-13.8,7.4-20.3c4-10.9,5.5-23.9,12.6-32.2c6.8-8,19.5-10.9,29.4-16.4c8.4-4.6,16.6-9.7,24.3-14.1
c12.8,14.9,24.7,30.5,38.3,44.2C5914.6,912.6,5930.1,924.6,5945.2,937.7L5945.2,937.7z"/>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -83,7 +83,6 @@ const networks = [
name: 'Dogfart Network', name: 'Dogfart Network',
url: 'https://dogfartnetwork.com', url: 'https://dogfartnetwork.com',
description: 'The world famous Dogfart Interracial series. Online since 1996, we have the largest collection of Interracial videos, pictures and content on the web.', description: 'The world famous Dogfart Interracial series. Online since 1996, we have the largest collection of Interracial videos, pictures and content on the web.',
parameters: JSON.stringify({ photoLimit: 25 }),
}, },
{ {
slug: 'evilangel', slug: 'evilangel',

View File

@ -1673,6 +1673,18 @@ const sites = [
url: 'https://cospimps.com', url: 'https://cospimps.com',
network: 'jayrock', network: 'jayrock',
}, },
{
slug: 'blackforwife',
name: 'Black for Wife',
url: 'https://www.blackforwife.com',
network: 'jayrock',
parameters: {
referer: 'https://freetour.adulttime.com/en/blackforwife',
useGamma: true,
scene: false,
deep: 'https://21sextury.com/en/video/',
},
},
// JULES JORDAN // JULES JORDAN
{ {
slug: 'julesjordan', slug: 'julesjordan',
@ -4447,7 +4459,7 @@ exports.seed = knex => Promise.resolve()
name: site.name, name: site.name,
description: site.description, description: site.description,
url: site.url, url: site.url,
parameters: JSON.stringify(site.parameters), parameters: site.parameters,
network_id: networksMap[site.network], network_id: networksMap[site.network],
priority: site.priority, priority: site.priority,
scrape: site.scrape, scrape: site.scrape,

View File

@ -15,10 +15,15 @@ const slugify = require('./utils/slugify');
const { createMediaDirectory, storePhotos } = require('./media'); const { createMediaDirectory, storePhotos } = require('./media');
async function curateActor(actor) { async function curateActor(actor) {
const [aliases, photos, social] = await Promise.all([ const [aliases, avatar, photos, social] = await Promise.all([
knex('actors').where({ alias_for: actor.id }), knex('actors').where({ alias_for: actor.id }),
knex('media') knex('actors_avatars')
.where({ domain: 'actors', target_id: actor.id }) .where('actor_id', actor.id)
.join('media', 'media.id', 'actors_avatars.media_id')
.first(),
knex('actors_photos')
.where('actor_id', actor.id)
.join('media', 'media.id', 'actors_photos.media_id')
.orderBy('index'), .orderBy('index'),
knex('actors_social') knex('actors_social')
.where('actor_id', actor.id) .where('actor_id', actor.id)
@ -43,8 +48,8 @@ async function curateActor(actor) {
naturalBoobs: actor.natural_boobs, naturalBoobs: actor.natural_boobs,
aliases: aliases.map(({ name }) => name), aliases: aliases.map(({ name }) => name),
slug: actor.slug, slug: actor.slug,
avatar: photos.find(photo => photo.role === 'avatar'), avatar,
photos: photos.filter(photo => photo.role === 'photo'), photos,
hasTattoos: actor.has_tattoos, hasTattoos: actor.has_tattoos,
hasPiercings: actor.has_piercings, hasPiercings: actor.has_piercings,
tattoos: actor.tattoos, tattoos: actor.tattoos,

View File

@ -18,7 +18,7 @@ async function curateNetwork(network, includeParameters = false) {
description: network.description, description: network.description,
slug: network.slug, slug: network.slug,
sites, sites,
parameters: includeParameters ? JSON.parse(network.parameters) : null, parameters: includeParameters ? network.parameters : null,
studios: studios.map(studio => ({ studios: studios.map(studio => ({
id: studio.id, id: studio.id,
name: studio.name, name: studio.name,

View File

@ -125,9 +125,7 @@ async function curateRelease(release) {
site: { site: {
id: release.site_id, id: release.site_id,
name: release.site_name, name: release.site_name,
independent: release.site_parameters independent: !!release.site_parameters?.independent,
? (JSON.parse(release.site_parameters).independent || false)
: false,
slug: release.site_slug, slug: release.site_slug,
url: release.site_url, url: release.site_url,
}, },

View File

@ -65,7 +65,6 @@ async function scrapeRelease(source, basicRelease = null, type = 'scene') {
: await scraper.fetchMovie(url, site, release); : await scraper.fetchMovie(url, site, release);
return { return {
url,
...release, ...release,
...scrapedRelease, ...scrapedRelease,
...(scrapedRelease && release?.tags && { ...(scrapedRelease && release?.tags && {

View File

@ -68,11 +68,13 @@ async function scrapeUniqueReleases(scraper, site, afterDate = getAfterDate(), a
return scrapeUniqueReleases(scraper, site, afterDate, accReleases.concat(uniqueReleases), page + 1); return scrapeUniqueReleases(scraper, site, afterDate, accReleases.concat(uniqueReleases), page + 1);
} }
const uniqueReleasesWithSite = uniqueReleases.map(release => ({ ...release, site }));
if (oldestReleaseOnPage) { if (oldestReleaseOnPage) {
return accReleases.concat(uniqueReleases); return accReleases.concat(uniqueReleasesWithSite);
} }
return accReleases.concat(uniqueReleases).slice(0, argv.nullDateLimit); return accReleases.concat(uniqueReleasesWithSite).slice(0, argv.nullDateLimit);
} }
async function scrapeUpcomingReleases(scraper, site) { async function scrapeUpcomingReleases(scraper, site) {
@ -87,9 +89,9 @@ async function scrapeUpcomingReleases(scraper, site) {
async function deepFetchReleases(baseReleases) { async function deepFetchReleases(baseReleases) {
return Promise.map(baseReleases, async (release) => { return Promise.map(baseReleases, async (release) => {
if (release.url) { if (release.url || (release.path && release.site)) {
try { try {
const fullRelease = await scrapeRelease(release.url, release, 'scene'); const fullRelease = await scrapeRelease(release.url || release.path, release, 'scene');
if (fullRelease) { if (fullRelease) {
return { return {

View File

@ -100,13 +100,14 @@ async function scrapeApiReleases(json, site) {
dislikes: scene.ratings_down, dislikes: scene.ratings_down,
}; };
release.url = site.parameters?.scene release.path = `/${scene.url_title}/${release.entryId}`;
? `${site.parameters.scene}/${scene.url_title}/${release.entryId}`
: `${site.url}/en/video/${scene.url_title}/${release.entryId}`; if (site.parameters?.scene) release.url = `${site.parameters.scene}${release.path}`;
else if (site.parameters?.scene !== false) release.url = `${site.url}/en/video${release.path}`;
release.date = moment.utc(scene.release_date, 'YYYY-MM-DD').toDate(); release.date = moment.utc(scene.release_date, 'YYYY-MM-DD').toDate();
release.actors = scene.actors.map(({ name }) => name); release.actors = scene.actors.map(({ name }) => name);
release.director = scene.directors[0].name; release.director = scene.directors[0]?.name || null;
release.tags = scene.master_categories release.tags = scene.master_categories
.concat(scene.categories?.map(category => category.name)) .concat(scene.categories?.map(category => category.name))
@ -171,9 +172,9 @@ function scrapeAll(html, site, networkUrl, hasTeaser = true) {
}); });
} }
async function scrapeScene(html, url, site) { async function scrapeScene(html, url, site, scrapedRelease) {
const $ = cheerio.load(html, { normalizeWhitespace: true }); const $ = cheerio.load(html, { normalizeWhitespace: true });
const release = { $, url }; const release = { $ };
const json = $('script[type="application/ld+json"]').html(); const json = $('script[type="application/ld+json"]').html();
const videoJson = $('script:contains("window.ScenePlayerOptions")').html(); const videoJson = $('script:contains("window.ScenePlayerOptions")').html();
@ -181,7 +182,7 @@ async function scrapeScene(html, url, site) {
const [data, data2] = json ? JSON.parse(json) : []; const [data, data2] = json ? JSON.parse(json) : [];
const videoData = JSON.parse(videoJson.slice(videoJson.indexOf('{'), videoJson.indexOf('};') + 1)); const videoData = JSON.parse(videoJson.slice(videoJson.indexOf('{'), videoJson.indexOf('};') + 1));
[release.entryId] = new URL(url).pathname.split('/').slice(-1); [release.entryId] = (scrapedRelease?.path || new URL(url).pathname).split('/').slice(-1);
release.title = videoData?.playerOptions?.sceneInfos.sceneTitle || data?.name; release.title = videoData?.playerOptions?.sceneInfos.sceneTitle || data?.name;
// date in data object is not the release date of the scene, but the date the entry was added; only use as fallback // date in data object is not the release date of the scene, but the date the entry was added; only use as fallback
@ -194,7 +195,8 @@ async function scrapeScene(html, url, site) {
if (data) { if (data) {
release.description = data.description; release.description = data.description;
release.director = data.director?.[0].name || data2?.director?.[0].name; if (data.director?.[0]?.name) release.director = data.director[0].name;
else if (data2?.director?.[0]?.name) release.director = data2.director[0].name;
const actors = data?.actor || data2?.actor || []; const actors = data?.actor || data2?.actor || [];
release.actors = actors.map(actor => actor.name); release.actors = actors.map(actor => actor.name);
@ -437,8 +439,8 @@ async function fetchUpcoming(site) {
return scrapeAll(res.body.toString(), site); return scrapeAll(res.body.toString(), site);
} }
function getDeepUrl(url, site) { function getDeepUrl(url, site, release) {
const { pathname } = new URL(url); const pathname = release.path || new URL(url).pathname;
if (site.parameters?.deep === 'network') { if (site.parameters?.deep === 'network') {
return `${site.network.url}${pathname}`; return `${site.network.url}${pathname}`;
@ -456,11 +458,11 @@ async function fetchScene(url, site, release) {
return release; return release;
} }
const deepUrl = getDeepUrl(url, site); const deepUrl = getDeepUrl(url, site, release);
const res = await bhttp.get(deepUrl); const res = await bhttp.get(deepUrl);
if (res.statusCode === 200) { if (res.statusCode === 200) {
return scrapeScene(res.body.toString(), url, site, deepUrl); return scrapeScene(res.body.toString(), url, site, release);
} }
return null; return null;

View File

@ -6,6 +6,7 @@ const bhttp = require('bhttp');
const logger = require('../logger')(__filename); const logger = require('../logger')(__filename);
const slugify = require('../utils/slugify'); const slugify = require('../utils/slugify');
const { fetchApiLatest, fetchScene } = require('./gamma');
async function fetchToken(site) { async function fetchToken(site) {
const res = await bhttp.get(site.url); const res = await bhttp.get(site.url);
@ -81,6 +82,10 @@ function scrapeLatest(scenes, site, tokens) {
} }
async function fetchLatest(site, page = 1) { async function fetchLatest(site, page = 1) {
if (site.parameters?.useGamma) {
return fetchApiLatest(site, page);
}
const { time, token } = await fetchToken(site); const { time, token } = await fetchToken(site);
// transParameters[v1] includes _resources, [v2] includes photos, [preset] is mandatory // transParameters[v1] includes _resources, [v2] includes photos, [preset] is mandatory
@ -94,7 +99,11 @@ async function fetchLatest(site, page = 1) {
return null; return null;
} }
async function fetchScene(url, site, release) { async function fetchNetworkScene(url, site, release) {
if (site.parameters?.useGamma) {
return fetchScene(url, site, release);
}
const { time, token } = release?.meta.tokens || await fetchToken(site); // use attached tokens when deep fetching const { time, token } = release?.meta.tokens || await fetchToken(site); // use attached tokens when deep fetching
const { pathname } = new URL(url); const { pathname } = new URL(url);
const entryId = pathname.split('/')[2]; const entryId = pathname.split('/')[2];
@ -111,5 +120,5 @@ async function fetchScene(url, site, release) {
module.exports = { module.exports = {
fetchLatest, fetchLatest,
fetchScene, fetchScene: fetchNetworkScene,
}; };

View File

@ -13,8 +13,6 @@ async function curateSite(site, includeParameters = false) {
.where('site_id', site.id) .where('site_id', site.id)
.join('tags', 'tags.id', 'sites_tags.tag_id'); .join('tags', 'tags.id', 'sites_tags.tag_id');
const parameters = JSON.parse(site.parameters);
return { return {
id: site.id, id: site.id,
name: site.name, name: site.name,
@ -22,15 +20,15 @@ async function curateSite(site, includeParameters = false) {
description: site.description, description: site.description,
slug: site.slug, slug: site.slug,
tags, tags,
independent: !!parameters && parameters.independent, independent: !!site.parameters && site.parameters.independent,
parameters: includeParameters ? parameters : null, parameters: includeParameters ? site.parameters : null,
network: { network: {
id: site.network_id, id: site.network_id,
name: site.network_name, name: site.network_name,
description: site.network_description, description: site.network_description,
slug: site.network_slug, slug: site.network_slug,
url: site.network_url, url: site.network_url,
parameters: includeParameters ? JSON.parse(site.network_parameters) : null, parameters: includeParameters ? site.network_parameters : null,
}, },
}; };
} }

View File

@ -23,7 +23,7 @@ async function listSites() {
sites.forEach((site) => { sites.forEach((site) => {
const rkSpecial = network.id === 'realitykings' const rkSpecial = network.id === 'realitykings'
&& (new URL(site.url).hostname === 'www.realitykings.com' && (new URL(site.url).hostname === 'www.realitykings.com'
|| (site.parameters && JSON.parse(site.parameters).altLayout)) || (site.parameters?.altLayout))
? '\\*' : ''; // Reality Kings alt layout sites do not support scene fetch by URL ? '\\*' : ''; // Reality Kings alt layout sites do not support scene fetch by URL
console.log(` * ${site.name}${rkSpecial}`); console.log(` * ${site.name}${rkSpecial}`);

View File

@ -11,13 +11,7 @@ const schemaExtender = makeExtendSchemaPlugin(_build => ({
resolvers: { resolvers: {
Site: { Site: {
independent(parent, _args, _context, _info) { independent(parent, _args, _context, _info) {
if (!parent.parameters) { return !!parent.parameters?.independent;
return false;
}
const parameters = JSON.parse(parent.parameters);
return !!parameters.independent;
}, },
}, },
}, },