info_popover.ts 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. ///<reference path="../../headers/common.d.ts" />
  2. import _ from 'lodash';
  3. import $ from 'jquery';
  4. import coreModule from 'app/core/core_module';
  5. import Drop from 'tether-drop';
  6. export function infoPopover() {
  7. return {
  8. restrict: 'E',
  9. template: '<i class="fa fa-info-circle"></i>',
  10. transclude: true,
  11. link: function(scope, elem, attrs, ctrl, transclude) {
  12. // var inputElem = elem.prev();
  13. // if (inputElem.length === 0) {
  14. // console.log('Failed to find input element for popover');
  15. // return;
  16. // }
  17. var offset = attrs.offset || '0 -10px';
  18. var position = attrs.position || 'right middle';
  19. var classes = 'drop-help drop-hide-out-of-bounds';
  20. var openOn = 'hover';
  21. elem.addClass('gf-form-help-icon');
  22. if (attrs.wide) {
  23. classes += ' drop-wide';
  24. }
  25. if (attrs.mode) {
  26. elem.addClass('gf-form-help-icon--' + attrs.mode);
  27. }
  28. transclude(function(clone, newScope) {
  29. var content = document.createElement("div");
  30. _.each(clone, (node) => {
  31. content.appendChild(node);
  32. });
  33. var drop = new Drop({
  34. target: elem[0],
  35. content: content,
  36. position: position,
  37. classes: classes,
  38. openOn: openOn,
  39. tetherOptions: {
  40. offset: offset
  41. }
  42. });
  43. scope.$on('$destroy', function() {
  44. drop.destroy();
  45. });
  46. });
  47. }
  48. };
  49. }
  50. coreModule.directive('infoPopover', infoPopover);