seriesOverridesCtrl.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. define([
  2. 'angular',
  3. 'jquery',
  4. 'app/app',
  5. 'lodash',
  6. ], function(angular, jquery, app, _) {
  7. 'use strict';
  8. var module = angular.module('grafana.panels.graph', []);
  9. app.useModule(module);
  10. module.controller('SeriesOverridesCtrl', function($scope, $element, popoverSrv) {
  11. $scope.overrideMenu = [];
  12. $scope.currentOverrides = [];
  13. $scope.override = $scope.override || {};
  14. $scope.addOverrideOption = function(name, propertyName, values) {
  15. var option = {};
  16. option.text = name;
  17. option.propertyName = propertyName;
  18. option.index = $scope.overrideMenu.length;
  19. option.values = values;
  20. option.submenu = _.map(values, function(value) {
  21. return { text: String(value), value: value };
  22. });
  23. $scope.overrideMenu.push(option);
  24. };
  25. $scope.setOverride = function(item, subItem) {
  26. // handle color overrides
  27. if (item.propertyName === 'color') {
  28. $scope.openColorSelector();
  29. return;
  30. }
  31. $scope.override[item.propertyName] = subItem.value;
  32. // automatically disable lines for this series and the fill bellow to series
  33. // can be removed by the user if they still want lines
  34. if (item.propertyName === 'fillBelowTo') {
  35. $scope.override['lines'] = false;
  36. $scope.addSeriesOverride({ alias: subItem.value, lines: false });
  37. }
  38. $scope.updateCurrentOverrides();
  39. $scope.render();
  40. };
  41. $scope.colorSelected = function(color) {
  42. $scope.override['color'] = color;
  43. $scope.updateCurrentOverrides();
  44. $scope.render();
  45. };
  46. $scope.openColorSelector = function() {
  47. var popoverScope = $scope.$new();
  48. popoverScope.colorSelected = $scope.colorSelected;
  49. popoverSrv.show({
  50. element: $element.find(".dropdown"),
  51. placement: 'top',
  52. templateUrl: 'app/partials/colorpicker.html',
  53. scope: popoverScope
  54. });
  55. };
  56. $scope.removeOverride = function(option) {
  57. delete $scope.override[option.propertyName];
  58. $scope.updateCurrentOverrides();
  59. $scope.render();
  60. };
  61. $scope.getSeriesNames = function() {
  62. return _.map($scope.seriesList, function(series) {
  63. return series.alias;
  64. });
  65. };
  66. $scope.updateCurrentOverrides = function() {
  67. $scope.currentOverrides = [];
  68. _.each($scope.overrideMenu, function(option) {
  69. var value = $scope.override[option.propertyName];
  70. if (_.isUndefined(value)) { return; }
  71. $scope.currentOverrides.push({
  72. name: option.text,
  73. propertyName: option.propertyName,
  74. value: String(value)
  75. });
  76. });
  77. };
  78. $scope.addOverrideOption('Bars', 'bars', [true, false]);
  79. $scope.addOverrideOption('Lines', 'lines', [true, false]);
  80. $scope.addOverrideOption('Line fill', 'fill', [0,1,2,3,4,5,6,7,8,9,10]);
  81. $scope.addOverrideOption('Line width', 'linewidth', [0,1,2,3,4,5,6,7,8,9,10]);
  82. $scope.addOverrideOption('Null point mode', 'nullPointMode', ['connected', 'null', 'null as zero']);
  83. $scope.addOverrideOption('Fill below to', 'fillBelowTo', $scope.getSeriesNames());
  84. $scope.addOverrideOption('Staircase line', 'steppedLine', [true, false]);
  85. $scope.addOverrideOption('Points', 'points', [true, false]);
  86. $scope.addOverrideOption('Points Radius', 'pointradius', [1,2,3,4,5]);
  87. $scope.addOverrideOption('Stack', 'stack', [true, false, 'A', 'B', 'C', 'D']);
  88. $scope.addOverrideOption('Color', 'color', ['change']);
  89. $scope.addOverrideOption('Y-axis', 'yaxis', [1, 2]);
  90. $scope.addOverrideOption('Z-index', 'zindex', [-1,-2,-3,0,1,2,3]);
  91. $scope.addOverrideOption('Transform', 'transform', ['negative-Y']);
  92. $scope.addOverrideOption('Legend', 'legend', [true, false]);
  93. $scope.updateCurrentOverrides();
  94. });
  95. });