some correction

This commit is contained in:
Dryusdan 2017-07-03 16:59:35 +02:00
parent 584a4d90d8
commit 2b23778dfd
8 changed files with 412 additions and 345 deletions

227
app.js
View file

@ -1,115 +1,114 @@
const express = require('express'), const express = require('express'),
cors = require("cors"), cors = require("cors"),
app = express(), app = express(),
log = require("color-logs")(true, true, "Dryusdan.fr"), log = require("color-logs")(true, true, "Dryusdan.fr"),
fs = require("fs"), fs = require("fs"),
path = require('path'), path = require('path'),
promise = require('promise'), promise = require('promise'),
hbs = require('hbs'); hbs = require('hbs');
log.info("Application started and now preparing"); log.info("Application started and now preparing");
var corsOptions = { var corsOptions = {
"origin": "*", "origin": "*",
"Access-Control-Allow-Origin": "*", "Access-Control-Allow-Origin": "*",
"methods": "GET,HEAD,PUT,PATCH,POST,DELETE", "methods": "GET,HEAD,PUT,PATCH,POST,DELETE",
"preflightContinue": false "preflightContinue": false
}; };
/** /**
* Create menu html * Create menu html
*/ */
const config = require("./config.json"); const config = require("./config.json");
var Template = require("./classes/Template.class"); var Template = require("./classes/Template.class");
var Categories = require("./classes/Categories.class"); var Categories = require("./classes/Categories.class");
var Articles = require("./classes/Articles.class"); var Articles = require("./classes/Articles.class");
class App { class App {
constructor(rootPath, port){ constructor(rootPath, port){
/** /**
* Listen to http://0.0.0.0:port * Listen to http://0.0.0.0:port
*/ */
app.listen(port); app.listen(port);
log.info("HTTP server listening on port", port); log.info("HTTP server listening on port", port);
log.info("Application ready"); log.info("Application ready");
var template = new Template(); var template = new Template();
app.get("/", function(req, res){ app.get("/", function(req, res){
var categories = new Categories(); var categories = new Categories();
Promise.all([ Promise.all([
template.getNav(), template.getNav(),
categories.getHome() categories.getHome()
]).then(data => { ]).then(data => {
var nav = data[0]; var nav = data[0];
var content = data[1]; var content = data[1];
res.setHeader("Content-type", "text/html"); res.setHeader("Content-type", "text/html");
var tplData = { var tplData = {
"blogName": config.blogName, "blogName": config.blogName,
"title": 'Accueil', "title": config.homeTitle,
"nav": nav, "nav": nav,
"content": content "content": content
}; };
res.render('template.hbs', tplData); res.render('template.hbs', tplData);
}).catch(err => { }).catch(err => {
res.setHeader("Content-type", "text/plain"); res.setHeader("Content-type", "text/plain");
res.end("erreur"); res.end("erreur");
}); });
}); });
app.get("/:slug", function(req, res){ app.get("/:slug", function(req, res){
var categories = new Categories(); var categories = new Categories();
Promise.all([ Promise.all([
template.getNav(), template.getNav(),
categories.getListArticles(req.params.slug), categories.getListArticles(req.params.slug),
categories.getCategorie(req.params.slug) categories.getCategorie(req.params.slug)
]).then(data => { ]).then(data => {
var nav = data[0]; var nav = data[0];
var content = data[1]; var content = data[1];
var dataCategories = data[2]; var dataCategories = data[2];
res.setHeader("Content-type", "text/html"); res.setHeader("Content-type", "text/html");
var tplData = { var tplData = {
"blogName": config.blogName, "blogName": config.blogName,
"title": dataCategories.title, "title": dataCategories.title+" - "+ config.blogName,
"nav": nav, "nav": nav,
"content": content "content": content
}; };
res.render('template.hbs', tplData); res.render('template.hbs', tplData);
}).catch(err => { }).catch(err => {
res.setHeader("Content-type", "text/plain"); res.setHeader("Content-type", "text/plain");
res.end("erreur"); res.end("erreur");
}); });
}); });
app.get("/:categories/:slug", function(req, res){ app.get("/:categories/:slug", function(req, res){
var categories = new Categories(); var categories = new Categories();
var articles = new Articles(); var articles = new Articles();
Promise.all([ Promise.all([
template.getNav(), template.getNav(),
categories.getCategorie(req.params.categories), categories.getCategorie(req.params.categories),
articles.getArticle(req.params.categories, req.params.slug) articles.getArticle(req.params.categories, req.params.slug)
]).then(data => { ]).then(data => {
var nav = data[0]; var nav = data[0];
var dataCategories = data[1]; var dataCategories = data[1];
var content = data[2]; var content = data[2];
res.setHeader("Content-type", "text/html"); res.setHeader("Content-type", "text/html");
var tplData = { var tplData = {
"blogName": config.blogName, "blogName": config.blogName,
"title": dataCategories.title, "title": articles.title+" - "+dataCategories.title+" - "+ config.blogName,
"nav": nav, "nav": nav,
"content": content "content": content
}; };
res.render('template.hbs', tplData); res.render('template.hbs', tplData);
}).catch(err => { }).catch(err => {
res.setHeader("Content-type", "text/plain"); res.setHeader("Content-type", "text/plain");
console.log(err); res.end("erreur");
res.end("erreur"); });
}); });
}); app.use(express.static("./public"));
app.use(express.static("./public")); }
}
}
}
new App("/", config.appPort); new App("/", config.appPort);

