Ticket #8246: 8246_2.patch

File 8246_2.patch, 3.3 KB (added by garry.yao, 3 years ago)
  • _source/core/dom/node.js

     
    654654                }, 
    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 
    665661                 * // For the following HTML: 
    666662                 * // <div contenteditable="false">Some <b>text</b></div> 
    667663                 * 
    668664                 * // If "ele" is the above <div> 
    669                  * ele.isReadOnly();  // the <div> element 
    670                  * 
    671                  * // If "ele" is the above <b> 
    672                  * ele.isReadOnly();  // the <div> 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; 
     669                        var element = this; 
     670                        if ( this.type != CKEDITOR.NODE_ELEMENT ) 
     671                                element = this.getParent(); 
    683672 
    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; 
     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        } 
    695683); 
  • _source/plugins/selection/plugin.js

     
    961961                                                if ( range.collapsed ) 
    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, 
    966984                                                        startOffset = range.startOffset, 
    967985                                                        endOffset = range.endOffset, 
    968986                                                        walkerRange = range.clone(); 
    969987 
    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 ); 
    975  
    976988                                                // Enlarge range start/end with text node to avoid walker 
    977989                                                // being DOM destructive, it doesn't interfere our checking 
    978990                                                // of elements below as well. 
© 2003 – 2012 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy