web/app/assets/javascripts/bar_charts.js
author Marcel Hlopko <marcel.hlopko@gmail.com>
Mon, 19 Aug 2013 23:51:06 +0200
changeset 164 120a4f1e25c0
parent 160 2eda5cea5831
child 177 8e7f0029550d
permissions -rw-r--r--
introduce tags

$(function() {
	function gatherData($graph, palette) {
		var data = [];
		$graph.find(".chart-bar-values").each(function(idx, barValues) {
			data.push({
				color: palette.color(),
				name: $(barValues).data("name"),
				data: $(barValues).find(".chart-bar-value").map(function(idx, barValue) {
					return {
						x: parseInt($(barValue).data("index")),
						y: parseInt($(barValue).data("value"))
					};
				}).toArray()
			})
		});
		return data;
	}

	function indexToLabel(graph, index) {

		if ((index + 0.5) % 1 === 0) {
			return $(graph).find(".chart-bar-labels[data-index=" + Math.floor(index) + "]").data("name");
		} else {
			return "";
		}
	}

	$(".chart-bar").each(function(idx, element) {
		var palette = new Rickshaw.Color.Palette( { scheme: "spectrum14" } );

		var graph = new Rickshaw.Graph({
			element: $(element).find(".chart")[0],
			renderer: 'bar',
			series: gatherData($(element), palette)
		});

		var y_axis = new Rickshaw.Graph.Axis.Y({
			graph: graph,
			orientation: 'left',
			element: $(element).find(".chart-y-axis")[0],
		});
		y_axis.render();

		var x_axis = new Rickshaw.Graph.Axis.X({
			graph: graph,
			orientation: 'bottom',
			tickFormat: function(idx) {
				return indexToLabel(element, idx);
			},
			element: $(element).find(".chart-x-axis")[0],
		});
		x_axis.render();

		var legend = new Rickshaw.Graph.Legend({
			graph: graph,
			element: $(element).find(".legend")[0]
		});

		var highlighter = new Rickshaw.Graph.Behavior.Series.Highlight({
			graph: graph,
			legend: legend
		});

		var hoverDetail = new Rickshaw.Graph.HoverDetail( {
			graph: graph,
			xFormatter: function(x) { return ""; },
			formatter: function(series, x, y) { 
				return y + " [ms]<br/>" + series.name;
			},
		} );

		graph.renderer.unstack = true;
		graph.render();
	});
});