thalassa-aqueduct
Version:
Dynamic haproxy load balancer and configuration. Part of Thalassa
81 lines (53 loc) • 1.92 kB
JavaScript
Rickshaw.namespace('Rickshaw.Graph.Behavior.Series.Highlight');
Rickshaw.Graph.Behavior.Series.Highlight = function(args) {
this.graph = args.graph;
this.legend = args.legend;
var self = this;
var colorSafe = {};
var activeLine = null;
var disabledColor = args.disabledColor || function(seriesColor) {
return d3.interpolateRgb(seriesColor, d3.rgb('#d8d8d8'))(0.8).toString();
};
this.addHighlightEvents = function (l) {
l.element.addEventListener( 'mouseover', function(e) {
if (activeLine) return;
else activeLine = l;
self.legend.lines.forEach( function(line, index) {
if (l === line) {
// if we're not in a stacked renderer bring active line to the top
if (index > 0 && self.graph.renderer.unstack && (line.series.renderer ? line.series.renderer.unstack : true)) {
var seriesIndex = self.graph.series.length - index - 1;
line.originalIndex = seriesIndex;
var series = self.graph.series.splice(seriesIndex, 1)[0];
self.graph.series.push(series);
}
return;
}
colorSafe[line.series.name] = colorSafe[line.series.name] || line.series.color;
line.series.color = disabledColor(line.series.color);
} );
self.graph.update();
}, false );
l.element.addEventListener( 'mouseout', function(e) {
if (!activeLine) return;
else activeLine = null;
self.legend.lines.forEach( function(line) {
// return reordered series to its original place
if (l === line && line.hasOwnProperty('originalIndex')) {
var series = self.graph.series.pop();
self.graph.series.splice(line.originalIndex, 0, series);
delete line.originalIndex;
}
if (colorSafe[line.series.name]) {
line.series.color = colorSafe[line.series.name];
}
} );
self.graph.update();
}, false );
};
if (this.legend) {
this.legend.lines.forEach( function(l) {
self.addHighlightEvents(l);
} );
}
};