1 /*
  2 Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.
  3 For licensing, see LICENSE.html or http://ckeditor.com/license
  4 */
  5
  6 /**
  7  * @fileOverview Defines the {@link CKEDITOR.plugins} object, which is used to
  8  *		manage plugins registration and loading.
  9  */
 10
 11 /**
 12  * Manages plugins registration and loading.
 13  * @namespace
 14  * @augments CKEDITOR.resourceManager
 15  * @example
 16  */
 17 CKEDITOR.plugins = new CKEDITOR.resourceManager(
 19 	'plugins/', 'plugin' );
 20
 21 CKEDITOR.plugins.load = CKEDITOR.tools.override( CKEDITOR.plugins.load, function( originalLoad )
 22 	{
 23 		return function( name, callback, scope )
 24 		{
 25 			var allPlugins = {};
 26
 27 			var loadPlugins = function( names )
 28 			{
 29 				originalLoad.call( this, names, function( plugins )
 30 					{
 31 						CKEDITOR.tools.extend( allPlugins, plugins );
 32
 33 						var requiredPlugins = [];
 34 						for ( var pluginName in plugins )
 35 						{
 36 							var plugin = plugins[ pluginName ],
 37 								requires = plugin && plugin.requires;
 38
 39 							if ( requires )
 40 							{
 41 								for ( var i = 0 ; i < requires.length ; i++ )
 42 								{
 43 									if ( !allPlugins[ requires[ i ] ] )
 44 										requiredPlugins.push( requires[ i ] );
 45 								}
 46 							}
 47 						}
 48
 49 						if ( requiredPlugins.length )
 50 							loadPlugins.call( this, requiredPlugins );
 51 						else if ( callback )
 52 							callback.call( scope || window, allPlugins );
 53 					}
 54 					, this);
 55
 56 			};
 57
 58 			loadPlugins.call( this, name );
 59 		};
 60 	});
 61
 62 CKEDITOR.plugins.setLang = function( pluginName, languageCode, languageEntries )
 63 {
 64 	var plugin = this.get( pluginName );
 65 	plugin.lang[ languageCode ] = languageEntries;
 66 };
 67