Skip to content

Commit c5fd16d

Browse files
committed
refactor(tooltip): make tooltip-class more robust
- Add tooltip-class support to tooltip-template - Remove observer for tooltip-class, it’s evaluated once on tooltip preparation instead - Remove interpolation on class attribute Interpolation on the class attribute can have undesirable mangling effects when use with a directive that has `replace: true`. It also doesn’t work properly with ngAnimate. Relates to angular-ui#3126
1 parent ed0416e commit c5fd16d

File tree

6 files changed

+33
-22
lines changed

6 files changed

+33
-22
lines changed

Diff for: src/tooltip/tooltip.js

+17-15
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,7 @@ angular.module( 'ui.bootstrap.tooltip', [ 'ui.bootstrap.position', 'ui.bootstrap
262262
}
263263

264264
function prepareTooltip() {
265+
prepPopupClass();
265266
prepPlacement();
266267
prepPopupDelay();
267268
}
@@ -291,9 +292,9 @@ angular.module( 'ui.bootstrap.tooltip', [ 'ui.bootstrap.position', 'ui.bootstrap
291292
ttScope.title = val;
292293
});
293294

294-
attrs.$observe( prefix+'Class', function ( val ) {
295-
ttScope.popupClass = val;
296-
});
295+
function prepPopupClass() {
296+
ttScope.popupClass = attrs[prefix + 'Class'];
297+
}
297298

298299
function prepPlacement() {
299300
var val = attrs[ prefix + 'Placement' ];
@@ -426,27 +427,28 @@ function ($animate , $sce , $compile , $templateRequest) {
426427
};
427428
}])
428429

429-
// Apply animate class without animating itself
430-
.directive('tooltipAnimateClass', function () {
430+
/**
431+
* Note that it's intentional that these classes are *not* applied through $animate.
432+
* They must not be animated as they're expected to be present on the tooltip on
433+
* initialization.
434+
*/
435+
.directive('tooltipClasses', function () {
431436
return {
432437
restrict: 'A',
433438
link: function (scope, element, attrs) {
439+
if (scope.placement) {
440+
element.addClass(scope.placement);
441+
}
442+
if (scope.popupClass) {
443+
element.addClass(scope.popupClass);
444+
}
434445
if (scope.animation()) {
435-
element.addClass(attrs.tooltipAnimateClass);
446+
element.addClass(attrs.tooltipAnimationClass);
436447
}
437448
}
438449
};
439450
})
440451

441-
.directive('tooltipPlacementClass', function () {
442-
return {
443-
restrict: 'A',
444-
link: function (scope, element, attrs) {
445-
element.addClass(scope.placement);
446-
}
447-
};
448-
})
449-
450452
.directive( 'tooltipPopup', function () {
451453
return {
452454
restrict: 'EA',

Diff for: template/popover/popover-template.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<div class="popover"
2-
tooltip-placement-class
3-
tooltip-animate-class="fade"
2+
tooltip-animation-class="fade"
3+
tooltip-classes
44
ng-class="{ in: isOpen() }">
55
<div class="arrow"></div>
66

Diff for: template/popover/popover.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<div class="popover"
2-
tooltip-placement-class
3-
tooltip-animate-class="fade"
2+
tooltip-animation-class="fade"
3+
tooltip-classes
44
ng-class="{ in: isOpen() }">
55
<div class="arrow"></div>
66

Diff for: template/tooltip/tooltip-html-popup.html

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
<div class="tooltip {{placement}} {{popupClass}}" ng-class="{ in: isOpen(), fade: animation() }">
1+
<div class="tooltip"
2+
tooltip-animation-class="fade"
3+
tooltip-classes
4+
ng-class="{ in: isOpen() }">
25
<div class="tooltip-arrow"></div>
36
<div class="tooltip-inner" ng-bind-html="contentExp()"></div>
47
</div>

Diff for: template/tooltip/tooltip-html-unsafe-popup.html

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
<div class="tooltip {{placement}} {{popupClass}}" ng-class="{ in: isOpen(), fade: animation() }">
1+
<div class="tooltip"
2+
tooltip-animation-class="fade"
3+
tooltip-classes
4+
ng-class="{ in: isOpen() }">
25
<div class="tooltip-arrow"></div>
36
<div class="tooltip-inner" bind-html-unsafe="content"></div>
47
</div>

Diff for: template/tooltip/tooltip-template-popup.html

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
<div class="tooltip {{placement}}" ng-class="{ in: isOpen(), fade: animation() }">
1+
<div class="tooltip"
2+
tooltip-animation-class="fade"
3+
tooltip-classes
4+
ng-class="{ in: isOpen() }">
25
<div class="tooltip-arrow"></div>
36
<div class="tooltip-inner"
47
tooltip-template-transclude="content"

0 commit comments

Comments
 (0)