From 0dd9655c46ddd50576d52d5af7634a4b1b7a3329 Mon Sep 17 00:00:00 2001 From: valdrinkoshi Date: Fri, 1 Jul 2016 15:11:31 +0200 Subject: [PATCH] stop propagation of iron-overlay-opened/closed/canceled --- paper-menu-button.html | 9 +++++++- test/paper-menu-button.html | 41 +++++++++++++++++++++++++++++++++++-- 2 files changed, 47 insertions(+), 3 deletions(-) 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);