'use strict';
require('../globals');
var filter = module.exports = {};
var BINARY = {
'>': true,
'>=': true,
'=': true,
'!=': true,
'<': true,
'<=': true
};
filter.addFilters = function(rawTable, encoding) {
var filters = encoding.filter(); // apply filters to raw data before aggregation
Eif (!rawTable.transform)
rawTable.transform = [];
// add custom filters
for (var i in filters) {
var filter = filters[i];
var condition = '';
var operator = filter.operator;
var operands = filter.operands;
var d = 'd.' + (encoding._vega2 ? '' : 'data.');
Iif (BINARY[operator]) {
// expects a field and a value
if (operator === '=') {
operator = '==';
}
var op1 = operands[0];
var op2 = operands[1];
condition = d + op1 + operator + op2;
} else Eif (operator === 'notNull') {
// expects a number of fields
for (var j in operands) {
condition += d + operands[j] + '!==null';
Iif (j < operands.length - 1) {
condition += ' && ';
}
}
} else {
console.warn('Unsupported operator: ', operator);
}
rawTable.transform.push({
type: 'filter',
test: condition
});
}
return rawTable;
};
// remove less than 0 values if we use log function
filter.filterLessThanZero = function(dataTable, encoding) {
encoding.forEach(function(field, encType) {
Iif (encoding.scale(encType).type === 'log') {
dataTable.transform.push({
type: 'filter',
test: 'd.' + encoding.field(encType) + '>0'
});
}
});
};
|