Changeset 7538


Ignore:
Timestamp:
07/04/2012 01:17:15 PM (2 years ago)
Author:
garry.yao
Message:

#8950: Opened new block to move cursor into, when insertElement is called at the end of a block.

Location:
CKEditor/trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • CKEditor/trunk/CHANGES.html

    r7534 r7538  
    7575                <li><a href="http://dev.ckeditor.com/ticket/8941">#8941</a> : [Webkit] Content region disappeared when resizing the browser.</li> 
    7676                <li><a href="http://dev.ckeditor.com/ticket/8968">#8968</a> : [Firefox] The forcePasteAsPlainText configuration is not working when using Ctrl/Cmd-V.</li> 
     77                <li><a href="http://dev.ckeditor.com/ticket/6217">#6217</a> : Handled DEL/BACKSPACE key at the boundary of table to unifiy the cursor position.</li> 
     78                <li><a href="http://dev.ckeditor.com/ticket/8950">#8950</a> : Chagend the cursor position after calling editor::insertElement on block element.</li> 
    7779        </ul> 
    7880        <h3> 
  • CKEditor/trunk/_source/core/dom/element.js

    r7525 r7538  
    737737                                        || this.getComputedStyle( 'visibility' ) == 'hidden' 
    738738                                        || this.is( 'a' ) && this.data( 'cke-saved-name' ) && !this.getChildCount() 
    739                                         || CKEDITOR.dtd.$nonEditable[ name ] ) 
     739                                        || CKEDITOR.dtd.$nonEditable[ name ] 
     740                                        || CKEDITOR.dtd.$empty[ name ] ) 
    740741                        { 
    741742                                return false; 
  • CKEditor/trunk/_source/core/dom/range.js

    r7537 r7538  
    529529                        { 
    530530                                baseId = 'cke_bm_' + CKEDITOR.tools.getNextNumber(); 
    531                                 startNode.setAttribute( 'id', baseId + 'S' ); 
     531                                startNode.setAttribute( 'id', baseId + ( collapsed ? 'C' : 'S' ) ); 
    532532                        } 
    533533 
     
    560560 
    561561                        return { 
    562                                 startNode : serializable ? baseId + 'S' : startNode, 
     562                                startNode : serializable ? baseId + ( collapsed ? 'C' : 'S' ) : startNode, 
    563563                                endNode : serializable ? baseId + 'E' : endNode, 
    564564                                serializable : serializable, 
     
    19561956                                var next; 
    19571957 
    1958                                 if ( node.type == CKEDITOR.NODE_ELEMENT 
    1959                                                 && node.isEditable( false ) 
    1960                                                 && !CKEDITOR.dtd.$nonEditable[ node.getName() ] ) 
    1961                                 { 
     1958                                if ( node.type == CKEDITOR.NODE_ELEMENT && node.isEditable( false ) ) 
    19621959                                        next = node[ isMoveToEnd ? 'getLast' : 'getFirst' ]( nonWhitespaceOrBookmarkEval ); 
    1963                                 } 
    19641960 
    19651961                                if ( !childOnly && !next ) 
     
    19671963 
    19681964                                return next; 
     1965                        } 
     1966 
     1967                        // Handle non-editable element e.g. HR. 
     1968                        if ( el.type == CKEDITOR.NODE_ELEMENT && !el.isEditable( false ) ) 
     1969                        { 
     1970                                this.moveToPosition( el, isMoveToEnd ? 
     1971                                                                                 CKEDITOR.POSITION_AFTER_END : 
     1972                                                                                 CKEDITOR.POSITION_BEFORE_START ); 
     1973                                return true; 
    19691974                        } 
    19701975 
  • CKEditor/trunk/_source/core/dom/walker.js

    r7477 r7538  
    447447        }; 
    448448 
    449         CKEDITOR.dom.walker.bogus = function( type, isReject ) 
     449        CKEDITOR.dom.walker.bogus = function( isReject ) 
    450450        { 
    451451                function nonEmpty( node ) 
  • CKEditor/trunk/_source/plugins/horizontalrule/plugin.js

    r7477 r7538  
    1515                exec : function( editor ) 
    1616                { 
    17                         var hr = editor.document.createElement( 'hr' ), 
    18                                 range = new CKEDITOR.dom.range( editor.document ); 
    19  
     17                        var hr = editor.document.createElement( 'hr' ); 
    2018                        editor.insertElement( hr ); 
    21  
    22                         // If there's nothing or a non-editable block followed by, establish a new paragraph 
    23                         // to make sure cursor is not trapped. 
    24                         range.moveToPosition( hr, CKEDITOR.POSITION_AFTER_END ); 
    25                         var next = hr.getNext(); 
    26                         if ( !next || next.type == CKEDITOR.NODE_ELEMENT && !next.isEditable() ) 
    27                                 range.fixBlock( true, editor.config.enterMode == CKEDITOR.ENTER_DIV ? 'div' : 'p'  ); 
    28  
    29                         range.select(); 
    3019                } 
    3120        }; 
  • CKEditor/trunk/_source/plugins/wysiwygarea/plugin.js

    r7537 r7538  
    1414        var emptyParagraphRegexp = /(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:<br[^>]*>|&nbsp;|\u00A0|&#160;)?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi; 
    1515 
    16         var notWhitespaceEval = CKEDITOR.dom.walker.whitespaces( true ); 
     16        var notWhitespaceEval = CKEDITOR.dom.walker.whitespaces( true ), 
     17          notBogus = CKEDITOR.dom.walker.bogus( true ), 
     18          notEmpty = function( node ) { return notWhitespaceEval( node ) && notBogus( node ); }; 
    1719 
    1820        // Elements that could blink the cursor anchoring beside it, like hr, page-break. (#6554) 
     
    268270                                range.moveToPosition( lastElement, CKEDITOR.POSITION_AFTER_END ); 
    269271 
    270                                 // If we're inserting a block element immediatelly followed by 
    271                                 // another block element, the selection must move there. (#3100,#5436) 
     272                                // If we're inserting a block element immediately followed by 
     273                                // another block element, the selection must be optimized. (#3100,#5436,#8950) 
    272274                                if ( isBlock ) 
    273275                                { 
    274                                         var next = lastElement.getNext( notWhitespaceEval ), 
     276                                        var next = lastElement.getNext( notEmpty ), 
    275277                                                nextName = next && next.type == CKEDITOR.NODE_ELEMENT && next.getName(); 
    276278 
    277                                         // Check if it's a block element that accepts text. 
    278                                         if ( nextName && CKEDITOR.dtd.$block[ nextName ] && CKEDITOR.dtd[ nextName ]['#'] ) 
     279                                        // If the next one is a text block, move cursor to the start of it's content. 
     280                                        if ( nextName && CKEDITOR.dtd.$block[ nextName ] ) 
     281                                        { 
     282                                                if ( CKEDITOR.dtd[ nextName ][ '#' ] ) 
     283                                                        range.moveToElementEditStart( next ); 
     284                                                // Otherwise move cursor to the before end of the last element. 
     285                                                else 
     286                                                        range.moveToElementEditEnd( lastElement ); 
     287                                        } 
     288                                        // Open a new line if the block is inserted at the end of parent. 
     289                                        else if ( !next ) 
     290                                        { 
     291                                                next = range.fixBlock( true, this.config.enterMode == CKEDITOR.ENTER_DIV ? 'div' : 'p' ); 
    279292                                                range.moveToElementEditStart( next ); 
     293                                        } 
    280294                                } 
    281295                        } 
Note: See TracChangeset for help on using the changeset viewer.
© 2003 – 2012 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy