Display home article

This commit is contained in:
Dryusdan 2017-07-22 23:22:50 +02:00
parent 9bcd24af23
commit 15d20073b2
9 changed files with 144 additions and 63 deletions

1
app.js
View File

@ -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();
});
}

View File

@ -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;

View File

@ -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());
}
resolve(this.listArticlesToHTML(categorie));
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);

19
connectorSelectQuery.json Normal file
View File

@ -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"
}
}

View File

@ -2,7 +2,7 @@ const r = require("rethinkdb"),
promise = require('promise'),
fs = require('fs'),
log = require("color-logs")(true, true, "RethinDB connector");
class rethinkdb{
static constructor(){
@ -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,

View File

@ -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);
})

View File

@ -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>

View File

@ -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>

View File

@ -17,7 +17,6 @@
<button> </button>
</div>
</div>-->
{{{disclaimer}}}
{{{content}}}
<footer>