aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ui/jquery.ui.dialog.js67
1 files changed, 26 insertions, 41 deletions
diff --git a/ui/jquery.ui.dialog.js b/ui/jquery.ui.dialog.js
index 781fa8fa6..15e19d7cf 100644
--- a/ui/jquery.ui.dialog.js
+++ b/ui/jquery.ui.dialog.js
@@ -122,9 +122,7 @@ $.widget("ui.dialog", {
var next,
oldPosition = this.oldPosition;
- if ( this.overlay ) {
- this.overlay.destroy();
- }
+ this._destroyOverlay();
this.uiDialog.hide();
this.element
.removeUniqueId()
@@ -168,9 +166,7 @@ $.widget("ui.dialog", {
this._isOpen = false;
- if ( this.overlay ) {
- this.overlay.destroy();
- }
+ this._destroyOverlay();
if ( !this.opener.filter( ":focusable" ).focus().length ) {
// Hiding a focused element doesn't trigger blur in WebKit
@@ -212,9 +208,7 @@ $.widget("ui.dialog", {
this._size();
this._position();
- if ( this.options.modal ) {
- this.overlay = new $.ui.dialog.overlay( this );
- }
+ this._createOverlay();
this._moveToTop( null, true );
this._show( this.uiDialog, this.options.show );
@@ -663,24 +657,13 @@ $.widget("ui.dialog", {
if (this.uiDialog.is( ":data(ui-resizable)" ) ) {
this.uiDialog.resizable( "option", "minHeight", this._minHeight() );
}
- }
-});
-
-$.extend($.ui.dialog, {
- // TODO move to dialog instance method
- overlay: function( dialog ) {
- this.$el = $.ui.dialog.overlay.create( dialog );
- }
-});
+ },
-// TODO get rid of instance list, at least the oldInstance stuff, and inline as dialog methods
-$.extend( $.ui.dialog.overlay, {
- instances: [],
- // reuse old instances due to IE memory leak with alpha transparency (see #5185)
- oldInstances: [],
- create: function( dialog ) {
- if ( this.instances.length === 0 ) {
- // TODO get rid of the timeout, which should remove the need for the #4065 workaround as well
+ _createOverlay: function() {
+ if ( !this.options.modal ) {
+ return;
+ }
+ if ( $.ui.dialog.overlay.instances.length === 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)
@@ -697,38 +680,40 @@ $.extend( $.ui.dialog.overlay, {
}, 1 );
}
- var $el = ( this.oldInstances.pop() || $( "<div>" ).addClass( "ui-widget-overlay ui-front" ) );
+ // 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" ) );
$el.appendTo( document.body );
- $el.bind( "mousedown", function( event ) {
- dialog._keepFocus( event );
+ this._on( $el, {
+ mousedown: "_keepFocus"
});
- this.instances.push( $el );
- return $el;
+ $.ui.dialog.overlay.instances.push( $el );
},
- destroy: function( $el ) {
- var indexOf = $.inArray( $el, this.instances );
+ _destroyOverlay: function() {
+ if ( !this.options.modal ) {
+ return;
+ }
+ var indexOf = $.inArray( this.overlay, $.ui.dialog.overlay.instances );
if ( indexOf !== -1 ) {
- this.oldInstances.push( this.instances.splice( indexOf, 1 )[ 0 ] );
+ $.ui.dialog.overlay.oldInstances.push( $.ui.dialog.overlay.instances.splice( indexOf, 1 )[ 0 ] );
}
- if ( this.instances.length === 0 ) {
+ if ( $.ui.dialog.overlay.instances.length === 0 ) {
$( [ document, window ] ).unbind( ".dialog-overlay" );
}
- $el.remove();
+ this.overlay.remove();
}
});
-$.extend( $.ui.dialog.overlay.prototype, {
- destroy: function() {
- $.ui.dialog.overlay.destroy( this.$el );
- }
-});
+$.ui.dialog.overlay = {
+ instances: [],
+ oldInstances: []
+};
// DEPRECATED
if ( $.uiBackCompat !== false ) {