Ticket #3373: contextmenu.patch

File contextmenu.patch, 2.3 KB (added by Josh Nisly, 10 years ago)
  • plugins\contextmenu\plugin.js

    old new  
    3939
    4040        _ :
    4141        {
     42                getMenuItems : function()
     43                {
     44                        var items = [];
     45
     46                        var selection = this.editor.getSelection(),
     47                                element = selection && selection.getStartElement();
     48
     49                        for ( var i = 0 ; i < this._.listeners.length ; i++ )
     50                        {
     51                                var listenerItems = this._.listeners[ i ]( element, selection );
     52
     53                                if ( listenerItems )
     54                                {
     55                                        for ( var itemName in listenerItems )
     56                                        {
     57                                                var item = this.editor.getMenuItem( itemName );
     58
     59                                                if ( item )
     60                                                {
     61                                                        item.state = listenerItems[ itemName ];
     62                                                        items.push( item );
     63                                                }
     64                                        }
     65                                }
     66                        }
     67                        return items;
     68                },
     69               
    4270                onMenu : function( offsetParent, offsetX, offsetY )
    4371                {
    4472                        var menu = this._.menu,
     
    84112                                };
    85113                        }
    86114
    87                         var listeners = this._.listeners,
    88                                 includedItems = [];
    89 
    90                         var selection = this.editor.getSelection(),
    91                                 element = selection && selection.getStartElement();
    92 
    93115                        // Lock the selection in IE, so it can be restored when closing the
    94116                        // menu.
    95117                        if ( CKEDITOR.env.ie )
     
    97119                                selection.lock();
    98120                                menu.onHide = unlockFn;
    99121                        }
    100 
    101                         // Call all listeners, filling the list of items to be displayed.
    102                         for ( var i = 0 ; i < listeners.length ; i++ )
     122                       
     123                        var items = this._.getMenuItems();
     124                       
     125                        for ( var i = 0 ; i < items.length ; i++ )
    103126                        {
    104                                 var listenerItems = listeners[ i ]( element, selection );
    105 
    106                                 if ( listenerItems )
    107                                 {
    108                                         for ( var itemName in listenerItems )
    109                                         {
    110                                                 var item = this.editor.getMenuItem( itemName );
    111 
    112                                                 if ( item )
    113                                                 {
    114                                                         item.state = listenerItems[ itemName ];
    115                                                         menu.add( item );
    116                                                 }
    117                                         }
    118                                 }
     127                                menu.add( items[i] );
    119128                        }
    120 
    121129                        menu.show( offsetParent, editor.lang.dir == 'rtl' ? 2 : 1, offsetX, offsetY );
    122130                }
    123131        },
     
    130138                                {
    131139                                        var domEvent = event.data;
    132140
     141                                        // Don't show our context menu if there are no menu items.
     142                                        var items = this._.getMenuItems();
     143                                        if ( items.length === 0 )
     144                                                return;
     145
    133146                                        // Cancel the browser context menu.
    134147                                        domEvent.preventDefault();
    135148
© 2003 – 2019 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy