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');
|
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();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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"
|
||||||
|
}
|
||||||
|
}
|
|
@ -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,
|
||||||
|
|
|
@ -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);
|
||||||
})
|
})
|
||||||
|
|
|
@ -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">
|
<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>
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
<button> </button>
|
<button> </button>
|
||||||
</div>
|
</div>
|
||||||
</div>-->
|
</div>-->
|
||||||
{{{disclaimer}}}
|
|
||||||
{{{content}}}
|
{{{content}}}
|
||||||
<footer>
|
<footer>
|
||||||
|
|
||||||
|
|
Reference in New Issue