Explorar o código

Fixed issue with using template variables in panel titles, and text panel, when selecting All option in variable

Torkel Ödegaard %!s(int64=11) %!d(string=hai) anos
pai
achega
4883b2a296
Modificáronse 4 ficheiros con 47 adicións e 15 borrados
  1. 1 1
      package.json
  2. 1 1
      src/app/filters/all.js
  3. 28 13
      src/app/services/templateSrv.js
  4. 17 0
      src/test/specs/templateSrv-specs.js

+ 1 - 1
package.json

@@ -4,7 +4,7 @@
     "company": "Coding Instinct AB"
   },
   "name": "grafana",
-  "version": "1.8.0",
+  "version": "1.8.0-rc1",
   "repository": {
     "type": "git",
     "url": "http://github.com/torkelo/grafana.git"

+ 1 - 1
src/app/filters/all.js

@@ -57,7 +57,7 @@ define(['angular', 'jquery', 'lodash', 'moment'], function (angular, $, _, momen
 
   module.filter('interpolateTemplateVars', function(templateSrv) {
     return function(text) {
-      return templateSrv.replace(text);
+      return templateSrv.replaceWithText(text);
     };
   });
 

+ 28 - 13
src/app/services/templateSrv.js

@@ -11,26 +11,25 @@ function (angular, _) {
     var self = this;
 
     this._regex = /\$(\w+)|\[\[([\s\S]+?)\]\]/g;
-    this._templateData = {};
+    this._values = {};
+    this._texts = {};
     this._grafanaVariables = {};
 
     this.init = function(variables) {
       this.variables = variables;
-      this.updateTemplateData(true);
+      this.updateTemplateData();
     };
 
     this.updateTemplateData = function() {
-      var data = {};
+      this._values = {};
+      this._texts = {};
 
       _.each(this.variables, function(variable) {
-        if (!variable.current || !variable.current.value) {
-          return;
-        }
-
-        data[variable.name] = variable.current.value;
-      });
+        if (!variable.current || !variable.current.value) { return; }
 
-      this._templateData = data;
+        this._values[variable.name] = variable.current.value;
+        this._texts[variable.name] = variable.current.text;
+      }, this);
     };
 
     this.setGrafanaVariable = function (name, value) {
@@ -40,7 +39,7 @@ function (angular, _) {
     this.variableExists = function(expression) {
       this._regex.lastIndex = 0;
       var match = this._regex.exec(expression);
-      return match && (self._templateData[match[1] || match[2]] !== void 0);
+      return match && (self._values[match[1] || match[2]] !== void 0);
     };
 
     this.containsVariable = function(str, variableName) {
@@ -52,7 +51,7 @@ function (angular, _) {
 
       this._regex.lastIndex = 0;
       return str.replace(this._regex, function(match, g1, g2) {
-        if (self._templateData[g1 || g2]) {
+        if (self._values[g1 || g2]) {
           return '<span class="template-variable">' + match + '</span>';
         }
         return match;
@@ -66,13 +65,29 @@ function (angular, _) {
       this._regex.lastIndex = 0;
 
       return target.replace(this._regex, function(match, g1, g2) {
-        value = self._templateData[g1 || g2];
+        value = self._values[g1 || g2];
         if (!value) { return match; }
 
         return self._grafanaVariables[value] || value;
       });
     };
 
+    this.replaceWithText = function(target) {
+      if (!target) { return; }
+
+      var value;
+      var text;
+      this._regex.lastIndex = 0;
+
+      return target.replace(this._regex, function(match, g1, g2) {
+        value = self._values[g1 || g2];
+        text = self._texts[g1 || g2];
+        if (!value) { return match; }
+
+        return self._grafanaVariables[value] || text;
+      });
+    };
+
   });
 
 });

+ 17 - 0
src/test/specs/templateSrv-specs.js

@@ -92,6 +92,23 @@ define([
       });
     });
 
+    describe('replaceWithText', function() {
+      beforeEach(function() {
+        _templateSrv.init([
+          { name: 'server', current: { value: '{asd,asd2}', text: 'All' } },
+          { name: 'period', current: { value: '$__auto_interval', text: 'auto' } }
+        ]);
+        _templateSrv.setGrafanaVariable('$__auto_interval', '13m');
+        _templateSrv.updateTemplateData();
+      });
+
+      it('should replace with text except for grafanaVariables', function() {
+        var target = _templateSrv.replaceWithText('Server: $server, period: $period');
+        expect(target).to.be('Server: All, period: 13m');
+      });
+    });
+
+
   });
 
 });