Bug Tracker

Opened 14 years ago

Closed 14 years ago

#1876 closed enhancement (fixed)

ui.dialog.js - Dialog Positioning Improvement

Reported by: ALLPRO Owned by: rworth
Priority: minor Milestone: 1.2.2
Component: ui Version: 1.2.1
Keywords: dialog Cc:
Blocked by: Blocking:


The current code for positioning a dialog window does not work if the dialog source DIV is 'hidden', which is likely to be a common way of using the dialog component. (I put my dialogs inside a hidden container div.) The problem is that you cannot 'measure' a div that is not displayed. This prevents the proper positioning of the dialog, such as 'center'.

There is a very simple solution - set...

display: block; visibility: hidden

...before measuring width and height. This allows dimensions to be taken without making the DIV visible.

Here is the modified 'open' code - only the first and last lines are new...

this.open = function() {
  uiDialog.appendTo('body')'''.css({ visibility: 'hidden' })'''.show();
  var wnd = $(window), top = 0, left = 0;
  switch (options.position) {
    case 'center':
      top = (wnd.height() / 2) - (uiDialog.height() / 2);
      left = (wnd.width() / 2) - (uiDialog.width() / 2);
    case 'left':
      top = (wnd.height() / 2) - (uiDialog.height() / 2);
      left = 0;
    case 'top':
      top = 0;
      left = (wnd.width() / 2) - (uiDialog.width() / 2);
  uiDialog.css({ top: top, left: left, visibility: 'visible'  });

Change History (3)

comment:1 Changed 14 years ago by ALLPRO

NOTE: There is a typo in the code line above. I tried to bold a block of 'code', but it added the "' formatting code for bolding to the string instead. The first line should read:

uiDialog.appendTo('body').css({ visibility: 'hidden' }).show();

comment:2 Changed 14 years ago by paul

Owner: set to rworth

comment:3 Changed 14 years ago by rworth

Resolution: fixed
Status: newclosed

This seems to be working as of [4079]. Added a test to http://dev.jquery.com/view/trunk/ui/current/tests/uiTest.dialog.html for regressions.

Note: See TracTickets for help on using tickets.