forked from DebaucheryLibrarian/traxxx
				
			Added release page.
This commit is contained in:
		
							parent
							
								
									7825ae2727
								
							
						
					
					
						commit
						fda6d1e475
					
				|  | @ -18,5 +18,6 @@ | ||||||
|         "react/jsx-uses-vars": 2, |         "react/jsx-uses-vars": 2, | ||||||
|         "react/jsx-indent": ["error", 4], |         "react/jsx-indent": ["error", 4], | ||||||
|         "react/jsx-indent-props": ["error", 4], |         "react/jsx-indent-props": ["error", 4], | ||||||
|  |         "react/jsx-one-expression-per-line": "off", | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -17,6 +17,8 @@ const Home = ({ releases }) => ( | ||||||
|                         <span className="scene-details"> |                         <span className="scene-details"> | ||||||
|                             <a |                             <a | ||||||
|                                 href={`/site/${release.site.id}`} |                                 href={`/site/${release.site.id}`} | ||||||
|  |                                 target="_blank" | ||||||
|  |                                 rel="noopener noreferrer" | ||||||
|                                 className="scene-site site-link" |                                 className="scene-site site-link" | ||||||
|                                 title={release.network.name} |                                 title={release.network.name} | ||||||
|                             > |                             > | ||||||
|  | @ -33,16 +35,23 @@ const Home = ({ releases }) => ( | ||||||
|                             </a> |                             </a> | ||||||
|                         </span> |                         </span> | ||||||
| 
 | 
 | ||||||
|  |                         <a | ||||||
|  |                             href={`/scene/${release.id}`} | ||||||
|  |                             target="_blank" | ||||||
|  |                             rel="noopener noreferrer" | ||||||
|  |                             className="scene-row scene-link" | ||||||
|  |                         > | ||||||
|                             <img |                             <img | ||||||
|                                 src={`/${release.site.id}/${release.id}/0.jpg`} |                                 src={`/${release.site.id}/${release.id}/0.jpg`} | ||||||
|                                 alt={release.id} |                                 alt={release.id} | ||||||
|                                 className="scene-thumbnail" |                                 className="scene-thumbnail" | ||||||
|                             /> |                             /> | ||||||
|  |                         </a> | ||||||
|                     </span> |                     </span> | ||||||
| 
 | 
 | ||||||
|                     <div className="scene-info"> |                     <div className="scene-info"> | ||||||
|                         <a |                         <a | ||||||
|                             href={`/item/${release.id}`} |                             href={`/scene/${release.id}`} | ||||||
|                             target="_blank" |                             target="_blank" | ||||||
|                             rel="noopener noreferrer" |                             rel="noopener noreferrer" | ||||||
|                             className="scene-row scene-link" |                             className="scene-row scene-link" | ||||||
|  | @ -59,6 +68,8 @@ const Home = ({ releases }) => ( | ||||||
|                                     > |                                     > | ||||||
|                                         <a |                                         <a | ||||||
|                                             href={`/actor/${actor.id}`} |                                             href={`/actor/${actor.id}`} | ||||||
|  |                                             target="_blank" | ||||||
|  |                                             rel="noopener noreferrer" | ||||||
|                                             className="actor-link" |                                             className="actor-link" | ||||||
|                                         > |                                         > | ||||||
|                                             {actor.name} |                                             {actor.name} | ||||||
|  | @ -80,6 +91,8 @@ const Home = ({ releases }) => ( | ||||||
|                                     > |                                     > | ||||||
|                                         <a |                                         <a | ||||||
|                                             href={`/tag/${tag.tag}`} |                                             href={`/tag/${tag.tag}`} | ||||||
|  |                                             target="_blank" | ||||||
|  |                                             rel="noopener noreferrer" | ||||||
|                                             className="tag-link" |                                             className="tag-link" | ||||||
|                                         > |                                         > | ||||||
|                                             {tag.tag} |                                             {tag.tag} | ||||||
|  |  | ||||||
|  | @ -3,10 +3,13 @@ | ||||||
| const React = require('react'); | const React = require('react'); | ||||||
| const PropTypes = require('prop-types'); | const PropTypes = require('prop-types'); | ||||||
| 
 | 
 | ||||||
| const Layout = ({ children }) => ( | const Layout = ({ children, title }) => ( | ||||||
|     <html lang="en"> |     <html lang="en"> | ||||||
|         <head> |         <head> | ||||||
|             <title>Porn Radar</title> |             {title | ||||||
|  |                 ? <title>Porn Radar | {title}</title> | ||||||
|  |                 : <title>Porn Radar</title> | ||||||
|  |             } | ||||||
| 
 | 
 | ||||||
|             <link href="/css/style.css" rel="stylesheet" /> |             <link href="/css/style.css" rel="stylesheet" /> | ||||||
|         </head> |         </head> | ||||||
|  | @ -25,6 +28,11 @@ const Layout = ({ children }) => ( | ||||||
| 
 | 
 | ||||||
| Layout.propTypes = { | Layout.propTypes = { | ||||||
|     children: PropTypes.node.isRequired, |     children: PropTypes.node.isRequired, | ||||||
|  |     title: PropTypes.string, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | Layout.defaultProps = { | ||||||
|  |     title: null, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| module.exports = Layout; | module.exports = Layout; | ||||||
|  |  | ||||||
|  | @ -0,0 +1,93 @@ | ||||||
|  | 'use strict'; | ||||||
|  | 
 | ||||||
|  | const React = require('react'); | ||||||
|  | const PropTypes = require('prop-types'); | ||||||
|  | const moment = require('moment'); | ||||||
|  | 
 | ||||||
|  | const Layout = require('./layout.jsx'); | ||||||
|  | 
 | ||||||
|  | const Release = ({ release, thumbnails }) => ( | ||||||
|  |     <Layout title={release.title}> | ||||||
|  |         <div> | ||||||
|  |             <h2>{release.title}</h2> | ||||||
|  |             <p>{moment(release.date).format('MMMM DD, YYYY')}</p> | ||||||
|  |             <p>{release.shootId}</p> | ||||||
|  | 
 | ||||||
|  |             <h3> | ||||||
|  |                 <a | ||||||
|  |                     href={`/site/${release.site.id}`} | ||||||
|  |                     target="_blank" | ||||||
|  |                     rel="noopener noreferrer" | ||||||
|  |                     title={release.network.name} | ||||||
|  |                 > | ||||||
|  |                     {release.site.name} | ||||||
|  |                 </a> | ||||||
|  |             </h3> | ||||||
|  | 
 | ||||||
|  |             <p>{release.network.name}</p> | ||||||
|  | 
 | ||||||
|  |             <p> | ||||||
|  |                 <a | ||||||
|  |                     href={release.url} | ||||||
|  |                     target="_blank" | ||||||
|  |                     rel="noopener noreferrer" | ||||||
|  |                 > | ||||||
|  |                     View on {new URL(release.site.url).host.replace('www.', '')} | ||||||
|  |                 </a> | ||||||
|  |             </p> | ||||||
|  | 
 | ||||||
|  |             <ul> | ||||||
|  |                 {release.actors.map(actor => ( | ||||||
|  |                     <li key={actor.id}> | ||||||
|  |                         <a | ||||||
|  |                             href={`/actor/${actor.id}`} | ||||||
|  |                             target="_blank" | ||||||
|  |                             rel="noopener noreferrer" | ||||||
|  |                             className="actor-link" | ||||||
|  |                         > | ||||||
|  |                             {actor.name} | ||||||
|  |                         </a> | ||||||
|  |                     </li> | ||||||
|  |                 ))} | ||||||
|  |             </ul> | ||||||
|  | 
 | ||||||
|  |             <p>{release.description}</p> | ||||||
|  | 
 | ||||||
|  |             <ul> | ||||||
|  |                 {release.tags.map(tag => ( | ||||||
|  |                     <li key={tag.tag}> | ||||||
|  |                         <a | ||||||
|  |                             href={`/tag/${tag.tag}`} | ||||||
|  |                             target="_blank" | ||||||
|  |                             rel="noopener noreferrer" | ||||||
|  |                             className="actor-link" | ||||||
|  |                         > | ||||||
|  |                             {tag.tag} | ||||||
|  |                         </a> | ||||||
|  |                     </li> | ||||||
|  |                 ))} | ||||||
|  |             </ul> | ||||||
|  | 
 | ||||||
|  |             {thumbnails.map((thumbnail, index) => ( | ||||||
|  |                 <img | ||||||
|  |                     key={thumbnail} | ||||||
|  |                     src={`/${release.site.id}/${release.id}/${thumbnail}`} | ||||||
|  |                     alt={`Thumbnail ${index}`} | ||||||
|  |                     className="thumbnail" | ||||||
|  |                 /> | ||||||
|  |             ))} | ||||||
|  |         </div> | ||||||
|  |     </Layout> | ||||||
|  | ); | ||||||
|  | 
 | ||||||
|  | Release.propTypes = { | ||||||
|  |     release: PropTypes.object, | ||||||
|  |     thumbnails: PropTypes.arrayOf(PropTypes.string), | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | Release.defaultProps = { | ||||||
|  |     release: null, | ||||||
|  |     thumbnails: [], | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | module.exports = Release; | ||||||
|  | @ -132,3 +132,7 @@ body { | ||||||
| .tag-link { | .tag-link { | ||||||
|     color: #000; |     color: #000; | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | .thumbnail { | ||||||
|  |     width: 300px; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -32,6 +32,7 @@ async function curateRelease(release) { | ||||||
|         site: { |         site: { | ||||||
|             id: release.site_id, |             id: release.site_id, | ||||||
|             name: release.site_name, |             name: release.site_name, | ||||||
|  |             url: release.site_url, | ||||||
|         }, |         }, | ||||||
|         network: { |         network: { | ||||||
|             id: release.network_id, |             id: release.network_id, | ||||||
|  | @ -45,9 +46,10 @@ function curateReleases(releases) { | ||||||
|     return Promise.all(releases.map(async release => curateRelease(release))); |     return Promise.all(releases.map(async release => curateRelease(release))); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| async function fetchReleases() { | async function fetchReleases(releaseId) { | ||||||
|     const releases = await knex('releases') |     const releases = await knex('releases') | ||||||
|         .select('releases.*', 'sites.name as site_name', 'sites.network_id', 'networks.name as network_name', 'networks.url as network_url') |         .where(releaseId ? { 'releases.id': releaseId } : {}) | ||||||
|  |         .select('releases.*', 'sites.name as site_name', 'sites.url as site_url', 'sites.network_id', 'networks.name as network_name', 'networks.url as network_url') | ||||||
|         .leftJoin('sites', 'releases.site_id', 'sites.id') |         .leftJoin('sites', 'releases.site_id', 'sites.id') | ||||||
|         .leftJoin('networks', 'sites.network_id', 'networks.id') |         .leftJoin('networks', 'sites.network_id', 'networks.id') | ||||||
|         .orderBy('date', 'desc') |         .orderBy('date', 'desc') | ||||||
|  |  | ||||||
|  | @ -1,5 +1,9 @@ | ||||||
| 'use strict'; | 'use strict'; | ||||||
| 
 | 
 | ||||||
|  | const config = require('config'); | ||||||
|  | const fs = require('fs').promises; | ||||||
|  | const path = require('path'); | ||||||
|  | 
 | ||||||
| const { fetchReleases } = require('../releases'); | const { fetchReleases } = require('../releases'); | ||||||
| 
 | 
 | ||||||
| async function fetchReleasesApi(req, res) { | async function fetchReleasesApi(req, res) { | ||||||
|  | @ -8,6 +12,14 @@ async function fetchReleasesApi(req, res) { | ||||||
|     res.render('home', { releases }); |     res.render('home', { releases }); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | async function fetchReleaseApi(req, res) { | ||||||
|  |     const [release] = await fetchReleases(req.params.id); | ||||||
|  |     const thumbnails = await fs.readdir(path.join(config.thumbnailPath, release.site.id.toString(), release.id.toString())); | ||||||
|  | 
 | ||||||
|  |     res.render('release', { release, thumbnails }); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| module.exports = { | module.exports = { | ||||||
|     fetchReleases: fetchReleasesApi, |     fetchReleases: fetchReleasesApi, | ||||||
|  |     fetchRelease: fetchReleaseApi, | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | @ -6,7 +6,7 @@ const express = require('express'); | ||||||
| const Router = require('express-promise-router'); | const Router = require('express-promise-router'); | ||||||
| const { createEngine } = require('express-react-views'); | const { createEngine } = require('express-react-views'); | ||||||
| 
 | 
 | ||||||
| const { fetchReleases } = require('./releases'); | const { fetchReleases, fetchRelease } = require('./releases'); | ||||||
| 
 | 
 | ||||||
| function initServer() { | function initServer() { | ||||||
|     const app = express(); |     const app = express(); | ||||||
|  | @ -20,6 +20,7 @@ function initServer() { | ||||||
|     app.engine('jsx', createEngine()); |     app.engine('jsx', createEngine()); | ||||||
| 
 | 
 | ||||||
|     router.get('/', fetchReleases); |     router.get('/', fetchReleases); | ||||||
|  |     router.get('/scene/:id', fetchRelease); | ||||||
| 
 | 
 | ||||||
|     app.use(router); |     app.use(router); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue