diff --git a/app.js b/app.js index 2b40632..4984cfe 100644 --- a/app.js +++ b/app.js @@ -1,115 +1,114 @@ -const express = require('express'), - cors = require("cors"), - app = express(), - log = require("color-logs")(true, true, "Dryusdan.fr"), - fs = require("fs"), - path = require('path'), - promise = require('promise'), - hbs = require('hbs'); - -log.info("Application started and now preparing"); - -var corsOptions = { - "origin": "*", - "Access-Control-Allow-Origin": "*", - "methods": "GET,HEAD,PUT,PATCH,POST,DELETE", - "preflightContinue": false -}; -/** - * Create menu html - */ -const config = require("./config.json"); -var Template = require("./classes/Template.class"); -var Categories = require("./classes/Categories.class"); -var Articles = require("./classes/Articles.class"); - -class App { - constructor(rootPath, port){ - - /** - * Listen to http://0.0.0.0:port - */ - app.listen(port); - log.info("HTTP server listening on port", port); - log.info("Application ready"); - var template = new Template(); - - app.get("/", function(req, res){ - var categories = new Categories(); - Promise.all([ - template.getNav(), - categories.getHome() - ]).then(data => { - var nav = data[0]; - var content = data[1]; - res.setHeader("Content-type", "text/html"); - var tplData = { - "blogName": config.blogName, - "title": 'Accueil', - "nav": nav, - "content": content - }; - res.render('template.hbs', tplData); - }).catch(err => { - res.setHeader("Content-type", "text/plain"); - - res.end("erreur"); - }); - - - }); - app.get("/:slug", function(req, res){ - var categories = new Categories(); - Promise.all([ - template.getNav(), - categories.getListArticles(req.params.slug), - categories.getCategorie(req.params.slug) - ]).then(data => { - var nav = data[0]; - var content = data[1]; - var dataCategories = data[2]; - res.setHeader("Content-type", "text/html"); - var tplData = { - "blogName": config.blogName, - "title": dataCategories.title, - "nav": nav, - "content": content - }; - res.render('template.hbs', tplData); - }).catch(err => { - res.setHeader("Content-type", "text/plain"); - - res.end("erreur"); - }); - }); - app.get("/:categories/:slug", function(req, res){ - var categories = new Categories(); - var articles = new Articles(); - Promise.all([ - template.getNav(), - categories.getCategorie(req.params.categories), - articles.getArticle(req.params.categories, req.params.slug) - ]).then(data => { - var nav = data[0]; - var dataCategories = data[1]; - var content = data[2]; - res.setHeader("Content-type", "text/html"); - var tplData = { - "blogName": config.blogName, - "title": dataCategories.title, - "nav": nav, - "content": content - }; - res.render('template.hbs', tplData); - }).catch(err => { - res.setHeader("Content-type", "text/plain"); - console.log(err); - res.end("erreur"); - }); - }); - app.use(express.static("./public")); - } - -} - +const express = require('express'), + cors = require("cors"), + app = express(), + log = require("color-logs")(true, true, "Dryusdan.fr"), + fs = require("fs"), + path = require('path'), + promise = require('promise'), + hbs = require('hbs'); + +log.info("Application started and now preparing"); + +var corsOptions = { + "origin": "*", + "Access-Control-Allow-Origin": "*", + "methods": "GET,HEAD,PUT,PATCH,POST,DELETE", + "preflightContinue": false +}; +/** + * Create menu html + */ +const config = require("./config.json"); +var Template = require("./classes/Template.class"); +var Categories = require("./classes/Categories.class"); +var Articles = require("./classes/Articles.class"); + +class App { + constructor(rootPath, port){ + + /** + * Listen to http://0.0.0.0:port + */ + app.listen(port); + log.info("HTTP server listening on port", port); + log.info("Application ready"); + var template = new Template(); + + app.get("/", function(req, res){ + var categories = new Categories(); + Promise.all([ + template.getNav(), + categories.getHome() + ]).then(data => { + var nav = data[0]; + var content = data[1]; + res.setHeader("Content-type", "text/html"); + var tplData = { + "blogName": config.blogName, + "title": config.homeTitle, + "nav": nav, + "content": content + }; + res.render('template.hbs', tplData); + }).catch(err => { + res.setHeader("Content-type", "text/plain"); + + res.end("erreur"); + }); + + + }); + app.get("/:slug", function(req, res){ + var categories = new Categories(); + Promise.all([ + template.getNav(), + categories.getListArticles(req.params.slug), + categories.getCategorie(req.params.slug) + ]).then(data => { + var nav = data[0]; + var content = data[1]; + var dataCategories = data[2]; + res.setHeader("Content-type", "text/html"); + var tplData = { + "blogName": config.blogName, + "title": dataCategories.title+" - "+ config.blogName, + "nav": nav, + "content": content + }; + res.render('template.hbs', tplData); + }).catch(err => { + res.setHeader("Content-type", "text/plain"); + + res.end("erreur"); + }); + }); + app.get("/:categories/:slug", function(req, res){ + var categories = new Categories(); + var articles = new Articles(); + Promise.all([ + template.getNav(), + categories.getCategorie(req.params.categories), + articles.getArticle(req.params.categories, req.params.slug) + ]).then(data => { + var nav = data[0]; + var dataCategories = data[1]; + var content = data[2]; + res.setHeader("Content-type", "text/html"); + var tplData = { + "blogName": config.blogName, + "title": articles.title+" - "+dataCategories.title+" - "+ config.blogName, + "nav": nav, + "content": content + }; + res.render('template.hbs', tplData); + }).catch(err => { + res.setHeader("Content-type", "text/plain"); + res.end("erreur"); + }); + }); + app.use(express.static("./public")); + } + +} + new App("/", config.appPort); \ No newline at end of file diff --git a/classes/Articles.class.js b/classes/Articles.class.js index b88ac49..034898a 100644 --- a/classes/Articles.class.js +++ b/classes/Articles.class.js @@ -1,52 +1,52 @@ -const log = require('color-logs')(true, true, "Articles.class.js"), - hbs = require('handlebars'), - promise = require('promise'), - markdown = require('markdown').markdown, - fs = require("fs"); - -var title, - author, - content, - date, - slug; - -class Articles { - - getArticle(categorie, article){ - return new Promise((resolve, reject) => { - fs.readFile('./views/articles/article.hbs', 'utf-8', (error, source) => { - var paramPath = "./ressources/"+categorie+"/"+article+".json"; // path to param of article - var contentPath = "./ressources/"+categorie+"/"+article+".md"; //path to article - fs.access(paramPath, fs.constants.F_OK || fs.constants.R_OK, (error) => { - if(error) - resolve(new Error("File not exist")); - else - fs.access(contentPath, fs.constants.F_OK || fs.constants.R_OK, (error) => { - if(error) - resolve(new Error("File not exist")); - else{ - fs.readFile(contentPath, 'utf-8', (error, content) => { - var content = markdown.toHTML(content); - const articleParams = require("."+paramPath); - var data = { - 'title':articleParams.title, - 'author': articleParams.author, - 'content': content - }; - console.log(data); - hbs.registerHelper('articles', (articles) =>{ - return articles; - }); - var template = hbs.compile(source); - var html = template(data); - resolve(html); - }); - } - }); - }); - }); - }); - } -} - -module.exports = Articles; +const log = require('color-logs')(true, true, "Articles.class.js"), + hbs = require('handlebars'), + promise = require('promise'), + markdown = require('markdown').markdown, + fs = require("fs"); + +var title, + author, + content, + date, + slug; + +class Articles { + + getArticle(categorie, article){ + return new Promise((resolve, reject) => { + fs.readFile('./views/articles/article.hbs', 'utf-8', (error, source) => { + var paramPath = "./ressources/"+categorie+"/"+article+".json"; // path to param of article + var contentPath = "./ressources/"+categorie+"/"+article+".md"; //path to article + fs.access(paramPath, fs.constants.F_OK || fs.constants.R_OK, (error) => { + if(error) + resolve(new Error("File not exist")); + else + fs.access(contentPath, fs.constants.F_OK || fs.constants.R_OK, (error) => { + if(error) + resolve(new Error("File not exist")); + else{ + fs.readFile(contentPath, 'utf-8', (error, content) => { + var content = markdown.toHTML(content); + const articleParams = require("."+paramPath); + this.title = articleParams.title; + var data = { + 'title':articleParams.title, + 'author': articleParams.author, + 'content': content + }; + hbs.registerHelper('articles', (articles) =>{ + return articles; + }); + var template = hbs.compile(source); + var html = template(data); + resolve(html); + }); + } + }); + }); + }); + }); + } +} + +module.exports = Articles; diff --git a/classes/Categories.class.js b/classes/Categories.class.js index b6b9c6e..a620d64 100644 --- a/classes/Categories.class.js +++ b/classes/Categories.class.js @@ -1,83 +1,141 @@ -const log = require('color-logs')(true, true, "Categories.class.js"), - path = require('path'), - hbs = require('handlebars'), - promise = require('promise'), - fs = require("fs"); - -hbs.registerHelper('listArticle', function(tabs, options) { - var i = 1; - var out = ''; - for(var x in options['data']['root']){ - - out = out + "" + options.fn(options['data']['root'][x]) + ""; - if(i == 3){ - i= 1; - out = out + "