series_overrides_ctrl.ts 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  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:
  49. '<series-color-picker series="series" onColorChange="colorSelected" />',
  50. model: {
  51. autoClose: true,
  52. colorSelected: $scope.colorSelected,
  53. series: fakeSeries
  54. },
  55. onClose: function() {
  56. $scope.ctrl.render();
  57. }
  58. });
  59. };
  60. $scope.removeOverride = function(option) {
  61. delete $scope.override[option.propertyName];
  62. $scope.updateCurrentOverrides();
  63. $scope.ctrl.refresh();
  64. };
  65. $scope.getSeriesNames = function() {
  66. return _.map($scope.ctrl.seriesList, function(series) {
  67. return series.alias;
  68. });
  69. };
  70. $scope.updateCurrentOverrides = function() {
  71. $scope.currentOverrides = [];
  72. _.each($scope.overrideMenu, function(option) {
  73. var value = $scope.override[option.propertyName];
  74. if (_.isUndefined(value)) {
  75. return;
  76. }
  77. $scope.currentOverrides.push({
  78. name: option.text,
  79. propertyName: option.propertyName,
  80. value: String(value)
  81. });
  82. });
  83. };
  84. $scope.addOverrideOption("Bars", "bars", [true, false]);
  85. $scope.addOverrideOption("Lines", "lines", [true, false]);
  86. $scope.addOverrideOption("Line fill", "fill", [
  87. 0,
  88. 1,
  89. 2,
  90. 3,
  91. 4,
  92. 5,
  93. 6,
  94. 7,
  95. 8,
  96. 9,
  97. 10
  98. ]);
  99. $scope.addOverrideOption("Line width", "linewidth", [
  100. 0,
  101. 1,
  102. 2,
  103. 3,
  104. 4,
  105. 5,
  106. 6,
  107. 7,
  108. 8,
  109. 9,
  110. 10
  111. ]);
  112. $scope.addOverrideOption("Null point mode", "nullPointMode", [
  113. "connected",
  114. "null",
  115. "null as zero"
  116. ]);
  117. $scope.addOverrideOption(
  118. "Fill below to",
  119. "fillBelowTo",
  120. $scope.getSeriesNames()
  121. );
  122. $scope.addOverrideOption("Staircase line", "steppedLine", [true, false]);
  123. $scope.addOverrideOption("Dashes", "dashes", [true, false]);
  124. $scope.addOverrideOption("Dash Length", "dashLength", [
  125. 1,
  126. 2,
  127. 3,
  128. 4,
  129. 5,
  130. 6,
  131. 7,
  132. 8,
  133. 9,
  134. 10,
  135. 11,
  136. 12,
  137. 13,
  138. 14,
  139. 15,
  140. 16,
  141. 17,
  142. 18,
  143. 19,
  144. 20
  145. ]);
  146. $scope.addOverrideOption("Dash Space", "spaceLength", [
  147. 1,
  148. 2,
  149. 3,
  150. 4,
  151. 5,
  152. 6,
  153. 7,
  154. 8,
  155. 9,
  156. 10,
  157. 11,
  158. 12,
  159. 13,
  160. 14,
  161. 15,
  162. 16,
  163. 17,
  164. 18,
  165. 19,
  166. 20
  167. ]);
  168. $scope.addOverrideOption("Points", "points", [true, false]);
  169. $scope.addOverrideOption("Points Radius", "pointradius", [1, 2, 3, 4, 5]);
  170. $scope.addOverrideOption("Stack", "stack", [
  171. true,
  172. false,
  173. "A",
  174. "B",
  175. "C",
  176. "D"
  177. ]);
  178. $scope.addOverrideOption("Color", "color", ["change"]);
  179. $scope.addOverrideOption("Y-axis", "yaxis", [1, 2]);
  180. $scope.addOverrideOption("Z-index", "zindex", [-3, -2, -1, 0, 1, 2, 3]);
  181. $scope.addOverrideOption("Transform", "transform", ["negative-Y"]);
  182. $scope.addOverrideOption("Legend", "legend", [true, false]);
  183. $scope.updateCurrentOverrides();
  184. }
  185. }
  186. angular
  187. .module("grafana.controllers")
  188. .controller("SeriesOverridesCtrl", SeriesOverridesCtrl);