/// import angular from 'angular'; import _ from 'lodash'; import $ from 'jquery'; import coreModule from 'app/core/core_module'; import alertDef from '../alerting/alert_def'; /** @ngInject **/ export function annotationTooltipDirective($sanitize, dashboardSrv, $compile) { function sanitizeString(str) { try { return $sanitize(str); } catch (err) { console.log('Could not sanitize annotation string, html escaping instead'); return _.escape(str); } } return { restrict: 'E', scope: { "event": "=", }, link: function(scope, element) { var event = scope.event; var title = event.title; var text = event.text; var dashboard = dashboardSrv.getCurrent(); var tooltip = '
'; var titleStateClass = ''; if (event.source.name === 'panel-alert') { var stateModel = alertDef.getStateDisplayModel(event.newState); titleStateClass = stateModel.stateClass; title = ` ${stateModel.text}`; text = alertDef.getAlertAnnotationInfo(event); } tooltip += `
${sanitizeString(title)} ${dashboard.formatDate(event.min)}
`; tooltip += '
'; if (text) { tooltip += sanitizeString(text).replace(/\n/g, '
') + '
'; } var tags = event.tags; if (_.isString(event.tags)) { tags = event.tags.split(','); if (tags.length === 1) { tags = event.tags.split(' '); } } if (tags && tags.length) { scope.tags = tags; tooltip += '{{tag}}
'; } tooltip += "
"; var $tooltip = $(tooltip); $tooltip.appendTo(element); $compile(element.contents())(scope); } }; } coreModule.directive('annotationTooltip', annotationTooltipDirective);