diff --git a/js/utils/activator.js b/js/utils/activator.js index 3a76c8f476f..7b9f9145792 100644 --- a/js/utils/activator.js +++ b/js/utils/activator.js @@ -18,7 +18,7 @@ var ele = e.target; var eleToActivate; - for(var x=0; x<4; x++) { + for(var x=0; x<6; x++) { if(!ele || ele.nodeType !== 1) break; if(eleToActivate && ele.classList.contains('item')) { eleToActivate = ele; @@ -32,6 +32,10 @@ eleToActivate = ele; break; } + // no sense climbing past these + if(ele.classList.contains('pane') || ele.tagName == 'BODY' || ele.tagName == 'ION-CONTENT'){ + break; + } ele = ele.parentElement; } diff --git a/test/unit/utils/activator.unit.js b/test/unit/utils/activator.unit.js index 1dde2e63d61..49043582fa6 100644 --- a/test/unit/utils/activator.unit.js +++ b/test/unit/utils/activator.unit.js @@ -76,6 +76,35 @@ describe('Ionic Element Activator', function() { expect(itemContentEle.classList.contains('activated')).toEqual(false); expect(aEle.classList.contains('activated')).toEqual(true); }); + it('Should activate 5 levels up, but not 6', function() { + var itemEle = document.createElement('div'); + itemEle.className = 'item'; + + var itemContentEle = document.createElement('a'); + itemContentEle.className = 'item-content'; + itemEle.appendChild(itemContentEle); + + var div1 = document.createElement('div'); + itemContentEle.appendChild(div1); + var div2 = document.createElement('div'); + div1.appendChild(div2); + var div3 = document.createElement('div'); + div2.appendChild(div3); + var div4 = document.createElement('div'); + div3.appendChild(div4); + var div5 = document.createElement('div'); + div4.appendChild(div5); + var div6 = document.createElement('div'); + div5.appendChild(div6); + + var e = { target: div6 }; + ionic.activator.start(e); + expect(itemContentEle.classList.contains('activated')).toEqual(false); + + var e = { target: div5 }; + ionic.activator.start(e); + expect(itemContentEle.classList.contains('activated')).toEqual(true); + }); it('Should activate child "div.item-content div[ng-click]" of a .item', function() { var itemEle = document.createElement('div');