added post view to admin panel. added rebuilding of the static folder.

This commit is contained in:
Andrew Davidson 2015-11-22 15:03:33 -05:00
parent 2be6c664e6
commit d7b49a37f5
9 changed files with 132 additions and 10 deletions

54
app.js
View file

@ -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) {

View file

@ -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;

View file

Before

Width:  |  Height:  |  Size: 96 KiB

After

Width:  |  Height:  |  Size: 96 KiB

View file

@ -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",

View file

@ -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

View file

@ -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

View file

@ -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}

View file

@ -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

View file

@ -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}