109 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| (function($, block) {
 | |
| 
 | |
| // a simple barchart example
 | |
| block.fn.barchart = function(config) {
 | |
|     var options = $.extend({
 | |
|     	series : { "serie1":{
 | |
|         	data: {"January": 10, "February": 8, "March": 4, "April": 13, "May": 20, "June": 9},
 | |
|         	label: "serie 1",
 | |
|         	bars: {
 | |
|                 	show: true,
 | |
|                 	barWidth: 0.2,
 | |
|                 	align: "left"
 | |
|             	}
 | |
|        	 
 | |
|     	},  "serie2":{
 | |
|         	data: {"January": 10, "February": 8, "March": 4, "April": 13, "May": 20, "June": 9},
 | |
|         	label: "series 2",
 | |
|         	bars: {
 | |
|                 	show: true,
 | |
|                 	barWidth: 0.2,
 | |
|                 	align: "center"
 | |
|             	}
 | |
|     	},  "serie3":{
 | |
|         	data: {"January": 10, "February": 8, "March": 4, "April": 13, "May": 20, "June": 9},
 | |
|         	label: "series 3",
 | |
|         	bars: {
 | |
|                 	show: true,
 | |
|                 	barWidth: 0.2,
 | |
|                 	align: "right"
 | |
|             	}
 | |
|     	}}
 | |
|     }, config);
 | |
| 
 | |
|     var bar_init = {
 | |
|             xaxis: {
 | |
|                 mode: "categories",
 | |
|                 tickLength: 0
 | |
|             }
 | |
| 	}
 | |
| 
 | |
|     var bardata_series = options.series;
 | |
| 
 | |
|     var translate_bar = function() {
 | |
|         var result = [];
 | |
| 	for(var k in bardata_series) {
 | |
| 	    if (bardata_series.hasOwnProperty(k)) {
 | |
| 		var newserie = jQuery.extend({}, bardata_series[k]);
 | |
|         	var newdata = [];
 | |
| 		var data = newserie.data;
 | |
| 		for(var l in data) {
 | |
| 	    	    if (data.hasOwnProperty(l)) {
 | |
| 			newdata.push([l,data[l]]);
 | |
| 		    }
 | |
| 		}
 | |
| 		newserie.data = newdata;
 | |
| 		result.push(newserie);
 | |
| 	    }
 | |
| 	}
 | |
| 	return result;
 | |
|     }
 | |
| 
 | |
|     var plot = $.plot(this.$element, translate_bar(), bar_init);
 | |
| 
 | |
|     var addbar = function(serie_label, category, value) {
 | |
| 	var data = bardata_series[serie_label].data;
 | |
| 	if (data.hasOwnProperty(category))
 | |
| 		data[category] = (data[category] + value);
 | |
| 	else
 | |
| 		data[category] = value;
 | |
| 	redraw();
 | |
|     }
 | |
| 
 | |
|     var setbar = function(serie_label, category, value) {
 | |
| 	var data = bardata_series[serie_label].data;
 | |
| 	data[category] = value;
 | |
| 	redraw();
 | |
|     }
 | |
| 
 | |
|     var redraw = function() {
 | |
|         plot.setData(translate_bar());
 | |
| 	plot.setupGrid();
 | |
|         plot.draw();
 | |
|     }
 | |
| 
 | |
|     var reset = function() {
 | |
| 	for(var k in bardata_series) {
 | |
| 	    if (bardata_series.hasOwnProperty(k)) {
 | |
| 		bardata_series[k].data = {};
 | |
| 	    }
 | |
| 	}
 | |
|     }
 | |
| 
 | |
|     this.actions({
 | |
|         'set': function(e, message) {
 | |
| 		setbar(message.series,message.value[0],message.value[1]);
 | |
|         },
 | |
|         'add': function(e, message) {
 | |
| 		addbar(message.series,message.value[0],message.value[1]);
 | |
|         },
 | |
|         'reset': function(e, message) {
 | |
| 		reset();
 | |
| 	}
 | |
|     });
 | |
|     // return element to allow further work
 | |
|     return this.$element;
 | |
| }
 | |
| 
 | |
| })(jQuery, block);
 |