try display article

This commit is contained in:
Dryusdan 2017-07-03 00:18:07 +02:00
parent d8db4101d0
commit 676ae5bee4
11 changed files with 219 additions and 74 deletions

55
app.js
View File

@ -20,6 +20,8 @@ var corsOptions = {
*/
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){
@ -33,9 +35,10 @@ class App {
var template = new Template();
app.get("/", function(req, res){
var categories = new Categories();
Promise.all([
template.getNav(),
template.getHome()
categories.getHome()
]).then(data => {
var nav = data[0];
var content = data[1];
@ -48,7 +51,6 @@ class App {
};
res.render('template.hbs', tplData);
}).catch(err => {
console.error(err);
res.setHeader("Content-type", "text/plain");
res.end("erreur");
@ -57,14 +59,53 @@ class App {
});
app.get("/:slug", function(req, res){
res.setHeader("Content-type", "text/plain");
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("Slug : "+req.params.slug);
res.end("erreur");
});
});
app.get("/article/:slug", function(req, res){
res.setHeader("Content-type", "text/plain");
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 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("Slug : "+req.params.slug);
res.end("erreur");
});
});
app.use(express.static("./public"));
}

View File

@ -1,13 +0,0 @@
const log = require('color-logs')(true, true, "Articles.class.js"),
fs = require("fs");
var title,
author,
content,
date,
slug;
class Article {
}
module.exports = Article;

44
classes/Articles.class.js Normal file
View File

@ -0,0 +1,44 @@
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(categories, article){
return new Promise((resolve, reject) => {
fs.readFile('./views/articles/article.hbs', 'utf-8', (error, source) => {
var paramPath = "./ressources/"+catehorie+"/"+article+".json"; // path to param of article
var contentPath = "./ressources/"+catehorie+"/"+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{
console.log(markdown.toHTML(require("."+contentPath)));
}
});
});
const data = require('../ressources/lastArticles.json');
hbs.registerHelper('articles', (articles) =>{
return articles;
});
var template = hbs.compile(source);
var html = template(data);
resolve(html);
});
});
}
}
module.exports = Articles;

View File

@ -1,20 +0,0 @@
const log = require('color-logs')(true, true, "Categories.class.js"),
path = require('path'),
fs = require("fs");
var title,
slug,
position;
class Categorie {
/**
*
* @param {string} folder where located categories
* @returns {nm$_Categorie.class.Categorie}
*/
constructor(folder){
}
}
module.exports = Categorie;

View File

@ -0,0 +1,83 @@
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 + "</div><div class=\"row\">";
}
else{
i++;
}
}
return out;
});
class Categories {
/**
* hydrate global var
* @param {type} slug : url of categorie
* @returns {Promise} data of categories
*/
getCategorie(slug){
return new Promise((resolve, reject) => {
var path = "./ressources/"+slug+"/params.json";
fs.access(path, fs.constants.F_OK || fs.constants.R_OK, (error) => {
if(error)
resolve(new Error("File not exist"));
else
resolve(require("."+path));
});
});
}
/**
*
* @returns {Promise} the list of article
*/
getHome(){
return new Promise((resolve, reject) => {
fs.readFile('./views/articles/list.hbs', 'utf-8', (error, source) => {
const data = require('../ressources/lastArticles.json');
hbs.registerHelper('articles', (articles) =>{
return articles;
});
var template = hbs.compile(source);
var html = template(data);
resolve(html);
});
});
}
/**
*
* @param {type} slug : url of categorie
* @returns {Promise} the list of article in this categorie
*/
getListArticles(slug){
return new Promise((resolve, reject) => {
fs.readFile('./views/articles/list.hbs', 'utf-8', (error, source) => {
const data = require('../ressources/lastArticles.json');
hbs.registerHelper('articles', (articles) =>{
return articles;
});
var template = hbs.compile(source);
var html = template(data);
resolve(html);
});
});
}
}
module.exports = Categories;

View File

@ -4,36 +4,15 @@ const log = require('color-logs')(true, true, "Template.class.js"),
promise = require('promise'),
config = require('../config.json');
var Categorie = require('../classes/Categorie.class.js');
var Article = require('../classes/Article.class.js');
hbs.registerHelper('listNav', function(tabs, options) {
var out = '';
for(var x in options['data']['root']){
console.log(x);
out = out + "" + options.fn(options['data']['root'][x]) + "";
}
return out;
});
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 + "</div><div class=\"row\">";
}
else{
i++;
}
}
return out;
});
class Template {
/**
@ -56,19 +35,8 @@ class Template {
});
}
getHome(){
return new Promise((resolve, reject) => {
fs.readFile('./views/articles/list.hbs', 'utf-8', (error, source) => {
const data = require('../ressources/lastArticles.json');
hbs.registerHelper('articles', (articles) =>{
return articles;
});
var template = hbs.compile(source);
var html = template(data);
console.log(html);
resolve(html);
});
});
getToot(){
}
}

15
package-lock.json generated
View File

@ -3,6 +3,11 @@
"version": "1.0.0",
"lockfileVersion": 1,
"dependencies": {
"abbrev": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz",
"integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8="
},
"accepts": {
"version": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz",
"integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo="
@ -180,6 +185,11 @@
"version": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
"integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc="
},
"markdown": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/markdown/-/markdown-0.5.0.tgz",
"integrity": "sha1-KCBbVlqK51kt4gdGPWY33BgnIrI="
},
"media-typer": {
"version": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
@ -216,6 +226,11 @@
"version": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
"integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
},
"nopt": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-2.1.2.tgz",
"integrity": "sha1-bMzZd7gBMqB3MdbozljCyDA8+a8="
},
"on-finished": {
"version": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
"integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc="

View File

@ -20,6 +20,7 @@
"express": "4.15.2",
"handlebars": "4.0.6",
"hbs": "4.0.1",
"markdown": "^0.5.0",
"promise": "^8.0.0"
}
}

View File

@ -0,0 +1,4 @@
{
"title": "tests",
"description": "tests description"
}

View File

@ -0,0 +1,4 @@
{
"title": "tests2",
"description": "tests description"
}

View File

@ -0,0 +1,18 @@
<main>
<section>
<!--<nav>
<button class="prev"><img src="assets/img/prev.png">Précédent</button>
<img class="blackAsset separator" src="assets/img/separator.png">
<button class="next">Suivant<img src="assets/img/next.png"></button>
</nav>-->
<article>
<div class="articleTitle">
<h1>{{title}}</h1>
<p class="author">{{author}}</p>
</div>
<div class="content">
{{{content}}}
</div>
</article>
</section>
</main>