Side navigation
#1876 closed enhancement (fixed)
Opened November 01, 2007 02:29AM UTC
Closed December 08, 2007 03:46PM UTC
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: |
Description
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); break; case 'left': top = (wnd.height() / 2) - (uiDialog.height() / 2); left = 0; break; case 'top': top = 0; left = (wnd.width() / 2) - (uiDialog.width() / 2); break; } uiDialog.css({ top: top, left: left, visibility: 'visible' }); };
Attachments (0)
Change History (3)
Changed November 01, 2007 02:36AM UTC by comment:1
Changed November 19, 2007 02:03PM UTC by comment:2
owner: | → rworth |
---|
Changed December 08, 2007 03:46PM UTC by comment:3
resolution: | → fixed |
---|---|
status: | new → closed |
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: 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: