Ticket #2922: 2922.patch

File 2922.patch, 4.7 KB (added by Garry Yao, 15 years ago)
  • _source/core/editor.js

     
    149149                                // files to get loaded.
    150150                                for ( var pluginName in plugins )
    151151                                {
    152                                         var plugin = plugins[ pluginName ],
    153                                                 pluginLangs = plugin.lang,
     152                                        var plugin = plugins[ pluginName ];
     153
     154                                        // Bypass those without definiton.
     155                                        if( !plugin )
     156                                                continue;
     157                                       
     158                                        var pluginLangs = plugin.lang,
    154159                                                pluginPath = CKEDITOR.plugins.getPath( pluginName ),
    155160                                                lang = null;
    156161
     
    194199                                                        for ( var i = 0 ; i < pluginsArray.length ; i++ )
    195200                                                        {
    196201                                                                var plugin = pluginsArray[ i ];
     202                                                               
     203                                                                // Bypass those without definiton.
     204                                                                if( !plugin )
     205                                                                        continue;
    197206
    198207                                                                // Uses the first loop to update the language entries also.
    199208                                                                if ( m === 0 && languageCodes[ i ] && plugin.lang )
     
    199208                                                                if ( m === 0 && languageCodes[ i ] && plugin.lang )
    200209                                                                        CKEDITOR.tools.extend( editor.lang, plugin.lang[ languageCodes[ i ] ] );
    201210
    202                                                                 // Call the plugin method (beforeInit and init).
    203                                                                 if ( plugin[ methods[ m ] ] )
     211                                                                // Call the plugin method (beforeInit and init) unless it's failed in loading.
     212                                                                if ( !plugin._failed && plugin[ methods[ m ] ] )
    204213                                                                        plugin[ methods[ m ] ]( editor );
    205214                                                        }
    206215                                                }
  • _source/core/resourcemanager.js

     
    206206                                resources[ name ] = this.get( name );
    207207                }
    208208
    209                 CKEDITOR.scriptLoader.load( urls, function( completed, failed )
     209                CKEDITOR.scriptLoader.load( urls, function( completed, faileds )
    210210                        {
    211                                 if ( failed.length )
     211                                if( faileds.length )
    212212                                {
    213                                         throw '[CKEDITOR.resourceManager.load] Resource name "' + urlsNames[ failed[ 0 ] ].join( ',' )
    214                                                 + '" was not found at "' + failed[ 0 ] + '".';
     213                                        var failedNames = [];
     214                                        for ( var i = 0; i < faileds.length; i++ )
     215                                        {
     216                                                var names = urlsNames[ faileds[ i ] ];
     217                                                for ( var j = 0; j < names.length; j++ )
     218                                                        failedNames.push(  names[ j ] );
     219                                        }
    215220                                }
    216 
    217                                 for ( var i = 0 ; i < completed.length ; i++ )
     221                                for ( i = 0 ; i < completed.length ; i++ )
    218222                                {
    219223                                        var nameList = urlsNames[ completed[ i ] ];
    220                                         for ( var j = 0 ; j < nameList.length ; j++ )
     224                                        for ( j = 0 ; j < nameList.length ; j++ )
    221225                                        {
    222226                                                var name = nameList[ j ];
    223227                                                resources[ name ] = this.get( name );
     
    226230                                        }
    227231                                }
    228232
    229                                 callback.call( scope, resources );
     233                                callback.call( scope, resources, failedNames );
    230234                        }
    231235                        , this);
    232236        }
  • _source/core/plugins.js

     
    2424        {
    2525                return function( name, callback, scope )
    2626                {
    27                         var allPlugins = {};
     27                        var allPlugins = {}, failedPlugins = {};
    2828
    2929                        var loadPlugins = function( names )
    3030                        {
    31                                 originalLoad.call( this, names, function( plugins )
     31                                originalLoad.call( this, names, function( plugins , faileds )
    3232                                        {
     33                                                // Record failed plugin names on each load.
     34                                                if( faileds && faileds.length )
     35                                                {
     36                                                        for (var i = 0; i < faileds.length; i++ )
     37                                                        {
     38                                                                failedPlugins[ faileds [ i ] ] = 1;
     39                                                        }
     40                                                }
     41                                                       
    3342                                                CKEDITOR.tools.extend( allPlugins, plugins );
    34 
     43                                               
    3544                                                var requiredPlugins = [];
    3645                                                for ( var pluginName in plugins )
    3746                                                {
     
    4049
    4150                                                        if ( requires )
    4251                                                        {
    43                                                                 for ( var i = 0 ; i < requires.length ; i++ )
     52                                                                for ( i = 0 ; i < requires.length ; i++ )
    4453                                                                {
    4554                                                                        if ( !allPlugins[ requires[ i ] ] )
    4655                                                                                requiredPlugins.push( requires[ i ] );
     
    5665                                                        for ( pluginName in allPlugins )
    5766                                                        {
    5867                                                                plugin = allPlugins[ pluginName ];
    59                                                                 if ( plugin.onLoad && !plugin.onLoad._called )
     68                                                               
     69                                                                // Bypass those without definiton.
     70                                                                if( !plugin )
     71                                                                        continue;
     72                                                                       
     73                                                                if( plugin.requires )
     74                                                                {
     75                                                                        // Mark those plugins which depend on failed ones as failed also.
     76                                                                        for ( var j = 0; j< plugin.requires.length; j++ )
     77                                                                                if ( plugin.requires[ j ] in failedPlugins )
     78                                                                                                plugin._failed = true;
     79                                                                }
     80                                                                                       
     81                                                                if ( plugin.onLoad && !plugin.onLoad._called && !plugin._failed )
    6082                                                                {
    6183                                                                        plugin.onLoad();
    6284                                                                        plugin.onLoad._called = 1;
© 2003 – 2022, CKSource sp. z o.o. sp.k. All rights reserved. | Terms of use | Privacy policy