79 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| (function($, block) {
 | |
| 
 | |
| // a simple rolling chart with memory
 | |
| block.fn.rolling_chart = function(config) {
 | |
|     var options = $.extend({
 | |
|         memory: 100,
 | |
|         series: { serie : {label:"serie", color:'black'} }
 | |
|     }, config);
 | |
| 
 | |
|     var handle_data = function(values) {
 | |
|         var result = [];
 | |
| 
 | |
|         for(var i in values) {
 | |
|             result.push([i, values[i]]);
 | |
|         }
 | |
|         return result;
 | |
|     };
 | |
| 
 | |
|     var xo = { series: {
 | |
|             lines: { show: true },
 | |
|             points: {
 | |
|                 radius: 3,
 | |
|                 show: true,
 | |
|                 fill: true
 | |
|             }
 | |
|         }};
 | |
| 
 | |
|     var plot = $.plot(this.$element, [] , {});
 | |
| 
 | |
|     var reset = function() {
 | |
|         var result = options.series;
 | |
| 	for(var k in result) {
 | |
| 	    if (result.hasOwnProperty(k)) {
 | |
| 	        result[k].databuffer = [];
 | |
| 	    }
 | |
| 	}
 | |
| 	return result;
 | |
|     }
 | |
| 
 | |
|     var plot_series = reset();
 | |
| 
 | |
|     var add_to_serie = function(skey,value) {
 | |
| 	var databuffer = plot_series[skey].databuffer;
 | |
|         if(databuffer.length > options.memory) {
 | |
|             plot_series[skey].databuffer = databuffer.slice(1);
 | |
|         }
 | |
| 	databuffer.push(value);
 | |
|     }
 | |
| 
 | |
|     var redraw = function(serie_value) {
 | |
|     	    var plot_current = [];
 | |
| 	    var mykeys = Object.keys(plot_series);
 | |
| 	    for(var mykey in mykeys) {
 | |
| 		var skey = mykeys[mykey];
 | |
| 		var serie = plot_series[skey];
 | |
| 		// serie['databuffer'].push(serie_value[skey]);
 | |
| 		add_to_serie(skey,serie_value[skey]);
 | |
| 		serie['data'] = handle_data(serie['databuffer']);
 | |
| 		plot_current.push(serie);
 | |
| 	    }
 | |
|             plot.setData(plot_current);
 | |
|             plot.setupGrid();
 | |
|             plot.draw();
 | |
|         }
 | |
| 
 | |
|     this.actions({
 | |
|         'add': function(e, message) {
 | |
| 	    redraw(message.value);
 | |
|         },
 | |
|         'reset': function(e, message) {
 | |
| 	    plot_series = reset();
 | |
| 	}
 | |
|     });
 | |
|     // return element to allow further work
 | |
|     return this.$element;
 | |
| }
 | |
| 
 | |
| })(jQuery, block);
 |