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

feat(accordion): support events from collapse in accordion #6227

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion src/accordion/accordion.js
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,11 @@ angular.module('ui.bootstrap.accordion', ['ui.bootstrap.collapse', 'ui.bootstrap
heading: '@', // Interpolate the heading attribute onto this scope
panelClass: '@?', // Ditto with panelClass
isOpen: '=?',
isDisabled: '=?'
isDisabled: '=?',
collapsed: '&?',
collapsing: '&?',
expanded: '&?',
expanding: '&?'
},
controller: function() {
this.setHeading = function(element) {
Expand Down
20 changes: 20 additions & 0 deletions src/accordion/docs/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,26 @@ The body of each accordion group is transcluded into the body of the collapsible

### uib-accordion-group settings

* `collapsed()`
<small class="badge">$</small> -
An optional expression called after the element finished collapsing.

* `collapsing()`
<small class="badge">$</small> -
An optional expression called before the element begins collapsing.
If the expression returns a promise, animation won't start until the promise resolves.
If the returned promise is rejected, collapsing will be cancelled.

* `expanded()`
<small class="badge">$</small> -
An optional expression called after the element finished expanding.

* `expanding()`
<small class="badge">$</small> -
An optional expression called before the element begins expanding.
If the expression returns a promise, animation won't start until the promise resolves.
If the returned promise is rejected, expanding will be cancelled.

* `heading`
_(Default: `none`)_ -
The clickable text on the group's header. You need one to be able to click on the header for toggling.
Expand Down
53 changes: 51 additions & 2 deletions src/accordion/test/accordion.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ describe('uib-accordion', function() {
});

describe('uib-accordion-group', function() {
var scope, $compile;
var scope, $compile, $animate;
var element, groups;
var findGroupHeading = function(index) {
return groups.eq(index).find('.panel-heading').eq(0);
Expand All @@ -166,9 +166,10 @@ describe('uib-accordion', function() {
return groups.eq(index).find('.panel-collapse').eq(0);
};

beforeEach(inject(function(_$rootScope_, _$compile_) {
beforeEach(inject(function(_$rootScope_, _$compile_, _$animate_) {
scope = _$rootScope_;
$compile = _$compile_;
$animate = _$animate_;
}));

it('should allow custom templates', inject(function($templateCache) {
Expand Down Expand Up @@ -620,5 +621,53 @@ describe('uib-accordion', function() {
expect(findGroupLink(0).text()).toBe('baz');
}));
});

describe('event', function() {
beforeEach(function() {
var tpl =
'<uib-accordion>' +
'<div uib-accordion-group heading="A heading" expanding="expanding()" expanded="expanded()" collapsed="collapsed()" collapsing="collapsing()">' +
'Body' +
'</div>' +
'</uib-accordion>';
element = $compile(tpl)(scope);
scope.$digest();
groups = element.find('.panel');
});

it('on expanding is triggered', function() {
scope.expanding = function() {};
spyOn(scope, 'expanding');
findGroupLink(0).click();
expect(scope.expanding).toHaveBeenCalled();
});

it('on expanded is triggered', function() {
scope.expanded = function() {};
spyOn(scope, 'expanded');
findGroupLink(0).click();
$animate.flush();
expect(scope.expanded).toHaveBeenCalled();
});

it('on collapsed is triggered', function() {
scope.collapsed = function() {};
spyOn(scope, 'collapsed');
findGroupLink(0).click();
findGroupLink(0).click();
expect(scope.collapsed).toHaveBeenCalled();
});

it('on collapsing is triggered', function() {
scope.collapsing = function() {};
spyOn(scope, 'collapsing');
findGroupLink(0).click();
$animate.flush();
findGroupLink(0).click();
expect(scope.collapsing).toHaveBeenCalled();
});

});

});
});
2 changes: 1 addition & 1 deletion template/accordion/accordion-group.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@ <h4 class="panel-title">
<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>
</h4>
</div>
<div id="{{::panelId}}" aria-labelledby="{{::headingId}}" aria-hidden="{{!isOpen}}" role="tabpanel" class="panel-collapse collapse" uib-collapse="!isOpen">
<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()">
<div class="panel-body" ng-transclude></div>
</div>