Files

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