diff --git a/src/collapse/collapse.js b/src/collapse/collapse.js index 6e97e41206..d0a33b454f 100644 --- a/src/collapse/collapse.js +++ b/src/collapse/collapse.js @@ -30,7 +30,11 @@ angular.module('ui.bootstrap.collapse',['ui.bootstrap.transition']) //When we have a change of scrollHeight we are setting again the correct height if the group is opened if (element[0].scrollHeight !== 0) { if (!isCollapsed) { - fixUpHeight(scope, element, element[0].scrollHeight + 'px'); + if (initialAnimSkip) { + fixUpHeight(scope, element, element[0].scrollHeight + 'px'); + } else { + fixUpHeight(scope, element, 'auto'); + } } } }); diff --git a/src/collapse/test/collapse.spec.js b/src/collapse/test/collapse.spec.js index 14ff912c27..d04a8b3c90 100644 --- a/src/collapse/test/collapse.spec.js +++ b/src/collapse/test/collapse.spec.js @@ -54,4 +54,53 @@ describe('collapse directive', function () { $timeout.flush(); expect(element.height()).not.toBe(0); }); + + describe('dynamic content', function() { + beforeEach(function() { + element = angular.element('

Initial content

Additional content
'); + $compile(element)(scope); + angular.element(document.body).append(element); + }); + + afterEach(function() { + element.remove(); + }); + + it('should grow accordingly when content size inside collapse increases', function() { + scope.exp = false; + scope.isCollapsed = false; + scope.$digest(); + var collapseHeight = element.height(); + scope.exp = true; + scope.$digest(); + expect(element.height()).toBeGreaterThan(collapseHeight); + }); + + it('should shrink accordingly when content size inside collapse decreases', function() { + scope.exp = true; + scope.isCollapsed = false; + scope.$digest(); + var collapseHeight = element.height(); + scope.exp = false; + scope.$digest(); + expect(element.height()).toBeLessThan(collapseHeight); + }); + + it('should shrink accordingly when content size inside collapse decreases on subsequent use', function() { + scope.isCollapsed = false; + scope.exp = false; + scope.$digest(); + scope.isCollapsed = true; + scope.$digest(); + scope.isCollapsed = false; + scope.$digest(); + $timeout.flush(); + scope.exp = true; + scope.$digest(); + var collapseHeight = element.height(); + scope.exp = false; + scope.$digest(); + expect(element.height()).toBeLessThan(collapseHeight); + }); + }); }); \ No newline at end of file