series_overrides_ctrl.ts 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. import _ from 'lodash';
  2. import angular from 'angular';
  3. export class SeriesOverridesCtrl {
  4. /** @ngInject */
  5. constructor($scope, $element, popoverSrv) {
  6. $scope.overrideMenu = [];
  7. $scope.currentOverrides = [];
  8. $scope.override = $scope.override || {};
  9. $scope.addOverrideOption = function(name, propertyName, values) {
  10. var option = {
  11. text: name,
  12. propertyName: propertyName,
  13. index: $scope.overrideMenu.lenght,
  14. values: values,
  15. submenu: _.map(values, function(value) {
  16. return { text: String(value), value: value };
  17. })
  18. };
  19. $scope.overrideMenu.push(option);
  20. };
  21. $scope.setOverride = function(item, subItem) {
  22. // handle color overrides
  23. if (item.propertyName === 'color') {
  24. $scope.openColorSelector($scope.override['color']);
  25. return;
  26. }
  27. $scope.override[item.propertyName] = subItem.value;
  28. // automatically disable lines for this series and the fill bellow to series
  29. // can be removed by the user if they still want lines
  30. if (item.propertyName === 'fillBelowTo') {
  31. $scope.override['lines'] = false;
  32. $scope.ctrl.addSeriesOverride({alias: subItem.value, lines: false });
  33. }
  34. $scope.updateCurrentOverrides();
  35. $scope.ctrl.render();
  36. };
  37. $scope.colorSelected = function(color) {
  38. $scope.override['color'] = color;
  39. $scope.updateCurrentOverrides();
  40. $scope.ctrl.render();
  41. };
  42. $scope.openColorSelector = function(color) {
  43. var fakeSeries = {color: color};
  44. popoverSrv.show({
  45. element: $element.find(".dropdown")[0],
  46. position: 'top center',
  47. openOn: 'click',
  48. template: '<series-color-picker series="series" onColorChange="colorSelected" />',
  49. model: {
  50. autoClose: true,
  51. colorSelected: $scope.colorSelected,
  52. series: fakeSeries
  53. },
  54. onClose: function() {
  55. $scope.ctrl.render();
  56. }
  57. });
  58. };
  59. $scope.removeOverride = function(option) {
  60. delete $scope.override[option.propertyName];
  61. $scope.updateCurrentOverrides();
  62. $scope.ctrl.refresh();
  63. };
  64. $scope.getSeriesNames = function() {
  65. return _.map($scope.ctrl.seriesList, function(series) {
  66. return series.alias;
  67. });
  68. };
  69. $scope.updateCurrentOverrides = function() {
  70. $scope.currentOverrides = [];
  71. _.each($scope.overrideMenu, function(option) {
  72. var value = $scope.override[option.propertyName];
  73. if (_.isUndefined(value)) { return; }
  74. $scope.currentOverrides.push({
  75. name: option.text,
  76. propertyName: option.propertyName,
  77. value: String(value)
  78. });
  79. });
  80. };
  81. $scope.addOverrideOption('Bars', 'bars', [true, false]);
  82. $scope.addOverrideOption('Lines', 'lines', [true, false]);
  83. $scope.addOverrideOption('Line fill', 'fill', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
  84. $scope.addOverrideOption('Line width', 'linewidth', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
  85. $scope.addOverrideOption('Null point mode', 'nullPointMode', ['connected', 'null', 'null as zero']);
  86. $scope.addOverrideOption('Fill below to', 'fillBelowTo', $scope.getSeriesNames());
  87. $scope.addOverrideOption('Staircase line', 'steppedLine', [true, false]);
  88. $scope.addOverrideOption('Dashes', 'dashes', [true, false]);
  89. $scope.addOverrideOption('Dash Length', 'dashLength', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]);
  90. $scope.addOverrideOption('Dash Space', 'spaceLength', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]);
  91. $scope.addOverrideOption('Points', 'points', [true, false]);
  92. $scope.addOverrideOption('Points Radius', 'pointradius', [1, 2, 3, 4, 5]);
  93. $scope.addOverrideOption('Stack', 'stack', [true, false, 'A', 'B', 'C', 'D']);
  94. $scope.addOverrideOption('Color', 'color', ['change']);
  95. $scope.addOverrideOption('Y-axis', 'yaxis', [1, 2]);
  96. $scope.addOverrideOption('Z-index', 'zindex', [-3, -2, -1, 0, 1, 2, 3]);
  97. $scope.addOverrideOption('Transform', 'transform', ['negative-Y']);
  98. $scope.addOverrideOption('Legend', 'legend', [true, false]);
  99. $scope.updateCurrentOverrides();
  100. }
  101. }
  102. angular.module('grafana.controllers').controller('SeriesOverridesCtrl', SeriesOverridesCtrl);