Ticket #3190: 3190_4.patch

File 3190_4.patch, 2.7 KB (added by Garry Yao, 11 years ago)
  • _source/plugins/wysiwygarea/plugin.js

     
    114114                                this.getSelection().lock();
    115115                }
    116116        }
     117       
     118        /**
     119         *  Auto-fixing for block-less paragraph contents with body on selection
     120         *  change if enterMode is set to block.
     121         */
     122        function onSelectionChangeFixBody( evt )
     123        {
     124                var path = evt.data.path,
     125                        blockLimit = path.blockLimit,
     126                        selection = evt.data.selection,
     127                        editor = evt.editor,
     128                        body = editor.document.getBody();
     129                       
     130                // Establing new paragraph if there's an inline element within body and it's block-less.
     131                if ( editor.config.enterMode != CKEDITOR.ENTER_BR
     132                         && blockLimit.getName() == 'body'
     133                         && !path.block )
     134                {
     135                        var ranges = selection.getRanges(),
     136                                range = ranges[ 0 ];
     137
     138                        range.fixBlock( true,
     139                                editor.config.enterMode == CKEDITOR.ENTER_DIV ? 'div' : 'p'  );
     140                       
     141                        // Update selection after introducing the fixing block.
     142                        selection.selectRanges( ranges );
     143                }
     144        }
    117145
    118146        CKEDITOR.plugins.add( 'wysiwygarea',
    119147        {
     
    449477
    450478                                        editor.on( 'insertHtml', onInsertHtml, null, null, 20 );
    451479                                        editor.on( 'insertElement', onInsertElement, null, null, 20 );
     480                                        // Auto fixing block-less paragraphs. (#3190)
     481                                        editor.on( 'selectionChange', onSelectionChangeFixBody, null, null, 1 );
    452482                                });
    453483                }
    454484        });
  • _source/core/dom/range.js

     
    3131        // V2
    3232        var execContentsAction = function( range, action, docFrag )
    3333        {
     34                range.optimizeBookmark();
     35               
    3436                var startNode   = range.startContainer;
    3537                var endNode             = range.endContainer;
    3638
     
    653655                        }
    654656                },
    655657
     658                /**
     659                 * Move the range out of bookmark nodes if they're been the container.
     660                 */
     661                optimizeBookmark: function()
     662                {
     663                        var startNode = this.startContainer,
     664                                endNode = this.endContainer;
     665
     666                        if ( startNode.is && startNode.is( 'span' )
     667                                && startNode.hasAttribute( '_fck_bookmark' ) )
     668                                this.setStartAt( startNode, CKEDITOR.POSITION_BEFORE_START );
     669                        if ( endNode && endNode.is && endNode.is( 'span' )
     670                                && endNode.hasAttribute( '_fck_bookmark' ) )
     671                                this.setEndAt( endNode,  CKEDITOR.POSITION_AFTER_END );
     672                },
     673
    656674                trim : function( ignoreStart, ignoreEnd )
    657675                {
    658676                        var startContainer = this.startContainer;
     
    11361154                 */
    11371155                insertNode : function( node )
    11381156                {
     1157                        this.optimizeBookmark();
    11391158                        this.trim( false, true );
    11401159
    11411160                        var startContainer = this.startContainer;
© 2003 – 2019 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy