浏览代码

added urlescape formatting option

Benjamin Schweizer 7 年之前
父节点
当前提交
a2967565de

+ 1 - 0
docs/sources/reference/templating.md

@@ -52,6 +52,7 @@ Filter Option | Example | Raw | Interpolated | Description
 `csv`| ${servers:csv} |  `'test1', 'test2'` | `test1,test2` | Formats multi-value variable as a comma-separated string
 `csv`| ${servers:csv} |  `'test1', 'test2'` | `test1,test2` | Formats multi-value variable as a comma-separated string
 `distributed`| ${servers:distributed} | `'test1', 'test2'` | `test1,servers=test2` | Formats multi-value variable in custom format for OpenTSDB.
 `distributed`| ${servers:distributed} | `'test1', 'test2'` | `test1,servers=test2` | Formats multi-value variable in custom format for OpenTSDB.
 `lucene`| ${servers:lucene} | `'test', 'test2'` | `("test" OR "test2")` | Formats multi-value variable as a lucene expression.
 `lucene`| ${servers:lucene} | `'test', 'test2'` | `("test" OR "test2")` | Formats multi-value variable as a lucene expression.
+`urlescape` | ${servers:urlescape} |  `'foo()bar baz', 'test2'` | `{foo%28%29bar%20baz%2Ctest2}` | Formats multi-value variable into a glob, url escaped
 
 
 Test the formatting options on the [Grafana Play site](http://play.grafana.org/d/cJtIfcWiz/template-variable-formatting-options?orgId=1).
 Test the formatting options on the [Grafana Play site](http://play.grafana.org/d/cJtIfcWiz/template-variable-formatting-options?orgId=1).
 
 

+ 5 - 0
public/app/features/templating/specs/template_srv.jest.ts

@@ -275,6 +275,11 @@ describe('templateSrv', function() {
       expect(result).toBe('test,test2');
       expect(result).toBe('test,test2');
     });
     });
 
 
+    it('multi value and urlescape format should render url-escaped string', function() {
+      var result = _templateSrv.formatValue(['foo()bar baz', 'test2'], 'urlescape');
+      expect(result).toBe('foo%28%29bar%20baz%2Ctest2');
+    });
+
     it('slash should be properly escaped in regex format', function() {
     it('slash should be properly escaped in regex format', function() {
       var result = _templateSrv.formatValue('Gi3/14', 'regex');
       var result = _templateSrv.formatValue('Gi3/14', 'regex');
       expect(result).toBe('Gi3\\/14');
       expect(result).toBe('Gi3\\/14');

+ 7 - 0
public/app/features/templating/template_srv.ts

@@ -124,6 +124,13 @@ export class TemplateSrv {
         }
         }
         return value;
         return value;
       }
       }
+      case 'urlescape': {
+        // like glob, but url escaped
+        if (_.isArray(value)) {
+          return escape('{' + value.join(',') + '}');
+        }
+        return escape(value);
+      }
       default: {
       default: {
         if (_.isArray(value)) {
         if (_.isArray(value)) {
           return '{' + value.join(',') + '}';
           return '{' + value.join(',') + '}';