Ticket #3684: 3684_2.patch

File 3684_2.patch, 2.9 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 =
     146                                        range.startContainer.getChild
     147                                        && range.startContainer.getChild( range.startOffset - 1 ),
     148                                nodeAfter =
     149                                        range.startContainer.getChild
     150                                        && range.endContainer.getChild( range.endOffset ),
     151                                enterBlock;
     152                        if( nodeBefore && nodeBefore.is && nodeBefore.is( enterBlockName ) )
     153                                enterBlock = nodeBefore;
     154                        else if ( nodeAfter && nodeAfter.is && nodeAfter.is( enterBlockName ) )
     155                                enterBlock = nodeAfter;
     156
     157                        // 1. If we've already had an enter block, move to the first editing position.
     158                        // 2. Otherwise, wrapping with a new enter block.
     159                        if ( enterBlock )
     160                        {
     161                                range.moveToElementEditStart( enterBlock );
     162                                range.select();
     163                        }
     164                        else
     165                        {
     166                                var bms = selection.createBookmarks(),
     167                                        fixedBlock = range.fixBlock( true,
     168                                                editor.config.enterMode == CKEDITOR.ENTER_DIV ? 'div' : 'p'  );
    145169
    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                         }
     170                                // For IE, we'll be removing any bogus br ( introduce by fixing body )
     171                                // right now to prevent it introducing visual line break.
     172                                if ( CKEDITOR.env.ie )
     173                                {
     174                                        var brNodeList = fixedBlock.getElementsByTag( 'br' ), brNode;
     175                                        for ( var i = 0 ; i < brNodeList.count() ; i++ )
     176                                                if( ( brNode = brNodeList.getItem( i ) ) && brNode.hasAttribute( '_cke_bogus' ) )
     177                                                        brNode.remove();
     178                                }
    155179
    156                         selection.selectBookmarks( bms );
    157                 }
     180                                selection.selectBookmarks( bms );
     181                        }
     182                }
    158183
    159184                // Inserting the padding-br before body if it's preceded by an
    160185                // unexitable block.
© 2003 – 2022, CKSource sp. z o.o. sp.k. All rights reserved. | Terms of use | Privacy policy