]> source.dussan.org Git - jquery-ui.git/commitdiff
Dialog: Remove the instance-storing for the overlay, just create one whenever it...
authorJörn Zaefferer <joern.zaefferer@gmail.com>
Tue, 4 Dec 2012 00:08:34 +0000 (01:08 +0100)
committerJörn Zaefferer <joern.zaefferer@gmail.com>
Tue, 4 Dec 2012 00:08:34 +0000 (01:08 +0100)
tests/unit/dialog/dialog_tickets.js
ui/jquery.ui.dialog.js

index 655f1e4451e10abbba2d8b504d5e9050cddb63e0..389a243b36c169a5b014eb2f9827b70e7281516b 100644 (file)
@@ -107,17 +107,6 @@ test("#6137: dialog('open') causes form elements to reset on IE7", function() {
        d1.remove();
 });
 
-test("#6645: Missing element not found check in overlay", function(){
-       expect(2);
-       var d1 = $('<div title="dialog 1">Dialog 1</div>').dialog({modal: true}),
-               d2 = $('<div title="dialog 2">Dialog 2</div>').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');
-       d1.add(d2).remove();
-});
-
 // TODO merge this with the main destroy test
 test("#4980: Destroy should place element back in original DOM position", function(){
        expect( 2 );
index 382008e0823ffbc5b45da485cb09ab7ee808727d..77392cb1992e77ba193013c746a5f2438785173a 100644 (file)
@@ -661,13 +661,13 @@ $.widget("ui.dialog", {
                if ( !this.options.modal ) {
                        return;
                }
-               if ( $.ui.dialog.overlay.instances.length === 0 ) {
+               if ( $.ui.dialog.overlayInstances === 0 ) {
                        // prevent use of anchors and inputs
                        // we use a setTimeout in case the overlay is created from an
                        // event that we're going to be cancelling (see #2804)
                        setTimeout(function() {
                                // handle $(el).dialog().dialog('close') (see #4065)
-                               if ( $.ui.dialog.overlay.instances.length ) {
+                               if ( $.ui.dialog.overlayInstances ) {
                                        $( document ).bind( "focusin.dialog-overlay", function( event ) {
                                                if ( !$( event.target ).closest( ".ui-dialog").length ) {
                                                        event.preventDefault();
@@ -678,40 +678,27 @@ $.widget("ui.dialog", {
                        }, 1 );
                }
 
-               // reuse old instances due to IE memory leak with alpha transparency (see #5185)
-               var $el = this.overlay = ( $.ui.dialog.overlay.oldInstances.pop() || $( "<div>" ).addClass( "ui-widget-overlay ui-front" ) );
-
+               var $el = this.overlay = $( "<div>" ).addClass( "ui-widget-overlay ui-front" );
                $el.appendTo( this.document[ 0 ].body );
-
                this._on( $el, {
                        mousedown: "_keepFocus"
                });
-
-               $.ui.dialog.overlay.instances.push( $el );
+               $.ui.dialog.overlayInstances += 1;
        },
 
        _destroyOverlay: function() {
                if ( !this.options.modal ) {
                        return;
                }
-               var indexOf = $.inArray( this.overlay, $.ui.dialog.overlay.instances );
-
-               if ( indexOf !== -1 ) {
-                       $.ui.dialog.overlay.oldInstances.push( $.ui.dialog.overlay.instances.splice( indexOf, 1 )[ 0 ] );
-               }
-
-               if ( $.ui.dialog.overlay.instances.length === 0 ) {
+               $.ui.dialog.overlayInstances -= 1;
+               if ( $.ui.dialog.overlayInstances === 0 ) {
                        $( [ document, window ] ).unbind( ".dialog-overlay" );
                }
-
                this.overlay.remove();
        }
 });
 
-$.ui.dialog.overlay = {
-       instances: [],
-       oldInstances: []
-};
+$.ui.dialog.overlayInstances = 0;
 
 // DEPRECATED
 if ( $.uiBackCompat !== false ) {