diff --git a/build/tasks/testswarm.js b/build/tasks/testswarm.js
index 0685315e6..96415aa74 100644
--- a/build/tasks/testswarm.js
+++ b/build/tasks/testswarm.js
@@ -15,6 +15,7 @@ var versions = {
"Core": "core/core.html",
"Datepicker": "datepicker/datepicker.html",
"Dialog": "dialog/dialog.html",
+ "Dialog_deprecated": "dialog/dialog_deprecated.html",
"Draggable": "draggable/draggable.html",
"Droppable": "droppable/droppable.html",
"Effects": "effects/effects.html",
diff --git a/tests/unit/all.html b/tests/unit/all.html
index 7581a737b..25116846f 100644
--- a/tests/unit/all.html
+++ b/tests/unit/all.html
@@ -22,6 +22,7 @@
"core/core.html",
"datepicker/datepicker.html",
"dialog/dialog.html",
+ "dialog/dialog_deprecated.html",
"draggable/draggable.html",
"droppable/droppable.html",
"effects/effects.html",
diff --git a/tests/unit/dialog/dialog.html b/tests/unit/dialog/dialog.html
index 0b5ca4856..5413e7cc1 100644
--- a/tests/unit/dialog/dialog.html
+++ b/tests/unit/dialog/dialog.html
@@ -5,6 +5,9 @@
jQuery UI Dialog Test Suite
+
diff --git a/tests/unit/dialog/dialog_deprecated.html b/tests/unit/dialog/dialog_deprecated.html
new file mode 100644
index 000000000..2a876ac73
--- /dev/null
+++ b/tests/unit/dialog/dialog_deprecated.html
@@ -0,0 +1,62 @@
+
+
+
+
+ jQuery UI Dialog Test Suite
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/unit/dialog/dialog_deprecated.js b/tests/unit/dialog/dialog_deprecated.js
new file mode 100644
index 000000000..06052b6bf
--- /dev/null
+++ b/tests/unit/dialog/dialog_deprecated.js
@@ -0,0 +1,23 @@
+module("dialog (deprecated): position opton with array");
+
+if ( !$.ui.ie ) {
+ test("position, right bottom on window w/array", function() {
+ expect( 2 );
+ var el = $('').dialog({ position: ["right", "bottom"] }),
+ dialog = el.dialog('widget'),
+ offset = dialog.offset();
+ closeEnough(offset.left, $(window).width() - dialog.outerWidth() + $(window).scrollLeft(), 1);
+ closeEnough(offset.top, $(window).height() - dialog.outerHeight() + $(window).scrollTop(), 1);
+ el.remove();
+ });
+}
+
+test("position, offset from top left w/array", function() {
+ expect( 2 );
+ var el = $('').dialog({ position: [10, 10] }),
+ dialog = el.dialog('widget'),
+ offset = dialog.offset();
+ closeEnough(offset.left, 10 + $(window).scrollLeft(), 1);
+ closeEnough(offset.top, 10 + $(window).scrollTop(), 1);
+ el.remove();
+});
diff --git a/tests/unit/dialog/dialog_options.js b/tests/unit/dialog/dialog_options.js
index beb60a642..4e11ecf62 100644
--- a/tests/unit/dialog/dialog_options.js
+++ b/tests/unit/dialog/dialog_options.js
@@ -331,16 +331,6 @@ if ( !$.ui.ie ) {
el.remove();
});
- test("position, right bottom on window w/array", function() {
- expect( 2 );
- var el = $('').dialog({ position: ["right", "bottom"] }),
- dialog = el.dialog('widget'),
- offset = dialog.offset();
- closeEnough(offset.left, $(window).width() - dialog.outerWidth() + $(window).scrollLeft(), 1);
- closeEnough(offset.top, $(window).height() - dialog.outerHeight() + $(window).scrollTop(), 1);
- el.remove();
- });
-
test("position, right bottom at right bottom via ui.position args", function() {
expect( 2 );
var el = $('').dialog({
@@ -359,16 +349,6 @@ if ( !$.ui.ie ) {
}
-test("position, offset from top left w/array", function() {
- expect( 2 );
- var el = $('').dialog({ position: [10, 10] }),
- dialog = el.dialog('widget'),
- offset = dialog.offset();
- closeEnough(offset.left, 10 + $(window).scrollLeft(), 1);
- closeEnough(offset.top, 10 + $(window).scrollTop(), 1);
- el.remove();
-});
-
test("position, at another element", function() {
expect( 4 );
var parent = $('').css({
diff --git a/ui/jquery.ui.dialog.js b/ui/jquery.ui.dialog.js
index 8e5ca66c1..781fa8fa6 100644
--- a/ui/jquery.ui.dialog.js
+++ b/ui/jquery.ui.dialog.js
@@ -211,7 +211,7 @@ $.widget("ui.dialog", {
this.opener = $( this.document[ 0 ].activeElement );
this._size();
- this._position( this.options.position );
+ this._position();
if ( this.options.modal ) {
this.overlay = new $.ui.dialog.overlay( this );
}
@@ -500,38 +500,24 @@ $.widget("ui.dialog", {
}
},
- _position: function( position ) {
- var myAt = [],
- offset = [ 0, 0 ],
+ _position: function() {
+ var position = this.options.position,
+ myAt = [],
isVisible;
if ( position ) {
- // TODO we don't support 1.3.2 anymore, clean this mess up
- // deep extending converts arrays to objects in jQuery <= 1.3.2 :-(
- // if (typeof position == 'string' || $.isArray(position)) {
- // myAt = $.isArray(position) ? position : position.split(' ');
-
- if ( typeof position === "string" || (typeof position === "object" && "0" in position ) ) {
- myAt = position.split ? position.split( " " ) : [ position[ 0 ], position[ 1 ] ];
+ if ( typeof position === "string" ) {
+ myAt = position.split( " " );
if ( myAt.length === 1 ) {
myAt[ 1 ] = myAt[ 0 ];
}
-
- $.each( [ "left", "top" ], function( i, offsetPosition ) {
- if ( +myAt[ i ] === myAt[ i ] ) {
- offset[ i ] = myAt[ i ];
- myAt[ i ] = offsetPosition;
- }
- });
-
position = {
- my: myAt[0] + (offset[0] < 0 ? offset[0] : "+" + offset[0]) + " " +
- myAt[1] + (offset[1] < 0 ? offset[1] : "+" + offset[1]),
+ my: myAt[0] + " " + myAt[1],
at: myAt.join( " " )
};
+ position = $.extend( {}, $.ui.dialog.prototype.options.position, position );
}
- position = $.extend( {}, $.ui.dialog.prototype.options.position, position );
} else {
position = $.ui.dialog.prototype.options.position;
}
@@ -610,7 +596,7 @@ $.widget("ui.dialog", {
}
if ( key === "position" ) {
- this._position( value );
+ this._position();
}
if ( key === "resizable" ) {
@@ -744,4 +730,52 @@ $.extend( $.ui.dialog.overlay.prototype, {
}
});
+// DEPRECATED
+if ( $.uiBackCompat !== false ) {
+ // position option with array notation
+ // just override with old implementation
+ $.ui.dialog.prototype._position = function() {
+ var position = this.options.position,
+ myAt = [],
+ offset = [ 0, 0 ],
+ isVisible;
+
+ if ( position ) {
+ if ( typeof position === "string" || (typeof position === "object" && "0" in position ) ) {
+ myAt = position.split ? position.split( " " ) : [ position[ 0 ], position[ 1 ] ];
+ if ( myAt.length === 1 ) {
+ myAt[ 1 ] = myAt[ 0 ];
+ }
+
+ $.each( [ "left", "top" ], function( i, offsetPosition ) {
+ if ( +myAt[ i ] === myAt[ i ] ) {
+ offset[ i ] = myAt[ i ];
+ myAt[ i ] = offsetPosition;
+ }
+ });
+
+ position = {
+ my: myAt[0] + (offset[0] < 0 ? offset[0] : "+" + offset[0]) + " " +
+ myAt[1] + (offset[1] < 0 ? offset[1] : "+" + offset[1]),
+ at: myAt.join( " " )
+ };
+ }
+
+ position = $.extend( {}, $.ui.dialog.prototype.options.position, position );
+ } else {
+ position = $.ui.dialog.prototype.options.position;
+ }
+
+ // need to show the dialog to get the actual offset in the position plugin
+ isVisible = this.uiDialog.is( ":visible" );
+ if ( !isVisible ) {
+ this.uiDialog.show();
+ }
+ this.uiDialog.position( position );
+ if ( !isVisible ) {
+ this.uiDialog.hide();
+ }
+ };
+}
+
}( jQuery ) );