diff --git a/public/app/features/panel/panel_menu.js b/public/app/features/panel/panel_menu.js index cb6f74fb89d..3524a0c019f 100644 --- a/public/app/features/panel/panel_menu.js +++ b/public/app/features/panel/panel_menu.js @@ -9,7 +9,7 @@ function (angular, $, _, Tether) { angular .module('grafana.directives') - .directive('panelMenu', function($compile, linkSrv) { + .directive('panelMenu', function($sanitize, $compile, linkSrv) { var linkTemplate = '' + '' + @@ -19,6 +19,16 @@ function (angular, $, _, Tether) { ' {{ctrl.timeInfo}}' + ''; + function sanitizeString(str) { + try { + return $sanitize(str); + } + catch(err) { + console.log('Could not sanitize annotation string, html escaping instead'); + return _.escape(str); + } + } + function createExternalLinkMenu(ctrl) { var template = '
'; template += '
'; @@ -79,6 +89,7 @@ function (angular, $, _, Tether) { var $link = $(linkTemplate); var $panelLinksBtn = $link.find(".panel-links-btn"); var $panelContainer = elem.parents(".panel-container"); + var $panelHelpDrop = $link.find(".panel-help-text"); var menuScope = null; var ctrl = $scope.ctrl; var timeout = null; @@ -93,6 +104,12 @@ function (angular, $, _, Tether) { $panelLinksBtn.css({display: showIcon ? 'inline' : 'none'}); }); + $scope.$watch('ctrl.panel.helpText', function(helpText) { + helpText = sanitizeString(helpText); + var showIcon = (helpText ? helpText.length > 0 : false) && ctrl.panel.title !== ''; + $panelHelpDrop.css({display: showIcon ? 'inline' : 'none'}); + }); + function dismiss(time, force) { clearTimeout(timeout); timeout = null;