Display home article
This commit is contained in:
parent
9bcd24af23
commit
15d20073b2
1
app.js
1
app.js
|
@ -24,6 +24,7 @@ class Nodezzarella {
|
|||
var db = require('./lib/db/'+config.db+'/db');
|
||||
new db().connectDB(configDB).then((connexion) => {
|
||||
global.dbConnexion = connexion;
|
||||
global.dbConf = configDB;
|
||||
this.run();
|
||||
});
|
||||
}
|
||||
|
|
|
@ -8,16 +8,19 @@ var id,
|
|||
content,
|
||||
date,
|
||||
img,
|
||||
categorieName,
|
||||
categorieID,
|
||||
slug;
|
||||
|
||||
class Article {
|
||||
constructor(id, title, author, date, img, slug, content = null){
|
||||
constructor(id, title, author, date, img, slug, categorieID, content = null){
|
||||
this.setId(id);
|
||||
this.setTitle(title);
|
||||
this.setAuthor(author);
|
||||
this.setDate(date);
|
||||
this.setImg(img);
|
||||
this.setSlug(slug);
|
||||
this.setCategorieID(categorieID);
|
||||
(content !== null)?this.setContent(content):'';
|
||||
}
|
||||
|
||||
|
@ -49,6 +52,14 @@ class Article {
|
|||
this.slug = slug;
|
||||
}
|
||||
|
||||
setCategorieID(categorieID){
|
||||
this.categorieID = categorieID;
|
||||
}
|
||||
|
||||
setCategorieName(name){
|
||||
this.categorieName = name;
|
||||
}
|
||||
|
||||
getId(){
|
||||
return this.id;
|
||||
}
|
||||
|
@ -77,6 +88,10 @@ class Article {
|
|||
return this.slug;
|
||||
}
|
||||
|
||||
getcategorieID(){
|
||||
return this.categorieID;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = Article;
|
||||
|
|
|
@ -10,9 +10,12 @@ const log = require('color-logs')(true, true, "Categories.class.js"),
|
|||
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]) + "";
|
||||
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\">";
|
||||
|
@ -24,6 +27,10 @@ hbs.registerHelper('listArticle', function(tabs, options) {
|
|||
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']){
|
||||
|
@ -35,7 +42,6 @@ hbs.registerHelper('listNav', function(tabs, options) {
|
|||
|
||||
hbs.registerHelper('article', function(tabs, options) {
|
||||
var out = '';
|
||||
log.debug(options['data']['root']);
|
||||
for(var x in options['data']['root']){
|
||||
out = out + "" + options.fn(options['data']['root'][x]) + "";
|
||||
|
||||
|
@ -60,7 +66,7 @@ class Categories {
|
|||
]
|
||||
},
|
||||
"condition" : "",
|
||||
"limit": ""
|
||||
"join": ""
|
||||
}).then((result) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
fs.readFile('./views/_nav.hbs', 'utf-8', (error, source) => {
|
||||
|
@ -79,10 +85,10 @@ class Categories {
|
|||
|
||||
/**
|
||||
* hydrate global var
|
||||
* @param {type} slug : url of categorie
|
||||
* @param {type} select : object of select {id = id}
|
||||
* @returns {Promise} data of categories
|
||||
*/
|
||||
getCategorie(slug){
|
||||
getCategorie(select){
|
||||
var db = new dbConnector();
|
||||
return db.get({
|
||||
"select" : {
|
||||
|
@ -93,10 +99,8 @@ class Categories {
|
|||
"description"
|
||||
]
|
||||
},
|
||||
"condition" : {
|
||||
"uri" : slug
|
||||
},
|
||||
"limit" : ""
|
||||
"condition" : select,
|
||||
"join" : ""
|
||||
}).then((result) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
var data = JSON.parse(result);
|
||||
|
@ -112,9 +116,10 @@ class Categories {
|
|||
/**
|
||||
*
|
||||
* @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){
|
||||
getListArticles(categorie, returnFormat){
|
||||
var db = new dbConnector();
|
||||
return db.get({
|
||||
"select" : {
|
||||
|
@ -124,25 +129,74 @@ class Categories {
|
|||
"slug",
|
||||
"author",
|
||||
"date",
|
||||
"img"
|
||||
"img",
|
||||
"categorie_id"
|
||||
]
|
||||
},
|
||||
"condition" : {
|
||||
"categorie_id" : categorie.getId()
|
||||
},
|
||||
"limit" : ""
|
||||
"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));
|
||||
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].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
|
||||
|
@ -155,7 +209,7 @@ class Categories {
|
|||
return articles;
|
||||
});
|
||||
var template = hbs.compile(source);
|
||||
var html = template(categorie.getArticles());
|
||||
var html = template(categorie);
|
||||
resolve(html);
|
||||
});
|
||||
});
|
||||
|
@ -178,6 +232,7 @@ class Categories {
|
|||
"author",
|
||||
"date",
|
||||
"img",
|
||||
"categorie_id",
|
||||
"content"
|
||||
]
|
||||
},
|
||||
|
@ -185,11 +240,11 @@ class Categories {
|
|||
"categorie_id" : categorie.getId(),
|
||||
"slug" : uri
|
||||
},
|
||||
"limit" : ""
|
||||
"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].content));
|
||||
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);
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"select": {
|
||||
"table" : [
|
||||
"field1",
|
||||
"field2"
|
||||
]
|
||||
},
|
||||
"join" : {
|
||||
"left" : "field_to_index",
|
||||
"right" : {
|
||||
"db" : "tableName",
|
||||
"index" : "field_to_index"
|
||||
}
|
||||
},
|
||||
"condition" : {
|
||||
"field1" : "equal",
|
||||
"field2" : "equal"
|
||||
}
|
||||
}
|
|
@ -12,13 +12,21 @@ class rethinkdb{
|
|||
get(query){
|
||||
return new Promise((resolve, reject) => {
|
||||
|
||||
var nbOfTable = Object.keys(query.select).length;
|
||||
|
||||
/**
|
||||
/*
|
||||
* select table
|
||||
*/
|
||||
var formatedQuery = r.table(Object.keys(query.select)[0]);
|
||||
|
||||
/*
|
||||
* create join
|
||||
*/
|
||||
if(typeof query.join === "object"){
|
||||
formatedQuery = formatedQuery.eqJoin(query.join.left, r.db(dbConf.dbName).table(query.join.right.db))
|
||||
}
|
||||
|
||||
/*
|
||||
* form filter / condition of qyert
|
||||
*/
|
||||
if(query.condition !== ""){
|
||||
formatedQuery = formatedQuery.filter(query.condition);
|
||||
}
|
||||
|
@ -31,21 +39,17 @@ class rethinkdb{
|
|||
break;
|
||||
}
|
||||
}
|
||||
// r.db("nodezzarella").table("articles").eqJoin("categorie_id", r.db("nodezzarella").table("categories")).pluck({"left":["id"]})
|
||||
|
||||
if(selectCollumn.length > 0){
|
||||
formatedQuery = formatedQuery.pluck(selectCollumn)
|
||||
}
|
||||
|
||||
/**
|
||||
* make join query
|
||||
*/
|
||||
if(nbOfTable > 1){
|
||||
|
||||
formatedQuery = formatedQuery.pluck(selectCollumn);
|
||||
}
|
||||
|
||||
/**
|
||||
* run query
|
||||
*/
|
||||
//log.debug(formatedQuery);
|
||||
|
||||
formatedQuery.run(dbConnexion).then((cursor) => {
|
||||
return cursor.toArray();
|
||||
}).then((result) => {
|
||||
|
@ -54,19 +58,6 @@ class rethinkdb{
|
|||
throw err;
|
||||
log.error(err);
|
||||
});
|
||||
/*formatedQuery.run(dbConnexion, (err, result) => {
|
||||
if(err) throw err;
|
||||
var jsonReturn = [];
|
||||
console.log(typeof result);
|
||||
result.each(function(err, row) {
|
||||
if (err) throw err;
|
||||
log.debug(row);
|
||||
jsonReturn.push(row);
|
||||
//console.log(i);
|
||||
});
|
||||
resolve(jsonReturn);
|
||||
|
||||
});*/
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -106,6 +97,9 @@ class rethinkdb{
|
|||
}
|
||||
|
||||
connectDB(config){
|
||||
this.host = config.host;
|
||||
this.port = config.port;
|
||||
this.dbName = config.dbName;
|
||||
log.info("Application connecting to database...");
|
||||
return r.connect({
|
||||
host: config.host,
|
||||
|
|
|
@ -15,18 +15,17 @@ router.get("/", function(req, res){
|
|||
|
||||
var categories = new Categories();
|
||||
Promise.all([
|
||||
categories.getNav()
|
||||
categories.getNav(),
|
||||
categories.getHomeListArticles("html")
|
||||
]).then((data) => {
|
||||
var nav = data[0];
|
||||
var content = /*data[1]*/ "";
|
||||
var disclaimer = /*data[2]*/ "";
|
||||
var content = data[1];
|
||||
res.setHeader("Content-type", "text/html");
|
||||
var tplData = {
|
||||
"blogName": config.siteTitle,
|
||||
"title": config.siteHomeTitle,
|
||||
"nav": nav,
|
||||
"content": content,
|
||||
"disclaimer": disclaimer
|
||||
};
|
||||
res.render('template.hbs', tplData);
|
||||
}).catch((err) => {
|
||||
|
@ -43,15 +42,13 @@ router.get("/:uri/", function(req, res){
|
|||
]).then(data => {
|
||||
var nav = data[0];
|
||||
var categorie = data[1];
|
||||
categories.getListArticles(categorie).then((result) => {
|
||||
log.debug(result)
|
||||
categories.getListArticles(categorie, "html").then((result) => {
|
||||
res.setHeader("Content-type", "text/html");
|
||||
var tplData = {
|
||||
"blogName": config.siteTitle,
|
||||
"title": categorie.getTitle() + " - "+config.siteHomeTitle,
|
||||
"nav": nav,
|
||||
"content": result,
|
||||
"disclaimer": ''
|
||||
};
|
||||
res.render('template.hbs', tplData);
|
||||
})
|
||||
|
@ -77,7 +74,6 @@ router.get("/:categories/:slug", function(req, res){
|
|||
"title": categorie.getTitle() + " - "+config.siteHomeTitle,
|
||||
"nav": nav,
|
||||
"content": result,
|
||||
"disclaimer": ''
|
||||
};
|
||||
res.render('template.hbs', tplData);
|
||||
})
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
<div id="disclaimer">
|
||||
<div class="titleLegend">{{categorie}}</div>
|
||||
<img class="separator" src="assets/img/separator.png">
|
||||
<h2>{{title}}</h2>
|
||||
<a href="{{slug}}">
|
||||
<button>Consulter</button>
|
||||
</a>
|
||||
</div>
|
|
@ -1,3 +1,13 @@
|
|||
{{#disclamer article}}
|
||||
<div id="disclaimer">
|
||||
<div class="titleLegend">{{categorieName}}</div>
|
||||
<img class="separator" src="/assets/img/separator.png">
|
||||
<h2>{{title}}</h2>
|
||||
<a href="{{slug}}">
|
||||
<button>Consulter</button>
|
||||
</a>
|
||||
</div>
|
||||
{{/disclamer}}
|
||||
<main class="transparent">
|
||||
<section>
|
||||
<div class="flexgrid">
|
||||
|
@ -10,7 +20,7 @@
|
|||
</div>
|
||||
<div class="tileLegend">
|
||||
<div class="content">
|
||||
<div class="titleLegend">{{categorie}}</div>
|
||||
<div class="titleLegend">{{categorieName}}</div>
|
||||
<img class="blackAsset separator" src="/assets/img/separator.png">
|
||||
<h2>{{title}}</h2>
|
||||
</div>
|
||||
|
|
|
@ -17,7 +17,6 @@
|
|||
<button> </button>
|
||||
</div>
|
||||
</div>-->
|
||||
{{{disclaimer}}}
|
||||
{{{content}}}
|
||||
<footer>
|
||||
|
||||
|
|
Reference in New Issue