{\r
// Don't do that for a target that handles ENTER.\r
var target = evt.data.getTarget();\r
- if ( !target.is( 'a', 'button', 'select' ) && ( !target.is( 'input' ) || target.$.type != 'button' ) )\r
+ if ( !target.is( 'a', 'button', 'select', 'textarea' ) && ( !target.is( 'input' ) || target.$.type != 'button' ) )\r
{\r
button = this.getButton( 'ok' );\r
button && CKEDITOR.tools.setTimeout( button.click, 0, button );\r
} );\r
}\r
\r
+ // Re-layout the dialog on window resize.\r
+ function resizeWithWindow( dialog )\r
+ {\r
+ var win = CKEDITOR.document.getWindow();\r
+ function resizeHandler() { dialog.layout(); }\r
+ win.on( 'resize', resizeHandler );\r
+ dialog.on( 'hide', function() { win.removeListener( 'resize', resizeHandler ); } );\r
+ }\r
+\r
CKEDITOR.dialog.prototype =\r
{\r
destroy : function()\r
* @example\r
* dialogObj.move( 10, 40 );\r
*/\r
- move : (function()\r
+ move : function( x, y, save )\r
{\r
- var isFixed;\r
- return function( x, y, save )\r
- {\r
- // The dialog may be fixed positioned or absolute positioned. Ask the\r
- // browser what is the current situation first.\r
- var element = this._.element.getFirst(),\r
- rtl = this._.editor.lang.dir == 'rtl';\r
+ // The dialog may be fixed positioned or absolute positioned. Ask the\r
+ // browser what is the current situation first.\r
+ var element = this._.element.getFirst(),\r
+ rtl = this._.editor.lang.dir == 'rtl';\r
\r
- if ( isFixed === undefined )\r
- isFixed = element.getComputedStyle( 'position' ) == 'fixed';\r
+ var isFixed = element.getComputedStyle( 'position' ) == 'fixed';\r
\r
- if ( isFixed && this._.position && this._.position.x == x && this._.position.y == y )\r
- return;\r
+ if ( isFixed && this._.position && this._.position.x == x && this._.position.y == y )\r
+ return;\r
\r
- // Save the current position.\r
- this._.position = { x : x, y : y };\r
+ // Save the current position.\r
+ this._.position = { x : x, y : y };\r
\r
- // If not fixed positioned, add scroll position to the coordinates.\r
- if ( !isFixed )\r
- {\r
- var scrollPosition = CKEDITOR.document.getWindow().getScrollPosition();\r
- x += scrollPosition.x;\r
- y += scrollPosition.y;\r
- }\r
+ // If not fixed positioned, add scroll position to the coordinates.\r
+ if ( !isFixed )\r
+ {\r
+ var scrollPosition = CKEDITOR.document.getWindow().getScrollPosition();\r
+ x += scrollPosition.x;\r
+ y += scrollPosition.y;\r
+ }\r
\r
- // Translate coordinate for RTL.\r
- if ( rtl )\r
- {\r
- var dialogSize = this.getSize(),\r
- viewPaneSize = CKEDITOR.document.getWindow().getViewPaneSize();\r
- x = viewPaneSize.width - dialogSize.width - x;\r
- }\r
+ // Translate coordinate for RTL.\r
+ if ( rtl )\r
+ {\r
+ var dialogSize = this.getSize(),\r
+ viewPaneSize = CKEDITOR.document.getWindow().getViewPaneSize();\r
+ x = viewPaneSize.width - dialogSize.width - x;\r
+ }\r
\r
- var styles = { 'top' : ( y > 0 ? y : 0 ) + 'px' };\r
- styles[ rtl ? 'right' : 'left' ] = ( x > 0 ? x : 0 ) + 'px';\r
+ var styles = { 'top' : ( y > 0 ? y : 0 ) + 'px' };\r
+ styles[ rtl ? 'right' : 'left' ] = ( x > 0 ? x : 0 ) + 'px';\r
\r
- element.setStyles( styles );\r
+ element.setStyles( styles );\r
\r
- save && ( this._.moved = 1 );\r
- };\r
- })(),\r
+ save && ( this._.moved = 1 );\r
+ },\r
\r
/**\r
* Gets the dialog's position in the window.\r
CKEDITOR.tools.setTimeout( function()\r
{\r
this.layout();\r
+ resizeWithWindow( this );\r
+\r
this.parts.dialog.setStyle( 'visibility', '' );\r
\r
// Execute onLoad for the first show.\r
*/\r
layout : function()\r
{\r
- var viewSize = CKEDITOR.document.getWindow().getViewPaneSize(),\r
- dialogSize = this.getSize();\r
+ var el = this.parts.dialog;\r
+ var dialogSize = this.getSize();\r
+ var win = CKEDITOR.document.getWindow(),\r
+ viewSize = win.getViewPaneSize();\r
+\r
+ var posX = ( viewSize.width - dialogSize.width ) / 2,\r
+ posY = ( viewSize.height - dialogSize.height ) / 2;\r
+\r
+ // Switch to absolute position when viewport is smaller than dialog size.\r
+ if ( !CKEDITOR.env.ie6Compat )\r
+ {\r
+ if ( dialogSize.height + ( posY > 0 ? posY : 0 ) > viewSize.height ||\r
+ dialogSize.width + ( posX > 0 ? posX : 0 ) > viewSize.width )\r
+ el.setStyle( 'position', 'absolute' );\r
+ else\r
+ el.setStyle( 'position', 'fixed' );\r
+ }\r
\r
- this.move( this._.moved ? this._.position.x : ( viewSize.width - dialogSize.width ) / 2,\r
- this._.moved ? this._.position.y : ( viewSize.height - dialogSize.height ) / 2 );\r
+ this.move( this._.moved ? this._.position.x : posX,\r
+ this._.moved ? this._.position.y : posY );\r
},\r
\r
/**\r