Ticket #6485: 6484_2.patch

File 6484_2.patch, 2.7 KB (added by Garry Yao, 13 years ago)
  • _source/plugins/bidi/plugin.js

     
    186186                                // Creates bookmarks for selection, as we may split some blocks.
    187187                                var bookmarks = selection.createBookmarks();
    188188
    189                                 var iterator,
    190                                         block;
     189                                var rangeIterator = ranges.createIterator(),
     190                                        range,
     191                                        i = 0;
     192
     193                                while ( ( range = rangeIterator.getNextRange() ) )
     194                                {
     195                                        var iterator,
     196                                                block;
    191197
    192                                 for ( var i = ranges.length - 1 ; i >= 0 ; i-- )
    193                                 {
    194198                                        // Array of elements processed as guardElements.
    195199                                        var processedElements = [];
    196200                                        // Walker searching for guardElements.
    197                                         var walker = new CKEDITOR.dom.walker( ranges[ i ] );
     201                                        var walker = new CKEDITOR.dom.walker( range );
     202
     203                                        var start = bookmarks[ i ].startNode,
     204                                                end = bookmarks[ i++ ].endNode;
     205
    198206                                        walker.evaluator = function( node )
    199207                                        {
    200                                                 return node.type == CKEDITOR.NODE_ELEMENT
    201                                                         && node.getName() in guardElements
    202                                                         && !( node.getName() == ( enterMode == CKEDITOR.ENTER_P ) ? 'p' : 'div'
    203                                                                 && node.getParent().type == CKEDITOR.NODE_ELEMENT
    204                                                                 && node.getParent().getName() == 'blockquote'
    205                                                         );
     208                                                return !! ( node.type == CKEDITOR.NODE_ELEMENT
     209                                                                && node.getName() in guardElements
     210                                                                && !( node.getName() == ( enterMode == CKEDITOR.ENTER_P ) ? 'p' : 'div'
     211                                                                        && node.getParent().type == CKEDITOR.NODE_ELEMENT
     212                                                                        && node.getParent().getName() == 'blockquote' )
     213                                                                // Element must be fully included in the range as well. (#6485).
     214                                                                && node.getPosition( start ) & CKEDITOR.POSITION_FOLLOWING
     215                                                                && ( ( node.getPosition( end ) & CKEDITOR.POSITION_PRECEDING + CKEDITOR.POSITION_CONTAINS ) == CKEDITOR.POSITION_PRECEDING ) );
    206216                                        };
    207217
    208218                                        while ( ( block = walker.next() ) )
    209219                                                switchDir( block, dir, editor, database );
    210220
    211                                         iterator = ranges[ i ].createIterator();
     221                                        iterator = range.createIterator();
    212222                                        iterator.enlargeBr = enterMode != CKEDITOR.ENTER_BR;
    213223
    214224                                        while ( ( block = iterator.getNextParagraph( enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' ) ) )
    215225                                                !block.isReadOnly() && switchDir( block, dir, editor, database );
     226                                }
    216227
    217                                         CKEDITOR.dom.element.clearAllMarkers( database );
     228                                CKEDITOR.dom.element.clearAllMarkers( database );
    218229
    219                                         editor.forceNextSelectionCheck();
    220                                         // Restore selection position.
    221                                         selection.selectBookmarks( bookmarks );
    222                                 }
     230                                editor.forceNextSelectionCheck();
     231                                // Restore selection position.
     232                                selection.selectBookmarks( bookmarks );
    223233
    224234                                editor.focus();
    225235                        }
© 2003 – 2022, CKSource sp. z o.o. sp.k. All rights reserved. | Terms of use | Privacy policy