Ticket #6485: 6485_3.patch
File 6485_3.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 // Array of elements processed as guardElements.195 var processedElements = [];196 198 // Walker searching for guardElements. 197 var walker = new CKEDITOR.dom.walker( ranges[ i ] ); 199 var walker = new CKEDITOR.dom.walker( range ); 200 201 var start = bookmarks[ i ].startNode, 202 end = bookmarks[ i++ ].endNode; 203 198 204 walker.evaluator = function( node ) 199 205 { 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 ); 206 return !! ( node.type == CKEDITOR.NODE_ELEMENT 207 && node.getName() in guardElements 208 && !( node.getName() == ( enterMode == CKEDITOR.ENTER_P ) ? 'p' : 'div' 209 && node.getParent().type == CKEDITOR.NODE_ELEMENT 210 && node.getParent().getName() == 'blockquote' ) 211 // Element must be fully included in the range as well. (#6485). 212 && node.getPosition( start ) & CKEDITOR.POSITION_FOLLOWING 213 && ( ( node.getPosition( end ) & CKEDITOR.POSITION_PRECEDING + CKEDITOR.POSITION_CONTAINS ) == CKEDITOR.POSITION_PRECEDING ) ); 206 214 }; 207 215 208 216 while ( ( block = walker.next() ) ) 209 217 switchDir( block, dir, editor, database ); 210 218 211 iterator = range s[ i ].createIterator();219 iterator = range.createIterator(); 212 220 iterator.enlargeBr = enterMode != CKEDITOR.ENTER_BR; 213 221 214 222 while ( ( block = iterator.getNextParagraph( enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' ) ) ) 215 223 !block.isReadOnly() && switchDir( block, dir, editor, database ); 224 } 216 225 217 226 CKEDITOR.dom.element.clearAllMarkers( database ); 218 227 219 editor.forceNextSelectionCheck(); 220 // Restore selection position. 221 selection.selectBookmarks( bookmarks ); 222 } 228 editor.forceNextSelectionCheck(); 229 // Restore selection position. 230 selection.selectBookmarks( bookmarks ); 223 231 224 232 editor.focus(); 225 233 }