Changeset 6921 for CKEditor/trunk


Ignore:
Timestamp:
05/11/11 19:05:03 (4 years ago)
Author:
garry.yao
Message:

#7173: More accurate size calculation logic in autogrow plugin.

Location:
CKEditor/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • CKEditor/trunk/CHANGES.html

    r6920 r6921  
    5151                <li><a href="http://dev.ckeditor.com/ticket/6263">#6263</a> : Some of the table cell's context menu options may be incorrectly disabled.</li>
    5252                <li><a href="http://dev.ckeditor.com/ticket/6247">#6247</a> : Focus restores properly after float panel is closed.</li>
     53                <li><a href="http://dev.ckeditor.com/ticket/7173">#7173</a> : Enhancement to "autogrow" plugin makes it more accurate on editor size.</li>
    5354                <li>Updated the following language files:<ul>
    5455                        <li><a href="http://dev.ckeditor.com/ticket/7834">#7834</a> : Dutch;</li>
  • CKEditor/trunk/_source/plugins/autogrow/plugin.js

    r6428 r6921  
    88 */
    99(function(){
    10         var resizeEditor = function( editor )
    11         {
    12                 if ( !editor.window )
    13                         return;
    14                 var doc = editor.document,
    15                         currentHeight = editor.window.getViewPaneSize().height,
    16                         newHeight;
    1710
    18                 // We can not use documentElement to calculate the height for IE (#6061).
    19                 // It is not good for IE Quirks, yet using offsetHeight would also not work as expected (#6408).
    20                 // We do the same for FF because of the html height workaround (#6341).
    21                 if ( CKEDITOR.env.ie || CKEDITOR.env.gecko )
    22                         newHeight = doc.getBody().$.scrollHeight + ( CKEDITOR.env.ie && CKEDITOR.env.quirks ? 0 : 24 );
    23                 else
    24                         newHeight = doc.getDocumentElement().$.offsetHeight;
    25 
    26                 var min = editor.config.autoGrow_minHeight,
    27                         max = editor.config.autoGrow_maxHeight;
    28                 ( min == undefined ) && ( editor.config.autoGrow_minHeight = min = 200 );
    29                 if ( min )
    30                         newHeight = Math.max( newHeight, min );
    31                 if ( max )
    32                         newHeight = Math.min( newHeight, max );
    33 
    34                 if ( newHeight != currentHeight )
    35                 {
    36                         newHeight = editor.fire( 'autoGrow', { currentHeight : currentHeight, newHeight : newHeight } ).newHeight;
    37                         editor.resize( editor.container.getStyle( 'width' ), newHeight, true );
    38                 }
    39         };
    4011        CKEDITOR.plugins.add( 'autogrow',
    4112        {
    4213                init : function( editor )
    4314                {
     15                        var lastContentHeight;
     16                        var resizeEditor = function( editor )
     17                        {
     18                                if ( !editor.window )
     19                                        return;
     20
     21                                var doc = editor.document,
     22                                        resizeable = editor.getResizable( 1 ),
     23                                        body = doc.getBody().$,
     24                                        htmlElement = doc.getDocumentElement().$,
     25                                        currentHeight = resizeable.$.offsetHeight,
     26                                        newHeight;
     27
     28                                var delta =
     29                                                // Delta height by checking scrollHeight.
     30                                                ( CKEDITOR.env.ie && CKEDITOR.env.quirks ? body.scrollHeight - body.clientHeight
     31                                                                : htmlElement.scrollHeight - ( htmlElement.clientHeight || htmlElement.offsetHeight ) )
     32                                                // Negative scrollHeight (content reduced) is not supported in some browsers, figure it out by watching over the content size.
     33                                                || ( body.clientHeight < lastContentHeight ? body.clientHeight - lastContentHeight : 0 );
     34
     35                                if ( delta )
     36                                {
     37                                        newHeight = currentHeight + delta;
     38                                        var min = editor.config.autoGrow_minHeight,
     39                                                max = editor.config.autoGrow_maxHeight;
     40
     41                                        ( min == undefined ) && ( editor.config.autoGrow_minHeight = min = 200 );
     42                                        if ( min )
     43                                                newHeight = Math.max( newHeight, min );
     44                                        if ( max )
     45                                                newHeight = Math.min( newHeight, max );
     46
     47                                        if ( newHeight != currentHeight )
     48                                        {
     49                                                newHeight = editor.fire( 'autoGrow', { currentHeight : currentHeight, newHeight : newHeight } ).newHeight;
     50                                                resizeable.setStyle( 'height', newHeight + 'px' );
     51                                                editor.fire( 'resize' );
     52                                        }
     53                                }
     54
     55                                lastContentHeight = body.clientHeight;
     56                        };
     57
    4458                        for ( var eventName in { contentDom:1, key:1, selectionChange:1, insertElement:1 } )
    4559                        {
  • CKEditor/trunk/_source/themes/default/theme.js

    r6723 r6921  
    353353 * is mainly used by the resize plugin, which adds a UI handle that can be used
    354354 * to resize the editor.
     355 * @param {Boolean} forContents Whether to return the "contents" part of the theme instead of the container.
    355356 * @returns {CKEDITOR.dom.element} The resizable element.
    356357 * @example
    357358 */
    358 CKEDITOR.editor.prototype.getResizable = function()
     359CKEDITOR.editor.prototype.getResizable = function( forContents )
    359360{
    360         return this.container;
     361        return forContents ? CKEDITOR.document.getById( 'cke_contents_' + this.name ) : this.container;
    361362};
    362363
Note: See TracChangeset for help on using the changeset viewer.
© 2003 – 2015 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy