From 66c3b40fbd74615b22f43423b2bb10554c4c2ed9 Mon Sep 17 00:00:00 2001 From: fatchan Date: Mon, 8 Apr 2019 12:59:21 +0000 Subject: [PATCH] early catalog view --- controllers/pages.js | 31 +++++++++---------------------- models/pages/catalog.js | 21 +++++++++++++++++++++ static/css/style.css | 31 ++++++++++++++++++++++++++++++- views/mixins/catalogtile.pug | 12 ++++++++++++ views/pages/board.pug | 2 +- views/pages/catalog.pug | 18 ++++++++++++++++++ views/pages/thread.pug | 2 +- 7 files changed, 92 insertions(+), 25 deletions(-) create mode 100644 models/pages/catalog.js create mode 100644 views/mixins/catalogtile.pug create mode 100644 views/pages/catalog.pug diff --git a/controllers/pages.js b/controllers/pages.js index 2fe91269..c3e3bae0 100644 --- a/controllers/pages.js +++ b/controllers/pages.js @@ -3,14 +3,16 @@ const express = require('express') , router = express.Router() , Boards = require(__dirname+'/../db-models/boards.js') + , checkAuth = require(__dirname+'/../helpers/check-auth.js') + , numberConverter = require(__dirname+'/../helpers/number-converter.js') + //page models , home = require(__dirname+'/../models/pages/home.js') , register = require(__dirname+'/../models/pages/register.js') , manage = require(__dirname+'/../models/pages/manage.js') , login = require(__dirname+'/../models/pages/login.js') , board = require(__dirname+'/../models/pages/board.js') - , thread = require(__dirname+'/../models/pages/thread.js') - , checkAuth = require(__dirname+'/../helpers/check-auth.js') - , numberConverter = require(__dirname+'/../helpers/number-converter.js'); + , catalog = require(__dirname+'/../models/pages/catalog.js') + , thread = require(__dirname+'/../models/pages/thread.js'); //homepage with board list router.get('/', home); @@ -45,28 +47,13 @@ router.get('/logout', (req, res, next) => { router.get('/:board/manage', Boards.exists, checkAuth, Boards.canManage, manage); // board page/recents -router.get('/:board/:page(\\d+)?', Boards.exists, numberConverter, (req, res, next) => { - - const errors = []; - - if (req.params.page && req.params.page <= 0) { - errors.push('Invalid page.'); - } - - if (errors.length > 0) { - return res.status(400).render('message', { - 'title': 'Bad request', - 'errors': errors, - 'redirect': `/${req.params.board}` - }); - } - - board(req, res); - -}); +router.get('/:board/:page(\\d+)?', Boards.exists, numberConverter, board); // thread view page router.get('/:board/thread/:id(\\d+)', Boards.exists, numberConverter, thread); +// board catalog page +router.get('/:board/catalog', Boards.exists, catalog); + module.exports = router; diff --git a/models/pages/catalog.js b/models/pages/catalog.js new file mode 100644 index 00000000..aefd36ce --- /dev/null +++ b/models/pages/catalog.js @@ -0,0 +1,21 @@ +'use strict'; + +const Posts = require(__dirname+'/../../db-models/posts.js'); + +module.exports = async (req, res, next) => { + + // get all threads + let threads; + try { + threads = await Posts.getCatalog(req.params.board); + } catch (err) { + console.error(err); + return next(); + } + + //render the page + res.render('catalog', { + threads: threads || [], + }); + +} diff --git a/static/css/style.css b/static/css/style.css index 70388718..3e8cce3b 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -9,6 +9,30 @@ body { margin: 0; } +.catalog-tile { + text-align: center; + padding: 5px; + margin: 1px; + height: 150px; + width: 150px; + min-width: 150px; + overflow: hidden; + border: 2px solid #B7C5D9; + box-sizing: border-box; + +} + +.catalog-thumb { + box-shadow: 0 0 3px black; +} + +.catalog { + display:flex; + flex-direction: row; + align-items:flex-start; + flex-wrap: wrap; +} + .spoiler { background: black; } @@ -17,7 +41,7 @@ body { color: white; } -.post-mode { +.mode { background-color: red; color: white; font-weight: bold; @@ -268,4 +292,9 @@ hr { width: 100%; } + .catalog-tile { + width: 50%; + margin: 0px; + } + } diff --git a/views/mixins/catalogtile.pug b/views/mixins/catalogtile.pug new file mode 100644 index 00000000..56e36e46 --- /dev/null +++ b/views/mixins/catalogtile.pug @@ -0,0 +1,12 @@ +mixin catalogtile(board, post, truncate) + article(class='catalog-tile') + if post.files.length > 0 + .post-file-src + a(target='_blank' href='/img/'+post.files[0].filename) + object.catalog-thumb(data=`/img/thumb-${post.files[0].filename.split('.')[0]}.png` width='64' height='64') + header.post-info + if post.subject + span.post-subject #{post.subject} + span: a(href=`/${board._id}/thread/${post.thread ? post.thread : post.postId}#${post.postId}`) ##{post.postId} + if post.message + blockquote.post-message !{post.message} diff --git a/views/pages/board.pug b/views/pages/board.pug index 4b664005..75137981 100644 --- a/views/pages/board.pug +++ b/views/pages/board.pug @@ -8,7 +8,7 @@ block content include ../includes/boardheader.pug hr(size=1) include ../includes/postform.pug - .post-mode Posting mode: Thread + .mode Posting mode: Thread [#[a.no-decoration(href=`/${board._id}/catalog`) Catalog]] hr(size=1) form(action='/forms/board/'+board._id+'/posts' method='POST' enctype='application/x-www-form-urlencoded') input(type='hidden' name='_csrf' value=csrf) diff --git a/views/pages/catalog.pug b/views/pages/catalog.pug new file mode 100644 index 00000000..e2800109 --- /dev/null +++ b/views/pages/catalog.pug @@ -0,0 +1,18 @@ +extends ../layout.pug +include ../mixins/catalogtile.pug + +block head + title /#{board._id}/ - Catalog + +block content + include ../includes/boardheader.pug + hr(size=1) + .mode Catalog View [#[a.no-decoration(href=`/${board._id}`) Go Back]] + hr(size=1) + if threads.length === 0 + p No posts. + hr(size=1) + section.catalog + for thread in threads + +catalogtile(board, thread) + diff --git a/views/pages/thread.pug b/views/pages/thread.pug index 56b2aebd..cb23c2ba 100644 --- a/views/pages/thread.pug +++ b/views/pages/thread.pug @@ -13,7 +13,7 @@ block content include ../includes/boardheader.pug hr(size=1) include ../includes/postform.pug - .post-mode Posting mode: Reply [#[a.no-decoration(href=`/${board._id}`) Go Back]] + .mode Posting mode: Reply [#[a.no-decoration(href=`/${board._id}`) Go Back]] hr(size=1) form(action='/forms/board/'+board._id+'/posts' method='POST' enctype='application/x-www-form-urlencoded') input(type='hidden' name='_csrf' value=csrf)