diff --git a/public/app/plugins/panel/singlestat/module.ts b/public/app/plugins/panel/singlestat/module.ts index eafa3cf23f4..26ce6b7722d 100644 --- a/public/app/plugins/panel/singlestat/module.ts +++ b/public/app/plugins/panel/singlestat/module.ts @@ -77,7 +77,7 @@ class SingleStatCtrl extends MetricsPanelCtrl { }; /** @ngInject */ - constructor($scope, $injector, private linkSrv) { + constructor($scope, $injector, private linkSrv, private $sanitize) { super($scope, $injector); _.defaults(this.panel, this.panelDefaults); @@ -398,14 +398,15 @@ class SingleStatCtrl extends MetricsPanelCtrl { const $location = this.$location; const linkSrv = this.linkSrv; const $timeout = this.$timeout; + const $sanitize = this.$sanitize; const panel = ctrl.panel; const templateSrv = this.templateSrv; let data, linkInfo; const $panelContainer = elem.find('.panel-container'); elem = elem.find('.singlestat-panel'); - function applyColoringThresholds(value, valueString) { - const color = getColorForValue(data, value); + function applyColoringThresholds(valueString) { + const color = getColorForValue(data, data.value); if (color) { return '' + valueString + ''; } @@ -413,8 +414,9 @@ class SingleStatCtrl extends MetricsPanelCtrl { return valueString; } - function getSpan(className, fontSize, value) { - value = templateSrv.replace(value, data.scopedVars); + function getSpan(className, fontSize, applyColoring, value) { + value = $sanitize(templateSrv.replace(value, data.scopedVars)); + value = applyColoring ? applyColoringThresholds(value) : value; return '' + value + ''; } @@ -422,25 +424,13 @@ class SingleStatCtrl extends MetricsPanelCtrl { let body = '
'; if (panel.prefix) { - let prefix = panel.prefix; - if (panel.colorPrefix) { - prefix = applyColoringThresholds(data.value, panel.prefix); - } - body += getSpan('singlestat-panel-prefix', panel.prefixFontSize, prefix); + body += getSpan('singlestat-panel-prefix', panel.prefixFontSize, panel.colorPrefix, panel.prefix); } - let value = data.valueFormatted; - if (panel.colorValue) { - value = applyColoringThresholds(data.value, value); - } - body += getSpan('singlestat-panel-value', panel.valueFontSize, value); + body += getSpan('singlestat-panel-value', panel.valueFontSize, panel.colorValue, data.valueFormatted); if (panel.postfix) { - let postfix = panel.postfix; - if (panel.colorPostfix) { - postfix = applyColoringThresholds(data.value, panel.postfix); - } - body += getSpan('singlestat-panel-postfix', panel.postfixFontSize, postfix); + body += getSpan('singlestat-panel-postfix', panel.postfixFontSize, panel.colorPostfix, panel.postfix); } body += '
'; diff --git a/public/app/plugins/panel/singlestat/specs/singlestat.test.ts b/public/app/plugins/panel/singlestat/specs/singlestat.test.ts index 6003acd89a6..902d722f0ad 100644 --- a/public/app/plugins/panel/singlestat/specs/singlestat.test.ts +++ b/public/app/plugins/panel/singlestat/specs/singlestat.test.ts @@ -14,6 +14,8 @@ describe('SingleStatCtrl', () => { get: () => {}, }; + const $sanitize = {}; + SingleStatCtrl.prototype.panel = { events: { on: () => {}, @@ -31,7 +33,7 @@ describe('SingleStatCtrl', () => { describe(desc, () => { ctx.setup = setupFunc => { beforeEach(() => { - ctx.ctrl = new SingleStatCtrl($scope, $injector, {}); + ctx.ctrl = new SingleStatCtrl($scope, $injector, {}, $sanitize); setupFunc(); ctx.ctrl.onDataReceived(ctx.data); ctx.data = ctx.ctrl.data;