Ticket #4552: 4552_5.patch

File 4552_5.patch, 3.1 KB (added by Garry Yao, 14 years ago)
  • _source/core/tools.js

     
    189189                        return ( !!object && object instanceof Array );
    190190                },
    191191
     192                isEmpty : function ( object )
     193                {
     194                        for ( var i in object )
     195                        {
     196                                if ( object.hasOwnProperty( i ) )
     197                                        return false;
     198                        }
     199                        return true;
     200                },
    192201                /**
    193202                 * Transforms a CSS property name to its relative DOM style name.
    194203                 * @param {String} cssName The CSS property name.
  • _source/plugins/floatpanel/plugin.js

     
    5555
    5656                        this.element = element;
    5757
    58                         // Register panels to editor for easy destroying ( #4241 ).
    59                         editor.panels ? editor.panels.push( element ) : editor.panels = [ element ];
    60 
    61 
    6258                        this._ =
    6359                        {
    6460                                // The panel that will be floating.
     
    329325                        }
    330326                }
    331327        });
     328
     329        CKEDITOR.on( 'instanceDestroyed', function()
     330        {
     331                var isLastInstance = CKEDITOR.tools.isEmpty( CKEDITOR.instances );
     332
     333                for( var i in panels )
     334                {
     335                        var panel = panels[ i ];
     336                        // Safe to destroy it since there're no more instances.(#4241)
     337                        if( isLastInstance )
     338                                panel.destroy();
     339                        // Panel might be used by other instances, just hide them.(#4552)
     340                        else
     341                                panel.element.hide();
     342                }
     343                // Remove the registration.
     344                isLastInstance && ( panels = {} );
     345
     346        } );
    332347})();
  • _source/plugins/panel/plugin.js

     
    230230                block.show();
    231231
    232232                return block;
     233        },
     234
     235        destroy : function()
     236        {
     237                this.element && this.element.remove();
    233238        }
    234239};
    235240
  • _source/themes/default/theme.js

     
    155155
    156156                destroy : function( editor )
    157157                {
    158                         var container = editor.container,
    159                                 panels = editor.panels;
     158                        var container = editor.container;
    160159
    161160                        /*
    162161                         * IE BUG: Removing the editor DOM elements while the selection is inside
     
    183182                        if ( container )
    184183                                container.remove();
    185184
    186                         for( var i = 0 ; panels && i < panels.length ; i++ )
    187                                         panels[ i ].remove();
    188 
    189185                        if ( editor.elementMode == CKEDITOR.ELEMENT_MODE_REPLACE )
    190186                        {
    191187                                editor.element.show();
  • _source/core/editor.js

     
    467467                        this.theme.destroy( this );
    468468                        this.fire( 'destroy' );
    469469                        CKEDITOR.remove( this );
     470                        CKEDITOR.fire( 'instanceDestroyed', null, this );
    470471                },
    471472
    472473                /**
© 2003 – 2022, CKSource sp. z o.o. sp.k. All rights reserved. | Terms of use | Privacy policy