]> source.dussan.org Git - jquery-ui.git/commitdiff
Effects: Adding a check to retain focused elements after wrapping and unwrapping...
authorCorey Frang <gnarf@gnarf.net>
Tue, 2 Aug 2011 21:54:24 +0000 (16:54 -0500)
committerCorey Frang <gnarf@gnarf.net>
Tue, 2 Aug 2011 21:54:24 +0000 (16:54 -0500)
tests/unit/effects/effects_core.js
ui/jquery.effects.core.js

index 7c20e22fe38bd1bb4f3adbbc5de168efdb467e30..2b4d684eb1a87a9ee9fab1670dcdf52bfcdb38ba 100644 (file)
@@ -150,4 +150,15 @@ asyncTest( "animateClass clears style properties when stopped", function() {
        start();
 });
 
+test( "createWrapper and removeWrapper retain focused elements (#7595)", function() {
+       expect( 2 );
+       var test = $( "div.hidden" ).show(),
+               input = $( "<input>" ).appendTo( test ).focus();
+
+       $.effects.createWrapper( test );
+       equal( document.activeElement, input[ 0 ], "Active element is still input after createWrapper" );
+       $.effects.removeWrapper( test );
+       equal( document.activeElement, input[ 0 ], "Active element is still input after removeWrapper" );
+})
+
 })(jQuery);
index b08cd6cf4615a9f07241891bc5ca271c0b147966..15d81b4b0d33273ad53940f010f8a2c7fb6bd833 100644 (file)
@@ -415,9 +415,16 @@ $.extend( $.effects, {
                        size = {
                                width: element.width(),
                                height: element.height()
-                       };
+                       },
+                       active = document.activeElement;
 
                element.wrap( wrapper );
+
+               // Fixes #7595 - Elements lose focus when wrapped.
+               if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
+                       $( active ).focus();
+               }
+
                wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually loose the reference to the wrapped element
 
                // transfer positioning properties to the wrapper
@@ -449,8 +456,18 @@ $.extend( $.effects, {
        },
 
        removeWrapper: function( element ) {
-               if ( element.parent().is( ".ui-effects-wrapper" ) )
-                       return element.parent().replaceWith( element );
+               var active = document.activeElement;
+
+               if ( element.parent().is( ".ui-effects-wrapper" ) ) {
+                       element.parent().replaceWith( element );
+
+                       // Fixes #7595 - Elements lose focus when wrapped.
+                       if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
+                               $( active ).focus();
+                       }
+               }
+
+
                return element;
        },