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

Commit f4640b4

Browse files
committed
feat(accordion): support events from collapse in accordion
- Enable usage of collapse events of collapsed, collapsing, expanded, and expanding in accordion Closes #5776
1 parent 1a132dd commit f4640b4

File tree

3 files changed

+57
-4
lines changed

3 files changed

+57
-4
lines changed

src/accordion/accordion.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,11 @@ angular.module('ui.bootstrap.accordion', ['ui.bootstrap.collapse', 'ui.bootstrap
6666
heading: '@', // Interpolate the heading attribute onto this scope
6767
panelClass: '@?', // Ditto with panelClass
6868
isOpen: '=?',
69-
isDisabled: '=?'
69+
isDisabled: '=?',
70+
collapsed: '&?',
71+
collapsing: '&?',
72+
expanded: '&?',
73+
expanding: '&?'
7074
},
7175
controller: function() {
7276
this.setHeading = function(element) {

src/accordion/test/accordion.spec.js

Lines changed: 51 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ describe('uib-accordion', function() {
154154
});
155155

156156
describe('uib-accordion-group', function() {
157-
var scope, $compile;
157+
var scope, $compile, $animate;
158158
var element, groups;
159159
var findGroupHeading = function(index) {
160160
return groups.eq(index).find('.panel-heading').eq(0);
@@ -166,9 +166,10 @@ describe('uib-accordion', function() {
166166
return groups.eq(index).find('.panel-collapse').eq(0);
167167
};
168168

169-
beforeEach(inject(function(_$rootScope_, _$compile_) {
169+
beforeEach(inject(function(_$rootScope_, _$compile_, _$animate_) {
170170
scope = _$rootScope_;
171171
$compile = _$compile_;
172+
$animate = _$animate_;
172173
}));
173174

174175
it('should allow custom templates', inject(function($templateCache) {
@@ -620,5 +621,53 @@ describe('uib-accordion', function() {
620621
expect(findGroupLink(0).text()).toBe('baz');
621622
}));
622623
});
624+
625+
describe('event', function() {
626+
beforeEach(function() {
627+
var tpl =
628+
'<uib-accordion>' +
629+
'<div uib-accordion-group heading="A heading" expanding="expanding()" expanded="expanded()" collapsed="collapsed()" collapsing="collapsing()">' +
630+
'Body' +
631+
'</div>' +
632+
'</uib-accordion>';
633+
element = $compile(tpl)(scope);
634+
scope.$digest();
635+
groups = element.find('.panel');
636+
});
637+
638+
it('on expanding is triggered', function() {
639+
scope.expanding = function() {};
640+
spyOn(scope, 'expanding');
641+
findGroupLink(0).click();
642+
expect(scope.expanding).toHaveBeenCalled();
643+
});
644+
645+
it('on expanded is triggered', function() {
646+
scope.expanded = function() {};
647+
spyOn(scope, 'expanded');
648+
findGroupLink(0).click();
649+
$animate.flush();
650+
expect(scope.expanded).toHaveBeenCalled();
651+
});
652+
653+
it('on collapsed is triggered', function() {
654+
scope.collapsed = function() {};
655+
spyOn(scope, 'collapsed');
656+
findGroupLink(0).click();
657+
findGroupLink(0).click();
658+
expect(scope.collapsed).toHaveBeenCalled();
659+
});
660+
661+
it('on collapsing is triggered', function() {
662+
scope.collapsing = function() {};
663+
spyOn(scope, 'collapsing');
664+
findGroupLink(0).click();
665+
$animate.flush();
666+
findGroupLink(0).click();
667+
expect(scope.collapsing).toHaveBeenCalled();
668+
});
669+
670+
});
671+
623672
});
624673
});

template/accordion/accordion-group.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@ <h4 class="panel-title">
33
<a role="button" data-toggle="collapse" href aria-expanded="{{isOpen}}" aria-controls="{{::panelId}}" tabindex="0" class="accordion-toggle" ng-click="toggleOpen()" uib-accordion-transclude="heading" ng-disabled="isDisabled" uib-tabindex-toggle><span uib-accordion-header ng-class="{'text-muted': isDisabled}">{{heading}}</span></a>
44
</h4>
55
</div>
6-
<div id="{{::panelId}}" aria-labelledby="{{::headingId}}" aria-hidden="{{!isOpen}}" role="tabpanel" class="panel-collapse collapse" uib-collapse="!isOpen">
6+
<div id="{{::panelId}}" aria-labelledby="{{::headingId}}" aria-hidden="{{!isOpen}}" role="tabpanel" class="panel-collapse collapse" uib-collapse="!isOpen" collapsed="collapsed()" collapsing="collapsing()" expanded="expanded()" expanding="expanding()">
77
<div class="panel-body" ng-transclude></div>
88
</div>

0 commit comments

Comments
 (0)