public banner page for board and rebuilds when board banners updated in manage page

merge-requests/208/head
fatchan 5 years ago
parent 6ae05b58ed
commit ebf0b603f5
  1. 7
      build.js
  2. 8
      controllers/pages.js
  3. 6
      gulp/res/css/style.css
  4. 15
      models/forms/deletebanners.js
  5. 12
      models/forms/uploadbanners.js
  6. 29
      models/pages/banners.js
  7. 29
      models/pages/randombanner.js
  8. 2
      views/includes/bannersheader.pug
  9. 2
      views/includes/boardheader.pug
  10. 2
      views/includes/catalogheader.pug
  11. 16
      views/includes/pages.pug
  12. 1
      views/includes/postform.pug
  13. 2
      views/mixins/post.pug
  14. 14
      views/pages/banners.pug
  15. 2
      views/pages/board.pug
  16. 2
      views/pages/manage.pug

@ -36,6 +36,13 @@ function addBacklinks(thread, preview) { //preview means this is not the full th
module.exports = {
buildBanners: async(board) => {
console.log('building banners', `${board._id}/banners.html`);
return render(`${board._id}/banners.html`, 'banners.pug', {
board: board
});
},
buildCatalog: async (board) => {
console.log('building catalog', `${board._id}/catalog.html`);
if (!board._id) {

@ -18,6 +18,7 @@ const express = require('express')
, board = require(__dirname+'/../models/pages/board.js')
, catalog = require(__dirname+'/../models/pages/catalog.js')
, banners = require(__dirname+'/../models/pages/banners.js')
, randombanner = require(__dirname+'/../models/pages/randombanner.js')
, captchaPage = require(__dirname+'/../models/pages/captchapage.js')
, captcha = require(__dirname+'/../models/pages/captcha.js')
, thread = require(__dirname+'/../models/pages/thread.js');
@ -50,12 +51,15 @@ router.get('/logout', (req, res, next) => {
router.get('/captcha', captcha);
// random board banner
router.get('/banners', banners);
router.get('/randombanner', randombanner);
//public board banners page
router.get('/:board/banners.html', Boards.exists, banners);
//board manage page
router.get('/:board/manage.html', Boards.exists, isLoggedIn, hasPerms, csrf, manage);
//board manage page
//global manage page
router.get('/globalmanage.html', isLoggedIn, hasPerms, csrf, globalManage);
// board page/recents

@ -23,11 +23,15 @@ body {
flex-direction: column;
}
.bold {
font-weight: bold;
}
pre {
font-family: inherit;
margin: 1em 2em;
white-space: pre-wrap;
word-break: break-word;
overflow-wrap: break-word;
}
.replies {

@ -2,18 +2,29 @@
const remove = require('fs-extra').remove
, uploadDirectory = require(__dirname+'/../../helpers/uploadDirectory.js')
, Boards = require(__dirname+'/../../db/boards.js');
, Boards = require(__dirname+'/../../db/boards.js')
, { buildBanners } = require(__dirname+'/../../build.js')
module.exports = async (req, res, next) => {
const redirect = `/${req.params.board}/manage.html`
const redirect = `/${req.params.board}/manage.html`;
//delete file of all selected banners
await Promise.all(req.body.checkedbanners.map(async filename => {
remove(`${uploadDirectory}banner/${req.params.board}/${filename}`);
}));
//remove from db
await Boards.removeBanners(req.params.board, req.body.checkedbanners);
//update res locals banners in memory
res.locals.board.banners = res.locals.board.banners.filter(banner => {
return !req.body.checkedbanners.includes(banner);
});
//rebuild public banners page
await buildBanners(res.locals.board);
return res.render('message', {
'title': 'Success',
'message': `Deleted banners.`,

@ -8,12 +8,13 @@ const path = require('path')
, imageIdentify = require(__dirname+'/../../helpers/files/imageidentify.js')
, deleteTempFiles = require(__dirname+'/../../helpers/files/deletetempfiles.js')
, Boards = require(__dirname+'/../../db/boards.js')
, { buildBanners } = require(__dirname+'/../../build.js')
module.exports = async (req, res, next) => {
const redirect = `/${req.params.board}/manage.html`
// check all mime types befoer we try saving anything
// check all mime types before we try saving anything
for (let i = 0; i < res.locals.numFiles; i++) {
if (!fileCheckMimeType(req.files.file[i].mimetype, {image: true, animatedImage: true, video: false})) {
await deleteTempFiles(req).catch(e => console.error);
@ -69,11 +70,18 @@ module.exports = async (req, res, next) => {
await remove(file.tempFilePath);
}
// because express middleware is autistic i need to do this
deleteTempFiles(req).catch(e => console.error);
// add banners to the db
await Boards.addBanners(req.params.board, filenames);
//add banners to board in memory
res.locals.board.banners = res.locals.board.banners.concat(filenames);
// rebuild the public banners page
await buildBanners(res.locals.board);
return res.render('message', {
'title': 'Success',
'message': `Uploaded ${filenames.length} new banners.`,

@ -1,29 +1,16 @@
'use strict';
const Boards = require(__dirname+'/../../db/boards.js');
const { buildBanners } = require(__dirname+'/../../build.js')
, uploadDirectory = require(__dirname+'/../../helpers/uploadDirectory.js');
module.exports = async (req, res, next) => {
if (!req.query.board) {
return next();
}
try {
await buildBanners(res.locals.board);
} catch (err) {
return next(err);
}
//agregate to get single random item from banners array
const board = await Boards.db.aggregate([
{
'$unwind': '$banners'
},
{
'$sample': {
'size' : 1
}
}
]).toArray().then(res => res[0]);
if (board && board.banners != null) {
return res.redirect(`/banner/${req.query.board}/${board.banners}`);
}
return res.redirect('/img/defaultbanner.png');
return res.sendFile(`${uploadDirectory}html/${req.params.board}/banners.html`);
}

@ -0,0 +1,29 @@
'use strict';
const Boards = require(__dirname+'/../../db/boards.js');
module.exports = async (req, res, next) => {
if (!req.query.board) {
return next();
}
//agregate to get single random item from banners array
const board = await Boards.db.aggregate([
{
'$unwind': '$banners'
},
{
'$sample': {
'size' : 1
}
}
]).toArray().then(res => res[0]);
if (board && board.banners != null) {
return res.redirect(`/banner/${req.query.board}/${board.banners}`);
}
return res.redirect('/img/defaultbanner.png');
}

@ -0,0 +1,2 @@
section.board-header
h1.board-title Banners (#[a.no-decoration(href=`/${board._id}/index.html`) /#{board._id}/])

@ -1,5 +1,5 @@
section.board-header
img.board-banner(src=`/banners?board=${board._id}` width='300' height='100')
img.board-banner(src=`/randombanner?board=${board._id}` width='300' height='100')
br
a.no-decoration(href=`/${board._id}/index.html`)
h1.board-title /#{board._id}/ - #{board.name}

@ -1,4 +1,4 @@
section.board-header
img.board-banner(src=`/banners?board=${board._id}` width='300' height='100')
img.board-banner(src=`/randombanner?board=${board._id}` width='300' height='100')
br
h1.board-title Catalog (#[a.no-decoration(href=`/${board._id}/index.html`) /#{board._id}/])

@ -1,15 +1,5 @@
| Page:
if page === 1
a(href=`/${board._id}/index.html`) [#{1}]
|
else
a(href=`/${board._id}/index.html`) #{1}
|
- for(let i = 2; i <= maxPage; i++)
if i === page
a(href=`/${board._id}/${i}.html`) [#{i}]
|
else
a(href=`/${board._id}/${i}.html`) #{i}
|
- for(let i = 1; i <= maxPage; i++)
a(class=`${page === i ? 'bold' : ''}` href=`/${board._id}/${i === 1 ? 'index' : i}.html`) [#{i}]
|
| |

@ -60,3 +60,4 @@ section.form-wrapper.flex-center
span.required *
| = required field
input(type='submit', value=`New ${isThread ? 'Reply' : 'Thread'}`)

@ -1,6 +1,6 @@
mixin post(post, truncate, manage=false, globalmanage=false)
.anchor(id=post.postId)
article(class='post-container '+(post.thread ? '' : 'op'))
article(class=`post-container ${post.thread ? '' : 'op'}`)
- const postURL = `/${post.board}/thread/${post.thread || post.postId}.html#${post.postId}`;
header.post-info
if globalmanage

@ -0,0 +1,14 @@
extends ../layout.pug
block head
title /#{board._id}/ - Banners
block content
include ../includes/bannersheader.pug
hr(size=1)
section.catalog
if board.banners.length > 0
each banner in board.banners
img.board-banner(src=`/banner/${board._id}/${banner}` width='300' height='100')
else
p Board has no custom banners.

@ -2,7 +2,7 @@ extends ../layout.pug
include ../mixins/post.pug
block head
title /#{board._id}/ - #{board.description}
title /#{board._id}/ - #{board.description} - page #{page}
block content
include ../includes/boardheader.pug

@ -3,7 +3,7 @@ include ../mixins/post.pug
include ../mixins/ban.pug
block head
title Manage
title /#{board._id}/ - Manage
block content
include ../includes/boardheader.pug

Loading…
Cancel
Save