diff --git a/apps/system/js/action_menu.js b/apps/system/js/action_menu.js index 240d391218cd..1f7ca8b8ac1d 100644 --- a/apps/system/js/action_menu.js +++ b/apps/system/js/action_menu.js @@ -68,6 +68,10 @@ }; ActionMenu.prototype.hide = function() { + if (!this.active) { + return; + } + eventSafety(this.form, 'transitionend', function doHide(e) { this.form.style.position = ''; SystemDialog.prototype.hide.apply(this); diff --git a/apps/system/test/unit/action_menu_test.js b/apps/system/test/unit/action_menu_test.js index 92078fd30873..9fb783963b8d 100644 --- a/apps/system/test/unit/action_menu_test.js +++ b/apps/system/test/unit/action_menu_test.js @@ -99,6 +99,11 @@ suite('ActionMenu', function() { }); suite('Hide > ', function() { + + setup(function() { + actionMenu.active = true; + }); + test('Should force position:fixed during the transition', function() { actionMenu.hide(); assert.equal(actionMenu.form.style.position, 'fixed'); @@ -114,6 +119,14 @@ suite('ActionMenu', function() { assert.isTrue(systemHideStub.called); assert.isFalse(actionMenu.form.classList.contains('visible')); }); + + test('Does nothing if not active', function() { + actionMenu.active = false; + actionMenu.hide(); + var evt = new CustomEvent('transitionend'); + actionMenu.form.dispatchEvent(evt); + assert.isFalse(systemHideStub.called); + }); }); suite('Events > ', function() {