|
|
|
|
@ -8,6 +8,12 @@ function luceneEscape(value) { |
|
|
|
|
export class TemplateSrv { |
|
|
|
|
variables: any[]; |
|
|
|
|
|
|
|
|
|
/* |
|
|
|
|
* This regex matches 3 types of variable reference with an optional format specifier |
|
|
|
|
* \$(\w+) $var1 |
|
|
|
|
* \[\[([\s\S]+?)(?::(\w+))?\]\] [[var2]] or [[var2:fmt2]] |
|
|
|
|
* \${(\w+)(?::(\w+))?} ${var3} or ${var3:fmt3} |
|
|
|
|
*/ |
|
|
|
|
private regex = /\$(\w+)|\[\[([\s\S]+?)(?::(\w+))?\]\]|\${(\w+)(?::(\w+))?}/g; |
|
|
|
|
private index = {}; |
|
|
|
|
private grafanaVariables = {}; |
|
|
|
|
@ -143,8 +149,8 @@ export class TemplateSrv { |
|
|
|
|
|
|
|
|
|
str = _.escape(str); |
|
|
|
|
this.regex.lastIndex = 0; |
|
|
|
|
return str.replace(this.regex, (match, g1, g2, g3, g4) => { |
|
|
|
|
if (this.index[g1 || g2 || g4] || this.builtIns[g1 || g2 || g4]) { |
|
|
|
|
return str.replace(this.regex, (match, var1, var2, fmt2, var3) => { |
|
|
|
|
if (this.index[var1 || var2 || var3] || this.builtIns[var1 || var2 || var3]) { |
|
|
|
|
return '<span class="template-variable">' + match + '</span>'; |
|
|
|
|
} |
|
|
|
|
return match; |
|
|
|
|
@ -170,11 +176,11 @@ export class TemplateSrv { |
|
|
|
|
var variable, systemValue, value; |
|
|
|
|
this.regex.lastIndex = 0; |
|
|
|
|
|
|
|
|
|
return target.replace(this.regex, (match, g1, g2, g3, g4, g5) => { |
|
|
|
|
variable = this.index[g1 || g2 || g4]; |
|
|
|
|
format = g3 || g5 || format; |
|
|
|
|
return target.replace(this.regex, (match, var1, var2, fmt2, var3, fmt3) => { |
|
|
|
|
variable = this.index[var1 || var2 || var3]; |
|
|
|
|
format = fmt2 || fmt3 || format; |
|
|
|
|
if (scopedVars) { |
|
|
|
|
value = scopedVars[g1 || g2 || g4]; |
|
|
|
|
value = scopedVars[var1 || var2 || var3]; |
|
|
|
|
if (value) { |
|
|
|
|
return this.formatValue(value.value, format, variable); |
|
|
|
|
} |
|
|
|
|
@ -215,15 +221,15 @@ export class TemplateSrv { |
|
|
|
|
var variable; |
|
|
|
|
this.regex.lastIndex = 0; |
|
|
|
|
|
|
|
|
|
return target.replace(this.regex, (match, g1, g2, g3, g4) => { |
|
|
|
|
return target.replace(this.regex, (match, var1, var2, fmt2, var3) => { |
|
|
|
|
if (scopedVars) { |
|
|
|
|
var option = scopedVars[g1 || g2 || g4]; |
|
|
|
|
var option = scopedVars[var1 || var2 || var3]; |
|
|
|
|
if (option) { |
|
|
|
|
return option.text; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
variable = this.index[g1 || g2 || g4]; |
|
|
|
|
variable = this.index[var1 || var2 || var3]; |
|
|
|
|
if (!variable) { |
|
|
|
|
return match; |
|
|
|
|
} |
|
|
|
|
|