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, contextSrv, $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: "=", onEdit: "&" }, 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.alertId) { var stateModel = alertDef.getStateDisplayModel(event.newState); titleStateClass = stateModel.stateClass; title = ` ${ stateModel.text }`; text = alertDef.getAlertAnnotationInfo(event); if (event.text) { text = text + "
" + event.text; } } else if (title) { text = title + "
" + (_.isString(text) ? text : ""); title = ""; } var header = `
`; if (event.login) { header += `
`; } header += ` ${sanitizeString( title )} ${dashboard.formatDate( event.min )} `; // Show edit icon only for users with at least Editor role if (event.id && contextSrv.isEditor) { header += ` `; } header += `
`; tooltip += header; tooltip += '
'; if (text) { tooltip += "
" + sanitizeString(text.replace(/\n/g, "
")) + "
"; } var tags = event.tags; if (tags && tags.length) { scope.tags = tags; tooltip += '{{tag}}
'; } tooltip += "
"; tooltip += "
"; var $tooltip = $(tooltip); $tooltip.appendTo(element); $compile(element.contents())(scope); } }; } coreModule.directive("annotationTooltip", annotationTooltipDirective);