From a35cdaadd8919e4245ab2b828b949ff1b24caf6a Mon Sep 17 00:00:00 2001 From: jrtechs Date: Sun, 7 Oct 2018 11:24:01 -0400 Subject: [PATCH] Unified how blog posts were rendered between the preview post and full render. --- .../fibonacci/ConstantTimeComplexity.png | Bin 0 -> 38655 bytes posts/singlePost.js | 149 +----------------- utils/markdownToHTML.js | 118 +++++++++++++- 3 files changed, 114 insertions(+), 153 deletions(-) create mode 100644 blogContent/posts/programming/media/fibonacci/ConstantTimeComplexity.png diff --git a/blogContent/posts/programming/media/fibonacci/ConstantTimeComplexity.png b/blogContent/posts/programming/media/fibonacci/ConstantTimeComplexity.png new file mode 100644 index 0000000000000000000000000000000000000000..2c781f42c2c8c96cb30e57c8657b0501772389f2 GIT binary patch literal 38655 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"; - - var html = "
"; - - //image - if(!(post.picture_url === "n/a")) - { - html +="\"\""; - } - - html += "
"; - //title - html += "

" + post.name + "

"; - //date - html += "
" + - post.published.toDateString() + "
"; - html +="
"; - - html += "
"; - - try - { - sql.getCategory(post.category_id).then(function(category) - { - var pathName = "blogContent/posts/" + category[0].url + "/" - + post.url + ".md"; - var markDown = utils.getFileContents(pathName).toString(); - - markDown = markDown.split("(media/").join("(" + "../blogContent/posts/" - + category[0].url + "/media/"); - var htmlPost = md.render(markDown).split("

"); - - for(var i = 0; i < 3; i++) - { - html+= "

" + htmlPost[i]; - } - - html = html.split("").join(""); - - html += "

\n" + - "

\n" + - "
\n"; - - html += "


"; - - resolve(html) - }).catch(function(error) - { - reject(error); - }); - } - catch(ex) - { - reject(ex); - } - }); + return postGenerator.generateBlogPost(post, 3); }, /** @@ -117,56 +24,6 @@ module.exports= */ renderPost: function(post) { - return new Promise(function (resolve, reject) - { - var htmlHead = "
"; - //image - if(!(post.picture_url === "n/a")) - { - htmlHead +="\"\""; - } - - htmlHead += "
"; - //title - htmlHead += "

" + post.name + "

"; - //date - htmlHead += "
" + - post.published.toDateString() + "
"; - htmlHead +="
"; - - var html = "
"; - try - { - sql.getCategory(post.category_id).then(function(category) - { - const pathName = "blogContent/posts/" + category[0].url + "/" - + post.url + ".md"; - var markDown = utils.getFileContents(pathName).toString(); - markDown = markDown.split("(media/").join("(" + "../blogContent/posts/" - + category[0].url + "/media/"); - //html += md.render(markDown); - - pandoc.convertToHTML(markDown).then(function(result) - { - html +=result; - - html = html.split("").join(""); - html += "


"; - - resolve(htmlHead + html); - }).catch(function(error) - { - reject(error); - }) - - }); - } - catch(ex) - { - reject(ex); - } - }); + return postGenerator.generateBlogPost(post, -1); } }; \ No newline at end of file diff --git a/utils/markdownToHTML.js b/utils/markdownToHTML.js index d9e134a..60ee0a0 100644 --- a/utils/markdownToHTML.js +++ b/utils/markdownToHTML.js @@ -1,25 +1,129 @@ const pandoc = require('node-pandoc'); -// const args = '-t html5'; -const args = '-S --base-header-level=1 --toc --toc-depth=6 -N --normalize -s --mathjax -t html5'; +const utils = require('../utils/utils.js'); + +const sql = require('../utils/sql'); + +const argsFull = '-S --base-header-level=1 --toc --toc-depth=3 -N --normalize -s --mathjax -t html5'; +const argsPreview = '-S --normalize -s --mathjax -t html5'; + -console.log(""); module.exports= { - convertToHTML: function(markdownContents) + + generateBlogPost: function(post, blocks) + { + return new Promise(function(resolve, reject) + { + Promise.all([module.exports.generateBlogPostHeader(post), + module.exports.generateBlogPostBody(post, blocks), + module.exports.generateBlogPostFooter()]).then(function(content) + { + resolve(content.join('')); + }) + }); + }, + + generateBlogPostHeader: function(post) + { + + var htmlHead = "
"; + //image + if(!(post.picture_url === "n/a")) + { + htmlHead +="\"\""; + } + + htmlHead += "
"; + //title + htmlHead += "

" + post.name + "

"; + //date + htmlHead += "
" + + post.published.toDateString() + "
"; + htmlHead +="
" + "
"; + + return htmlHead; + }, + + + generateBlogPostBody: function(post, blocks) + { + return new Promise(function(resolve, reject) + { + sql.getCategory(post.category_id).then(function(category) + { + const pathName = "blogContent/posts/" + category[0].url + "/" + + post.url + ".md"; + var markDown = utils.getFileContents(pathName).toString(); + markDown = markDown.split("(media/").join("(" + "../blogContent/posts/" + + category[0].url + "/media/"); + + module.exports.convertToHTML(markDown, 1).then(function(result) + { + + result = result.split("
").join("
"); + + if(blocks == -1) + resolve(result); + + var htmlBlocks = result.split("

"); + var html = ""; + for(var i = 0; i < blocks; i++) + { + html += "

" + htmlBlocks[i]; + } + + html += "

\n" + + "

\n" + + "
\n"; + + resolve(html); + + }).catch(function(error) + { + reject(error); + }) + + }); + }) + }, + + generateBlogPostFooter: function() + { + return "


"; + }, + + convertToHTML: function(markdownContents, type) { return new Promise(function(resolve, reject) { // Set your callback function - callback = function (err, result) + callback = function (err, html) { if (err) { reject(err); } - resolve(result); + + + html = html.split("").join(""); + + + resolve(html); }; - pandoc(markdownContents, args, callback); + if(type == -1) + { + pandoc(markdownContents, argsFull, callback); + } + else + { + pandoc(markdownContents, argsPreview, callback); + } }); }, }