From dd55aa57b13aa971b87cad8b135a58715afb21f9 Mon Sep 17 00:00:00 2001 From: Rohit Gohri Date: Wed, 14 Aug 2019 00:20:10 +0530 Subject: [PATCH 1/2] Move init blog fn outside --- blog.js | 99 +++++++++++++++++++++++++++++++-------------------------- 1 file changed, 54 insertions(+), 45 deletions(-) diff --git a/blog.js b/blog.js index 7d52f1f2..7cde5d3d 100644 --- a/blog.js +++ b/blog.js @@ -8,6 +8,58 @@ const jsdom = require("jsdom").JSDOM, const { updateHTML } = require("./populate"); const { getConfig, getBlog, updateBlog, outDir } = require("./utils"); +async function initBlogFiles(folder, blog_data, conf) { + const blogPath = `${outDir}/blog/${folder}/index.html`; + await fs.copyFileAsync( + `${__dirname}/assets/blog/blogTemplate.html`, + blogPath + ); + const dom = await jsdom.fromFile(blogPath, options); + const window = dom.window; + const document = window.document; + + const icon = document.createElement("link"); + icon.setAttribute("rel", "icon"); + icon.setAttribute("href", conf[0].userimg); + icon.setAttribute("type", "image/png"); + document.getElementsByTagName("head")[0].appendChild(icon); + + document.getElementById( + "profile_img_blog" + ).style.background = `url('${conf[0].userimg}') center center`; + + document.getElementById("username_blog").innerHTML = ` + + ${conf[0].name} + +
@${conf[0].username} +
+ ${blog_data.created_at.toLocaleDateString()} + `; + + if ((conf[0].theme = "dark.css")) { + document.querySelector("#background_overlay").style.background = + "linear-gradient(0deg, rgba(10, 10, 10, 1), rgba(10, 10, 10, 0.1))"; + } else { + document.querySelector("#background_overlay").style.background = + "linear-gradient(0deg, rgba(255, 255, 255, 1), rgba(255, 255, 255, 0.1))"; + } + + document.getElementsByTagName("title")[0].textContent = blog_data.page_title; + document.getElementById("blog_title").textContent = blog_data.title; + document.getElementById("blog_sub_title").textContent = blog_data.sub_title; + + await fs.writeFileAsync( + blogPath, + "" + window.document.documentElement.outerHTML + ); + + if (!fs.existsSync(`${outDir}/blog/${folder}/index.md`)) { + // Create empty md file + await fs.writeFileAsync(`${outDir}/blog/${folder}/index.md`, ""); + } +} + async function createBlog( title, { subtitle, pagetitle, folder, image, update = false } = {} @@ -33,6 +85,7 @@ async function createBlog( url_title: folder, title: title, sub_title: subtitle, + page_title: pagetitle, top_image: image || "https://images.unsplash.com/photo-1553748024-d1b27fb3f960?w=1450", @@ -51,51 +104,7 @@ async function createBlog( return; } - const blogPath = `${outDir}/blog/${folder}/index.html`; - await fs.copyFileAsync( - `${__dirname}/assets/blog/blogTemplate.html`, - blogPath - ); - const dom = await jsdom.fromFile(blogPath, options); - const window = dom.window; - const document = window.document; - - const icon = document.createElement("link"); - icon.setAttribute("rel", "icon"); - icon.setAttribute("href", conf[0].userimg); - icon.setAttribute("type", "image/png"); - document.getElementsByTagName("head")[0].appendChild(icon); - - document.getElementById( - "profile_img_blog" - ).style.background = `url('${conf[0].userimg}') center center`; - - document.getElementById("username_blog").innerHTML = ` - ${conf[0].name} - -
@${conf[0].username} -
- ${blog_data.created_at.toLocaleDateString()} - `; - - if ((conf[0].theme = "dark.css")) { - document.querySelector("#background_overlay").style.background = - "linear-gradient(0deg, rgba(10, 10, 10, 1), rgba(10, 10, 10, 0.1))"; - } else { - document.querySelector("#background_overlay").style.background = - "linear-gradient(0deg, rgba(255, 255, 255, 1), rgba(255, 255, 255, 0.1))"; - } - - document.getElementsByTagName("title")[0].textContent = pagetitle; - document.getElementById("blog_title").textContent = title; - document.getElementById("blog_sub_title").textContent = subtitle; - - await fs.writeFileAsync( - `${outDir}/blog/${folder}/index.html`, - "" + window.document.documentElement.outerHTML - ); + await initBlogFiles(folder, blog_data, conf); if (conflicting.length) { old_blogs.forEach(blog => { From 535bf578dcc668d523ecfd07614a5eba69478a92 Mon Sep 17 00:00:00 2001 From: Rohit Gohri Date: Wed, 14 Aug 2019 00:43:37 +0530 Subject: [PATCH 2/2] Add method to wrie blog through markdown --- blog.js | 27 ++++++++++++++++++++++++--- package-lock.json | 5 +++++ package.json | 1 + populate.js | 17 +++++++++++------ 4 files changed, 41 insertions(+), 9 deletions(-) diff --git a/blog.js b/blog.js index 7cde5d3d..0ce3cb0f 100644 --- a/blog.js +++ b/blog.js @@ -1,6 +1,7 @@ const _ = require("lodash"); const bluebird = require("bluebird"); const fs = bluebird.promisifyAll(require("fs")); +const marked = require('marked'); const jsdom = require("jsdom").JSDOM, options = { resources: "usable" @@ -56,10 +57,30 @@ async function initBlogFiles(folder, blog_data, conf) { if (!fs.existsSync(`${outDir}/blog/${folder}/index.md`)) { // Create empty md file - await fs.writeFileAsync(`${outDir}/blog/${folder}/index.md`, ""); + await fs.writeFileAsync(`${outDir}/blog/${folder}/index.md`, "Dummy Blog Content!"); } } +async function updateBlogContent(blogData, conf) { + const blogPath = `${outDir}/blog/${blogData.url_title}/index`; + const markdownContent = await fs.readFileAsync(`${blogPath}.md`); + const html = marked(markdownContent.toString(), { + baseUrl: conf[0].url, + gfm: true, + headerIds: true, + headerPrefix: 'heading-', + }); + const dom = await jsdom.fromFile(`${blogPath}.html`, options); + const window = dom.window; + const document = window.document; + document.getElementById("blog").innerHTML = html; + + await fs.writeFileAsync( + `${blogPath}.html`, + "" + window.document.documentElement.outerHTML + ); +} + async function createBlog( title, { subtitle, pagetitle, folder, image, update = false } = {} @@ -117,7 +138,6 @@ async function createBlog( old_blogs.push(blog_data); } await updateBlog(old_blogs); - await updateHTML(conf[0].username, conf[0]); } async function blogCommand(title, program) { @@ -132,5 +152,6 @@ async function blogCommand(title, program) { } module.exports = { - blogCommand + blogCommand, + updateBlogContent, }; diff --git a/package-lock.json b/package-lock.json index 4676d308..fbcf335f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -704,6 +704,11 @@ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" }, + "marked": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.7.0.tgz", + "integrity": "sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg==" + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", diff --git a/package.json b/package.json index b9fb8d4b..18eecf4c 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,7 @@ "handlebars": "^4.1.2", "jsdom": "^15.1.0", "lodash": "^4.17.15", + "marked": "^0.7.0", "ncp": "^2.0.0", "prettier": "^1.18.2" } diff --git a/populate.js b/populate.js index cf685d36..32fef7ef 100644 --- a/populate.js +++ b/populate.js @@ -6,6 +6,7 @@ const jsdom = require("jsdom").JSDOM, options = { resources: "usable" }; +const {updateBlogContent} = require('./blog'); const { getBlog, getConfig, updateConfig, outDir } = require("./utils"); const { getRepos, getUser } = require("./api"); @@ -129,7 +130,7 @@ function addMetaTags(document, user, config = {}) { }); } -async function addBlogs(document) { +async function addAndUpdateBlogs(document, conf) { const blogConfig = await getBlog(); if (blogConfig.length == 0) { return (document.getElementById("blog_section").style.display = "none"); @@ -137,18 +138,22 @@ async function addBlogs(document) { const blogsEl = document.getElementById("blogs"); for (var i = 0; i < blogConfig.length; i++) { const blogEl = document.createElement("a"); - blogEl.setAttribute("href", `./blog/${blogConfig[i].url_title}/`); + const blogData = blogConfig[i]; + + blogEl.setAttribute("href", `./blog/${blogData.url_title}/`); blogEl.setAttribute("target", "_blank"); blogEl.innerHTML = `
- +
-
${blogConfig[i].title}
+
${blogData.title}
- ${blogConfig[i].sub_title} + ${blogData.sub_title}
`; blogsEl.appendChild(blogEl); + + await updateBlogContent(blogData, conf); } } @@ -169,7 +174,7 @@ module.exports.updateHTML = async (username, opts) => { console.log("Building HTML/CSS..."); await addRepoDetails(document, username, opts); - await addBlogs(document); + await addAndUpdateBlogs(document, data); addMetaTags(document, user, data[0]); document.getElementById(