123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- /**
- * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md 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.
- *
- * @class
- * @extends CKEDITOR.resourceManager
- * @singleton
- */
- CKEDITOR.plugins = new CKEDITOR.resourceManager( 'plugins/', 'plugin' );
- // PACKAGER_RENAME( CKEDITOR.plugins )
- CKEDITOR.plugins.load = CKEDITOR.tools.override( CKEDITOR.plugins.load, function( originalLoad ) {
- var initialized = {};
- 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 ( !initialized[ pluginName ] ) {
- // Register all icons eventually defined by this plugin.
- if ( plugin.icons ) {
- var icons = plugin.icons.split( ',' );
- for ( var ic = icons.length; ic--; ) {
- CKEDITOR.skin.addIcon( icons[ ic ],
- plugin.path +
- 'icons/' +
- ( CKEDITOR.env.hidpi && plugin.hidpi ? 'hidpi/' : '' ) +
- icons[ ic ] +
- '.png' );
- }
- }
- initialized[ pluginName ] = 1;
- }
- if ( requires ) {
- // Trasnform it into an array, if it's not one.
- if ( requires.split )
- requires = requires.split( ',' );
- 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 ) {
- // Make it possible to return false from plugin::onLoad to disable it.
- if ( plugin.onLoad() === false )
- delete allPlugins[ pluginName ];
- 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.
- *
- * CKEDITOR.plugins.setLang( 'myPlugin', 'en', {
- * title: 'My plugin',
- * selectOption: 'Please select an option'
- * } );
- *
- * @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.
- */
- CKEDITOR.plugins.setLang = function( pluginName, languageCode, languageEntries ) {
- var plugin = this.get( pluginName ),
- pluginLangEntries = plugin.langEntries || ( plugin.langEntries = {} ),
- pluginLang = plugin.lang || ( plugin.lang = [] );
- if ( pluginLang.split )
- pluginLang = pluginLang.split( ',' );
- if ( CKEDITOR.tools.indexOf( pluginLang, languageCode ) == -1 )
- pluginLang.push( languageCode );
- pluginLangEntries[ languageCode ] = languageEntries;
- };
|