View file

@ -1,52 +1,52 @@
const log = require('color-logs')(true, true, "Articles.class.js"), const log = require('color-logs')(true, true, "Articles.class.js"),
hbs = require('handlebars'), hbs = require('handlebars'),
promise = require('promise'), promise = require('promise'),
markdown = require('markdown').markdown, markdown = require('markdown').markdown,
fs = require("fs"); fs = require("fs");
var title, var title,
author, author,
content, content,
date, date,
slug; slug;
class Articles { class Articles {
getArticle(categorie, article){ getArticle(categorie, article){
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
fs.readFile('./views/articles/article.hbs', 'utf-8', (error, source) => { fs.readFile('./views/articles/article.hbs', 'utf-8', (error, source) => {
var paramPath = "./ressources/"+categorie+"/"+article+".json"; // path to param of article var paramPath = "./ressources/"+categorie+"/"+article+".json"; // path to param of article
var contentPath = "./ressources/"+categorie+"/"+article+".md"; //path to article var contentPath = "./ressources/"+categorie+"/"+article+".md"; //path to article
fs.access(paramPath, fs.constants.F_OK || fs.constants.R_OK, (error) => { fs.access(paramPath, fs.constants.F_OK || fs.constants.R_OK, (error) => {
if(error) if(error)
resolve(new Error("File not exist")); resolve(new Error("File not exist"));
else else
fs.access(contentPath, fs.constants.F_OK || fs.constants.R_OK, (error) => { fs.access(contentPath, fs.constants.F_OK || fs.constants.R_OK, (error) => {
if(error) if(error)
resolve(new Error("File not exist")); resolve(new Error("File not exist"));
else{ else{
fs.readFile(contentPath, 'utf-8', (error, content) => { fs.readFile(contentPath, 'utf-8', (error, content) => {
var content = markdown.toHTML(content); var content = markdown.toHTML(content);
const articleParams = require("."+paramPath); const articleParams = require("."+paramPath);
var data = { this.title = articleParams.title;
'title':articleParams.title, var data = {
'author': articleParams.author, 'title':articleParams.title,
'content': content 'author': articleParams.author,
}; 'content': content
console.log(data); };
hbs.registerHelper('articles', (articles) =>{ hbs.registerHelper('articles', (articles) =>{
return articles; return articles;
}); });
var template = hbs.compile(source); var template = hbs.compile(source);
var html = template(data); var html = template(data);
resolve(html); resolve(html);
}); });
} }
}); });
}); });
}); });
}); });
} }
} }
module.exports = Articles; module.exports = Articles;

View file

