Ticket #3190: 3190.patch

File 3190.patch, 1.9 KB (added by Garry Yao, 10 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( !path.block && path.elements.length > 1 )
     129                {
     130                        // Ignore line-height maintaining 'br's.
     131                        var firstBlockless = blockLimit.getFirst();
     132                        if ( firstBlockless && firstBlockless.getName
     133                                && firstBlockless.getName() == 'br' &&
     134                                blockLimit.getChildren().count() == 1 )
     135                                return;
     136
     137                        var sel = editor.getSelection(),
     138                                ranges = sel.getRanges(),
     139                                range = ranges[0].clone(),
     140                                bm = range.createBookmark();
     141                        range.collapse();
     142
     143                        range.enlarge( CKEDITOR.ENLARGE_BLOCK_CONTENTS );
     144                        range.enlarge( CKEDITOR.ENLARGE_ELEMENT );
     145                        var frag = range.extractContents(),
     146                                fixNode = editor.document.createElement('p' );
     147                        fixNode.append( frag );
     148                        range.insertNode( fixNode );
     149                        // Selection has lost after the insertion.
     150                        range.moveToBookmark( bm );
     151                        ranges[0] = range;
     152                        sel.selectRanges( ranges );
     153                }
     154        }
    117155
    118156        CKEDITOR.plugins.add( 'wysiwygarea',
    119157        {
     
    412450
    413451                                        editor.on( 'insertHtml', onInsertHtml, null, null, 20 );
    414452                                        editor.on( 'insertElement', onInsertElement, null, null, 20 );
     453                                        // Auto fixing only editor enter mode is BR.
     454                                        if ( editor.config.enterMode != CKEDITOR.ENTER_BR )
     455                                                editor.on( 'selectionChange', onSelectionChangeFixBody, null, null, 1 );
    415456                                });
    416457                }
    417458        });
© 2003 – 2019 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy