From 6982704de31e1d9ae841e0b401a7718362b535ce Mon Sep 17 00:00:00 2001 From: Thomas Forgione Date: Sat, 23 Sep 2017 09:39:42 +0000 Subject: [PATCH] Added index --- controllers/auth/templates/login.pug | 4 +++ controllers/auth/urls.js | 5 +++ controllers/auth/views.js | 9 +++++ controllers/index/templates/index.pug | 4 +++ controllers/index/views.js | 2 +- index.js | 3 +- settings/config.js | 1 + templates/base.pug | 48 +++++++++++++++++++++++++++ utils/controllers.js | 20 +++++------ utils/create-url.js | 27 +++++++++++---- 10 files changed, 104 insertions(+), 19 deletions(-) create mode 100644 controllers/auth/templates/login.pug create mode 100644 controllers/auth/urls.js create mode 100644 controllers/auth/views.js create mode 100644 controllers/index/templates/index.pug create mode 100644 templates/base.pug diff --git a/controllers/auth/templates/login.pug b/controllers/auth/templates/login.pug new file mode 100644 index 0000000..ba77221 --- /dev/null +++ b/controllers/auth/templates/login.pug @@ -0,0 +1,4 @@ +extends ../../../templates/base.pug + +block content + p Login diff --git a/controllers/auth/urls.js b/controllers/auth/urls.js new file mode 100644 index 0000000..d4a207d --- /dev/null +++ b/controllers/auth/urls.js @@ -0,0 +1,5 @@ +const url = require('create-url').url; + +module.exports = [ + url('/login', 'login', 'login'), +] diff --git a/controllers/auth/views.js b/controllers/auth/views.js new file mode 100644 index 0000000..e810b6b --- /dev/null +++ b/controllers/auth/views.js @@ -0,0 +1,9 @@ +const getUrl = require('create-url').getUrl; + +module.exports.login = function(req, res, render) { + render('login.pug'); +} + +module.exports.logout = function(req, res, render) { + res.redirect(getUrl("index")); +} diff --git a/controllers/index/templates/index.pug b/controllers/index/templates/index.pug new file mode 100644 index 0000000..ca3d363 --- /dev/null +++ b/controllers/index/templates/index.pug @@ -0,0 +1,4 @@ +extends ../../../templates/base.pug + +block content + p Hello world diff --git a/controllers/index/views.js b/controllers/index/views.js index fd7e809..c3e64d4 100644 --- a/controllers/index/views.js +++ b/controllers/index/views.js @@ -1,3 +1,3 @@ module.exports.index = function(req, res, render) { - res.send('Hello'); + render('index.pug'); } diff --git a/index.js b/index.js index ed8db32..33e89a4 100644 --- a/index.js +++ b/index.js @@ -1,6 +1,7 @@ const config = require('./settings/config.js'); require('app-module-path').addPath(config.BASE_DIR); require('app-module-path').addPath(config.UTILS_DIR); +require('app-module-path').addPath(config.CONTROLLERS_DIR); const express = require('express'); const pug = require('pug'); @@ -37,7 +38,7 @@ function main() { app.use(require('create-url')); // Load controllers - require('controllers')(app); + require('controllers')(app, config.CONTROLLERS_DIR); // Static files app.use('/static', express.static(config.STATIC_DIR)); diff --git a/settings/config.js b/settings/config.js index 1eac9c9..522cbc5 100644 --- a/settings/config.js +++ b/settings/config.js @@ -3,6 +3,7 @@ const join = require('path').join; module.exports.BASE_DIR = join(__dirname, '..'); module.exports.UTILS_DIR = join(module.exports.BASE_DIR, 'utils'); module.exports.STATIC_DIR = join(module.exports.BASE_DIR, 'static'); +module.exports.CONTROLLERS_DIR = join(module.exports.BASE_DIR, 'controllers'); module.exports.DEBUG = true; diff --git a/templates/base.pug b/templates/base.pug new file mode 100644 index 0000000..df26568 --- /dev/null +++ b/templates/base.pug @@ -0,0 +1,48 @@ +doctype html +html + head + meta(charset='utf-8') + meta(name='viewport', content='width=device-width, initial-scale=1, shrink-to-fit=no') + block css + link(rel='stylesheet', href='/static/bootstrap/css/bootstrap.min.css') + style. + .navbar .btn { + margin-right: 10px; + } + body { + padding-top: 65px; + } + title ADEjs + body + nav.navbar.navbar-expand-lg.navbar-dark.bg-dark.fixed-top + .container + a.navbar-brand(href=getUrl("index")) ADEjs + button.navbar-toggler(type='button', data-toggle='collapse', data-target='#navbarResponsive', aria-controls='navbarResponsive', aria-expanded='false', aria-label='Toggle navigation') + span.navbar-toggler-icon + #navbarResponsive.collapse.navbar-collapse + ul.navbar-nav + if session.user !== undefined + li.nav-item + a.nav-link(href='#') Total + ul.navbar-nav.ml-auto + if session.user === undefined + li.nav-item + a.btn.btn-light(href=getUrl("login"), role='button') + | Sign in + li.nav-item + a.btn.btn-success(href='#', role='button') + | Sign up + else + li.nav-item + a.nav-link(href='#') + | Username + li.nav-item + a.btn.btn-light(href='#', role='button') + | Log out + .container + block content + script(src='/static/bootstrap/js/jquery.min.js') + script(src='/static/bootstrap/js/popper.min.js') + script(src='/static/bootstrap/js/bootstrap.min.js') + block extrajs + diff --git a/utils/controllers.js b/utils/controllers.js index 714bdc8..35eb9aa 100644 --- a/utils/controllers.js +++ b/utils/controllers.js @@ -1,18 +1,18 @@ -var express = require('express'); -var fs = require('fs'); -var log = require('log'); +const express = require('express'); +const fs = require('fs'); +const log = require('log'); -module.exports = function(app) { +module.exports = function(app, controllersDir = __dirname + '/../controllers') { log.debug("Loading controllers :"); - fs.readdirSync(__dirname + '/../controllers').forEach(function(name) { + fs.readdirSync(controllersDir).forEach(function(name) { // views.js in controller, with function as pages (views.py for django) - var obj = require('./../controllers/' + name + '/views'); + let obj = require(controllersDir + '/' + name + '/views'); // urls.js, just like django urls.py - var urls = require('./../controllers/' + name + '/urls'); + let urls = require(controllersDir + '/' + name + '/urls'); name = obj.name || name; // allow specifying the view engine @@ -24,10 +24,10 @@ module.exports = function(app) { app.get(url.url, ((url) => function(req, res, next) { - var path = obj[url.view](req, res, function(view) { + let path = obj[url.view](req, res, function(template) { - let viewPath = __dirname + '/../controllers/' + name + '/views/' + view; - res.render(viewPath, res.locals, function(err, out) { + let templatePath = controllersDir + '/' + name + '/templates/' + template; + res.render(templatePath, res.locals, function(err, out) { if (err !== null) { log.pugerror(err); } diff --git a/utils/create-url.js b/utils/create-url.js index 81ec8d8..d19e1d0 100644 --- a/utils/create-url.js +++ b/utils/create-url.js @@ -1,17 +1,30 @@ let urls = {}; +class Url { + constructor(url, view, name) { + this.url = url; + this.view = view; + this.name = name; + } + + toString() { + return this.url; + } +} + +function getUrl(name) { + return urls[name].url; +} + module.exports = function(req, res, next) { - res.locals.urls = urls; + res.locals.getUrl = getUrl; return next(); } -module.exports.url = function(url, viewName, urlName) { - let ret = { - url: url, - view: viewName, - name: urlName, - }; +module.exports.getUrl = getUrl; +module.exports.url = function(url, viewName, urlName) { + let ret = new Url(url, viewName, urlName); urls[urlName] = ret; return ret; }