Parser con schemas
by J. Jones
HTML
<script src="http://cdnjs.cloudflare.com/ajax/libs/mathjs/1.6.0/math.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.3.0/knockout-debug.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout.mapping/2.4.1/knockout.mapping.min.js"></script>
<script src="https://raw.githubusercontent.com/broofa/node-uuid/master/uuid.js"></script>
<div id='output'></div>
JavaScript
var log = function (msg) {
$("#output").append(msg + "<br/>");
}
/* Función que inicializa el parser con el scope del pojo actual */
var setParser = function (parser, pojo) {
for (var x in pojo) {
parser.set(x, pojo[x]);
}
}
/* función que traer una instancia nueva del nodo actual */
var getParser = function (node) {
var parser = math.parser();
parser.set('get', function (prop) {
// Arrreglar esto para los nodos
var retValue = prop;
if (_.isFunction(retValue)) {
retValue = retValue();
}
return retValue;
});
parser.set('avg', function (prop) {
var l = prop.length;
return math.sum(prop) / l;
});
parser.set('getValueFromParent', function (parent, prop) {
if (_.isFunction(parent)) {
parent = parent();
}
// Arrreglar esto para los nodos
if (_.isFunction(parent[prop])) {
return parent[prop]();
}
return parent[prop];
});
parser.set('map', function (items, proyeccion, filter) {
if (_.isFunction(items)) {
//para kockout
items = items();
}
if (filter != undefined && filter != '') {
log("filtrando");
items = _.filter(items, function (ci) {
return math.eval(filter, ci);
}, this);
log("array filtrado " + items.length);
};
log("proyectando");
items = _.map(items, function (ci) {
var item = math.eval(proyeccion, ci);
if (_.isFunction(item)) {
item = item();
}
return item;
}, this);
log("regresando array");
return items;
});
parser.set('desvest', function (prop) {
var avgfunction = parser.get("avg");
var avg = avgfunction(prop);
var items= _.map(prop, function(ci){
return math.pow((ci-avg),2);
...