diff options
author | Scott González <scott.gonzalez@gmail.com> | 2012-12-07 14:54:21 -0500 |
---|---|---|
committer | Scott González <scott.gonzalez@gmail.com> | 2012-12-07 14:54:21 -0500 |
commit | 70b16ef445d8f9947fd414894d97673706ee8c6f (patch) | |
tree | 92eae7fe43e1488dd7a1e9e3840cd7cc5c247b45 | |
parent | da17a232ca554254eabd3583805b381f6b525ec5 (diff) | |
download | jquery-ui-70b16ef445d8f9947fd414894d97673706ee8c6f.tar.gz jquery-ui-70b16ef445d8f9947fd414894d97673706ee8c6f.zip |
Dialog: Added appendTo option. Fixes #7948 - Dialog: Allow dialog to be attached to a element other than body.
-rw-r--r-- | tests/unit/dialog/dialog.html | 2 | ||||
-rw-r--r-- | tests/unit/dialog/dialog_common.js | 1 | ||||
-rw-r--r-- | tests/unit/dialog/dialog_options.js | 41 | ||||
-rw-r--r-- | ui/jquery.ui.dialog.js | 15 |
4 files changed, 58 insertions, 1 deletions
diff --git a/tests/unit/dialog/dialog.html b/tests/unit/dialog/dialog.html index cdc846478..8f2583ce1 100644 --- a/tests/unit/dialog/dialog.html +++ b/tests/unit/dialog/dialog.html @@ -61,6 +61,8 @@ <label for="favorite-food">Favorite food</label><input id="favorite-food"> </div> </div> + <div class="wrap" id="wrap1"></div> + <div class="wrap" id="wrap2"></div> </div> </body> </html> diff --git a/tests/unit/dialog/dialog_common.js b/tests/unit/dialog/dialog_common.js index 47fff1013..9657a9887 100644 --- a/tests/unit/dialog/dialog_common.js +++ b/tests/unit/dialog/dialog_common.js @@ -1,5 +1,6 @@ TestHelpers.commonWidgetTests( "dialog", { defaults: { + appendTo: "body", autoOpen: true, buttons: {}, closeOnEscape: true, diff --git a/tests/unit/dialog/dialog_options.js b/tests/unit/dialog/dialog_options.js index fd7d91827..19e69b29a 100644 --- a/tests/unit/dialog/dialog_options.js +++ b/tests/unit/dialog/dialog_options.js @@ -5,6 +5,47 @@ module("dialog: options"); +test( "appendTo", function() { + expect( 8 ); + var detached = $( "<div>" ), + element = $( "#dialog1" ).dialog(); + equal( element.dialog( "widget" ).parent()[0], document.body, "defaults to body" ); + element.dialog( "destroy" ); + + element.dialog({ + appendTo: ".wrap" + }); + equal( element.dialog( "widget" ).parent()[0], $( "#wrap1" )[0], "first found element" ); + equal( $( "#wrap2 .ui-dialog" ).length, 0, "only appends to one element" ); + element.dialog( "destroy" ); + + element.dialog({ + appendTo: null + }); + equal( element.dialog( "widget" ).parent()[0], document.body, "null" ); + element.dialog( "destroy" ); + + element.dialog({ autoOpen: false }).dialog( "option", "appendTo", "#wrap1" ).dialog( "open" ); + equal( element.dialog( "widget" ).parent()[0], $( "#wrap1" )[0], "modified after init" ); + element.dialog( "destroy" ); + + element.dialog({ + appendTo: detached + }); + equal( element.dialog( "widget" ).parent()[0], detached[0], "detached jQuery object" ); + element.dialog( "destroy" ); + + element.dialog({ + appendTo: detached[0] + }); + equal( element.dialog( "widget" ).parent()[0], detached[0], "detached DOM element" ); + element.dialog( "destroy" ); + + element.dialog({ autoOpen: false }).dialog( "option", "appendTo", detached ); + equal( element.dialog( "widget" ).parent()[0], detached[0], "detached DOM element via option()" ); + element.dialog( "destroy" ); +}); + test("autoOpen", function() { expect(2); diff --git a/ui/jquery.ui.dialog.js b/ui/jquery.ui.dialog.js index b2b8be8c0..939571a68 100644 --- a/ui/jquery.ui.dialog.js +++ b/ui/jquery.ui.dialog.js @@ -39,6 +39,7 @@ var uiDialogClasses = "ui-dialog ui-widget ui-widget-content ui-corner-all ui-fr $.widget("ui.dialog", { version: "@VERSION", options: { + appendTo: "body", autoOpen: true, buttons: {}, closeOnEscape: true, @@ -124,6 +125,14 @@ $.widget("ui.dialog", { } }, + _appendTo: function() { + var element = this.options.appendTo; + if ( element && (element.jquery || element.nodeType) ) { + return $( element ); + } + return this.document.find( element || "body" ).eq( 0 ); + }, + _destroy: function() { var next, oldPosition = this.oldPosition; @@ -276,7 +285,7 @@ $.widget("ui.dialog", { tabIndex: -1, role: "dialog" }) - .appendTo( this.document[ 0 ].body ); + .appendTo( this._appendTo() ); this._on( this.uiDialog, { keydown: function( event ) { @@ -569,6 +578,10 @@ $.widget("ui.dialog", { this._super( key, value ); + if ( key === "appendTo" ) { + this.uiDialog.appendTo( this._appendTo() ); + } + if ( key === "buttons" ) { this._createButtons(); } |