diff --git a/public/app/plugins/panel/graph/legend.js b/public/app/plugins/panel/graph/legend.js deleted file mode 100644 index e90222672d9..00000000000 --- a/public/app/plugins/panel/graph/legend.js +++ /dev/null @@ -1,223 +0,0 @@ -define([ - 'angular', - 'lodash', - 'jquery', - 'perfect-scrollbar' -], -function (angular, _, $, PerfectScrollbar) { - 'use strict'; - - var module = angular.module('grafana.directives'); - - module.directive('graphLegend', function(popoverSrv, $timeout) { - - return { - link: function(scope, elem) { - var $container = $('
'); - var firstRender = true; - var ctrl = scope.ctrl; - var panel = ctrl.panel; - var data; - var seriesList; - var i; - var legendScrollbar; - - ctrl.events.on('render', function() { - data = ctrl.seriesList; - if (data) { - render(); - } - }); - - function getSeriesIndexForElement(el) { - return el.parents('[data-series-index]').data('series-index'); - } - - function openColorSelector(e) { - // if we clicked inside poup container ignore click - if ($(e.target).parents('.popover').length) { - return; - } - - var el = $(e.currentTarget).find('.fa-minus'); - var index = getSeriesIndexForElement(el); - var series = seriesList[index]; - - $timeout(function() { - popoverSrv.show({ - element: el[0], - position: 'bottom center', - template: '' + - '', - openOn: 'hover', - model: { - series: series, - toggleAxis: function() { - ctrl.toggleAxis(series); - }, - colorSelected: function(color) { - ctrl.changeSeriesColor(series, color); - } - }, - }); - }); - } - - function toggleSeries(e) { - var el = $(e.currentTarget); - var index = getSeriesIndexForElement(el); - var seriesInfo = seriesList[index]; - var scrollPosition = $($container.children('tbody')).scrollTop(); - ctrl.toggleSeries(seriesInfo, e); - $($container.children('tbody')).scrollTop(scrollPosition); - } - - function sortLegend(e) { - var el = $(e.currentTarget); - var stat = el.data('stat'); - - if (stat !== panel.legend.sort) { panel.legend.sortDesc = null; } - - // if already sort ascending, disable sorting - if (panel.legend.sortDesc === false) { - panel.legend.sort = null; - panel.legend.sortDesc = null; - ctrl.render(); - return; - } - - panel.legend.sortDesc = !panel.legend.sortDesc; - panel.legend.sort = stat; - ctrl.render(); - } - - function getTableHeaderHtml(statName) { - if (!panel.legend[statName]) { return ""; } - var html = '' + statName; - - if (panel.legend.sort === statName) { - var cssClass = panel.legend.sortDesc ? 'fa fa-caret-down' : 'fa fa-caret-up' ; - html += ' '; - } - - return html + ''; - } - - function render() { - if (!ctrl.panel.legend.show) { - elem.empty(); - firstRender = true; - return; - } - - if (firstRender) { - elem.append($container); - $container.on('click', '.graph-legend-icon', openColorSelector); - $container.on('click', '.graph-legend-alias', toggleSeries); - $container.on('click', 'th', sortLegend); - firstRender = false; - } - - seriesList = data; - - $container.empty(); - - // Set min-width if side style and there is a value, otherwise remove the CSS propery - var width = panel.legend.rightSide && panel.legend.sideWidth ? panel.legend.sideWidth + "px" : ""; - $container.css("min-width", width); - - $container.toggleClass('graph-legend-table', panel.legend.alignAsTable === true); - - var tableHeaderElem; - if (panel.legend.alignAsTable) { - var header = ''; - header += ''; - if (panel.legend.values) { - header += getTableHeaderHtml('min'); - header += getTableHeaderHtml('max'); - header += getTableHeaderHtml('avg'); - header += getTableHeaderHtml('current'); - header += getTableHeaderHtml('total'); - } - header += ''; - tableHeaderElem = $(header); - } - - if (panel.legend.sort) { - seriesList = _.sortBy(seriesList, function(series) { - return series.stats[panel.legend.sort]; - }); - if (panel.legend.sortDesc) { - seriesList = seriesList.reverse(); - } - } - - var seriesShown = 0; - var seriesElements = []; - - for (i = 0; i < seriesList.length; i++) { - var series = seriesList[i]; - - if (series.hideFromLegend(panel.legend)) { - continue; - } - - var html = '
'; - html += '
'; - html += ''; - html += '
'; - - html += '' + series.aliasEscaped + ''; - - if (panel.legend.values) { - var avg = series.formatValue(series.stats.avg); - var current = series.formatValue(series.stats.current); - var min = series.formatValue(series.stats.min); - var max = series.formatValue(series.stats.max); - var total = series.formatValue(series.stats.total); - - if (panel.legend.min) { html += '
' + min + '
'; } - if (panel.legend.max) { html += '
' + max + '
'; } - if (panel.legend.avg) { html += '
' + avg + '
'; } - if (panel.legend.current) { html += '
' + current + '
'; } - if (panel.legend.total) { html += '
' + total + '
'; } - } - - html += '
'; - seriesElements.push($(html)); - - seriesShown++; - } - - if (panel.legend.alignAsTable) { - var maxHeight = ctrl.height; - - if (!panel.legend.rightSide) { - maxHeight = maxHeight/2; - } - - var topPadding = 6; - var tbodyElem = $(''); - tbodyElem.css("max-height", maxHeight - topPadding); - tbodyElem.append(tableHeaderElem); - tbodyElem.append(seriesElements); - $container.append(tbodyElem); - } else { - var maxLegendHeight = ctrl.height / 2; - $container.css("max-height", maxLegendHeight - 6); - $container.append(seriesElements); - if (!legendScrollbar) { - legendScrollbar = new PerfectScrollbar.default($container[0]); - } - legendScrollbar.update(); - } - } - } - }; - }); - -}); diff --git a/public/app/plugins/panel/graph/legend.ts b/public/app/plugins/panel/graph/legend.ts new file mode 100644 index 00000000000..f9d5fecf993 --- /dev/null +++ b/public/app/plugins/panel/graph/legend.ts @@ -0,0 +1,214 @@ +import angular from 'angular'; +import _ from 'lodash'; +import $ from 'jquery'; +import PerfectScrollbar from 'perfect-scrollbar'; + +var module = angular.module('grafana.directives'); + +module.directive('graphLegend', function(popoverSrv, $timeout) { + + return { + link: function(scope, elem) { + var $container = $('
'); + var firstRender = true; + var ctrl = scope.ctrl; + var panel = ctrl.panel; + var data; + var seriesList; + var i; + var legendScrollbar; + + ctrl.events.on('render', function() { + data = ctrl.seriesList; + if (data) { + render(); + } + }); + + function getSeriesIndexForElement(el) { + return el.parents('[data-series-index]').data('series-index'); + } + + function openColorSelector(e) { + // if we clicked inside poup container ignore click + if ($(e.target).parents('.popover').length) { + return; + } + + var el = $(e.currentTarget).find('.fa-minus'); + var index = getSeriesIndexForElement(el); + var series = seriesList[index]; + + $timeout(function() { + popoverSrv.show({ + element: el[0], + position: 'bottom center', + template: '' + + '', + openOn: 'hover', + model: { + series: series, + toggleAxis: function() { + ctrl.toggleAxis(series); + }, + colorSelected: function(color) { + ctrl.changeSeriesColor(series, color); + } + }, + }); + }); + } + + function toggleSeries(e) { + var el = $(e.currentTarget); + var index = getSeriesIndexForElement(el); + var seriesInfo = seriesList[index]; + var scrollPosition = $($container.children('tbody')).scrollTop(); + ctrl.toggleSeries(seriesInfo, e); + $($container.children('tbody')).scrollTop(scrollPosition); + } + + function sortLegend(e) { + var el = $(e.currentTarget); + var stat = el.data('stat'); + + if (stat !== panel.legend.sort) { panel.legend.sortDesc = null; } + + // if already sort ascending, disable sorting + if (panel.legend.sortDesc === false) { + panel.legend.sort = null; + panel.legend.sortDesc = null; + ctrl.render(); + return; + } + + panel.legend.sortDesc = !panel.legend.sortDesc; + panel.legend.sort = stat; + ctrl.render(); + } + + function getTableHeaderHtml(statName) { + if (!panel.legend[statName]) { return ""; } + var html = '' + statName; + + if (panel.legend.sort === statName) { + var cssClass = panel.legend.sortDesc ? 'fa fa-caret-down' : 'fa fa-caret-up' ; + html += ' '; + } + + return html + ''; + } + + function render() { + if (!ctrl.panel.legend.show) { + elem.empty(); + firstRender = true; + return; + } + + if (firstRender) { + elem.append($container); + $container.on('click', '.graph-legend-icon', openColorSelector); + $container.on('click', '.graph-legend-alias', toggleSeries); + $container.on('click', 'th', sortLegend); + firstRender = false; + } + + seriesList = data; + + $container.empty(); + + // Set min-width if side style and there is a value, otherwise remove the CSS propery + var width = panel.legend.rightSide && panel.legend.sideWidth ? panel.legend.sideWidth + "px" : ""; + $container.css("min-width", width); + + $container.toggleClass('graph-legend-table', panel.legend.alignAsTable === true); + + var tableHeaderElem; + if (panel.legend.alignAsTable) { + var header = ''; + header += ''; + if (panel.legend.values) { + header += getTableHeaderHtml('min'); + header += getTableHeaderHtml('max'); + header += getTableHeaderHtml('avg'); + header += getTableHeaderHtml('current'); + header += getTableHeaderHtml('total'); + } + header += ''; + tableHeaderElem = $(header); + } + + if (panel.legend.sort) { + seriesList = _.sortBy(seriesList, function(series) { + return series.stats[panel.legend.sort]; + }); + if (panel.legend.sortDesc) { + seriesList = seriesList.reverse(); + } + } + + var seriesElements = []; + + for (i = 0; i < seriesList.length; i++) { + var series = seriesList[i]; + + if (series.hideFromLegend(panel.legend)) { + continue; + } + + var html = '
'; + html += '
'; + html += ''; + html += '
'; + + html += '' + series.aliasEscaped + ''; + + if (panel.legend.values) { + var avg = series.formatValue(series.stats.avg); + var current = series.formatValue(series.stats.current); + var min = series.formatValue(series.stats.min); + var max = series.formatValue(series.stats.max); + var total = series.formatValue(series.stats.total); + + if (panel.legend.min) { html += '
' + min + '
'; } + if (panel.legend.max) { html += '
' + max + '
'; } + if (panel.legend.avg) { html += '
' + avg + '
'; } + if (panel.legend.current) { html += '
' + current + '
'; } + if (panel.legend.total) { html += '
' + total + '
'; } + } + + html += '
'; + seriesElements.push($(html)); + } + + if (panel.legend.alignAsTable) { + var maxHeight = ctrl.height; + + if (!panel.legend.rightSide) { + maxHeight = maxHeight/2; + } + + var topPadding = 6; + var tbodyElem = $(''); + tbodyElem.css("max-height", maxHeight - topPadding); + tbodyElem.append(tableHeaderElem); + tbodyElem.append(seriesElements); + $container.append(tbodyElem); + } else { + var maxLegendHeight = ctrl.height / 2; + $container.css("max-height", maxLegendHeight - 6); + $container.append(seriesElements); + if (!legendScrollbar) { + legendScrollbar = new PerfectScrollbar($container[0]); + } + legendScrollbar.update(); + } + } + } + }; +});