From 52c44f298ebeddd519ef227c400d90609f4e4667 Mon Sep 17 00:00:00 2001 From: matt Date: Tue, 19 Apr 2022 00:21:40 +0000 Subject: [PATCH] Added generalised handlebars context --- app.js | 12 ++++++++++++ routes/admin.js | 6 +++--- routes/class.js | 9 ++++----- routes/main.js | 10 ++++++++-- routes/report.js | 4 ++-- routes/singleClass.js | 16 +++++++--------- routes/singleTest.js | 8 +++----- routes/test.js | 15 +++++++-------- views/logout.hbs | 2 +- 9 files changed, 47 insertions(+), 35 deletions(-) diff --git a/app.js b/app.js index 308977b..cb502c5 100644 --- a/app.js +++ b/app.js @@ -102,6 +102,17 @@ async function main() { } })); + // Generic handlebars context + app.use((req, res, next) => { + req.hbsContext = { + name: req.session?.fullName, + userType: req.session?.userType, + title: 'Stratos' + }; + + next(); + }); + /* * Authentication middleware that redirects unauthenticated users * back to the login page if they request a page they don't have access @@ -145,6 +156,7 @@ async function main() { */ app.use((req, res) => { res.status(404).render('error', { + ...req.hbsContext, title: 'Stratos - Error', code: 404, msg: 'Page Not Found' diff --git a/routes/admin.js b/routes/admin.js index 700dbc3..db9494c 100644 --- a/routes/admin.js +++ b/routes/admin.js @@ -20,9 +20,9 @@ router.get('/dashboard', async (req, res) => { const classes = await u.getClasses(); return res.render('dashboard', { + ...req.hbsContext, title: 'Stratos - Dashboard', current: 'Dashboard', - name: req.session.fullName, stats: [ { value: classes.length, @@ -55,9 +55,9 @@ router.all(/user\/(.{36})(\/.*)?/, async (req, res, next) => { u = await new User(req.db, req.params[0]); } catch (e) { return res.status(400).render('error', { + ...req.hbsContext, title: 'Stratos - Error', current: 'Dashboard', - name: req.session.fullName, code: 400, msg: e.message }); @@ -77,9 +77,9 @@ router.get('/user/:id', (req, res) => { const u = req.user; return res.render('user', { + ...req.hbsContext, title: `Stratos - ${u.shortName}`, current: 'Dashboard', - name: req.session.fullName, user: u }); }); diff --git a/routes/class.js b/routes/class.js index 3ccbf49..33ab7a0 100644 --- a/routes/class.js +++ b/routes/class.js @@ -14,11 +14,10 @@ router.get('/classes', async (req, res) => { const u = await new User(req.db, req.session.userId); return res.render('classes', { + ...req.hbsContext, title: 'Stratos - Classes', current: 'Classes', - name: req.session.fullName, - classes: await u.getClasses(), - userType: req.session.userType + classes: await u.getClasses() }); }); @@ -26,9 +25,9 @@ router.get('/class/add', async (req, res) => { const subjects = await Subject.getAllSubjects(req.db); res.render('addClass', { + ...req.hbsContext, title: 'Stratos - Add class', current: 'Classes', - name: req.session.fullName, subjects: subjects }); }); @@ -62,9 +61,9 @@ router.all(/class\/(.{36})(\/.*)?/, async (req, res, next) => { c = await new Class(req.db, req.params[0]); } catch (e) { return res.status(400).render('error', { + ...req.hbsContext, title: 'Stratos - Error', current: 'Classes', - name: req.session.fullName, code: 400, msg: e.message }); diff --git a/routes/main.js b/routes/main.js index c252749..bd794a6 100644 --- a/routes/main.js +++ b/routes/main.js @@ -12,6 +12,7 @@ const validator = require('../lib/validator'); router.get('/', (req, res) => { return res.render('index', { + ...req.hbsContext, title: 'Stratos - Home' }); }); @@ -21,6 +22,7 @@ router.get('/login', (req, res) => { return res.redirect('/admin'); return res.render('login', { + ...req.hbsContext, title: 'Stratos - Login', redirect_to: req.query?.redirect_to }); @@ -28,20 +30,22 @@ router.get('/login', (req, res) => { router.get('/register', (req, res) => { return res.render('register', { + ...req.hbsContext, title: 'Stratos - Register' }); }); router.get('/password-reset', (req, res) => { return res.render('password-reset', { + ...req.hbsContext, title: 'Stratos - Password Recovery' }); }); router.get('/logout', (req, res) => { return res.render('logout', { - title: 'Stratos - Logout', - username: req.session.fullName + ...req.hbsContext, + title: 'Stratos - Logout' }); }); @@ -124,6 +128,7 @@ router.post('/register', async (req, res) => { } catch (e) { console.error(e); return res.render('error', { + ...req.hbsContext, code: 400, msg: 'Unable to create account' }); @@ -196,6 +201,7 @@ router.get('/password-reset/:uuid/:token', async (req, res) => { } return res.render('change-password', { + ...req.hbsContext, uuid: uuid, token: token }); diff --git a/routes/report.js b/routes/report.js index 069e421..830c801 100644 --- a/routes/report.js +++ b/routes/report.js @@ -7,9 +7,9 @@ router.get('/reports', (req, res, next) => { /* eslint-disable multiline-comment-style */ /* return res.render('reports', { + ...req.hbsContext, title: 'Stratos - Reports', - current: 'Reports', - name: req.session.fullName + current: 'Reports' }); */ /* eslint-enable multiline-comment-style */ diff --git a/routes/singleClass.js b/routes/singleClass.js index 1bd0a4e..cc7a19e 100644 --- a/routes/singleClass.js +++ b/routes/singleClass.js @@ -16,9 +16,9 @@ router.get('/:id', async (req, res) => { const testCount = recentTests.length + upcomingTests.length; return res.render('class', { + ...req.hbsContext, title: `Stratos - ${c.name}`, current: 'Classes', - name: req.session.fullName, className: c.name, teachers: c.teachers, members: c.students, @@ -30,7 +30,6 @@ router.get('/:id', async (req, res) => { deleteLink: `${linkRoot}/delete`, membersLink: `${linkRoot}/members`, teachersLink: `${linkRoot}/teachers`, - userType: req.session.userType, stats: [ { value: testCount, @@ -76,10 +75,9 @@ router.get('/:id/:memberType(members|teachers)', (req, res) => { } return res.render('classUsers', { + ...req.hbsContext, title: `Stratos - ${c.name}`, current: 'Classes', - name: req.session.fullName, - userType: req.session.userType, className: c.name, users: users, addLink: addLink, @@ -116,9 +114,9 @@ router.get('/:id/:userType(members|teachers)/add', (req, res) => { }); return res.render('addClassUser', { + ...req.hbsContext, title: `Stratos - ${c.name}`, current: 'Classes', - name: req.session.fullName, className: c.name, postLink: `/admin/class/${c.id}/${req.params.userType}/add`, newType: userType.slice(0, -1), @@ -153,9 +151,9 @@ router.post('/:id/:userType(members|teachers)/add', async (req, res) => { return res.redirect(`${rejectURL}/?err=no_user`); return res.render('addClassUser2', { + ...req.hbsContext, title: `Stratos - ${c.name}`, current: 'Classes', - name: req.session.fullName, className: c.name, postLink: `/admin/class/${c.id}/members/add2`, newType: 'student', @@ -224,12 +222,12 @@ router.get('/:id/:userType(members|teachers)/:userId/remove', `/${u.id}/remove`; return res.render('removeClassUser', { + ...req.hbsContext, title: `Stratos - ${c.name}`, current: 'Classes', - name: req.session.fullName, u: u, postLink: postLink, - pageTitle: `Remove a ${userType.slice(0, -1)}`, + pageTitle: `Remove a ${userType.slice(0, -1)}` }); } ); @@ -246,9 +244,9 @@ router.post('/:id/:userType(members|teachers)/:userId/remove', } catch (e) { console.error(e); return res.render('error', { + ...req.hbsContext, title: 'Stratos - Error', current: 'Classes', - name: req.session.fullName, msg: `Can not remove this user: ${e.message}` }); } diff --git a/routes/singleTest.js b/routes/singleTest.js index 57ee7b3..9a88604 100644 --- a/routes/singleTest.js +++ b/routes/singleTest.js @@ -20,9 +20,9 @@ router.get('/:id', async (req, res) => { } return res.render('test', { + ...req.hbsContext, title: `Stratos - ${t.template.name}`, current: 'Tests', - name: req.session.fullName, testName: t.template.name, class: t.class, subject: t.class.subject.name, @@ -30,7 +30,6 @@ router.get('/:id', async (req, res) => { reportsLink: `${linkRoot}/reports`, resultsLink: `${linkRoot}/results`, deleteLink: `${linkRoot}/delete`, - userType: req.session.userType, testResults: results, stats: [ { @@ -67,11 +66,10 @@ router.get('/:id/results', async (req, res) => { const results = await t.getTestResults(); return res.render('testResults', { + ...req.hbsContext, title: `Stratos - ${t.template.name}`, current: 'Tests', - name: req.session.fullName, testName: t.template.name, - userType: req.session.userType, testResults: results, linkRoot: linkRoot, addLink: `${linkRoot}/add` @@ -122,9 +120,9 @@ router.get('/:id/results/add', async (req, res) => { .filter(s => !existingResults.includes(s.id)); return res.render('addTestResult', { + ...req.hbsContext, title: `Stratos - ${t.template.name}`, current: 'Tests', - name: req.session.fullName, testName: t.template.name, linkRoot: linkRoot, students: students, diff --git a/routes/test.js b/routes/test.js index 102ab70..70e07e0 100644 --- a/routes/test.js +++ b/routes/test.js @@ -13,11 +13,10 @@ router.get('/tests', async (req, res) => { const u = await new User(req.db, req.session.userId); return res.render('tests', { + ...req.hbsContext, title: 'Stratos - Tests', current: 'Tests', - name: req.session.fullName, - tests: await u.getTests(), - userType: req.session.userType + tests: await u.getTests() }); }); @@ -32,9 +31,9 @@ router.get('/test/add', async (req, res) => { const [ testTemplates, classes ] = await Promise.all(promises); res.render('addTest', { + ...req.hbsContext, title: 'Stratos - Add test', current: 'Tests', - name: req.session.fullName, testTemplates: testTemplates, classes: classes }); @@ -72,9 +71,9 @@ router.post('/test/add', async (req, res) => { router.get('/testTemplate/add', (req, res) => { res.render('addTestTemplate', { + ...req.hbsContext, title: 'Stratos - Add test template', - current: 'Tests', - name: req.session.fullName + current: 'Tests' }); }); @@ -103,9 +102,9 @@ router.post('/testTemplate/add', async (req, res) => { console.error(e); return res.render('error', { + ...req.hbsContext, title: 'Stratos - Error', current: 'Tests', - name: req.session.fullName, msg: 'Could not create test template' }); } @@ -119,9 +118,9 @@ router.all(/test\/(.{36})(\/.*)?/, async (req, res, next) => { t = await new Test(req.db, req.params[0]); } catch (e) { return res.status(400).render('error', { + ...req.hbsContext, title: 'Stratos - Error', current: 'Tests', - name: req.session.fullName, code: 400, msg: e.message }); diff --git a/views/logout.hbs b/views/logout.hbs index 08ccc72..9ece7e0 100644 --- a/views/logout.hbs +++ b/views/logout.hbs @@ -1,7 +1,7 @@ {{> mainPageHeader name='Log Out' }}
-

You are logged in as {{ username }}

+

You are logged in as {{ name }}