Changeset 691


Ignore:
Timestamp:
08/20/07 18:21:03 (7 years ago)
Author:
martinkou
Message:

Disabled single-cell table commands (i.e. Split cell, cell properties) when multiple cells are selected.
Disabled merge cell command when cell selection geometry is not rectangular or less than two cells are selected.

Location:
FCKeditor/trunk/editor/_source
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • FCKeditor/trunk/editor/_source/commandclasses/fcktablecommand.js

    r672 r691  
    9191FCKTableCommand.prototype.GetState = function() 
    9292{ 
    93         if ( FCK.EditorDocument != null ) 
     93        if ( FCK.EditorDocument != null && FCKSelection.HasAncestorNode( 'TABLE' ) ) 
    9494        { 
    95                 if( FCKSelection.HasAncestorNode( 'TABLE' ) )  
    96                         return FCK_TRISTATE_OFF ; 
     95                switch ( this.Name ) 
     96                { 
     97                        case 'TableHorizontalSplitCell' : 
     98                        case 'TableVerticalSplitCell' : 
     99                        case 'TableMergeRight' : 
     100                        case 'TableMergeDown' : 
     101                                if ( FCKTableHandler.GetSelectedCells().length == 1 ) 
     102                                        return FCK_TRISTATE_OFF ; 
     103                                else 
     104                                        return FCK_TRISTATE_DISABLED ; 
     105                                break ; 
     106                        case 'TableMergeCells' : 
     107                                if ( FCKTableHandler.CheckIsSelectionRectangular()  
     108                                                && FCKTableHandler.GetSelectedCells().length > 1 ) 
     109                                        return FCK_TRISTATE_OFF ; 
     110                                else 
     111                                        return FCK_TRISTATE_DISABLED ; 
     112                        default : 
     113                                return FCK_TRISTATE_OFF ; 
     114                } 
    97115        } 
    98         return FCK_TRISTATE_DISABLED;  
     116        else 
     117                return FCK_TRISTATE_DISABLED;  
    99118} 
  • FCKeditor/trunk/editor/_source/internals/fck_contextmenu.js

    r672 r691  
    7171                                        menu.AddSeparator() ; 
    7272                                        var oItem = menu.AddItem( 'Cell'        , FCKLang.CellCM ) ; 
    73                                         oItem.AddItem( 'TableInsertCellBefore'  , FCKLang.InsertCellBefore, 69 ) ; 
     73                                        oItem.AddItem( 'TableInsertCellBefore'  , FCKLang.InsertCellBefore, 69 ) ;  
    7474                                        oItem.AddItem( 'TableInsertCellAfter'   , FCKLang.InsertCellAfter, 58 ) ; 
    7575                                        oItem.AddItem( 'TableDeleteCells'       , FCKLang.DeleteCells, 59 ) ; 
    7676                                        if ( FCKBrowserInfo.IsIE ) 
    7777                                        { 
    78                                                 oItem.AddItem( 'TableMergeRight'        , FCKLang.MergeRight, 60 ) ; 
    79                                                 oItem.AddItem( 'TableMergeDown'         , FCKLang.MergeDown, 60 ) ; 
     78                                                oItem.AddItem( 'TableMergeRight'        , FCKLang.MergeRight, 60,  
     79                                                        FCKCommands.GetCommand( 'TableMergeRight' ).GetState() == FCK_TRISTATE_DISABLED ) ; 
     80                                                oItem.AddItem( 'TableMergeDown'         , FCKLang.MergeDown, 60, 
     81                                                        FCKCommands.GetCommand( 'TableMergeDown' ).GetState() == FCK_TRISTATE_DISABLED ) ; 
    8082                                        } 
    8183                                        else 
    82                                                 oItem.AddItem( 'TableMergeCells'        , FCKLang.MergeCells, 60 ) ; 
    83                                         oItem.AddItem( 'TableHorizontalSplitCell'       , FCKLang.HorizontalSplitCell, 61 ) ; 
    84                                         oItem.AddItem( 'TableVerticalSplitCell' , FCKLang.VerticalSplitCell, 61 ) ; 
     84                                                oItem.AddItem( 'TableMergeCells'        , FCKLang.MergeCells, 60, 
     85                                                        FCKCommands.GetCommand( 'TableMergeCells' ).GetState() == FCK_TRISTATE_DISABLED ) ; 
     86                                        oItem.AddItem( 'TableHorizontalSplitCell'       , FCKLang.HorizontalSplitCell, 61, 
     87                                                FCKCommands.GetCommand( 'TableHorizontalSplitCell' ).GetState() == FCK_TRISTATE_DISABLED ) ; 
     88                                        oItem.AddItem( 'TableVerticalSplitCell' , FCKLang.VerticalSplitCell, 61, 
     89                                                FCKCommands.GetCommand( 'TableVerticalSplitCell' ).GetState() == FCK_TRISTATE_DISABLED ) ; 
    8590                                        oItem.AddSeparator() ; 
    86                                         oItem.AddItem( 'TableCellProp'          , FCKLang.CellProperties, 57 ) ; 
     91                                        oItem.AddItem( 'TableCellProp'          , FCKLang.CellProperties, 57, 
     92                                                FCKCommands.GetCommand( 'TableCellProp' ).GetState() == FCK_TRISTATE_DISABLED ) ; 
    8793 
    8894                                        menu.AddSeparator() ; 
  • FCKeditor/trunk/editor/_source/internals/fckcommands.js

    r672 r691  
    5858                case 'Table'            : oCommand = new FCKDialogCommand( 'Table'              , FCKLang.DlgTableTitle                 , 'dialog/fck_table.html'               , 450, 250 ) ; break ; 
    5959                case 'TableProp'        : oCommand = new FCKDialogCommand( 'Table'              , FCKLang.DlgTableTitle                 , 'dialog/fck_table.html?Parent', 400, 250 ) ; break ; 
    60                 case 'TableCellProp': oCommand = new FCKDialogCommand( 'TableCell'      , FCKLang.DlgCellTitle                  , 'dialog/fck_tablecell.html'   , 550, 250 ) ; break ; 
     60                case 'TableCellProp': oCommand = new FCKDialogCommand( 'TableCell'      , FCKLang.DlgCellTitle                  , 'dialog/fck_tablecell.html'   , 550, 250, FCKTableHandler.TableCellPropGetStatus, null ) ; break ; 
    6161 
    6262                case 'Style'            : oCommand = new FCKStyleCommand() ; break ; 
  • FCKeditor/trunk/editor/_source/internals/fcktablehandler.js

    r690 r691  
    238238} 
    239239 
     240FCKTableHandler._MarkCells = function( cells, label ) 
     241{ 
     242        for ( var i = 0 ; i < cells.length ; i++ ) 
     243                cells[i][label] = true ; 
     244} 
     245 
     246FCKTableHandler._UnmarkCells = function( cells, label ) 
     247{ 
     248        for ( var i = 0 ; i < cells.length ; i++ ) 
     249        { 
     250                if ( FCKBrowserInfo.IsIE ) 
     251                        cells[i].removeAttribute( label ) ; 
     252                else 
     253                        delete cells[i][label] ; 
     254        } 
     255} 
     256 
     257FCKTableHandler._GetMarkerGeometry = function( tableMap, rowIdx, colIdx, markerName ) 
     258{ 
     259        var selectionWidth = 0 ; 
     260        var selectionHeight = 0 ; 
     261        var cellsLeft = 0 ; 
     262        var cellsUp = 0 ; 
     263        for ( var i = colIdx ; tableMap[rowIdx][i] && tableMap[rowIdx][i][markerName] ; i++ ) 
     264                selectionWidth++ ; 
     265        for ( var i = colIdx - 1 ; tableMap[rowIdx][i] && tableMap[rowIdx][i][markerName] ; i-- ) 
     266        { 
     267                selectionWidth++ ; 
     268                cellsLeft++ ; 
     269        } 
     270        for ( var i = rowIdx ; tableMap[i] && tableMap[i][colIdx] && tableMap[i][colIdx][markerName] ; i++ ) 
     271                selectionHeight++ ; 
     272        for ( var i = rowIdx - 1 ; tableMap[i] && tableMap[i][colIdx] && tableMap[i][colIdx][markerName] ; i-- ) 
     273        { 
     274                selectionHeight++ ; 
     275                cellsUp++ ; 
     276        } 
     277        return { width : selectionWidth, height : selectionHeight, x : cellsLeft, y : cellsUp } ; 
     278} 
     279 
     280FCKTableHandler.CheckIsSelectionRectangular = function() 
     281{ 
     282        // If every row and column in an area on a plane are of the same width and height, 
     283        // Then the area is a rectangle. 
     284        var cells = FCKTableHandler.GetSelectedCells() ; 
     285        if ( cells.length < 1 ) 
     286                return false ; 
     287 
     288        this._MarkCells( cells, '_CellSelected' ) ; 
     289 
     290        var tableMap = this._CreateTableMap( cells[0].parentNode.parentNode ) ; 
     291        var rowIdx = cells[0].parentNode.rowIndex ; 
     292        var colIdx = this._GetCellIndexSpan( tableMap, rowIdx, cells[0] ) ; 
     293 
     294        var geometry = this._GetMarkerGeometry( tableMap, rowIdx, colIdx, '_CellSelected' ) ; 
     295        var baseColIdx = colIdx - geometry.x ; 
     296        var baseRowIdx = rowIdx - geometry.y ; 
     297 
     298        if ( geometry.width >= geometry.height ) 
     299        { 
     300                for ( colIdx = baseColIdx ; colIdx < baseColIdx + geometry.width ; colIdx++ ) 
     301                { 
     302                        rowIdx = baseRowIdx + ( colIdx - baseColIdx ) % geometry.height ; 
     303                        if ( ! tableMap[rowIdx] || ! tableMap[rowIdx][colIdx] ) 
     304                        { 
     305                                FCKDebug.Output( rowIdx + "," + colIdx + " not found" ) ; 
     306                                this._UnmarkCells( cells, '_CellSelected' ) ; 
     307                                return false ; 
     308                        } 
     309                        var g = this._GetMarkerGeometry( tableMap, rowIdx, colIdx, '_CellSelected' ) ; 
     310                        if ( g.width != geometry.width || g.height != geometry.height ) 
     311                        { 
     312                                FCKDebug.Output( "size " + g.width + "x" + g.height + " not match" ) ; 
     313                                this._UnmarkCells( cells, '_CellSelected' ) ; 
     314                                return false ; 
     315                        } 
     316                } 
     317        } 
     318        else 
     319        { 
     320                for ( rowIdx = baseRowIdx ; rowIdx < baseRowIdx + geometry.height ; rowIdx++ ) 
     321                { 
     322                        colIdx = baseColIdx + ( rowIdx - baseRowIdx ) % geometry.width ; 
     323                        if ( ! tableMap[rowIdx] || ! tableMap[rowIdx][colIdx] ) 
     324                        { 
     325                                FCKDebug.Output( rowIdx + "," + colIdx + " not found" ) ; 
     326                                this._UnmarkCells( cells, '_CellSelected' ) ; 
     327                                return false ; 
     328                        } 
     329                        var g = this._GetMarkerGeometry( tableMap, rowIdx, colIdx, '_CellSelected' ) ; 
     330                        if ( g.width != geometry.width || g.height != geometry.height ) 
     331                        { 
     332                                FCKDebug.Output( "size " + g.width + "x" + g.height + " not match" ) ; 
     333                                this._UnmarkCells( cells, '_CellSelected' ) ; 
     334                                return false ; 
     335                        } 
     336                } 
     337        } 
     338 
     339        this._UnmarkCells( cells, '_CellSelected' ) ; 
     340        return true ; 
     341} 
     342 
    240343FCKTableHandler.MergeCells = function() 
    241344{ 
     
    244347 
    245348        // TODO: Reimplement MergeCells() with this._InstallTableMap(). 
     349 
    246350} 
    247351 
     
    582686                { 
    583687                        var cell = tableMap[i][j] ; 
    584                         cell.removeAttribute( '_colScanned' ) ; 
    585                         cell.removeAttribute( '_rowScanned' ) ; 
     688                        if ( FCKBrowser.IsIE ) 
     689                        { 
     690                                cell.removeAttribute( '_colScanned' ) ; 
     691                                cell.removeAttribute( '_rowScanned' ) ; 
     692                        } 
     693                        else 
     694                        { 
     695                                delete cell._colScanned ; 
     696                                delete cell._rowScanned ; 
     697                        } 
    586698                } 
    587699        } 
     
    624736        } 
    625737} 
     738 
     739FCKTableHandler.TableCellPropGetStatus = function() 
     740{ 
     741        if ( FCKTableHandler.GetSelectedCells().length == 1 ) 
     742                return FCK_TRISTATE_OFF ; 
     743        else 
     744                return FCK_TRISTATE_DISABLED ; 
     745} 
  • FCKeditor/trunk/editor/_source/internals/fcktools_gecko.js

    r681 r691  
    224224 
    225225                /* 
    226                 FCKDebug.Output( el.tagName + ":" + "offset=" + el.offsetLeft + "," + el.offsetTop + "  " + "scroll=" + el.scrollLeft + "," + 
    227                               el.scrollTop ) ; 
     226                FCKDebug.Output( el.tagName + ":" + "offset=" + el.offsetLeft + "," + el.offsetTop + "  "  
     227                                + "scroll=" + el.scrollLeft + "," + el.scrollTop ) ; 
    228228                */ 
     229 
    229230                c.X += el.offsetLeft - el.scrollLeft ; 
    230231                c.Y += el.offsetTop - el.scrollTop  ; 
Note: See TracChangeset for help on using the changeset viewer.
© 2003 – 2012 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy