aboutsummaryrefslogtreecommitdiffstats
path: root/tipboard/tiles/line_chart.js
diff options
context:
space:
mode:
Diffstat (limited to 'tipboard/tiles/line_chart.js')
-rw-r--r--tipboard/tiles/line_chart.js66
1 files changed, 66 insertions, 0 deletions
diff --git a/tipboard/tiles/line_chart.js b/tipboard/tiles/line_chart.js
index 0d91fbe..b4a023c 100644
--- a/tipboard/tiles/line_chart.js
+++ b/tipboard/tiles/line_chart.js
@@ -1,6 +1,69 @@
/*jslint browser: true, devel: true*/
/*global WebSocket: false, Tipboard: false*/
+function simplifyLineData(series_data, user_config) {
+ var config = {
+ tolerancy: 10,
+ data_points_limit: 50, // we will TRY to achieve lower number of data points than this
+ max_simplifying_steps: 5,
+ simplify_step_multiplicator: 1.5
+ };
+
+ $.extend(config, user_config);
+
+ var simplify_data = new Array();
+ var return_data = new Array();
+
+ for(var series = 0; series < series_data.length; series++) {
+ simplify_data[series] = new Array();
+ return_data[series] = new Array();
+
+ // converting data to format acceptable by simplify.js library
+ if(typeof series_data[series][0] === typeof []) {
+ for(var tick = 0; tick < series_data[series].length; tick++) {
+ simplify_data[series].push({
+ x: tick,
+ y: series_data[series][tick][1],
+ key: series_data[series][tick][0]
+ });
+ }
+ } else {
+ for(var tick = 0; tick < series_data[series].length; tick++) {
+ simplify_data[series].push({
+ x: tick,
+ y: series_data[series][tick],
+ key: null
+ });
+ }
+ }
+
+ var current_tolerance = config.tolerancy;
+ for(var i = 0; i < config.max_simplifying_steps; i++) {
+ simplify_data[series] = simplify(simplify_data[series], current_tolerance);
+ if(simplify_data[series].length < config.data_points_limit) break;
+ current_tolerance = Math.floor(current_tolerance * config.simplify_step_multiplicator);
+ }
+
+ // prepare in data format understandable by jqplot
+ for(var tick = 0; tick < simplify_data[series].length; tick++) {
+ if(simplify_data[series][tick].key != null)
+ return_data[series][tick] = [
+ simplify_data[series][tick].key,
+ simplify_data[series][tick].y
+ ];
+ else
+ return_data[series][simplify_data[series][tick].x] = simplify_data[series][tick].y;
+ }
+
+ // fill all created gaps with null for jqplot
+ for(var i = 0; i < return_data[series].length; i++) {
+ if(!return_data[series][i])
+ return_data[series][i] = null;
+ }
+ }
+
+ return return_data;
+}
function updateTileLine(tileId, data, meta, tipboard) {
var tile = Tipboard.Dashboard.id2node(tileId);
@@ -21,6 +84,9 @@ function updateTileLine(tileId, data, meta, tipboard) {
// TODO use Tipboard.Dashboard.buildChart
Tipboard.DisplayUtils.expandLastChild(tile);
Tipboard.DisplayUtils.expandLastChild($(tile).find('.tile-content')[0]);
+
+ if(config.simplify) data.series_list = simplifyLineData(data.series_list, config.simplify);
+
Tipboard.Dashboard.chartsIds[tileId] = $.jqplot(
tileId + '-chart', data.series_list, config
);