Personal blog written from scratch using Node.js, Bootstrap, and MySQL. https://jrtechs.net
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

103 lines
2.7 KiB

/** Whiskers template file
* this has stuff for both editing posts and viewing a list of posts*/
const TEMPLATE_FILE = "admin/adminPosts.html";
const includes = require('../includes/includes.js');
const sql = require('../utils/sql');
//parses the post data
const qs = require('querystring');
/**
* Detects if the post data came from the edit form in posts table or edit post
* in the edit post form.
*
* @param postData
* @param renderContext
* @returns {Promise}
*/
const processPostData = function(postData, renderContext)
{
return new Promise(function(resolve, reject)
{
var postParsed = qs.parse(postData);
if(postParsed.edit_post)
{
renderContext.editPost = true;
sql.getPostById(postParsed.edit_post).then(function(post)
{
post.published = post.published.toISOString().split('T')[0];
renderContext.post = post;
resolve();
});
}
else if(postParsed.edit_post_2)
{
sql.editPost(postParsed).then(function()
{
resolve();
}).catch(function(error)
{
reject(error);
});
}
else
{
resolve();
}
});
};
/**
* Grabs and appends the list of posts from the SQL database to
* the template context for the template renderer.
*
* @param templateContext
* @returns {Promise}
*/
const fetchPostsInformation = function(templateContext)
{
return new Promise(function(resolve, reject)
{
sql.getAllPosts().then(function(posts)
{
templateContext.posts = posts;
resolve();
}).catch(function(error)
{
reject(error);
})
});
};
module.exports=
{
/**
* Fetches context information for the admin posts page and handles post
* data sent regarding editing posts.
*
* @param postData posted by user
* @param templateContext json object used as the template context
* @returns {Promise} renders the template used for this page
*/
main: function(postData, templateContext)
{
return new Promise(function(resolve, reject)
{
Promise.all([includes.fetchTemplate(TEMPLATE_FILE),
processPostData(postData, templateContext),
fetchPostsInformation(templateContext)]).then(function(template)
{
resolve(template[0]);
}).catch(function(error)
{
console.log("error in add admin posts.js");
reject(error);
});
});
}
};