Index: openacs-4/packages/ajaxhelper/www/resources/yui/event/event.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/yui/event/event.js,v diff -u -r1.1 -r1.2 --- openacs-4/packages/ajaxhelper/www/resources/yui/event/event.js 21 Oct 2006 06:14:57 -0000 1.1 +++ openacs-4/packages/ajaxhelper/www/resources/yui/event/event.js 25 Dec 2006 16:40:02 -0000 1.2 @@ -2,7 +2,7 @@ Copyright (c) 2006, Yahoo! Inc. All rights reserved. Code licensed under the BSD License: http://developer.yahoo.net/yui/license.txt -version: 0.11.3 +version: 0.12.1 */ /** @@ -15,77 +15,148 @@ * 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 + * the debugsystem + * @param {int} signature the signature that the custom event subscriber + * will receive. YAHOO.util.CustomEvent.LIST or + * YAHOO.util.CustomEvent.FLAT. The default is + * YAHOO.util.CustomEvent.LIST. + * @namespace YAHOO.util + * @class CustomEvent * @constructor */ -YAHOO.util.CustomEvent = function(type, oScope, silent) { +YAHOO.util.CustomEvent = function(type, oScope, silent, signature) { /** * 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. + * to true to disable debug outpu for this event. + * @property silent * @type boolean */ this.silent = silent; /** + * Custom events support two styles of arguments provided to the event + * subscribers. + * + * @property signature + * @type int + */ + this.signature = signature || YAHOO.util.CustomEvent.LIST; + + /** * 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)) { + var onsubscribeType = "_YUICEOnSubscribe"; - /* + // Only add subscribe events for events that are not generated by + // CustomEvent + if (type !== onsubscribeType) { + + /** * 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 + * @event subscribeEvent + * @type YAHOO.util.CustomEvent + * @param {Function} fn The function to execute + * @param {Object} obj An object to be passed along when the event + * fires + * @param {boolean|Object} override If true, the obj passed in becomes + * the execution scope of the listener. + * if an object, that object becomes the + * the execution scope. */ - //this.subscribeEvent = - //new YAHOO.util.CustomEvent("subscribe", this, true); + this.subscribeEvent = + new YAHOO.util.CustomEvent(onsubscribeType, this, true); - //} + } }; +/** + * Subscriber listener sigature constant. The LIST type returns three + * parameters: the event type, the array of args passed to fire, and + * the optional custom object + * @property YAHOO.util.CustomEvent.LIST + * @static + * @type int + */ +YAHOO.util.CustomEvent.LIST = 0; + +/** + * Subscriber listener sigature constant. The FLAT type returns two + * parameters: the first argument passed to fire and the optional + * custom object + * @property YAHOO.util.CustomEvent.FLAT + * @static + * @type int + */ +YAHOO.util.CustomEvent.FLAT = 1; + YAHOO.util.CustomEvent.prototype = { + /** * Subscribes the caller to this event - * @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 + * @method subscribe + * @param {Function} fn The function to execute + * @param {Object} obj An object to be passed along when the event + * fires + * @param {boolean|Object} override If true, the obj passed in becomes + * the execution scope of the listener. + * if an object, that object becomes the + * the execution scope. */ - subscribe: function(fn, obj, bOverride) { - //if (this.subscribeEvent) { - //this.subscribeEvent.fire(fn, obj, bOverride); - //} + subscribe: function(fn, obj, override) { + if (this.subscribeEvent) { + this.subscribeEvent.fire(fn, obj, override); + } - this.subscribers.push( new YAHOO.util.Subscriber(fn, obj, bOverride) ); + this.subscribers.push( new YAHOO.util.Subscriber(fn, obj, override) ); }, /** * 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 + * @param {Object} obj The custom object passed to subscribe (optional) * @return {boolean} True if the subscriber was found and detached. */ unsubscribe: function(fn, obj) { @@ -103,28 +174,34 @@ /** * Notifies the subscribers. The callback functions will be executed - * from the scope specified when the event was created, and with the following - * parameters: - *
-     *   - 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
-     *   
- * - * @param {Array} an arbitrary set of parameters to pass to the handler + * from the scope specified when the event was created, and with the + * following parameters: + * + * @method fire + * @param {Object*} arguments an arbitrary set of parameters to pass to + * the handler. + * @return {boolean} false if one of the subscribers returned false, + * true otherwise */ fire: function() { var len=this.subscribers.length; if (!len && this.silent) { - return; + return true; } - var args = []; + var args=[], ret=true, i; - for (var i=0; i 0) { + param = args[0]; + } + ret = s.fn.call(scope, param, s.obj); + } else { + ret = s.fn.call(scope, this.type, args, s.obj); + } + if (false === ret) { + if (!this.silent) { + } + + //break; + return false; + } } } + + return true; }, /** * Removes all listeners + * @method unsubscribeAll */ unsubscribeAll: function() { for (var i=0, len=this.subscribers.length; i