///
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 += `
`;
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);