Merge pull request #553 from AlbertoMonteiro/master

Dialog: When destroy is called place the element back in original DOM position. Fixed #4980 - Dialog: Destroy should place element back in original DOM position
This commit is contained in:
Scott González 2011-12-15 12:59:39 -08:00
commit 76c7bf6c3f
2 changed files with 23 additions and 3 deletions

View File

@ -140,4 +140,13 @@ test("#6966: Escape key closes all dialogs, not the top one", function(){
d1.remove(); d1.remove();
}); });
test("#4980: Destroy should place element back in original DOM position", function(){
container = $('<div id="container"><div id="modal">Content</div></div>');
modal = container.find('#modal');
modal.dialog();
ok(!$.contains(container[0], modal[0]), 'dialog should move modal element to outside container element');
modal.dialog('destroy');
ok($.contains(container[0], modal[0]), 'dialog(destroy) should place element back in original DOM position');
});
})(jQuery); })(jQuery);

View File

@ -77,8 +77,11 @@ $.widget("ui.dialog", {
// #5742 - .attr() might return a DOMElement // #5742 - .attr() might return a DOMElement
if ( typeof this.originalTitle !== "string" ) { if ( typeof this.originalTitle !== "string" ) {
this.originalTitle = ""; this.originalTitle = "";
} }
this.oldPosition = {
parent: this.element.parent(),
index: this.element.parent().children().index( this.element )
};
this.options.title = this.options.title || this.originalTitle; this.options.title = this.options.title || this.originalTitle;
var self = this, var self = this,
options = self.options, options = self.options,
@ -168,7 +171,8 @@ $.widget("ui.dialog", {
}, },
_destroy: function() { _destroy: function() {
var self = this; var self = this, next,
oldPosition = this.oldPosition;
if ( self.overlay ) { if ( self.overlay ) {
self.overlay.destroy(); self.overlay.destroy();
@ -183,6 +187,13 @@ $.widget("ui.dialog", {
if ( self.originalTitle ) { if ( self.originalTitle ) {
self.element.attr( "title", self.originalTitle ); self.element.attr( "title", self.originalTitle );
} }
next = oldPosition.parent.children().eq( oldPosition.index );
if ( next.length ) {
next.before( self.element );
} else {
oldPosition.parent.append( self.element );
}
}, },
widget: function() { widget: function() {