From 0b966b7a287a1b954775b984d0cc560b5d9e0eb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Wed, 12 Nov 2014 10:11:01 +0100 Subject: [PATCH] Graph: legend sorting while in table mode implemented, panel persisted property, Closes #1030 --- src/app/directives/grafanaGraph.js | 2 +- src/app/panels/graph/legend.js | 56 ++++++++++++++++++++++++------ 2 files changed, 46 insertions(+), 12 deletions(-) diff --git a/src/app/directives/grafanaGraph.js b/src/app/directives/grafanaGraph.js index 66902f5ee24..fd58473a1d5 100755 --- a/src/app/directives/grafanaGraph.js +++ b/src/app/directives/grafanaGraph.js @@ -106,7 +106,7 @@ function (angular, $, kbn, moment, _, GraphTooltip) { var series = data[i]; var axis = yaxis[series.yaxis - 1]; var formater = kbn.valueFormats[scope.panel.y_formats[series.yaxis - 1]]; - series.updateLegendValues(formater, axis.tickDecimals, axis.scaledDecimals+ 2); + series.updateLegendValues(formater, axis.tickDecimals, axis.scaledDecimals + 2); if(!scope.$$phase) { scope.$digest(); } } } diff --git a/src/app/panels/graph/legend.js b/src/app/panels/graph/legend.js index 9944ef7ee5b..65a82760bf2 100644 --- a/src/app/panels/graph/legend.js +++ b/src/app/panels/graph/legend.js @@ -20,6 +20,7 @@ function (angular, app, _, kbn, $) { var firstRender = true; var panel = scope.panel; var data; + var seriesList; var i; scope.$on('render', function() { @@ -36,7 +37,7 @@ function (angular, app, _, kbn, $) { function openColorSelector(e) { var el = $(e.currentTarget); var index = getSeriesIndexForElement(el); - var seriesInfo = data[index]; + var seriesInfo = seriesList[index]; var popoverScope = scope.$new(); popoverScope.series = seriesInfo; popoverSrv.show({ @@ -49,12 +50,35 @@ function (angular, app, _, kbn, $) { function toggleSeries(e) { var el = $(e.currentTarget); var index = getSeriesIndexForElement(el); - var seriesInfo = data[index]; + var seriesInfo = seriesList[index]; scope.toggleSeries(seriesInfo, e); } function sortLegend(e) { + var el = $(e.currentTarget); + if (panel.legend.sortDesc === false) { + panel.legend.sort = null; + panel.legend.sortDesc = null; + render(); + return; + } + + panel.legend.sortDesc = !panel.legend.sortDesc; + panel.legend.sort = el.data('stat'); + render(); + } + + function getTableHeaderHtml(statName) { + if (!panel.legend[statName]) { return ""; } + var html = '' + statName; + + if (panel.legend.sort === statName) { + var cssClass = panel.legend.sortDesc ? 'icon-caret-down' : 'icon-caret-up' ; + html += ' '; + } + + return html + ''; } function render() { @@ -66,27 +90,37 @@ function (angular, app, _, kbn, $) { firstRender = false; } + seriesList = data; + $container.empty(); $container.toggleClass('graph-legend-table', panel.legend.alignAsTable === true); if (panel.legend.alignAsTable) { var header = ''; - header += ''; - header += ''; + header += ''; if (panel.legend.values) { - if (panel.legend.min) { header += 'min'; } - if (panel.legend.max) { header += 'max'; } - if (panel.legend.avg) { header += 'avg'; } - if (panel.legend.current) { header += 'current'; } - if (panel.legend.total) { header += 'total'; } + header += getTableHeaderHtml('min'); + header += getTableHeaderHtml('max'); + header += getTableHeaderHtml('avg'); + header += getTableHeaderHtml('current'); + header += getTableHeaderHtml('total'); } header += ''; $container.append($(header)); } - for (i = 0; i < data.length; i++) { - var series = data[i]; + if (panel.legend.sort) { + seriesList = _.sortBy(seriesList, function(series) { + return series.stats[panel.legend.sort]; + }); + if (panel.legend.sortDesc) { + seriesList = seriesList.reverse(); + } + } + + for (i = 0; i < seriesList.length; i++) { + var series = seriesList[i]; var html = '