264 lines
8.3 KiB
JavaScript
264 lines
8.3 KiB
JavaScript
const log = require('color-logs')(true, true, "Categories.class.js"),
|
|
path = require('path'),
|
|
hbs = require('handlebars'),
|
|
promise = require('promise'),
|
|
dbConnector = require('../../lib/db/'+config.db+"/db.js");
|
|
fs = require("fs"),
|
|
Categorie = require('../Categorie.class.js');
|
|
Article = require('../Article.class.js');
|
|
|
|
hbs.registerHelper('listArticle', function(tabs, options) {
|
|
var i = 1;
|
|
var out = '';
|
|
log.debug();
|
|
var articles = options['data']['root'].getArticles();
|
|
articles.shift();
|
|
log.debug(articles);
|
|
for(var x in articles){
|
|
out = out + "" + options.fn(articles[x]) + "";
|
|
if(i == 3){
|
|
i= 1;
|
|
out = out + "</div><div class=\"row\">";
|
|
}
|
|
else{
|
|
i++;
|
|
}
|
|
}
|
|
return out;
|
|
});
|
|
|
|
hbs.registerHelper('disclamer', function(tabs, options) {
|
|
return options.fn(options['data']['root'].getArticles()[0]) + "";
|
|
});
|
|
|
|
hbs.registerHelper('listNav', function(tabs, options) {
|
|
var out = '';
|
|
for(var x in options['data']['root']){
|
|
out = out + "" + options.fn(options['data']['root'][x]) + "";
|
|
|
|
}
|
|
return out;
|
|
});
|
|
|
|
hbs.registerHelper('article', function(tabs, options) {
|
|
var out = '';
|
|
for(var x in options['data']['root']){
|
|
out = out + "" + options.fn(options['data']['root'][x]) + "";
|
|
|
|
}
|
|
return out;
|
|
});
|
|
|
|
class Categories {
|
|
|
|
/**
|
|
*
|
|
* @returns {<Promise>} html : the html code of navbar
|
|
*/
|
|
getNav(){
|
|
var db = new dbConnector();
|
|
return db.get({
|
|
"select" : {
|
|
"categories" : [
|
|
"title",
|
|
"uri",
|
|
"description"
|
|
]
|
|
},
|
|
"condition" : "",
|
|
"join": ""
|
|
}).then((result) => {
|
|
return new Promise((resolve, reject) => {
|
|
fs.readFile('./views/_nav.hbs', 'utf-8', (error, source) => {
|
|
hbs.registerHelper('nav', (nav) =>{
|
|
return nav;
|
|
});
|
|
var template = hbs.compile(source);
|
|
var html = template(JSON.parse(result));
|
|
resolve(html);
|
|
});
|
|
});
|
|
}).catch((err) => {
|
|
throw err;
|
|
});
|
|
}
|
|
|
|
/**
|
|
* hydrate global var
|
|
* @param {type} select : object of select {id = id}
|
|
* @returns {Promise} data of categories
|
|
*/
|
|
getCategorie(select){
|
|
var db = new dbConnector();
|
|
return db.get({
|
|
"select" : {
|
|
"categories" : [
|
|
"id",
|
|
"title",
|
|
"uri",
|
|
"description"
|
|
]
|
|
},
|
|
"condition" : select,
|
|
"join" : ""
|
|
}).then((result) => {
|
|
return new Promise((resolve, reject) => {
|
|
var data = JSON.parse(result);
|
|
result = null;
|
|
var categorie = new Categorie(data[0].id, data[0].title, data[0].uri, data[0].description);
|
|
resolve(categorie);
|
|
});
|
|
}).catch((err) => {
|
|
throw err;
|
|
});
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param {<Categorie>} categorie : object categorie
|
|
* @param {string} returnFormat : format of return [object, json, html]
|
|
* @returns {<Promise> listArticleToHTML} a list of article in HTML format
|
|
*/
|
|
getListArticles(categorie, returnFormat){
|
|
var db = new dbConnector();
|
|
return db.get({
|
|
"select" : {
|
|
"articles" : [
|
|
"id",
|
|
"title",
|
|
"slug",
|
|
"author",
|
|
"date",
|
|
"img",
|
|
"categorie_id"
|
|
]
|
|
},
|
|
"condition" : {
|
|
"categorie_id" : categorie.getId()
|
|
},
|
|
"join" : ""
|
|
}).then((result) => {
|
|
return new Promise((resolve) => {
|
|
var data = JSON.parse(result);
|
|
for(var i in data){
|
|
categorie.setArticle(new Article(data[i].id,data[i].title, data[i].author, data[i].date, data[i].img, data[i].slug, data[i].categorie_id));
|
|
categorie.getArticles()[i].setCategorieName(categorie.getTitle());
|
|
}
|
|
switch(returnFormat){
|
|
case 'html':
|
|
resolve(this.listArticlesToHTML(categorie));
|
|
break;
|
|
case 'json':
|
|
break;
|
|
case 'object':
|
|
break;
|
|
}
|
|
|
|
|
|
});
|
|
});
|
|
}
|
|
|
|
getHomeListArticles(returnFormat){
|
|
var db = new dbConnector();
|
|
return db.get({
|
|
"select" : {
|
|
"articles" : []
|
|
},
|
|
"condition" : "",
|
|
"join" : {
|
|
"left" : "categorie_id",
|
|
"right" : {
|
|
"db" : "categories",
|
|
"index" : "id"
|
|
}
|
|
}
|
|
}).then((result) => {
|
|
return new Promise((resolve) => {
|
|
var data = JSON.parse(result);
|
|
//log.debug(data);
|
|
var categorie = new Categorie(0, "home", "/", "home");
|
|
for(var i in data){
|
|
categorie.setArticle(new Article(data[i].left.id,data[i].left.title, data[i].left.author, data[i].left.date, data[i].left.img, "/"+data[i].right.uri+"/"+data[i].left.slug, data[i].left.categorie_id));
|
|
categorie.getArticles()[i].setCategorieName(data[i].right.title);
|
|
}
|
|
switch(returnFormat){
|
|
case 'html':
|
|
resolve(this.listArticlesToHTML(categorie));
|
|
break;
|
|
case 'json':
|
|
break;
|
|
case 'object':
|
|
break;
|
|
}
|
|
|
|
|
|
|
|
});
|
|
});
|
|
}
|
|
/**
|
|
*
|
|
* @param {<Categorie>} categorie : object categorie
|
|
* @returns {<Promise>} a list of article in HTML format
|
|
*/
|
|
listArticlesToHTML(categorie){
|
|
return new Promise((resolve, reject) => {
|
|
fs.readFile('./views/articles/list.hbs', 'utf-8', (error, source) => {
|
|
hbs.registerHelper('articles', (articles) =>{
|
|
return articles;
|
|
});
|
|
var template = hbs.compile(source);
|
|
var html = template(categorie);
|
|
resolve(html);
|
|
});
|
|
});
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param {<Categorie>} categorie : object categorie
|
|
* @param {string} uri the uri of article
|
|
* @returns {<Promise>} a compiled article in HTML
|
|
*/
|
|
getArticle(categorie, uri){
|
|
var db = new dbConnector();
|
|
return db.get({
|
|
"select" : {
|
|
"articles" : [
|
|
"id",
|
|
"title",
|
|
"slug",
|
|
"author",
|
|
"date",
|
|
"img",
|
|
"categorie_id",
|
|
"content"
|
|
]
|
|
},
|
|
"condition" : {
|
|
"categorie_id" : categorie.getId(),
|
|
"slug" : uri
|
|
},
|
|
"join" : ""
|
|
}).then((result) => {
|
|
return new Promise((resolve) => {
|
|
var data = JSON.parse(result);
|
|
categorie.setArticle(new Article(data[0].id,data[0].title, data[0].author, data[0].date, data[0].img, data[0].slug, data[0].categorie_id, data[0].content));
|
|
fs.readFile('./views/articles/article.hbs', 'utf-8', (error, source) => {
|
|
if(error){
|
|
log.error(error);
|
|
}
|
|
hbs.registerHelper('displayArticle', (article) =>{
|
|
return article;
|
|
});
|
|
var template = hbs.compile(source);
|
|
var html = template(categorie.getArticles());
|
|
resolve(html);
|
|
});
|
|
})
|
|
})
|
|
}
|
|
}
|
|
|
|
module.exports = Categories; |