@ -1,83 +1,141 @@
const log = require('color-logs')(true, true, "Categories.class.js"), const log = require('color-logs')(true, true, "Categories.class.js"),
path = require('path'), path = require('path'),
hbs = require('handlebars'), hbs = require('handlebars'),
promise = require('promise'), promise = require('promise'),
fs = require("fs"); fs = require("fs");
hbs.registerHelper('listArticle', function(tabs, options) { hbs.registerHelper('listArticle', function(tabs, options) {
var i = 1; var i = 1;
var out = ''; var out = '';
for(var x in options['data']['root']){ for(var x in options['data']['root']){
out = out + "" + options.fn(options['data']['root'][x]) + ""; out = out + "" + options.fn(options['data']['root'][x]) + "";
if(i == 3){ if(i == 3){
i= 1; i= 1;
out = out + "</div><div class=\"row\">"; out = out + "</div><div class=\"row\">";
} }
else{ else{
i++; i++;
} }
} }
return out; return out;
}); });
class Categories { class Categories {
/** /**
* hydrate global var * hydrate global var
* @param {type} slug : url of categorie * @param {type} slug : url of categorie
* @returns {Promise} data of categories * @returns {Promise} data of categories
*/ */
getCategorie(slug){ getCategorie(slug){
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
var path = "./ressources/"+slug+"/params.json"; var path = "./ressources/"+slug+"/params.json";
fs.access(path, fs.constants.F_OK || fs.constants.R_OK, (error) => { fs.access(path, fs.constants.F_OK || fs.constants.R_OK, (error) => {
if(error) if(error)
resolve(new Error("File not exist")); resolve(new Error("File not exist"));
else else
resolve(require("."+path)); resolve(require("."+path));
}); });
}); });
} }
/** /**
* *
* @returns {Promise} the list of article * @returns {Promise} the list of article
*/ */
getHome(){ getHome(){
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
fs.readFile('./views/articles/list.hbs', 'utf-8', (error, source) => { fs.readFile('./views/articles/list.hbs', 'utf-8', (error, source) => {
const data = require('../ressources/lastArticles.json'); const data = require('../ressources/lastArticles.json');
hbs.registerHelper('articles', (articles) =>{ hbs.registerHelper('articles', (articles) =>{
return articles; return articles;
}); });
var template = hbs.compile(source); //console.log(data);
var html = template(data); var template = hbs.compile(source);
resolve(html); var html = template(data);
}); resolve(html);
}); });
} });
}
/**
* /**
* @param {type} slug : url of categorie *
* @returns {Promise} the list of article in this categorie * @param {type} slug : url of categorie
*/ * @returns {Promise} the list of article in this categorie
getListArticles(slug){ */
return new Promise((resolve, reject) => { getListArticles(slug){
fs.readFile('./views/articles/list.hbs', 'utf-8', (error, source) => { return new Promise((resolve, reject) => {
const data = require('../ressources/lastArticles.json'); fs.readFile('./views/articles/list.hbs', 'utf-8', (error, source) => {
hbs.registerHelper('articles', (articles) =>{ var pathOfArticles = "./ressources/"+slug+"";
return articles; var dataObj = {};
}); fs.readdir(pathOfArticles, (err, files)=> {
var template = hbs.compile(source); if(err){
var html = template(data); resolve(new Error("File not exist"));
resolve(html); }
}); else{
}); var i = 0;
} files.forEach((file) => {
if(file != "params.json"){
if(path.extname(file) == ".json"){
} dataObj[i] = require('.'+pathOfArticles+"/"+file);
i++;
}
}
});
var objectSize = Object.keys(dataObj).length;
var data = "{";
for(var x in dataObj){
if(x < objectSize-1){
data += "\""+x+"\""+":"+JSON.stringify(dataObj[x])+',';
}
else{
data += "\""+x+"\""+":"+JSON.stringify(dataObj[x])+'';
}
}
data += "}";
data = JSON.parse(data);
// console.log(data);
//console.log(data[0]['title']);
hbs.registerHelper('articles', (articles) =>{
return articles;
});
var template = hbs.compile(source);
var html = html + template(data);
resolve(html);
}
});
//const data = require('../ressources/lastArticles.json');
// hbs.registerHelper('articles', (articles) =>{
// return articles;
// });
});
});
}
/**
var fs = require('fs');
fs.readdir('/', function (err, files) { // '/' denotes the root folder
if (err) throw err;
files.forEach( function (file) {
fs.lstat('/'+file, function(err, stats) {
if (!err && stats.isDirectory()) { //conditing for identifying folders
$('ul#foldertree').append('<li class="folder">'+file+'</li>');
}
else{
$('ul#foldertree').append('<li class="file">'+file+'</li>');
}
});
});
});
*/
}
module.exports = Categories; module.exports = Categories;

View file

