Refactored Mike Adriano scraper. Changed logo and favicon. Added style methods to qu.
|
@ -231,7 +231,7 @@
|
|||
v-if="release.productionDate"
|
||||
class="row-tidbit"
|
||||
>
|
||||
<span class="row-label">Production date</span>
|
||||
<span class="row-label">Shoot date</span>
|
||||
{{ formatDate(release.productionDate, 'MMMM D, YYYY') }}
|
||||
</div>
|
||||
</div>
|
||||
|
|
After Width: | Height: | Size: 6.4 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 1.9 KiB |
|
@ -0,0 +1,9 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<browserconfig>
|
||||
<msapplication>
|
||||
<tile>
|
||||
<square150x150logo src="/img/favicon/mstile-150x150.png"/>
|
||||
<TileColor>#ff6c88</TileColor>
|
||||
</tile>
|
||||
</msapplication>
|
||||
</browserconfig>
|
After Width: | Height: | Size: 850 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 2.5 KiB |
|
@ -0,0 +1,28 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||
width="1388.000000pt" height="1388.000000pt" viewBox="0 0 1388.000000 1388.000000"
|
||||
preserveAspectRatio="xMidYMid meet">
|
||||
<metadata>
|
||||
Created by potrace 1.11, written by Peter Selinger 2001-2013
|
||||
</metadata>
|
||||
<g transform="translate(0.000000,1388.000000) scale(0.100000,-0.100000)"
|
||||
fill="#000000" stroke="none">
|
||||
<path d="M4200 13869 c-183 -23 -340 -73 -511 -160 -400 -206 -674 -568 -781
|
||||
-1034 l-23 -100 -3 -4640 c-2 -3327 0 -4675 8 -4765 31 -351 108 -680 232
|
||||
-994 53 -134 202 -427 283 -556 198 -314 472 -620 770 -859 462 -371 1002
|
||||
-614 1580 -710 283 -47 250 -46 2140 -46 l1790 0 105 23 c464 102 830 377
|
||||
1039 782 68 131 109 247 143 400 l23 105 0 1125 0 1125 -23 105 c-34 153 -75
|
||||
269 -143 400 -208 403 -571 677 -1034 781 -99 23 -106 23 -1067 26 l-968 4 0
|
||||
779 0 779 968 4 c961 3 968 3 1067 26 463 104 826 378 1034 781 68 131 109
|
||||
247 143 400 l23 105 0 1125 0 1125 -23 105 c-34 153 -75 269 -143 400 -208
|
||||
403 -571 677 -1034 781 -99 23 -106 23 -1067 26 l-967 4 -4 622 c-3 600 -4
|
||||
626 -26 722 -103 463 -385 834 -791 1044 -128 66 -245 108 -395 142 l-100 23
|
||||
-1090 2 c-599 1 -1119 -2 -1155 -7z m2060 -2769 l0 -1280 1620 0 1620 0 0
|
||||
-940 0 -940 -1620 0 -1620 0 0 -2117 c0 -2088 3 -2310 33 -2372 8 -16 27 -31
|
||||
52 -39 75 -25 441 -31 1798 -32 l1357 0 0 -940 0 -940 -1582 0 c-988 0 -1634
|
||||
4 -1718 10 -545 42 -1017 285 -1368 705 -221 264 -354 549 -424 908 l-22 112
|
||||
-3 4573 -3 4572 940 0 940 0 0 -1280z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.6 KiB |
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"name": "",
|
||||
"short_name": "",
|
||||
"icons": [
|
||||
{
|
||||
"src": "/img/favicon/android-chrome-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "/img/favicon/android-chrome-512x512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png"
|
||||
}
|
||||
],
|
||||
"theme_color": "#ff6c88",
|
||||
"background_color": "#ff6c88",
|
||||
"display": "standalone"
|
||||
}
|
After Width: | Height: | Size: 41 KiB |
|
@ -0,0 +1,75 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
|
||||
sodipodi:docname="favicon.svg"
|
||||
id="svg8"
|
||||
version="1.1"
|
||||
viewBox="0 0 6.8008499 14.439897"
|
||||
height="14.439898mm"
|
||||
width="6.8008499mm">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
fit-margin-bottom="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-top="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:window-y="932"
|
||||
inkscape:window-x="1182"
|
||||
inkscape:window-height="1024"
|
||||
inkscape:window-width="1920"
|
||||
showguides="false"
|
||||
showgrid="false"
|
||||
inkscape:document-rotation="0"
|
||||
inkscape:current-layer="text835"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:cy="-1.3646808"
|
||||
inkscape:cx="-12.677594"
|
||||
inkscape:zoom="3.959798"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
borderopacity="1.0"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff"
|
||||
id="base">
|
||||
<sodipodi:guide
|
||||
id="guide837"
|
||||
orientation="0.70710678,-0.70710678"
|
||||
position="-151.83278,131.09394" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
transform="translate(-31.294238,-94.737942)"
|
||||
id="layer1"
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="Layer 1">
|
||||
<g
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.05px;line-height:1.25;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';letter-spacing:0px;word-spacing:0px;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||
id="text835"
|
||||
aria-label="traxxx">
|
||||
<path
|
||||
id="path839"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.05px;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';fill:#ff6c88;fill-opacity:1;stroke-width:0.264583"
|
||||
d="m 33.923138,109.17784 q -1.08585,0 -1.8669,-0.762 -0.762,-0.78105 -0.762,-1.8669 V 94.737942 h 2.49555 v 3.3909 h 4.3053 v 2.495548 h -4.3053 v 5.39115 q 0,0.5334 0.05715,0.6096 0.0762,0.0571 0.6096,0.0571 h 3.63855 v 2.49555 z" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 5.6 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
|
@ -1,12 +1,95 @@
|
|||
<svg width="31.051mm" height="7.9587mm" version="1.1" viewBox="0 0 31.051 7.9587" xmlns="http://www.w3.org/2000/svg">
|
||||
<g transform="translate(-77.202 -97.923)">
|
||||
<g stroke-width=".26458" aria-label="traxxx">
|
||||
<path d="m77.89 105.74h1.4076v-4.5826h0.84667v-1.2806h-0.84667v-1.9579h-1.4076v1.9579h-0.68792v1.2806h0.68792z"/>
|
||||
<path d="m80.917 105.74h1.4076v-3.2597c-0.03175-0.86783 0.41275-1.3547 1.2594-1.3864v-1.3547h-0.10583c-0.60325 0-0.89958 0.16933-1.27 0.70908v-0.5715h-1.2912z"/>
|
||||
<path d="m90.072 99.881h-1.2912v0.78316c-0.48683-0.64558-1.0689-0.92075-1.9156-0.92075-1.7357 0-2.9845 1.3017-2.9845 3.0903 0 1.7674 1.2382 3.048 2.9528 3.048 0.8255 0 1.3864-0.254 1.9473-0.89958v0.762h1.2912zm-3.0586 1.1536c1.0054 0 1.7251 0.75141 1.7251 1.8203 0 0.42333-0.16933 0.91017-0.42333 1.2065-0.28575 0.34925-0.74083 0.52917-1.2806 0.52917-1.0266 0-1.7357-0.6985-1.7357-1.7251 0-1.0689 0.70908-1.8309 1.7145-1.8309z"/>
|
||||
<path d="m90.559 105.74h1.6933l1.2277-2.0108 1.2277 2.0108h1.6933l-2.0849-3.0268 1.7886-2.8363h-1.5875l-1.0372 1.7674-1.0583-1.7674h-1.5875l1.7992 2.8363z"/>
|
||||
<path d="m96.485 105.74h1.6933l1.2277-2.0108 1.2277 2.0108h1.6933l-2.0849-3.0268 1.7886-2.8363h-1.5875l-1.0372 1.7674-1.0583-1.7674h-1.5875l1.7992 2.8363z"/>
|
||||
<path d="m102.41 105.74h1.6933l1.2277-2.0108 1.2277 2.0108h1.6933l-2.0849-3.0268 1.7886-2.8363h-1.5875l-1.0372 1.7674-1.0583-1.7674h-1.5875l1.7992 2.8363z"/>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
|
||||
sodipodi:docname="logo.svg"
|
||||
id="svg8"
|
||||
version="1.1"
|
||||
viewBox="0 0 69.132355 14.439899"
|
||||
height="14.439899mm"
|
||||
width="69.132355mm">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
fit-margin-bottom="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-top="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:window-y="932"
|
||||
inkscape:window-x="1182"
|
||||
inkscape:window-height="1024"
|
||||
inkscape:window-width="1920"
|
||||
showguides="false"
|
||||
showgrid="false"
|
||||
inkscape:document-rotation="0"
|
||||
inkscape:current-layer="text835"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:cy="41.103987"
|
||||
inkscape:cx="128.82469"
|
||||
inkscape:zoom="2.8"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
borderopacity="1.0"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff"
|
||||
id="base">
|
||||
<sodipodi:guide
|
||||
id="guide837"
|
||||
orientation="0.70710678,-0.70710678"
|
||||
position="-151.83279,131.09395" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
transform="translate(-31.294238,-94.737942)"
|
||||
id="layer1"
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="Layer 1">
|
||||
<g
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.05px;line-height:1.25;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';letter-spacing:0px;word-spacing:0px;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||
id="text835"
|
||||
aria-label="traxxx">
|
||||
<path
|
||||
id="path839"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.05px;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';stroke-width:0.264583;"
|
||||
d="m 33.923138,109.17784 q -1.08585,0 -1.8669,-0.762 -0.762,-0.78105 -0.762,-1.8669 V 94.737942 h 2.49555 v 3.3909 h 4.3053 v 2.495548 h -4.3053 v 5.39115 q 0,0.5334 0.05715,0.6096 0.0762,0.0571 0.6096,0.0571 h 3.63855 v 2.49555 z" />
|
||||
<path
|
||||
id="path841"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.05px;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';stroke-width:0.264583;"
|
||||
d="m 39.752431,109.17784 v -8.4201 q 0,-1.085848 0.762,-1.847848 0.78105,-0.78105 1.8669,-0.78105 h 6.1341 v 2.495548 h -5.6007 q -0.5334,0 -0.6096,0.0762 -0.05715,0.0571 -0.05715,0.59055 v 7.8867 z" />
|
||||
<path
|
||||
id="path843"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.05px;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';stroke-width:0.264583;"
|
||||
d="m 52.592118,109.17784 q -1.08585,0 -1.8669,-0.762 -0.762,-0.78105 -0.762,-1.8669 v -4.1529 h 8.7249 v -1.1049 q 0,-0.5334 -0.0762,-0.59055 -0.05715,-0.0762 -0.59055,-0.0762 h -8.05815 v -2.495548 h 8.59155 q 1.08585,0 1.84785,0.78105 0.78105,0.762 0.78105,1.847848 v 8.4201 z m 0.5334,-2.49555 h 5.5626 v -2.03835 h -6.22935 v 1.3716 q 0,0.5334 0.05715,0.6096 0.0762,0.0571 0.6096,0.0571 z" />
|
||||
<path
|
||||
id="path845"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.05px;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';stroke-width:0.264583;"
|
||||
d="m 62.707616,109.17784 v -0.66675 l 4.05765,-4.953 -4.05765,-4.762498 v -0.66675 h 2.7051 l 2.9718,3.505198 2.9718,-3.505198 h 2.7051 v 0.66675 l -4.05765,4.762498 4.05765,4.953 v 0.66675 h -2.68605 l -2.99085,-3.6576 -2.9718,3.6576 z" />
|
||||
<path
|
||||
id="path847"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.05px;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';stroke-width:0.264583;"
|
||||
d="m 75.890205,109.17784 v -0.66675 l 4.057649,-4.953 -4.057649,-4.762498 v -0.66675 h 2.705099 l 2.9718,3.505198 2.9718,-3.505198 h 2.7051 v 0.66675 l -4.05765,4.762498 4.05765,4.953 v 0.66675 h -2.68605 l -2.99085,-3.6576 -2.9718,3.6576 z" />
|
||||
<path
|
||||
id="path849"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.05px;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';stroke-width:0.264583;"
|
||||
d="m 89.072791,109.17784 v -0.66675 l 4.05765,-4.953 -4.05765,-4.762498 v -0.66675 h 2.7051 l 2.9718,3.505198 2.9718,-3.505198 h 2.705099 v 0.66675 l -4.057649,4.762498 4.057649,4.953 v 0.66675 h -2.686049 l -2.99085,-3.6576 -2.9718,3.6576 z" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 5.2 KiB |
|
@ -0,0 +1,12 @@
|
|||
<svg width="31.051mm" height="7.9587mm" version="1.1" viewBox="0 0 31.051 7.9587" xmlns="http://www.w3.org/2000/svg">
|
||||
<g transform="translate(-77.202 -97.923)">
|
||||
<g stroke-width=".26458" aria-label="traxxx">
|
||||
<path d="m77.89 105.74h1.4076v-4.5826h0.84667v-1.2806h-0.84667v-1.9579h-1.4076v1.9579h-0.68792v1.2806h0.68792z"/>
|
||||
<path d="m80.917 105.74h1.4076v-3.2597c-0.03175-0.86783 0.41275-1.3547 1.2594-1.3864v-1.3547h-0.10583c-0.60325 0-0.89958 0.16933-1.27 0.70908v-0.5715h-1.2912z"/>
|
||||
<path d="m90.072 99.881h-1.2912v0.78316c-0.48683-0.64558-1.0689-0.92075-1.9156-0.92075-1.7357 0-2.9845 1.3017-2.9845 3.0903 0 1.7674 1.2382 3.048 2.9528 3.048 0.8255 0 1.3864-0.254 1.9473-0.89958v0.762h1.2912zm-3.0586 1.1536c1.0054 0 1.7251 0.75141 1.7251 1.8203 0 0.42333-0.16933 0.91017-0.42333 1.2065-0.28575 0.34925-0.74083 0.52917-1.2806 0.52917-1.0266 0-1.7357-0.6985-1.7357-1.7251 0-1.0689 0.70908-1.8309 1.7145-1.8309z"/>
|
||||
<path d="m90.559 105.74h1.6933l1.2277-2.0108 1.2277 2.0108h1.6933l-2.0849-3.0268 1.7886-2.8363h-1.5875l-1.0372 1.7674-1.0583-1.7674h-1.5875l1.7992 2.8363z"/>
|
||||
<path d="m96.485 105.74h1.6933l1.2277-2.0108 1.2277 2.0108h1.6933l-2.0849-3.0268 1.7886-2.8363h-1.5875l-1.0372 1.7674-1.0583-1.7674h-1.5875l1.7992 2.8363z"/>
|
||||
<path d="m102.41 105.74h1.6933l1.2277-2.0108 1.2277 2.0108h1.6933l-2.0849-3.0268 1.7886-2.8363h-1.5875l-1.0372 1.7674-1.0583-1.7674h-1.5875l1.7992 2.8363z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.4 KiB |
|
@ -9,9 +9,14 @@
|
|||
|
||||
<link rel="stylesheet" href="/css/style.css">
|
||||
|
||||
<link rel="icon" href="/img/favicon/favicon-16x16.ico" sizes="16x16">
|
||||
<link rel="icon" href="/img/favicon/favicon-32x32.ico" sizes="32x32">
|
||||
<link rel="icon" href="/img/favicon/favicon-62x62.ico" sizes="64x64">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/img/favicon/apple-touch-icon.png">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/img/favicon/favicon-32x32.png">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/img/favicon/favicon-16x16.png">
|
||||
<link rel="manifest" href="/img/favicon/site.webmanifest">
|
||||
<link rel="mask-icon" href="/img/favicon/safari-pinned-tab.svg" color="#ff6c88">
|
||||
<link rel="shortcut icon" href="/img/favicon/favicon.ico">
|
||||
<meta name="msapplication-TileColor" content="#aa2c66">
|
||||
<meta name="msapplication-config" content="/img/favicon/browserconfig.xml">
|
||||
|
||||
<script src="/js/bundle.js" defer></script>
|
||||
</head>
|
||||
|
|
|
@ -80,7 +80,7 @@ function initActorActions(store, router) {
|
|||
lazy
|
||||
hash
|
||||
comment
|
||||
copyright
|
||||
credit
|
||||
sfw: sfwMedia {
|
||||
id
|
||||
thumbnail
|
||||
|
@ -111,7 +111,7 @@ function initActorActions(store, router) {
|
|||
lazy
|
||||
hash
|
||||
comment
|
||||
copyright
|
||||
credit
|
||||
sfw: sfwMedia {
|
||||
id
|
||||
thumbnail
|
||||
|
@ -314,7 +314,7 @@ function initActorActions(store, router) {
|
|||
thumbnail
|
||||
lazy
|
||||
comment
|
||||
copyright
|
||||
credit
|
||||
sfw: sfwMedia {
|
||||
id
|
||||
thumbnail
|
||||
|
|
|
@ -621,14 +621,14 @@ exports.up = knex => Promise.resolve()
|
|||
table.text('title');
|
||||
table.text('slug');
|
||||
|
||||
table.date('date');
|
||||
table.timestamp('date');
|
||||
table.index('date');
|
||||
|
||||
table.date('production_date');
|
||||
|
||||
table.enum('date_precision', ['year', 'month', 'day', 'hour', 'minute', 'second'])
|
||||
.defaultTo('day');
|
||||
|
||||
table.date('production_date');
|
||||
|
||||
table.text('description');
|
||||
|
||||
table.integer('duration')
|
||||
|
|
|
@ -1490,21 +1490,22 @@
|
|||
"acorn": {
|
||||
"version": "7.1.0",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz",
|
||||
"integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ=="
|
||||
"integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==",
|
||||
"dev": true
|
||||
},
|
||||
"acorn-globals": {
|
||||
"version": "4.3.4",
|
||||
"resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz",
|
||||
"integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==",
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
|
||||
"integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
|
||||
"requires": {
|
||||
"acorn": "^6.0.1",
|
||||
"acorn-walk": "^6.0.1"
|
||||
"acorn": "^7.1.1",
|
||||
"acorn-walk": "^7.1.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"acorn": {
|
||||
"version": "6.4.0",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.0.tgz",
|
||||
"integrity": "sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw=="
|
||||
"version": "7.3.1",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz",
|
||||
"integrity": "sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA=="
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -1515,9 +1516,9 @@
|
|||
"dev": true
|
||||
},
|
||||
"acorn-walk": {
|
||||
"version": "6.2.0",
|
||||
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz",
|
||||
"integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA=="
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
|
||||
"integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA=="
|
||||
},
|
||||
"adm-zip": {
|
||||
"version": "0.4.14",
|
||||
|
@ -1654,11 +1655,6 @@
|
|||
"resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
|
||||
"integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8="
|
||||
},
|
||||
"array-equal": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz",
|
||||
"integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM="
|
||||
},
|
||||
"array-find-index": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
|
||||
|
@ -2211,9 +2207,9 @@
|
|||
"dev": true
|
||||
},
|
||||
"browser-process-hrtime": {
|
||||
"version": "0.1.3",
|
||||
"resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz",
|
||||
"integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw=="
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
|
||||
"integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow=="
|
||||
},
|
||||
"browserify-aes": {
|
||||
"version": "1.2.0",
|
||||
|
@ -3111,9 +3107,9 @@
|
|||
"integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw=="
|
||||
},
|
||||
"cssstyle": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.2.0.tgz",
|
||||
"integrity": "sha512-sEb3XFPx3jNnCAMtqrXPDeSgQr+jojtCeNf8cvMNMh1cG970+lljssvQDzPq6lmmJu2Vhqood/gtEomBiHOGnA==",
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
|
||||
"integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
|
||||
"requires": {
|
||||
"cssom": "~0.3.6"
|
||||
},
|
||||
|
@ -3181,13 +3177,13 @@
|
|||
}
|
||||
},
|
||||
"data-urls": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz",
|
||||
"integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==",
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz",
|
||||
"integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==",
|
||||
"requires": {
|
||||
"abab": "^2.0.0",
|
||||
"whatwg-mimetype": "^2.2.0",
|
||||
"whatwg-url": "^7.0.0"
|
||||
"abab": "^2.0.3",
|
||||
"whatwg-mimetype": "^2.3.0",
|
||||
"whatwg-url": "^8.0.0"
|
||||
}
|
||||
},
|
||||
"dayjs": {
|
||||
|
@ -3214,6 +3210,11 @@
|
|||
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
|
||||
"integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
|
||||
},
|
||||
"decimal.js": {
|
||||
"version": "10.2.0",
|
||||
"resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.0.tgz",
|
||||
"integrity": "sha512-vDPw+rDgn3bZe1+F/pyEwb1oMG2XTlRVgAa6B4KccTEpYgF8w6eQllVbQcfIJnZyvzFtFpxnpGtx8dd7DJp/Rw=="
|
||||
},
|
||||
"decode-uri-component": {
|
||||
"version": "0.2.0",
|
||||
"resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
|
||||
|
@ -3386,11 +3387,18 @@
|
|||
"integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w=="
|
||||
},
|
||||
"domexception": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz",
|
||||
"integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==",
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz",
|
||||
"integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==",
|
||||
"requires": {
|
||||
"webidl-conversions": "^4.0.2"
|
||||
"webidl-conversions": "^5.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"webidl-conversions": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz",
|
||||
"integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"domhandler": {
|
||||
|
@ -3635,9 +3643,9 @@
|
|||
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
|
||||
},
|
||||
"escodegen": {
|
||||
"version": "1.14.1",
|
||||
"resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz",
|
||||
"integrity": "sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==",
|
||||
"version": "1.14.3",
|
||||
"resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz",
|
||||
"integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==",
|
||||
"requires": {
|
||||
"esprima": "^4.0.1",
|
||||
"estraverse": "^4.2.0",
|
||||
|
@ -5761,11 +5769,11 @@
|
|||
"dev": true
|
||||
},
|
||||
"html-encoding-sniffer": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz",
|
||||
"integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==",
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz",
|
||||
"integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==",
|
||||
"requires": {
|
||||
"whatwg-encoding": "^1.0.1"
|
||||
"whatwg-encoding": "^1.0.5"
|
||||
}
|
||||
},
|
||||
"htmlparser2": {
|
||||
|
@ -6273,6 +6281,11 @@
|
|||
"isobject": "^3.0.1"
|
||||
}
|
||||
},
|
||||
"is-potential-custom-element-name": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz",
|
||||
"integrity": "sha1-DFLlS8yjkbssSUsh6GJtczbG45c="
|
||||
},
|
||||
"is-promise": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
|
||||
|
@ -6408,42 +6421,47 @@
|
|||
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
|
||||
},
|
||||
"jsdom": {
|
||||
"version": "15.2.1",
|
||||
"resolved": "https://registry.npmjs.org/jsdom/-/jsdom-15.2.1.tgz",
|
||||
"integrity": "sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g==",
|
||||
"version": "16.3.0",
|
||||
"resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.3.0.tgz",
|
||||
"integrity": "sha512-zggeX5UuEknpdZzv15+MS1dPYG0J/TftiiNunOeNxSl3qr8Z6cIlQpN0IdJa44z9aFxZRIVqRncvEhQ7X5DtZg==",
|
||||
"requires": {
|
||||
"abab": "^2.0.0",
|
||||
"acorn": "^7.1.0",
|
||||
"acorn-globals": "^4.3.2",
|
||||
"array-equal": "^1.0.0",
|
||||
"cssom": "^0.4.1",
|
||||
"cssstyle": "^2.0.0",
|
||||
"data-urls": "^1.1.0",
|
||||
"domexception": "^1.0.1",
|
||||
"escodegen": "^1.11.1",
|
||||
"html-encoding-sniffer": "^1.0.2",
|
||||
"abab": "^2.0.3",
|
||||
"acorn": "^7.1.1",
|
||||
"acorn-globals": "^6.0.0",
|
||||
"cssom": "^0.4.4",
|
||||
"cssstyle": "^2.2.0",
|
||||
"data-urls": "^2.0.0",
|
||||
"decimal.js": "^10.2.0",
|
||||
"domexception": "^2.0.1",
|
||||
"escodegen": "^1.14.1",
|
||||
"html-encoding-sniffer": "^2.0.1",
|
||||
"is-potential-custom-element-name": "^1.0.0",
|
||||
"nwsapi": "^2.2.0",
|
||||
"parse5": "5.1.0",
|
||||
"pn": "^1.1.0",
|
||||
"request": "^2.88.0",
|
||||
"request-promise-native": "^1.0.7",
|
||||
"saxes": "^3.1.9",
|
||||
"symbol-tree": "^3.2.2",
|
||||
"parse5": "5.1.1",
|
||||
"request": "^2.88.2",
|
||||
"request-promise-native": "^1.0.8",
|
||||
"saxes": "^5.0.0",
|
||||
"symbol-tree": "^3.2.4",
|
||||
"tough-cookie": "^3.0.1",
|
||||
"w3c-hr-time": "^1.0.1",
|
||||
"w3c-xmlserializer": "^1.1.2",
|
||||
"webidl-conversions": "^4.0.2",
|
||||
"w3c-hr-time": "^1.0.2",
|
||||
"w3c-xmlserializer": "^2.0.0",
|
||||
"webidl-conversions": "^6.1.0",
|
||||
"whatwg-encoding": "^1.0.5",
|
||||
"whatwg-mimetype": "^2.3.0",
|
||||
"whatwg-url": "^7.0.0",
|
||||
"ws": "^7.0.0",
|
||||
"whatwg-url": "^8.0.0",
|
||||
"ws": "^7.2.3",
|
||||
"xml-name-validator": "^3.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"acorn": {
|
||||
"version": "7.3.1",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz",
|
||||
"integrity": "sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA=="
|
||||
},
|
||||
"parse5": {
|
||||
"version": "5.1.0",
|
||||
"resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz",
|
||||
"integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ=="
|
||||
"version": "5.1.1",
|
||||
"resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz",
|
||||
"integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug=="
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -8331,11 +8349,6 @@
|
|||
"resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
|
||||
"integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow=="
|
||||
},
|
||||
"pn": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz",
|
||||
"integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA=="
|
||||
},
|
||||
"popper.js": {
|
||||
"version": "1.16.1",
|
||||
"resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz",
|
||||
|
@ -9561,11 +9574,11 @@
|
|||
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
|
||||
},
|
||||
"saxes": {
|
||||
"version": "3.1.11",
|
||||
"resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz",
|
||||
"integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==",
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
|
||||
"integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
|
||||
"requires": {
|
||||
"xmlchars": "^2.1.1"
|
||||
"xmlchars": "^2.2.0"
|
||||
}
|
||||
},
|
||||
"scheduler": {
|
||||
|
@ -10946,11 +10959,11 @@
|
|||
}
|
||||
},
|
||||
"tr46": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
|
||||
"integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz",
|
||||
"integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==",
|
||||
"requires": {
|
||||
"punycode": "^2.1.0"
|
||||
"punycode": "^2.1.1"
|
||||
}
|
||||
},
|
||||
"traverse": {
|
||||
|
@ -11560,20 +11573,18 @@
|
|||
"integrity": "sha512-ha3jNLJqNhhrAemDXcmMJMKf1Zu4sybMPr9KxJIuOpVcsDQlTBYLLladav2U+g1AvdYDG5Gs0xBTb0M5pXXYFQ=="
|
||||
},
|
||||
"w3c-hr-time": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz",
|
||||
"integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=",
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
|
||||
"integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
|
||||
"requires": {
|
||||
"browser-process-hrtime": "^0.1.2"
|
||||
"browser-process-hrtime": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"w3c-xmlserializer": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz",
|
||||
"integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==",
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz",
|
||||
"integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==",
|
||||
"requires": {
|
||||
"domexception": "^1.0.1",
|
||||
"webidl-conversions": "^4.0.2",
|
||||
"xml-name-validator": "^3.0.0"
|
||||
}
|
||||
},
|
||||
|
@ -11597,9 +11608,9 @@
|
|||
}
|
||||
},
|
||||
"webidl-conversions": {
|
||||
"version": "4.0.2",
|
||||
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
|
||||
"integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg=="
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
|
||||
"integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w=="
|
||||
},
|
||||
"webpack": {
|
||||
"version": "4.41.6",
|
||||
|
@ -11847,13 +11858,20 @@
|
|||
"integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g=="
|
||||
},
|
||||
"whatwg-url": {
|
||||
"version": "7.1.0",
|
||||
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz",
|
||||
"integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==",
|
||||
"version": "8.1.0",
|
||||
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.1.0.tgz",
|
||||
"integrity": "sha512-vEIkwNi9Hqt4TV9RdnaBPNt+E2Sgmo3gePebCRgZ1R7g6d23+53zCTnuB0amKI4AXq6VM8jj2DUAa0S1vjJxkw==",
|
||||
"requires": {
|
||||
"lodash.sortby": "^4.7.0",
|
||||
"tr46": "^1.0.1",
|
||||
"webidl-conversions": "^4.0.2"
|
||||
"tr46": "^2.0.2",
|
||||
"webidl-conversions": "^5.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"webidl-conversions": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz",
|
||||
"integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"which": {
|
||||
|
@ -11999,9 +12017,9 @@
|
|||
}
|
||||
},
|
||||
"ws": {
|
||||
"version": "7.2.1",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-7.2.1.tgz",
|
||||
"integrity": "sha512-sucePNSafamSKoOqoNfBd8V0StlkzJKL2ZAhGQinCfNQ+oacw+Pk7lcdAElecBF2VkLNZRiIb5Oi1Q5lVUVt2A=="
|
||||
"version": "7.3.1",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz",
|
||||
"integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA=="
|
||||
},
|
||||
"xml-name-validator": {
|
||||
"version": "3.0.0",
|
||||
|
|
|
@ -94,7 +94,7 @@
|
|||
"fs-extra": "^7.0.1",
|
||||
"graphile-utils": "^4.5.6",
|
||||
"iconv-lite": "^0.5.1",
|
||||
"jsdom": "^15.2.1",
|
||||
"jsdom": "^16.3.0",
|
||||
"knex": "^0.20.10",
|
||||
"knex-migrate": "^1.7.4",
|
||||
"longjohn": "^0.2.12",
|
||||
|
|
After Width: | Height: | Size: 3.5 KiB |
After Width: | Height: | Size: 7.9 KiB |
After Width: | Height: | Size: 918 B |
|
@ -0,0 +1,9 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<browserconfig>
|
||||
<msapplication>
|
||||
<tile>
|
||||
<square150x150logo src="/img/favicon/mstile-150x150.png"/>
|
||||
<TileColor>#ff6c88</TileColor>
|
||||
</tile>
|
||||
</msapplication>
|
||||
</browserconfig>
|
After Width: | Height: | Size: 617 B |
After Width: | Height: | Size: 640 B |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 1.2 KiB |
|
@ -0,0 +1,48 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||
width="1760.000000pt" height="1760.000000pt" viewBox="0 0 1760.000000 1760.000000"
|
||||
preserveAspectRatio="xMidYMid meet">
|
||||
<metadata>
|
||||
Created by potrace 1.11, written by Peter Selinger 2001-2013
|
||||
</metadata>
|
||||
<g transform="translate(0.000000,1760.000000) scale(0.100000,-0.100000)"
|
||||
fill="#000000" stroke="none">
|
||||
<path d="M4663 10258 c2 -4039 7 -7363 10 -7388 4 -25 8 -58 10 -75 3 -16 8
|
||||
-52 11 -80 4 -27 9 -63 12 -80 2 -16 6 -41 9 -55 3 -14 8 -36 10 -50 2 -14 11
|
||||
-51 18 -82 8 -32 12 -58 9 -58 -2 0 1 -7 8 -15 7 -8 10 -15 7 -15 -5 0 42
|
||||
-161 63 -215 6 -16 11 -30 10 -30 -1 0 4 -13 10 -30 7 -16 13 -34 14 -40 3
|
||||
-11 8 -22 51 -125 37 -89 144 -298 156 -305 5 -4 7 -11 4 -16 -4 -5 -1 -9 4
|
||||
-9 6 0 11 -7 11 -15 0 -8 5 -15 10 -15 6 0 10 -5 10 -11 0 -15 164 -260 205
|
||||
-306 11 -12 29 -34 40 -48 130 -168 342 -381 506 -507 17 -12 52 -39 77 -59
|
||||
39 -30 129 -91 262 -178 14 -9 39 -23 55 -31 17 -8 32 -18 35 -21 7 -9 264
|
||||
-135 286 -141 11 -3 23 -5 28 -6 5 0 12 -4 15 -9 15 -21 330 -125 481 -159 11
|
||||
-2 30 -6 43 -9 12 -3 39 -7 61 -10 21 -3 43 -8 48 -11 5 -4 24 -8 41 -10 18
|
||||
-1 46 -5 62 -8 17 -2 57 -7 90 -11 33 -3 74 -9 90 -12 17 -4 1242 -8 2723 -10
|
||||
l2692 -4 0 1521 c0 1209 -3 1520 -12 1521 -7 1 -26 1 -43 0 -41 -2 -43 -2
|
||||
-105 1 -30 1 -61 -1 -68 -6 -6 -4 -12 -4 -12 1 0 4 -22 8 -50 8 -27 0 -50 -4
|
||||
-50 -9 0 -5 -6 -4 -12 1 -15 10 -179 10 -196 -1 -7 -4 -12 -4 -12 1 0 4 -22 8
|
||||
-50 8 -27 0 -50 -4 -50 -9 0 -5 -6 -4 -12 1 -15 10 -159 10 -176 -1 -7 -4 -12
|
||||
-4 -12 1 0 4 -29 8 -65 8 -36 0 -65 -4 -65 -8 0 -4 -8 -4 -17 1 -10 4 -52 7
|
||||
-93 5 -91 -4 -83 -4 -148 -1 -28 2 -52 -1 -52 -5 0 -5 -5 -5 -11 -1 -17 10
|
||||
-89 11 -89 1 0 -6 -5 -6 -12 0 -7 5 -24 8 -38 6 -14 -2 -29 -3 -35 -3 -28 1
|
||||
-153 2 -170 1 -11 -1 -33 -1 -50 0 -16 1 -43 1 -60 0 -16 -1 -47 -1 -67 -1
|
||||
-21 0 -44 0 -50 -1 -7 0 -25 2 -40 4 -16 2 -28 0 -28 -5 0 -5 -8 -5 -17 -1
|
||||
-22 10 -164 9 -181 -1 -7 -4 -12 -4 -12 1 0 4 -22 8 -50 8 -27 0 -50 -4 -50
|
||||
-9 0 -5 -6 -4 -12 1 -15 10 -179 10 -196 -1 -7 -4 -12 -4 -12 1 0 4 -22 8 -50
|
||||
8 -27 0 -50 -4 -50 -9 0 -5 -6 -4 -12 1 -15 10 -179 10 -196 -1 -7 -4 -12 -4
|
||||
-12 1 0 4 -22 8 -50 8 -27 0 -50 -4 -50 -9 0 -5 -6 -4 -12 1 -15 10 -179 10
|
||||
-196 -1 -7 -4 -12 -4 -12 1 0 4 -22 8 -50 8 -27 0 -50 -4 -50 -9 0 -5 -6 -4
|
||||
-12 1 -15 10 -159 10 -176 -1 -7 -4 -12 -4 -12 1 0 4 -29 8 -65 8 -36 0 -65
|
||||
-4 -65 -8 0 -4 -8 -4 -17 1 -10 4 -52 7 -93 5 -91 -4 -83 -4 -148 -1 -28 2
|
||||
-52 -1 -52 -5 0 -5 -5 -5 -11 -1 -17 10 -89 11 -89 1 0 -6 -5 -6 -12 0 -7 5
|
||||
-24 8 -38 6 -14 -2 -29 -3 -35 -3 -28 1 -153 2 -170 1 -11 -1 -33 -1 -50 0
|
||||
-16 1 -43 1 -60 0 -16 -1 -47 -1 -67 -1 -21 0 -45 0 -53 0 -8 0 -22 0 -30 0
|
||||
-8 0 -21 0 -27 0 -46 -1 -325 10 -378 14 -161 15 -179 18 -272 42 -18 5 -48
|
||||
46 -53 72 -10 57 -19 110 -21 127 -16 148 -19 728 -19 3680 l0 3450 2610 1
|
||||
c1436 1 2616 2 2623 3 9 1 12 312 12 1519 l0 1519 -2607 1 c-1435 0 -2615 1
|
||||
-2624 1 -15 1 -16 177 -17 2054 0 1128 -1 2058 -1 2065 -1 9 -312 12 -1521 12
|
||||
l-1520 0 3 -7342z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.0 KiB |
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"name": "traxxx",
|
||||
"short_name": "traxxx",
|
||||
"icons": [
|
||||
{
|
||||
"src": "/img/favicon/android-chrome-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "/img/favicon/android-chrome-512x512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png"
|
||||
}
|
||||
],
|
||||
"theme_color": "#ffffff",
|
||||
"background_color": "#ffffff",
|
||||
"display": "standalone"
|
||||
}
|
After Width: | Height: | Size: 188 KiB |
After Width: | Height: | Size: 188 KiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 8.5 KiB After Width: | Height: | Size: 8.5 KiB |
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 7.1 KiB After Width: | Height: | Size: 7.1 KiB |
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
|
@ -305,8 +305,7 @@ const networks = [
|
|||
{
|
||||
slug: 'mikeadriano',
|
||||
name: 'Mike Adriano',
|
||||
url: null,
|
||||
description: null,
|
||||
url: 'https://www.mikeadriano.com',
|
||||
},
|
||||
{
|
||||
slug: 'milehighmedia',
|
||||
|
|
|
@ -1821,6 +1821,12 @@ const sites = [
|
|||
description: '',
|
||||
parent: 'dogfartnetwork',
|
||||
},
|
||||
// ELEGANT ANGEL
|
||||
{
|
||||
slug: 'elegantangel',
|
||||
name: 'Elegant Angel',
|
||||
url: 'https://www.elegantangel.com',
|
||||
},
|
||||
// EVIL ANGEL
|
||||
{
|
||||
slug: 'evilangel',
|
||||
|
|
|
@ -68,7 +68,7 @@ async function fetchActorReleases({ query }, url, remainingPages, actorName, acc
|
|||
return accReleases.concat(releases);
|
||||
}
|
||||
|
||||
async function scrapeProfile({ query, window }, actorName, url, include) {
|
||||
async function scrapeProfile({ query }, actorName, url, include) {
|
||||
const profile = {};
|
||||
|
||||
profile.avatar = {
|
||||
|
@ -85,7 +85,7 @@ async function scrapeProfile({ query, window }, actorName, url, include) {
|
|||
|
||||
if (include.releases) {
|
||||
const availablePages = query.all('.pageboxdropdown option', 'value');
|
||||
profile.releases = await fetchActorReleases(qu.init(query.q('#episodes > table'), window), url, availablePages.slice(1), actorName);
|
||||
profile.releases = await fetchActorReleases(qu.init(query.q('#episodes > table')), url, availablePages.slice(1), actorName);
|
||||
}
|
||||
|
||||
return profile;
|
||||
|
@ -105,7 +105,9 @@ async function fetchScene(url, channel) {
|
|||
|
||||
async function fetchProfile(actorName, entity, include) {
|
||||
const url = `http://killergram.com/episodes.asp?page=episodes&model=${encodeURI(actorName)}&ct=model`;
|
||||
const res = await qu.get(url, '#content');
|
||||
const res = await qu.get(url, '#content', null, {
|
||||
followRedirects: false,
|
||||
});
|
||||
|
||||
return res.ok ? scrapeProfile(res.item, actorName, url, include) : res.status;
|
||||
}
|
||||
|
|
|
@ -1,237 +1,88 @@
|
|||
'use strict';
|
||||
|
||||
/* eslint-disable newline-per-chained-call */
|
||||
const { JSDOM } = require('jsdom');
|
||||
const cheerio = require('cheerio');
|
||||
const moment = require('moment');
|
||||
// const bhttp = require('bhttp');
|
||||
const qu = require('../utils/qu');
|
||||
|
||||
const { get } = require('../utils/http');
|
||||
|
||||
const descriptionTags = {
|
||||
'anal cream pie': 'anal creampie',
|
||||
'ass to mouth': 'ass to mouth',
|
||||
'cream pie in her ass': 'anal creampie',
|
||||
'eats ass': 'ass eating',
|
||||
facial: 'facial',
|
||||
gaped: 'gaping',
|
||||
gapes: 'gaping',
|
||||
gape: 'gaping',
|
||||
'rectal cream pie': 'anal creampie',
|
||||
rimming: 'ass eating',
|
||||
};
|
||||
|
||||
function deriveTagsFromDescription(description) {
|
||||
const matches = (description || '').toLowerCase().match(new RegExp(Object.keys(descriptionTags).join('|'), 'g'));
|
||||
|
||||
return matches
|
||||
? matches.map(match => descriptionTags[match])
|
||||
: [];
|
||||
}
|
||||
|
||||
async function scrapeLatestA(html, site) {
|
||||
const { document } = new JSDOM(html).window;
|
||||
const sceneElements = document.querySelectorAll('.content-item-large, .content-item');
|
||||
|
||||
return Promise.all(Array.from(sceneElements, async (element) => {
|
||||
const $ = cheerio.load(element.innerHTML, { normalizeWhitespace: true });
|
||||
|
||||
const titleElement = element.querySelector('h3.title a');
|
||||
const title = titleElement.textContent;
|
||||
const url = titleElement.href;
|
||||
const entryId = url.split('/').slice(-2)[0];
|
||||
|
||||
const descriptionElement = element.querySelector('.desc');
|
||||
const description = descriptionElement && descriptionElement.textContent.trim();
|
||||
const date = moment(element.querySelector('.date, time').textContent, 'Do MMM YYYY').toDate();
|
||||
|
||||
const actors = Array.from(element.querySelectorAll('h4.models a'), actorElement => actorElement.textContent);
|
||||
|
||||
const durationString = element.querySelector('.total-time').textContent.trim();
|
||||
// timestamp is sometimes 00:00, sometimes 0:00:00
|
||||
const duration = durationString.split(':').length === 3
|
||||
? moment.duration(durationString).asSeconds()
|
||||
: moment.duration(`00:${durationString}`).asSeconds();
|
||||
|
||||
const ratingElement = element.querySelector('.rating');
|
||||
const stars = ratingElement && ratingElement.dataset.rating;
|
||||
|
||||
const [poster, ...primaryPhotos] = Array.from(element.querySelectorAll('img'), imageElement => imageElement.src);
|
||||
const secondaryPhotos = $('.thumb-top, .thumb-bottom')
|
||||
.map((photoIndex, photoElement) => $(photoElement).css()['background-image'])
|
||||
.toArray()
|
||||
.map(photoUrl => photoUrl.slice(photoUrl.indexOf('http'), photoUrl.indexOf('.jpg') + 4));
|
||||
|
||||
const photos = [...primaryPhotos, ...secondaryPhotos];
|
||||
const tags = deriveTagsFromDescription(description);
|
||||
|
||||
const scene = {
|
||||
url,
|
||||
entryId,
|
||||
title,
|
||||
description,
|
||||
actors,
|
||||
director: 'Mike Adriano',
|
||||
date,
|
||||
duration,
|
||||
tags,
|
||||
poster,
|
||||
photos,
|
||||
rating: {
|
||||
stars,
|
||||
},
|
||||
site,
|
||||
};
|
||||
|
||||
return scene;
|
||||
}));
|
||||
}
|
||||
|
||||
async function scrapeLatestB(html) {
|
||||
const { document } = new JSDOM(html).window;
|
||||
const sceneElements = document.querySelectorAll('.content-border');
|
||||
|
||||
return Promise.all(Array.from(sceneElements, async (element) => {
|
||||
const $ = cheerio.load(element.innerHTML, { normalizeWhitespace: true });
|
||||
async function scrapeAll(scenes) {
|
||||
return scenes.map(({ query }) => {
|
||||
const release = {
|
||||
director: 'Mike Adriano',
|
||||
};
|
||||
|
||||
const titleElement = element.querySelector('.content-title-wrap a');
|
||||
release.title = titleElement.title || titleElement.textContent.trim();
|
||||
release.url = titleElement.href;
|
||||
release.entryId = release.url.split('/').slice(-2)[0];
|
||||
release.title = query.cnt('h3.title a, .content-title-wrap a');
|
||||
release.url = query.url('h3.title a, .content-title-wrap a');
|
||||
release.entryId = new URL(release.url).pathname.match(/\/view\/(\d+)/)[1];
|
||||
|
||||
release.description = element.querySelector('.content-description').textContent.trim();
|
||||
release.date = (moment(element.querySelector('.mobile-date').textContent, 'MM/DD/YYYY')
|
||||
|| moment(element.querySelector('.date').textContent, 'Do MMM YYYY')).toDate();
|
||||
release.actors = Array.from(element.querySelectorAll('.content-models a'), actorElement => actorElement.textContent);
|
||||
release.description = query.cnt('.desc, .content-description');
|
||||
release.date = query.date('.date, time, .hide', 'Do MMM YYYY');
|
||||
|
||||
const durationString = element.querySelector('.total-time').textContent.trim();
|
||||
// timestamp is somethines 00:00, sometimes 0:00:00
|
||||
release.duration = durationString.split(':').length === 3
|
||||
? moment.duration(durationString).asSeconds()
|
||||
: moment.duration(`00:${durationString}`).asSeconds();
|
||||
release.actors = query.cnts('h4.models a, .content-models a');
|
||||
release.duration = query.dur('.total-time');
|
||||
|
||||
const [poster, ...primaryPhotos] = Array.from(element.querySelectorAll('a img'), imageElement => imageElement.src);
|
||||
const secondaryPhotos = $('.thumb-mouseover')
|
||||
.map((photoIndex, photoElement) => $(photoElement).css()['background-image'])
|
||||
.toArray()
|
||||
.map(photoUrl => photoUrl.slice(photoUrl.indexOf('http'), photoUrl.indexOf('.jpg') + 4));
|
||||
const [poster, ...primaryPhotos] = query.imgs('a img');
|
||||
const secondaryPhotos = query.styles('.thumb-top, .thumb-bottom, .thumb-mouseover', 'background-image').map(style => style.match(/url\((.*)\)/)[1]);
|
||||
|
||||
release.poster = poster;
|
||||
release.photos = [...primaryPhotos, ...secondaryPhotos];
|
||||
release.photos = primaryPhotos.concat(secondaryPhotos);
|
||||
|
||||
release.tags = deriveTagsFromDescription(release.description);
|
||||
return release;
|
||||
}));
|
||||
});
|
||||
}
|
||||
|
||||
async function scrapeSceneA(html, url) {
|
||||
const { document } = new JSDOM(html).window;
|
||||
const element = document.querySelector('.content-page-info');
|
||||
const release = {
|
||||
url,
|
||||
director: 'Mike Adriano',
|
||||
function scrapeScene({ query }, url) {
|
||||
const release = { director: 'Mike Adriano' };
|
||||
|
||||
if (query.exists('a[href*="stackpath.com"]')) {
|
||||
throw new Error('URL blocked by StackPath');
|
||||
}
|
||||
|
||||
release.entryId = new URL(url).pathname.match(/\/view\/(\d+)/)[1];
|
||||
|
||||
release.title = query.cnt('.content-page-info .title');
|
||||
release.description = query.cnt('.content-page-info .desc');
|
||||
release.date = query.date('.content-page-info .date, .content-page-info .hide', 'Do MMM YYYY');
|
||||
|
||||
release.actors = query.cnts('.content-page-info .models a');
|
||||
release.duration = query.dur('.content-page-info .total-time:last-child');
|
||||
|
||||
release.poster = query.poster('.content-page-header video, .content-page-header-inner video');
|
||||
|
||||
const trailerEl = query.q('.content-page-header source, .content-page-header-inner source');
|
||||
|
||||
if (trailerEl) {
|
||||
release.trailer = {
|
||||
src: trailerEl.src,
|
||||
type: trailerEl.type,
|
||||
};
|
||||
|
||||
release.entryId = url.split('/').slice(-2)[0];
|
||||
release.title = element.querySelector('.title').textContent.trim();
|
||||
release.description = element.querySelector('.desc').textContent.trim();
|
||||
release.date = moment(element.querySelector('.post-date').textContent.trim(), 'Do MMM YYYY').toDate();
|
||||
|
||||
release.actors = Array.from(element.querySelectorAll('.models a'), actorElement => actorElement.textContent);
|
||||
|
||||
const durationString = element.querySelector('.total-time').textContent.trim();
|
||||
// timestamp is sometimes 00:00, sometimes 0:00:00
|
||||
release.duration = durationString.split(':').length === 3
|
||||
? moment.duration(durationString).asSeconds()
|
||||
: moment.duration(`00:${durationString}`).asSeconds();
|
||||
|
||||
const { poster } = document.querySelector('.content-page-header video');
|
||||
const { src, type } = document.querySelector('.content-page-header source');
|
||||
|
||||
release.poster = poster;
|
||||
release.trailer = { src, type };
|
||||
|
||||
release.tags = deriveTagsFromDescription(release.description);
|
||||
}
|
||||
|
||||
return release;
|
||||
}
|
||||
|
||||
async function scrapeSceneB(html, url, site) {
|
||||
const { document } = new JSDOM(html).window;
|
||||
const element = document.querySelector('.content-page-info');
|
||||
|
||||
const entryId = url.split('/').slice(-2)[0];
|
||||
const title = element.querySelector('.title').textContent.trim();
|
||||
const description = element.querySelector('.desc').textContent.trim();
|
||||
const date = moment(element.querySelector('.date').textContent.trim(), 'Do MMM YYYY').toDate();
|
||||
|
||||
const actors = Array.from(element.querySelectorAll('.models a'), actorElement => actorElement.textContent);
|
||||
|
||||
const durationString = element.querySelector('.total-time').textContent.trim();
|
||||
// timestamp is somethines 00:00, sometimes 0:00:00
|
||||
const duration = durationString.split(':').length === 3
|
||||
? moment.duration(durationString).asSeconds()
|
||||
: moment.duration(`00:${durationString}`).asSeconds();
|
||||
|
||||
const { poster } = document.querySelector('.content-page-header-inner video');
|
||||
const { src, type } = document.querySelector('.content-page-header-inner source');
|
||||
|
||||
const tags = deriveTagsFromDescription(description);
|
||||
|
||||
const scene = {
|
||||
url,
|
||||
entryId,
|
||||
title,
|
||||
description,
|
||||
actors,
|
||||
director: 'Mike Adriano',
|
||||
date,
|
||||
duration,
|
||||
tags,
|
||||
poster,
|
||||
trailer: {
|
||||
src,
|
||||
type,
|
||||
},
|
||||
site,
|
||||
};
|
||||
|
||||
return scene;
|
||||
}
|
||||
|
||||
async function fetchLatest(site, page = 1) {
|
||||
const { host } = new URL(site.url);
|
||||
async function fetchLatest(channel, page = 1) {
|
||||
const { host } = new URL(channel.url);
|
||||
const url = `https://tour.${host}/videos?page=${page}`;
|
||||
|
||||
const res = await get(url);
|
||||
const res = await qu.get(url);
|
||||
|
||||
if (res.code === 200) {
|
||||
if (host === 'trueanal.com' || host === 'swallowed.com') {
|
||||
return scrapeLatestA(res.html, site);
|
||||
if (res.ok) {
|
||||
if (res.item.query.exists('a[href*="stackpath.com"]')) {
|
||||
throw new Error('URL blocked by StackPath');
|
||||
}
|
||||
|
||||
return scrapeLatestB(res.html, site);
|
||||
return scrapeAll(qu.initAll(res.item.el, '.content-item-large, .content-item, .content-border'), channel);
|
||||
}
|
||||
|
||||
return res.code;
|
||||
return res.status;
|
||||
}
|
||||
|
||||
async function fetchScene(url, site) {
|
||||
const { host } = new URL(site.url);
|
||||
const res = await get(url);
|
||||
async function fetchScene(url, channel) {
|
||||
const res = await qu.get(url);
|
||||
|
||||
if (res.code === 200) {
|
||||
if (host === 'trueanal.com' || host === 'swallowed.com') {
|
||||
return scrapeSceneA(res.body.toString(), url, site);
|
||||
if (res.ok) {
|
||||
return scrapeScene(res.item, url, channel);
|
||||
}
|
||||
|
||||
return scrapeSceneB(res.body.toString(), url, site);
|
||||
}
|
||||
|
||||
return res.code;
|
||||
return res.status;
|
||||
}
|
||||
|
||||
/* API protected
|
||||
|
|
|
@ -78,7 +78,7 @@ function scrapeAll(scenes, site, origin) {
|
|||
release.url = `${site?.url || origin}${scene.targetUrl}`;
|
||||
|
||||
release.date = moment.utc(scene.releaseDate).toDate();
|
||||
release.shootDate = moment.utc(scene.shootDate).toDate();
|
||||
release.datePrecision = 'minute';
|
||||
|
||||
release.actors = scene.models;
|
||||
release.stars = Number(scene.textRating) / 2;
|
||||
|
@ -104,7 +104,7 @@ function scrapeUpcoming(scene, site) {
|
|||
release.url = `${site.url}${scene.targetUrl}`;
|
||||
|
||||
release.date = moment.utc(scene.releaseDate).toDate();
|
||||
release.shootDate = moment.utc(scene.shootDate).toDate();
|
||||
release.datePrecision = 'minute';
|
||||
|
||||
release.actors = scene.models;
|
||||
|
||||
|
@ -133,7 +133,8 @@ async function scrapeScene(data, url, site, baseRelease) {
|
|||
release.entryId = scene.newId;
|
||||
|
||||
release.date = moment.utc(scene.releaseDate).toDate();
|
||||
release.shootDate = moment.utc(scene.shootDate).toDate();
|
||||
release.productionDate = moment.utc(scene.shootDate).toDate();
|
||||
release.datePrecision = 'minute';
|
||||
|
||||
release.actors = baseRelease?.actors || scene.models;
|
||||
|
||||
|
|
|
@ -31,6 +31,7 @@ function curateReleaseEntry(release, batchId, existingRelease) {
|
|||
shoot_id: release.shootId || null,
|
||||
url: release.url,
|
||||
date: Number(release.date) ? release.date : null,
|
||||
production_date: Number(release.productionDate) ? release.productionDate : null,
|
||||
date_precision: release.datePrecision,
|
||||
slug,
|
||||
description: release.description,
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
'use strict';
|
||||
|
||||
const { JSDOM } = require('jsdom');
|
||||
|
||||
const el = new JSDOM(`
|
||||
<span id="url" style="background-image: url(https://w.wallhaven.cc/full/dg/wallhaven-dg7y23.jpg);">
|
||||
<span id="urlQuotes" style="background-image: url('https://w.wallhaven.cc/full/dg/wallhaven-dg7y23.jpg');">
|
||||
<span id="color" style="color: rgb(255, 0, 0);">
|
||||
<span id="urlSpaces" style="background-image: url( https://w.wallhaven.cc/full/md/wallhaven-mdvmrm.jpg );">
|
||||
<span id="colorSpaces" style="color: rgb( 255, 0, 0 );">
|
||||
`).window.document;
|
||||
|
||||
console.log(el.querySelector('#url').style.backgroundImage);
|
||||
console.log(el.querySelector('#urlQuotes').style.backgroundImage);
|
||||
console.log(el.querySelector('#color').style.color);
|
||||
console.log(el.querySelector('#urlSpaces').style.backgroundImage);
|
||||
console.log(el.querySelector('#colorSpaces').style.color);
|
|
@ -4,9 +4,11 @@ const { JSDOM } = require('jsdom');
|
|||
const moment = require('moment');
|
||||
const http = require('./http');
|
||||
|
||||
const { window: globalWindow } = new JSDOM('');
|
||||
|
||||
function trim(str) {
|
||||
if (typeof str !== 'string') {
|
||||
return null;
|
||||
return str;
|
||||
}
|
||||
|
||||
return str.trim().replace(/\s+/g, ' ');
|
||||
|
@ -55,9 +57,9 @@ function q(context, selector, attrArg, applyTrim = true) {
|
|||
if (attr) {
|
||||
const value = selector
|
||||
? context.querySelector(selector)?.[attr] || context.querySelector(selector)?.attributes[attr]?.value
|
||||
: context[attr] || context.attributes[attr]?.value;
|
||||
: context[attr] || context.getAttribute(attr);
|
||||
|
||||
return applyTrim && value ? trim(value) : value;
|
||||
return applyTrim && typeof value === 'string' ? trim(value) : value;
|
||||
}
|
||||
|
||||
return selector ? context.querySelector(selector) : context;
|
||||
|
@ -77,6 +79,14 @@ function exists(context, selector) {
|
|||
return !!q(context, selector);
|
||||
}
|
||||
|
||||
function content(context, selector, applyTrim = true) {
|
||||
return q(context, selector, 'textContent', applyTrim);
|
||||
}
|
||||
|
||||
function contents(context, selector, applyTrim) {
|
||||
return all(context, selector, 'textContent', applyTrim);
|
||||
}
|
||||
|
||||
function html(context, selector) {
|
||||
const el = q(context, selector, null, true);
|
||||
|
||||
|
@ -103,6 +113,33 @@ function text(context, selector, applyTrim = true) {
|
|||
return applyTrim ? trim(textValue) : textValue;
|
||||
}
|
||||
|
||||
function removeStyleFunctionSpaces(el) {
|
||||
// jsdom appears to have a bug where it ignores inline CSS attributes set to a function() containing spaces, e.g. url( image.png )
|
||||
el.setAttribute('style', el.getAttribute('style').replace(/\(\s+(.*)\s+\)/g, (match, cssArgs) => `(${cssArgs})`));
|
||||
}
|
||||
|
||||
function style(context, selector, styleAttr) {
|
||||
const el = q(context, selector);
|
||||
|
||||
if (el) {
|
||||
removeStyleFunctionSpaces(el);
|
||||
|
||||
return styleAttr ? el.style[styleAttr] : el.style;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
function styles(context, selector, styleAttr) {
|
||||
const elStyles = Array.from(context.querySelectorAll(selector), (el) => {
|
||||
removeStyleFunctionSpaces(el);
|
||||
|
||||
return styleAttr ? el.style[styleAttr] : el.style;
|
||||
});
|
||||
|
||||
return elStyles;
|
||||
}
|
||||
|
||||
function number(context, selector, attr = true) {
|
||||
const value = q(context, selector, attr);
|
||||
|
||||
|
@ -236,6 +273,10 @@ const legacyFuncs = {
|
|||
const quFuncs = {
|
||||
all,
|
||||
html,
|
||||
content,
|
||||
contents,
|
||||
cnt: content,
|
||||
cnts: contents,
|
||||
date,
|
||||
dur: duration,
|
||||
duration,
|
||||
|
@ -250,6 +291,8 @@ const quFuncs = {
|
|||
num: number,
|
||||
poster,
|
||||
q,
|
||||
style,
|
||||
styles,
|
||||
text,
|
||||
texts,
|
||||
trailer: video,
|
||||
|
@ -265,7 +308,7 @@ function init(element, window) {
|
|||
const legacyContextFuncs = Object.entries(legacyFuncs) // dynamically attach methods with context
|
||||
.reduce((acc, [key, func]) => ({
|
||||
...acc,
|
||||
[key]: (...args) => (window && args[0] instanceof window.HTMLElement // allow for different context
|
||||
[key]: (...args) => (args[0] instanceof globalWindow.HTMLElement // allow for different context
|
||||
? func(...args)
|
||||
: func(element, ...args)),
|
||||
}), {});
|
||||
|
@ -273,7 +316,7 @@ function init(element, window) {
|
|||
const quContextFuncs = Object.entries(quFuncs) // dynamically attach methods with context
|
||||
.reduce((acc, [key, func]) => ({
|
||||
...acc,
|
||||
[key]: (...args) => (window && args[0] instanceof window.HTMLElement // allow for different context
|
||||
[key]: (...args) => (args[0] instanceof globalWindow.HTMLElement // allow for different context
|
||||
? func(...args)
|
||||
: func(element, ...args)),
|
||||
}), {});
|
||||
|
@ -319,7 +362,7 @@ function extractAll(htmlValue, selector) {
|
|||
}
|
||||
|
||||
async function get(urlValue, selector, headers, options, queryAll = false) {
|
||||
const res = await http.get(urlValue, headers);
|
||||
const res = await http.get(urlValue, headers, options);
|
||||
|
||||
if (res.statusCode === 200) {
|
||||
const item = queryAll
|
||||
|
|