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'); var db = require('./lib/db/'+config.db+'/db');
new db().connectDB(configDB).then((connexion) => { new db().connectDB(configDB).then((connexion) => {
global.dbConnexion = connexion; global.dbConnexion = connexion;
global.dbConf = configDB;
this.run(); this.run();
}); });
} }

View File

@ -8,16 +8,19 @@ var id,
content, content,
date, date,
img, img,
categorieName,
categorieID,
slug; slug;
class Article { 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.setId(id);
this.setTitle(title); this.setTitle(title);
this.setAuthor(author); this.setAuthor(author);
this.setDate(date); this.setDate(date);
this.setImg(img); this.setImg(img);
this.setSlug(slug); this.setSlug(slug);
this.setCategorieID(categorieID);
(content !== null)?this.setContent(content):''; (content !== null)?this.setContent(content):'';
} }
@ -49,6 +52,14 @@ class Article {
this.slug = slug; this.slug = slug;
} }
setCategorieID(categorieID){
this.categorieID = categorieID;
}
setCategorieName(name){
this.categorieName = name;
}
getId(){ getId(){
return this.id; return this.id;
} }
@ -77,6 +88,10 @@ class Article {
return this.slug; return this.slug;
} }
getcategorieID(){
return this.categorieID;
}
} }
module.exports = Article; 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) { hbs.registerHelper('listArticle', function(tabs, options) {
var i = 1; var i = 1;
var out = ''; var out = '';
log.debug();
for(var x in options['data']['root']){ var articles = options['data']['root'].getArticles();
out = out + "" + options.fn(options['data']['root'][x]) + ""; articles.shift();
log.debug(articles);
for(var x in articles){
out = out + "" + options.fn(articles[x]) + "";
if(i == 3){ if(i == 3){
i= 1; i= 1;
out = out + "</div><div class=\"row\">"; out = out + "</div><div class=\"row\">";
@ -24,6 +27,10 @@ hbs.registerHelper('listArticle', function(tabs, options) {
return out; return out;
}); });
hbs.registerHelper('disclamer', function(tabs, options) {
return options.fn(options['data']['root'].getArticles()[0]) + "";
});
hbs.registerHelper('listNav', function(tabs, options) { hbs.registerHelper('listNav', function(tabs, options) {
var out = ''; var out = '';
for(var x in options['data']['root']){ for(var x in options['data']['root']){
@ -35,7 +42,6 @@ hbs.registerHelper('listNav', function(tabs, options) {
hbs.registerHelper('article', function(tabs, options) { hbs.registerHelper('article', function(tabs, options) {
var out = ''; var out = '';
log.debug(options['data']['root']);
for(var x in options['data']['root']){ for(var x in options['data']['root']){
out = out + "" + options.fn(options['data']['root'][x]) + ""; out = out + "" + options.fn(options['data']['root'][x]) + "";
@ -60,7 +66,7 @@ class Categories {
] ]
}, },
"condition" : "", "condition" : "",
"limit": "" "join": ""
}).then((result) => { }).then((result) => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
fs.readFile('./views/_nav.hbs', 'utf-8', (error, source) => { fs.readFile('./views/_nav.hbs', 'utf-8', (error, source) => {
@ -79,10 +85,10 @@ class Categories {
/** /**
* hydrate global var * hydrate global var
* @param {type} slug : url of categorie * @param {type} select : object of select {id = id}
* @returns {Promise} data of categories * @returns {Promise} data of categories
*/ */
getCategorie(slug){ getCategorie(select){
var db = new dbConnector(); var db = new dbConnector();
return db.get({ return db.get({
"select" : { "select" : {
@ -93,10 +99,8 @@ class Categories {
"description" "description"
] ]
}, },
"condition" : { "condition" : select,
"uri" : slug "join" : ""
},
"limit" : ""
}).then((result) => { }).then((result) => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
var data = JSON.parse(result); var data = JSON.parse(result);
@ -112,9 +116,10 @@ class Categories {
/** /**
* *
* @param {<Categorie>} categorie : object categorie * @param {<Categorie>} categorie : object categorie
* @param {string} returnFormat : format of return [object, json, html]
* @returns {<Promise> listArticleToHTML} a list of article in HTML format * @returns {<Promise> listArticleToHTML} a list of article in HTML format
*/ */
getListArticles(categorie){ getListArticles(categorie, returnFormat){
var db = new dbConnector(); var db = new dbConnector();
return db.get({ return db.get({
"select" : { "select" : {
@ -124,25 +129,74 @@ class Categories {
"slug", "slug",
"author", "author",
"date", "date",
"img" "img",
"categorie_id"
] ]
}, },
"condition" : { "condition" : {
"categorie_id" : categorie.getId() "categorie_id" : categorie.getId()
}, },
"limit" : "" "join" : ""
}).then((result) => { }).then((result) => {
return new Promise((resolve) => { return new Promise((resolve) => {
var data = JSON.parse(result); var data = JSON.parse(result);
for(var i in data){ 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 * @param {<Categorie>} categorie : object categorie
@ -155,7 +209,7 @@ class Categories {
return articles; return articles;
}); });
var template = hbs.compile(source); var template = hbs.compile(source);
var html = template(categorie.getArticles()); var html = template(categorie);
resolve(html); resolve(html);
}); });
}); });
@ -178,6 +232,7 @@ class Categories {
"author", "author",
"date", "date",
"img", "img",
"categorie_id",
"content" "content"
] ]
}, },
@ -185,11 +240,11 @@ class Categories {
"categorie_id" : categorie.getId(), "categorie_id" : categorie.getId(),
"slug" : uri "slug" : uri
}, },
"limit" : "" "join" : ""
}).then((result) => { }).then((result) => {
return new Promise((resolve) => { return new Promise((resolve) => {
var data = JSON.parse(result); 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) => { fs.readFile('./views/articles/article.hbs', 'utf-8', (error, source) => {
if(error){ if(error){
log.error(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'), promise = require('promise'),
fs = require('fs'), fs = require('fs'),
log = require("color-logs")(true, true, "RethinDB connector"); log = require("color-logs")(true, true, "RethinDB connector");
class rethinkdb{ class rethinkdb{
static constructor(){ static constructor(){
@ -12,13 +12,21 @@ class rethinkdb{
get(query){ get(query){
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
var nbOfTable = Object.keys(query.select).length; /*
/**
* select table * select table
*/ */
var formatedQuery = r.table(Object.keys(query.select)[0]); 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 !== ""){ if(query.condition !== ""){
formatedQuery = formatedQuery.filter(query.condition); formatedQuery = formatedQuery.filter(query.condition);
} }
@ -31,21 +39,17 @@ class rethinkdb{
break; break;
} }
} }
// r.db("nodezzarella").table("articles").eqJoin("categorie_id", r.db("nodezzarella").table("categories")).pluck({"left":["id"]})
if(selectCollumn.length > 0){ if(selectCollumn.length > 0){
formatedQuery = formatedQuery.pluck(selectCollumn) formatedQuery = formatedQuery.pluck(selectCollumn);
}
/**
* make join query
*/
if(nbOfTable > 1){
} }
/** /**
* run query * run query
*/ */
//log.debug(formatedQuery);
formatedQuery.run(dbConnexion).then((cursor) => { formatedQuery.run(dbConnexion).then((cursor) => {
return cursor.toArray(); return cursor.toArray();
}).then((result) => { }).then((result) => {
@ -54,19 +58,6 @@ class rethinkdb{
throw err; throw err;
log.error(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){ connectDB(config){
this.host = config.host;
this.port = config.port;
this.dbName = config.dbName;
log.info("Application connecting to database..."); log.info("Application connecting to database...");
return r.connect({ return r.connect({
host: config.host, host: config.host,

View File

@ -15,18 +15,17 @@ router.get("/", function(req, res){
var categories = new Categories(); var categories = new Categories();
Promise.all([ Promise.all([
categories.getNav() categories.getNav(),
categories.getHomeListArticles("html")
]).then((data) => { ]).then((data) => {
var nav = data[0]; var nav = data[0];
var content = /*data[1]*/ ""; var content = data[1];
var disclaimer = /*data[2]*/ "";
res.setHeader("Content-type", "text/html"); res.setHeader("Content-type", "text/html");
var tplData = { var tplData = {
"blogName": config.siteTitle, "blogName": config.siteTitle,
"title": config.siteHomeTitle, "title": config.siteHomeTitle,
"nav": nav, "nav": nav,
"content": content, "content": content,
"disclaimer": disclaimer
}; };
res.render('template.hbs', tplData); res.render('template.hbs', tplData);
}).catch((err) => { }).catch((err) => {
@ -43,15 +42,13 @@ router.get("/:uri/", function(req, res){
]).then(data => { ]).then(data => {
var nav = data[0]; var nav = data[0];
var categorie = data[1]; var categorie = data[1];
categories.getListArticles(categorie).then((result) => { categories.getListArticles(categorie, "html").then((result) => {
log.debug(result)
res.setHeader("Content-type", "text/html"); res.setHeader("Content-type", "text/html");
var tplData = { var tplData = {
"blogName": config.siteTitle, "blogName": config.siteTitle,
"title": categorie.getTitle() + " - "+config.siteHomeTitle, "title": categorie.getTitle() + " - "+config.siteHomeTitle,
"nav": nav, "nav": nav,
"content": result, "content": result,
"disclaimer": ''
}; };
res.render('template.hbs', tplData); res.render('template.hbs', tplData);
}) })
@ -77,7 +74,6 @@ router.get("/:categories/:slug", function(req, res){
"title": categorie.getTitle() + " - "+config.siteHomeTitle, "title": categorie.getTitle() + " - "+config.siteHomeTitle,
"nav": nav, "nav": nav,
"content": result, "content": result,
"disclaimer": ''
}; };
res.render('template.hbs', tplData); 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"> <main class="transparent">
<section> <section>
<div class="flexgrid"> <div class="flexgrid">
@ -10,7 +20,7 @@
</div> </div>
<div class="tileLegend"> <div class="tileLegend">
<div class="content"> <div class="content">
<div class="titleLegend">{{categorie}}</div> <div class="titleLegend">{{categorieName}}</div>
<img class="blackAsset separator" src="/assets/img/separator.png"> <img class="blackAsset separator" src="/assets/img/separator.png">
<h2>{{title}}</h2> <h2>{{title}}</h2>
</div> </div>

View File

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