Changeset 7235


Ignore:
Timestamp:
08/29/2011 03:27:29 PM (4 years ago)
Author:
garry.yao
Message:

#8246: Performace enhancement of CKEDITOR.dom.node::isReadOnly.

Location:
CKEditor/trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • CKEditor/trunk/CHANGES.html

    r7234 r7235  
    7575                <li><a href="http://dev.ckeditor.com/ticket/8232">#8232</a> : [IE] Unable to apply inline style that starts at the end of a link text.</li>
    7676                <li><a href="http://dev.ckeditor.com/ticket/7153">#7153</a> : Fail to load dev version of the editor after the window is loaded.</li>
     77                <li><a href="http://dev.ckeditor.com/ticket/8246">#8246</a> : Bad editing performance on certain document content.</li>
    7778                <li>Updated the following language files:<ul>
    7879                        <li><a href="http://dev.ckeditor.com/ticket/8128">#8128</a> : Italian;</li>
  • CKEditor/trunk/_source/core/dom/node.js

    r7065 r7235  
    655655
    656656                /**
    657                  * Checks if this node is read-only (should not be changed). Additionally
    658                  * it returns the element that defines the read-only state of this node
    659                  * (if present). It may be the node itself or any of its parent
    660                  * nodes.
    661                  * @returns {CKEDITOR.dom.element|Boolean} An element containing
    662                  *              read-only attributes or "false" if none is found.
     657                 * Checks if this node is read-only (should not be changed).
     658                 * @returns {Boolean}
    663659                 * @since 3.5
    664660                 * @example
     
    667663                 *
    668664                 * // If "ele" is the above &lt;div&gt;
    669                  * ele.isReadOnly();  // the &lt;div&gt; element
    670                  *
    671                  * // If "ele" is the above &lt;b&gt;
    672                  * ele.isReadOnly();  // the &lt;div&gt; element
     665                 * ele.isReadOnly();  // true
    673666                 */
    674667                isReadOnly : function()
    675668                {
    676                         var current = this;
    677                         while( current )
    678                         {
    679                                 if ( current.type == CKEDITOR.NODE_ELEMENT )
    680                                 {
    681                                         if ( current.is( 'body' ) || !!current.data( 'cke-editable' ) )
    682                                                 break;
    683 
    684                                         if ( current.getAttribute( 'contentEditable' ) == 'false' )
    685                                                 return current;
    686                                         else if ( current.getAttribute( 'contentEditable' ) == 'true' )
    687                                                 break;
    688                                 }
    689                                 current = current.getParent();
    690                         }
    691 
    692                         return false;
     669                        var element = this;
     670                        if ( this.type != CKEDITOR.NODE_ELEMENT )
     671                                element = this.getParent();
     672
     673                        if ( element
     674                                        && typeof element.$.isContentEditable != 'undefined'
     675                                        && !element.data( 'cke-editable' ) )
     676                        {
     677                                return !element.$.isContentEditable;
     678                        }
     679                        else
     680                                return false;
    693681                }
    694682        }
  • CKEditor/trunk/_source/plugins/selection/plugin.js

    r7196 r7235  
    962962                                                        continue;
    963963
     964                                                // Range may start inside a non-editable element,
     965                                                // replace the range start after it.
     966                                                if ( range.startContainer.isReadOnly() )
     967                                                {
     968                                                        var current = range.startContainer;
     969                                                        while( current )
     970                                                        {
     971                                                                if ( current.is( 'body' ) || !current.isReadOnly() )
     972                                                                        break;
     973
     974                                                                if ( current.type == CKEDITOR.NODE_ELEMENT
     975                                                                                && current.getAttribute( 'contentEditable' ) == 'false' )
     976                                                                        range.setStartAfter( current );
     977
     978                                                                current = current.getParent();
     979                                                        }
     980                                                }
     981
    964982                                                var startContainer = range.startContainer,
    965983                                                        endContainer = range.endContainer,
     
    967985                                                        endOffset = range.endOffset,
    968986                                                        walkerRange = range.clone();
    969 
    970                                                 // Range may start inside a non-editable element, restart range
    971                                                 // by the end of it.
    972                                                 var readOnly;
    973                                                 if ( ( readOnly = startContainer.isReadOnly() ) )
    974                                                         range.setStartAfter( readOnly );
    975987
    976988                                                // Enlarge range start/end with text node to avoid walker
  • CKEditor/trunk/_source/plugins/wysiwygarea/plugin.js

    r7225 r7235  
    12411241                                        // We should flag that the element was locked by our code so
    12421242                                        // it'll be editable by the editor functions (#6046).
    1243                                         if ( !element.isReadOnly() )
     1243                                        var readonly = element.getAttribute( 'contenteditable' ) == 'false';
     1244                                        if ( !readonly )
     1245                                        {
    12441246                                                element.data( 'cke-editable', element.hasAttribute( 'contenteditable' ) ? 'true' : '1' );
    1245                                         element.setAttribute( 'contentEditable', false );
     1247                                                element.setAttribute( 'contenteditable', false );
     1248                                        }
    12461249                                }
    12471250                        });
Note: See TracChangeset for help on using the changeset viewer.
© 2003 – 2012 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy