Ticket #3684: 3684.patch

File 3684.patch, 2.8 KB (added by Garry Yao, 15 years ago)
  • _source/plugins/wysiwygarea/plugin.js

     
    130130                        selection = evt.data.selection,
    131131                        range = selection.getRanges()[0],
    132132                        body = editor.document.getBody(),
    133                         enterMode = editor.config.enterMode;
     133                        enterMode = editor.config.enterMode,
     134                        enterBlockName = enterMode == CKEDITOR.ENTER_P ? 'p' : 'div';
    134135
    135136                // When enterMode set to block, we'll establing new paragraph only if we're
    136137                // selecting inline contents right under body. (#3657)
     
    139140                         && blockLimit.getName() == 'body'
    140141                         && !path.block )
    141142                {
    142                         var bms = selection.createBookmarks(),
    143                                 fixedBlock = range.fixBlock( true,
    144                                         editor.config.enterMode == CKEDITOR.ENTER_DIV ? 'div' : 'p'  );
     143                        // If we're collapsed between two blocks, check if there's a
     144                        // enter block already.
     145                        var nodeBefore = range.startContainer.getChild( range.startOffset - 1 ),
     146                                nodeAfter = range.endContainer.getChild( range.endOffset ),
     147                                enterBlock;
     148                        if( nodeBefore && nodeBefore.is && nodeBefore.is( enterBlockName ) )
     149                                enterBlock = nodeBefore;
     150                        else if ( nodeAfter && nodeAfter.is && nodeAfter.is( enterBlockName ) )
     151                                enterBlock = nodeAfter;
     152
     153                        // 1. If we've already had an enter block, move to the first editing position.
     154                        // 2. Otherwise, wrapping with a new enter block.
     155                        if ( enterBlock )
     156                        {
     157                                range.moveToElementEditStart( enterBlock );
     158                                range.select();
     159                        }
     160                        else
     161                        {
     162                                var bms = selection.createBookmarks(),
     163                                        fixedBlock = range.fixBlock( true,
     164                                                editor.config.enterMode == CKEDITOR.ENTER_DIV ? 'div' : 'p'  );
    145165
    146                         // For IE, we'll be removing any bogus br ( introduce by fixing body )
    147                         // right now to prevent it introducing visual line break.
    148                         if ( CKEDITOR.env.ie )
    149                         {
    150                                 var brNodeList = fixedBlock.getElementsByTag( 'br' ), brNode;
    151                                 for ( var i = 0 ; i < brNodeList.count() ; i++ )
    152                                         if( ( brNode = brNodeList.getItem( i ) ) && brNode.hasAttribute( '_cke_bogus' ) )
    153                                                 brNode.remove();
    154                         }
     166                                // For IE, we'll be removing any bogus br ( introduce by fixing body )
     167                                // right now to prevent it introducing visual line break.
     168                                if ( CKEDITOR.env.ie )
     169                                {
     170                                        var brNodeList = fixedBlock.getElementsByTag( 'br' ), brNode;
     171                                        for ( var i = 0 ; i < brNodeList.count() ; i++ )
     172                                                if( ( brNode = brNodeList.getItem( i ) ) && brNode.hasAttribute( '_cke_bogus' ) )
     173                                                        brNode.remove();
     174                                }
    155175
    156                         selection.selectBookmarks( bms );
    157                 }
     176                                selection.selectBookmarks( bms );
     177                        }
     178                }
    158179
    159180                // Inserting the padding-br before body if it's preceded by an
    160181                // unexitable block.
© 2003 – 2022, CKSource sp. z o.o. sp.k. All rights reserved. | Terms of use | Privacy policy