jschan - Anonymous imageboard software. Classic look, modern features and feel. Works without JavaScript and supports Tor, I2P, Lokinet, etc.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

72 lines
1.6 KiB

'use strict';
const { enableWebring } = require(__dirname+'/../../configs/main.json')
, { Boards, Webring } = require(__dirname+'/../../db/')
, limit = 20;
module.exports = async (req, res, next) => {
const nopage = { ...req.query };
delete nopage.page;
const queryString = new URLSearchParams(nopage).toString();
let page;
if (req.query.page && Number.isSafeInteger(parseInt(req.query.page))) {
page = parseInt(req.query.page);
if (page <= 0) {
page = 1;
}
} else {
page = 1;
}
const offset = (page-1) * limit;
const direction = req.query.direction && req.query.direction === '1' ? 1 : -1;
let sort
if (req.query.sort && req.query.sort === 'activity') {
sort = {
'lastPostTimestamp': direction
}
} else {
sort = {
'ips': direction,
'pph': direction,
'sequence_value': direction
};
}
let filter = {};
const search = !Array.isArray(req.query.search) ? req.query.search : null;
if (req.query.search && search) {
filter = {
'search': search
}
}
let localBoards, webringBoards, localPages, webringPages;
try {
[ localBoards, localPages, webringBoards, webringPages ] = await Promise.all([
Boards.boardSort(offset, limit, sort, filter),
Boards.count(),
enableWebring ? Webring.boardSort(offset, limit, sort, filter) : null,
enableWebring ? Webring.count() : 0,
]);
localPages = Math.ceil(localPages / limit);
webringPages = Math.ceil(webringPages / limit);
} catch (err) {
return next(err);
}
const maxPage = Math.max(localPages, webringPages);
return res.render('boardlist', {
localBoards,
webringBoards,
page,
maxPage,
query: req.query,
search,
queryString,
});
}