X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/0494b8d9b9bb03ab6c22b34dae81261e3cd7e3e6..7a654f8d43fdb43d78b63d90528bed6e86b608cc:/src/PluginManager.js diff --git a/src/PluginManager.js b/src/PluginManager.js new file mode 100644 index 00000000..5c701f4e --- /dev/null +++ b/src/PluginManager.js @@ -0,0 +1,96 @@ +/** + * @class Ext.PluginManager + * @extends Ext.AbstractManager + *

Provides a registry of available Plugin classes indexed by a mnemonic code known as the Plugin's ptype. + * The {@link Ext.Component#xtype xtype} provides a way to avoid instantiating child Components + * when creating a full, nested config object for a complete Ext page.

+ *

A child Component may be specified simply as a config object + * as long as the correct {@link Ext.Component#xtype xtype} is specified so that if and when the Component + * needs rendering, the correct type can be looked up for lazy instantiation.

+ *

For a list of all available {@link Ext.Component#xtype xtypes}, see {@link Ext.Component}.

+ * @singleton + */ +Ext.define('Ext.PluginManager', { + extend: 'Ext.AbstractManager', + alternateClassName: 'Ext.PluginMgr', + singleton: true, + typeName: 'ptype', + + /** + * Creates a new Plugin from the specified config object using the + * config object's ptype to determine the class to instantiate. + * @param {Object} config A configuration object for the Plugin you wish to create. + * @param {Constructor} defaultType The constructor to provide the default Plugin type if + * the config object does not contain a ptype. (Optional if the config contains a ptype). + * @return {Ext.Component} The newly instantiated Plugin. + */ + //create: function(plugin, defaultType) { + // if (plugin instanceof this) { + // return plugin; + // } else { + // var type, config = {}; + // + // if (Ext.isString(plugin)) { + // type = plugin; + // } + // else { + // type = plugin[this.typeName] || defaultType; + // config = plugin; + // } + // + // return Ext.createByAlias('plugin.' + type, config); + // } + //}, + + create : function(config, defaultType){ + if (config.init) { + return config; + } else { + return Ext.createByAlias('plugin.' + (config.ptype || defaultType), config); + } + + // Prior system supported Singleton plugins. + //var PluginCls = this.types[config.ptype || defaultType]; + //if (PluginCls.init) { + // return PluginCls; + //} else { + // return new PluginCls(config); + //} + }, + + /** + * Returns all plugins registered with the given type. Here, 'type' refers to the type of plugin, not its ptype. + * @param {String} type The type to search for + * @param {Boolean} defaultsOnly True to only return plugins of this type where the plugin's isDefault property is truthy + * @return {Array} All matching plugins + */ + findByType: function(type, defaultsOnly) { + var matches = [], + types = this.types; + + for (var name in types) { + if (!types.hasOwnProperty(name)) { + continue; + } + var item = types[name]; + + if (item.type == type && (!defaultsOnly || (defaultsOnly === true && item.isDefault))) { + matches.push(item); + } + } + + return matches; + } +}, function() { + /** + * Shorthand for {@link Ext.PluginManager#registerType} + * @param {String} ptype The ptype mnemonic string by which the Plugin class + * may be looked up. + * @param {Constructor} cls The new Plugin class. + * @member Ext + * @method preg + */ + Ext.preg = function() { + return Ext.PluginManager.registerType.apply(Ext.PluginManager, arguments); + }; +});