@@ -23,6 +23,7 @@ angular.module('ui.bootstrap.tooltip', ['ui.bootstrap.position', 'ui.bootstrap.s
23
23
var triggerMap = {
24
24
'mouseenter' : 'mouseleave' ,
25
25
'click' : 'click' ,
26
+ 'outsideClick' : 'outsideClick' ,
26
27
'focus' : 'blur' ,
27
28
'none' : ''
28
29
} ;
@@ -438,13 +439,33 @@ angular.module('ui.bootstrap.tooltip', ['ui.bootstrap.position', 'ui.bootstrap.s
438
439
}
439
440
}
440
441
442
+ // hide tooltips/popovers for outsideClick trigger
443
+ function bodyHideTooltipBind ( e ) {
444
+ if ( ! ttScope || ! ttScope . isOpen || ! tooltip ) {
445
+ return ;
446
+ }
447
+ // make sure the tooltip/popover link or tool tooltip/popover itself were not clicked
448
+ if ( ! element [ 0 ] . contains ( e . target ) && ! tooltip [ 0 ] . contains ( e . target ) ) {
449
+ hideTooltipBind ( ) ;
450
+ }
451
+ }
452
+
441
453
var unregisterTriggers = function ( ) {
442
454
triggers . show . forEach ( function ( trigger ) {
443
- element . unbind ( trigger , showTooltipBind ) ;
455
+ if ( trigger === 'outsideClick' ) {
456
+ element [ 0 ] . removeEventListener ( 'click' , toggleTooltipBind ) ;
457
+ } else {
458
+ element [ 0 ] . removeEventListener ( trigger , showTooltipBind ) ;
459
+ element [ 0 ] . removeEventListener ( trigger , toggleTooltipBind ) ;
460
+ }
444
461
} ) ;
445
462
triggers . hide . forEach ( function ( trigger ) {
446
463
trigger . split ( ' ' ) . forEach ( function ( hideTrigger ) {
447
- element [ 0 ] . removeEventListener ( hideTrigger , hideTooltipBind ) ;
464
+ if ( trigger === 'outsideClick' ) {
465
+ $document [ 0 ] . removeEventListener ( 'click' , bodyHideTooltipBind ) ;
466
+ } else {
467
+ element [ 0 ] . removeEventListener ( hideTrigger , hideTooltipBind ) ;
468
+ }
448
469
} ) ;
449
470
} ) ;
450
471
} ;
@@ -458,7 +479,10 @@ angular.module('ui.bootstrap.tooltip', ['ui.bootstrap.position', 'ui.bootstrap.s
458
479
if ( triggers . show !== 'none' ) {
459
480
triggers . show . forEach ( function ( trigger , idx ) {
460
481
// Using raw addEventListener due to jqLite/jQuery bug - #4060
461
- if ( trigger === triggers . hide [ idx ] ) {
482
+ if ( trigger === 'outsideClick' ) {
483
+ element [ 0 ] . addEventListener ( 'click' , toggleTooltipBind ) ;
484
+ $document [ 0 ] . addEventListener ( 'click' , bodyHideTooltipBind ) ;
485
+ } else if ( trigger === triggers . hide [ idx ] ) {
462
486
element [ 0 ] . addEventListener ( trigger , toggleTooltipBind ) ;
463
487
} else if ( trigger ) {
464
488
element [ 0 ] . addEventListener ( trigger , showTooltipBind ) ;
0 commit comments