Ticket #3488: 3488.patch
File 3488.patch, 2.3 KB (added by , 15 years ago) |
---|
-
_source/plugins/tabletools/plugin.js
14 14 } 15 15 16 16 var cellNodeRegex = /^(?:td|th)$/; 17 17 18 function getSelectedCells( selection ) 18 19 { 19 20 var ranges = selection.getRanges(); 20 21 var retval = []; 22 var database = {}; 21 23 24 function moveOutOfCellGuard( node ) 25 { 26 // Apply to the first cell only. 27 if ( retval.length > 0 ) 28 return; 29 30 // If we are exiting from the first </td>, then the td should definitely be 31 // included. 32 if ( node.type == CKEDITOR.NODE_ELEMENT && cellNodeRegex.test( node.getName() ) 33 && !node.getCustomData( 'selected_cell' ) ) 34 { 35 CKEDITOR.dom.element.setMarker( database, node, 'selected_cell', true ); 36 retval.push( node ); 37 } 38 } 39 22 40 for ( var i = 0 ; i < ranges.length ; i++ ) 23 41 { 24 42 var range = ranges[ i ]; 25 var boundaryNodes = range.getBoundaryNodes(); 26 var currentNode = boundaryNodes.startNode; 27 var endNode = boundaryNodes.endNode; 28 var startCell = currentNode.getAscendant( 'td', true ) || currentNode.getAscendant( 'th', true ); 43 var walker = new CKEDITOR.dom.walker( range ); 44 walker.guard = moveOutOfCellGuard; 29 45 30 if ( startCell ) 31 retval.push( startCell ); 46 while ( ( node = walker.next() ) ) 47 { 48 // If may be possible for us to have a range like this: 49 // <td>^1</td><td>^2</td> 50 // The 2nd td shouldn't be included. 51 // 52 // So we have to take care to include a td we've entered only when we've 53 // walked into its children. 32 54 33 if ( range.collapsed || currentNode.equals( endNode ) ) 34 continue; 35 36 while ( !( currentNode = currentNode.getNextSourceNode() ).equals( endNode ) ) 37 { 38 if ( currentNode.type == CKEDITOR.NODE_ELEMENT && cellNodeRegex.test( currentNode.getName() ) ) 39 retval.push( currentNode ); 55 var parent = node.getParent(); 56 if ( parent && cellNodeRegex.test( parent.getName() ) && !parent.getCustomData( 'selected_cell' ) ) 57 { 58 CKEDITOR.dom.element.setMarker( database, parent, 'selected_cell', true ); 59 retval.push( parent ); 60 } 40 61 } 41 62 } 42 63 64 CKEDITOR.dom.element.clearAllMarkers( database ); 65 43 66 return retval; 44 67 } 45 68