Code coverage report for src/compile/sort.js

Statements: 100% (23 / 23)      Branches: 100% (6 / 6)      Functions: 100% (5 / 5)      Lines: 100% (23 / 23)      Ignored: none     

All files » src/compile/ » sort.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66    1   1   1     1     3 3   3 9 9 2 3           2 3 3     2   2                       2           2       3   5 5 3   2          
'use strict';
 
require('../globals');
 
var vlfield = require('../field');
 
module.exports = addSortTransforms;
 
// adds new transforms that produce sorted fields
function addSortTransforms(data, encoding, stats, opt) {
  // jshint unused:false
 
  var datasetMapping = {};
  var counter = 0;
 
  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 = 'sorted' + counter++;
 
      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 {
    getDataset: function(encType) {
      var data = datasetMapping[encType];
      if (!data) {
        return TABLE;
      }
      return data;
    }
  };
}