Changed tweets, added eca

This commit is contained in:
2022-10-25 12:15:41 +02:00
parent 7597d7648a
commit 9860bee497
71 changed files with 7476 additions and 2036 deletions

View File

@@ -0,0 +1,368 @@
(function($, block) {
// a simple rolling chart with memory
block.fn.rolling_chart = function(config) {
// combine default configuration with user configuration
var options = $.extend({
memory: 100,
// required!!
series: {
'default': {data: []}
},
// flot initialization options
options: {
xaxis: {
show: false
}
}
}, config);
// maintain state for this block
var data = {};
for(var k in options.series) {
data[k] = (options.series[k].data || []).slice();
}
// function to project our state to something the library understands
var prepare_data = function() {
var result = [];
// process each series
for(var k in data) {
var series = data[k];
var points = [];
// create point pairs and gap values
for(var i in series) {
if(series[i] == null) {
points.push(null);
} else {
points.push([i, series[i]]);
}
}
// combine state data with series configuration by user
result.push($.extend(options.series[k], {data: points}));
}
return result;
};
// initial setup of library state (also builds necessary HTML)
var plot = $.plot(this.$element, prepare_data(), options.options);
// register actions for this block
this.actions({
'add': function(e, message) {
// if the 'value' field is used, update all series (useful with a single series)
if(typeof message.values == 'undefined' && typeof message.value != 'undefined') {
message.values = {}
for(var k in options.series) {
message.values[k] = message.value;
}
}
// update all series
for(var k in options.series) {
// roll memory
if(data[k].length > options.memory) {
data[k] = data[k].slice(1);
}
// insert value or gap (in case of null)
data[k].push(message.values[k]);
}
// update HTML
plot.setData(prepare_data());
plot.setupGrid();
plot.draw();
}
});
// return element to allow further work
return this.$element;
}
//
//
//
// a simple linechart example
block.fn.linechart = function(config) {
var options = $.extend({
// required
series : {default:{}},
// flot initialization options
options : {}
}, config);
// create empty linechart with parameter options
var plot = $.plot(this.$element, [],options.options);
// dict containing the labels and values
var linedata_series = {};
var linedata_first;
var initline = function(series) {
linedata_first = undefined;
for(var k in series) {
var si = series[k];
si.data = [];
linedata_series[k] = si;
if ( linedata_first == undefined )
linedata_first = si;
}
}
initline(options.series);
var addline = function(label, values) {
var data;
if (linedata_series.hasOwnProperty(label))
data = linedata_series[label].data;
else
data = linedata_first.data;
for(var v in values) {
data.push(values[v]);
}
redraw();
}
var setline = function(label, values) {
if (linedata_series.hasOwnProperty(label))
linedata_series[label].data = values;
else
linedata_first.data = values;
redraw();
}
var redraw = function() {
var result = [];
for(var k in linedata_series) {
if (linedata_series.hasOwnProperty(k)) {
var line_serie = linedata_series[k];
result.push({label:k,data:line_serie.data});
}
}
plot.setData(result);
plot.setupGrid();
plot.draw();
}
var reset = function() {
initline(options.series);
}
this.actions({
'set': function(e, message) {
setline(message.series, message.value);
},
'add': function(e, message) {
addline(message.series, message.value);
},
'reset': function(e, message) {
reset();
}
});
// return element to allow further work
return this.$element;
}
//
//
//
// a simple barchart example
block.fn.barchart = function(config) {
var options = $.extend({
filter_function : function(category,val,max) { return true; },
// required
series : { "default":{
data: {},
label: "default",
bars: {
show: true,
barWidth: 0.2,
align: "left"
}
} },
// flot initialization options
options: { xaxis: {
mode: "categories",
tickLength: 0
}}
}, config);
var bardata_series = options.series;
var bardata_first;
for (bardata_first in bardata_series) break;
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;
var max = 0;
for(var l in data) {
if (data.hasOwnProperty(l)) {
max = Math.max(max, data[l]);
}
}
for(var l in data) {
if (data.hasOwnProperty(l)) {
if ( options.filter_function(l,data[l],max) )
newdata.push([l,data[l]]);
}
}
newserie.data = newdata;
result.push(newserie);
}
}
return result;
}
var plot = $.plot(this.$element, translate_bar(), options.options);
var addbar = function(serie_label, category, value) {
var data;
if ( serie_label == undefined )
data = bardata_series[bardata_first].data;
else
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;
if ( serie_label == undefined )
data = bardata_series[bardata_first].data;
else
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;
}
//
//
//
// a simple piechart example
block.fn.piechart = function(config) {
var options = $.extend({
// see: http://www.flotcharts.org/flot/examples/series-pie/
filter_function : function(category,val,max) { return true; },
options : {
series: {
pie: {
show: true
}
},
// demo crashes with this option
// legend: { show: false }
}}, config);
// create empty piechart with parameter options
var plot = $.plot(this.$element, [],options.options);
// dict containing the labels and values
var piedata_dict = {};
var addpie = function(label, value) {
if (piedata_dict.hasOwnProperty(label))
piedata_dict[label] = (piedata_dict[label] + value);
else
piedata_dict[label] = value;
redraw();
}
var setpie = function(label, value) {
piedata_dict[label] = value;
redraw();
}
var redraw = function() {
var result = [];
var max = 0;
for(var k in piedata_dict) {
if (piedata_dict.hasOwnProperty(k)) {
max = Math.max(max, piedata_dict[k]);
}
}
for(var k in piedata_dict) {
if (piedata_dict.hasOwnProperty(k)) {
if ( options.filter_function(k,piedata_dict[k],max) )
result.push({label:k,data:piedata_dict[k]});
}
}
plot.setData(result);
plot.setupGrid();
plot.draw();
}
var reset = function() {
piedata_dict = {};
}
this.actions({
'set': function(e, message) {
setpie(message.value[0],message.value[1]);
},
'add': function(e, message) {
addpie(message.value[0],message.value[1]);
},
'reset': function(e, message) {
reset();
}
});
// return element to allow further work
return this.$element;
}
})(jQuery, block);