Ticket #3190: 3190_2.patch

File 3190_2.patch, 2.0 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 on selection change.
     120         */
     121        function onSelectionChangeFixBody( evt )
     122        {
     123                var path = evt.data.path,
     124                        startElement = evt.data.element,
     125                        blockLimit = path.blockLimit,
     126                        editor = evt.editor;
     127                // Perform the fixing when there's a start path element and it's block-less.
     128                if( blockLimit.getName() == 'body' &&
     129                        !path.block && path.elements.length > 1 )
     130                {
     131                        // Ignore line-height maintaining 'br's.
     132                        var firstBlockless = blockLimit.getFirst();
     133                        if ( firstBlockless && firstBlockless.getName
     134                                && firstBlockless.getName() == 'br'
     135                                && blockLimit.getChildren().count() == 1 )
     136                                return;
     137
     138                        var sel = editor.getSelection(),
     139                                ranges = sel.getRanges(),
     140                                range = ranges[0].clone(),
     141                                bm = range.createBookmark();
     142                        range.collapse();
     143
     144                        range.enlarge( CKEDITOR.ENLARGE_BLOCK_CONTENTS );
     145                        range.enlarge( CKEDITOR.ENLARGE_ELEMENT );
     146                        var frag = range.extractContents(),
     147                                fixNode = editor.document.createElement( 'p' );
     148                        fixNode.append( frag );
     149                        range.insertNode( fixNode );
     150                        // Selection has lost after the insertion.
     151                        range.moveToBookmark( bm );
     152                        ranges[0] = range;
     153                        sel.selectRanges( ranges );
     154                }
     155        }
    117156
    118157        CKEDITOR.plugins.add( 'wysiwygarea',
    119158        {
     
    412451
    413452                                        editor.on( 'insertHtml', onInsertHtml, null, null, 20 );
    414453                                        editor.on( 'insertElement', onInsertElement, null, null, 20 );
     454                                        // Auto fixing only editor enter mode is BR.
     455                                        if ( editor.config.enterMode != CKEDITOR.ENTER_BR )
     456                                                editor.on( 'selectionChange', onSelectionChangeFixBody, null, null, 1 );
    415457                                });
    416458                }
    417459        });
© 2003 – 2019 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy