CartoDB/cartodb20

View on GitHub
lib/assets/javascripts/cartodb/models/carto/torque.js

Summary

Maintainability
A
1 hr
Test Coverage
cdb.admin.carto = cdb.admin.carto || {};

cdb.admin.carto.torque = {

  torque_generator: function(table, props, changed, callback) {
    var carto_props = _.omit(props, [
      'property',
      'torque-duration',
      'torque-frame-count',
      'torque-blend-mode',
      'torque-trails',
      'torque-cumulative',
      'torque-resolution',
      'torque-aggregation-function'
    ]);

    var torque_props =
    "Map {\n" +
      [
      '-torque-frame-count:' + props['torque-frame-count'],
      '-torque-animation-duration:' + props['torque-duration'],
      '-torque-time-attribute:"' + props['property'] + '"',
      '-torque-aggregation-function:' + (props['torque-aggregation-function'] ? '"' + props['torque-aggregation-function'] + '"': '"count(cartodb_id)"'),
      '-torque-resolution:' + props['torque-resolution'],
      '-torque-data-aggregation:' + (props['torque-cumulative'] ? 'cumulative': 'linear')
      ].join(';\n') +
    ";\n}";

    if(props['torque-blend-mode']) {
      carto_props['comp-op'] = props['torque-blend-mode'];
    }

    if (carto_props['type'] === 'torque_heat') {
      if(typeof carto_props['marker-opacity'] === 'number'){
        carto_props['marker-opacity'] += "*[value]";
      }
    }

    simple_polygon_generator(table, carto_props, changed, function(css) {
      // add trails
      for (var i = 1; i <= props['torque-trails']; ++i) {
       var trail = "\n#" + table.getUnqualifiedName() + "[frame-offset=" + i  +"] {\n marker-width:" + (props['marker-width'] + 2*i) + ";\n marker-fill-opacity:" + (props['marker-opacity']/(2*i)) +"; \n}";
       css += trail;
      }
      callback(torque_props + "\n\n" + css);
    });
  }

};