diff --git a/paper-menu-button.html b/paper-menu-button.html index 55f71cb..d914e19 100644 --- a/paper-menu-button.html +++ b/paper-menu-button.html @@ -305,7 +305,10 @@ }, listeners: { - 'iron-select': '_onIronSelect' + 'iron-select': '_onIronSelect', + 'iron-overlay-opened': '__stopEventPropagation', + 'iron-overlay-closed': '__stopEventPropagation', + 'iron-overlay-canceled': '__stopEventPropagation' }, /** @@ -412,6 +415,10 @@ if (path.indexOf(trigger) > -1) { event.preventDefault(); } + }, + + __stopEventPropagation: function(event) { + event.stopPropagation(); } }); diff --git a/test/paper-menu-button.html b/test/paper-menu-button.html index 5652625..9b68c8a 100644 --- a/test/paper-menu-button.html +++ b/test/paper-menu-button.html @@ -86,7 +86,7 @@ MockInteractions.tap(trigger); }); }); - + MockInteractions.tap(trigger); }); @@ -107,6 +107,43 @@ expect(menuButton.hasAttribute('aria-haspopup')).to.be.equal(true); }); + test('iron-overlay-opened event propagation is stopped', function(done) { + var spy = sinon.stub(); + Polymer.dom(menuButton).parentNode.addEventListener('iron-overlay-opened', spy); + menuButton.opened = true; + Polymer.Base.async(function() { + expect(spy.called).to.be.false; + done(); + }, 10); + }); + + test('iron-overlay-closed event propagation is stopped', function(done) { + var spy = sinon.stub(); + Polymer.dom(menuButton).parentNode.addEventListener('iron-overlay-closed', spy); + menuButton.opened = true; + Polymer.Base.async(function() { + menuButton.opened = false; + Polymer.Base.async(function() { + expect(spy.called).to.be.false; + done(); + }, 10); + }, 10); + }); + + test('iron-overlay-canceled event propagation is stopped', function(done) { + var spy = sinon.stub(); + Polymer.dom(menuButton).parentNode.addEventListener('iron-overlay-canceled', spy); + menuButton.opened = true; + Polymer.Base.async(function() { + // Will cause cancel to happen + MockInteractions.tap(menuButton); + Polymer.Base.async(function() { + expect(spy.called).to.be.false; + done(); + }, 10); + }, 10); + }); + }); suite('when there are two buttons', function() { @@ -150,7 +187,7 @@ Polymer.Base.async(function() { MockInteractions.tap(otherTrigger); }); - + Polymer.Base.async(function() { expect(firstClosed).to.be.equal(true);