Skip to content
This repository was archived by the owner on May 29, 2019. It is now read-only.

Commit 9d5ff5a

Browse files
committed
refactor(collapse): use DOM callbacks
1 parent 890e892 commit 9d5ff5a

File tree

1 file changed

+25
-42
lines changed

1 file changed

+25
-42
lines changed

src/collapse/collapse.js

Lines changed: 25 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -12,27 +12,38 @@ angular.module('ui.bootstrap.collapse', [])
1212

1313
return {
1414
link: function (scope, element, attrs) {
15-
element.addClass(collapseConfig.inactiveClass);
15+
16+
element.on('$animate:before', function (e, data) {
17+
if (data.className == collapseConfig.visibleClass) {
18+
element.css({height: data.event == 'addClass' ? '0' : _fullHeight()});
19+
}
20+
});
21+
22+
element.on('$animate:after', function (e, data) {
23+
if (data.className == collapseConfig.visibleClass) {
24+
element.css({height: data.event == 'addClass' ? _fullHeight() : '0'});
25+
}
26+
});
27+
28+
element.on('$animate:close', function (e, data) {
29+
if (data.className == collapseConfig.visibleClass) {
30+
element.css({height: data.event == 'addClass' ? 'auto' : '0'});
31+
animateDone();
32+
}
33+
});
34+
35+
function _fullHeight() {
36+
return element[0].scrollHeight + 'px';
37+
}
1638

1739
function expand() {
1840
animateStart();
19-
$animate.addClass(element, collapseConfig.visibleClass, function () {
20-
// Doing height: '' to remove this property works too as "height:
21-
// auto" is already in the Bootstrap stylesheet but may break
22-
// compatibility with IE8 according to warning on
23-
// http://api.jquery.com/css/
24-
element.css({height: 'auto'});
25-
animateDone();
26-
});
41+
$animate.addClass(element, collapseConfig.visibleClass);
2742
}
2843

2944
function collapse() {
3045
animateStart();
31-
$animate.removeClass(element, collapseConfig.visibleClass, function () {
32-
// Read note above about IE8
33-
element.css({height: '0'});
34-
animateDone();
35-
});
46+
$animate.removeClass(element, collapseConfig.visibleClass);
3647
}
3748

3849
function animateStart() {
@@ -58,32 +69,4 @@ angular.module('ui.bootstrap.collapse', [])
5869
};
5970
}])
6071

61-
.animation('.collapsing', [
62-
'collapseConfig',
63-
function (collapseConfig) {
64-
65-
// Check for addition/removal of 'in' class
66-
return {
67-
beforeAddClass: _setZeroHeight,
68-
addClass: _setFullHeight,
69-
beforeRemoveClass: _setFullHeight,
70-
removeClass: _setZeroHeight
71-
};
72-
73-
function _setFullHeight(element, className, done) {
74-
if (className == collapseConfig.visibleClass) {
75-
element.css({height: element[0].scrollHeight + 'px'});
76-
}
77-
done();
78-
}
79-
80-
function _setZeroHeight(element, className, done) {
81-
if (className == collapseConfig.visibleClass) {
82-
element.css({height: '0'});
83-
}
84-
done();
85-
}
86-
87-
}])
88-
8972
;

0 commit comments

Comments
 (0)