X-Git-Url: https://scm.cri.ensmp.fr/git/ckeditor.git/blobdiff_plain/256592bf803e851aa7fc953e08a6e9e58d970f8c..871bad8291b6dbc29d489d95d185458caab25158:/skins/ckeditor/_source/core/resourcemanager.js
diff --git a/skins/ckeditor/_source/core/resourcemanager.js b/skins/ckeditor/_source/core/resourcemanager.js
new file mode 100644
index 0000000..4dab1d7
--- /dev/null
+++ b/skins/ckeditor/_source/core/resourcemanager.js
@@ -0,0 +1,238 @@
+/*
+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.resourceManager} class, which is
+ * the base for resource managers, like plugins and themes.
+ */
+
+ /**
+ * Base class for resource managers, like plugins and themes. This class is not
+ * intended to be used out of the CKEditor core code.
+ * @param {String} basePath The path for the resources folder.
+ * @param {String} fileName The name used for resource files.
+ * @namespace
+ * @example
+ */
+CKEDITOR.resourceManager = function( basePath, fileName )
+{
+ /**
+ * The base directory containing all resources.
+ * @name CKEDITOR.resourceManager.prototype.basePath
+ * @type String
+ * @example
+ */
+ this.basePath = basePath;
+
+ /**
+ * The name used for resource files.
+ * @name CKEDITOR.resourceManager.prototype.fileName
+ * @type String
+ * @example
+ */
+ this.fileName = fileName;
+
+ /**
+ * Contains references to all resources that have already been registered
+ * with {@link #add}.
+ * @name CKEDITOR.resourceManager.prototype.registered
+ * @type Object
+ * @example
+ */
+ this.registered = {};
+
+ /**
+ * Contains references to all resources that have already been loaded
+ * with {@link #load}.
+ * @name CKEDITOR.resourceManager.prototype.loaded
+ * @type Object
+ * @example
+ */
+ this.loaded = {};
+
+ /**
+ * Contains references to all resources that have already been registered
+ * with {@link #addExternal}.
+ * @name CKEDITOR.resourceManager.prototype.externals
+ * @type Object
+ * @example
+ */
+ this.externals = {};
+
+ /**
+ * @private
+ */
+ this._ =
+ {
+ // List of callbacks waiting for plugins to be loaded.
+ waitingList : {}
+ };
+};
+
+CKEDITOR.resourceManager.prototype =
+{
+ /**
+ * Registers a resource.
+ * @param {String} name The resource name.
+ * @param {Object} [definition] The resource definition.
+ * @example
+ * CKEDITOR.plugins.add( 'sample', { ... plugin definition ... } );
+ * @see CKEDITOR.pluginDefinition
+ */
+ add : function( name, definition )
+ {
+ if ( this.registered[ name ] )
+ throw '[CKEDITOR.resourceManager.add] The resource name "' + name + '" is already registered.';
+
+ CKEDITOR.fire( name + CKEDITOR.tools.capitalize( this.fileName ) + 'Ready',
+ this.registered[ name ] = definition || {} );
+ },
+
+ /**
+ * Gets the definition of a specific resource.
+ * @param {String} name The resource name.
+ * @type Object
+ * @example
+ * var definition = CKEDITOR.plugins.get( 'sample' );
+ */
+ get : function( name )
+ {
+ return this.registered[ name ] || null;
+ },
+
+ /**
+ * Get the folder path for a specific loaded resource.
+ * @param {String} name The resource name.
+ * @type String
+ * @example
+ * alert( CKEDITOR.plugins.getPath( 'sample' ) ); // "<editor path>/plugins/sample/"
+ */
+ getPath : function( name )
+ {
+ var external = this.externals[ name ];
+ return CKEDITOR.getUrl( ( external && external.dir ) || this.basePath + name + '/' );
+ },
+
+ /**
+ * Get the file path for a specific loaded resource.
+ * @param {String} name The resource name.
+ * @type String
+ * @example
+ * alert( CKEDITOR.plugins.getFilePath( 'sample' ) ); // "<editor path>/plugins/sample/plugin.js"
+ */
+ getFilePath : function( name )
+ {
+ var external = this.externals[ name ];
+ return CKEDITOR.getUrl(
+ this.getPath( name ) +
+ ( ( external && ( typeof external.file == 'string' ) ) ? external.file : this.fileName + '.js' ) );
+ },
+
+ /**
+ * Registers one or more resources to be loaded from an external path
+ * instead of the core base path.
+ * @param {String} names The resource names, separated by commas.
+ * @param {String} path The path of the folder containing the resource.
+ * @param {String} [fileName] The resource file name. If not provided, the
+ * default name is used; If provided with a empty string, will implicitly indicates that {@param path}
+ * is already the full path.
+ * @example
+ * // Loads a plugin from '/myplugin/samples/plugin.js'.
+ * CKEDITOR.plugins.addExternal( 'sample', '/myplugins/sample/' );
+ * @example
+ * // Loads a plugin from '/myplugin/samples/my_plugin.js'.
+ * CKEDITOR.plugins.addExternal( 'sample', '/myplugins/sample/', 'my_plugin.js' );
+ * @example
+ * // Loads a plugin from '/myplugin/samples/my_plugin.js'.
+ * CKEDITOR.plugins.addExternal( 'sample', '/myplugins/sample/my_plugin.js', '' );
+ */
+ addExternal : function( names, path, fileName )
+ {
+ names = names.split( ',' );
+ for ( var i = 0 ; i < names.length ; i++ )
+ {
+ var name = names[ i ];
+
+ this.externals[ name ] =
+ {
+ dir : path,
+ file : fileName
+ };
+ }
+ },
+
+ /**
+ * Loads one or more resources.
+ * @param {String|Array} name The name of the resource to load. It may be a
+ * string with a single resource name, or an array with several names.
+ * @param {Function} callback A function to be called when all resources
+ * are loaded. The callback will receive an array containing all
+ * loaded names.
+ * @param {Object} [scope] The scope object to be used for the callback
+ * call.
+ * @example
+ * CKEDITOR.plugins.load( 'myplugin', function( plugins )
+ * {
+ * alert( plugins['myplugin'] ); // "object"
+ * });
+ */
+ load : function( names, callback, scope )
+ {
+ // Ensure that we have an array of names.
+ if ( !CKEDITOR.tools.isArray( names ) )
+ names = names ? [ names ] : [];
+
+ var loaded = this.loaded,
+ registered = this.registered,
+ urls = [],
+ urlsNames = {},
+ resources = {};
+
+ // Loop through all names.
+ for ( var i = 0 ; i < names.length ; i++ )
+ {
+ var name = names[ i ];
+
+ if ( !name )
+ continue;
+
+ // If not available yet.
+ if ( !loaded[ name ] && !registered[ name ] )
+ {
+ var url = this.getFilePath( name );
+ urls.push( url );
+ if ( !( url in urlsNames ) )
+ urlsNames[ url ] = [];
+ urlsNames[ url ].push( name );
+ }
+ else
+ resources[ name ] = this.get( name );
+ }
+
+ CKEDITOR.scriptLoader.load( urls, function( completed, failed )
+ {
+ if ( failed.length )
+ {
+ throw '[CKEDITOR.resourceManager.load] Resource name "' + urlsNames[ failed[ 0 ] ].join( ',' )
+ + '" was not found at "' + failed[ 0 ] + '".';
+ }
+
+ for ( var i = 0 ; i < completed.length ; i++ )
+ {
+ var nameList = urlsNames[ completed[ i ] ];
+ for ( var j = 0 ; j < nameList.length ; j++ )
+ {
+ var name = nameList[ j ];
+ resources[ name ] = this.get( name );
+
+ loaded[ name ] = 1;
+ }
+ }
+
+ callback.call( scope, resources );
+ }
+ , this);
+ }
+};