Changeset 6311


Ignore:
Timestamp:
01/11/11 20:45:31 (3 years ago)
Author:
Saare
Message:

#6020: Clipboard buttons' state now matches the respective context menu buttons.

Location:
CKEditor/trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • CKEditor/trunk/CHANGES.html

    r6310 r6311  
    8585                <li><a href="http://dev.ckeditor.com/ticket/6873">#6873</a> : Difficult to drag the resize grip of an iframe dialog.</li> 
    8686                <li><a href="http://dev.ckeditor.com/ticket/6896">#6896</a> : [Webkit] Unable to paste into sourcearea when maximized.</li> 
     87                <li><a href="http://dev.ckeditor.com/ticket/6020">#6020</a> : Cut, Copy and Paste buttons' state are now aligned with the respective context menu buttons.</li> 
    8788        </ul> 
    8889        <h3> 
  • CKEditor/trunk/_source/plugins/clipboard/plugin.js

    r6302 r6311  
    6262        { 
    6363                this.type = type; 
    64                 this.canUndo = ( this.type == 'cut' );          // We can't undo copy to clipboard. 
     64                this.canUndo = this.type == 'cut';              // We can't undo copy to clipboard. 
     65                this.startDisabled = true; 
    6566        }; 
    6667 
     
    280281        } 
    281282 
     283        var depressBeforeEvent; 
     284        function stateFromNamedCommand( command, editor ) 
     285        { 
     286                // IE Bug: queryCommandEnabled('paste') fires also 'beforepaste(copy/cut)', 
     287                // guard to distinguish from the ordinary sources( either 
     288                // keyboard paste or execCommand ) (#4874). 
     289                CKEDITOR.env.ie && ( depressBeforeEvent = 1 ); 
     290 
     291                var retval = editor.document.$.queryCommandEnabled( command ) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED; 
     292                depressBeforeEvent = 0; 
     293                return retval; 
     294        } 
     295 
     296        var inReadOnly; 
     297        function setToolbarStates() 
     298        { 
     299                if ( this.mode != 'wysiwyg' ) 
     300                        return; 
     301 
     302                this.getCommand( 'cut' ).setState( inReadOnly ? CKEDITOR.TRISTATE_DISABLED : stateFromNamedCommand( 'Cut', this ) ); 
     303                this.getCommand( 'copy' ).setState( stateFromNamedCommand( 'Copy', this ) ); 
     304                var pasteState = inReadOnly ? CKEDITOR.TRISTATE_DISABLED : 
     305                                                CKEDITOR.env.webkit ? CKEDITOR.TRISTATE_OFF : stateFromNamedCommand( 'Paste', this ); 
     306                this.fire( 'pasteState', pasteState ); 
     307        } 
     308 
    282309        // Register the plugin. 
    283310        CKEDITOR.plugins.add( 'clipboard', 
     
    305332                                                        editor.openDialog( 'paste' ); 
    306333                                                }, 0 ); 
     334                                        }); 
     335 
     336                                editor.on( 'pasteState', function( evt ) 
     337                                        { 
     338                                                editor.getCommand( 'paste' ).setState( evt.data ); 
    307339                                        }); 
    308340 
     
    347379                                { 
    348380                                        var body = editor.document.getBody(); 
    349                                         body.on( ( (mode == 'text' && CKEDITOR.env.ie ) || CKEDITOR.env.webkit ) ? 'paste' : 'beforepaste', 
     381                                        body.on( ( ( mode == 'text' && CKEDITOR.env.ie ) || CKEDITOR.env.webkit ) ? 'paste' : 'beforepaste', 
    350382                                                function( evt ) 
    351383                                                { 
     
    367399 
    368400                                        body.on( 'beforecut', function() { !depressBeforeEvent && fixCut( editor ); } ); 
     401 
     402                                        body.on( 'mouseup', setToolbarStates, editor ); 
     403                                        body.on( 'keyup', setToolbarStates, editor ); 
     404                                }); 
     405 
     406                                // For improved performance, we're checking the readOnly state on selectionChange instead of hooking a key event for that. 
     407                                editor.on( 'selectionChange', function( evt ) 
     408                                { 
     409                                        inReadOnly = evt.data.selection.getCommonAncestor().isReadOnly(); 
    369410                                }); 
    370411 
     
    372413                                if ( editor.contextMenu ) 
    373414                                { 
    374                                         var depressBeforeEvent; 
    375                                         function stateFromNamedCommand( command ) 
    376                                         { 
    377                                                 // IE Bug: queryCommandEnabled('paste') fires also 'beforepaste(copy/cut)', 
    378                                                 // guard to distinguish from the ordinary sources( either 
    379                                                 // keyboard paste or execCommand ) (#4874). 
    380                                                 CKEDITOR.env.ie && ( depressBeforeEvent = 1 ); 
    381  
    382                                                 var retval = editor.document.$.queryCommandEnabled( command ) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED; 
    383                                                 depressBeforeEvent = 0; 
    384                                                 return retval; 
    385                                         } 
    386  
    387415                                        editor.contextMenu.addListener( function( element, selection ) 
    388416                                                { 
    389417                                                        var readOnly = selection.getCommonAncestor().isReadOnly(); 
    390418                                                        return { 
    391                                                                 cut : !readOnly && stateFromNamedCommand( 'Cut' ), 
    392                                                                 copy : stateFromNamedCommand( 'Copy' ), 
    393                                                                 paste : !readOnly && ( CKEDITOR.env.webkit ? CKEDITOR.TRISTATE_OFF : stateFromNamedCommand( 'Paste' ) ) 
     419                                                                cut : !readOnly && stateFromNamedCommand( 'Cut', editor ), 
     420                                                                copy : stateFromNamedCommand( 'Copy', editor ), 
     421                                                                paste : !readOnly && ( CKEDITOR.env.webkit ? CKEDITOR.TRISTATE_OFF : stateFromNamedCommand( 'Paste', editor ) ) 
    394422                                                        }; 
    395423                                                }); 
  • CKEditor/trunk/_source/plugins/pastefromword/plugin.js

    r5383 r6311  
    4848                                }); 
    4949 
     50                        editor.on( 'pasteState', function( evt ) 
     51                                { 
     52                                        editor.getCommand( 'pastefromword' ).setState( evt.data ); 
     53                                }); 
     54 
    5055                        editor.on( 'paste', function( evt ) 
    5156                        { 
     
    9499 
    95100                        return !isLoaded; 
    96                 } 
     101                }, 
     102 
     103                requires : [ 'clipboard' ] 
    97104        }); 
    98105})(); 
  • CKEditor/trunk/_source/plugins/pastetext/plugin.js

    r6241 r6311  
    6666                                }, null, null, 0 ); 
    6767                        } 
     68 
     69                        editor.on( 'pasteState', function( evt ) 
     70                                { 
     71                                        editor.getCommand( 'pastetext' ).setState( evt.data ); 
     72                                }); 
    6873                }, 
    6974 
Note: See TracChangeset for help on using the changeset viewer.
© 2003 – 2012 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy