Changeset 460


Ignore:
Timestamp:
07/18/07 01:49:26 (7 years ago)
Author:
martinkou
Message:

Added table resize logic which is working under Firefox and Safari. More work needed for IE and Opera.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • FCKeditor/branches/developers/martinkou/editor/plugins/dragresizetable/fckplugin.js

    r459 r460  
    127127                        evt = window.event ; 
    128128                FCKDragTableHandler._MouseMoveMode = 0 ; 
    129                 if ( FCKBrowserInfo.IsIE ) 
    130                         FCKDragTableHandler._ResizeBar.filters.item("DXImageTransform.Microsoft.Alpha").opacity = 10 ; 
    131                 else 
    132                         FCKDragTableHandler._ResizeBar.style.opacity = 0.1 ; 
     129                FCKDragTableHandler._HideResizeBar() ; 
     130                 
     131                if ( ! FCKDragTableHandler._LeftCell ) 
     132                        return ; 
     133                 
     134                // First, get the mouse coordiantes relative to the outer window, and calculate the delta value. 
     135                var mouse = { "x" : evt.clientX, "y" : evt.clientY } ; 
     136                var mouseNode = evt.srcElement || evt.originalTarget ; 
     137                var mouseDocument = mouseNode.ownerDocument ; 
     138                if ( mouseDocument == FCK.EditorDocument ) 
     139                { 
     140                        var offset = FCKDragTableHandler._GetDocumentPosition( window, FCK.EditingArea.IFrame ) ; 
     141                        mouse.x += offset.x ; 
     142                        mouse.y += offset.y ; 
     143                } 
     144                var deltaX = mouse.x - FCKDragTableHandler._OriginalX ; 
     145 
     146                // Then, build an array of current column width values. 
     147                // This algorithm can be very slow if the cells have insane colSpan values. (e.g. colSpan=1000). 
     148                var table = FCKTools.GetElementAscensor( FCKDragTableHandler._LeftCell, "table" ) ; 
     149                var colArray = [] ; 
     150                for ( var r = 0 ; r < table.rows.length ; r++ ) 
     151                { 
     152                        var colIndex = 0 ; 
     153                        var row = table.rows.item( r ) ; 
     154                        for ( var c = 0 ; c < row.cells.length ; c++ ) 
     155                        { 
     156                                var cell = row.cells.item( c ) ; 
     157                                var width = FCKDragTableHandler._GetCellWidth( table, cell ) ; 
     158                                var colSpan = parseInt( cell.colSpan ) ; 
     159                                if ( colSpan != colSpan ) 
     160                                        colSpan = 1 ; 
     161                                if ( colArray.length < colIndex + colSpan ) 
     162                                { 
     163                                        for ( var i = 0 ; i < colSpan ; i++ ) 
     164                                                colArray.push( { "width" : width / colSpan, "colSpan" : colSpan } ) ; 
     165                                } 
     166                                else 
     167                                { 
     168                                        for ( var i = colIndex ; i < colIndex + colSpan ; i++ ) 
     169                                        { 
     170                                                var guessItem = colArray[i] ; 
     171                                                if ( guessItem.colSpan > colSpan ) 
     172                                                { 
     173                                                        guessItem.width = width / colSpan ; 
     174                                                        guessItem.colSpan = colSpan ; 
     175                                                } 
     176                                        } 
     177                                } 
     178                                colIndex += colSpan ; 
     179                        } 
     180                } 
     181 
     182                // Find out the equivalent column index of the two cells selected for resizing. 
     183                var row = FCKTools.GetElementAscensor( FCKDragTableHandler._LeftCell, "tr" ) ; 
     184                var colIndex = 0 ; 
     185                for ( var i = 0 ; i <= FCKDragTableHandler._LeftCell.cellIndex ; i++ ) 
     186                { 
     187                        var colSpan = parseInt( row.cells.item( i ).colSpan ) ; 
     188                        if ( colSpan != colSpan ) 
     189                                colSpan = 1 ; 
     190                        colIndex += colSpan ; 
     191                } 
     192 
     193                // Note that colIndex must be at least 1 here, so it's safe to subtract 1 from it. 
     194                colIndex-- ; 
     195 
     196                // Modify the widths in the colArray according to the mouse coordinate delta value. 
     197                colArray[colIndex].width += deltaX ; 
     198                colArray[colIndex + 1].width -= deltaX ; 
     199 
     200                // Clear all cell widths, delete all <col> elements from the table. 
     201                for ( var r = 0 ; r < table.rows.length ; r++ ) 
     202                { 
     203                        var row = table.rows.item( r ) ; 
     204                        for ( var c = 0 ; c < row.cells.length ; c++ ) 
     205                        { 
     206                                var cell = row.cells.item( c ) ; 
     207                                cell.width = "" ; 
     208                                cell.style.width = "" ; 
     209                        } 
     210                } 
     211                var colElements = table.getElementsByTagName( "col" ) ; 
     212                for ( var i = colElements.length - 1 ; i >= 0 ; i-- ) 
     213                        colElements[i].parentNode.removeChild( colElements[i] ) ; 
     214 
     215                // Find the place for adding new <col> elements. 
     216                        colParent = table ; 
     217                 
     218                // Generate <col> elements. 
     219                for ( var i = colArray.length - 1 ; i >= 0 ; i-- ) 
     220                { 
     221                        var col = FCK.EditorDocument.createElement( "col" ) ; 
     222                        col.width = colArray[i].width ; 
     223                        colParent.insertBefore( col, colParent.childNodes[0] ) ; 
     224                } 
    133225        }, 
    134226        "_ResizeBarMouseMoveListener" : function( evt ) 
     
    317409 
    318410                var paddingBar = FCKDragTableHandler._ResizeBar ; 
     411                if ( FCKBrowserInfo.IsIE ) 
     412                        paddingBar.filters.item("DXImageTransform.Microsoft.Alpha").opacity = 10 ; 
     413                else 
     414                        paddingBar.style.opacity = 0.1 ; 
    319415                var offset = FCKDragTableHandler._GetDocumentPosition( window, FCK.EditingArea.IFrame ) ; 
    320                 paddingBar.style.top = ( offset.y + FCKDragTableHandler._GetDocumentPosition( w, table ).y ) + "px" ; 
     416                paddingBar.style.top = ( offset.y + FCKDragTableHandler._GetWindowPosition( w, table ).y ) + "px" ; 
    321417                paddingBar.style.height = table.offsetHeight + "px" ; 
    322418                var bw = parseInt( table.border ) ; 
     
    334430                var visibleBar = document.createElement( "div" ) ; 
    335431                visibleBar.style.position = "absolute" ; 
    336                 visibleBar.style.backgroundColor = " blue " ; 
     432                visibleBar.style.backgroundColor = "blue" ; 
    337433                visibleBar.style.width = barWidth + "px" ; 
    338434                visibleBar.style.height = table.offsetHeight + "px" ; 
Note: See TracChangeset for help on using the changeset viewer.
© 2003 – 2012 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy