Ticket #6485: 6484_2.patch
File 6484_2.patch, 2.7 KB (added by , 13 years ago) |
---|
-
_source/plugins/bidi/plugin.js
186 186 // Creates bookmarks for selection, as we may split some blocks. 187 187 var bookmarks = selection.createBookmarks(); 188 188 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; 191 197 192 for ( var i = ranges.length - 1 ; i >= 0 ; i-- )193 {194 198 // Array of elements processed as guardElements. 195 199 var processedElements = []; 196 200 // 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 198 206 walker.evaluator = function( node ) 199 207 { 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 ) ); 206 216 }; 207 217 208 218 while ( ( block = walker.next() ) ) 209 219 switchDir( block, dir, editor, database ); 210 220 211 iterator = range s[ i ].createIterator();221 iterator = range.createIterator(); 212 222 iterator.enlargeBr = enterMode != CKEDITOR.ENTER_BR; 213 223 214 224 while ( ( block = iterator.getNextParagraph( enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' ) ) ) 215 225 !block.isReadOnly() && switchDir( block, dir, editor, database ); 226 } 216 227 217 228 CKEDITOR.dom.element.clearAllMarkers( database ); 218 229 219 editor.forceNextSelectionCheck(); 220 // Restore selection position. 221 selection.selectBookmarks( bookmarks ); 222 } 230 editor.forceNextSelectionCheck(); 231 // Restore selection position. 232 selection.selectBookmarks( bookmarks ); 223 233 224 234 editor.focus(); 225 235 }