@ -1,44 +1,43 @@
const log = require('color-logs')(true, true, "Template.class.js"), const log = require('color-logs')(true, true, "Template.class.js"),
fs = require("fs"), fs = require("fs"),
hbs = require('handlebars'), hbs = require('handlebars'),
promise = require('promise'), promise = require('promise'),
config = require('../config.json'); config = require('../config.json');
hbs.registerHelper('listNav', function(tabs, options) { hbs.registerHelper('listNav', function(tabs, options) {
var out = ''; var out = '';
for(var x in options['data']['root']){ for(var x in options['data']['root']){
out = out + "" + options.fn(options['data']['root'][x]) + ""; out = out + "" + options.fn(options['data']['root'][x]) + "";
} }
return out; return out;
}); });
class Template { class Template {
/** /**
* *
* @returns {Promise} the navbar in html compiled * @returns {Promise} the navbar in html compiled
*/ */
getNav(){ getNav(){
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
fs.readFile('./views/_nav.hbs', 'utf-8', (error, source) => { fs.readFile('./views/_nav.hbs', 'utf-8', (error, source) => {
const articles = require("../ressources/categories.json"); const articles = require("../ressources/categories.json");
hbs.registerHelper('nav', (nav) =>{ hbs.registerHelper('nav', (nav) =>{
return nav; return nav;
}); });
var template = hbs.compile(source); var template = hbs.compile(source);
var html = template(articles); var html = template(articles);
//console.log(html); resolve(html);
resolve(html); });
}); });
}); }
}
getToot(){
getToot(){
}
} }
}
module.exports = Template; module.exports = Template;

View file

@ -1,4 +1,5 @@
{ {
"appPort": "8888", "appPort": "8888",
"blogName": "Dryusdan" "blogName": "Dryusdan",
} "homeTitle": "Dryusdan.fr, blog d'un passionné d'informatique"
}

View file

@ -0,0 +1,10 @@
<main class="transparent">
<section>
<div class="flexgrid">
<div class="row">
{{{lists}}}
</div>
</div>
</section>
</main>

View file

@ -1,25 +1,25 @@
<main class="transparent"> <main class="transparent">
<section> <section>
<div class="flexgrid"> <div class="flexgrid">
<div class="row"> <div class="row">
{{#listArticle articles}} {{#listArticle articles}}
<div class="cell tile"> <div class="cell tile">
<a href="{{slug}}"> <a href="{{slug}}">
<div class="tileCover"> <div class="tileCover">
<img src="{{img}}"> <img src="{{img}}">
</div> </div>
<div class="tileLegend"> <div class="tileLegend">
<div class="content"> <div class="content">
<div class="titleLegend">{{categorie}}</div> <div class="titleLegend">{{categorie}}</div>
<img class="blackAsset separator" src="assets/img/separator.png"> <img class="blackAsset separator" src="assets/img/separator.png">
<h2>{{title}}</h2> <h2>{{title}}</h2>
</div> </div>
</div> </div>
</a> </a>
</div> </div>
{{/listArticle}} {{/listArticle}}
</div> </div>
</div> </div>
</section> </section>
</main> </main>

View file

@ -1,27 +1,27 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="fr"> <html lang="fr">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>{{title}} - {{blogName}}</title> <title>{{title}}</title>
<link rel="stylesheet" href="/assets/css/global.css"> <link rel="stylesheet" href="/assets/css/global.css">
</head> </head>
<body> <body>
<header> <header>
<div id="logo"><a href="/">{{blogName}}</a></div> <div id="logo"><a href="/">{{blogName}}</a></div>
{{{nav}}} {{{nav}}}
</header> </header>
<div class="search"> <div class="search">
<div class="inputContainer"> <div class="inputContainer">
<input type="search" placeholder="Rechercher..."> <input type="search" placeholder="Rechercher...">
<button> </button> <button> </button>
</div> </div>
</div> </div>
{{{content}}} {{{content}}}
<footer> <footer>
</footer> </footer>
<script src="/assets/js/jquery-2.2.0.min.js"></script> <script src="/assets/js/jquery-2.2.0.min.js"></script>
<script src="/assets/js/parallax.js"></script> <script src="/assets/js/parallax.js"></script>
<script src="/assets/js/searchInput.js"></script> <script src="/assets/js/searchInput.js"></script>
</body> </body>
</html> </html>