diff --git a/package.json b/package.json index 8de8f05cf8a..f84ca9cf8c6 100644 --- a/package.json +++ b/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" diff --git a/src/app/filters/all.js b/src/app/filters/all.js index b2729d120dd..eb9a736d0ce 100755 --- a/src/app/filters/all.js +++ b/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); }; }); diff --git a/src/app/services/templateSrv.js b/src/app/services/templateSrv.js index d63a9df34d4..c201147becf 100644 --- a/src/app/services/templateSrv.js +++ b/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; - } + if (!variable.current || !variable.current.value) { return; } - data[variable.name] = variable.current.value; - }); - - 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 '' + match + ''; } 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; + }); + }; + }); }); diff --git a/src/test/specs/templateSrv-specs.js b/src/test/specs/templateSrv-specs.js index 938d8bfe0a1..f740ef6d544 100644 --- a/src/test/specs/templateSrv-specs.js +++ b/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'); + }); + }); + + }); });