Ticket #4716: dialog-position.patch

File dialog-position.patch, 2.2 KB (added by Scott González, 12 years ago)
  • Users/sgonzale/Documents/workspace/jQuery

     
    1010 * Depends:
    1111 *      ui.core.js
    1212 *      ui.draggable.js
     13 *  ui.position.js
    1314 *      ui.resizable.js
    1415 */
    1516(function($) {
     
    377378        },
    378379
    379380        _position: function(pos) {
    380                 var wnd = $(window), doc = $(document),
    381                         pTop = doc.scrollTop(), pLeft = doc.scrollLeft(),
    382                         minTop = pTop,
    383                         uiDialog = this.uiDialog;
    384 
    385                 if ($.inArray(pos, ['center','top','right','bottom','left']) >= 0) {
    386                         pos = [
    387                                 pos == 'right' || pos == 'left' ? pos : 'center',
    388                                 pos == 'top' || pos == 'bottom' ? pos : 'middle'
    389                         ];
     381                var offset = [0, 0];
     382                pos = $.isArray(pos) ? pos : pos.split(' ');
     383                if (pos.length == 1) {
     384                        pos[1] = pos[0];
    390385                }
    391                 if (pos.constructor != Array) {
    392                         pos = ['center', 'middle'];
    393                 }
    394                 if (pos[0].constructor == Number) {
    395                         pLeft += pos[0];
    396                 } else {
    397                         switch (pos[0]) {
    398                                 case 'left':
    399                                         pLeft += 0;
    400                                         break;
    401                                 case 'right':
    402                                         pLeft += wnd.width() - uiDialog.outerWidth();
    403                                         break;
    404                                 default:
    405                                 case 'center':
    406                                         pLeft += (wnd.width() - uiDialog.outerWidth()) / 2;
     386
     387                $.each(['left', 'top'], function(i, offsetPosition) {
     388                        if (typeof pos[i] == 'number') {
     389                                offset[i] = pos[i];
     390                                pos[i] = offsetPosition;
    407391                        }
    408                 }
    409                 if (pos[1].constructor == Number) {
    410                         pTop += pos[1];
    411                 } else {
    412                         switch (pos[1]) {
    413                                 case 'top':
    414                                         pTop += 0;
    415                                         break;
    416                                 case 'bottom':
    417                                         pTop += wnd.height() - uiDialog.outerHeight();
    418                                         break;
    419                                 default:
    420                                 case 'middle':
    421                                         pTop += (wnd.height() - uiDialog.outerHeight()) / 2;
    422                         }
    423                 }
     392                });
    424393
    425                 // prevent the dialog from being too high (make sure the titlebar
    426                 // is accessible)
    427                 pTop = Math.max(pTop, minTop);
    428                 uiDialog.css({top: pTop, left: pLeft});
     394                this.uiDialog.position({
     395                        my: pos.join(' '),
     396                        at: pos.join(' '),
     397                        of: window,
     398                        offset: offset.join(' '),
     399                        collision: 'fit'
     400                });
    429401        },
    430402
    431403        _setData: function(key, value){