/* Copyright (c) 2006, Yahoo! Inc. All rights reserved. Code licensed under the BSD License: http://developer.yahoo.net/yui/license.txt Version: 0.11.4 */ /** * The CustomEvent class lets you define events for your application * that can be subscribed to by one or more independent component. * * @param {String} type The type of event, which is passed to the callback * when the event fires * @param {Object} oScope The context the event will fire from. "this" will * refer to this object in the callback. Default value: * the window object. The listener can override this. * @param {boolean} silent pass true to prevent the event from writing to * the log system * @namespace YAHOO.util * @class CustomEvent * @constructor */ YAHOO.util.CustomEvent = function(type, oScope, silent) { /** * The type of event, returned to subscribers when the event fires * @property type * @type string */ this.type = type; /** * The scope the the event will fire from by default. Defaults to the window * obj * @property scope * @type object */ this.scope = oScope || window; /** * By default all custom events are logged in the debug build, set silent * to true to disable logging for this event. * @property silent * @type boolean */ this.silent = silent; /** * The subscribers to this event * @property subscribers * @type Subscriber[] */ this.subscribers = []; if (!this.silent) { } // Only add subscribe events for events that are not generated by CustomEvent //if (oScope && (oScope.constructor != this.constructor)) { /* * Custom events provide a custom event that fires whenever there is * a new subscriber to the event. This provides an opportunity to * handle the case where there is a non-repeating event that has * already fired has a new subscriber. * * type CustomEvent */ //this.subscribeEvent = //new YAHOO.util.CustomEvent("subscribe", this, true); //} }; YAHOO.util.CustomEvent.prototype = { /** * Subscribes the caller to this event * @method subscribe * @param {Function} fn The function to execute * @param {Object} obj An object to be passed along when the event fires * @param {boolean} bOverride If true, the obj passed in becomes the execution * scope of the listener */ subscribe: function(fn, obj, bOverride) { //if (this.subscribeEvent) { //this.subscribeEvent.fire(fn, obj, bOverride); //} this.subscribers.push( new YAHOO.util.Subscriber(fn, obj, bOverride) ); }, /** * Unsubscribes the caller from this event * @method unsubscribe * @param {Function} fn The function to execute * @param {Object} obj An object to be passed along when the event fires * @return {boolean} True if the subscriber was found and detached. */ unsubscribe: function(fn, obj) { var found = false; for (var i=0, len=this.subscribers.length; i * - The type of event * - All of the arguments fire() was executed with as an array * - The custom object (if any) that was passed into the subscribe() method * * @method fire * @param {Array} an arbitrary set of parameters to pass to the handler */ fire: function() { var len=this.subscribers.length; if (!len && this.silent) { return; } var args = []; for (var i=0; i= 0) { cacheItem = listeners[index]; } if (!el || !cacheItem) { return false; } if (this.useLegacyEvent(el, sType)) { var legacyIndex = this.getLegacyIndex(el, sType); var llist = legacyHandlers[legacyIndex]; if (llist) { for (i=0, len=llist.length; i 0); } // Delayed listeners var stillDelayed = []; for (var i=0,len=delayedListeners.length; i 0) { for (var i=0,len=listeners.length; i 0) { //for (i=0,len=listeners.length; i