1 /* 2 Copyright (c) 2003-2012, 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( 18 '_source/' + // @Packager.RemoveLine 19 'plugins/', 'plugin' ); 20 21 // PACKAGER_RENAME( CKEDITOR.plugins ) 22 23 CKEDITOR.plugins.load = CKEDITOR.tools.override( CKEDITOR.plugins.load, function( originalLoad ) 24 { 25 return function( name, callback, scope ) 26 { 27 var allPlugins = {}; 28 29 var loadPlugins = function( names ) 30 { 31 originalLoad.call( this, names, function( plugins ) 32 { 33 CKEDITOR.tools.extend( allPlugins, plugins ); 34 35 var requiredPlugins = []; 36 for ( var pluginName in plugins ) 37 { 38 var plugin = plugins[ pluginName ], 39 requires = plugin && plugin.requires; 40 41 if ( requires ) 42 { 43 for ( var i = 0 ; i < requires.length ; i++ ) 44 { 45 if ( !allPlugins[ requires[ i ] ] ) 46 requiredPlugins.push( requires[ i ] ); 47 } 48 } 49 } 50 51 if ( requiredPlugins.length ) 52 loadPlugins.call( this, requiredPlugins ); 53 else 54 { 55 // Call the "onLoad" function for all plugins. 56 for ( pluginName in allPlugins ) 57 { 58 plugin = allPlugins[ pluginName ]; 59 if ( plugin.onLoad && !plugin.onLoad._called ) 60 { 61 plugin.onLoad(); 62 plugin.onLoad._called = 1; 63 } 64 } 65 66 // Call the callback. 67 if ( callback ) 68 callback.call( scope || window, allPlugins ); 69 } 70 } 71 , this); 72 73 }; 74 75 loadPlugins.call( this, name ); 76 }; 77 }); 78 79 /** 80 * Loads a specific language file, or auto detect it. A callback is 81 * then called when the file gets loaded. 82 * @param {String} pluginName The name of the plugin to which the provided translation 83 * should be attached. 84 * @param {String} languageCode The code of the language translation provided. 85 * @param {Object} languageEntries An object that contains pairs of label and 86 * the respective translation. 87 * @example 88 * CKEDITOR.plugins.setLang( 'myPlugin', 'en', { 89 * title : 'My plugin', 90 * selectOption : 'Please select an option' 91 * } ); 92 */ 93 CKEDITOR.plugins.setLang = function( pluginName, languageCode, languageEntries ) 94 { 95 var plugin = this.get( pluginName ), 96 pluginLangEntries = plugin.langEntries || ( plugin.langEntries = {} ), 97 pluginLang = plugin.lang || ( plugin.lang = [] ); 98 99 if ( CKEDITOR.tools.indexOf( pluginLang, languageCode ) == -1 ) 100 pluginLang.push( languageCode ); 101 102 pluginLangEntries[ languageCode ] = languageEntries; 103 }; 104