File structure reorganization

This commit is contained in:
simov
2014-09-08 12:29:19 +03:00
parent 4cd2e7604e
commit eca21063cc
15 changed files with 190 additions and 175 deletions
+9
View File
@@ -0,0 +1,9 @@
exports = module.exports = {
tbl: require('./tbl'),
otm: require('./otm'),
mtm: require('./mtm'),
stc: require('./stc'),
list: require('./list'),
pagination: require('./pagination')
}
+5 -5
View File
@@ -1,9 +1,9 @@
var qb = require('../qb'),
format = require('./format');
format = require('../format');
exports = module.exports = function (args, cb) {
exports.get = function (args, done) {
var columns = args.config.columns;
var visible = [],
@@ -18,7 +18,7 @@ exports = module.exports = function (args, cb) {
qb.lst.create(args);
args.db.client.query(args.query, function (err, rows) {
if (err) return cb(err);
if (err) return done(err);
var records = [];
for (var i=0; i < rows.length; i++) {
var pk = {
@@ -28,12 +28,12 @@ exports = module.exports = function (args, cb) {
var values = [];
for (var j=1; j < columns.length; j++) {
var value = rows[i][columns[j].name];
value = format.value(columns[j], value);
value = format.list.value(columns[j], value);
if (columns[j].manyToMany && value) value = {mtm: value.split(',')}
values.push(value);
}
records.push({pk: pk, values: values});
}
cb(null, {columns: names, records: records});
done(null, {columns: names, records: records});
});
}
+52
View File
@@ -0,0 +1,52 @@
var async = require('async');
var qb = require('../qb');
// modifies `rows.columns` with manyToMany columns on select
// modifies `rows` with ids on post
// return an array of all child ids linked to this record's pk
function getIds (args, column, pk, done) {
var str = qb.mtm.select(args, column, pk);
args.db.client.query(str, function (err, rows) {
if (err) return done(err);
var result = [];
for (var i=0; i < rows.length; i++) {
result.push(rows[i][Object.keys(rows[i])[0]]);
}
done(err, result);
});
}
function loopColumns (args, row, done) {
row.ids = {};
async.each(args.config.columns, function (column, done) {
if (!column.manyToMany) return done();
// after select this column practically doesn't exists
if (row.columns[column.name] === undefined)
row.columns[column.name] = [];
var pk = row.pk || row.columns['__pk'];
if (!pk) return done();
getIds(args, column, pk, function (err, ids) {
if (err) return done(err);
args.post
// save the ids from the database
? row.ids[column.name] = ids
// selecting
: row.columns[column.name] = ids;
done();
});
}, done);
}
// loopRecords
exports.get = function (args, rows, done) {
async.each(rows, function (row, done) {
loopColumns(args, row, done);
}, done);
}
+27
View File
@@ -0,0 +1,27 @@
var async = require('async');
var qb = require('../qb');
// modifies `args.config.columns` with `value`
function getData (args, ref, done) {
var str = qb.otm.select(args, ref);
args.db.client.query(str, function (err, rows) {
if (err) return done(err);
done(null, rows);
});
}
exports.get = function (args, done) {
async.each(args.config.columns, function (column, done) {
if ((!column.oneToMany && !column.manyToMany) || !column.control.select)
return done();
var ref = column.oneToMany ? column.oneToMany : column.manyToMany.ref;
getData(args, ref, function (err, rows) {
if (err) return done(err);
column.value = rows;
done();
});
}, done);
}
@@ -3,13 +3,13 @@ var pagination = require('sr-pagination');
var qb = require('../qb')
exports.get = function (args, cb) {
exports.get = function (args, done) {
var str = qb.lst.pagination(args);
args.db.client.query(str, function (err, rows) {
if (err) return cb(err);
if (err) return done(err);
var total = parseInt(rows[0].count),
rows = args.config.listview.page,
page = parseInt(args.page || 1);
cb(null, pagination({page: page, links: 9, rows: rows, total: total}));
done(null, pagination({page: page, links: 9, rows: rows, total: total}));
});
}
+40
View File
@@ -0,0 +1,40 @@
// load static values from settings
// modifies `args.config.columns` with `value`
function getSelect (options) {
var values = [];
for (var i=0; i < options.length; i++) {
if ('string' === typeof options[i]) {
values.push({__pk: options[i], __text: options[i]});
}
else if ('object' === typeof options[i]) {
var value = Object.keys(options[i])[0],
text = options[i][value];
values.push({__pk: value, __text: text});
}
}
return values;
}
function getRadio (options) {
return [
{text: options[0], value: 1},
{text: options[1], value: 0}
];
}
exports.get = function (args) {
var columns = args.config.columns;
for (var i=0; i < columns.length; i++) {
var control = columns[i].control;
if (!(control.options instanceof Array)) continue;
if (control.select) {
columns[i].value = getSelect(control.options);
}
else if (control.radio) {
columns[i].value = getRadio(control.options);
}
}
}
+23
View File
@@ -0,0 +1,23 @@
var qb = require('../qb');
// get table records
exports.get = function (args, done) {
if (args.post) {
var table = args.config.table,
rows = args.post[table.name].records || [];
return done(null, rows);
}
var str = qb.tbl.select(args);
args.db.client.query(str, function (err, rows) {
if (err) return done(err);
var result = [];
for (var i=0; i < rows.length; i++) {
result.push({columns: rows[i]});
}
done(null, result);
});
}
-137
View File
@@ -1,137 +0,0 @@
var async = require('async');
var qb = require('../qb');
// modifies `args.config.columns` with `value`
var otm = {
_getData: function (args, ref, done) {
var str = qb.otm.select(args, ref);
args.db.client.query(str, function (err, rows) {
if (err) return done(err);
done(null, rows);
});
},
get: function (args, done) {
async.each(args.config.columns, function (column, done) {
if ((!column.oneToMany && !column.manyToMany) || !column.control.select)
return done();
var ref = column.oneToMany ? column.oneToMany : column.manyToMany.ref;
otm._getData(args, ref, function (err, rows) {
if (err) return done(err);
column.value = rows;
done();
});
}, done);
}
};
// load static values from settings
// modifies `args.config.columns` with `value`
var stc = {
getSelect: function (options) {
var values = [];
for (var i=0; i < options.length; i++) {
if ('string' === typeof options[i]) {
values.push({__pk: options[i], __text: options[i]});
}
else if ('object' === typeof options[i]) {
var value = Object.keys(options[i])[0],
text = options[i][value];
values.push({__pk: value, __text: text});
}
}
return values;
},
getRadio: function (options) {
return [
{text: options[0], value: 1},
{text: options[1], value: 0}
];
},
// loopColumns
get: function (args) {
var columns = args.config.columns;
for (var i=0; i < columns.length; i++) {
var control = columns[i].control;
if (!(control.options instanceof Array)) continue;
if (control.select) {
columns[i].value = stc.getSelect(control.options);
}
else if (control.radio) {
columns[i].value = stc.getRadio(control.options);
}
}
}
};
// get table records
var tbl = {
get: function (args, done) {
if (args.post) {
var table = args.config.table,
rows = args.post[table.name].records || [];
return done(null, rows);
}
var str = qb.tbl.select(args);
args.db.client.query(str, function (err, rows) {
if (err) return done(err);
var result = [];
for (var i=0; i < rows.length; i++) {
result.push({columns: rows[i]});
}
done(null, result);
});
}
};
// modifies `rows.columns` with manyToMany columns on select
// modifies `rows` with ids on post
var mtm = {
// return an array of all child ids linked to this record's pk
getIds: function (args, column, pk, done) {
var str = qb.mtm.select(args, column, pk);
args.db.client.query(str, function (err, rows) {
if (err) return done(err);
var result = [];
for (var i=0; i < rows.length; i++) {
result.push(rows[i][Object.keys(rows[i])[0]]);
}
done(err, result);
});
},
loopColumns: function (args, row, done) {
row.ids = {};
async.each(args.config.columns, function (column, done) {
if (!column.manyToMany) return done();
// after select this column practically doesn't exists
if (row.columns[column.name] === undefined)
row.columns[column.name] = [];
var pk = row.pk || row.columns['__pk'];
if (!pk) return done();
mtm.getIds(args, column, pk, function (err, ids) {
if (err) return done(err);
args.post
// save the ids from the database
? row.ids[column.name] = ids
// selecting
: row.columns[column.name] = ids;
done();
});
}, done);
},
// loopRecords
get: function (args, rows, done) {
async.each(rows, function (row, done) {
mtm.loopColumns(args, row, done);
}, done);
}
};
exports = module.exports = {tbl: tbl, otm: otm, mtm: mtm, stc: stc};
+3 -3
View File
@@ -2,8 +2,8 @@
var async = require('async'),
dcopy = require('deep-copy');
var upload = require('./upload'),
data = require('./data'),
params = require('./params');
data = require('../data'),
template = require('../template');
function removeHidden (columns) {
@@ -27,7 +27,7 @@ function getData (args, done) {
if (err) return done(err);
upload.loopRecords(args, function (err) {
if (err) return done(err);
done(null, params.get(args, rows));
done(null, template.table.get(args, rows));
});
});
});
+5
View File
@@ -0,0 +1,5 @@
exports = module.exports = {
list: require('./list'),
form: require('./form')
}
+4
View File
@@ -0,0 +1,4 @@
exports = module.exports = {
table: require('./table')
}
@@ -1,7 +1,7 @@
var dcopy = require('deep-copy');
var validate = require('./validate'),
format = require('./format');
var validate = require('../editview/validate'),
format = require('../format');
exports.blank = function (args) {
@@ -65,7 +65,7 @@ exports.records = function (args, rows) {
var value = values[column.name];
column.error = validate.value(column, value);
column.value = format.value(column, value);
column.value = format.form.value(column, value);
args.error = column.error ? true : args.error;
}
records.push({pk: pk, columns: columns, insert: insert, remove: remove});
+16 -24
View File
@@ -1,17 +1,9 @@
var dcopy = require('deep-copy');
var qb = require('../lib/qb');
// listview
var listview = {
data: require('../lib/listview/data')},
pagination = require('../lib/listview/pagination'),
filter = require('../lib/listview/filter');
// editview
var editview = {
otm: require('../lib/editview/data').otm,
stc: require('../lib/editview/data').stc,
format: require('../lib/editview/format')
};
var qb = require('../lib/qb'),
data = require('../lib/data'),
format = require('../lib/format');
var filter = require('../lib/listview/filter');
function getArgs (req, res) {
@@ -30,14 +22,14 @@ function getArgs (req, res) {
}
exports.get = function (req, res, next) {
data(req, res, next);
_data(req, res, next);
}
exports.post = function (req, res, next) {
data(req, res, next);
_data(req, res, next);
}
function data (req, res, next) {
function _data (req, res, next) {
var args = getArgs(req, res),
events = res.locals._admin.events;
@@ -45,33 +37,33 @@ function data (req, res, next) {
qb.lst.select(args);
events.preList(req, res, args, function () {
listview.data(args, function (err, data) {
data.list.get(args, function (err, ddata) {
if (err) return next(err);
pagination.get(args, function (err, pager) {
data.pagination.get(args, function (err, pager) {
if (err) return next(err);
// always should be in front of filter.getColumns
// as it may reduce args.config.columns
var order = filter.getOrderColumns(req, args);
args.config.columns = filter.getColumns(args);
editview.otm.get(args, function (err) {
data.otm.get(args, function (err) {
if (err) return next(err);
editview.stc.get(args);
data.stc.get(args);
render(req, res, args, data, pager, order, next);
render(req, res, args, ddata, pager, order, next);
});
});
});
});
}
function render (req, res, args, data, pager, order, next) {
function render (req, res, args, ddata, pager, order, next) {
// set filter active items
for (var i=0; i < args.config.columns.length; i++) {
var column = args.config.columns[i],
value = args.filter.columns[column.name];
column.defaultValue = null;
column.value = editview.format.value(column, value);
column.value = format.form.value(column, value);
}
res.locals.view = {
@@ -110,8 +102,8 @@ function render (req, res, args, data, pager, order, next) {
res.locals.collapsed = args.filter.show;
res.locals.or = args.filter.or;
res.locals.columns = data.columns;
res.locals.records = data.records;
res.locals.columns = ddata.columns;
res.locals.records = ddata.records;
res.locals.pagination = pager;
res.locals.partials = {