@momsfriendlydevco/angular-bs-tooltip
Version:
AngularJS + Bootstrap tooltip support
1 lines • 2.96 kB
JavaScript
;angular.module("angular-bs-tooltip",[]).directive("tooltip",function(){return{restrict:"A",scope:{tooltip:"@?",tooltipPosition:"@?",tooltipContainer:"@?",tooltipTrigger:"@?",tooltipHtml:"<",tooltipShow:"<",tooltipTether:"<"},controller:["$scope","$element","$interval",function(r,i,t){r.isVisible=!1,r.isBS3=/^3/.test($.fn.tooltip.Constructor.VERSION),r.isBS4=/^4/.test($.fn.tooltip.Constructor.VERSION),r.rebuild=function(){var t=$(i),o=r.isVisible;t.hasClass("ng-tooltip")&&(r.isBS3?t.tooltip("destroy"):r.isBS4&&t.tooltip("dispose")),r.rebuildTether(),t.on("shown.bs.tooltip",function(){return r.isVisible=!0}).on("hidden.bs.tooltip",function(){return r.isVisible=!1}).tooltip({title:r.tooltip,placement:r.tooltipPosition||"top",container:"element"!=r.tooltipContainer&&"body",trigger:!0===r.tooltipShow||!1===r.tooltipShow?"manual":r.tooltipTrigger||"hover",html:!!r.tooltipHtml,animation:!1,template:r.isBS3?'<div class="tooltip ng-tooltip-'.concat(r.$id,'" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'):r.isBS4?'<div class="tooltip ng-tooltip-'.concat(r.$id,'" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>'):'<div class="tooltip ng-tooltip-'.concat(r.$id,'" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>')}).addClass("ng-tooltip"),(!0===r.tooltipShow||!1!==r.tooltipShow&&o)&&t.tooltip("show")},r.tether,r.tetherTimer,r.rebuildTether=function(){if(r.tooltipTether){var l=$(i);l.one("shown.bs.tooltip",function(){if(r.isBS3)r.tether=new Tether({element:l.data("bs.tooltip").$tip[0],target:l[0],attachment:"top"==r.tooltipPosition?"bottom middle":"left"==r.tooltipPosition?"center right":"right"==r.tooltipPosition?"center left":"bottom"==r.tooltipPosition?"top middle":"bottom middle",targetAttachment:"top"==r.tooltipPosition?"top middle":"left"==r.tooltipPosition?"center left":"right"==r.tooltipPosition?"center right":"bottom"==r.tooltipPosition?"bottom middle":"top middle"}),!0!==r.tooltipTether&&!isFinite(r.tooltipTether)||(r.tetherTimer=t(r.tether.position,!0===r.tooltipTether?100:r.tooltipTether));else if(r.isBS4){var i,e;if(!0===r.tooltipTether||isFinite(r.tooltipTether))r.tetherTimer=t(function(){var t=l.position(),o=l.is(":visible");!o||void 0!==i&&t.left==i.left&&t.top==i.top||(l.tooltip("update"),i=t),e!==o&&(l.tooltip(o?"show":"hide"),e=o)},!0===r.tooltipTether?100:r.tooltipTether)}})}else r.tether&&(r.isBS3&&(r.tether.destroy(),r.tether=void 0),t.cancel(r.tetherTimer))},r.$watchGroup(["tooltip","tooltipPosition","tooltipContainer","tooltipTrigger","tooltipHtml","tooltipShow","tooltipTether"],r.rebuild),r.$on("bs.tooltip.reposition",function(){r.tether?r.tether.position():r.rebuild()}),r.$on("$destroy",function(){var t=$(i);r.tooltipTether&&r.tether&&r.tether.destroy(),angular.element(".ng-tooltip-".concat(r.$id)).remove(),r.isBS3?t.tooltip("destroy"):r.isBS4&&t.tooltip("dispose")})}]}});