'use strict';
require('../globals');
var vlfield = require('../field');
module.exports = sort;
// adds new transforms that produce sorted fields
function sort(data, encoding, stats, opt) {
// jshint unused:false
var datasetMapping = {};
encoding.forEach(function(field, encType) {
var sortBy = encoding.sort(encType, stats);
if (sortBy.length > 0) {
var fields = sortBy.map(function(d) {
return {
op: d.aggregate,
field: vlfield.fieldRef(d, {nofn: true, data: !encoding._vega2})
};
});
var byClause = sortBy.map(function(d) {
var reverse = (d.reverse ? '-' : '');
return reverse + vlfield.fieldRef(d, {data: !encoding._vega2});
});
var dataName = sort.getDataName(encType);
var transforms = [
{
type: 'aggregate',
groupby: [ encoding.fieldRef(encType) ],
fields: fields
},
{
type: 'sort',
by: byClause
}
];
data.push({
name: dataName,
source: RAW,
transform: transforms
});
datasetMapping[encType] = dataName;
}
});
return data;
}
sort.getDataName = function(encType) {
return 'sorted-' + encType;
};
|