Ticket #3650: 3650_2.patch
File 3650_2.patch, 3.4 KB (added by , 14 years ago) |
---|
-
_source/plugins/tabletools/plugin.js
17 17 18 18 function getSelectedCells( selection ) 19 19 { 20 // Walker will try to split text nodes, which will make the current selection 21 // invalid. So save bookmarks before doing anything. 22 var bookmarks = selection.createBookmarks(); 23 20 24 var ranges = selection.getRanges(); 21 25 var retval = []; 22 26 var database = {}; … … 40 44 for ( var i = 0 ; i < ranges.length ; i++ ) 41 45 { 42 46 var range = ranges[ i ]; 43 var walker = new CKEDITOR.dom.walker( range );44 walker.guard = moveOutOfCellGuard;45 47 46 while ( ( node = walker.next() ))48 if ( range.collapsed ) 47 49 { 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. 50 // Walker does not handle collapsed ranges yet - fall back to old API. 51 var startNode = range.getCommonAncestor(); 52 var nearestCell = startNode.getAscendant( 'td', true ) || startNode.getAscendant( 'th', true ); 53 if ( nearestCell ) 54 retval.push( nearestCell ); 55 } 56 else 57 { 58 var walker = new CKEDITOR.dom.walker( range ); 59 var node; 60 walker.guard = moveOutOfCellGuard; 54 61 55 var parent = node.getParent(); 56 if ( parent && cellNodeRegex.test( parent.getName() ) && !parent.getCustomData( 'selected_cell' ) ) 62 while ( ( node = walker.next() ) ) 57 63 { 58 CKEDITOR.dom.element.setMarker( database, parent, 'selected_cell', true ); 59 retval.push( parent ); 64 // If may be possible for us to have a range like this: 65 // <td>^1</td><td>^2</td> 66 // The 2nd td shouldn't be included. 67 // 68 // So we have to take care to include a td we've entered only when we've 69 // walked into its children. 70 71 var parent = node.getParent(); 72 if ( parent && cellNodeRegex.test( parent.getName() ) && !parent.getCustomData( 'selected_cell' ) ) 73 { 74 CKEDITOR.dom.element.setMarker( database, parent, 'selected_cell', true ); 75 retval.push( parent ); 76 } 60 77 } 61 78 } 62 79 } 63 80 64 81 CKEDITOR.dom.element.clearAllMarkers( database ); 65 82 83 // Restore selection position. 84 selection.selectBookmarks( bookmarks ); 85 66 86 return retval; 67 87 } 68 88 -
_source/core/dom/range.js
687 687 var startContainer = this.startContainer; 688 688 var startOffset = this.startOffset; 689 689 690 var endContainer = this.endContainer;691 var endOffset = this.endOffset;692 693 690 if ( !ignoreStart && startContainer && startContainer.type == CKEDITOR.NODE_TEXT ) 694 691 { 695 692 // If the offset is zero, we just insert the new node before … … 725 722 this.setStart( startContainer, startOffset ); 726 723 } 727 724 725 var endContainer = this.endContainer; 726 var endOffset = this.endOffset; 727 728 728 if ( !ignoreEnd && endContainer && !this.collapsed && endContainer.type == CKEDITOR.NODE_TEXT ) 729 729 { 730 730 // If the offset is zero, we just insert the new node before