disable custom overboard toggle global setting, migration, improved forms

jschan
Thomas Lynch 3 years ago
parent 69c2e32c54
commit 1ef700630f
  1. 12
      migrations/0.1.6.js
  2. 3
      models/forms/changeglobalsettings.js
  3. 60
      models/pages/overboard.js
  4. 52
      models/pages/overboardcatalog.js
  5. 8
      package-lock.json
  6. 2
      package.json
  7. 4
      views/pages/globalmanagesettings.pug
  8. 29
      views/pages/overboard.pug
  9. 29
      views/pages/overboardcatalog.pug

@ -0,0 +1,12 @@
'use strict';
module.exports = async(db, redis) => {
console.log('Adding custom overboard toggle');
await db.collection('globalsettings').updateOne({ _id: 'globalsettings' }, {
'$set': {
'allowCustomOverboard': false,
},
});
console.log('Cleared globalsettings cache');
await redis.deletePattern('globalsettings');
};

@ -27,7 +27,7 @@ module.exports = async (req, res, next) => {
const newMarkdownPermLevels = Object.keys(oldSettings.permLevels.markdown).reduce((acc, val) => {
acc[val] = numberSetting(req.body[`perm_levels_markdown_${val}`], oldSettings.permLevels.markdown[val]);
return acc;
}, {})
}, {});
const newSettings = {
filters: arraySetting(req.body.filters, oldSettings.filters),
@ -94,6 +94,7 @@ module.exports = async (req, res, next) => {
},
overboardLimit: numberSetting(req.body.overboard_limit, oldSettings.overboardLimit),
overboardCatalogLimit: numberSetting(req.body.overboard_catalog_limit, oldSettings.overboardCatalogLimit),
allowCustomOverboard: booleanSetting(req.body.allow_custom_overboard, oldSettings.allowCustomOverboard),
cacheTemplates: booleanSetting(req.body.cache_templates, oldSettings.cacheTemplates),
lockWait: numberSetting(req.body.lock_wait, oldSettings.lockWait),
pruneModlogs: numberSetting(req.body.prune_modlogs, oldSettings.pruneModlogs),

@ -6,33 +6,40 @@ const { Posts, Boards } = require(__dirname+'/../../db/')
module.exports = async (req, res, next) => {
const { overboardLimit } = config.get;
const { overboardLimit, allowCustomOverboard } = config.get;
//sliced to overboardLimit optimisation because there could only be max 1 thread from each of unique boards anyway
let selectedBoards = [];
const addList = (req.query.add ? (typeof req.query.add === 'string' ? req.query.add.split(',') : req.query.add) : [])
.slice(0, overboardLimit)
.map(b => b.trim())
.filter(b => b)
.sort();
const removeList = (req.query.rem ? (typeof req.query.rem === 'string' ? req.query.rem.split(',') : req.query.rem) : [])
.slice(0, overboardLimit)
.map(b => b.trim())
.filter(b => b)
.sort();
const addBoards = [...new Set(addList)]
const removeBoardsSet = new Set(removeList);
const removeBoards = [...removeBoardsSet];
let includeDefault = req.query.include_default === 'true';
if (!includeDefault && addBoards.length === 0 && removeBoards.length === 0) {
//...really?
includeDefault = true;
}
let selectedBoards = []
, addBoards = []
, removeBoards = []
, removeBoardsSet = new Set()
, includeDefault = true
, cacheQueryString = '';
//similar to board list
const cacheQuery = new URLSearchParams({ include_default: includeDefault, add: addBoards, rem: removeBoards });
cacheQuery.sort();
const cacheQueryString = cacheQuery.toString();
if (allowCustomOverboard === true) {
//sliced to overboardLimit optimisation because there could only be max 1 thread from each of unique boards anyway
const addList = (req.query.add ? (typeof req.query.add === 'string' ? req.query.add.split(',') : req.query.add) : [])
.slice(0, overboardLimit)
.map(b => b.trim())
.filter(b => b)
.sort();
const removeList = (req.query.rem ? (typeof req.query.rem === 'string' ? req.query.rem.split(',') : req.query.rem) : [])
.slice(0, overboardLimit)
.map(b => b.trim())
.filter(b => b)
.sort();
addBoards = [...new Set(addList)]
removeBoardsSet = new Set(removeList);
removeBoards = [...removeBoardsSet];
includeDefault = req.query.include_default === 'true';
if (!includeDefault && addBoards.length === 0) {
//...really?
includeDefault = true;
}
//similar to board list
const cacheQuery = new URLSearchParams({ include_default: includeDefault, add: addBoards, rem: removeBoards });
cacheQuery.sort();
cacheQueryString = cacheQuery.toString();
}
let threads = (await cache.get(`overboard:${cacheQueryString}`)) || [];
if (!threads || threads.length === 0) {
@ -54,7 +61,7 @@ module.exports = async (req, res, next) => {
res
.set('Cache-Control', 'public, max-age=60')
if (req.path === '/overboard.html') {
if (req.path === '/overboard.json') {
res.json({
threads,
});
@ -66,6 +73,7 @@ module.exports = async (req, res, next) => {
removeBoards,
selectedBoards,
cacheQueryString,
allowCustomOverboard,
});
}

@ -8,28 +8,35 @@ module.exports = async (req, res, next) => {
const { overboardCatalogLimit, allowCustomOverboard } = config.get;
let selectedBoards = [];
const addList = (req.query.add ? (typeof req.query.add === 'string' ? req.query.add.split(',') : req.query.add) : [])
.slice(0, overboardCatalogLimit)
.map(b => b.trim())
.filter(b => b)
.sort();
const removeList = (req.query.rem ? (typeof req.query.rem === 'string' ? req.query.rem.split(',') : req.query.rem) : [])
.slice(0, overboardCatalogLimit)
.map(b => b.trim())
.filter(b => b)
.sort();
const addBoards = [...new Set(addList)]
const removeBoardsSet = new Set(removeList);
const removeBoards = [...removeBoardsSet];
let includeDefault = req.query.include_default === 'true';
if (!includeDefault && addBoards.length === 0 && removeBoards.length === 0) {
includeDefault = true;
}
let selectedBoards = []
, addBoards = []
, removeBoards = []
, removeBoardsSet = new Set()
, includeDefault = true
, cacheQueryString = '';
const cacheQuery = new URLSearchParams({ include_default: includeDefault, add: addBoards, rem: removeBoards });
cacheQuery.sort();
const cacheQueryString = cacheQuery.toString();
if (allowCustomOverboard === true) {
const addList = (req.query.add ? (typeof req.query.add === 'string' ? req.query.add.split(',') : req.query.add) : [])
.slice(0, overboardCatalogLimit)
.map(b => b.trim())
.filter(b => b)
.sort();
const removeList = (req.query.rem ? (typeof req.query.rem === 'string' ? req.query.rem.split(',') : req.query.rem) : [])
.slice(0, overboardCatalogLimit)
.map(b => b.trim())
.filter(b => b)
.sort();
addBoards = [...new Set(addList)]
removeBoardsSet = new Set(removeList);
removeBoards = [...removeBoardsSet];
includeDefault = req.query.include_default === 'true';
if (!includeDefault && addBoards.length === 0) {
includeDefault = true;
}
const cacheQuery = new URLSearchParams({ include_default: includeDefault, add: addBoards, rem: removeBoards });
cacheQuery.sort();
cacheQueryString = cacheQuery.toString();
}
let threads = (await cache.get(`catalog:${cacheQueryString}`)) || [];
if (!threads || threads.length === 0) {
@ -51,7 +58,7 @@ module.exports = async (req, res, next) => {
res
.set('Cache-Control', 'public, max-age=60')
if (req.path === '/catalog.html') {
if (req.path === '/catalog.json') {
res.json({
threads,
});
@ -63,6 +70,7 @@ module.exports = async (req, res, next) => {
removeBoards,
selectedBoards,
cacheQueryString,
allowCustomOverboard,
});
}

8
package-lock.json generated

@ -1,6 +1,6 @@
{
"name": "jschan",
"version": "0.1.5",
"version": "0.1.6",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@ -8129,9 +8129,9 @@
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
},
"path-parse": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
},
"path-root": {
"version": "0.1.1",

@ -1,7 +1,7 @@
{
"name": "jschan",
"version": "0.1.6",
"migrateVersion": "0.1.5",
"migrateVersion": "0.1.6",
"description": "",
"main": "server.js",
"dependencies": {

@ -92,6 +92,10 @@ block content
.row
.label Overboard Catalog Thread Limit
input(type='number' name='overboard_catalog_limit' value=settings.overboardCatalogLimit)
.row
.label Allow Custom Overboard
label.postform-style.ph-5
input(type='checkbox', name='allow_custom_overboard' value='true' checked=settings.allowCustomOverboard)
.row
.label Prune Modlogs Days
input(type='number', name='prune_modlogs' value=settings.pruneModlogs)

@ -13,20 +13,21 @@ block content
| (
a(href=`/catalog.html?${cacheQueryString}`) Catalog View
| )
.flexcenter.mv-10
form.form-post(action='/overboard.html' method='GET')
.col
.row
.label Include Default Boards
label.postform-style.ph-5
input(type='checkbox', name='include_default', value='true' checked=includeDefault)
.row
.label Add Boards
input(type='text' name='add' value=addBoards.join(',') placeholder='comma separated')
.row
.label Remove Boards
input(type='text' name='rem' value=removeBoards.join(',') placeholder='comma separated')
input(type='submit', value='Filter')
if allowCustomOverboard === true
.flexcenter.mv-10
form.form-post(action='/overboard.html' method='GET')
.col
.row
.label Include Default Boards
label.postform-style.ph-5
input(type='checkbox', name='include_default', value='true' checked=includeDefault)
.row
.label Add Boards
input(type='text' name='add' value=addBoards.join(',') placeholder='comma separated')
.row
.label Remove Boards
input(type='text' name='rem' value=removeBoards.join(',') placeholder='comma separated')
input(type='submit', value='Filter')
+announcements(true, true, false)
hr(size=1)
if threads.length === 0

@ -14,20 +14,21 @@ block content
| (
a(href=`/overboard.html?${cacheQueryString}`) Index View
| )
.flexcenter.mv-10
form.form-post(action='/catalog.html' method='GET')
.col
.row
.label Include Default Boards
label.postform-style.ph-5
input(type='checkbox', name='include_default', value='true' checked=includeDefault)
.row
.label Add Boards
input(type='text' name='add' value=addBoards.join(',') placeholder='comma separated')
.row
.label Remove Boards
input(type='text' name='rem' value=removeBoards.join(',') placeholder='comma separated')
input(type='submit', value='Filter')
if allowCustomOverboard === true
.flexcenter.mv-10
form.form-post(action='/catalog.html' method='GET')
.col
.row
.label Include Default Boards
label.postform-style.ph-5
input(type='checkbox', name='include_default', value='true' checked=includeDefault)
.row
.label Add Boards
input(type='text' name='add' value=addBoards.join(',') placeholder='comma separated')
.row
.label Remove Boards
input(type='text' name='rem' value=removeBoards.join(',') placeholder='comma separated')
input(type='submit', value='Filter')
+announcements()
include ../includes/stickynav.pug
.wrapbar

Loading…
Cancel
Save