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;
};