Ticket #5577: 5577_2.patch
File 5577_2.patch, 3.4 KB (added by , 14 years ago) |
---|
-
_source/plugins/tabletools/plugin.js
86 86 return retval; 87 87 } 88 88 89 function getFocus edCell( cellsToDelete ) {89 function getFocusElementAfterDelCells( cellsToDelete ) { 90 90 var i = 0, 91 91 last = cellsToDelete.length - 1, 92 92 database = {}, … … 247 247 cell.insertAfter( baseCell ); 248 248 } 249 249 } 250 251 function getFocusElementAfterDelCols( cells ) 252 { 253 var cellIndex = [], 254 cellIndexFilter = {}, 255 table = cells[ 0 ] && cells[ 0 ].getAscendant( 'table' ), 256 i = 0, 257 cell, targetCell, index, targetIndex, preIndex, len; 258 259 // get a unrepeat cellIndex list 260 while ( cell = cells[ i++ ] ) 261 { 262 index = cell.$.cellIndex; 263 264 if ( cellIndexFilter[ index ] ) 265 continue; 266 267 cellIndex.push( index ); 268 cellIndexFilter[ index ] = 1; 269 } 250 270 271 cellIndex.sort(); 272 273 preIndex = cellIndex[ 0 ]; 274 for ( var i = 1, length = cellIndex.length; i < length; i++ ) 275 { 276 if ( cellIndex[ i ] - preIndex > 1 ) 277 { 278 targetIndex = preIndex + 1; 279 break; 280 } 281 preIndex = cellIndex[ i ]; 282 } 283 284 if ( !targetIndex ) 285 targetIndex = cellIndex[ 0 ] > 0 ? ( cellIndex[ 0 ] - 1 ) : ( cellIndex[ len - 1 ] + 1 ); 286 287 // we scan row by row to get the target cell 288 var trs = table.$.getElementsByTagName( 'tr' ); 289 for ( var i = 0, length = trs.length; i < length ; i++ ) 290 { 291 targetCell = trs[ i ].getElementsByTagName( 'td' )[ targetIndex ]; 292 if ( targetCell ) 293 break; 294 } 295 296 return targetCell ? new CKEDITOR.dom.element( targetCell ) : table.getPrevious(); 297 } 298 251 299 function deleteColumns( selectionOrCell ) 252 300 { 253 301 if ( selectionOrCell instanceof CKEDITOR.dom.selection ) 254 302 { 255 var colsToDelete = getSelectedCells( selectionOrCell ); 256 for ( var i = colsToDelete.length ; i >= 0 ; i-- ) 303 var colsToDelete = getSelectedCells( selectionOrCell ), 304 elementToFocus = getFocusElementAfterDelCols( colsToDelete ); 305 306 for ( var i = colsToDelete.length - 1 ; i >= 0 ; i-- ) 257 307 { 258 308 if ( colsToDelete[ i ] ) 259 309 deleteColumns( colsToDelete[ i ] ); 260 310 } 311 312 return elementToFocus; 261 313 } 262 314 else if ( selectionOrCell instanceof CKEDITOR.dom.element ) 263 315 { 264 316 // Get the cell's table. 265 317 var table = selectionOrCell.getAscendant( 'table' ); 318 if ( !table ) 319 return; 266 320 267 321 // Get the cell index. 268 322 var cellIndex = selectionOrCell.$.cellIndex; … … 288 342 row.$.removeChild( row.$.cells[ cellIndex ] ); 289 343 } 290 344 } 345 346 return null; 291 347 } 292 348 293 349 function insertCell( selection, insertBefore ) … … 315 371 { 316 372 var cellsToDelete = getSelectedCells( selectionOrCell ); 317 373 var table = cellsToDelete[ 0 ] && cellsToDelete[ 0 ].getAscendant( 'table' ); 318 var cellToFocus = getFocus edCell( cellsToDelete );374 var cellToFocus = getFocusElementAfterDelCells( cellsToDelete ); 319 375 320 376 for ( var i = cellsToDelete.length - 1 ; i >= 0 ; i-- ) 321 377 deleteCells( cellsToDelete[ i ] ); … … 767 823 exec : function( editor ) 768 824 { 769 825 var selection = editor.getSelection(); 770 deleteColumns( selection ); 826 var element = deleteColumns( selection ); 827 element && placeCursorInCell( element, true ); 771 828 } 772 829 } ); 773 830