try display article
This commit is contained in:
parent
d8db4101d0
commit
676ae5bee4
55
app.js
55
app.js
|
@ -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"));
|
||||
}
|
||||
|
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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(){
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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="
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
"express": "4.15.2",
|
||||
"handlebars": "4.0.6",
|
||||
"hbs": "4.0.1",
|
||||
"markdown": "^0.5.0",
|
||||
"promise": "^8.0.0"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"title": "tests",
|
||||
"description": "tests description"
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"title": "tests2",
|
||||
"description": "tests description"
|
||||
}
|
|
@ -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>
|
Reference in New Issue