Graph.prototype.makeSeries = function()

in kitsune/sumo/static/sumo/js/rickshaw_utils.js [231:324]


  Graph.prototype.makeSeries = function (objects, descriptors) {
    var i;
    var series = [];
    var desc;
    var min, max, data;
    var windowMin, windowMax;
    var stroke, fill;
    var r, g, b;
    var palette = new Rickshaw.Color.Palette();

    if (this.rickshaw.graph) {
      windowMin = this.rickshaw.graph.window.xMin || -Infinity;
      windowMax = this.rickshaw.graph.window.xMax || +Infinity;
    } else {
      windowMin = -Infinity;
      windowMax = +Infinity;
    }

    function mapHandler(datum) {
      var val = desc.func(datum);

      if (isNaN(val) ) {
        val = 0;
      }

      if (windowMin <= datum.date && datum.date <= windowMax) {
        min = Math.min(min, val);
        max = Math.max(max, val);
      }

      return {x: datum.date, y: val};
    }

    function yFormatter(value) {
      return Math.floor(value * 100) + '%';
    }

    for (i = 0; i < descriptors.length; i += 1) {
      min = Infinity;
      max = -Infinity;
      desc = descriptors[i];

      data = _map(objects, mapHandler);

      if (max <= 0 || isNaN(max) || !isFinite(max)) {
        max = 1;
      }

      if (this.graph.renderer === 'area') {
        stroke = desc.color || palette.color(desc.name);
        if (desc.area) {
          r = parseInt(desc.color.slice(1, 3), 16);
          g = parseInt(desc.color.slice(3, 5), 16);
          b = parseInt(desc.color.slice(5, 7), 16);
          fill = interpolate('rgba(%s,%s,%s,0.5)', [r, g, b]);
        } else {
          fill = 'rgba(0, 0, 0, 0.0)';
        }
      } else {
        // This is a bar graph. 'fill' is really color.
        stroke = undefined;
        fill = desc.color;
      }

      series[i] = {
        name: desc.name,
        slug: desc.slug,
        disabled: desc.disabled || false,
        type: desc.type || 'value',

        stroke: stroke,
        color: fill,
        axisGroup: desc.axisGroup,
        min: min,
        max: max,
        data: data
      };

      if (series[i].type === 'percent') {
        series[i].yFormatter = yFormatter;
      }
    }

    // Rickshaw gets angry when its data isn't sorted.
    function sortCallback (v1, v2) {
      return v1.x - v2.x;
    }

    for (i = 0; i < descriptors.length; i += 1) {
      series[i].data.sort(sortCallback);
    }

    return series;
  };