Ticket #2813: 2813_5.patch
File 2813_5.patch, 6.6 KB (added by , 15 years ago) |
---|
-
editor/_source/internals/fcktablehandler.js
41 41 42 42 FCKTableHandler.DeleteRows = function( row ) 43 43 { 44 // If no row has been passed as a parameter, 45 // then get the row( s ) containing the cells where the selection is placed in. 46 // If user selected multiple rows ( by selecting multiple cells ), walk 47 // the selected cell list and delete the rows containing the selected cells 48 if ( ! row ) 44 // Get a list of selected cells. 45 var cells ; 46 if ( !row ) 49 47 { 50 var aCells = FCKTableHandler.GetSelectedCells() ; 51 var aRowsToDelete = new Array() ; 52 //queue up the rows -- it's possible ( and likely ) that we may get duplicates 53 for ( var i = 0; i < aCells.length; i++ ) 54 { 55 var oRow = aCells[i].parentNode ; 56 aRowsToDelete[oRow.rowIndex] = oRow ; 57 } 58 for ( var i = aRowsToDelete.length; i >= 0; i-- ) 59 { 60 if ( aRowsToDelete[i] ) 61 FCKTableHandler.DeleteRows( aRowsToDelete[i] ); 62 } 63 return ; 48 cells = this.GetSelectedCells() ; 49 if ( cells.length < 1 ) 50 return ; 64 51 } 52 else 53 cells = [ row.cells[ 0 ] ] ; 65 54 66 // Get the row's table. 67 var oTable = FCKTools.GetElementAscensor( row, 'TABLE' ) ; 55 var database = {} ; 56 for ( var i = 0 ; i < cells.length ; i++ ) 57 FCKDomTools.SetElementMarker( database, cells[ i ], '_fck_remove', true ) ; 68 58 69 // If just one row is available then delete the entire table. 70 if ( oTable.rows.length == 1 ) 59 var table = FCKTools.GetElementAscensor( cells[ 0 ], 'table' ) ; 60 61 // Convert the current table to table map. 62 var tableMap = this._CreateTableMap( table ) ; 63 var processedTableMap = [] ; 64 65 // Re-create the table map with selected rows removed. 66 for ( var i = 0 ; i < tableMap.length ; i++ ) 71 67 { 72 FCKTableHandler.DeleteTable( oTable ) ; 73 return ; 68 var currentRow = tableMap[ i ] ; 69 var removeCellFound = false ; 70 for ( var j = 0 ; j < currentRow.length ; j++ ) 71 { 72 if ( currentRow[ j ][ '_fck_remove' ] ) 73 removeCellFound = true ; 74 } 75 76 if ( !removeCellFound ) 77 processedTableMap.push( currentRow ) ; 74 78 } 75 79 76 // Delete the row. 77 row.parentNode.removeChild( row ) ; 80 FCKDomTools.ClearAllMarkers( database ) ; 81 82 // Install the table map, or delete the table if there're no rows left. 83 if ( processedTableMap.length > 0 ) 84 this._InstallTableMap( processedTableMap, table ) ; 85 else 86 this.DeleteTable( table ) ; 78 87 } 79 88 80 89 FCKTableHandler.DeleteTable = function( table ) … … 627 636 // Cell6, Cell2, Cell2, Cell7 628 637 FCKTableHandler._CreateTableMap = function( refCell ) 629 638 { 630 var table = ( refCell.nodeName == 'TABLE' ? refCell : refCell.parentNode.parentNode.parentNode) ;639 var table = ( refCell.nodeName == 'TABLE' ? refCell : FCKTools.GetElementAscensor( refCell, 'table' ) ) ; 631 640 632 641 var aRows = table.rows ; 633 642 634 643 // Row and Column counters. 635 644 var r = -1 ; 636 645 637 var aMap = new Array();646 var aMap = [] ; 638 647 639 648 for ( var i = 0 ; i < aRows.length ; i++ ) 640 649 { 641 650 r++ ; 642 651 if ( !aMap[r] ) 643 aMap[r] = new Array();652 aMap[r] = [] ; 644 653 645 654 var c = -1 ; 646 655 … … 658 667 for ( var rs = 0 ; rs < iRowSpan ; rs++ ) 659 668 { 660 669 if ( !aMap[r + rs] ) 661 aMap[r + rs] = new Array();670 aMap[r + rs] = [] ; 662 671 663 672 for ( var cs = 0 ; cs < iColSpan ; cs++ ) 664 673 { … … 680 689 // for storing the calculated rowSpan in IE. 681 690 var rowSpanAttr = FCKBrowserInfo.IsIE ? "_fckrowspan" : "rowSpan" ; 682 691 683 // Disconnect all the cells in t ableMapfrom their parents, set all colSpan and rowSpan attributes to 1.684 for ( var i = 0 ; i < table Map.length ; i++ )692 // Disconnect all the cells in the table from their parents, set all colSpan and rowSpan attributes to 1. 693 for ( var i = 0 ; i < table.rows.length ; i++ ) 685 694 { 686 for ( var j = 0 ; j < tableMap[i].length ; j++ ) 695 var currentRow = table.rows[ i ]; 696 for ( var j = currentRow.cells.length - 1 ; j >= 0 ; j-- ) 687 697 { 688 var cell = tableMap[i][j] ; 689 if ( cell.parentNode ) 690 cell.parentNode.removeChild( cell ) ; 698 var cell = currentRow.cells[ j ] ; 699 cell.parentNode.removeChild( cell ) ; 691 700 cell.colSpan = cell[rowSpanAttr] = 1 ; 692 701 } 693 702 } … … 735 744 for ( var j = 0 ; j < tableMap[i].length ; j++) 736 745 { 737 746 var cell = tableMap[i][j] ; 738 FCKDomTools.ClearElementJSProperty( cell, '_colScanned' ) ;739 FCKDomTools.ClearElementJSProperty( cell, '_rowScanned' ) ;747 FCKDomTools.ClearElementJSProperty( cell, '_colScanned' ) ; 748 FCKDomTools.ClearElementJSProperty( cell, '_rowScanned' ) ; 740 749 } 741 750 } 742 751 … … 760 769 } 761 770 j += cell.colSpan ; 762 771 if ( cell.colSpan == 1 ) 763 cell.removeAttribute( 'col span' ) ;772 cell.removeAttribute( 'colSpan' ) ; 764 773 if ( cell.rowSpan == 1 ) 765 cell.removeAttribute( 'row span' ) ;774 cell.removeAttribute( 'rowSpan' ) ; 766 775 } 767 776 if ( FCKBrowserInfo.IsIE ) 768 777 { … … 774 783 FCKDomTools.MoveChildren( rowObj, table.rows[i] ) ; 775 784 } 776 785 } 786 787 // Remove excess rows. 788 for ( var i = table.rows.length - 1 ; i >= tableMap.length ; i-- ) 789 { 790 var row = table.rows[ i ] ; 791 var rowParent = row.parentNode ; 792 793 rowParent.removeChild( row ) ; 794 if ( rowParent.rows.length < 1 ) 795 rowParent.parentNode.removeChild( rowParent ) ; 796 } 777 797 } 778 798 779 799 FCKTableHandler._MoveCaretToCell = function ( refCell, toStart ) -
editor/_source/internals/fckdomtools.js
722 722 delete element[attrName] ; 723 723 }, 724 724 725 SetElementMarker : function ( markerObj, element, attrName, value )725 SetElementMarker : function ( markerObj, element, attrName, value ) 726 726 { 727 727 var id = String( parseInt( Math.random() * 0xffffffff, 10 ) ) ; 728 728 element._FCKMarkerId = id ; -
_whatsnew.html
79 79 of caption tag in tables with table headers.</li> 80 80 <li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/3818">#3818</a>] Fixed layout error 81 81 in text and background color popups when more colors button is disabled.</li> 82 <li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2813">#2813</a>] Deleting a row 83 does not correct the rowSpan of merged cells.</li> 82 84 </ul> 83 85 <p> 84 86 <a href="_whatsnew_history.html">See previous versions history</a></p>