|
|
|
@ -1,6 +1,19 @@ |
|
|
|
|
import kbn from 'app/core/utils/kbn'; |
|
|
|
|
import { assignModelProperties } from 'app/core/utils/model_utils'; |
|
|
|
|
|
|
|
|
|
/* |
|
|
|
|
* 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} |
|
|
|
|
*/ |
|
|
|
|
export const variableRegex = /\$(\w+)|\[\[([\s\S]+?)(?::(\w+))?\]\]|\${(\w+)(?::(\w+))?}/g; |
|
|
|
|
|
|
|
|
|
// Helper function since lastIndex is not reset
|
|
|
|
|
export const variableRegexExec = (variableString: string) => { |
|
|
|
|
variableRegex.lastIndex = 0; |
|
|
|
|
return variableRegex.exec(variableString); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
export interface Variable { |
|
|
|
|
setValue(option); |
|
|
|
|
updateOptions(); |
|
|
|
@ -14,15 +27,16 @@ export let variableTypes = {}; |
|
|
|
|
export { assignModelProperties }; |
|
|
|
|
|
|
|
|
|
export function containsVariable(...args: any[]) { |
|
|
|
|
let variableName = args[args.length - 1]; |
|
|
|
|
let str = args[0] || ''; |
|
|
|
|
|
|
|
|
|
for (let i = 1; i < args.length - 1; i++) { |
|
|
|
|
str += ' ' + args[i] || ''; |
|
|
|
|
} |
|
|
|
|
const variableName = args[args.length - 1]; |
|
|
|
|
const variableString = args.slice(0, -1).join(' '); |
|
|
|
|
const matches = variableString.match(variableRegex); |
|
|
|
|
const isMatchingVariable = |
|
|
|
|
matches !== null |
|
|
|
|
? matches.find(match => { |
|
|
|
|
const varMatch = variableRegexExec(match); |
|
|
|
|
return varMatch !== null && varMatch.indexOf(variableName) > -1; |
|
|
|
|
}) |
|
|
|
|
: false; |
|
|
|
|
|
|
|
|
|
variableName = kbn.regexEscape(variableName); |
|
|
|
|
const findVarRegex = new RegExp('\\$(' + variableName + ')(?:\\W|$)|\\[\\[(' + variableName + ')\\]\\]', 'g'); |
|
|
|
|
const match = findVarRegex.exec(str); |
|
|
|
|
return match !== null; |
|
|
|
|
return !!isMatchingVariable; |
|
|
|
|
} |
|
|
|
|