/* Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ /** * @fileOverview Defines the {@link CKEDITOR.plugins} object, which is used to * manage plugins registration and loading. */ /** * Manages plugins registration and loading. * @namespace * @augments CKEDITOR.resourceManager * @example */ CKEDITOR.plugins = new CKEDITOR.resourceManager( '_source/' + // @Packager.RemoveLine 'plugins/', 'plugin' ); // PACKAGER_RENAME( CKEDITOR.plugins ) CKEDITOR.plugins.load = CKEDITOR.tools.override( CKEDITOR.plugins.load, function( originalLoad ) { return function( name, callback, scope ) { var allPlugins = {}; var loadPlugins = function( names ) { originalLoad.call( this, names, function( plugins ) { CKEDITOR.tools.extend( allPlugins, plugins ); var requiredPlugins = []; for ( var pluginName in plugins ) { var plugin = plugins[ pluginName ], requires = plugin && plugin.requires; if ( requires ) { for ( var i = 0 ; i < requires.length ; i++ ) { if ( !allPlugins[ requires[ i ] ] ) requiredPlugins.push( requires[ i ] ); } } } if ( requiredPlugins.length ) loadPlugins.call( this, requiredPlugins ); else { // Call the "onLoad" function for all plugins. for ( pluginName in allPlugins ) { plugin = allPlugins[ pluginName ]; if ( plugin.onLoad && !plugin.onLoad._called ) { plugin.onLoad(); plugin.onLoad._called = 1; } } // Call the callback. if ( callback ) callback.call( scope || window, allPlugins ); } } , this); }; loadPlugins.call( this, name ); }; }); /** * Loads a specific language file, or auto detect it. A callback is * then called when the file gets loaded. * @param {String} pluginName The name of the plugin to which the provided translation * should be attached. * @param {String} languageCode The code of the language translation provided. * @param {Object} languageEntries An object that contains pairs of label and * the respective translation. * @example * CKEDITOR.plugins.setLang( 'myPlugin', 'en', { * title : 'My plugin', * selectOption : 'Please select an option' * } ); */ CKEDITOR.plugins.setLang = function( pluginName, languageCode, languageEntries ) { var plugin = this.get( pluginName ), pluginLangEntries = plugin.langEntries || ( plugin.langEntries = {} ), pluginLang = plugin.lang || ( plugin.lang = [] ); if ( CKEDITOR.tools.indexOf( pluginLang, languageCode ) == -1 ) pluginLang.push( languageCode ); pluginLangEntries[ languageCode ] = languageEntries; };