From 0a5a9090f827cd186ac486344327bcbb3901fd34 Mon Sep 17 00:00:00 2001 From: Scott González Date: Thu, 19 Apr 2012 10:27:06 -0400 Subject: Tests: Lint. --- tests/unit/dialog/dialog_tickets.js | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) (limited to 'tests/unit/dialog/dialog_tickets.js') diff --git a/tests/unit/dialog/dialog_tickets.js b/tests/unit/dialog/dialog_tickets.js index bd9056153..a169bd1a5 100644 --- a/tests/unit/dialog/dialog_tickets.js +++ b/tests/unit/dialog/dialog_tickets.js @@ -12,12 +12,6 @@ asyncTest( "#3123: Prevent tabbing out of modal dialogs", function() { inputs = el.find( "input" ), widget = el.dialog( "widget" ); - inputs.eq( 1 ).focus(); - equal( document.activeElement, inputs[1], "Focus set on second input" ); - inputs.eq( 1 ).simulate( "keydown", { keyCode: $.ui.keyCode.TAB }); - - setTimeout( checkTab, 2 ); - function checkTab() { ok( $.contains( widget, document.activeElement ), "Tab key event moved focus within the modal" ); @@ -32,14 +26,21 @@ asyncTest( "#3123: Prevent tabbing out of modal dialogs", function() { el.remove(); start(); } + + inputs.eq( 1 ).focus(); + equal( document.activeElement, inputs[1], "Focus set on second input" ); + inputs.eq( 1 ).simulate( "keydown", { keyCode: $.ui.keyCode.TAB }); + + setTimeout( checkTab, 2 ); }); test("#4826: setting resizable false toggles resizable on dialog", function() { expect(6); + var i; el = $('
').dialog({ resizable: false }); shouldnotresize("[default]"); - for (var i=0; i<2; i++) { + for (i=0; i<2; i++) { el.dialog('close').dialog('open'); shouldnotresize('initialized with resizable false toggle ('+ (i+1) +')'); } @@ -47,7 +48,7 @@ test("#4826: setting resizable false toggles resizable on dialog", function() { el = $('
').dialog({ resizable: true }); shouldresize("[default]"); - for (var i=0; i<2; i++) { + for (i=0; i<2; i++) { el.dialog('close').dialog('option', 'resizable', false).dialog('open'); shouldnotresize('set option resizable false toggle ('+ (i+1) +')'); } @@ -108,7 +109,7 @@ test("#6137: dialog('open') causes form elements to reset on IE7", function() { test("#6645: Missing element not found check in overlay", function(){ expect(2); d1 = $('
Dialog 1
').dialog({modal: true}); - d2 = $('
Dialog 2
').dialog({modal: true, close: function(){ d2.remove()}}); + d2 = $('
Dialog 2
').dialog({modal: true, close: function(){ d2.remove(); }}); equal($.ui.dialog.overlay.instances.length, 2, 'two overlays created'); d2.dialog('close'); equal($.ui.dialog.overlay.instances.length, 1, 'one overlay remains after closing the 2nd overlay'); @@ -119,7 +120,7 @@ test("#6966: Escape key closes all dialogs, not the top one", function(){ expect(8); // test with close function removing dialog d1 = $('
Dialog 1
').dialog({modal: true}); - d2 = $('
Dialog 2
').dialog({modal: true, close: function(){ d2.remove()}}); + d2 = $('
Dialog 2
').dialog({modal: true, close: function(){ d2.remove(); }}); ok(d1.dialog("isOpen"), 'first dialog is open'); ok(d2.dialog("isOpen"), 'second dialog is open'); d2.simulate("keydown", {keyCode: $.ui.keyCode.ESCAPE}); -- cgit v1.2.3 From cab4c467d9c12ec61a652c3bf68eedd166319b34 Mon Sep 17 00:00:00 2001 From: Jay Merrifield Date: Thu, 3 May 2012 19:02:23 -0400 Subject: Dialog: Handle escape for all overlays. Fixes #8300 - Dialog: Incorrect behavior for ESCAPE with multiple modal dialogs. --- tests/unit/dialog/dialog_tickets.js | 62 +++++++++++++++++++++++++++++++++---- ui/jquery.ui.dialog.js | 26 +++++++++------- 2 files changed, 71 insertions(+), 17 deletions(-) (limited to 'tests/unit/dialog/dialog_tickets.js') diff --git a/tests/unit/dialog/dialog_tickets.js b/tests/unit/dialog/dialog_tickets.js index a169bd1a5..98983cf33 100644 --- a/tests/unit/dialog/dialog_tickets.js +++ b/tests/unit/dialog/dialog_tickets.js @@ -117,26 +117,76 @@ test("#6645: Missing element not found check in overlay", function(){ }); test("#6966: Escape key closes all dialogs, not the top one", function(){ - expect(8); - // test with close function removing dialog - d1 = $('
Dialog 1
').dialog({modal: true}); + expect(24); + // test with close function removing dialog triggered through the overlay + d1 = $('
Dialog 1
').dialog({modal: true, close: function(){ d1.remove(); }}); + d2 = $('
Dialog 2
').dialog({modal: true, close: function(){ d2.remove(); }}); + + ok(d1.data('dialog') && d1.dialog('isOpen'), 'first dialog is open'); + ok(d2.data('dialog') && d2.dialog('isOpen'), 'second dialog is open'); + + $( document ).simulate('keydown', {keyCode: $.ui.keyCode.ESCAPE}); + ok(d1.data('dialog') && d1.dialog('isOpen'), 'first dialog still open'); + ok(!d2.data('dialog'), 'second dialog is closed'); + + $( document ).simulate('keydown', {keyCode: $.ui.keyCode.ESCAPE}); + ok(!d1.data('dialog'), 'first dialog is closed'); + ok(!d2.data('dialog'), 'second dialog is closed'); + + d2.remove(); + d1.remove(); + + // test with close function removing dialog triggered through the dialog + d1 = $('
Dialog 1
').dialog({modal: true, close: function(){ d1.remove(); }}); d2 = $('
Dialog 2
').dialog({modal: true, close: function(){ d2.remove(); }}); + + ok(d1.data('dialog') && d1.dialog('isOpen'), 'first dialog is open'); + ok(d2.data('dialog') && d2.dialog('isOpen'), 'second dialog is open'); + + d2.simulate('keydown', {keyCode: $.ui.keyCode.ESCAPE}); + ok(d1.data('dialog') && d1.dialog('isOpen'), 'first dialog still open'); + ok(!d2.data('dialog'), 'second dialog is closed'); + + d1.simulate('keydown', {keyCode: $.ui.keyCode.ESCAPE}); + ok(!d1.data('dialog'), 'first dialog is closed'); + ok(!d2.data('dialog'), 'second dialog is closed'); + + d2.remove(); + d1.remove(); + + // test without close function removing dialog + d1 = $('
Dialog 1
').dialog({modal: true}); + d2 = $('
Dialog 2
').dialog({modal: true}); + ok(d1.dialog("isOpen"), 'first dialog is open'); ok(d2.dialog("isOpen"), 'second dialog is open'); + d2.simulate("keydown", {keyCode: $.ui.keyCode.ESCAPE}); ok(d1.dialog("isOpen"), 'first dialog still open'); - ok(!d2.data('dialog'), 'second dialog is closed'); + ok(!d2.dialog("isOpen"), 'second dialog is closed'); + + d1.simulate("keydown", {keyCode: $.ui.keyCode.ESCAPE}); + ok(!d1.dialog("isOpen"), 'first dialog is closed'); + ok(!d2.dialog("isOpen"), 'second dialog is closed'); + d2.remove(); d1.remove(); - // test without close function removing dialog + // test without close function removing dialog triggered through the overlay d1 = $('
Dialog 1
').dialog({modal: true}); d2 = $('
Dialog 2
').dialog({modal: true}); + ok(d1.dialog("isOpen"), 'first dialog is open'); ok(d2.dialog("isOpen"), 'second dialog is open'); - d2.simulate("keydown", {keyCode: $.ui.keyCode.ESCAPE}); + + $( document ).simulate("keydown", {keyCode: $.ui.keyCode.ESCAPE}); ok(d1.dialog("isOpen"), 'first dialog still open'); ok(!d2.dialog("isOpen"), 'second dialog is closed'); + + $( document ).simulate("keydown", {keyCode: $.ui.keyCode.ESCAPE}); + ok(!d1.dialog("isOpen"), 'first dialog is closed'); + ok(!d2.dialog("isOpen"), 'second dialog is closed'); + d2.remove(); d1.remove(); }); diff --git a/ui/jquery.ui.dialog.js b/ui/jquery.ui.dialog.js index 144cf9725..45ee37789 100644 --- a/ui/jquery.ui.dialog.js +++ b/ui/jquery.ui.dialog.js @@ -713,21 +713,25 @@ $.extend( $.ui.dialog.overlay, { } }, 1 ); - // allow closing by pressing the escape key - $( document ).bind( "keydown.dialog-overlay", function( event ) { - if ( dialog.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode && - event.keyCode === $.ui.keyCode.ESCAPE ) { - - dialog.close( event ); - event.preventDefault(); - } - }); - // handle window resize $( window ).bind( "resize.dialog-overlay", $.ui.dialog.overlay.resize ); } - + var $el = ( this.oldInstances.pop() || $( "
" ).addClass( "ui-widget-overlay" ) ); + + // allow closing by pressing the escape key + $( document ).bind( "keydown.dialog-overlay", function( event ) { + var instances = $.ui.dialog.overlay.instances; + // only react to the event if we're the top overlay + if ( instances.length !== 0 && instances[ instances.length - 1 ] === $el && + dialog.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode && + event.keyCode === $.ui.keyCode.ESCAPE ) { + + dialog.close( event ); + event.preventDefault(); + } + }); + $el.appendTo( document.body ).css({ width: this.width(), height: this.height() -- cgit v1.2.3