diff -r 000000000000 -r 40c8f766c9b8 src/cm/media/js/lib/yui/yui_3.0.0b1/build/plugin/plugin.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/cm/media/js/lib/yui/yui_3.0.0b1/build/plugin/plugin.js Mon Nov 23 15:14:29 2009 +0100 @@ -0,0 +1,171 @@ +/* +Copyright (c) 2009, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.net/yui/license.txt +version: 3.0.0b1 +build: 1163 +*/ +YUI.add('plugin', function(Y) { + + /** + * Provides the base Plugin class, which plugin developers should extend, when creating custom plugins + * + * @module plugin + */ + + /** + * The base class for all Plugin instances. + * + * @class Plugin.Base + * @extends Base + * @param {Object} config Configuration object with property name/value pairs. + */ + function Plugin(config) { + Plugin.superclass.constructor.apply(this, arguments); + } + + /** + * Object defining the set of attributes supported by the Plugin.Base class + * + * @property Plugin.Base.ATTRS + * @type Object + * @static + */ + Plugin.ATTRS = { + + /** + * The plugin's host object. + * + * @attribute host + * @writeonce + * @type Plugin.Host + */ + host : { + writeOnce: true + } + }; + + /** + * The string identifying the Plugin.Base class. Plugins extending + * Plugin.Base should set their own NAME value. + * + * @property Plugin.Base.NAME + * @type String + * @static + */ + Plugin.NAME = 'plugin'; + + /** + * The name of the property the the plugin will be attached to + * when plugged into a Plugin Host. Plugins extending Plugin.Base, + * should set their own NS value. + * + * @property Plugin.NS + * @type String + * @static + */ + Plugin.NS = 'plugin'; + + Y.extend(Plugin, Y.Base, { + + /** + * The list of event handles for event listeners or AOP injected methods + * applied by the plugin to the host object. + * + * @property _handles + * @private + * @type Array + * @value null + */ + _handles: null, + + /** + * Initializer lifecycle implementation. + * + * @method initializer + * @param {Object} config Configuration object with property name/value pairs. + */ + initializer : function(config) { + this._handles = []; + }, + + /** + * Destructor lifecycle implementation. + * + * Removes any event listeners or injected methods applied by the Plugin + * + * @method destructor + */ + destructor: function() { + // remove all handles + if (this._handles) { + for (var i = 0, l = this._handles.length; i < l; i++) { + this._handles[i].detach(); + } + } + }, + + /** + * Listens for the "on" moment of events fired by the host, + * or injects code "before" a given method on the host. + * + * @method doBefore + * + * @param sFn {String} The event to listen for, or method to inject logic before. + * @param fn {Function} The handler function. For events, the "on" moment listener. For methods, the function to execute before the given method is executed. + * @param context {Object} An optional context to call the handler with. The default context is the plugin instance. + * @return handle {EventHandle} The detach handle for the handler. + */ + doBefore: function(sFn, fn, context) { + var host = this.get("host"), + handle; + + context = context || this; + + if (sFn in host) { // method + handle = Y.Do.before(fn, host, sFn, context); + } else if (host.on) { // event + handle = host.on(sFn, fn, context); + } + + this._handles.push(handle); + return handle; + }, + + /** + * Listens for the "after" moment of events fired by the host, + * or injects code "after" a given method on the host. + * + * @method doAfter + * + * @param sFn {String} The event to listen for, or method to inject logic after. + * @param fn {Function} The handler function. For events, the "after" moment listener. For methods, the function to execute after the given method is executed. + * @param context {Object} An optional context to call the handler with. The default context is the plugin instance. + * @return handle {EventHandle} The detach handle for the handler. + */ + doAfter: function(sFn, fn, context) { + var host = this.get("host"), + handle; + + context = context || this; + + if (sFn in host) { // method + handle = Y.Do.after(fn, host, sFn, context); + } else if (host.after) { // event + handle = host.after(sFn, fn, context); + } + + this._handles.push(handle); + return handle; + }, + + toString: function() { + return this.constructor.NAME + '[' + this.constructor.NS + ']'; + } + }); + + Y.namespace("Plugin").Base = Plugin; + + + +}, '3.0.0b1' ,{requires:['base']});