Ticket #2813: 2813_2.patch

File 2813_2.patch, 2.5 KB (added by Koen Willems, 13 years ago)
  • fcktablehandler.js

     
    4141
    4242FCKTableHandler.DeleteRows = function( row )
    4343{
    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 )
    49         {
    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                 }
     44        // Get all selected cells.
     45        var cells = this.GetSelectedCells() ;
     46        if ( cells.length < 1 )
    6347                return ;
    64         }
    6548
    66         // Get the row's table.
    67         var oTable = FCKTools.GetElementAscensor( row, 'TABLE' ) ;
     49        var oCell = cells[0] ;
     50        var oTable = FCKTools.GetElementAscensor( oCell, 'TABLE' ) ;
     51        var rowIdx = oCell.parentNode.rowIndex ;
     52        var rowSpan = isNaN( oCell.rowSpan ) ? 1 : oCell.rowSpan ;
     53        var tableMap = this._CreateTableMap( oCell ) ;
    6854
     55        // Put the numbers of the row(s) to delete in an array.
     56        var aRows = new Array() ;
     57        for ( var i = 0; i < rowSpan; i++ )
     58                aRows[i] = rowIdx + i ;
     59
    6960        // If just one row is available then delete the entire table.
    7061        if ( oTable.rows.length == 1 )
    7162        {
     
    7364                return ;
    7465        }
    7566
    76         // Delete the row.
    77         row.parentNode.removeChild( row ) ;
     67        // Delete the row(s).
     68        for ( var i = aRows.length - 1; i >= 0; i-- )
     69                oTable.rows[aRows[i]].parentNode.removeChild( oTable.rows[aRows[i]] ) ;
     70
     71        // Build newTableMap.
     72        var newTableMap = new Array() ;
     73        for ( var i = 0 ; i < tableMap.length ; i++ )
     74        {
     75                // Check if row has to be deleted.
     76                var delRow = 0 ;
     77                for ( var t = 0; t < aRows.length; t++ )
     78                {
     79                        if( i == aRows[t] )
     80                                delRow = 1 ;
     81                }
     82
     83                if( delRow == 0 )
     84                {
     85                        var newRow = new Array() ;
     86                        for ( var j = 0; j < tableMap[i].length ; j++ )
     87                                newRow.push( tableMap[i][j] ) ;
     88
     89                        newTableMap.push( newRow ) ;
     90                }
     91        }
     92
     93        this._InstallTableMap( newTableMap, oTable ) ;
    7894}
    7995
    8096FCKTableHandler.DeleteTable = function( table )
© 2003 – 2021 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy