1674 | | var definition = dialog.definition, |
1675 | | minWidth = definition.minWidth || 0, |
1676 | | minHeight = definition.minHeight || 0, |
1677 | | resizable = definition.resizable, |
1678 | | margins = dialog.getParentEditor().skin.margins || [ 0, 0, 0, 0 ]; |
| 1674 | var def = dialog.definition, |
| 1675 | resizable = def.resizable; |
| 1676 | if ( resizable == CKEDITOR.DIALOG_RESIZE_NONE ) |
| 1677 | return; |
1680 | | function topSizer( coords, dy ) |
1681 | | { |
1682 | | coords.y += dy; |
1683 | | } |
| 1679 | var editor = dialog.getParentEditor(), |
| 1680 | minHeight = def.minHeight || 0, |
| 1681 | minWidth = def.minWidth || 0, |
| 1682 | margin = editor.skin.margins || [ 0, 0, 0, 0 ], |
| 1683 | wrapperWidth, wrapperHeight, viewSize, origin; |
1700 | | var lastCoords = null, |
1701 | | abstractDialogCoords = null, |
1702 | | magnetDistance = dialog._.editor.config.magnetDistance, |
1703 | | parts = [ 'tl', 't', 'tr', 'l', 'r', 'bl', 'b', 'br' ]; |
1704 | | |
1705 | | function mouseDownHandler( evt ) |
1706 | | { |
1707 | | var partName = evt.listenerData.part, size = dialog.getSize(); |
1708 | | abstractDialogCoords = dialog.getPosition(); |
1709 | | CKEDITOR.tools.extend( abstractDialogCoords, |
1710 | | { |
1711 | | x2 : abstractDialogCoords.x + size.width, |
1712 | | y2 : abstractDialogCoords.y + size.height |
1713 | | } ); |
1714 | | lastCoords = { x : evt.data.$.screenX, y : evt.data.$.screenY }; |
1715 | | |
1716 | | CKEDITOR.document.on( 'mousemove', mouseMoveHandler, dialog, { part : partName } ); |
1717 | | CKEDITOR.document.on( 'mouseup', mouseUpHandler, dialog, { part : partName } ); |
1718 | | |
1726 | | evt.data.preventDefault(); |
1727 | | } |
| 1709 | // Prepend the grip to the dialog. |
| 1710 | dialog.on( 'load', function() |
| 1711 | { |
| 1712 | var direction = ''; |
| 1713 | if ( resizable == CKEDITOR.DIALOG_RESIZE_WIDTH ) |
| 1714 | direction = ' cke_resizer_horizontal'; |
| 1715 | else if ( resizable == CKEDITOR.DIALOG_RESIZE_HEIGHT ) |
| 1716 | direction = ' cke_resizer_vertical'; |
| 1717 | var resizer = CKEDITOR.dom.element.createFromHtml( '<div class="cke_resizer' + direction + '"' + |
| 1718 | ' title="' + CKEDITOR.tools.htmlEncode( editor.lang.resize ) + '"' + |
| 1719 | ' onmousedown="CKEDITOR.tools.callFunction(' + mouseDownFn + ', event )"></div>' ); |
| 1720 | dialog.parts.footer.append( resizer, 1 ); |
1731 | | var x = evt.data.$.screenX, |
1732 | | y = evt.data.$.screenY, |
1733 | | dx = x - lastCoords.x, |
1734 | | dy = y - lastCoords.y, |
1735 | | viewPaneSize = CKEDITOR.document.getWindow().getViewPaneSize(), |
1736 | | partName = evt.listenerData.part; |
| 1730 | var dx = ( evt.data.$.screenX - origin.x ) * ( editor.lang.dir == 'rtl' ? -1 : 1 ), |
| 1731 | dy = evt.data.$.screenY - origin.y, |
| 1732 | width = startSize.width, |
| 1733 | height = startSize.height, |
| 1734 | internalWidth = width + dx, |
| 1735 | internalHeight = height + dy; |
1738 | | if ( partName.search( 't' ) != -1 ) |
1739 | | topSizer( abstractDialogCoords, dy ); |
1740 | | if ( partName.search( 'l' ) != -1 ) |
1741 | | leftSizer( abstractDialogCoords, dx ); |
1742 | | if ( partName.search( 'b' ) != -1 ) |
1743 | | bottomSizer( abstractDialogCoords, dy ); |
1744 | | if ( partName.search( 'r' ) != -1 ) |
1745 | | rightSizer( abstractDialogCoords, dx ); |
| 1737 | if ( internalHeight > viewSize.height - margin[1] - margin[3] ) |
| 1738 | internalHeight = viewSize.height - margin[1] - margin[3]; |
| 1739 | if ( internalWidth > viewSize.width - margin[0] - margin[2] ) |
| 1740 | internalWidth = viewSize.width - margin[0] - margin[2]; |
1758 | | if ( abstractDialogCoords.y + margins[0] < magnetDistance ) |
1759 | | realY = - margins[0]; |
1760 | | else if ( partName.search( 't' ) != -1 && abstractDialogCoords.y2 - abstractDialogCoords.y < minHeight + magnetDistance ) |
1761 | | realY = abstractDialogCoords.y2 - minHeight; |
1762 | | else |
1763 | | realY = abstractDialogCoords.y; |
1764 | | |
1765 | | if ( abstractDialogCoords.x2 - margins[1] > viewPaneSize.width - magnetDistance ) |
1766 | | realX2 = viewPaneSize.width + margins[1] ; |
1767 | | else if ( partName.search( 'r' ) != -1 && abstractDialogCoords.x2 - abstractDialogCoords.x < minWidth + magnetDistance ) |
1768 | | realX2 = abstractDialogCoords.x + minWidth; |
1769 | | else |
1770 | | realX2 = abstractDialogCoords.x2; |
1771 | | |
1772 | | if ( abstractDialogCoords.y2 - margins[2] > viewPaneSize.height - magnetDistance ) |
1773 | | realY2= viewPaneSize.height + margins[2] ; |
1774 | | else if ( partName.search( 'b' ) != -1 && abstractDialogCoords.y2 - abstractDialogCoords.y < minHeight + magnetDistance ) |
1775 | | realY2 = abstractDialogCoords.y + minHeight; |
1776 | | else |
1777 | | realY2 = abstractDialogCoords.y2 ; |
1778 | | |
1779 | | dialog.move( realX, realY ); |
1780 | | dialog.resize( realX2 - realX, realY2 - realY ); |
1781 | | |
| 1751 | dialog.resize( width, height ); |
| 1752 | positionDialog( margin ); |
1797 | | |
1798 | | // TODO : Simplify the resize logic, having just a single resize grip <div>. |
1799 | | // var widthTest = /[lr]/, |
1800 | | // heightTest = /[tb]/; |
1801 | | // for ( var i = 0 ; i < parts.length ; i++ ) |
1802 | | // { |
1803 | | // var element = dialog.parts[ parts[i] + '_resize' ]; |
1804 | | // if ( resizable == CKEDITOR.DIALOG_RESIZE_NONE || |
1805 | | // resizable == CKEDITOR.DIALOG_RESIZE_HEIGHT && widthTest.test( parts[i] ) || |
1806 | | // resizable == CKEDITOR.DIALOG_RESIZE_WIDTH && heightTest.test( parts[i] ) ) |
1807 | | // { |
1808 | | // element.hide(); |
1809 | | // continue; |
1810 | | // } |
1811 | | // element.on( 'mousedown', mouseDownHandler, dialog, { part : parts[i] } ); |
1812 | | // } |