From d7b49a37f5ae99030195792351600a78a48f4e9a Mon Sep 17 00:00:00 2001 From: Andrew Davidson Date: Sun, 22 Nov 2015 15:03:33 -0500 Subject: [PATCH] added post view to admin panel. added rebuilding of the static folder. --- app.js | 54 ++++++++++++++++++++++++++++-- build.js | 49 +++++++++++++++++++++++++-- data/{ => static/images}/logo.png | Bin package.json | 1 + views/admin-photo-list.jade | 2 +- views/admin-post-list.jade | 2 +- views/admin-post-view.jade | 20 +++++++++++ views/render-layout.jade | 6 +++- views/render-post.jade | 8 +++-- 9 files changed, 132 insertions(+), 10 deletions(-) rename data/{ => static/images}/logo.png (100%) create mode 100644 views/admin-post-view.jade diff --git a/app.js b/app.js index b7e10f9..d1bd2d1 100644 --- a/app.js +++ b/app.js @@ -6,6 +6,7 @@ var Strategy = require('passport-local').Strategy; var async = require('async'); var multer = require('multer'); var fs = require('fs'); +var markdown = require( "markdown" ).markdown; var helper = require('./helper.js'); var db = require('./db.js'); @@ -97,6 +98,26 @@ app.get('/admin/post/list/:start?', }); }); +app.get('/admin/post/view/:id?', + function (req, res, next) { + if (req.params.id) { + db.getPostById(req.params.id, function(row) { + res.render('admin-post-view', { + successNotice: req.flash('successNotice'), + failureNotice: req.flash('failureNotice'), + date: helper.epochToShortDateString(row.postDate), + post: row, + content: markdown.toHTML(row.markdown), + user: req.user + }) + }) + } + else { + res.redirect('/admin/post/list'); + } + } +); + app.get('/admin/post/new', function(req, res, next) { db.listCategories(function(rows){ @@ -198,14 +219,15 @@ app.post('/admin/post/edit/:id', app.get('/admin/post/rebuild/:id?', function(req, res, next) { if (req.params.id) { + build.buildStatic(function(err){ if (err) console.log(err) }); build.buildPost(req.params.id, function(err) { if (!err) { req.flash('successNotice', 'Post rebuilt successfully.'); - res.redirect('/admin/post/edit/'+req.params.id); + res.redirect('/admin/post/view/'+req.params.id); } else { req.flash('failureNotice', 'Post rebuild failed, check logs.'); - res.redirect('/admin/post/edit/'+req.params.id); + res.redirect('/admin/post/view/'+req.params.id); } }); } @@ -489,6 +511,34 @@ app.get('/galleries/*', } ); +app.get('/static/*', + require('connect-ensure-login').ensureLoggedIn(), + function(req, res, next) { + if (req.params[0] != '') { + var path = __dirname + '/build/static/' + req.params[0]; + console.log('Trying to serve: ' + path); + fs.exists(path, function(exists) { + if (exists) { + console.log(path + ' exists serving...'); + res.sendFile(path); + } + else { + console.log(path + ' does not exist...'); + if (path.slice(-1) != '/') path += '/'; + path += 'index.html' + console.log('Trying to serve: ' + path); + fs.exists(path, function(exists) { + if (exists) { + console.log(path + ' exists serving...'); + res.sendFile(path); + } + }); + } + }); + } + } +); + app.get('/data/*', require('connect-ensure-login').ensureLoggedIn(), function(req, res, next) { diff --git a/build.js b/build.js index ae40001..2870b14 100644 --- a/build.js +++ b/build.js @@ -3,6 +3,7 @@ var mkdirp = require('mkdirp'); var jade = require('jade'); var markdown = require( "markdown" ).markdown; var async = require('async'); +var ncp = require('ncp').ncp; var helper = require('./helper.js'); var db = require('./db.js'); @@ -99,8 +100,6 @@ var buildPost = function (id, cb) { else { console.log('Writing to file: '+filename); - //console.log(jadeOut); - fs.writeFile(filename, jadeOut, 'utf-8', function(err) { if (err) console.log(err); cb(err); @@ -111,3 +110,49 @@ var buildPost = function (id, cb) { } exports.buildPost = buildPost; + +// Function to build copy over the static folder to build directory if +// it has a earlier modified time. +var buildStatic = function(cb) { + var sourceFolder = 'data/static'; + var destFolder = 'build/static'; + async.parallel({ + sourceMtime: function(cb) { + console.log('Getting stats for '+sourceFolder); + fs.stat(sourceFolder, function(err, sstats) { + if (err) console.log(err); + console.log(sourceFolder+' mtime: '+sstats.mtime); + cb(null, sstats.mtime); + }); + }, + destMtime: function(cb) { + console.log('Getting stats for '+destFolder); + fs.stat(destFolder, function(err, dstats) { + if (err) console.log(err); + console.log(destFolder+' mtime: '+dstats.mtime); + cb(null, dstats.mtime); + }); + } + }, function(err, results) { + if (results.sourceMtime > results.destMtime) { + console.log(destFolder+' is older than '+sourceFolder); + fs.unlink(destFolder, function(err) { + console.log(destFolder+' deleted.'); + ncp(sourceFolder, destFolder, function(err) { + if (!err) { + console.log(sourceFolder+' copied to '+destFolder); + cb(null); + } + else { + cb(err); + } + }); + }); + } + else { + console.log(destFolder+' is not older than '+sourceFolder+' ignoring...'); + } + }); +} + +exports.buildStatic = buildStatic; diff --git a/data/logo.png b/data/static/images/logo.png similarity index 100% rename from data/logo.png rename to data/static/images/logo.png diff --git a/package.json b/package.json index a8a0f1a..2f0c039 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "markdown": "~0.5.0", "morgan": "~1.6.1", "multer": "~1.1.0", + "ncp": "^2.0.0", "passport": "~0.3.0", "passport-local": "~1.0.0", "serve-favicon": "~2.3.0", diff --git a/views/admin-photo-list.jade b/views/admin-photo-list.jade index 4dab5b0..910410b 100644 --- a/views/admin-photo-list.jade +++ b/views/admin-photo-list.jade @@ -13,7 +13,7 @@ block content each photo in photos tr td #{photo.id} - td #{photo.title} + td: a(href="/admin/photo/view/#{photo.id}") #{photo.title} td #{photo.dateString} td a(href="/admin/photo/edit/#{photo.id}") Edit diff --git a/views/admin-post-list.jade b/views/admin-post-list.jade index 1da94ed..27240a2 100644 --- a/views/admin-post-list.jade +++ b/views/admin-post-list.jade @@ -13,7 +13,7 @@ block content each post in posts tr td #{post.id} - td #{post.title} + td: a(href="/admin/post/view/#{post.id}") #{post.title} td #{post.dateString} td a(href="/admin/post/edit/#{post.id}") Edit diff --git a/views/admin-post-view.jade b/views/admin-post-view.jade new file mode 100644 index 0000000..b6d8d0e --- /dev/null +++ b/views/admin-post-view.jade @@ -0,0 +1,20 @@ +extends admin-layout + +block content + div(class="row") + include ./admin-sidebar.jade + + div(class="col-sm-10 col-sm-offset-2 main") + + include ./admin-messages.jade + + div(class='page-header row') + h3 #{post.title} + + div(class='row') + | #{date} -- + a(href="/admin/post/edit/#{post.id}") Edit + | - + a(href="/admin/post/rebuild/#{post.id}") Rebuild + + div(class='row') !{content} diff --git a/views/render-layout.jade b/views/render-layout.jade index 32bc023..0ded06f 100644 --- a/views/render-layout.jade +++ b/views/render-layout.jade @@ -10,4 +10,8 @@ html block head-addition body(role="document") div(class="container-fluid", role="main") - block content + div(class="row") + div(class="col-sm-3") + img(class="img-responsive", src="/static/logo.png") + div(class="col-sm-8 col-sm-offset-4") + block content diff --git a/views/render-post.jade b/views/render-post.jade index ae775bf..dc6d513 100644 --- a/views/render-post.jade +++ b/views/render-post.jade @@ -1,6 +1,8 @@ extends render-layout block content - h3: a(href="#{url}") #{title} - p #{postDate} - div !{content} + div(class="col-sm-8 col-sm-offset-2") + div(class="col-sm-10 col-sm-offset-1") + h3: a(href="#{url}") #{title} + p #{postDate} + div !{content}