Ticket #3373: 3373_3.patch

File 3373_3.patch, 2.4 KB (added by Josh Nisly, 10 years ago)

Resyncing to current SVN HEAD

  • _source/plugins/contextmenu/plugin.js

     
    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,
     
    79107                                };
    80108                        }
    81109
    82                         var listeners = this._.listeners,
    83                                 includedItems = [];
    84 
    85                         var selection = this.editor.getSelection(),
    86                                 element = selection && selection.getStartElement();
    87 
    88110                        // Lock the selection in IE, so it can be restored when closing the
    89111                        // menu.
    90112                        if ( CKEDITOR.env.ie )
    91113                        {
    92                                 selection.lock();
     114                                editor.getSelection().lock()
    93115                                menu.onHide = function()
    94116                                {
    95117                                        editor.getSelection().unlock();
    96118                                };
    97119                        }
    98120
    99                         // Call all listeners, filling the list of items to be displayed.
    100                         for ( var i = 0 ; i < listeners.length ; i++ )
     121                        var items = this._.getMenuItems();
     122
     123                        for ( var i = 0 ; i < items.length ; i++ )
    101124                        {
    102                                 var listenerItems = listeners[ i ]( element, selection );
    103 
    104                                 if ( listenerItems )
    105                                 {
    106                                         for ( var itemName in listenerItems )
    107                                         {
    108                                                 var item = this.editor.getMenuItem( itemName );
    109 
    110                                                 if ( item )
    111                                                 {
    112                                                         item.state = listenerItems[ itemName ];
    113                                                         menu.add( item );
    114                                                 }
    115                                         }
    116                                 }
     125                                menu.add( items[i] );
    117126                        }
    118127
    119128                        menu.show( offsetParent, editor.lang.dir == 'rtl' ? 2 : 1, offsetX, offsetY );
     
    128137                                {
    129138                                        var domEvent = event.data;
    130139
     140                                        // Don't show our context menu if there are no menu items.
     141                                        var items = this._.getMenuItems();
     142                                        if ( items.length === 0 )
     143                                                return;
     144
    131145                                        // Cancel the browser context menu.
    132146                                        domEvent.preventDefault();
    133147
© 2003 – 2019 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy