Skip to content
Permalink
Browse files

Dialog: Follow-up to 9fe3a62 - also deprecate string notation for pos…

…ition option.
  • Loading branch information...
jzaefferer committed Nov 21, 2012
1 parent f3525af commit a09f5c07f591d0ef198f1a36fab9d4b6061ecbc6
Showing with 72 additions and 93 deletions.
  1. +31 −1 tests/unit/dialog/dialog_deprecated.js
  2. +0 −32 tests/unit/dialog/dialog_options.js
  3. +41 −60 ui/jquery.ui.dialog.js
@@ -1,4 +1,4 @@
module("dialog (deprecated): position opton with array");
module("dialog (deprecated): position option with string and array");

if ( !$.ui.ie ) {
test("position, right bottom on window w/array", function() {
@@ -10,6 +10,16 @@ if ( !$.ui.ie ) {
closeEnough(offset.top, $(window).height() - dialog.outerHeight() + $(window).scrollTop(), 1);
el.remove();
});

test("position, right bottom on window", function() {
expect( 2 );
var el = $('<div></div>').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() {
@@ -21,3 +31,23 @@ test("position, offset from top left w/array", function() {
closeEnough(offset.top, 10 + $(window).scrollTop(), 1);
el.remove();
});

test("position, top on window", function() {
expect( 2 );
var el = $('<div></div>').dialog({ position: "top" }),
dialog = el.dialog('widget'),
offset = dialog.offset();
closeEnough(offset.left, Math.round($(window).width() / 2 - dialog.outerWidth() / 2) + $(window).scrollLeft(), 1);
closeEnough(offset.top, $(window).scrollTop(), 1);
el.remove();
});

test("position, left on window", function() {
expect( 2 );
var el = $('<div></div>').dialog({ position: "left" }),
dialog = el.dialog('widget'),
offset = dialog.offset();
closeEnough(offset.left, 0, 1);
closeEnough(offset.top, Math.round($(window).height() / 2 - dialog.outerHeight() / 2) + $(window).scrollTop(), 1);
el.remove();
});
@@ -298,39 +298,8 @@ test("position, default center on window", function() {
el.remove();
});

test("position, top on window", function() {
expect( 2 );
var el = $('<div></div>').dialog({ position: "top" }),
dialog = el.dialog('widget'),
offset = dialog.offset();
closeEnough(offset.left, Math.round($(window).width() / 2 - dialog.outerWidth() / 2) + $(window).scrollLeft(), 1);
closeEnough(offset.top, $(window).scrollTop(), 1);
el.remove();
});

test("position, left on window", function() {
expect( 2 );
var el = $('<div></div>').dialog({ position: "left" }),
dialog = el.dialog('widget'),
offset = dialog.offset();
closeEnough(offset.left, 0, 1);
closeEnough(offset.top, Math.round($(window).height() / 2 - dialog.outerHeight() / 2) + $(window).scrollTop(), 1);
el.remove();
});

// todo: figure out these fails in IE7
if ( !$.ui.ie ) {

test("position, right bottom on window", function() {
expect( 2 );
var el = $('<div></div>').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 = $('<div></div>').dialog({
@@ -346,7 +315,6 @@ if ( !$.ui.ie ) {
closeEnough(offset.top, $(window).height() - dialog.outerHeight() + $(window).scrollTop(), 1);
el.remove();
});

}

test("position, at another element", function() {
@@ -495,33 +495,12 @@ $.widget("ui.dialog", {
},

_position: function() {
var position = this.options.position,
myAt = [],
isVisible;

if ( position ) {
if ( typeof position === "string" ) {
myAt = position.split( " " );
if ( myAt.length === 1 ) {
myAt[ 1 ] = myAt[ 0 ];
}
position = {
my: myAt[0] + " " + myAt[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" );
var isVisible = this.uiDialog.is( ":visible" );
if ( !isVisible ) {
this.uiDialog.show();
}
this.uiDialog.position( position );
this.uiDialog.position( this.options.position );
if ( !isVisible ) {
this.uiDialog.hide();
}
@@ -719,48 +698,50 @@ $.ui.dialog.overlay = {
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;
$.widget( "ui.dialog", $.ui.dialog, {
_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 ];
}
});

position = {
my: myAt[0] + (offset[0] < 0 ? offset[0] : "+" + offset[0]) + " " +
myAt[1] + (offset[1] < 0 ? offset[1] : "+" + offset[1]),
at: myAt.join( " " )
};
}
$.each( [ "left", "top" ], function( i, offsetPosition ) {
if ( +myAt[ i ] === myAt[ i ] ) {
offset[ i ] = myAt[ i ];
myAt[ i ] = offsetPosition;
}
});

position = $.extend( {}, $.ui.dialog.prototype.options.position, position );
} else {
position = $.ui.dialog.prototype.options.position;
}
position = {
my: myAt[0] + (offset[0] < 0 ? offset[0] : "+" + offset[0]) + " " +
myAt[1] + (offset[1] < 0 ? offset[1] : "+" + offset[1]),
at: myAt.join( " " )
};
}

// 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();
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 ) );

0 comments on commit a09f5c0

Please sign in to comment.
You can’t perform that action at this time.