Skip to content

Commit 3c15b11

Browse files
committed
fix(activator): properly activate elements nested inside an item.
Addresses #1373. Before: if an `<a>`, `ng-click`, or `<button>` inside of a .item, was clicked, the activator would walk up .item and activate it. Now: If an `<a>`, `ng-click`, or `<button>` inside of a .item is clicked, the activator will activate that element. Additionally, CSS was added so `a.item-content.activated` would look activated.
1 parent 569d716 commit 3c15b11

File tree

4 files changed

+21
-10
lines changed

4 files changed

+21
-10
lines changed

js/utils/activator.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
}
2727
if( ele.tagName == 'A' || ele.tagName == 'BUTTON' || ele.hasAttribute('ng-click') ) {
2828
eleToActivate = ele;
29+
break;
2930
}
3031
if( ele.classList.contains('button') ) {
3132
eleToActivate = ele;

scss/_items.scss

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,9 @@
104104
.item.active,
105105
.item.activated,
106106
.item-complex.active .item-content,
107-
.item-complex.activated .item-content {
107+
.item-complex.activated .item-content,
108+
.item .item-content.active,
109+
.item .item-content.activated {
108110
@include item-active-style($item-default-active-bg, $item-default-active-border);
109111

110112
// Different active themes for <a> and <button> items

test/html/list.html

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,14 @@ <h1 class="title">Ionic Delete/Option Buttons</h1>
4949
<div class="item item-divider">
5050
Type 1
5151
</div>
52+
<ion-item href="#">
53+
<button class="button button-energized">
54+
Hello
55+
</button>
56+
</ion-item>
57+
<ion-item href="hello">
58+
Woah!
59+
</ion-item>
5260
<ion-item ng-repeat="item in items"
5361
ng-click="alert(item.id)"
5462
class="item item-avatar-left item-icon-right"

test/unit/utils/activator.unit.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ describe('Ionic Element Activator', function() {
4444
expect(e.target.classList.contains('activated')).toEqual(false);
4545
});
4646

47-
it('Should activate .item with a child "a"', function() {
47+
it('Should activate "a" in a .item', function() {
4848
var itemEle = document.createElement('div');
4949
itemEle.className = 'item';
5050

@@ -54,11 +54,11 @@ describe('Ionic Element Activator', function() {
5454
var e = { target: aEle };
5555

5656
ionic.activator.start(e);
57-
expect(itemEle.classList.contains('activated')).toEqual(true);
58-
expect(aEle.classList.contains('activated')).toEqual(false);
57+
expect(itemEle.classList.contains('activated')).toEqual(false);
58+
expect(aEle.classList.contains('activated')).toEqual(true);
5959
});
6060

61-
it('Should activate .item with a child "div.item-content a"', function() {
61+
it('Should activate "div.item-content a" child of .item', function() {
6262
var itemEle = document.createElement('div');
6363
itemEle.className = 'item';
6464

@@ -72,12 +72,12 @@ describe('Ionic Element Activator', function() {
7272
var e = { target: aEle };
7373

7474
ionic.activator.start(e);
75-
expect(itemEle.classList.contains('activated')).toEqual(true);
75+
expect(itemEle.classList.contains('activated')).toEqual(false);
7676
expect(itemContentEle.classList.contains('activated')).toEqual(false);
77-
expect(aEle.classList.contains('activated')).toEqual(false);
77+
expect(aEle.classList.contains('activated')).toEqual(true);
7878
});
7979

80-
it('Should activate .item with a child "div.item-content div[ng-click]"', function() {
80+
it('Should activate child "div.item-content div[ng-click]" of a .item', function() {
8181
var itemEle = document.createElement('div');
8282
itemEle.className = 'item';
8383

@@ -92,9 +92,9 @@ describe('Ionic Element Activator', function() {
9292
var e = { target: divEle };
9393

9494
ionic.activator.start(e);
95-
expect(itemEle.classList.contains('activated')).toEqual(true);
95+
expect(itemEle.classList.contains('activated')).toEqual(false);
9696
expect(itemContentEle.classList.contains('activated')).toEqual(false);
97-
expect(divEle.classList.contains('activated')).toEqual(false);
97+
expect(divEle.classList.contains('activated')).toEqual(true);
9898
});
9999

100100
});

0 commit comments

Comments
 (0)